/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKUpdSvkeiuwEohTelVainfoCC
 *   ソースファイル名：JKKUpdSvkeiuwEohTelVainfoCC.java
 *   作成者          ：富士通
 *   日付            ：2013年04月18日
 *＜機能概要＞
 *   サービス契約内訳＜eo光電話＞のＶＡ情報を更新します
 *   
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v5.00.00    2013/04/18   FJ立和名     新規作成
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
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.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B003CBSMsg;




/**
 * サービス契約内訳＜eo光電話＞のＶＡ情報を更新します
 * 
 * @author 富士通
 * @since 2013-04-18 IT1-2013-0000968
 */
public class JKKUpdSvkeiuwEohTelVainfoCC extends AbstractCommonComponent
{


	/**************************************************************************************
	 * キー
	 */
	/** ＫＥＹサービス契約番号 */
	public static final String KEY_SVC_KEI_NO = "svc_kei_no";
	
	/** ＫＥＹサービス契約内訳番号（番号追加された側） */
	public static final String KEY_SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";

	/** ＫＥＹ機器提供サービス契約番号 */
	public static final String KEY_KKTK_SVC_KEI_NO = "kktk_svc_kei_no";

	/** ＫＥＹ機器提供サービス契約・世代登録年月日時分秒 */
	public static final String KEY_KK0341_GADTM = "kk0341_gene_add_dtm";

	/** 結果返却用リスト */
	public static final String RESULT_LIST = "result_list";






	/**
	 * サービス契約内訳＜eo光電話＞のＶＡ情報を更新します
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param mapNm Ｉ／Ｏマップキー
	 * @return リクエストパラメータ
	 * @throws Throwable 任意の例外
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updateVaInfo(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String mapNm
	) throws Throwable
	{
		//受け渡し用データマップを取得
		HashMap<String, Object> dataMap = (HashMap<String, Object>) param.getData(mapNm);
		
		//結果返却用リスト
		ArrayList<HashMap<String, Object>> retList = new ArrayList<HashMap<String,Object>>();
		dataMap.put(RESULT_LIST, retList);
		
		// サービス契約内訳番号（番号追加された側）
		String telno2ndSvcKeiUcwkNo = (String) dataMap.get(KEY_SVC_KEI_UCWK_NO);
		
		/**
		 * サービス契約内訳＜eo光電話＞一覧照会
		 */
		ArrayList<HashMap<String, Object>> kk0191List = callEKK0191B001SC(param, handle, dataMap);
		
		/**
		 * 機器提供サービス契約一意照会
		 */
		HashMap<String, Object> kk0341Map = callEKK0341A010SC(param, handle, dataMap);
		//宅内機器型式コード
		String kktkModelCd = (String) kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD);
		//機器変更番号
		String kktkChgNo   = (String) kk0341Map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
		//ＶＡポート番号
		String[] vaPortNo = new String[]{null, "", ""};		//※電話番号順でアクセスすること
		//申込明細番号
		String mskmDtlNo = "";
		
		for (HashMap<String, Object> kk0191Map : kk0191List)
		{
			if (telno2ndSvcKeiUcwkNo.equals((String)kk0191Map.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO)))
			{
				//番号追加時に発行された申込明細番号
				mskmDtlNo = (String) kk0191Map.get(EKK0191B001CBSMsg1List.MSKM_DTL_NO);
				
				//番号追加された側のポート番号
				int n = Integer.valueOf((String) kk0191Map.get(EKK0191B001CBSMsg1List.TELNO_JUN));
				vaPortNo[n] = (String) kk0191Map.get(EKK0191B001CBSMsg1List.VA_PORT_NO);
				
				//既存番号のポート番号を決定
				int m = 2 - n + 1;	//1なら2、2なら1
				vaPortNo[m] = ("2".equals(vaPortNo[n]) ? "1" : "2");
				break;
			}
		}
		
		for (HashMap<String, Object> kk0191Map : kk0191List)
		{
			// 20140115 OM-2014-0000031 出荷を伴わない番号追加時、既存番号側のポート番号を設定できない不具合の修正 DEL START
//			//ＶＡ宅内機器型式コード
//			String vaModelCd = (String) kk0191Map.get(EKK0191B001CBSMsg1List.VA_TAKNKIKI_MODEL_CD);
//			//ＶＡ機器変更番号
//			String vaChgNo   = (String) kk0191Map.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
			// 20140115 OM-2014-0000031 出荷を伴わない番号追加時、既存番号側のポート番号を設定できない不具合の修正 DEL END
			//機器の情報が一致しない場合書き換える
//↓↓↓2013-05-15変更　巻取BIKK-2013-0001105（ＰＴ阻害のため改修）↓↓↓
			//処理対象外のレコードはスルー
			String svcKeiUcwkStat = (String) kk0191Map.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_STAT);
			if (JKKSvcConst.SVC_KEI_STAT_910.compareTo(svcKeiUcwkStat) <= 0)
			{
				continue;
			}
//			if (!vaModelCd.equals(kktkModelCd) || !vaChgNo.equals(kktkChgNo))
			// 20140115 OM-2014-0000031 出荷を伴わない番号追加時、既存番号側のポート番号を設定できない不具合の修正 MOD START
//			if (null == vaModelCd || null == vaChgNo || !vaModelCd.equals(kktkModelCd) || !vaChgNo.equals(kktkChgNo))
			
			// サービス契約内訳番号
			String svcKeiUcwkNo = (String) kk0191Map.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO);
			
			if (!telno2ndSvcKeiUcwkNo.equals(svcKeiUcwkNo))
			// 20140115 OM-2014-0000031 出荷を伴わない番号追加時、既存番号側のポート番号を設定できない不具合の修正 MOD END
//↑↑↑2013-05-15変更　巻取BIKK-2013-0001105（ＰＴ阻害のため改修）↑↑↑
			{
				// 20140115 OM-2014-0000031 出荷を伴わない番号追加時、既存番号側のポート番号を設定できない不具合の修正 DEL START
//				//サービス契約内訳番号
//				String svcKeiUcwkNo = (String) kk0191Map.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO);
				// 20140115 OM-2014-0000031 出荷を伴わない番号追加時、既存番号側のポート番号を設定できない不具合の修正 DEL END
				
// IT1-2014-0000023対応 20140119 星野 ADD START
				/**
				 * 住所変更明細存在チェック一覧照会
				 */
				ArrayList<HashMap<String, Object>> kk2101List = callEKK2101B003SC(param, handle, dataMap);
				
				// ヒットした場合は住所変更中
				boolean isJuhenChu = !kk2101List.isEmpty();
// IT1-2014-0000023対応 20140119 星野 ADD END
				
				/**
				 * サービス契約内訳＜eo光電話＞一意照会（カレント検索）
				 */
				HashMap<String, Object> kk0191UniMap = callEKK0191A010SC(param, handle, svcKeiUcwkNo, null);
				int n = Integer.valueOf((String) kk0191UniMap.get(EKK0191A010CBSMsg1List.TELNO_JUN));
				
				/**
				 * サービス契約内訳＜eo光電話＞情報変更
				 */
				HashMap<String, Object> ekk0191c060Map = callEKK0191C060SC(param, handle, kk0191UniMap, 
						kktkModelCd, kktkChgNo, vaPortNo[n], mskmDtlNo
// IT1-2014-0000023対応 20140119 星野 ADD START
						, isJuhenChu
// IT1-2014-0000023対応 20140119 星野 ADD END
						);
				retList.add(ekk0191c060Map);
			}
		}
		return param;
	}


	/**
	 * EKK0191B001 サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）Ｓ−ＩＦ呼び出し
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param dataMap データマップ
	 * @return 検索結果
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, Object>> callEKK0191B001SC(IRequestParameterReadWrite param,
			SessionHandle handle, HashMap<String, Object> dataMap) throws Exception
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		Map<?, ?> sIFResult = null;
		
		//EKK0191B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191B001CBSMsg.class.getName());
		//テンプレートID(SIFのID)
		template.set(EKK0191B001CBSMsg.TEMPLATEID, "EKK0191B001");
		//機能コード
		template.set(EKK0191B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		//ＫＥＹ＿サービス契約番号
		template.set(EKK0191B001CBSMsg.KEY_SVC_KEI_NO, (String) dataMap.get(KEY_SVC_KEI_NO));
		//共通の設定
		editBasicCmn(param, template);
		
		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		//SIFの呼び出し
		sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		//エラー情報の設定
		editResult(sIFResult, param);
		errChk(sIFResult);
		
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		template = templates[0];
		
		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);

		ArrayList<HashMap<String, Object>> retList = new ArrayList<HashMap<String,Object>>();
		for (int i = 0; i < childTemplates.length; i++)
		{
			retList.add(childTemplates[i].getHashMap());
		}

		return retList;
	}


	/**
	 * EKK0341A010 機器提供サービス契約一意照会S-IFを呼び出し
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param dataMap データマップ
	 * @return 一意照会結果
	 * @throws Throwable 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> callEKK0341A010SC(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> dataMap) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		Map<?, ?> sIFResult = null;
		
		//EKK0341A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341A010CBSMsg.class.getName());
		
		//テンプレートID(SIFのID)
		template.set(EKK0341A010CBSMsg.TEMPLATEID, "EKK0341A010");
		//機能コード
		template.set(EKK0341A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);		//PK指定
		//ＫＥＹ＿サービス契約番号
		template.set(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, (String) dataMap.get(KEY_KKTK_SVC_KEI_NO));
		//ＫＥＹ＿世代登録年月日時分秒
		template.set(EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, (String) dataMap.get(KEY_KK0341_GADTM));
		//ＫＥＹ＿予約適用日
		template.setNull(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD);
		
		editBasicCmn(param, template);
		
		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//クエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		//SIFの呼び出し
		sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		//エラー情報の設定
		editResult(sIFResult, param);
		errChk(sIFResult);
		
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		template = templates[0];
		
		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);

		HashMap<String, Object> retMap = childTemplates[0].getHashMap();

		return retMap;
	}


// IT1-2014-0000023対応 20140119 星野 ADD START
	/**
	 * EKK2101B003 住所変更明細存在チェック一覧照会Ｓ−ＩＦ呼び出し
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param dataMap データマップ
	 * @return 検索結果
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, Object>> callEKK2101B003SC(IRequestParameterReadWrite param,
			SessionHandle handle, HashMap<String, Object> dataMap) throws Exception
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		Map<?, ?> sIFResult = null;
		
		//EKK2101B003への呼び出しパラメータ設定
		template = new CAANMsg(EKK2101B003CBSMsg.class.getName());
		//テンプレートID(SIFのID)
		template.set(EKK2101B003CBSMsg.TEMPLATEID, "EKK2101B003");
		//機能コード
		template.set(EKK2101B003CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		//ＫＥＹ＿サービス契約番号
		template.set(EKK2101B003CBSMsg.KEY_SVC_KEI_NO, (String) dataMap.get(KEY_SVC_KEI_NO));
		//共通の設定
		editBasicCmn(param, template);
		
		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		//SIFの呼び出し
		sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		//エラー情報の設定
		editResult(sIFResult, param);
		errChk(sIFResult);
		
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		template = templates[0];
		
		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK2101B003CBSMsg.EKK2101B003CBSMSG1LIST);

		ArrayList<HashMap<String, Object>> retList = new ArrayList<HashMap<String,Object>>();
		if(childTemplates != null){
			for (int i = 0; i < childTemplates.length; i++)
			{
				retList.add(childTemplates[i].getHashMap());
			}
		}

		return retList;
	}
// IT1-2014-0000023対応 20140119 星野 ADD END
	
	/**
	 * サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm 世代登録年月日時分秒（null指定ならカレント検索）
	 * @return 一意照会結果
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> callEKK0191A010SC(IRequestParameterReadWrite param, SessionHandle handle,
			String svcKeiUcwkNo, String geneAddDtm) throws Exception
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		Map<?, ?> sIFResult = null;
		
		//EKK0191A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191A010CBSMsg.class.getName());
		
		//テンプレートID(SIFのID)
		template.set(EKK0191A010CBSMsg.TEMPLATEID, "EKK0191A010");
		
		
		//ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
		if (null != geneAddDtm)
		{
			//機能コード
			template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
			// ＫＥＹ＿世代登録年月日時分秒
			template.set(EKK0191A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm);
		}
		else
		{
			//機能コード
			template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
			// ＫＥＹ＿世代登録年月日時分秒
			template.setNull(EKK0191A010CBSMsg.KEY_GENE_ADD_DTM);
		}
		
		editBasicCmn(param, template);
		
		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		//SIFの呼び出し
		sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		//エラー情報の設定
		editResult(sIFResult, param);
		errChk(sIFResult);
		
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		template = templates[0];
		
		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);

		HashMap<String, Object> retMap = childTemplates[0].getHashMap();

		return retMap;
	}


	/**
	 * EKK0191C060サービス契約内訳＜eo光電話＞情報変更
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param ekk0191a010Map サービス契約内訳＜eo光電話＞一意照会結果マップ
	 * @param vaModelCd ＶＡ宅内機器型式コード
	 * @param vaKikiChgNo ＶＡ機器変更番号
	 * @param vaPortNo ＶＡポート番号
	 * @param mskmDtlNo 申込明細番号
	 * @param isJuhenChu 住所変更中フラグ
	 * @return S-IF実行結果
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String,Object> callEKK0191C060SC(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> ekk0191a010Map,
			String vaModelCd, String vaKikiChgNo, String vaPortNo, String mskmDtlNo
// IT1-2014-0000023対応 20140119 星野 ADD START
			, boolean isJuhenChu
// IT1-2014-0000023対応 20140119 星野 ADD END
	) throws Exception
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		Map<?, ?> sIFResult = null;
		
		//EKK0191A010への呼び出しパラメータ設定
// IT1-2014-0000023対応 20140119 星野 MOD START
//		template = editInMsgEKK0191C060SC(ekk0191a010Map, vaModelCd, vaKikiChgNo, vaPortNo, mskmDtlNo);
		template = editInMsgEKK0191C060SC(ekk0191a010Map, vaModelCd, vaKikiChgNo, vaPortNo, mskmDtlNo, isJuhenChu);
// IT1-2014-0000023対応 20140119 星野 MOD END
		editBasicCmn(param, template);
		
		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		//エラー情報の設定
		editResult(sIFResult, param);
		errChk(sIFResult);
		
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		template = templates[0];
		
		HashMap<String, Object> retMap = template.getHashMap();
		
		return retMap;
	}


	/**
	 * EKK0191C060サービス契約内訳＜eo光電話＞情報変更　入力マッピング
	 * 
	 * @param kk0191a010Map サービス契約内訳＜eo光電話＞一意照会結果マップ
	 * @param newTaknkikiModelCd 宅内機器型式コード
	 * @param newKikiChgNo 機器変更番号
	 * @param newPortNo ポート番号
	 * @return S-IF入力テンプレート
	 * @throws RequestParameterException
	 */
	private CAANMsg editInMsgEKK0191C060SC(HashMap<String, Object> kk0191a010Map, 
			String newTaknkikiModelCd, String newKikiChgNo, String newPortNo, String mskmDtlNo
// IT1-2014-0000023対応 20140119 星野 ADD START
			, boolean isJuhenChu
// IT1-2014-0000023対応 20140119 星野 ADD END
	) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0191C060CBSMsg.class.getName());
		
		// テンプレートID(SIFのID)
		template.set(EKK0191C060CBSMsg.TEMPLATEID, "EKK0191C060");

		// 機能コード
		template.set(EKK0191C060CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);		//更新
		
		// サービス契約内訳<eo光電話>一意照会の結果を転記
		Object[][] ekk0191c060Contents = new EKK0191C060CBSMsg().getContents();
		for (int i = 0; i < ekk0191c060Contents.length; i ++)
		{
			String key = ekk0191c060Contents[i][0].toString();
			if (kk0191a010Map.containsKey(key) && !key.matches(".+_err$"))
			{
				template.set(key, (String) kk0191a010Map.get(key));
			}
		}
		
		// ＶＡ宅内機器型式コード
		template.set(EKK0191C060CBSMsg.VA_TAKNKIKI_MODEL_CD, newTaknkikiModelCd);
		// ＶＡ機器変更番号
		template.set(EKK0191C060CBSMsg.VA_KIKI_CHG_NO, newKikiChgNo);
		// ＶＡ機器製造番号
		template.setNull(EKK0191C060CBSMsg.VA_KIKI_SEIZO_NO);
		// ＶＡポート番号
		template.set(EKK0191C060CBSMsg.VA_PORT_NO, newPortNo);
		
		// 異動区分
// IT1-2014-0000023対応 20140119 星野 ADD START
		// 住所変更中に番号追加できるのは住所変更のみであることから、異動区分を住所変更・登録と判断する
		if(isJuhenChu){
			
			template.set(EKK0191C060CBSMsg.IDO_DIV, JKKHakkoSODConstCC.IDO_DIV_ADCHGADD);
			
		// 以外はこれまでどおり
		}else{
// IT1-2014-0000023対応 20140119 星野 ADD END
			
			template.set(EKK0191C060CBSMsg.IDO_DIV, JKKHakkoSODConstCC.IDO_DIV_HTELNOADD);
			
// IT1-2014-0000023対応 20140119 星野 ADD START
		}
// IT1-2014-0000023対応 20140119 星野 ADD END
		
		// 申込明細番号
		template.set(EKK0191C060CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		
		// 更新年月日時分秒(更新前)
		template.set(EKK0191C060CBSMsg.UPD_DTM_BF, (String) kk0191a010Map.get(EKK0191A010CBSMsg1List.LAST_UPD_DTM));
		// 事務手数料自動適用要否
		template.set(EKK0191C060CBSMsg.RULE0059_AUTO_APLY, JKKStrConst.CD00001_0);

		// 上り情報を生成
		return template;
	}


	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	private void editBasicCmn(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実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		//電文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));
				
		return paramMap;
	}


	/**
	 * エラーチェック処理<br>
	 * <br>
	 * @param	msgList			サービスインタフェース実行結果
	 * @return	なし
	 * @throws	SCCallException 
	 */
	private static void errChk(Map<?, ?> msgList) throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		int returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode) || (0 != templateStatus))
		{
			throw new SCCallException("INVALID_RETURN_MESSAGE", String.valueOf(returnCode), templateStatus);
		}
	}


	/**
	 * 
	 * @param msgList
	 * @param param
	 * @throws Exception
	 * @since 2012-12-17 契約突合障害
	 */
	private static void editResult(Map<?, ?> msgList, IRequestParameterReadWrite param) throws Exception
	{
		// リターンコード取得
		Integer returnCode = (Integer) msgList.get(JCMConstants.RET_CD_INT_KEY);

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		if (returnCode != 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);
		}
		
		
		ArrayList<Object> errList = new ArrayList<Object>();
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, 
				TemplateErrorUtil.getErrorInfo(msgList, errList));
	}


	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) 
	throws Throwable
	{
		return null;
	}


	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @return
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode) throws Throwable
	{
		return param;
	}


}
