/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKChgVaPortno
*   ソースファイル名：JKKChgVaPortno.java
*   作成者          ：富士通
*   日付            ：2013年03月11日
*＜機能概要＞
*   eo光電話の電話番号順付替え処理部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00	2013/03/11	FJ)立和名	巻取３IT2-2013-0000250対応で新規作成
*  v19.00.00	2015/09/30	FJ)谷口		【OM-2015-0001758】住所変更確定後、電話初回オーダを発行依頼すると滞留した
*  v19.00.01	2015/10/15	FJ)谷口		【OM-2015-0001758】転居先での利用機器が多機能ルーターの場合、VAポート番号も更新する
*  v29.00.00	2017/01/17	FJ)藤本		【ANK-2953-00-00】電話番号のポート割当方法改善
**********************************************************************/
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.JKKDslRunConstCC;
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.IRequestParameterReadWrite;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B022CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B022CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1081D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1551D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C061CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B032CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B032CBSMsg;




/**
 * eo光電話の電話番号順付替え処理部品クラスです
 * 
 * @author 富士通
 * @since 2013-03-11 巻取３IT2-2013-0000250
 */
public class JKKChgTelnoJun extends JKKCancelBmpkj 
{



	/**
	 * eo光電話の電話番号順付替えを行います
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param svcKeiUcwkNo サービス契約内訳番号（番号解約／番号回復された側のもの）
	 * @param newJun 新ポート番号
	 * @param svcKeiNo サービス契約番号（ＳＯＤ発行用）
	 * @param kk0341Msg 電話用ＶＡの機器提供サービス契約照会結果レコード
	 * @throws Throwable 任意の例外
	 */
	public void chgTelnoJun(SessionHandle handle, IRequestParameterReadWrite param, 
		String idoDiv, String mskmDtlNo, CAANMsg dslKK0191Msg, String newJun, String svcKeiNo
//		, CAANMsg kk0341Msg
	) throws Throwable
	{
		//事前条件チェック
		if (null == dslKK0191Msg)
		{
			return;
		}
		String svcKeiUcwkNo = dslKK0191Msg.getString(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO);
		String origJun = dslKK0191Msg.getString(EKK0191A010CBSMsg1List.TELNO_JUN);
		
		
	//IT2-2014-0000045 20140120 START
		String kiki_Chg_No = dslKK0191Msg.getString(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO);
		String takinoFlg = "0";
		
		CAANMsg[] lEKK0341B002List = callEKK0341B002SC(handle, param, svcKeiNo);
		CAANMsg lEKK0341B002 = null;
		
		for (int i = 0; lEKK0341B002List != null && lEKK0341B002List.length > i; i++)
		{
			lEKK0341B002 = lEKK0341B002List[i];
			if(kiki_Chg_No.equals(lEKK0341B002.getString(EKK0341B002CBSMsg1List.KIKI_CHG_NO)))
			{
				if("C024".equals(lEKK0341B002.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD)))
				{
					takinoFlg = "1";
					break;
				}
			}
		}
	//IT2-2014-0000045 20140120 END
		
		
		//番号解約された側の順番を付け替える
		String tempJun = ("1".equals(newJun) ? "2" : "1");
		if (tempJun.equals(origJun))
		{
			return;
		}
		else
		{
		//IT2-2014-0000045 20140120 START
			//HashMap<String, Object> ekk0191c060Map = 
			//	callEKK0191C060SC(handle, param, dslKK0191Msg, idoDiv, mskmDtlNo, tempJun);
			HashMap<String, Object> ekk0191c060Map = 
				callEKK0191C060SC(handle, param, dslKK0191Msg, idoDiv, mskmDtlNo, tempJun, takinoFlg);
		//IT2-2014-0000045 20140120 END
			{	//↓↓↓2013-04-16追加　IT1-2013-0000296↓↓↓
				//サービス契約内訳＜eo光電話＞情報変更S-IFの出力マップをワーク領域に詰めて解約CCに連携する
				Map<Object, Object> workareaMap = param.getMappingWorkArea();
				workareaMap.put(JKKDslRunConstCC.EKK0191C060_MAP, ekk0191c060Map);
			}	//↑↑↑2013-04-16追加　IT1-2013-0000296↑↑↑
		}
		
		/**
		 * 電話番号順の付替えをするサービス契約内訳を特定
		 */
		String tgtSvcKeiUcwkNo = null;
		// OM-2015-0001758 20151015 ADD START
		String tgtGenaAddDtm = null;
		// OM-2015-0001758 20151015 ADD END
		
		ArrayList<HashMap<String, Object>> ekk0161b004List = callEKK0161B004SC(handle, param, svcKeiNo);
		for (HashMap<String, Object> kk0161Map : ekk0161b004List)
		{
//↓↓↓2013-11-13追加　商用OM-2013-0003808（番号変更中での番号追加／番号解約でOLS設定の内容が間違っている）↓↓↓
			//番号変更中の変更先も取得するようにしたので、変更中フラグが立っているものは除外する
			String tmpFg = (String) kk0161Map.get(EKK0161B004CBSMsg1List.KEIZK_AF_KEI_CHGECHU_FLG);
			if ("1".equals(tmpFg))
			{
				continue;
			}
//↑↑↑2013-11-13追加　商用OM-2013-0003808（番号変更中での番号追加／番号解約でOLS設定の内容が間違っている）↑↑↑
			tgtSvcKeiUcwkNo = (String) kk0161Map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			// OM-2015-0001758 20151015 ADD START
			// 後続のサービス契約内訳＜eo光電話＞一意照会で使用する為、世代登録年月日時分秒を取得
			tgtGenaAddDtm = (String) kk0161Map.get(EKK0161B004CBSMsg1List.GENE_ADD_DTM);
			// OM-2015-0001758 20151015 ADD END
			String tmpSvcKeiUcwkStat = (String) kk0161Map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if (!svcKeiUcwkNo.equals(tgtSvcKeiUcwkNo) && JKKSvcConst.SVC_KEI_STAT_910.compareTo(tmpSvcKeiUcwkStat) > 0)
			{
				break;
			}
		}
		if (null == tgtSvcKeiUcwkNo)
		{
			return;
		}
		
		/**
		 * サービス契約内訳＜eo光電話＞一意照会
		 */
		// OM-2015-0001758 20151015 MOD START
		// 世代登録年月日時分秒をパラメータに追加
//		CAANMsg[] ekk0191a010List = callEKK0191A010SC(handle, param, tgtSvcKeiUcwkNo);
		CAANMsg[] ekk0191a010List = callEKK0191A010SC(handle, param, tgtSvcKeiUcwkNo, tgtGenaAddDtm);
		// OM-2015-0001758 20151015 MOD END
		String oldJun = (String) ekk0191a010List[0].getString(EKK0191A010CBSMsg1List.TELNO_JUN);
		
		if (null != newJun && newJun.equals(oldJun))
		{
			return;
		}
		
		/**
		 * 電話番号順を変更
		 */
	//IT2-2014-0000045 20140120 START
		//callEKK0191C060SC(handle, param, ekk0191a010List[0], idoDiv, mskmDtlNo, newJun);
		callEKK0191C060SC(handle, param, ekk0191a010List[0], idoDiv, mskmDtlNo, newJun, takinoFlg);
	//IT2-2014-0000045 20140120 END
		
		// OM-2015-0001758 20150930 ADD START
		// 未来日"20991231"レコードがある場合に同様に電話番号順、ポート番号の更新を行う
		// EKK0161A010 サービス契約内訳一意照会
		HashMap<String, Object> ekk0161a010_map = callEKK0161A010SC(handle, param, tgtSvcKeiUcwkNo);
		
		// OM-2015-0001758 20151015 MOD START
//		if(ekk0161a010_map.isEmpty())
		if(ekk0161a010_map == null || ekk0161a010_map.isEmpty())
		// OM-2015-0001758 20151015 MOD END
		{
			return;
		}
		
		// 予約適用年月日が"20991231"のレコードの場合
		if("20991231".equals((String)ekk0161a010_map.get(EKK0161A010CBSMsg1List.RSV_APLY_YMD)))
		{
			// EKK0191A010 サービス契約内訳＜eo光電話＞一意照会
			HashMap<String, Object> ekk0191a010_map = callEKK0191A010_2SC(handle, param, tgtSvcKeiUcwkNo, (String)ekk0161a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM));
			// OM-2015-0001758 20151015 ADD START
			// 転居先での多機能ルーターフラグ
			String itnsTakinoFlg = "0";
			// EKK0251B003サービス契約回線内訳一覧照会（現在利用中）
			HashMap<String, Object> ekk0251b001_map = callEKK0251B003SC(handle, param, svcKeiNo);
			// EKK2091B001住所変更一覧照会
			HashMap<String, Object> ekk2091b001_map = callEKK2091B001SC(handle, param, (String)ekk0251b001_map.get(EKK0251B003CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO));
			// EKK2101B001住所変更明細一覧照会(03:機器提供サービス契約番号)
			ArrayList<HashMap<String, Object>> ekk2101b001List = callEKK2101B001SC(handle, param, (String)ekk2091b001_map.get(EKK2091B001CBSMsg1List.ADCHG_NO), "03");
			
			// VA機器変更番号(サービス契約内訳<eo光電話>から取得)
			String vaKikiChgNo = (String)ekk0191a010_map.get(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO);
			
			for(HashMap<String, Object> ekk2101b001_map : ekk2101b001List)
			{
				String kikiChgNo = (String)ekk2101b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
				
				// VA機器変更番号と変更後識別番号が同一の場合
				if(vaKikiChgNo.equals(kikiChgNo))
				{
					String kktkSvckeiNo = (String)ekk2101b001_map.get(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO);
					// EKK0341B032 機器提供サービス契約一覧照会（住変用）
					HashMap<String, Object> ekk0341b032_map = callEKK0341B032SC(handle, param, kktkSvckeiNo);
					
					if(vaKikiChgNo.equals((String)ekk0341b032_map.get(EKK0341B032CBSMsg1List.KIKI_CHG_NO)))
					{
						// 転居先で使用する機器が多機能ルーターの場合
						if("C024".equals((String)ekk0341b032_map.get(EKK0341B032CBSMsg1List.KKTK_SVC_CD)))
						{
							itnsTakinoFlg = "1";
							break;
						}
					}
				}
				else
				{
					// 何もしない
				}
				
			}
			// OM-2015-0001758 20151015 ADD END
			// EKK0191C061 サービス契約内訳＜eo光電話＞情報変更(住所変更)
			// OM-2015-0001758 20151015 MOD START
//			callEKK0191C061SC(handle, param, ekk0161a010_map, ekk0191a010_map, idoDiv, mskmDtlNo, newJun, takinoFlg);
			callEKK0191C061SC(handle, param, ekk0161a010_map, ekk0191a010_map, idoDiv, mskmDtlNo, newJun, itnsTakinoFlg);
			// OM-2015-0001758 20151015 MOD END
		}
		// 予約適用年月日が"20991231"以外の場合は何もしない
		else
		{
			// 何もしない
		}
		// OM-2015-0001758 ADD END
		//↓↓↓2013-11-13追加　商用OM-2013-0003808（番号変更中での番号追加／番号解約でOLS設定の内容が間違っている）↓↓↓
		/**
		 * 番号順を付け替えた内訳が番号変更の変更元になっていれば、変更先内訳も付け替える
		 */
		String xxxKK0161No = null;		//番号変更先のサービス契約内訳番号
		// OM-2015-0001758 20151015 ADD START
		String xxxGeneAddDtm = null;   //番号変更先の世代登録年月日時分秒
		// OM-2015-0001758 20151015 ADD END
		for (HashMap<String, Object> kk0161Map : ekk0161b004List)
		{
			String tmpFg = (String) kk0161Map.get(EKK0161B004CBSMsg1List.KEIZK_AF_KEI_CHGECHU_FLG);
			String tmpNo = (String) kk0161Map.get(EKK0161B004CBSMsg1List.KEIZK_MT_SVC_KEI_UCWK_NO);
			if (tgtSvcKeiUcwkNo.equals(tmpNo) && "1".equals(tmpFg))
			{
				xxxKK0161No = (String) kk0161Map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
				// OM-2015-0001758 20151015 ADD START
				// 後続のサービス契約内訳＜eo光電話＞一意照会で使用する為、世代登録年月日時分秒を取得
				xxxGeneAddDtm = (String) kk0161Map.get(EKK0161B004CBSMsg1List.GENE_ADD_DTM);
				// OM-2015-0001758 20151015 ADD END
				break;
			}
		}
		
		if (null != xxxKK0161No)
		{
			/**
			 * サービス契約内訳＜eo光電話＞一意照会
			 */
			// OM-2015-0001758 20151015 MOD START
//			ekk0191a010List = callEKK0191A010SC(handle, param, xxxKK0161No);
			ekk0191a010List = callEKK0191A010SC(handle, param, xxxKK0161No, xxxGeneAddDtm);
			// OM-2015-0001758 20151015 MOD END
			
			/**
			 * 電話番号順を変更
			 */
		//IT2-2014-0000045 20140120 START
			//callEKK0191C060SC(handle, param, ekk0191a010List[0], idoDiv, mskmDtlNo, newJun);
			callEKK0191C060SC(handle, param, ekk0191a010List[0], idoDiv, mskmDtlNo, newJun, takinoFlg);
		//IT2-2014-0000045 20140120 END
		}
//↑↑↑2013-11-13追加　商用OM-2013-0003808（番号変更中での番号追加／番号解約でOLS設定の内容が間違っている）↑↑↑
		
//		/**
//		 * ＳＯＤを出す
//		 */
////		callHakkoSODCC(handle, param, idoDiv, sysid, svcKeiNo, ekk0191a010Map, ekk0161C060Map);
//		if (null == kk0341Msg)
//		{
//			//機器提供サービス契約一覧照会
//			CAANMsg[] ekk0341b022List = callEKK0341B022SC(handle, param, svcKeiNo);
//			for (CAANMsg x : ekk0341b022List)
//			{
//				String kktkSvcCd = x.getString(EKK0341B022CBSMsg1List.KKTK_SVC_CD);
//				String kktkSvcKeiStat = x.getString(EKK0341B022CBSMsg1List.KKTK_SVC_KEI_STAT);
//				String kktkIdoDiv = x.getString(EKK0341B022CBSMsg1List.IDO_DIV);
//				if (JKKSvcConst.KKTK_SVC_CD_HTEL_VA.equals(kktkSvcCd) &&
//				(JKKSvcConst.IDO_DIV_DSL.equals(idoDiv) && idoDiv.equals(kktkIdoDiv) && JKKSvcConst.SVC_KEI_STAT_910.compareTo(kktkSvcKeiStat) <= 0) ||
//				(JKKSvcConst.SVC_KEI_STAT_910.compareTo(kktkSvcKeiStat) > 0))
//				{
//					kk0341Msg = x;
//					break;
//				}
//			}
//		}
//		//オーダ発行条件登録
//		HashMap<String, Object> ekk1081d010Map = callEKK1081D010SC(handle, param, svcKeiNo, kk0341Msg);
//		//オーダ情報作成ワーク登録
//		callEKK1551D010SC(handle, param, svcKeiNo, ekk1081d010Map, kk0341Msg);
	}


	/**
	 * EKK0191C060サービス契約内訳＜eo光電話＞情報変更
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param dslKK0191Msg サービス契約内訳＜eo光電話＞一意照会結果マップ
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param newPort 新ポート番号
	 * @return S-IF実行結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String,Object> callEKK0191C060SC(SessionHandle handle,
			IRequestParameterReadWrite param, CAANMsg dslKK0191Msg,
			String idoDiv, String mskmDtlNo, String tmpJun,
		//IT2-2014-0000045 20140120 START
			String takinoFlg
		//IT2-2014-0000045 20140120 END
	) throws Exception
	{
	//IT2-2014-0000045 20140120 START
		//CAANMsg template = editInMsgEKK0191C060SC(dslKK0191Msg, idoDiv, mskmDtlNo, tmpJun );
		CAANMsg template = editInMsgEKK0191C060SC(dslKK0191Msg, idoDiv, mskmDtlNo, tmpJun ,takinoFlg);
	//IT2-2014-0000045 20140120 END
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		return editResultRP_EKK0191C060SC(sIFResult, param);
	}


	/**
	 * EKK0161B004サービス契約内訳一覧照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private ArrayList<HashMap<String, Object>> callEKK0161B004SC(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo) throws Exception 
	{
		CAANMsg template = editInMsgEKK0161B004SC(svcKeiNo);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK0161B004SC(sIFResult, param);
	}




//	/**
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param idoDiv
//	 * @param sysid
//	 * @param svcKeiNo
//	 * @param ekk0191a010Map
//	 * @param ekk0191C060Map
//	 * @throws Throwable
//	 */
//	private void callHakkoSODCC(SessionHandle handle,
//			IRequestParameterReadWrite param,
//			String idoDiv, 
//			String sysid,
//			String svcKeiNo,
//			HashMap<String, Object> ekk0191a010Map,
//			HashMap<String, Object> ekk0191C060Map) throws Throwable 
//	{		// 入力マップを生成
//		
//		// 対象データマップ
//		HashMap<String, Object> hakkoSodCcTrgtData = new HashMap<String, Object>();
//		// 対象データリスト
//		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
//		hakkoSodCcTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
//		// 機能コード
//		hakkoSodCcTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
//		
//		// SODマップ
//		HashMap<String, Object> sodMap = new HashMap<String, Object>();
//		
//		// SOD基本情報
//		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
//		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, sysid);
//		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, idoDiv);
//		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
//		
//		// サービス契約情報
//		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
//		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, svcKeiNo);
//		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
//		
//		// サービス契約内訳情報
//		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
//		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, 
//				ekk0191a010Map.get(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO));
//		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHBF_SVC_KEI_UCWK_GENE_ADD_DTM, 
//				ekk0191a010Map.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
//		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, 
//				ekk0191C060Map.get(EKK0191C060CBSMsg.KK0161_GENE_ADD_DTM));
//		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
//		
//		// オプションサービス契約情報
//		sodMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, new HashMap<String, Object>());
//		
//		// 機器提供サービス契約情報
//		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, new HashMap<String, Object>());
//
//		trgtDataList.add(sodMap);
//		
//		String mapKey = this.getClass().getSimpleName() + "HakkoSODMap";
//		param.setData(mapKey, hakkoSodCcTrgtData);
//		
//		// ■サービスオーダ発行処理を実施
//		new JKKHakkoSODCC().hakkoSOD(handle, param, mapKey);
//	}


	/**
	 * EKK0161B004サービス契約内訳一覧照会　入力マッピング
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0161B004SC(String svcKeiNo) 
	{
		CAANMsg template = new CAANMsg(EKK0161B004CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0161B004CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0161B004CBSMsg.TEMPLATEID, "EKK0161B004");

		// 機能コード
//↓↓↓2013-11-13変更　商用OM-2013-0003808（番号変更中での番号追加／番号解約でOLS設定の内容が間違っている）↓↓↓
//		template.set(EKK0161B004CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		template.set(EKK0161B004CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_3);
//↑↑↑2013-11-13変更　商用OM-2013-0003808（番号変更中での番号追加／番号解約でOLS設定の内容が間違っている）↑↑↑
		
		// ＫＥＹ＿サービス契約番号
		template.set(EKK0161B004CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
		// 上り情報を生成
		return template;
	}


	/**
	 * EKK0161B004サービス契約内訳一覧照会　出力マッピング
	 * 
	 * @param result S-IF実行結果
	 * @param param リクエストパラメータ
	 * @return S-IF実行結果リスト
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, Object>> editResultRP_EKK0161B004SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception 
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST);

		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;
	}


	/**
	 * EKK0191A010サービス契約内訳＜eo光電話＞一意照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @return 一意照会結果
	 * @throws Exception 任意の例外
	 */
	// OM-2015-0001758 20151015 MOD START
//	private CAANMsg[] callEKK0191A010SC(SessionHandle handle, IRequestParameterReadWrite param,
//			String svcKeiUcwkNo) throws Exception
	private CAANMsg[] callEKK0191A010SC(SessionHandle handle, IRequestParameterReadWrite param,
			String svcKeiUcwkNo, String geneAddDtm) throws Exception
	// OM-2015-0001758 20151015 MOD END
	{
		// OM-2015-0001758 20151015 MOD START
//		CAANMsg template = editInMsgEKK0191A010SC(svcKeiUcwkNo);
		CAANMsg template = editInMsgEKK0191A010SC(svcKeiUcwkNo, geneAddDtm);
		// OM-2015-0001758 20151015 MOD END
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK0191A010SC(sIFResult, param);
	}


	/**
	 * EKK0191A010サービス契約内訳＜eo光電話＞一意照会　入力マッピング
	 * 
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @return S-IF入力テンプレート
	 * @throws RequestParameterException
	 */
	// OM-2015-0001758 20151015 MOD START
//	private CAANMsg editInMsgEKK0191A010SC(String svcKeiUcwkNo) throws RequestParameterException
	private CAANMsg editInMsgEKK0191A010SC(String svcKeiUcwkNo, String geneAddDtm) throws RequestParameterException
	// OM-2015-0001758 20151015 MOD END
	{
		CAANMsg template = new CAANMsg(EKK0191A010CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0191A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0191A010CBSMsg.TEMPLATEID, "EKK0191A010");

		// 機能コード
		// OM-2015-0001758 20151015 MOD START
//		template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);		//カレント取得
		template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);		//PK指定
		// OM-2015-0001758 20151015 MOD END
		
		// ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		// ＫＥＹ＿世代登録年月日時分秒
		// OM-2015-0001758 20151015 MOD START
//		template.setNull(EKK0191A010CBSMsg.KEY_GENE_ADD_DTM);
		template.set(EKK0191A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm);
		// OM-2015-0001758 20151015 MOD END
		
		// 上り情報を生成
		return template;
	}


	/**
	 * EKK0191A010サービス契約内訳＜eo光電話＞一意照会　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return 一意照会結果
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] editResultRP_EKK0191A010SC(
			Map<?, ?> result, IRequestParameterReadWrite param) throws Exception 
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);

//		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;
		return childTemplates;
	}




	/**
	 * EKK0191C060サービス契約内訳＜eo光電話＞情報変更　入力マッピング
	 * 
	 * @param outMapEKK0191A010 サービス契約内訳＜eo光電話＞一意照会結果マップ
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param newPort 新ポート番号
	 * @return S-IF入力テンプレート
	 * @throws RequestParameterException
	 */
	private CAANMsg editInMsgEKK0191C060SC(CAANMsg outMapEKK0191A010, String idoDiv, String mskmDtlNo, String newPortno,
		//IT2-2014-0000045 20140120 START
			String takinoFlg
		//IT2-2014-0000045 20140120 END
	)
	throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0191C060CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0191C060CBSMsg().getContents());

		// テンプレート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 (outMapEKK0191A010.containsKeyOfMsgData(key) && !key.matches("_err$"))
			{
				template.set(key, outMapEKK0191A010.getString(key));
			}
		}
		
		// ※一意照会転記以外
		// 申込明細番号
		template.set(EKK0191C060CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		// 異動区分
		template.set(EKK0191C060CBSMsg.IDO_DIV, idoDiv);

		// OM-2013-0004332 住所変更確定後に電話番号順番が付け替えられていない 2013/12/19 START
		// 異動区分の判定は不要（ポート番号の変更は元々コメントアウトされている）
//		if (JKKSvcConst.IDO_DIV_HTELNODSL.equals(idoDiv))			//光電話・番号解約
//		{
//			// 電話番号順
//			template.set(EKK0191C060CBSMsg.TELNO_JUN, newPortno);
////			// VAポート番号
////			template.setNull(EKK0191C060CBSMsg.VA_PORT_NO);
//		}
//		else if (JKKSvcConst.IDO_DIV_HTELNOKAIHK.equals(idoDiv))	//光電話・番号回復
//		{
//			// 電話番号順
//			template.set(EKK0191C060CBSMsg.TELNO_JUN, newPortno);
////			// VAポート番号
////			template.set(EKK0191C060CBSMsg.VA_PORT_NO, newPortno);
//		}
		template.set(EKK0191C060CBSMsg.TELNO_JUN, newPortno);
		// OM-2013-0004332 住所変更確定後に電話番号順番が付け替えられていない 2013/12/19 END
		
		// ANK-2953-00-00 DEL START
//		//IT2-2014-0000045 20140120 START
//		if("1".equals(takinoFlg))
//		{
//			//多機能ルーターが使用機器の場合に、電話番号順に合わせてポート番号を設定する。
//			template.set(EKK0191C060CBSMsg.VA_PORT_NO, newPortno);
//		}
//		//IT2-2014-0000045 20140120 END
		// ANK-2953-00-00 DEL END
		
		// 更新年月日時分秒(更新前)
		template.set(EKK0191C060CBSMsg.UPD_DTM_BF, outMapEKK0191A010.getString(EKK0191A010CBSMsg1List.LAST_UPD_DTM));
		// 事務手数料自動適用要否
		template.set(EKK0191C060CBSMsg.RULE0059_AUTO_APLY, JKKStrConst.CD00001_0);

		// 上り情報を生成
		return template;
	}


	/**
	 * EKK0191C060サービス契約内訳＜eo光電話＞情報変更　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK0191C060SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);


		return template.getHashMap();
	}


	/**
	 * EKK0341B022サービス対象機器提供サービス契約一覧照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @return S-IF実行結果
	 * @throws Exception 任意の例外
	 */
	private CAANMsg[] callEKK0341B022SC(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo) throws Exception
	{
		CAANMsg template = editInMsgEKK0341B022SC(svcKeiNo);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK0341B022SC(sIFResult, param);
	}


	/**
	 * EKK0341B022サービス対象機器提供サービス契約一覧照会　入力マッピング
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0341B022SC(String svcKeiNo)
	{
		CAANMsg template = new CAANMsg(EKK0341B022CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0341B022CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B022CBSMsg.TEMPLATEID, "EKK0341B022");

		// 機能コード
		template.set(EKK0341B022CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0341B022CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
		// 上り情報を生成
		return template;
	}


	/**
	 * EKK0341B022サービス対象機器提供サービス契約一覧照会　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private CAANMsg[] editResultRP_EKK0341B022SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0341B022CBSMsg.EKK0341B022CBSMSG1LIST);
		
		return childTemplates;
	}


	/**
	 * EKK1081D010オーダ発行条件登録
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @param kk0341Map 機器提供サービス契約照会結果レコード
	 * @return S-IF実行結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK1081D010SC(SessionHandle handle,
			IRequestParameterReadWrite param, String svcKeiNo, CAANMsg kk0341Map) throws Exception
	{
		CAANMsg template = editInMsgEKK1081D010SC(svcKeiNo, kk0341Map);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK1081D010SC(sIFResult, param);
	}


	/**
	 * EKK1081D010オーダ発行条件登録　入力マッピング
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param kk0341Map 機器提供サービス契約照会結果レコード
	 * @return S-IF入力テンプレート
	 * @throws RequestParameterException 任意の例外
	 */
	private CAANMsg editInMsgEKK1081D010SC(String svcKeiNo, CAANMsg kk0341Map)
	throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1081D010CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK1081D010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK1081D010CBSMsg.TEMPLATEID, "EKK1081D010");

		// 機能コード
		template.set(EKK1081D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);		//更新
		
		//サービス契約番号
		template.set(EKK1081D010CBSMsg.SVC_KEI_NO, svcKeiNo);
		//サービス契約内訳番号
//		template.set(EKK1081D010CBSMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		//機器提供サービス契約番号
		if (null != kk0341Map)
		{
			template.set(EKK1081D010CBSMsg.KKTK_SVC_KEI_NO, kk0341Map.getString(EKK0341B022CBSMsg1List.KKTK_SVC_KEI_NO));
		}
		//オプションサービス契約番号
		//サブオプションサービス契約番号
		//請求オプションサービス契約番号
		//オーダ種別コード
		template.set(EKK1081D010CBSMsg.ORDER_SBT_CD, JKKHakkoSODConstCC.ORDER_SBT_CD_TEL);
		//サービスオーダコード
		template.set(EKK1081D010CBSMsg.SVC_ORDER_CD, JKKHakkoSODConstCC.SVC_ORDER_CD_OLS);
		//要求種別コード
		template.set(EKK1081D010CBSMsg.YOKYU_SBT_CD, JKKHakkoSODConstCC.YOKYU_SBT_CD_CHG);
		//オーダ発行条件コード
		template.set(EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_CD, JKKHakkoSODConstCC.ODR_HAKKO_JOKEN_CD_SOKJI_HAKKO);
		//同一処理番号
		//宅内機器型式コード
		template.set(EKK1081D010CBSMsg.TAKNKIKI_MODEL_CD, kk0341Map.getString(EKK0341B022CBSMsg1List.TAKNKIKI_MODEL_CD));
		//機器製造番号
		template.set(EKK1081D010CBSMsg.KIKI_SEIZO_NO, kk0341Map.getString(EKK0341B022CBSMsg1List.KIKI_SEIZO_NO));
		//メールアドレス
		//スポットログインSYSID
		//送信依頼完了年月日時分秒
		//契約サービス制御要求オーダ識別コード
		//サービス契約回線内訳番号

		// 上り情報を生成
		return template;
	}


	/**
	 * EKK1081D010オーダ発行条件登録　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK1081D010SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		return template.getHashMap();
	}


	/**
	 * EKK1551D010オーダ情報作成ワーク登録
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @param kk0341Map 機器提供サービス契約照会結果レコード
	 * @param ekk1081d010Map オーダ発行条件登録S-IF実行結果
	 * @return S-IF実行結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String,Object> callEKK1551D010SC(SessionHandle handle, IRequestParameterReadWrite param, 
			String svcKeiNo, HashMap<String, Object> ekk1081d010Map, CAANMsg kk0341Map) throws Exception
	{
		CAANMsg template = editInMsgEKK1551D010SC(svcKeiNo, ekk1081d010Map, kk0341Map);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK1551D010SC(sIFResult, param);
	}


	/**
	 * EKK1551D010オーダ情報作成ワーク登録　入力マッピング
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param kk0341Map 機器提供サービス契約照会結果レコード
	 * @param ekk1081d010Map オーダ発行条件登録S-IF実行結果
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK1551D010SC(String svcKeiNo, HashMap<String, Object> ekk1081d010Map, CAANMsg kk0341Map) 
	{
		CAANMsg template = new CAANMsg(EKK1551D010CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK1551D010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK1551D010CBSMsg.TEMPLATEID, "EKK1551D010");

		// 機能コード
		template.set(EKK1551D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);		//更新
		
		//オーダ発行条件番号
		template.set(EKK1551D010CBSMsg.ODR_HAKKO_JOKEN_NO, ekk1081d010Map.get(EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_NO));
		//オーダ内容コード
		template.set(EKK1551D010CBSMsg.ODR_NAIYO_CD, JKKHakkoSODConstCC.ODR_NAIYO_CD_255);
		//サービス契約番号
		template.set(EKK1551D010CBSMsg.SVC_KEI_NO, svcKeiNo);
		//サービス契約世代登録年月日時分秒
		//サービス契約内訳番号
		//サービス契約内訳世代登録年月日時分秒
		if (null != kk0341Map)
		{
			//機器提供サービス契約番号
			template.set(EKK1551D010CBSMsg.KKTK_SVC_KEI_NO, kk0341Map.getString(EKK0341B022CBSMsg1List.KKTK_SVC_KEI_NO));
			//機器提供サービス契約世代登録年月日時分秒
			template.set(EKK1551D010CBSMsg.KKTSVKEI_GADTM, kk0341Map.getString(EKK0341B022CBSMsg1List.GENE_ADD_DTM));
		}
		//オプションサービス契約番号
		//オプションサービス契約世代登録年月日時分秒
		//サブオプションサービス契約番号
		//サブオプションサービス契約世代登録年月日時分秒
		//請求オプションサービス契約番号
		//請求オプションサービス契約世代登録年月日時分秒
		//付加情報契約番号
		//付加情報契約世代登録年月日時分秒
		//変更前サービス契約世代登録年月日時分秒
		//変更前サービス契約内訳世代登録年月日時分秒
		//変更前機器提供サービス契約世代登録年月日時分秒
		//変更前オプションサービス契約世代登録年月日時分秒
		//変更前サブオプション契約世代登録年月日時分秒
		//変更前請求オプション契約世代登録年月日時分秒
		//変更前付加情報契約世代登録年月日時分秒

		return template;
	}


	/**
	 * EKK1551D010オーダ情報作成ワーク登録　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK1551D010SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception 
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		return template.getHashMap();
	}
	
//IT2-2014-0000045 20140120 START
	/**
	 * EKK0341B002機器提供サービス契約（サービス契約番号）一覧照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private CAANMsg[] callEKK0341B002SC(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo) throws Exception 
	{
		CAANMsg template = editInMsgEKK0341B002(svcKeiNo);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK0341B002SC(sIFResult, param);
	}

	
	
	private CAANMsg editInMsgEKK0341B002(
			String svcKeiNo)
	throws Exception 
	{
		
		CAANMsg template = new CAANMsg(EKK0341B002CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0341B002CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B002CBSMsg.TEMPLATEID, "EKK0341B002");

		// 機能コード
		template.set(EKK0341B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_8);		//カレント取得
		
		// ＫＥＹ＿サービス契約番号
		template.set(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK0341B002機器提供サービス契約一覧照会　出力マッピング
	 * 
	 * @param result S-IF実行結果
	 * @param param リクエストパラメータ
	 * @return S-IF実行結果リスト
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] editResultRP_EKK0341B002SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception 
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);

//		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;
		return childTemplates;
	}

	
//IT2-2014-0000045 20140120 END

	// OM-2015-0001758 20150930 ADD START
	/**
	 * EKK0161A010サービス契約内訳一意照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約内訳番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK0161A010SC(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiUcwkNo) throws Exception 
	{
		CAANMsg template = editInMsgEKK0161A010SC(svcKeiUcwkNo);
		editBasicCmn(param, template);
		
		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		return editResultRP_EKK0161A010SC(sIFResult, param);
	}
	
	/**
	 * EKK0161A010サービス契約内訳一意照会　入力マッピング
	 * 
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0161A010SC(String svcKeiUcwkNo) 
	{
		CAANMsg template = new CAANMsg(EKK0161A010CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0161A010CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(EKK0161A010CBSMsg.TEMPLATEID, "EKK0161A010");
		
		// 機能コード
		template.set(EKK0161A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
		
		// ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
		// ＫＥＹ＿予約適用年月日
		template.set(EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, "20991231");
		
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK0161A010サービス契約内訳一意照会　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK0161A010SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		errChk(result, param, template);
		
		//照会結果を格納
		HashMap<String, Object> resultHashMap = new HashMap<String, Object>();
		
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		
		if (childTemplates != null && childTemplates.length > 0)
		{
			resultHashMap = childTemplates[0].getHashMap();
		}
		
		return resultHashMap;
	}
	
	/**
	 * EKK0191A010サービス契約内訳＜eo光電話＞一意照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約内訳番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK0191A010_2SC(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiUcwkNo, String geneAddDtm) throws Exception 
	{
		CAANMsg template = editInMsgEKK0191A010_2SC(svcKeiUcwkNo, geneAddDtm);
		editBasicCmn(param, template);
		
		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		return editResultRP_EKK0191A010_2SC(sIFResult, param);
	}
	
	/**
	 * EKK0191A010サービス契約内訳＜eo光電話＞一意照会　入力マッピング
	 * 
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm   世代登録年月日時分秒
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0191A010_2SC(String svcKeiUcwkNo, String geneAddDtm) 
	{
		CAANMsg template = new CAANMsg(EKK0191A010CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0191A010CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(EKK0191A010CBSMsg.TEMPLATEID, "EKK0191A010");
		
		// 機能コード
		template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
		// ＫＥＹ＿世代登録年月日時分秒
		template.set(EKK0191A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm);
		
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK0191A010サービス契約内訳＜eo光電話＞一意照会　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK0191A010_2SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		errChk(result, param, template);
		
		//照会結果を格納
		HashMap<String, Object> resultHashMap = new HashMap<String, Object>();
		
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
		
		if (childTemplates != null && childTemplates.length > 0)
		{
			resultHashMap = childTemplates[0].getHashMap();
		}
		
		return resultHashMap;
	}
	
	/**
	 * EKK0191C061サービス契約内訳＜eo光電話＞情報変更(住所変更)
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk0161a010_map サービス契約内訳一意照会結果
	 * @param ekk0191a010_map サービス契約内訳＜eo光電話＞一意照会結果
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param newJun 電話番号順
	 * @param takinoFlg 多機能フラグ(0:VA使用, 1:多機能使用)
	 * @return S-IF実行結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK0191C061SC(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> ekk0161a010_map, 
			HashMap<String, Object> ekk0191a010_map, String idoDiv, String mskmDtlNo, String newJun, String takinoFlg ) throws Exception 
	{
		CAANMsg template = editInMsgEKK0191C061SC(ekk0161a010_map, ekk0191a010_map, idoDiv, mskmDtlNo, newJun, takinoFlg);
		editBasicCmn(param, template);
		
		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		return editResultRP_EKK0191C061SC(sIFResult, param);
	}
	
	/**
	 * EKK0191C061サービス契約内訳＜eo光電話＞情報変更(住所変更)　入力マッピング
	 * 
	 * @param ekk0161a010_map サービス契約内訳一意照会結果
	 * @param ekk0191a010_map サービス契約内訳＜eo光電話＞一意照会結果
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param newJun 電話番号順
	 * @param takinoFlg 多機能フラグ(0:VA使用, 1:多機能使用)
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0191C061SC(HashMap<String, Object> ekk0161a010_map, HashMap<String, Object> ekk0191a010_map, String idoDiv, String mskmDtlNo, String newJun, String takinoFlg) 
	{
		CAANMsg template = new CAANMsg(EKK0191C061CBSMsg.class.getName());
		
		fillNullMappingForInfChg(template, new EKK0191C061CBSMsg().getContents(), ekk0161a010_map, ekk0191a010_map);
		// テンプレートID(SIFのID)
		template.set(EKK0191C061CBSMsg.TEMPLATEID, "EKK0191C061");
		
		// 機能コード
		template.set(EKK0191C061CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ※一意照会転記以外
		// 申込明細番号
		template.set(EKK0191C061CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		
		// 異動区分
		template.set(EKK0191C061CBSMsg.IDO_DIV, idoDiv);
		
		// 電話番号順
		template.set(EKK0191C061CBSMsg.TELNO_JUN, newJun);
		
		// ANK-2953-00-00 DEL START
//		if("1".equals(takinoFlg))
//		{
//			//多機能ルーターが使用機器の場合に、電話番号順に合わせてポート番号を設定する。
//			template.set(EKK0191C061CBSMsg.VA_PORT_NO, newJun);
//		}
		// ANK-2953-00-00 DEL END
		
		// 更新年月日時分秒(更新前)
		template.set(EKK0191C061CBSMsg.UPD_DTM_BF, ekk0191a010_map.get(EKK0191A010CBSMsg1List.LAST_UPD_DTM));
		
		// 事務手数料自動適用要否
		template.set(EKK0191C061CBSMsg.RULE0059_AUTO_APLY, JKKStrConst.CD00001_0);
		
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK0191C061サービス契約内訳＜eo光電話＞情報変更(住所変更)　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK0191C061SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		errChk(result, param, template);
		
		return template.getHashMap();
	}
	
	/**
	 * 情報変更用の初期値設定(スーパータイプとサブタイプ)
	 * 
	 * @param template 
	 * @param contents 対応クラスのフィールド列挙
	 * @param msgSuperType スーパータイプの一意照会結果
	 * @param msgSubType サブタイプの一意照会結果
	 */
	private void fillNullMappingForInfChg(CAANMsg template, Object[][] contents, HashMap<String, Object> msgSuperType, HashMap<String, Object> msgSubType)
	{	
		
		for(int i = 0 ; contents != null && i < contents.length ; i++)
		{
			String element = (String)contents[i][0];
			
			
			if (!JKKBpCommon.isNull(element))
			{
				if (element.indexOf("_err") < 0)
				{
					if (msgSuperType != null && msgSuperType.containsKey(element))
					{
						template.set(element, (String)msgSuperType.get(element));
					}
					else if (msgSubType != null && msgSubType.containsKey(element))
					{
						template.set(element, (String)msgSubType.get(element));
					}
					else
					{
						template.setNull(element);
					}
				}
				else
				{
					template.setNull(element);
				}
			}
			else
			{
				// ありえないため処理なし
			}
		}
		
		// 以下の項目は上りマッピングで実施する為ここで削除
		// オペレータID
		template.setNull("operatorID");
		//運用日付
		template.setNull("operateDate");
		//運用日時
		template.setNull("operateDatetime");
		//テンプレートID
		template.setNull("templateID");
		//機能コード
		template.setNull("func_code");
	}
	// OM-2015-0001758 20150930 ADD END
	// OM-2015-0001758 20151015 ADD START
	/**
	 * EKK0251B003サービス契約回線内訳一覧照会（現在利用中）
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK0251B003SC(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo) throws Exception 
	{
		CAANMsg template = editInMsgEKK0251B003SC(svcKeiNo);
		editBasicCmn(param, template);
		
		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		return editResultRP_EKK0251B003SC(sIFResult, param);
	}
	
	/**
	 * EKK0251B003サービス契約回線内訳一覧照会（現在利用中）　入力マッピング
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0251B003SC(String svcKeiNo) 
	{
		CAANMsg template = new CAANMsg(EKK0251B003CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0251B003CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(EKK0251B003CBSMsg.TEMPLATEID, "EKK0251B003");
		
		// 機能コード
		template.set(EKK0251B003CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
		
		// ＫＥＹ＿サービス契約番号
		template.set(EKK0251B003CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK0251B003サービス契約回線内訳一覧照会（現在利用中）　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK0251B003SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		errChk(result, param, template);
		
		//照会結果を格納
		HashMap<String, Object> resultHashMap = new HashMap<String, Object>();
		
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST);
		
		if (childTemplates != null && childTemplates.length > 0)
		{
			resultHashMap = childTemplates[0].getHashMap();
		}
		
		return resultHashMap;
	}
	
	/**
	 * EKK2091B001住所変更一覧照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param itnmSvkeiKisUwNo サービス契約回線内訳番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK2091B001SC(SessionHandle handle, IRequestParameterReadWrite param, String itnmSvkeiKisUwNo) throws Exception 
	{
		CAANMsg template = editInMsgEKK2091B001SC(itnmSvkeiKisUwNo);
		editBasicCmn(param, template);
		
		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);
		
		return editResultRP_EKK2091B001SC(sIFResult, param);
	}
	
	/**
	 * EKK2091B001住所変更一覧照会　入力マッピング
	 * 
	 * @param itnmSvkeiKisUwNo サービス契約回線内訳番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK2091B001SC(String itnmSvkeiKisUwNo) 
	{
		CAANMsg template = new CAANMsg(EKK2091B001CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2091B001CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(EKK2091B001CBSMsg.TEMPLATEID, "EKK2091B001");
		
		// 機能コード
		template.set(EKK2091B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ＫＥＹ＿移転元サービス契約回線内訳番号
		template.set(EKK2091B001CBSMsg.KEY_ITNM_SVKEI_KISUW_NO, itnmSvkeiKisUwNo);
		
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK2091B001住所変更一覧照会　出力マッピング
	 * 
	 * @param result S-IF実行結果のマップ
	 * @param param リクエストパラメータ
	 * @return S-IF出力マップ
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK2091B001SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		errChk(result, param, template);
		
		//照会結果を格納
		HashMap<String, Object> resultHashMap = new HashMap<String, Object>();
		
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK2091B001CBSMsg.EKK2091B001CBSMSG1LIST);
		
		if (childTemplates != null && childTemplates.length > 0)
		{
			resultHashMap = childTemplates[0].getHashMap();
		}
		
		return resultHashMap;
	}
	
	/**
	 * EKK2101B001住所変更明細一覧照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param svcKeiNo サービス契約番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private ArrayList<HashMap<String, Object>> callEKK2101B001SC(SessionHandle handle, IRequestParameterReadWrite param, String adchgNo, String adchgDtlSbtCd) throws Exception 
	{
		CAANMsg template = editInMsgEKK2101B001SC(adchgNo, adchgDtlSbtCd);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK2101B001SC(sIFResult, param);
	}

	/**
	 * EKK2101B001住所変更明細一覧照会　入力マッピング
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK2101B001SC(String adchgNo, String adchgDtlSbtCd) 
	{
		CAANMsg template = new CAANMsg(EKK2101B001CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2101B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK2101B001CBSMsg.TEMPLATEID, "EKK2101B001");

		// 機能コード
		template.set(EKK2101B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ＫＥＹ＿住所変更番号
		template.set(EKK2101B001CBSMsg.KEY_ADCHG_NO, adchgNo);
		
		// ＫＥＹ＿住所変更明細種別コード
		if (null == adchgDtlSbtCd || "".equals(adchgDtlSbtCd))
		{
			template.setNull(EKK2101B001CBSMsg.KEY_ADCHG_DTL_SBT_CD);
		}
		else
		{
			template.set(EKK2101B001CBSMsg.KEY_ADCHG_DTL_SBT_CD, adchgDtlSbtCd);
		}

		// 上り情報を生成
		return template;
	}


	/**
	 * EKK2101B001住所変更明細一覧照会　出力マッピング
	 * 
	 * @param result S-IF実行結果
	 * @param param リクエストパラメータ
	 * @return S-IF実行結果リスト
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, Object>> editResultRP_EKK2101B001SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception 
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		errChk(result, param, template);

		//照会結果を格納
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK2101B001CBSMsg.EKK2101B001CBSMSG1LIST);

		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;
	}
	
	/**
	 * EKK0341B032機器提供サービス契約一覧照会（住変用）
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @return 一覧照会結果
	 * @throws Exception 任意の例外
	 */
	private HashMap<String, Object> callEKK0341B032SC(SessionHandle handle, IRequestParameterReadWrite param, String kktkSvcKeiNo) throws Exception 
	{
		CAANMsg template = editInMsgEKK0341B032SC(kktkSvcKeiNo);
		editBasicCmn(param, template);

		// サービスIF共通の情報を設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		Map<?, ?> sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		return editResultRP_EKK0341B032SC(sIFResult, param);
	}
	
	/**
	 * EKK0341B032機器提供サービス契約一覧照会（住変用）　入力マッピング
	 * 
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @return S-IF入力テンプレート
	 */
	private CAANMsg editInMsgEKK0341B032SC(String kktkSvcKeiNo) 
	{
		CAANMsg template = new CAANMsg(EKK0341B032CBSMsg.class.getName());
		
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0341B032CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B032CBSMsg.TEMPLATEID, "EKK0341B032");

		// 機能コード
		template.set(EKK0341B032CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
		
		// ＫＥＹ＿機器提供サービス契約番号
		template.set(EKK0341B032CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		
		// ＫＥＹ＿予約適用年月日
		template.set(EKK0341B032CBSMsg.KEY_RSV_APLY_YMD, "20991231");
		// 上り情報を生成
		return template;
	}
	
	/**
	 * EKK0341B032機器提供サービス契約一覧照会（住変用）　出力マッピング
	 * 
	 * @param result S-IF実行結果
	 * @param param リクエストパラメータ
	 * @return S-IF実行結果リスト
	 * @throws Exception 任意の例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRP_EKK0341B032SC(Map<?, ?> result, IRequestParameterReadWrite param) throws Exception 
	{
		//結果の取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		errChk(result, param, template);
		
		//照会結果を格納
		HashMap<String, Object> resultHashMap = new HashMap<String, Object>();
		
		CAANMsg[] childTemplates = template.getCAANMsgList(EKK0341B032CBSMsg.EKK0341B032CBSMSG1LIST);
		
		if (childTemplates != null && childTemplates.length > 0)
		{
			resultHashMap = childTemplates[0].getHashMap();
		}
		
		return resultHashMap;
	}
	// OM-2015-0001758 20151015 ADD END
}
