/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKMskmDtlCC
 *   ソースファイル名：JKKMskmDtlCC.java
 *   作成者          ：富士通
 *   日付            ：2021年12月14日
 *＜機能概要＞
 *   申込明細処理部品
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v56.00.00   2021/12/14   FJ）杉本    新規作成
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKChokiWribConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B024CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B024CBSMsg1List;


/**
 * 申込明細を扱う処理を行う。
 * @author 富士通
 *
 */
public class JKKMskmDtlCC extends AbstractCommonComponent
{
	/** SC呼び出し部品 */
	private ServiceComponentRequestInvoker scCall = null;
	/** ユーザ任意文字列 */
	private String global_fixedText = null;
	/** 対象移動区分リスト */
	private List<String> tgtIdoDiv = new ArrayList<String>();

	/**
	 * 対象サービスの電子交付同意有無表示対象（異動区分が「新規契約」、「サービス追加」、「住所変更・登録」）<br>
	 * である申込明細の照会処理を行います。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getDnskhDoiUmTgtMskmDtl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// 初期処理
		init(param, fixedText);

		// リクエストパラメータの取得処理
		HashMap<String, Object> trgtData = (HashMap<String, Object>)param.getData(fixedText);
		// サービス契約番号
		String svcKeiNo = (String)trgtData.get("svc_kei_no");

		// 返却値を初期化
		String dnskhDoiUm = null;
		String updDtm = null;
		String mskmDtlNo= null;

		// ■サービス契約履歴一覧照会を実施
		HashMap<String, Object> inMapEKK0081B024 = editInMsgEKK0081B024(param, svcKeiNo);
		CAANMsg outMapEKK0081B024 = callSvcInter(handle, param, inMapEKK0081B024);
		CAANMsg[] rsltMsgEKK0081B024List = outMapEKK0081B024.getCAANMsgList(EKK0081B024CBSMsg.EKK0081B024CBSMSG1LIST);

		if (rsltMsgEKK0081B024List != null && rsltMsgEKK0081B024List.length > 0)
		{
			// サービス契約履歴一覧照会から対象の申込明細番号を特定
			for (CAANMsg data : rsltMsgEKK0081B024List)
			{
				String idoDiv = data.getString(EKK0081B024CBSMsg1List.IDO_DIV);
				if(tgtIdoDiv.contains(idoDiv))
				{
					mskmDtlNo = data.getString(EKK0081B024CBSMsg1List.MSKM_DTL_NO);
					break;
				}
			}

			if (mskmDtlNo != null)
			{
				// ■申込明細一意照会を実施
				HashMap<String, Object> inMapEKK0021A010 = editInMsgEKK0021A010(param, mskmDtlNo);
				CAANMsg outMapEKK0021A010 = callSvcInter(handle, param, inMapEKK0021A010);
				CAANMsg[] rsltMsgEKK0021A010List = outMapEKK0021A010.getCAANMsgList(EKK0021A010CBSMsg.EKK0021A010CBSMSG1LIST);

				if (rsltMsgEKK0021A010List != null && rsltMsgEKK0021A010List.length > 0)
				{
					CAANMsg rsltMsgEKK0021A010 = rsltMsgEKK0021A010List[0];

					// 電子交付同意有無
					dnskhDoiUm = rsltMsgEKK0021A010.getString(EKK0021A010CBSMsg1List.DNSKH_DOI_UM);
					// 更新日時
					updDtm = rsltMsgEKK0021A010.getString(EKK0021A010CBSMsg1List.LAST_UPD_DTM);
				}
			}
		}

		// 返却値を対象データに設定
		trgtData.put("dnskh_doi_um", dnskhDoiUm);
		trgtData.put("mskm_dtl_no", mskmDtlNo);
		trgtData.put("upd_dtm", updDtm);

		return param;
	}

	/**
	 * 初期処理です。
	 * 
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return void
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// SC呼び出し部品のインスタンス生成
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}

		this.global_fixedText = fixedText;

		// コントロールマップのエラー情報を初期化
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, new ArrayList<Object>());

		// 対象異動区分リストの設定
		tgtIdoDiv.add(JKKStrConst.CD00576_00001);
		tgtIdoDiv.add(JKKStrConst.CD00576_00002);
		tgtIdoDiv.add(JKKStrConst.CD00576_ADCHG_ADD);
	}

	/**
	 * EKK0081B024_サービス契約履歴一覧照会
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0081B024(IRequestParameterReadWrite param, String svcKeiNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0081B024CBSMsg.class.getName());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK0081B024CBSMsg.TEMPLATEID, "EKK0081B024");

		// 機能コード
		template.set(EKK0081B024CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_4);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0081B024CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * 条件部の共通する項目の設定する
	 * 
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	private void editInMsgBasicCmn(IRequestParameterReadOnly param, CAANMsg template) throws RequestParameterException
	{
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
	}

	/**
	 * サービスI/F実行用の上り情報を生成する
	 * 
	 * @param param リクエストパラメータ
	 * @param template 条件の設定先
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 * @exception RequestParameterException
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param, CAANMsg template) throws RequestParameterException 
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * サービスインターフェース呼び出し処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param siInMap サービスインターフェースの入力マップ
	 * @return 業務データ
	 * @throws Throwable 
	 */
	private CAANMsg callSvcInter(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> siInMap) throws Throwable
	{

		// サービスインターフェースの呼び出し
		Map<?, ?> rsltMap = this.scCall.run(siInMap, handle);
		// エラーマッピング処理
		editResultRP(rsltMap, param, this.global_fixedText);
		// エラーチェック処理
		errChk(rsltMap);
		// 業務データ取得処理
		CAANMsg workData = getWorkCAANMsg(rsltMap);

		return workData;
	}

	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editResultRP(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);

		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ユーザデータ情報にエラー情報をマッピング
		// 項目の配列を取得
		Object[][] contents = getContents(templateId);

		// エラーIDをマッピング
		mappingErrId(inMap, template, contents);

		// 明細に対するマッピング処理
		// ※明細1のみ対応
		String msg1ListId = templateId + "CBSMsg1List";
		CAANMsg[] templateArray = template.getCAANMsgList(msg1ListId);
		if (templateArray != null)
		{
			ArrayList inList = (ArrayList)inMap.get(msg1ListId);
			if (inList == null)
			{
				inList = new ArrayList();
				inMap.put(msg1ListId, inList);
			}

			for (int i = 0; i < templateArray.length; i++)
			{
				if (i >= inList.size())
				{
					inList.add(new HashMap());
				}

				HashMap childMap = (HashMap)inList.get(i);
				CAANMsg childTemplate = templateArray[i];

				Object[][] msg1ListContents = getContents(msg1ListId);

				mappingErrId(childMap, childTemplate, msg1ListContents);
			}
		}

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

	/**
	 * 各S/IFが保持する項目の配列を取得する
	 * 
	 * @param templateId サービスIF_ID
	 * @return 項目の配列
	 */
	private Object[][] getContents(String templateId)
	{
		Object[][] contents = null;

		if ("EKK0081B024".equals(templateId))
		{
			contents = new EKK0081B024CBSMsg().getContents();
		}
		else if ("EKK0021A010".equals(templateId))
		{
			contents = new EKK0021A010CBSMsg().getContents();
		}

		return contents;
	}

	/**
	 * 各S/IFのエラーIDをマッピングする
	 * 
	 * @param inMap 入力マップ
	 * @param template サービスIFマップ
	 * @param contents サービスIFの項目配列
	 */
	@SuppressWarnings("unchecked")
	private void mappingErrId(
			HashMap inMap,
			CAANMsg template,
			Object[][] contents)
	{
		for(int i = 0 ; contents != null && i < contents.length ; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.endsWith("_err"))
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}
	}

	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws SCCallException 
	 */
	private void errChk(
			Map<?, ?> msgList) 
	throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = JKKChokiWribConstCC.ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}

	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private CAANMsg getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate;
	}

	/**
	 * EKK0021A010_申込明細一意照会
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param mskmDtlNo 申込明細番号
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0021A010(IRequestParameterReadWrite param, String mskmDtlNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0021A010CBSMsg.class.getName());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK0021A010CBSMsg.TEMPLATEID, "EKK0021A010");

		// 機能コード
		template.set(EKK0021A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0021A010CBSMsg.KEY_MSKM_DTL_NO, mskmDtlNo);

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * 対象サービスの電子交付同意有無表示対象（異動区分が「新規契約」、「サービス追加」、「住所変更・登録」）<br>
	 * である申込明細の更新処理を行います。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updDnskhDoiUmTgtMskmDtl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{

		// 初期処理
		init(param, fixedText);

		// リクエストパラメータの取得処理
		HashMap<String, Object> trgtData = (HashMap<String, Object>)param.getData(fixedText);
		// 申込明細番号
		String mskmDtlNo = (String)trgtData.get("mskm_dtl_no");
		// 更新前更新日時
		String bfUpdDtm = (String)trgtData.get("upd_dtm_bf");
		// 電子交付同意有無
		String dnskhDoiUm = (String)trgtData.get("dnskh_doi_um");


		// ■申込明細一意照会を実施
		HashMap<String, Object> inMapEKK0021A010 = editInMsgEKK0021A010(param, mskmDtlNo);
		CAANMsg outMapEKK0021A010 = callSvcInter(handle, param, inMapEKK0021A010);
		CAANMsg[] rsltMsgEKK0021A010List = outMapEKK0021A010.getCAANMsgList(EKK0021A010CBSMsg.EKK0021A010CBSMSG1LIST);

		CAANMsg rsltMsgEKK0021A010 = null;
		if (rsltMsgEKK0021A010List != null && rsltMsgEKK0021A010List.length > 0)
		{
			rsltMsgEKK0021A010 = rsltMsgEKK0021A010List[0];

		}


		// ■申込明細更新を実施
		HashMap<String, Object> inMapEKK0021C040 = editInMsgEKK0021C040(param, mskmDtlNo, bfUpdDtm, dnskhDoiUm, rsltMsgEKK0021A010);
		callSvcInter(handle, param, inMapEKK0021C040);

		return param;
	}

	/**
	 * EKK0021C040_申込明細更新
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param mskmDtlNo 申込明細番号
	 * @param updDtmBf 更新前世代登録年月日時分秒
	 * @param dnskhDoiUm 電子交付同意有無
	 * @param resultEKK0021A010 申込明細一意照会結果
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0021C040(IRequestParameterReadWrite param
			, String mskmDtlNo, String updDtmBf, String dnskhDoiUm, CAANMsg resultEKK0021A010) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0021C040CBSMsg.class.getName());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK0021C040CBSMsg.TEMPLATEID, "EKK0021C040");

		// 機能コード
		template.set(EKK0021C040CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 申込明細番号
		template.set(EKK0021C040CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// 工事アポ連絡先指定コード
		template.set(EKK0021C040CBSMsg.KOJI_APO_RRKS_SHITEI_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD));

		// 工事アポ連絡先電話番号
		template.set(EKK0021C040CBSMsg.KOJI_APO_RRKS_TELNO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KOJI_APO_RRKS_TELNO));

		// 申込書番号
		template.set(EKK0021C040CBSMsg.MSKMSHO_NO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKMSHO_NO));

		// 新築物件コード
		template.set(EKK0021C040CBSMsg.NEWCONST_BUKKEN_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.NEWCONST_BUKKEN_CD));

		// 復活案件フラグ
		template.set(EKK0021C040CBSMsg.HUKKAT_ANKEN_FLG, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.HUKKAT_ANKEN_FLG));

		// 同一設備再申込コード
		template.set(EKK0021C040CBSMsg.SAME_EQUIP_RE_MSKM_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.SAME_EQUIP_RE_MSKM_CD));

		// 申込書明細番号
		template.set(EKK0021C040CBSMsg.MSKMSHO_DTL_NO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKMSHO_DTL_NO));

		// 更新年月日時分秒(更新前)
		template.set(EKK0021C040CBSMsg.UPD_DTM_BF, updDtmBf);

		// 申込年月日
		template.set(EKK0021C040CBSMsg.MSKM_YMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKM_YMD));

		// 申込形態コード
		template.set(EKK0021C040CBSMsg.MSKM_FORM_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKM_FORM_CD));

		// 申込明細種別コード
		template.set(EKK0021C040CBSMsg.MSKM_DTL_SBT_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKM_DTL_SBT_CD));

		// 連絡先携帯電話番号
		template.set(EKK0021C040CBSMsg.RRKS_KTAI_TELNO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RRKS_KTAI_TELNO));

		// 連絡先勤務先名
		template.set(EKK0021C040CBSMsg.RRKS_OFFC_NM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RRKS_OFFC_NM));

		// 昼間連絡先電話番号
		template.set(EKK0021C040CBSMsg.DT_RRKS_TELNO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.DT_RRKS_TELNO));

		// 新規申込種別コード
		template.set(EKK0021C040CBSMsg.NEW_MSKM_SBT_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.NEW_MSKM_SBT_CD));

		// 申込契機コード
		template.set(EKK0021C040CBSMsg.MSKM_OPTNTY_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKM_OPTNTY_CD));

		// 宅内調査希望アポ期限年月日
		template.set(EKK0021C040CBSMsg.TAKCHO_KIBO_APO_KIGEN_YMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TAKCHO_KIBO_APO_KIGEN_YMD));

		// 連絡事項登録年月日時分秒
		template.set(EKK0021C040CBSMsg.RRK_JIKO_ADD_DTM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RRK_JIKO_ADD_DTM));

		// 申込連絡先メールアドレス
		template.set(EKK0021C040CBSMsg.MSKM_RRKS_MLAD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKM_RRKS_MLAD));

		// 工事進捗通知メールアドレス
		template.set(EKK0021C040CBSMsg.KOJI_PRG_TCHI_MLAD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KOJI_PRG_TCHI_MLAD));

		// 連絡事項
		template.set(EKK0021C040CBSMsg.RRK_JIKO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RRK_JIKO));

		// 最新照会年月日
		template.set(EKK0021C040CBSMsg.RCNT_SHOKAI_YMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RCNT_SHOKAI_YMD));

		// Web照会回数
		template.set(EKK0021C040CBSMsg.WEB_SHOKAI_CNT, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.WEB_SHOKAI_CNT));

		// PC照会回数
		template.set(EKK0021C040CBSMsg.PC_SHOKAI_CNT, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.PC_SHOKAI_CNT));

		// 携帯照会回数
		template.set(EKK0021C040CBSMsg.KTAI_SHOKAI_CNT, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KTAI_SHOKAI_CNT));

		// 工事進捗通知携帯メールアドレス
		template.set(EKK0021C040CBSMsg.KJSC_TCH_KTAI_MLAD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KJSC_TCH_KTAI_MLAD));

		// 工事進捗通知PCメールアドレス変更年月日
		template.set(EKK0021C040CBSMsg.KJSC_TCH_PC_MLAD_CHG_YMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KJSC_TCH_PC_MLAD_CHG_YMD));

		// 工事進捗通知携帯メールアドレス変更年月日
		template.set(EKK0021C040CBSMsg.KJSC_TCH_KTAI_MLAD_CHG_YMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KJSC_TCH_KTAI_MLAD_CHG_YMD));

		// メール送信除外フラグ
		template.set(EKK0021C040CBSMsg.ML_SEND_JGI_FLG, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.ML_SEND_JGI_FLG));

		// メール送信除外理由メモ
		template.set(EKK0021C040CBSMsg.ML_SEND_JGI_RSN_MEMO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.ML_SEND_JGI_RSN_MEMO));

		// 番ポ申込連絡先電話番号
		template.set(EKK0021C040CBSMsg.BMP_MSKM_RRKS_TLN, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.BMP_MSKM_RRKS_TLN));

		// オプションサービス引継有無
		template.set(EKK0021C040CBSMsg.OP_SVC_HKTGI_UM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.OP_SVC_HKTGI_UM));

		// 解約書類送付希望有無
		template.set(EKK0021C040CBSMsg.DSL_ATICLE_SOHU_KIBO_UM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.DSL_ATICLE_SOHU_KIBO_UM));

		// 連絡手段補記
		template.set(EKK0021C040CBSMsg.RRK_WAY_HOKI, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RRK_WAY_HOKI));

		// 本人確認書類種別コード
		template.set(EKK0021C040CBSMsg.HNIN_CFM_ATICLE_SBT_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.HNIN_CFM_ATICLE_SBT_CD));

		// 契約付加コード
		template.set(EKK0021C040CBSMsg.KEI_HUKA_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KEI_HUKA_CD));

		// 地図添付有無
		template.set(EKK0021C040CBSMsg.MAP_TEMP_UM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MAP_TEMP_UM));

		// KCNSTB申込台数
		template.set(EKK0021C040CBSMsg.KCN_STB_MSKM_CNT, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KCN_STB_MSKM_CNT));

		// KCNSTB種類コード
		template.set(EKK0021C040CBSMsg.KCN_STB_KIND_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KCN_STB_KIND_CD));

		// マンション設備システム連携用記事欄
		template.set(EKK0021C040CBSMsg.MANSSBSYS_RNKI_YO_KIJIRAN, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MANSSBSYS_RNKI_YO_KIJIRAN));

		// マンションID
		template.set(EKK0021C040CBSMsg.MANSION_ID, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MANSION_ID));

		// CAT-ID
		template.set(EKK0021C040CBSMsg.CATID, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.CATID));

		// 申込受付種別コード
		template.set(EKK0021C040CBSMsg.MKM_UK_SBT_CD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MKM_UK_SBT_CD));

		// 申込書取扱情報担当者名
		template.set(EKK0021C040CBSMsg.MSKMSHO_TRAT_IF_TNTSHA_NM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKMSHO_TRAT_IF_TNTSHA_NM));

		// 申込書取扱情報電話番号
		template.set(EKK0021C040CBSMsg.MSKMSHO_TRAT_IF_TELNO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.MSKMSHO_TRAT_IF_TELNO));

		// 本人確認書類名
		template.set(EKK0021C040CBSMsg.HNIN_CFM_ATICLE_NM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.HNIN_CFM_ATICLE_NM));

		// 他システム連携_工事連絡先氏名
		template.set(EKK0021C040CBSMsg.TSYRN_KJ_RRKS_NM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_KJ_RRKS_NM));

		// 他システム連携_工事連絡先電話番号
		template.set(EKK0021C040CBSMsg.TSYRN_KJ_RRKS_TLN, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_KJ_RRKS_TLN));

		// 他システム連携_宅内調査時連絡先氏名
		template.set(EKK0021C040CBSMsg.TSYRN_TAKCHO_JI_RRKS_NM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_TAKCHO_JI_RRKS_NM));

		// 他システム連携_宅内調査時連絡先電話番号
		template.set(EKK0021C040CBSMsg.TSYRN_TAKCHO_JI_RRKS_TLN, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_TAKCHO_JI_RRKS_TLN));

		// 他システム連携_連絡希望日時
		template.set(EKK0021C040CBSMsg.TSYRN_RRK_KIBO_DATE, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_RRK_KIBO_DATE));

		// 他システム連携_宅内調査要否
		template.set(EKK0021C040CBSMsg.TSYRN_TAKCHO_YH, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_TAKCHO_YH));

		// 他システム連携_地図有無
		template.set(EKK0021C040CBSMsg.TSYRN_MAP_UM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_MAP_UM));

		// 他システム連携_既存契約情報
		template.set(EKK0021C040CBSMsg.TSYRN_KZN_KEI_INF, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_KZN_KEI_INF));

		// 他システム連携_不備解消年月日
		template.set(EKK0021C040CBSMsg.TSYRN_HBI_KAISHOU_YMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.TSYRN_HBI_KAISHOU_YMD));

		// 設備流用有無
		template.set(EKK0021C040CBSMsg.EQUIP_RYUYO_UM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.EQUIP_RYUYO_UM));

		// 流用元工事案件番号
		template.set(EKK0021C040CBSMsg.RYUYO_MOTO_KJAK_NO, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.RYUYO_MOTO_KJAK_NO));

		// 設備流用工事完了希望年月日
		template.set(EKK0021C040CBSMsg.SBRY_KJ_FIN_KIBOYMD, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.SBRY_KJ_FIN_KIBOYMD));

		// 現在利用先契約回線区分
		template.set(EKK0021C040CBSMsg.NOW_USE_SK_KEI_KISN_DIV, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.NOW_USE_SK_KEI_KISN_DIV));

		// 機器設置場所変更有無
		template.set(EKK0021C040CBSMsg.KIKI_SETPLC_CHGUM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.KIKI_SETPLC_CHGUM));

		// 同日実施希望有無
		template.set(EKK0021C040CBSMsg.DOJITU_JSSI_KBUM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.DOJITU_JSSI_KBUM));

		// 早期開通早期連絡希望有無
		template.set(EKK0021C040CBSMsg.EARLY_OPEN_EARLY_RRK_KBUM, getRsltMsgListValue(resultEKK0021A010, EKK0021A010CBSMsg1List.EARLY_OPEN_EARLY_RRK_KBUM));

		// 電子交付同意有無
		template.set(EKK0021C040CBSMsg.DNSKH_DOI_UM, dnskhDoiUm);


		// 上り情報を生成
		return editInMsgCmn(param, template);
	}
	
	/**
	 * S/IFの実行結果から指定されたキーに該当する値を取得する
	 * 
	 * S/IFの実行結果から指定のキー(値)に該当する値を取得し、返却する。
	 * 
	 * @param trgtNMsg 対象メッセージ
	 * @param valueKey キー(値)
	 * @return 値
	 */
	private String getRsltMsgListValue(CAANMsg trgtNMsg, String valueKey)
	{
		String value = "";
		if (trgtNMsg != null)
		{
			value = trgtNMsg.getString(valueKey);
		}
		
		return value;
	}
}