/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKTmcpOperateCC
*	ソースファイル名：JKKTmcpOperateCC.java
*	作成者			：FJ）澤田
*	日付			：2018年09月26日
*＜機能概要＞ 
*	端末補償操作の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v39.00.00	2018/09/26	FJ）澤田	新規作成【ANK-3484-00-00】端末補償
*	v39.00.01	2018/09/26	FJ）澤田	【IT1-2018-0000160】個別でＰＣワイドプランを申込時に申込明細番号を設定対応
*	v39.00.02	2018/10/17	FJ）澤田	【IT1-2018-0000162】端末補償契約番号の統一対応
*	v39.00.03	2018/10/30	FJ）澤田	【IT1-2018-0000190】ＰＣワイドプラン解約時のサービス解約理由コードの設定対応
*	v39.00.04	2018/11/06	FJ）原田	【IT1-2018-0000195】コンテンツデータで照会するとエラー対応
*	v39.00.05	2018/11/02	FJ）澤田	【IT1-2018-0000191】おうちの機器端末補償表示不正
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
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.common.util.JKKCommonUtil;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECK0011B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351C270CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C280CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C300CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C310CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401C150CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C170CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C210CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C230CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;

/**
 *端末補償操作の共通コンポーネントクラスです。
 * <BR>
 * @author FJ
 */
public class JKKTmcpOperateCC extends AbstractCommonComponent
{
	
	/** オプションサービス契約一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0351B002 = "EKK0351B002";
	
	/** オプションサービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0351A010 = "EKK0351A010";
	
	/** オプションサービス契約＜ISP＞一意照会 */
	private static final String TEMPLATE_ID_EKK0361A010 = "EKK0361A010";
	
	/** サブオプションサービス契約一覧照会 */
	private static final String TEMPLATE_ID_EKK0401B001 = "EKK0401B001";

	/** サブオプションサービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0401A010 = "EKK0401A010";
	
	/** サブオプションサービス契約＜ISP＞一意照会 */
	private static final String TEMPLATE_ID_EKK0411A010 = "EKK0411A010";
	
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	
	/** 課金先一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0321B002 = "EKK0321B002";
	
	/** 異動予約一意照会 */
	private static final String TEMPLATE_ID_EKK1681B001 = "EKK1681B001";

	/** オプションサービス契約履歴一覧照会 */
	private static final String TEMPLATE_ID_EKK0351B003 = "EKK0351B003";	
	
	/** サブオプションサービス契約履歴一覧照会 */
	private static final String TEMPLATE_ID_EKK0401B003 = "EKK0401B003";
	
	/** サービス契約回線内訳一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0251B001 = "EKK0251B001";
	
	/** 住所変更一覧照会 */
	private static final String TEMPLATE_ID_EKK2091B001 = "EKK2091B001";
	
	/** 住所変更明細一覧照会 */
	private static final String TEMPLATE_ID_EKK2101B001 = "EKK2101B001";
	
	/** 登録用情報リスト */
	public static final String KEY_ADD_INFO_LIST = "add_info_list";
	
	/** 解約用情報リスト */
	public static final String KEY_CANCEL_INFO_LIST = "cancel_info_list";
	
	/** 回復用情報リスト */
	public static final String KEY_KAIHK_INFO_LIST = "kaihk_info_list";
	
	/** オプションサービス＜ISP＞登録 */
	private static final String TEMPLATE_ID_EKK0361D010 = "EKK0361D010";

	/** オプションサービス契約＜ISP＞照査 */
	private static final String TEMPLATE_ID_EKK0361C010 = "EKK0361C010";
	
	/** オプションサービス契約＜ISP＞照査締結 */
	private static final String TEMPLATE_ID_EKK0361C030 = "EKK0361C030";
	
	/** オプションサービス契約＜ISP＞情報変更 */
	private static final String TEMPLATE_ID_EKK0361C050 = "EKK0361C050";
	
	/** オプションサービス契約キャンセル */
	private static final String TEMPLATE_ID_EKK0351C220 = "EKK0351C220";
	
	/** オプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK0351C240 = "EKK0351C240";
	
	/** オプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0351C250 = "EKK0351C250";

	/** オプションサービス契約回復 */
	private static final String TEMPLATE_ID_EKK0351C270 = "EKK0351C270";
	
	/** 休止中オプションサービス契約回復 */
	private static final String TEMPLATE_ID_EKK0351C280 = "EKK0351C280";
	
	/** 照査後オプションサービス契約キャンセル取消 */
	private static final String TEMPLATE_ID_EKK0351C300 = "EKK0351C300";
	
	/** オプションサービス契約解約取消 */
	private static final String TEMPLATE_ID_EKK0351C310 = "EKK0351C310";
	
	/** サブオプションサービス契約＜ISP＞登録 */
	private static final String TEMPLATE_ID_EKK0411D010 = "EKK0411D010";
	
	/** サブオプションサービス契約＜ISP＞照査 */
	private static final String TEMPLATE_ID_EKK0411C020 = "EKK0411C020";
	
	/** サブオプションサービス契約＜ISP＞照査締結 */
	private static final String TEMPLATE_ID_EKK0411C040 = "EKK0411C040";
	
	/** サブオプションサービス契約キャンセル */
	private static final String TEMPLATE_ID_EKK0401C150 = "EKK0401C150";
	
	/** サブオプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK0401C170 = "EKK0401C170";
	
	/** サブオプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0401C180 = "EKK0401C180";
	
	/** サブオプションサービス契約回復 */
	private static final String TEMPLATE_ID_EKK0401C200 = "EKK0401C200";

	/** 休止中サブオプションサービス契約回復 */
	private static final String TEMPLATE_ID_EKK0401C210 = "EKK0401C210";
	
	/** 照査後サブオプションサービス契約キャンセル取消 */
	private static final String TEMPLATE_ID_EKK0401C230 = "EKK0401C230";
	
	/** サブオプションサービス契約解約取消 */
	private static final String TEMPLATE_ID_EKK0401C240 = "EKK0401C240";
	
	/** 異動予約異動予約状態変更 */
	private static final String TEMPLATE_ID_EKK1681C010 = "EKK1681C010";
	
	/** 処理区分 照会 **/
	private static final String SHORI_DIV_1 = "1";
		
	/** 処理区分 登録 **/
	private static final String SHORI_DIV_2 = "2";
	
	/** 処理区分 削除 **/
	private static final String SHORI_DIV_3 = "3";
	
	/** 処理区分 回復 **/
	private static final String SHORI_DIV_4 = "4";

	/** リターンメッセージの書式指定文字列 */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	
	/** エラー項目接尾辞 */
	private static final String ERRITEM_SUFFIX = "_err";
	
	/** リターンメッセージ取得キー */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	
	/** 料金コースコード スマートリンクプレミアム */
	public static final String PCRS_CD_SMARTLINK_PREMIUM = "F08";
	
	/** キャンセル理由コード「その他」 */
	private static final String CNSL_RSN_CD_OTHER = "05";
	
	/** ＰＣプラン */
	private static final String OP_SVC_CD_B133 = "B133";
	
	/** ＰＣプラン 料金コース */
	private static final String PCRS_CD_BE4 = "BE4";

	/** ＰＣプラン 料金プランコース */
	private static final String PPLAN_CD_PBE401 = "PBE401";

	/** ＴＶプラン */
	private static final String OP_SVC_CD_B134 = "B134";
	
	/** ＴＶプラン 料金コース */
	private static final String PCRS_CD_BE5 = "BE5";

	/** ＴＶプラン 料金プランコース */
	private static final String PPLAN_CD_PBE501 = "PBE501";
	
	/** ＰＣワイドプラン */
	private static final String SBOP_SVC_CD_D12 = "D12";
	
	/** ＰＣワイドプラン 料金コース */
	private static final String PCRS_CD_D12 = "D12";
	
	/** ＰＣワイドプラン 料金プランコース */
	private static final String PPLAN_CD_PD1201 = "PD1201";
	
	/*************************************************************/
	/** 進捗ステータス                                          **/
	/*************************************************************/
	/** 進捗ステータス：5102 オプション設定完了 */
	private static final String PRG_STAT_5102 = "5102";
	
	/** 登録フラグ有 */
	private static final String ARI_1 = "1";
	
	/** 異動予約詳細コード キー名 */
	private static final String IDO_RSV_DTL_CD = "ido_rsv_dtl_cd";
	/** 異動予約詳細コード：オプション開始 */
	private static final String IDO_RSV_STS_OP_STA = "014";
	/** 異動予約詳細コード：オプション解約 */
	private static final String IDO_RSV_STS_OP_DSL = "016";

	/** 予約種類:予約なし */
	private static final String NOT_RSV = "0";
	/** 予約種類:解約予約 */
	private static final String DSL_CANSEL = "1";
	/** 予約種類:登録予約 */
	private static final String REG_CANSEL = "2";
	/** 予約種類:その他 */
	private static final String RSN_ETC = "3";

	/** 異動予約状態コード：取消済 */
	private static final String IDO_RSV_STAT_CD_CANCEL = "02";
	
	/*************************************************************/
	/** 解約理由コード                                          **/
	/*************************************************************/
	/** 通常解約 */
	private static final String SVC_DLRE_CD_NORMAL = "01";
	/** 引継ぎ解約*/
	private static final String SVC_DLRE_CD_HKTG   = "04";
	
	/** サービス契約ステータス（照査済） */
	public static final String SVC_KEI_STAT_020 = "020";
	/** サービス契約ステータス（締結済） */
	public static final String SVC_KEI_STAT_030 = "030";
	/** サービス契約ステータス（サービス提供中） */
	public static final String SVC_KEI_STAT_100 = "100";
	/** サービス契約ステータス（休止・中断中） */
	public static final String SVC_KEI_STAT_210 = "210";
	/** サービス契約ステータス（停止中） */
	public static final String SVC_KEI_STAT_220 = "220";
	/** サービス契約ステータス:解約済 */
	private static final String SVC_KEI_STAT_KAI = "910";	
	/** サービス契約ステータス:キャンセル済 */
	private static final String SVC_KEI_STAT_CNL = "920";	
	
	/**
	 *端末補償操作処理を行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite main(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ユーザデータ情報
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		IRequestParameterReadWrite retParam = param;
		
		//データマップがNULLの場合、処理を終了する。
		if (dataMap == null)
		{
			// 入力データチェック終了ログ出力
			throw new Exception("データマップ不正");
		}
		// 処理区分がNULLの場合、処理を終了する。
		if (JKKCommonUtil.isNull((String)dataMap.get("shori_div")))
		{
			// 入力データチェック終了ログ出力
			throw new Exception("処理区分不正");
		}
		
		// 処理区分
		String shoriDiv = (String)dataMap.get("shori_div");
		
		// 機能コード
		String func_cd = (String)dataMap.get("func_cd");
		
		// サービス契約番号
		String svcKeiNo = (String)dataMap.get("svc_kei_no");
		
		// 異動区分
		String idoDiv = (String)dataMap.get("ido_div");
		
		// IT1-2018-0000191 ADD START
		// オプションサービス契約番号
		String opSvcKeiNo = (String)dataMap.get("op_svc_kei_no");
		// IT1-2018-0000191 ADD END
		
		// 更新年月日時分秒
		String updDtmBf = "";

		// 処理区分が照会の場合
		if (SHORI_DIV_1.equals(shoriDiv))
		{
			// IT1-2018-0000191 MOD START
			//search(handle, retParam, fixedText, dataMap, func_cd, svcKeiNo);
			search(handle, retParam, fixedText, dataMap, func_cd, svcKeiNo, opSvcKeiNo);
			// IT1-2018-0000191 MOD END
		}
		// 処理区分が登録の場合
		else if (SHORI_DIV_2.equals(shoriDiv))
		{
			updDtmBf = addTmcp(handle, retParam, fixedText, dataMap, scCall, func_cd, idoDiv, updDtmBf);
		}
		// 処理区分が解約の場合
		else if (SHORI_DIV_3.equals(shoriDiv))
		{
			updDtmBf = dslTmcp(handle, retParam, fixedText, dataMap, scCall, func_cd, idoDiv, updDtmBf);
		}
		// 処理区分が回復の場合
		else if (SHORI_DIV_4.equals(shoriDiv))
		{
			updDtmBf = kaihkTmcp(handle, retParam, fixedText, dataMap, scCall, func_cd, idoDiv, updDtmBf);
		}

		List<HashMap<String, Object>> addInfoList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> cancelInfoList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> kaihkInfoList = new ArrayList<HashMap<String, Object>>();

		addInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_ADD_INFO_LIST);
		cancelInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_CANCEL_INFO_LIST);
		kaihkInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_KAIHK_INFO_LIST);

		//変更後更新年月日時分秒（サービス契約）の更新を行う。
		if (addInfoList != null) 
		{
			HashMap<String, Object> addInfoMap = (HashMap<String, Object>)addInfoList.get(0);
			// 変更後更新年月日時分秒（サービス契約）
			addInfoMap.put("upd_dtm_af", updDtmBf);
		}
		if (cancelInfoList != null) 
		{
			HashMap<String, Object> cancelInfoMap = (HashMap<String, Object>)cancelInfoList.get(0);
			// 変更後更新年月日時分秒（サービス契約）
			cancelInfoMap.put("upd_dtm_af", updDtmBf);
		}
		if (kaihkInfoList != null) 
		{
			HashMap<String, Object> kaihkInfoMap = (HashMap<String, Object>)kaihkInfoList.get(0);
			// 変更後更新年月日時分秒（サービス契約）
			kaihkInfoMap.put("upd_dtm_af", updDtmBf);
		}
		
		return retParam;
	}
	
	/**
	 *照会処理を実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param dataMap データ取得CCマップ
	 * @throws Throwable 例外が発生した場合
	 */
	private void search(SessionHandle handle
									, IRequestParameterReadWrite param
									, String fixedText
									, Map<String, Object> dataMap
									, String func_cd
									// IT1-2018-0000191 MOD START
									//, String svcKeiNo) throws Throwable
									, String svcKeiNo
									, String pramOpSvcKeiNo
									) throws Throwable
									// IT1-2018-0000191 MOD END
	{
		// 通常の照会 START /////////////////////////////////////////////////////////////////////
		// サービスIF実行
		List<HashMap<String, Object>> eKK0351B002Msg1List = getEKK0351B002(handle, param, fixedText, dataMap, func_cd, svcKeiNo);

		List<HashMap<String, Object>> pcPlanList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> pcWideList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> tvPlanList = new ArrayList<HashMap<String, Object>>();
		
		if (null != eKK0351B002Msg1List)
		{
			for (Map<String, Object> eKK0351B002Msg : eKK0351B002Msg1List)
			{
				//ＰＣプランの場合
				if (OP_SVC_CD_B133.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
				{
					// IT1-2018-0000191 ADD START
					String opSvcKeiNo =(String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
					// パラメータのオプションサービス契約番号が一致しない場合、次の処理へ
					if (!JKKStringUtil.isNullBlank(pramOpSvcKeiNo) && !opSvcKeiNo.equals(pramOpSvcKeiNo))
					{
						continue;
					}
					// IT1-2018-0000191 ADD END
					HashMap<String, Object> pcPlanMap = new HashMap<String, Object>();
					HashMap<String, Object> pcPlanMapIsp = new HashMap<String, Object>();
					//オプションサービス契約一意照会
					pcPlanMap = getEKK0351A010(handle, param, fixedText, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					//オプションサービス契約<ISP>一意照会
					pcPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					pcPlanMap.putAll(pcPlanMapIsp);
					pcPlanList.add(pcPlanMap);
					//サブオプションの存在チェック
					List<HashMap<String, Object>> eKK0401B001List = getEKK0401B001(handle, param, fixedText, dataMap, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					//PCワイドプラン
					for (Map<String, Object> eKK0401B001Map : eKK0401B001List)
					{
						HashMap<String, Object> pcWideMap = new HashMap<String, Object>();
						HashMap<String, Object> pcWideMapIsp = new HashMap<String, Object>();
						//サブオプションサービス契約一意照会
						pcWideMap = getEKK0401A010(handle, param, fixedText, dataMap, (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO), (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
						//サブオプションサービス契約<ISP>一意照会
						pcWideMapIsp = getEKK0411A010(handle, param, fixedText, dataMap, (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO), (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
						pcWideMap.putAll(pcWideMapIsp);
						pcWideList.add(pcWideMap);
						break;
					}
					break;
				}
			}
			for (Map<String, Object> eKK0351B002Msg : eKK0351B002Msg1List)
			{
				//ＴＶプランの場合
				if (OP_SVC_CD_B134.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
				{
					// IT1-2018-0000191 ADD START
					String opSvcKeiNo =(String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
					// パラメータのオプションサービス契約番号が一致しない場合、次の処理へ
					if (!JKKStringUtil.isNullBlank(pramOpSvcKeiNo) && !opSvcKeiNo.equals(pramOpSvcKeiNo))
					{
						continue;
					}
					// IT1-2018-0000191 ADD END
					HashMap<String, Object> tvPlanMap = new HashMap<String, Object>();
					HashMap<String, Object> tvPlanMapIsp = new HashMap<String, Object>();
					//オプションサービス契約一意照会
					tvPlanMap = getEKK0351A010(handle, param, fixedText, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					//オプションサービス契約<ISP>一意照会
					tvPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					tvPlanMap.putAll(tvPlanMapIsp);
					tvPlanList.add(tvPlanMap);
					break;
				}
			}
		}
		HashMap<String, List<HashMap<String, Object>>> infoListMap = new HashMap<String, List<HashMap<String, Object>>>();

		infoListMap.put("pc_plan_list", pcPlanList);
		infoListMap.put("pc_wide_list", pcWideList);
		infoListMap.put("tv_plan_list", tvPlanList);

		//照会リスト
		dataMap.put("info_list", infoListMap);
		// 通常の照会 END /////////////////////////////////////////////////////////////////////
		// 住所変更の照会 START /////////////////////////////////////////////////////////////////////
		List<HashMap<String, Object>> adPcPlanList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> adPcWideList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> adTvPlanList = new ArrayList<HashMap<String, Object>>();

		//サービス契約回線内訳一覧照会（サービス契約番号）
		String svcKeiKaisenUcwkNo = callGetKaisenTgSvkei(handle, param, fixedText, svcKeiNo);
		
		// IT1-2018-0000195 ADD START
		if(!JKKStringUtil.isNullBlank(svcKeiKaisenUcwkNo))
		{
		// IT1-2018-0000195 ADD END
		//住所変更一覧照会
		List<HashMap<String, Object>> eKK2091B001Msg1List = getEKK2091B001(handle, param, fixedText, dataMap, func_cd, svcKeiKaisenUcwkNo);
		if (null != eKK2091B001Msg1List && eKK2091B001Msg1List.size() != 0)
		{
			String adchgStat = (String)eKK2091B001Msg1List.get(0).get(EKK2091B001CBSMsg1List.ADCHG_STAT);
			String adchgNo = (String)eKK2091B001Msg1List.get(0).get(EKK2091B001CBSMsg1List.ADCHG_NO);

			//住所変更中の場合
			if ("001".equals(adchgStat))
			{
				//住所変更明細のサービス契約一覧を取得する。
				List<HashMap<String, Object>> eKK2101B001Msg1List = getEKK2101B001(handle, param, fixedText, dataMap, func_cd, adchgNo, "01");
				if (null != eKK2101B001Msg1List && eKK2101B001Msg1List.size() != 0)
				{
					// サービス契約で取得した中に解約・新規が含まれる場合
					for (Map<String, Object> eKK2101B001Map : eKK2101B001Msg1List)
					{
						String chbfSkbtNo = (String)eKK2101B001Map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
						String chafSkbtNo = (String)eKK2101B001Map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
						
						//解約予定のオプションサービス契約番号と住所変更明細.変更後識別番）と
						//同じではない場合
						if (!JKKStringUtil.nullToBlank(chafSkbtNo).equals(svcKeiNo)) 
						{
							continue;
						}
						
						// 住所変更明細.変更前識別番号(オプションサービス契約番号)が住所変更明細.変更前識別番号（オプションサービス契約番号）と同じ場合	
						if (!JKKStringUtil.isNullBlank(chbfSkbtNo) && !JKKStringUtil.isNullBlank(chafSkbtNo) && !chbfSkbtNo.equals(chafSkbtNo))
						{
							//住所変更明細のオプション一覧を取得する。
							eKK2101B001Msg1List = getEKK2101B001(handle, param, fixedText, dataMap, func_cd, adchgNo, "04");
							for (Map<String, Object> eKK2101B001OpMapOp : eKK2101B001Msg1List)
							{
								String chbfOpKeiNo = (String)eKK2101B001OpMapOp.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
								String chafOpKeiNo = (String)eKK2101B001OpMapOp.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
								if (!JKKStringUtil.isNullBlank(chbfOpKeiNo) && !JKKStringUtil.isNullBlank(chafOpKeiNo) && chbfOpKeiNo.equals(chafOpKeiNo))
								{
									//オプションサービス契約一意照会
									HashMap<String, Object> adOpMap = new HashMap<String, Object>();
									HashMap<String, Object> adOpIspMap = new HashMap<String, Object>();
									adOpMap = getEKK0351A010(handle, param, fixedText, chbfOpKeiNo);
									//ＰＣプランの場合
									if (adOpMap != null && OP_SVC_CD_B133.equals(adOpMap.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
									{
										//オプションサービス契約<ISP>一意照会
										adOpIspMap = getEKK0361A010(handle, param, fixedText, func_cd, chbfOpKeiNo);
										adOpMap.putAll(adOpIspMap);
										adPcPlanList.add(adOpMap);
										//サブオプションの存在チェック
										List<HashMap<String, Object>> eKK0401B001List = getEKK0401B001(handle, param, fixedText, dataMap, func_cd, chbfOpKeiNo);
										//PCワイドプラン
										for (Map<String, Object> eKK0401B001Map : eKK0401B001List)
										{
											HashMap<String, Object> adPcWideMap = new HashMap<String, Object>();
											HashMap<String, Object> adPcWideMapIsp = new HashMap<String, Object>();
											//サブオプションサービス契約一意照会
											adPcWideMap = getEKK0401A010(handle, param, fixedText, dataMap, (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO), (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
											//サブオプションサービス契約<ISP>一意照会
											adPcWideMapIsp = getEKK0411A010(handle, param, fixedText, dataMap, (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO), (String)eKK0401B001Map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
											adPcWideMap.putAll(adPcWideMapIsp);
											adPcWideList.add(adPcWideMap);
											break;
										}
									}
									//ＴＶプランの場合
									if (adOpMap != null && OP_SVC_CD_B134.equals(adOpMap.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
									{
										//オプションサービス契約<ISP>一意照会
										adOpIspMap = getEKK0361A010(handle, param, fixedText, func_cd, chbfOpKeiNo);
										adOpMap.putAll(adOpIspMap);
										adTvPlanList.add(adOpMap);
									}
								}
							}
						}
					}
				}
			}
		}
		// IT1-2018-0000195 ADD START
		}
		// IT1-2018-0000195 ADD END
		HashMap<String, List<HashMap<String, Object>>> adInfoListMap = new HashMap<String, List<HashMap<String, Object>>>();

		adInfoListMap.put("pc_plan_list", adPcPlanList);
		adInfoListMap.put("pc_wide_list", adPcWideList);
		adInfoListMap.put("tv_plan_list", adTvPlanList);

		//住所変更照会リスト
		dataMap.put("ad_info_list", adInfoListMap);
		// 住所変更の照会 END /////////////////////////////////////////////////////////////////////
	}
	
	/**
	 *登録の処理です。
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param scCall
	 * @param func_cd
	 * @param idoDiv
	 * @param updDtmBfParam
	 * @return
	 * @throws RequestParameterException
	 * @throws SCException
	 * @throws Throwable
	 */
	private String addTmcp(SessionHandle handle
						, IRequestParameterReadWrite param
						, String fixedText
						, HashMap<String, Object> dataMap
						, ServiceComponentRequestInvoker scCall
						, String func_cd
						, String idoDiv
						, String updDtmBfParam
						)throws RequestParameterException, SCException, Throwable
	{
		List<HashMap<String, Object>> addInfoList = new ArrayList<HashMap<String, Object>>();
		Map<?, ?> result = null;
		HashMap<String, Object> paramMap = null;
		//登録用情報リスト
		addInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_ADD_INFO_LIST);
		if (addInfoList == null) 
		{
			throw new Exception("KEY_ADD_INFO_LIST_不正");
		}
		HashMap<String, Object> addInfoMap = (HashMap<String, Object>)addInfoList.get(0);
		// 処理結果明細
		addInfoMap.put("tran_result_list", new ArrayList<HashMap<String, Object>>());
		
		// サービス契約番号
		String svcKeiNo = getNullToStr((String)addInfoMap.get("svc_kei_no"));
		// 申込明細番号
		String mskmDtlNo = getNullToStr((String)addInfoMap.get("mskm_dtl_no"));
		// 更新年月日時分秒
		String updDtmBf = getNullToStr((String)addInfoMap.get("upd_dtm_bf"));
		
		//最終更新年月日が存在する場合
		if (!JKKCommonUtil.isNull(updDtmBfParam))
		{
			updDtmBf = updDtmBfParam;
		}
		
		// ＰＣプラン対象フラグ
		String pcPlanTgFlg = getNullToStr((String)addInfoMap.get("pc_plan_tg_flg"));
		// ＰＣプラン申込日
		String pcPlanMksmYmd = getNullToStr((String)addInfoMap.get("pc_plan_mksm_ymd"));
		// ＰＣワイドプラン対象フラグ
		String pcWidePlanTgFlg = getNullToStr((String)addInfoMap.get("pc_wide_plan_tg_flg"));
		// ＰＣワイドプラン申込日
		String pcWidePlanMksmYmd = getNullToStr((String)addInfoMap.get("pc_wide_plan_mksm_ymd"));
		// ＴＶプラン対象フラグ
		String tvPlanTgFlg = getNullToStr((String)addInfoMap.get("tv_plan_tg_flg"));
		// ＴＶプラン申込日
		String tvPlanMksmYmd = getNullToStr((String)addInfoMap.get("tv_plan_mksm_ymd"));
		
		List<HashMap<String, Object>>eKK0081A010List =  new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>>eKK0321B002List =  new ArrayList<HashMap<String, Object>>();

		//サービス契約一意照会
		eKK0081A010List = getSvckeiIti(handle, param, fixedText, svcKeiNo, JPCModelConstant.FUNC_CD_2);
		
		HashMap<String, Object> eKK0081A010Msg = (HashMap<String, Object>)eKK0081A010List.get(0);
		//サービス契約ステータス
		String svcKeiStat = (String)eKK0081A010Msg.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		//SYSID
		String sysID = (String)eKK0081A010Msg.get(EKK0081A010CBSMsg1List.SYSID);
		//課金先一覧照会（請求契約番号／サービス契約番号）
		eKK0321B002List = getKK0321B002List(handle, param, fixedText, svcKeiNo);
				
		HashMap<String, Object> eKK0321B002Msg = (HashMap<String, Object>)eKK0321B002List.get(0);
		//請求先契約番号
		String seikyKeiNo = (String)eKK0321B002Msg.get(EKK0321B002CBSMsg1List.SEIKY_KEI_NO);
		
		List<HashMap<String, Object>>eKK0351B002List = getEKK0351B002(handle, param, fixedText, dataMap, func_cd, svcKeiNo);
		
		String opSvcKeiNoPc = "";
		String opSvcKeiNoTv = "";
		// IT1-2018-0000162 MOD START
		//String tmcpKeiNoPc = "";
		//String tmcpKeiNoTv = "";
		String tmcpKeiNo = "";
		// IT1-2018-0000162 MOD END
		// IT1-2018-0000160 ADD START
		String dspSvctkStaymdPc = "";
		// IT1-2018-0000160 ADD END
		//オプション契約ステータス
		String opSvcKeiStatPc = "";
		
		//存在チェック
		if (null != eKK0351B002List)
		{
			for (Map<String, Object> eKK0351B002Msg : eKK0351B002List)
			{
				//ＰＣプランの場合
				if (OP_SVC_CD_B133.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
				{
					HashMap<String, Object> pcPlanMapIsp = new HashMap<String, Object>();
					//オプションサービス契約<ISP>一意照会
					pcPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					// IT1-2018-0000162 MOD START
					//tmcpKeiNoPc = (String)pcPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
					tmcpKeiNo = (String)pcPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
					// IT1-2018-0000162 MOD END
					opSvcKeiNoPc = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
					// IT1-2018-0000160 ADD START
					dspSvctkStaymdPc = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.DSP_SVCTK_STAYMD);
					// IT1-2018-0000160 ADD END
					opSvcKeiStatPc = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
					break;
				}
			}
			for (Map<String, Object> eKK0351B002Msg : eKK0351B002List)
			{
				//ＴＶプランの場合
				if (OP_SVC_CD_B134.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
				{
					HashMap<String, Object> tvPlanMapIsp = new HashMap<String, Object>();
					//オプションサービス契約<ISP>一意照会
					tvPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					// IT1-2018-0000162 MOD START
					//tmcpKeiNoTv = (String)tvPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
					tmcpKeiNo = (String)tvPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
					// IT1-2018-0000162 MOD END
					break;
				}
			}
		}
		// ＰＣプラン対象フラグ
		if (ARI_1.equals(pcPlanTgFlg))
		{
			//オプションサービス契約登録
			// IT1-2018-0000162 MOD START
			//paramMap = editInMsgEKK0361D010(param, dataMap, sysID, svcKeiNo, idoDiv, mskmDtlNo, seikyKeiNo, OP_SVC_CD_B133, PCRS_CD_BE4, PPLAN_CD_PBE401, pcPlanMksmYmd, tmcpKeiNoPc, updDtmBf);
			paramMap = editInMsgEKK0361D010(param, dataMap, sysID, svcKeiNo, idoDiv, mskmDtlNo, seikyKeiNo, OP_SVC_CD_B133, PCRS_CD_BE4, PPLAN_CD_PBE401, pcPlanMksmYmd, tmcpKeiNo, updDtmBf);
			// IT1-2018-0000162 MOD END

			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0361D010);
			
			ArrayList<CAANMsg> eKK0361List = getRsltList(result);
			
			CAANMsg eKK0361D010Msg = eKK0361List.get(0);
			
			//オプションサービス契約番号
			opSvcKeiNoPc = eKK0361D010Msg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0361D010Msg.getString(EKK0361D010CBSMsg.UPD_DTM);
			
			// ========================================================== //
			// オプションサービス契約照査処理                             //
			// ========================================================== //
			if(JKKStrConst.CD00037_SHOSA_ZUMI.compareTo(svcKeiStat) == 0) 
			{
				paramMap = editInMsgEKK0361C010(param, dataMap, opSvcKeiNoPc, idoDiv, updDtmBf);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0361C010);
				
				eKK0361List = getRsltList(result);
				
				CAANMsg eKK0361C010Msg = eKK0361List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0361C010Msg.getString(EKK0361C010CBSMsg.UPD_DTM);
			}
			// オプションサービス契約締結処理                             //
			// ========================================================== //
			else if(JKKStrConst.CD00037_CNC_ZM.compareTo(svcKeiStat) <= 0)
			{
				paramMap = editInMsgEKK0361C030(param, dataMap, opSvcKeiNoPc, idoDiv, updDtmBf);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0361C030);
				
				eKK0361List = getRsltList(result);
				
				CAANMsg eKK0361C030Msg = eKK0361List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0361C030Msg.getString(EKK0361C030CBSMsg.UPD_DTM);
			}
			
			//進捗登録用のリストを設定
			addPrg(addInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNoPc, svcKeiNo, "", "", OP_SVC_CD_B133, "", "", PRG_STAT_5102);
		}
		
		// ＰＣワイドプラン対象フラグ
		if (ARI_1.equals(pcWidePlanTgFlg))
		{
			eKK0351B002List = getEKK0351B002(handle, param, fixedText, dataMap, func_cd, svcKeiNo);

			if (null != eKK0351B002List)
			{
				for (Map<String, Object> eKK0351B002Msg : eKK0351B002List)
				{
					//ＰＣプランの場合
					if (OP_SVC_CD_B133.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
					{
						HashMap<String, Object> pcPlanMapIsp = new HashMap<String, Object>();
						//オプションサービス契約<ISP>一意照会
						pcPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
						// IT1-2018-0000162 MOD START
						//tmcpKeiNoPc = (String)pcPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
						tmcpKeiNo = (String)pcPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
						// IT1-2018-0000162 MOD END
						opSvcKeiNoPc = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
						// IT1-2018-0000160 ADD START
						dspSvctkStaymdPc = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.DSP_SVCTK_STAYMD);
						// IT1-2018-0000160 ADD END
						opSvcKeiStatPc = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
						break;
					}
				}
			}
			eKK0351B002List = getEKK0351B002(handle, param, fixedText, dataMap, func_cd, svcKeiNo);

			//サブオプションサービス契約＜ISP＞登録
			paramMap = editInMsgEKK0411D010(param, dataMap, opSvcKeiNoPc, idoDiv, mskmDtlNo, seikyKeiNo, SBOP_SVC_CD_D12, PCRS_CD_D12, PPLAN_CD_PD1201, pcWidePlanMksmYmd, updDtmBf);
			
			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0411D010);
			
			ArrayList<CAANMsg> eKK0411List = getRsltList(result);
			
			CAANMsg eKK0411D010Msg = eKK0411List.get(0);
			
			//サブオプションサービス契約番号
			String sbOpSvcKeiNo = eKK0411D010Msg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0411D010Msg.getString(EKK0411D010CBSMsg.UPD_DTM);
			
			if(JKKStrConst.CD00037_SHOSA_ZUMI.compareTo(opSvcKeiStatPc) == 0) 
			{
				//サブオプションサービス契約＜ISP＞照査
				paramMap = editInMsgEKK0411C020(param, dataMap, opSvcKeiNoPc, sbOpSvcKeiNo, idoDiv, updDtmBf);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0411C020);
				
				eKK0411List = getRsltList(result);
				
				CAANMsg eKK0411C020Msg = eKK0411List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0411C020Msg.getString(EKK0361C010CBSMsg.UPD_DTM);
			}
			else if(JKKStrConst.CD00037_CNC_ZM.compareTo(opSvcKeiStatPc) <= 0)
			{
				paramMap = editInMsgEKK0411C040(param, dataMap, opSvcKeiNoPc, sbOpSvcKeiNo, idoDiv, updDtmBf);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0411C040);
				
				eKK0411List = getRsltList(result);
				
				CAANMsg eKK0411C040Msg = eKK0411List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0411C040Msg.getString(EKK0411C040CBSMsg.UPD_DTM);
			}
			//サービス契約の状態が締結以前かつＰＣプランの登録フラグが無の場合
			if(JKKStrConst.CD00037_CNC_ZM.compareTo(opSvcKeiStatPc) >= 0 && (!ARI_1.equals(pcPlanTgFlg)))
			{
				//オプションサービス契約＜ISP＞情報変更
				// IT1-2018-0000160 MOD START
//				paramMap = editInMsgEKK0361C050(param, dataMap, opSvcKeiNoPc, idoDiv, pcWidePlanMksmYmd, updDtmBf);
				paramMap = editInMsgEKK0361C050(param, dataMap, opSvcKeiNoPc, idoDiv, pcWidePlanMksmYmd, mskmDtlNo, dspSvctkStaymdPc, updDtmBf);
				// IT1-2018-0000160 MOD END
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0361C050);
				
				eKK0411List = getRsltList(result);
				
				CAANMsg eKK0361C050Msg = eKK0411List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0361C050Msg.getString(EKK0361C050CBSMsg.UPD_DTM);
			}
			
			//進捗登録用のリストを設定
			addPrg(addInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNoPc, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbOpSvcKeiNo, PRG_STAT_5102);
		}
		
		// ＴＶプラン対象フラグ
		if (ARI_1.equals(tvPlanTgFlg))
		{
			// IT1-2018-0000162 ADD START
			eKK0351B002List = getEKK0351B002(handle, param, fixedText, dataMap, func_cd, svcKeiNo);

			//存在チェック
			if (null != eKK0351B002List)
			{
				for (Map<String, Object> eKK0351B002Msg : eKK0351B002List)
				{
					//ＰＣプランの場合
					if (OP_SVC_CD_B133.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
					{
						HashMap<String, Object> pcPlanMapIsp = new HashMap<String, Object>();
						//オプションサービス契約<ISP>一意照会
						pcPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
						tmcpKeiNo = (String)pcPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
						break;
					}
					//ＴＶプランの場合
					if (OP_SVC_CD_B134.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
					{
						HashMap<String, Object> tvPlanMapIsp = new HashMap<String, Object>();
						//オプションサービス契約<ISP>一意照会
						tvPlanMapIsp = getEKK0361A010(handle, param, fixedText, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
						tmcpKeiNo = (String)tvPlanMapIsp.get(EKK0361A010CBSMsg1List.TMCP_KEI_NO);
						break;
					}
				}
			}
			// IT1-2018-0000162 ADD END
			//オプションサービス契約登録
			// IT1-2018-0000162 MOD START
			//paramMap = editInMsgEKK0361D010(param, dataMap, sysID, svcKeiNo, idoDiv, mskmDtlNo, seikyKeiNo, OP_SVC_CD_B134, PCRS_CD_BE5, PPLAN_CD_PBE501, tvPlanMksmYmd, tmcpKeiNoTv, updDtmBf);
			paramMap = editInMsgEKK0361D010(param, dataMap, sysID, svcKeiNo, idoDiv, mskmDtlNo, seikyKeiNo, OP_SVC_CD_B134, PCRS_CD_BE5, PPLAN_CD_PBE501, tvPlanMksmYmd, tmcpKeiNo, updDtmBf);
			// IT1-2018-0000162 MOD END
			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0361D010);
			
			ArrayList<CAANMsg> eKK0361List = getRsltList(result);
			
			CAANMsg eKK0361D010Msg = eKK0361List.get(0);
			
			//オプションサービス契約番号
			opSvcKeiNoTv = eKK0361D010Msg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0361D010Msg.getString(EKK0361D010CBSMsg.UPD_DTM);
			
			// ========================================================== //
			// オプションサービス契約照査処理                             //
			// ========================================================== //
			if(JKKStrConst.CD00037_SHOSA_ZUMI.compareTo(svcKeiStat) == 0) 
			{
				paramMap = editInMsgEKK0361C010(param, dataMap, opSvcKeiNoTv, idoDiv, updDtmBf);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0361C010);
				
				eKK0361List = getRsltList(result);
				
				CAANMsg eKK0361C010Msg = eKK0361List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0361C010Msg.getString(EKK0361C010CBSMsg.UPD_DTM);
			}
			// オプションサービス契約締結処理                             //
			// ========================================================== //
			else if(JKKStrConst.CD00037_CNC_ZM.compareTo(svcKeiStat) <= 0)
			{
				paramMap = editInMsgEKK0361C030(param, dataMap, opSvcKeiNoTv, idoDiv, updDtmBf);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0361C030);
				
				eKK0361List = getRsltList(result);
				
				CAANMsg eKK0361C030Msg = eKK0361List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0361C030Msg.getString(EKK0361C030CBSMsg.UPD_DTM);
			}
			
			//進捗登録用のリストを設定
			addPrg(addInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNoTv, svcKeiNo, "", "", OP_SVC_CD_B134, "", "", PRG_STAT_5102);
		}
		return updDtmBf;
	}
	
	/**
	 *解約の処理です。
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param scCall
	 * @param func_cd
	 * @param idoDiv
	 * @param updDtmBfParam
	 * @return
	 * @throws RequestParameterException
	 * @throws SCException
	 * @throws Throwable
	 */
	private String dslTmcp(SessionHandle handle
						, IRequestParameterReadWrite param
						, String fixedText
						, HashMap<String, Object> dataMap
						, ServiceComponentRequestInvoker scCall
						, String func_cd
						, String idoDiv
						, String updDtmBfParam)throws RequestParameterException, SCException, Throwable
	{
		List<HashMap<String, Object>> cancelInfoList = new ArrayList<HashMap<String, Object>>();
		Map<?, ?> result = null;
		HashMap<String, Object> paramMap = null;
		//解約用情報リスト
		cancelInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_CANCEL_INFO_LIST);
		if (cancelInfoList == null) 
		{
			throw new Exception("KEY_CANCEL_INFO_LIST_不正");
		}
		HashMap<String, Object> cancelInfoMap = (HashMap<String, Object>)cancelInfoList.get(0);
		// 処理結果明細
		cancelInfoMap.put("tran_result_list", new ArrayList<HashMap<String, Object>>());
		
		// サービス契約番号
		String svcKeiNo = getNullToStr((String)cancelInfoMap.get("svc_kei_no"));
		// 申込明細番号
		String mskmDtlNo = getNullToStr((String)cancelInfoMap.get("mskm_dtl_no"));
		// 更新年月日時分秒
		String updDtmBf = getNullToStr((String)cancelInfoMap.get("upd_dtm_bf"));
		
		//最終更新年月日が存在する場合
		if (!JKKCommonUtil.isNull(updDtmBfParam))
		{
			updDtmBf = updDtmBfParam;
		}
		
		// ＰＣプラン対象フラグ
		String pcPlanTgFlg = getNullToStr((String)cancelInfoMap.get("pc_plan_tg_flg"));
		// ＰＣプラン解約日
		String pcPlandslDay = getNullToStr((String)cancelInfoMap.get("pc_plan_dsl_day"));
		// ＰＣプラン課金解約日
		String pcPlanChrgdslDay = getNullToStr((String)cancelInfoMap.get("pc_plan_chrg_dsl_day"));
		// ＰＣワイドプラン対象フラグ
		String pcWidePlanTgFlg = getNullToStr((String)cancelInfoMap.get("pc_wide_plan_tg_flg"));
		// ＰＣワイドプラン解約日
		String pcWidePlanDslDay = getNullToStr((String)cancelInfoMap.get("pc_wide_plan_dsl_day"));
		// ＰＣワイドプラン課金解約日
		String pcWidePlanChrgDslDay = getNullToStr((String)cancelInfoMap.get("pc_wide_plan_chrg_dsl_day"));
		// ＴＶプラン対象フラグ
		String tvPlanTgFlg = getNullToStr((String)cancelInfoMap.get("tv_plan_tg_flg"));
		// ＴＶプラン解約日
		String tvPlanDslDay = getNullToStr((String)cancelInfoMap.get("tv_plan_dsl_day"));
		// ＴＶプラン課金解約日
		String tvPlanChrgDslDay = getNullToStr((String)cancelInfoMap.get("tv_plan_chrg_dsl_day"));
		
		List<HashMap<String, Object>>eKK0321B002List =  new ArrayList<HashMap<String, Object>>();

		//課金先一覧照会（請求契約番号／サービス契約番号）
		eKK0321B002List = getKK0321B002List(handle, param, fixedText, svcKeiNo);
		//オプションサービス契約一覧照会
		List<HashMap<String, Object>>eKK0351B002List = getEKK0351B002(handle, param, fixedText, dataMap, func_cd, svcKeiNo);

		HashMap<String, Object> eKK0321B002Msg = (HashMap<String, Object>)eKK0321B002List.get(0);
		//請求契約番号
		String seikyKeiNo = (String)eKK0321B002Msg.get(EKK0321B002CBSMsg1List.SEIKY_KEI_NO);
		
		//存在チェック
		if (ARI_1.equals(pcWidePlanTgFlg)) 
		{
			for (Map<String, Object> eKK0351B002Msg : eKK0351B002List)
			{
				//ＰＣプランの場合
				if (OP_SVC_CD_B133.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)))
				{
					//オプションサービス契約番号
					String opSvcKeiNo = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
					//サブオプションサービス契約一覧照会
					List<HashMap<String, Object>>eKK0401B001List = getEKK0401B001(handle, param, fixedText, dataMap, func_cd, (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
					for (Map<String, Object> eKK0401B001Msg : eKK0401B001List)
					{
						HashMap<String, Object> pcWideMap = new HashMap<String, Object>();
						String sbopSvcKeiNo = (String)eKK0401B001Msg.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
						//サブオプションサービス契約一意照会
						pcWideMap = getEKK0401A010(handle, param, fixedText, dataMap, opSvcKeiNo, sbopSvcKeiNo);
						// 解約オプションサービス契約ステータス取得
						String dslSbOpSvcKeiStat = (String)pcWideMap.get(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT);
						String dslSbOpSvcCd = (String)pcWideMap.get(EKK0401A010CBSMsg1List.SBOP_SVC_CD);
						//PCワイドプランの場合
						if (SBOP_SVC_CD_D12.equals(dslSbOpSvcCd))
						{
							// =========================================================== //
							// サブオプションサービス契約ステータスが「010:受付済」        //
							// サブオプションサービス契約ステータスが「020:照査済」        //
							// =========================================================== //
							if(
								JKKStrConst.CD00037_UK_ZM.equals(dslSbOpSvcKeiStat)
								|| JKKStrConst.CD00037_SHOSA_ZUMI.equals(dslSbOpSvcKeiStat)
							)
							{
								// ******************************************************* //
								// サブオプションサービス契約キャンセル                        //
								// ******************************************************* //
								paramMap = editInMsgEKK0401C150(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
								
								result = scCall.run(paramMap, handle);
								
								// エラー情報の設定
								param = editResultRP(result, param, TEMPLATE_ID_EKK0401C150);
								
								ArrayList<CAANMsg> eKK0401List = getRsltList(result);
								
								CAANMsg eKK0401C150Msg = eKK0401List.get(0);
								//更新年月日時分秒(更新前)
								updDtmBf = eKK0401C150Msg.getString(EKK0401C150CBSMsg.UPD_DTM);
								//進捗登録用のリストを設定
								addPrg(cancelInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbopSvcKeiNo, PRG_STAT_5102);
							}
							// =========================================================== //
							// オプションサービス契約ステータスが「030:締結済」            //
							// オプションサービス契約ステータスが「100:サービス提供中」    //
							// オプションサービス契約ステータスが「210:休止・中断中」      //
							// オプションサービス契約ステータスが「220:停止中」            //
							// =========================================================== //
							else if(JKKStrConst.CD00037_CNC_ZM.equals(dslSbOpSvcKeiStat)
									|| JKKStrConst.CD00037_SVCTK_CHU.equals(dslSbOpSvcKeiStat)
									|| JKKStrConst.CD00037_STAT_PAUSE.equals(dslSbOpSvcKeiStat)
									|| JKKStrConst.CD00037_STAT_STP.equals(dslSbOpSvcKeiStat)
							)
							{
								// ******************************************************* //
								// サブオプションサービス契約解約                          //
								// ******************************************************* //
								paramMap = editInMsgEKK0401C170(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, pcWidePlanDslDay, pcWidePlanChrgDslDay, updDtmBf);
								
								result = scCall.run(paramMap, handle);
								
								// エラー情報の設定
								param = editResultRP(result, param, TEMPLATE_ID_EKK0401C170);
								
								ArrayList<CAANMsg> eKK0401List = getRsltList(result);
								
								CAANMsg eKK0401C170Msg = eKK0401List.get(0);
								//更新年月日時分秒(更新前)
								updDtmBf = eKK0401C170Msg.getString(EKK0401C170CBSMsg.UPD_DTM);
								
								// ******************************************************* //
								// サブオプションサービス契約解約確定                      //
								// ******************************************************* //
								paramMap = editInMsgEKK0401C180(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, pcWidePlanDslDay, pcWidePlanChrgDslDay, updDtmBf);

								result = scCall.run(paramMap, handle);
								
								// エラー情報の設定
								param = editResultRP(result, param, TEMPLATE_ID_EKK0401C180);
								
								eKK0401List = getRsltList(result);
								
								CAANMsg eKK0401C180Msg = eKK0401List.get(0);
								//更新年月日時分秒(更新前)
								updDtmBf = eKK0401C180Msg.getString(EKK0401C180CBSMsg.UPD_DTM);
								
								//進捗登録用のリストを設定
								addPrg(cancelInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbopSvcKeiNo, PRG_STAT_5102);

							}
						}
					}
					break;
				}
			}
		}
		
		//存在チェック
		if (ARI_1.equals(pcPlanTgFlg) || ARI_1.equals(tvPlanTgFlg)) 
		{
			if (null != eKK0351B002List)
			{
				for (Map<String, Object> eKK0351B002Msg : eKK0351B002List)
				{
					//ＰＣプランの場合
					if (OP_SVC_CD_B133.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)) && ARI_1.equals(pcPlanTgFlg))
					{
						HashMap<String, Object> pcPlanMap = new HashMap<String, Object>();
						String opSvcKeiNo = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
						//オプションサービス契約一意照会
						pcPlanMap = getEKK0351A010(handle, param, fixedText, opSvcKeiNo);
						// 解約オプションサービス契約ステータス取得
						String dslOpSvcKeiStat = (String)pcPlanMap.get(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
				
						// =========================================================== //
						// オプションサービス契約ステータスが「010:受付済」            //
						// オプションサービス契約ステータスが「020:照査済」            //
						// =========================================================== //
						if(
							JKKStrConst.CD00037_UK_ZM.equals(dslOpSvcKeiStat)
							|| JKKStrConst.CD00037_SHOSA_ZUMI.equals(dslOpSvcKeiStat)
						)
						{
							// ******************************************************* //
							// オプションサービス契約キャンセル                        //
							// ******************************************************* //
							paramMap = editInMsgEKK0351C220(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
							
							result = scCall.run(paramMap, handle);
							
							// エラー情報の設定
							param = editResultRP(result, param, TEMPLATE_ID_EKK0361C030);
							
							ArrayList<CAANMsg> eKK0351List = getRsltList(result);
							
							CAANMsg eKK0351C220Msg = eKK0351List.get(0);
							//更新年月日時分秒(更新前)
							updDtmBf = eKK0351C220Msg.getString(EKK0351C220CBSMsg.UPD_DTM);
							//進捗登録用のリストを設定
							addPrg(cancelInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, "", "", PRG_STAT_5102);
						}
						// =========================================================== //
						// オプションサービス契約ステータスが「030:締結済」            //
						// オプションサービス契約ステータスが「100:サービス提供中」    //
						// オプションサービス契約ステータスが「210:休止・中断中」      //
						// オプションサービス契約ステータスが「220:停止中」            //
						// =========================================================== //
						else if(JKKStrConst.CD00037_CNC_ZM.equals(dslOpSvcKeiStat)
								|| JKKStrConst.CD00037_SVCTK_CHU.equals(dslOpSvcKeiStat)
								|| JKKStrConst.CD00037_STAT_PAUSE.equals(dslOpSvcKeiStat)
								|| JKKStrConst.CD00037_STAT_STP.equals(dslOpSvcKeiStat)
						)
						{
							//異動予約取消を行う。
							checkCnsl(handle, param, opSvcKeiNo, fixedText, dataMap);
							
							// ******************************************************* //
							// オプションサービス契約解約                              //
							// ******************************************************* //
							paramMap = editInMsgEKK0351C240(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, pcPlandslDay, pcPlanChrgdslDay, updDtmBf, pcPlanMap);
	
							result = scCall.run(paramMap, handle);
							
							// エラー情報の設定
							param = editResultRP(result, param, TEMPLATE_ID_EKK0351C240);
							
							ArrayList<CAANMsg> eKK0351List = getRsltList(result);
							
							CAANMsg eKK0351C240Msg = eKK0351List.get(0);
							//更新年月日時分秒(更新前)
							updDtmBf = eKK0351C240Msg.getString(EKK0351C240CBSMsg.UPD_DTM);
							
							// ******************************************************* //
							// オプションサービス契約解約確定                          //
							// ******************************************************* //
							paramMap = editInMsgEKK0351C250(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, pcPlandslDay, pcPlanChrgdslDay, updDtmBf, pcPlanMap);
	
							result = scCall.run(paramMap, handle);
							
							// エラー情報の設定
							param = editResultRP(result, param, TEMPLATE_ID_EKK0351C250);
							
							eKK0351List = getRsltList(result);
							
							CAANMsg eKK0351C250Msg = eKK0351List.get(0);
							//更新年月日時分秒(更新前)
							updDtmBf = eKK0351C250Msg.getString(EKK0351C250CBSMsg.UPD_DTM);
							
							//進捗登録用のリストを設定
							addPrg(cancelInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, "", "", PRG_STAT_5102);
						}
					}
					//ＴＶプランの場合
					if (OP_SVC_CD_B134.equals(eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_CD)) && ARI_1.equals(tvPlanTgFlg))
					{
						HashMap<String, Object> tvPlanMap = new HashMap<String, Object>();
						String opSvcKeiNo = (String)eKK0351B002Msg.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
						//オプションサービス契約一意照会
						tvPlanMap = getEKK0351A010(handle, param, fixedText, opSvcKeiNo);

						// 解約オプションサービス契約ステータス取得
						String dslOpSvcKeiStat = (String)tvPlanMap.get(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);

						// =========================================================== //
						// オプションサービス契約ステータスが「010:受付済」            //
						// オプションサービス契約ステータスが「020:照査済」            //
						// =========================================================== //
						if(
							JKKStrConst.CD00037_UK_ZM.equals(dslOpSvcKeiStat)
							|| JKKStrConst.CD00037_SHOSA_ZUMI.equals(dslOpSvcKeiStat)
						)
						{
							// ******************************************************* //
							// オプションサービス契約キャンセル                        //
							// ******************************************************* //
							paramMap = editInMsgEKK0351C220(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
							
							result = scCall.run(paramMap, handle);
							
							// エラー情報の設定
							param = editResultRP(result, param, TEMPLATE_ID_EKK0361C030);
							
							ArrayList<CAANMsg> eKK0351List = getRsltList(result);
							
							CAANMsg eKK0351C220Msg = eKK0351List.get(0);
							//更新年月日時分秒(更新前)
							updDtmBf = eKK0351C220Msg.getString(EKK0351C220CBSMsg.UPD_DTM);
							//進捗登録用のリストを設定
							addPrg(cancelInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B134, "", "", PRG_STAT_5102);
						}
						// =========================================================== //
						// オプションサービス契約ステータスが「030:締結済」            //
						// オプションサービス契約ステータスが「100:サービス提供中」    //
						// オプションサービス契約ステータスが「210:休止・中断中」      //
						// オプションサービス契約ステータスが「220:停止中」            //
						// =========================================================== //
						else if(JKKStrConst.CD00037_CNC_ZM.equals(dslOpSvcKeiStat)
								|| JKKStrConst.CD00037_SVCTK_CHU.equals(dslOpSvcKeiStat)
								|| JKKStrConst.CD00037_STAT_PAUSE.equals(dslOpSvcKeiStat)
								|| JKKStrConst.CD00037_STAT_STP.equals(dslOpSvcKeiStat)
						)
						{
							//異動予約取消を行う。
							checkCnsl(handle, param, opSvcKeiNo, fixedText, dataMap);
							
							// ******************************************************* //
							// オプションサービス契約解約                              //
							// ******************************************************* //
							paramMap = editInMsgEKK0351C240(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, tvPlanDslDay, tvPlanChrgDslDay, updDtmBf, tvPlanMap);
							
							result = scCall.run(paramMap, handle);
							
							// エラー情報の設定
							param = editResultRP(result, param, TEMPLATE_ID_EKK0351C240);
							
							ArrayList<CAANMsg> eKK0351List = getRsltList(result);
							
							CAANMsg eKK0351C240Msg = eKK0351List.get(0);
							//更新年月日時分秒(更新前)
							updDtmBf = eKK0351C240Msg.getString(EKK0351C240CBSMsg.UPD_DTM);
							
							// ******************************************************* //
							// オプションサービス契約解約確定                          //
							// ******************************************************* //
							paramMap = editInMsgEKK0351C250(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, tvPlanDslDay, tvPlanChrgDslDay, updDtmBf, tvPlanMap);
							
							result = scCall.run(paramMap, handle);
							
							// エラー情報の設定
							param = editResultRP(result, param, TEMPLATE_ID_EKK0351C250);
							
							eKK0351List = getRsltList(result);
							
							CAANMsg eKK0351C250Msg = eKK0351List.get(0);
							//更新年月日時分秒(更新前)
							updDtmBf = eKK0351C250Msg.getString(EKK0351C250CBSMsg.UPD_DTM);
							
							//進捗登録用のリストを設定
							addPrg(cancelInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B134, "", "", PRG_STAT_5102);
						}
					}
				}
			}
		}
		return updDtmBf;
	}
	
	/**
	 *回復の処理です。
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param scCall
	 * @param func_cd
	 * @param idoDiv
	 * @param updDtmBfParam
	 * @return
	 * @throws RequestParameterException
	 * @throws SCException
	 * @throws Throwable
	 */
	private String kaihkTmcp(SessionHandle handle
						, IRequestParameterReadWrite param
						, String fixedText
						, HashMap<String, Object> dataMap
						, ServiceComponentRequestInvoker scCall
						, String func_cd
						, String idoDiv
						, String updDtmBfParam)throws RequestParameterException, SCException, Throwable
	{
		List<HashMap<String, Object>> kaihkInfoList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>>eKK0081A010List =  new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>>eKK0321B002List =  new ArrayList<HashMap<String, Object>>();
		Map<?, ?> result = null;
		HashMap<String, Object> paramMap = null;
		//回復用情報リスト
		kaihkInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_KAIHK_INFO_LIST);
		if (kaihkInfoList == null) 
		{
			throw new Exception("KEY_KAIHK_INFO_LIST_不正");
		}
		HashMap<String, Object> kaihkInfoMap = (HashMap<String, Object>)kaihkInfoList.get(0);
		// 処理結果明細
		kaihkInfoMap.put("tran_result_list", new ArrayList<HashMap<String, Object>>());
		
		// サービス契約番号
		String svcKeiNo = getNullToStr((String)kaihkInfoMap.get("svc_kei_no"));
		// オプションサービス契約番号
		String opSvcKeiNo = getNullToStr((String)kaihkInfoMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		String sbopSvcKeiNo = getNullToStr((String)kaihkInfoMap.get("sbop_svc_kei_no"));
		// 申込明細番号
		String mskmDtlNo = getNullToStr((String)kaihkInfoMap.get("mskm_dtl_no"));
		// 更新年月日時分秒
		String updDtmBf = getNullToStr((String)kaihkInfoMap.get("upd_dtm_bf"));
		// 回復年月日
		String kaihkYmd = getNullToStr((String)kaihkInfoMap.get("kaihk_ymd"));
		
		//最終更新年月日が存在する場合
		if (!JKKCommonUtil.isNull(updDtmBfParam))
		{
			updDtmBf = updDtmBfParam;
		}
		
		//サービス契約一意照会
		eKK0081A010List = getSvckeiIti(handle, param, fixedText, svcKeiNo, JPCModelConstant.FUNC_CD_2);
		
		HashMap<String, Object> eKK0081A010Msg = (HashMap<String, Object>)eKK0081A010List.get(0);
		//課金先一覧照会（請求契約番号／サービス契約番号）
		eKK0321B002List = getKK0321B002List(handle, param, fixedText, svcKeiNo);
				
		HashMap<String, Object> eKK0321B002Msg = (HashMap<String, Object>)eKK0321B002List.get(0);
		//請求契約番号
		String seikyKeiNo = (String)eKK0321B002Msg.get(EKK0321B002CBSMsg1List.SEIKY_KEI_NO);
		
		//オプションサービス契約履歴一覧照会
		List<HashMap<String, Object>> eKK0351B003List = getEKK0351B003(handle, param, fixedText, dataMap, opSvcKeiNo);
		// 解約前オプションサービス契約ステータス取得処理
		HashMap<String, Object> opSvcMap = getDslBfOpSvcKeiStat(handle, param, fixedText, dataMap, eKK0351B003List, opSvcKeiNo, sbopSvcKeiNo, eKK0081A010Msg);
		String kaihkAfOpSvcKeiStat = (String)opSvcMap.get("kaihk_af_op_svc_kei_stat");
		String dslOpSvcNoMskmDtlNo = (String)opSvcMap.get("dsl_mskm_dtl_no");

		//オプションサービス契約一意照会
		HashMap<String, Object> ekk0351A010_map = getEKK0351A010(handle, param, fixedText, opSvcKeiNo);

		String opSvcCd = (String)ekk0351A010_map.get(EKK0351A010CBSMsg1List.OP_SVC_CD);
		
		// 回復後オプションサービス契約ステータスが"サービス提供中"の処理
		if(SVC_KEI_STAT_100.equals(kaihkAfOpSvcKeiStat))
		{
			// オプションサービス契約回復
			paramMap = editInMsgEKK0351C270(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, kaihkYmd, updDtmBf);

			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0351C270);
			
			ArrayList<CAANMsg> eKK0351List = getRsltList(result);
			
			CAANMsg eKK0351C270Msg = eKK0351List.get(0);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0351C270Msg.getString(EKK0351C270CBSMsg.UPD_DTM);
			//進捗登録用のリストを設定
			addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", opSvcCd, "", "", PRG_STAT_5102);
		}
		// 回復後オプションサービス契約ステータスが"照査済"の処理
		else if(SVC_KEI_STAT_020.equals(kaihkAfOpSvcKeiStat))
		{
			// 照査後オプションサービス契約キャンセル取消
			paramMap = editInMsgEKK0351C300(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);

			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0351C300);
			
			ArrayList<CAANMsg> eKK0351List = getRsltList(result);
			
			CAANMsg eKK0351C300Msg = eKK0351List.get(0);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0351C300Msg.getString(EKK0351C300CBSMsg.UPD_DTM);
			//進捗登録用のリストを設定
			addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", opSvcCd, "", "", PRG_STAT_5102);
		}
		// 回復後オプションサービス契約ステータスが"締結済"の処理
		else if(SVC_KEI_STAT_030.equals(kaihkAfOpSvcKeiStat))
		{
			// オプションサービス契約解約取消
			paramMap = editInMsgEKK0351C310(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);

			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0351C310);
			
			ArrayList<CAANMsg> eKK0351List = getRsltList(result);
			
			CAANMsg eKK0351C310Msg = eKK0351List.get(0);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0351C310Msg.getString(EKK0351C310CBSMsg.UPD_DTM);
			//進捗登録用のリストを設定
			addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", opSvcCd, "", "", PRG_STAT_5102);
		}
		// 回復後オプションサービス契約ステータスが"休止・中断中"の処理
		else if(SVC_KEI_STAT_210.equals(kaihkAfOpSvcKeiStat))
		{
			// 休止中オプションサービス契約回復
			paramMap = editInMsgEKK0351C280(param, dataMap, opSvcKeiNo, mskmDtlNo, idoDiv, kaihkYmd, updDtmBf);

			result = scCall.run(paramMap, handle);
			
			// エラー情報の設定
			param = editResultRP(result, param, TEMPLATE_ID_EKK0351C280);
			
			ArrayList<CAANMsg> eKK0351List = getRsltList(result);
			
			CAANMsg eKK0351C280Msg = eKK0351List.get(0);
			//更新年月日時分秒(更新前)
			updDtmBf = eKK0351C280Msg.getString(EKK0351C280CBSMsg.UPD_DTM);
			//進捗登録用のリストを設定
			addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", opSvcCd, "", "", PRG_STAT_5102);

		}
		
		//パラメータのサブオプションがNULLの場合は、回復しない。
		if (!JKKCommonUtil.isNull(sbopSvcKeiNo))
		{
			//サブオプションサービス契約一覧照会
			List<HashMap<String, Object>> eKK0401B003List = getEKK0401B003(handle, param, fixedText, dataMap, func_cd, opSvcKeiNo);
			
			HashMap<String, Object> sbopSvcMap = getDslBfSbopSvcKeiStat(handle, param, fixedText, dataMap, eKK0401B003List, opSvcKeiNo, sbopSvcKeiNo);	
			
			String kaihkAfSbopSvcKeiStat = (String)sbopSvcMap.get("kaihk_af_sbop_svc_kei_stat");
			String dslSbopSvcNoMskmDtlNo = (String)sbopSvcMap.get("dsl_mskm_dtl_no");
			
			//オプションサービス契約の申込明細有かつオプションサービス契約の申込明細とサブオプションサービス契約の申込明細が違う場合
			if (!JKKCommonUtil.isNull(dslOpSvcNoMskmDtlNo) && !(dslOpSvcNoMskmDtlNo.equals(dslSbopSvcNoMskmDtlNo)))
			{
				return updDtmBf;
			}
			
			// 回復後サブオプションサービス契約ステータスが"サービス提供中"の処理
			if(SVC_KEI_STAT_100.equals(kaihkAfSbopSvcKeiStat))
			{
				// サブオプションサービス契約回復
				paramMap = editInMsgEKK0401C200(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, kaihkYmd, updDtmBf);
		
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0401C200);
				
				ArrayList<CAANMsg> eKK0401List = getRsltList(result);
				
				CAANMsg eKK0401C200Msg = eKK0401List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0401C200Msg.getString(EKK0401C200CBSMsg.UPD_DTM);
				//進捗登録用のリストを設定
				addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbopSvcKeiNo, PRG_STAT_5102);
			}
			// 回復後サブオプションサービス契約ステータスが"照査済"の処理
			else if(SVC_KEI_STAT_020.equals(kaihkAfSbopSvcKeiStat))
			{
				// 照査後サブオプションサービス契約キャンセル取消
				paramMap = editInMsgEKK0401C230(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
		
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0401C230);
				
				ArrayList<CAANMsg> eKK0401List = getRsltList(result);
				
				CAANMsg eKK0401C230Msg = eKK0401List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0401C230Msg.getString(EKK0401C230CBSMsg.UPD_DTM);
				//進捗登録用のリストを設定
				addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbopSvcKeiNo, PRG_STAT_5102);
			}
			// 回復後サブオプションサービス契約ステータスが"締結済"の処理
			else if(SVC_KEI_STAT_030.equals(kaihkAfSbopSvcKeiStat))
			{
				// サブオプションサービス契約解約取消
				paramMap = editInMsgEKK0401C240(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
		
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0401C240);
				
				ArrayList<CAANMsg> eKK0401List = getRsltList(result);
				
				CAANMsg eKK0401C240Msg = eKK0401List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0401C240Msg.getString(EKK0401C240CBSMsg.UPD_DTM);
				//進捗登録用のリストを設定
				addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbopSvcKeiNo, PRG_STAT_5102);
			}
			// 回復後サブオプションサービス契約ステータスが"休止・中断中"の処理
			else if(SVC_KEI_STAT_210.equals(kaihkAfSbopSvcKeiStat))
			{
				// 休止中サブオプションサービス契約回復
				paramMap = editInMsgEKK0401C210(param, dataMap, opSvcKeiNo, sbopSvcKeiNo, mskmDtlNo, idoDiv, kaihkYmd, updDtmBf);
		
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK0401C210);
				
				ArrayList<CAANMsg> eKK0401List = getRsltList(result);
				
				CAANMsg eKK0401C210Msg = eKK0401List.get(0);
				//更新年月日時分秒(更新前)
				updDtmBf = eKK0401C210Msg.getString(EKK0401C210CBSMsg.UPD_DTM);
				//進捗登録用のリストを設定
				addPrg(kaihkInfoMap, mskmDtlNo, seikyKeiNo, opSvcKeiNo, svcKeiNo, "", "", OP_SVC_CD_B133, SBOP_SVC_CD_D12, sbopSvcKeiNo, "PRG_STAT_5102");
			}
		}
		return updDtmBf;
	}
	
	/**
	 * 進捗用のリストを作成します
	 */
	private void addPrg(HashMap<String, Object> childMap, String mskmDtlNo, String seikyKeiNo,
			String opSvcKeiNo, String svcKeiNo, String wribSvcKeiNo, String wribSvcCd, String opSvcCd, String sbopSvcCd, String sbopSvcKeiNo, String prgStat)
	{
		List<HashMap<String, Object>> tranResultList = new ArrayList<HashMap<String, Object>>();

		tranResultList = (List<HashMap<String, Object>>)childMap.get("tran_result_list");
		HashMap<String, Object> outChildMap = new HashMap<String, Object>();
		
		// 申込明細番号
		outChildMap.put("mskm_dtl_no", mskmDtlNo);
		// 請求契約番号
		outChildMap.put("seiky_kei_no", seikyKeiNo);
		// サービス契約番号
		outChildMap.put("svc_kei_no", svcKeiNo);
		// オプションサービス契約番号
		outChildMap.put("op_svc_kei_no", opSvcKeiNo);
		// 割引サービス契約番号
		outChildMap.put("wrib_svc_kei_no", wribSvcKeiNo);
		// 割引サービスコード
		outChildMap.put("wrib_svc_cd", wribSvcCd);
		// オプションサービスコード
		outChildMap.put("op_svc_cd", opSvcCd);
		// サブオプションサービスコード
		outChildMap.put("sbop_svc_cd", sbopSvcCd);
		// サブオプションサービス契約番号
		outChildMap.put("sbop_svc_kei_no", sbopSvcKeiNo);
		// 進捗ステータス
		outChildMap.put("prg_stat", prgStat);
		
		//リストにマップを追加
		tranResultList.add(outChildMap);
	}
	
	/**
	 * 予約取消処理。<br>
	 * 移動予約一意照会サービスインターフェイスを作成し、解約予約か登録予約か判定し、取消を行う。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param workMap 作業マップ
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void checkCnsl(SessionHandle handle, IRequestParameterReadWrite param,
			String dslOpSvcKeiNo, String fixedText, HashMap<String, Object> dataMap)throws Throwable
	{
		String	cnsl_type = NOT_RSV;
		
		// オプションサービス契約番号（サブオプション限定の場合はサブオプションサービス契約番号）に紐づく異動予約の、
		// 異動予約詳細コードにより以降の処理を分岐する。
		// 異動予約一覧照会の結果から移動予約状態コードが"未反映"かつ更新年月日時分秒が最大のモノのみを返す。
		HashMap<String, Object> ekk1681B001_map = getEKK1681B001(handle, param, fixedText, dslOpSvcKeiNo);
		if(ekk1681B001_map != null && ekk1681B001_map.get(IDO_RSV_DTL_CD) != null)
		{
			// 異動予約詳細コードの取り出し
			String ido_rsv_dtl_cd = (String)ekk1681B001_map.get(IDO_RSV_DTL_CD);

			// 異動予約の異動予約詳細コードの内容が"オプション解約"なら、解約予約の中止と判定
			if(IDO_RSV_STS_OP_DSL.equals(ido_rsv_dtl_cd))
			{
				cnsl_type = DSL_CANSEL;
			}
			// 異動予約の異動予約詳細コードの内容が"オプション開始"なら、予約登録のキャンセルと判定
			else if(IDO_RSV_STS_OP_STA.equals(ido_rsv_dtl_cd))
			{
				cnsl_type = REG_CANSEL;
			}
			else
			{
				// その他の異動予約の場合
				cnsl_type = RSN_ETC;
			}
		}
		
		if(cnsl_type.equals(REG_CANSEL))
		{
			// オプション開始異動予約取消処理
			editInMsgEKK1681C010Map(handle, param, fixedText, ekk1681B001_map, dataMap);
		}
	}
	
	/**
	 * 異動予約異動予約状態変更呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param workMap (I) 作業用マップ
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgEKK1681C010Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> childMap, HashMap<String, Object> inMap) throws Exception
	{

		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));
		
		CAANMsg template = new CAANMsg(EKK1681C010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1681C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1681C010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK1681C010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK1681C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// ◇ INデータの設定
		// 異動予約異動予約状態変更.異動予約番号 → 異動予約番号
		if (childMap == null || childMap.get("ido_rsv_no") == null || "".equals(childMap.get("ido_rsv_no")))
		{
			template.setNull(EKK1681C010CBSMsg.IDO_RSV_NO);
		}
		else
		{
			template.set(EKK1681C010CBSMsg.IDO_RSV_NO, (String)childMap.get("ido_rsv_no"));
		}

		// 異動予約異動予約状態変更.異動予約反映年月日 → 異動予約反映年月日
		if (childMap == null || childMap.get("ido_rsv_hanei_ymd") == null || "".equals(childMap.get("ido_rsv_hanei_ymd")))
		{
			template.setNull(EKK1681C010CBSMsg.IDO_RSV_HANEI_YMD);
		}
		else
		{
			template.set(EKK1681C010CBSMsg.IDO_RSV_HANEI_YMD, (String)childMap.get("ido_rsv_hanei_ymd"));
		}

		// 異動予約異動予約状態変更.異動予約取消年月日 → 運用日
		template.set(EKK1681C010CBSMsg.IDO_RSV_CL_YMD, (String)JCCBPCommon.getOpeDate(null));
			
		// 異動予約異動予約状態変更.異動予約状態コード → 異動予約状態コード
		template.set(EKK1681C010CBSMsg.IDO_RSV_STAT_CD, IDO_RSV_STAT_CD_CANCEL);	// 固定："02"（取消済）

		// 異動予約異動予約状態変更.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		if (childMap == null || childMap.get("upd_dtm") == null || "".equals(childMap.get("upd_dtm")))
		{
			template.setNull(EKK1681C010CBSMsg.UPD_DTM_BF);
		}
		else
		{
			template.set(EKK1681C010CBSMsg.UPD_DTM_BF, (String)childMap.get("upd_dtm"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 解約前オプションサービス契約ステータス取得処理。<br>
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param eKK0351B003List
	 * @param opSvcKeiNo
	 * @param sbopSvcKeiNo
	 * @param eKK0081A010Msg
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getDslBfOpSvcKeiStat(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> dataMap,
			List<HashMap<String, Object>> eKK0351B003List, String opSvcKeiNo,
			String sbopSvcKeiNo, HashMap<String, Object> eKK0081A010Msg) throws Throwable
	{
		String kaihk_af_op_svc_kei_stat = null;		// 解約後オプションサービス契約ステータスの初期化
		boolean dsl_svc_rcd = false;			// 解約済オプションサービス契約ヒットフラグ(true:ヒット済み、false:未ヒット)
		String op_svc_kei_no = null;			// オプションサービス契約番号
		String op_svc_kei_stat = null;			// オプションサービス契約ステータス
		String mskm_dtl_no = null;			// 申込明細番号
		String dsl_bf_op_svc_kei_stat = null;	// 解約前のオプションサービス契約ステータス
		String dsl_mskm_dtl_no = null;	// 解約された申込明細番号
		HashMap<String, Object> opSvcmap = new HashMap<String, Object>();
		if(eKK0351B003List != null && eKK0351B003List.size() != 0)
		{
			int i = 0;
			for(i = 0; i < eKK0351B003List.size(); i++)
			{
				HashMap childMap = (HashMap)eKK0351B003List.get(i);
				op_svc_kei_no = (String)childMap.get("kk0351_op_svc_kei_no");
				op_svc_kei_stat = (String)childMap.get("op_svc_kei_stat");
				mskm_dtl_no = (String)childMap.get("mskm_dtl_no");

				// 以下の条件を満たす場合、解約済オプションサービス契約ヒットフラグをヒット済み(true)にする
				// オプションサービス契約番号が入力値と一致
				// オプションサービス契約ステータスが"解約済"
				// 解約済オプションサービス契約ヒットフラグが未ヒット
				if(op_svc_kei_no.equals(opSvcKeiNo) && !dsl_svc_rcd
						&& (SVC_KEI_STAT_KAI.equals(op_svc_kei_stat) || SVC_KEI_STAT_CNL.equals(op_svc_kei_stat)))
				{
					dsl_mskm_dtl_no = mskm_dtl_no;
					dsl_svc_rcd = true;
				}
				// 以下の条件を満たす場合、解約前オプションサービス契約ステータスを設定し検索処理を終了する
				// オプションサービス契約番号が入力値と一致
				// 解約済オプションサービス契約ヒットフラグがヒット済み
				else if(op_svc_kei_no.equals(opSvcKeiNo) && dsl_svc_rcd)
				{
					dsl_bf_op_svc_kei_stat = op_svc_kei_stat;
					break;
				}
			}
			// 解約前のオプションサービス契約ステータスが"停止中"の場合、その一つ前のステータスを確認し、
			// "休止・停止中"の場合は解約前のオプションサービス契約ステータスを"休止・停止中"に変更する
			if(SVC_KEI_STAT_220.equals(dsl_bf_op_svc_kei_stat))
			{
				for(i = i + 1; i < eKK0351B003List.size(); i++)
				{
					HashMap childMap = (HashMap)eKK0351B003List.get(i);
					op_svc_kei_no = (String)childMap.get("kk0351_op_svc_kei_no");
					op_svc_kei_stat = (String)childMap.get("op_svc_kei_stat");
					
					// 解約前の１つ前のステータスが"休止・停止中"の場合、
					// 解約前のオプションサービス契約ステータスを"休止・停止中"に変更する
					if(op_svc_kei_no.equals(opSvcKeiNo) && SVC_KEI_STAT_210.equals(op_svc_kei_stat))
					{
						dsl_bf_op_svc_kei_stat = SVC_KEI_STAT_210;
						break;
					}
					// 解約前の１つ前のステータスが"休止・停止中","停止中"以外の場合、検索処理を終了する
					else if(op_svc_kei_no.equals(opSvcKeiNo) && !(SVC_KEI_STAT_220.equals(op_svc_kei_stat)))
					{
						break;
					}
				}
			}
			// 解約前のオプションサービス契約ステータスが"解約済"の場合、解約済になる前のステータスを取得する。
			if(SVC_KEI_STAT_KAI.equals(dsl_bf_op_svc_kei_stat))
			{
				for(i = i + 1; i < eKK0351B003List.size(); i++)
				{
					HashMap childMap = (HashMap)eKK0351B003List.get(i);
					op_svc_kei_no = (String)childMap.get("kk0351_op_svc_kei_no");
					op_svc_kei_stat = (String)childMap.get("op_svc_kei_stat");
					
					// 解約前のオプションサービス契約ステータスが"解約"以外の場合、
					// 解約前のオプションサービス契約ステータスにする。
					if(op_svc_kei_no.equals(opSvcKeiNo) && !op_svc_kei_stat.equals(SVC_KEI_STAT_KAI))
					{
						dsl_bf_op_svc_kei_stat = op_svc_kei_stat;
						break;
					}
				}
			}
		}

		// 解約前オプションサービス契約ステータスが"照査済"の場合、回復後のステータスを"照査済"にする
		if(SVC_KEI_STAT_020.equals(dsl_bf_op_svc_kei_stat))
		{
			kaihk_af_op_svc_kei_stat = SVC_KEI_STAT_020;
		}
		// 解約前オプションサービス契約ステータスが"締結済"の場合、回復後のステータスを"締結済"にする
		else if(SVC_KEI_STAT_030.equals(dsl_bf_op_svc_kei_stat))
		{
			kaihk_af_op_svc_kei_stat = SVC_KEI_STAT_030;
		}
		// 解約前オプションサービス契約ステータスが"サービス提供中"または"停止中"の場合、回復後のステータスを"サービス提供中"にする
		else if(SVC_KEI_STAT_100.equals(dsl_bf_op_svc_kei_stat) || SVC_KEI_STAT_220.equals(dsl_bf_op_svc_kei_stat))
		{
			kaihk_af_op_svc_kei_stat = SVC_KEI_STAT_100;
		}
		// 解約前オプションサービス契約ステータスが"休止・中断中"の場合、回復後のステータスを"休止中"にする
		else if(SVC_KEI_STAT_210.equals(dsl_bf_op_svc_kei_stat))
		{
			HashMap<String, Object> ekk0351A010_map = getEKK0351A010(handle, param, fixedText, opSvcKeiNo);
			String unyo_ymd = JCCBPCommon.getOpeDate(null);									// 運用年月日
			String svc_pause_rls_ymd = (String)ekk0351A010_map.get("svc_pause_rls_ymd");	// サービス休止解除年月日
			
			// サービス休止解除年月日が未設定または未来日の場合、回復後のステータスを"休止中"にする
			if(svc_pause_rls_ymd == null || "".equals(svc_pause_rls_ymd) || svc_pause_rls_ymd.compareTo(unyo_ymd) > 0)
			{
				String oyaKeiStat = "";
				
				// オプションサービス契約サービス.親契約識別コードが01（サービス契約）の場合
				// 比較用のサービス契約ステータスにサービス契約の契約ステータスを設定する
				oyaKeiStat = (String)eKK0081A010Msg.get("svc_kei_stat");
				
				// 親契約のステータスが休止・中断中の場合
				if(SVC_KEI_STAT_210.equals(oyaKeiStat))
				{
					kaihk_af_op_svc_kei_stat = SVC_KEI_STAT_210;
				}
				// 親契約のステータスがサービス提供中の場合
				else if(SVC_KEI_STAT_100.equals(oyaKeiStat))
				{
					kaihk_af_op_svc_kei_stat = SVC_KEI_STAT_100;
				}
				else
				{
					// 処理なし
				}
			}
			// サービス休止解除年月日が過去日の場合、回復後のステータスを"サービス提供中"にする
			else
			{
				kaihk_af_op_svc_kei_stat = SVC_KEI_STAT_100;
			}
		}
		opSvcmap.put("dsl_mskm_dtl_no", dsl_mskm_dtl_no);
		opSvcmap.put("kaihk_af_op_svc_kei_stat", kaihk_af_op_svc_kei_stat);
		return opSvcmap;
	}
	
	/**
	 * 解約前サブオプションサービス契約ステータス取得処理。<br>
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param eKK0401B003List
	 * @param opSvcKeiNo
	 * @param sbopSvcKeiNo
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getDslBfSbopSvcKeiStat(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText, HashMap<String, Object> dataMap, 
			List<HashMap<String, Object>> eKK0401B003List, String opSvcKeiNo, String sbopSvcKeiNo) throws Throwable
	{
		String kaihk_af_sbop_svc_kei_stat = "";		// 解約後サブオプションサービス契約ステータスの初期化
		boolean dsl_svc_rcd = false;				// 解約済サブオプションサービス契約ヒットフラグ(true:ヒット済み、false:未ヒット)
		String sbop_svc_kei_no = null;				// サブオプションサービス契約番号
		String sbop_svc_kei_stat = null;			// サブオプションサービス契約ステータス
		String mskm_dtl_no = null;			// 申込明細番号
		String dsl_bf_sbop_svc_kei_stat = null;		// 解約前のサブオプションサービス契約ステータス
		String dsl_mskm_dtl_no = null;	// 解約された申込明細番号
		HashMap<String, Object> sbopSvcmap = new HashMap<String, Object>();
		if(eKK0401B003List != null && eKK0401B003List.size() != 0)
		{
			int i = 0;
			for(i = 0; i < eKK0401B003List.size(); i++)
			{
				HashMap childMap = (HashMap)eKK0401B003List.get(i);
				sbop_svc_kei_no = (String)childMap.get("kk0401_sbop_svc_kei_no");
				sbop_svc_kei_stat = (String)childMap.get("sbop_svc_kei_stat");
				mskm_dtl_no = (String)childMap.get("mskm_dtl_no");

				// 以下の条件を満たす場合、解約済サブオプションサービス契約ヒットフラグをヒット済み(true)にする
				// サブオプションサービス契約番号が入力値と一致
				// 解約済サブオプションサービス契約ヒットフラグが未ヒット
				// サブオプションサービス契約ステータスが"解約済"または"キャンセル済"
				if(sbop_svc_kei_no.equals(sbopSvcKeiNo) && !dsl_svc_rcd
						&& (SVC_KEI_STAT_KAI.equals(sbop_svc_kei_stat) || SVC_KEI_STAT_CNL.equals(sbop_svc_kei_stat)))
				{
					dsl_mskm_dtl_no = mskm_dtl_no;
					dsl_svc_rcd = true;
				}
				// 以下の条件を満たす場合、解約前サブオプションサービス契約ステータスを設定し検索処理を終了する
				// サブオプションサービス契約番号が入力値と一致
				// 解約済サブオプションサービス契約ヒットフラグがヒット済み
				else if(sbop_svc_kei_no.equals(sbopSvcKeiNo) && dsl_svc_rcd)
				{
					dsl_bf_sbop_svc_kei_stat = sbop_svc_kei_stat;
					break;
				}
			}
		
			// 解約前のサブオプションサービス契約ステータスが"停止中"の場合、その一つ前のステータスを確認し、
			// "休止・停止中"の場合は解約前のサブオプションサービス契約ステータスを"休止・停止中"に変更する
			if(SVC_KEI_STAT_220.equals(dsl_bf_sbop_svc_kei_stat))
			{
				for(i = i + 1; i < eKK0401B003List.size(); i++)
				{
					HashMap childMap = (HashMap)eKK0401B003List.get(i);
					sbop_svc_kei_no = (String)childMap.get("kk0401_sbop_svc_kei_no");
					sbop_svc_kei_stat = (String)childMap.get("sbop_svc_kei_stat");
					
					// 解約前の１つ前のステータスが"休止・停止中"の場合、
					// 解約前のサブオプションサービス契約ステータスを"休止・停止中"に変更する
					if(sbop_svc_kei_no.equals(sbopSvcKeiNo) && sbop_svc_kei_stat.equals(SVC_KEI_STAT_210))
					{
						dsl_bf_sbop_svc_kei_stat = SVC_KEI_STAT_210;
						break;
					}
					// 解約前の１つ前のステータスが"休止・停止中","停止中"以外の場合、検索処理を終了する
					else if(sbop_svc_kei_no.equals(sbopSvcKeiNo) && !(sbop_svc_kei_stat.equals(SVC_KEI_STAT_220)))
					{
						break;
					}
				}
			}
		}
		// 解約前サブオプションサービス契約ステータスが"照査済"の場合、回復後のステータスを"照査済"にする
		if(SVC_KEI_STAT_020.equals(dsl_bf_sbop_svc_kei_stat))
		{
			kaihk_af_sbop_svc_kei_stat = SVC_KEI_STAT_020;
		}
		// 解約前サブオプションサービス契約ステータスが"締結済"の場合、回復後のステータスを"締結済"にする
		else if(SVC_KEI_STAT_030.equals(dsl_bf_sbop_svc_kei_stat))
		{
			kaihk_af_sbop_svc_kei_stat = SVC_KEI_STAT_030;
		}
		// 解約前サブオプションサービス契約ステータスが"サービス提供中"または"停止中"の場合、回復後のステータスを"サービス提供中"にする
		else if(SVC_KEI_STAT_100.equals(dsl_bf_sbop_svc_kei_stat) || SVC_KEI_STAT_220.equals(dsl_bf_sbop_svc_kei_stat))
		{
			kaihk_af_sbop_svc_kei_stat = SVC_KEI_STAT_100;
		}
		// 解約前サブオプションサービス契約ステータスが"休止・中断中"の場合、
		else if(SVC_KEI_STAT_210.equals(dsl_bf_sbop_svc_kei_stat))
		{
			HashMap<String, Object>ekk0401A010_map = getEKK0401A010(handle, param, fixedText, dataMap, opSvcKeiNo, sbopSvcKeiNo);
			String unyo_ymd = JCCBPCommon.getOpeDate(null);									// 運用年月日
			String svc_pause_rls_ymd = (String)ekk0401A010_map.get("svc_pause_rls_ymd");	// サービス休止解除年月日
			
			// サービス休止解除年月日が未設定または未来日の場合、回復後のステータスを"休止中"にする
			if(svc_pause_rls_ymd == null || "".equals(svc_pause_rls_ymd) || svc_pause_rls_ymd.compareTo(unyo_ymd) > 0)
			{
				// オプションの親契約のステータス
				String oyaKeiStat = "";
				
				// サブオプション単独異動の場合
				// オプションサービス契約一意照会結果のオプションサービス契約ステータス
				HashMap<String, Object> ekk0351A010_map = getEKK0351A010(handle, param, fixedText, opSvcKeiNo);

				oyaKeiStat = (String)ekk0351A010_map.get("op_svc_kei_stat");
				
				// 親契約のステータスが休止・中断中の場合
				if(SVC_KEI_STAT_210.equals(oyaKeiStat))
				{
					kaihk_af_sbop_svc_kei_stat = SVC_KEI_STAT_210;
				}
				// 親契約のステータスがサービス提供中の場合
				else if(SVC_KEI_STAT_100.equals(oyaKeiStat))
				{
					kaihk_af_sbop_svc_kei_stat = SVC_KEI_STAT_100;
				}
				else
				{
					// 処理なし
				}
			}
			// サービス休止解除年月日が過去日の場合、回復後のステータスを"サービス提供中"にする
			else
			{
				kaihk_af_sbop_svc_kei_stat = SVC_KEI_STAT_100;
			}
		}
		sbopSvcmap.put("dsl_mskm_dtl_no", dsl_mskm_dtl_no);
		sbopSvcmap.put("kaihk_af_sbop_svc_kei_stat", kaihk_af_sbop_svc_kei_stat);
		return sbopSvcmap;
	}
	
	/**
	 * サービス契約回線内訳一覧照会（サービス契約番号）を呼び出す。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
 	 * @param fixedText ユーザ定義文字列
	 * @param svcKeiNo サービス契約番号
	 * @throws Throwable 
	 */
	private String callGetKaisenTgSvkei(SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText,
			String svcKeiNo) throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// サービス契約回線内訳一覧照会（サービス契約番号）の検索パラメータを設定
		Object[][] eKK0251B001IN = {
				{EKK0251B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0251B001},
				// 機能コード："1"
				{EKK0251B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
				{EKK0251B001CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}	// ＫＥＹ＿サービス契約番号

		};
		
		// ◇ SC呼出実行
		CAANMsg[] eKK0251B001MsgList = callSC(handle, scCall, param, fixedText, eKK0251B001IN,
				new EKK0251B001CBSMsg().getContents()).getCAANMsgList(EKK0251B001CBSMsg.EKK0251B001CBSMSG1LIST);
		{
			for (CAANMsg cAANMsg : eKK0251B001MsgList)
			{
				return cAANMsg.getString(EKK0251B001CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
			}
		}
		// 処理結果
		return "";
	}
	
	/**
	 *オプションサービス契約一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0351B002(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String func_cd
															, String svcKeiNo)throws Throwable
	{
		//オプションサービス契約一覧照会明細
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//オプションサービス契約一覧照会（サービス契約番号）の上りマッピング
		Object[][] eKK0351B002In =
		{
			{EKK0351B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351B002}
			// 機能コード
			, {EKK0351B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿サービス契約番号
			, {EKK0351B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
			// ＫＥＹ＿ソート項目Ｎｏ
			, {EKK0351B002CBSMsg.KEY_SORT_ITEM_NO, "7"}
			// ＫＥＹ＿ソート区分
			, {EKK0351B002CBSMsg.KEY_SORT_KBN, "2"}
		};

		// サービスIF実行
		CAANMsg[] eKK0351B002Msg1List = callSC(handle, scCall, param, fixedText, eKK0351B002In,
				new EKK0351B002CBSMsg().getContents()).getCAANMsgList(EKK0351B002CBSMsg.EKK0351B002CBSMSG1LIST);
		
		
		if (null != eKK0351B002Msg1List)
		{
			for (CAANMsg eKK0351B002Msg : eKK0351B002Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO, eKK0351B002Msg.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
				resultMap.put(EKK0351B002CBSMsg1List.OP_SVC_CD, eKK0351B002Msg.getString(EKK0351B002CBSMsg1List.OP_SVC_CD));
				resultMap.put(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT, eKK0351B002Msg.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT));
				// IT1-2018-0000160 ADD START
				resultMap.put(EKK0351B002CBSMsg1List.DSP_SVCTK_STAYMD, eKK0351B002Msg.getString(EKK0351B002CBSMsg1List.DSP_SVCTK_STAYMD));
				// IT1-2018-0000160 ADD END
				resultList.add(resultMap);
			}
		}
		return resultList;
	}
	
	/**
	 *オプションサービス契約履歴一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0351B003(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String opSvcKeiNo)throws Throwable
	{
		//サブオプションサービス契約履歴一覧照会明細
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//サブオプションサービス契約履歴一覧照会の上りマッピング
		Object[][] eKK0351B003In =
		{
			{EKK0351B003CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351B003}
			// 機能コード
			, {EKK0351B003CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿サービス契約番号
			, {EKK0351B003CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK0351B003Msg1List = callSC(handle, scCall, param, fixedText, eKK0351B003In,
				new EKK0351B003CBSMsg().getContents()).getCAANMsgList(EKK0351B003CBSMsg.EKK0351B003CBSMSG1LIST);
		
		if (null != eKK0351B003Msg1List)
		{
			for (CAANMsg eKK0351B003Msg : eKK0351B003Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO, eKK0351B003Msg.getString(EKK0351B003CBSMsg1List.KK0351_OP_SVC_KEI_NO));
				resultMap.put(EKK0351B003CBSMsg1List.OP_SVC_KEI_STAT, eKK0351B003Msg.getString(EKK0351B003CBSMsg1List.OP_SVC_KEI_STAT));
				resultMap.put(EKK0351B003CBSMsg1List.OP_SVC_CD, eKK0351B003Msg.getString(EKK0351B003CBSMsg1List.OP_SVC_CD));
				resultMap.put(EKK0351B003CBSMsg1List.MSKM_DTL_NO, eKK0351B003Msg.getString(EKK0351B003CBSMsg1List.MSKM_DTL_NO));
				resultList.add(resultMap);
			}
		}
		return resultList;
	}

	
	/**
	 *オプションサービス契約一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnオプションサービス契約＜ISP＞一意照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private HashMap<String, Object> getEKK0351A010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String opSvcKeiNo)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//オプションサービス契約＜ISP＞一意照会の上りマッピング
		Object[][] eKK0351A010In =
		{
			{EKK0351A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351A010}
			// 機能コード："2"
			, {EKK0351A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
			// ＫＥＹ＿予約適用年月日
			, {EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};

		// サービスIF実行
		CAANMsg[] eKK0351A010Msg1List = callSC(handle, scCall, param, fixedText, eKK0351A010In,
				new EKK0351A010CBSMsg().getContents()).getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
		
		if (null != eKK0351A010Msg1List)
		{
			if (eKK0351A010Msg1List != null && eKK0351A010Msg1List.length > 0)
			{
				CAANMsg eKK0351A010Msg = eKK0351A010Msg1List[0];
				return eKK0351A010Msg.getHashMap();
			}
		}
		return null;
	}
	
	/**
	 *オプションサービス契約＜ISP＞一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param オプションサービス契約＜ISP＞一意照会
	 * @returnオプションサービス契約＜ISP＞一意照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private HashMap<String, Object> getEKK0361A010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String func_cd
															, String opSvcKeiNo)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//オプションサービス契約＜ISP＞一意照会の上りマッピング
		Object[][] eKK0361A010In =
		{
			{EKK0361A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361A010}
			// 機能コード："2"
			, {EKK0361A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK0361A010Msg1List = callSC(handle, scCall, param, fixedText, eKK0361A010In,
				new EKK0361A010CBSMsg().getContents()).getCAANMsgList(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST);
		
		if (null != eKK0361A010Msg1List)
		{
			if (eKK0361A010Msg1List != null && eKK0361A010Msg1List.length > 0)
			{
				CAANMsg eKK0361A010Msg = eKK0361A010Msg1List[0];
				return eKK0361A010Msg.getHashMap();
			}
		}
		return null;
	}
	
	/**
	 *サブオプションサービス契約一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnサブオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0401B001(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String func_cd
															, String opSvcKeiNo)throws Throwable
	{
		//サブオプションサービス契約一覧照会明細
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//サブオプションサービス契約一覧照会の上りマッピング
		Object[][] eKK0401B001In =
		{
			{EKK0401B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401B001}
			// 機能コード："1"
			, {EKK0401B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK0401B001Msg1List = callSC(handle, scCall, param, fixedText, eKK0401B001In,
				new EKK0401B001CBSMsg().getContents()).getCAANMsgList(EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST);
		
		if (null != eKK0401B001Msg1List)
		{
			if (eKK0401B001Msg1List != null && eKK0401B001Msg1List.length > 0)
			{
				CAANMsg eKK0401B001Msg = eKK0401B001Msg1List[0];
				HashMap<String, Object> resultkojihiKapKei = new HashMap<String, Object>();
				resultkojihiKapKei.put(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO, eKK0401B001Msg.getString(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));
				resultkojihiKapKei.put(EKK0401B001CBSMsg1List.SBOP_SVC_CD, eKK0401B001Msg.getString(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));
				resultkojihiKapKei.put(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO, eKK0401B001Msg.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
				resultList.add(resultkojihiKapKei);
			}
		}
		return resultList;
	}
	
	/**
	 *サブオプションサービス契約一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnサブオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getEKK0401A010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String opSvcKeiNo
															, String sbopSvcKeiNo)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//サブオプションサービス契約一意照会の上りマッピング
		Object[][] eKK0401A010In =
		{
			{EKK0401A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401A010}
			// 機能コード："2"
			, {EKK0401A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0401A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO, sbopSvcKeiNo}
			// ＫＥＹ＿予約適用日
			, {EKK0401A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};

		// サービスIF実行
		CAANMsg[] eKK0401A010Msg1List = callSC(handle, scCall, param, fixedText, eKK0401A010In,
				new EKK0401A010CBSMsg().getContents()).getCAANMsgList(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST);
		
		if (null != eKK0401A010Msg1List)
		{
			if (eKK0401A010Msg1List != null && eKK0401A010Msg1List.length > 0)
			{
				CAANMsg eKK0401A010Msg = eKK0401A010Msg1List[0];
				return (HashMap<String, Object>)eKK0401A010Msg.getHashMap();
			}
		}
		return null;
	}
	
	/**
	 *サブオプションサービス契約＜ISP＞一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnサブオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getEKK0411A010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String opSvcKeiNo
															, String sbopSvcKeiNo)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//サブオプションサービス契約＜ISP＞一意照会の上りマッピング
		Object[][] eKK0411A010In =
		{
			{EKK0411A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0411A010}
			// 機能コード："2"
			, {EKK0411A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0411A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0411A010CBSMsg.KEY_SBOP_SVC_KEI_NO, sbopSvcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK0411A010Msg1List = callSC(handle, scCall, param, fixedText, eKK0411A010In,
				new EKK0411A010CBSMsg().getContents()).getCAANMsgList(EKK0411A010CBSMsg.EKK0411A010CBSMSG1LIST);
		
		if (null != eKK0411A010Msg1List)
		{
			if (eKK0411A010Msg1List != null && eKK0411A010Msg1List.length > 0)
			{
				CAANMsg eKK0411A010Msg = eKK0411A010Msg1List[0];
				return (HashMap<String, Object>)eKK0411A010Msg.getHashMap();
			}
		}
		return null;
	}
	
	/**
	 *異動予約一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @return 異動予約一意照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private HashMap<String, Object> getEKK1681B001(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String opSvcKeiNo)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//異動予約一意照会の上りマッピング
		Object[][] eKK1681B001In =
		{
			{EKK1681B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1681B001}
			// 機能コード："1"
			, {EKK1681B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK1681B001CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK1681B001Msg1List = callSC(handle, scCall, param, fixedText, eKK1681B001In,
				new EKK1681B001CBSMsg().getContents()).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
		
		if (null != eKK1681B001Msg1List)
		{
			if (eKK1681B001Msg1List != null && eKK1681B001Msg1List.length > 0)
			{
				CAANMsg eKK1681B001Msg = eKK1681B001Msg1List[0];
				return eKK1681B001Msg.getHashMap();
			}
		}
		return null;
	}
	
	/**
	 *サブオプションサービス契約履歴一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0401B003(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String func_cd
															, String opSvcKeiNo)throws Throwable
	{
		//サブオプションサービス契約履歴一覧照会明細
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//サブオプションサービス契約履歴一覧照会の上りマッピング
		Object[][] eKK0401B003In =
		{
			{EKK0401B003CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401B003}
			// 機能コード
			, {EKK0401B003CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿オプションサービス契約番号
			, {EKK0401B003CBSMsg.KEY_SBOP_SVC_KEI_NO, opSvcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK0401B003Msg1List = callSC(handle, scCall, param, fixedText, eKK0401B003In,
				new EKK0401B003CBSMsg().getContents()).getCAANMsgList(EKK0401B003CBSMsg.EKK0401B003CBSMSG1LIST);
		
		if (null != eKK0401B003Msg1List)
		{
			for (CAANMsg eKK0401B003Msg : eKK0401B003Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK0401B003CBSMsg1List.KK0401_SBOP_SVC_KEI_NO, eKK0401B003Msg.getString(EKK0401B003CBSMsg1List.KK0401_SBOP_SVC_KEI_NO));
				resultMap.put(EKK0401B003CBSMsg1List.SBOP_SVC_KEI_STAT, eKK0401B003Msg.getString(EKK0401B003CBSMsg1List.SBOP_SVC_KEI_STAT));
				resultMap.put(EKK0401B003CBSMsg1List.MSKM_DTL_NO, eKK0401B003Msg.getString(EKK0401B003CBSMsg1List.MSKM_DTL_NO));
				resultList.add(resultMap);
			}
		}
		return resultList;
	}	
	
	/**
	 *住所変更一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @return 住所ステータス
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK2091B001(SessionHandle handle
								, IRequestParameterReadWrite param
								, String fixedText
								, Map<String, Object> dataMap
								, String func_cd
								, String svcKeiKaisenUcwkNo)throws Throwable
	{
		//住所変更一覧照会明細
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//住所変更一覧照会の上りマッピング
		Object[][] eKK2091B001In =
		{
			{EKK2091B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2091B001}
			// 機能コード
			, {EKK2091B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿移転先サービス契約回線内訳番号
			, {EKK2091B001CBSMsg.KEY_ITENS_SVKEI_KISUW_NO, svcKeiKaisenUcwkNo}
		};

		// サービスIF実行
		CAANMsg[] eKK2091B001Msg1List = callSC(handle, scCall, param, fixedText, eKK2091B001In,
				new EKK2091B001CBSMsg().getContents()).getCAANMsgList(EKK2091B001CBSMsg.EKK2091B001CBSMSG1LIST);
		
		if (null != eKK2091B001Msg1List)
		{
			for (CAANMsg eKK2091B001Msg : eKK2091B001Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK2091B001CBSMsg1List.ADCHG_NO, eKK2091B001Msg.getString(EKK2091B001CBSMsg1List.ADCHG_NO));
				resultMap.put(EKK2091B001CBSMsg1List.ADCHG_STAT, eKK2091B001Msg.getString(EKK2091B001CBSMsg1List.ADCHG_STAT));
				resultList.add(resultMap);
			}
		}
		return resultList;
	}
	
	/**
	 *住所変更明細一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @return住所変更明細一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK2101B001(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, Map<String, Object> dataMap
															, String func_cd
															, String adchgNo
															, String adchgDtlSbtCd)throws Throwable
	{
		//住所変更明細一覧照会
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//住所変更明細一覧照会の上りマッピング
		Object[][] eKK2101B001In =
		{
			{EKK2101B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101B001}
			// 機能コード
			, {EKK2101B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿住所変更番号
			, {EKK2101B001CBSMsg.KEY_ADCHG_NO , adchgNo}
			// ＫＥＹ＿住所変更明細種別コード
			, {EKK2101B001CBSMsg.KEY_ADCHG_DTL_SBT_CD , adchgDtlSbtCd}
		};

		// サービスIF実行
		CAANMsg[] eKK2101B001Msg1List = callSC(handle, scCall, param, fixedText, eKK2101B001In,
				new EKK2101B001CBSMsg().getContents()).getCAANMsgList(EKK2101B001CBSMsg.EKK2101B001CBSMSG1LIST);
		
		if (null != eKK2101B001Msg1List)
		{
			for (CAANMsg eKK2101B001Msg : eKK2101B001Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK2101B001CBSMsg1List.ADCHG_DTL_NO, eKK2101B001Msg.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_NO));
				resultMap.put(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD, eKK2101B001Msg.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD));
				resultMap.put(EKK2101B001CBSMsg1List.CHBF_SKBT_NO, eKK2101B001Msg.getString(EKK2101B001CBSMsg1List.CHBF_SKBT_NO));
				resultMap.put(EKK2101B001CBSMsg1List.CHAF_SKBT_NO, eKK2101B001Msg.getString(EKK2101B001CBSMsg1List.CHAF_SKBT_NO));
				resultList.add(resultMap);
			}
		}
		
		return resultList;
	}
	
	/**
	 *サービス契約一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcKeiNo サービス契約番号
	 * @param func_cd 機能コード
	 * @return 結果
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getSvckeiIti(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String svcKeiNo
															, String func_cd)throws Throwable
	{
		//申込明細一意照会
		List<HashMap<String, Object>> eKK0081A010List = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//申込明細一意照会の上りマッピング
		Object[][] eKK0081A010In =
		{
			{EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010}
			// 機能コード："2"
			, {EKK0081A010CBSMsg.FUNC_CODE, func_cd}
			// ＫＥＹ＿サービス契約番号
			, {EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
			// ＫＥＹ＿適用年月日
			, {EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};

		// サービスIF実行
		CAANMsg[] eKK0081A010Msg1List = callSC(handle, scCall, param, fixedText, eKK0081A010In,
				new EKK0081A010CBSMsg().getContents()).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		if (null != eKK0081A010Msg1List)
		{
			for (CAANMsg eKK0081A010Msg : eKK0081A010Msg1List)
			{
				HashMap<String, Object> eKK0081A010Map = new HashMap<String, Object>();
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.SVC_KEI_STAT, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.SVC_STA_YMD, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.SVC_STA_YMD));
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.SYSID, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.SYSID));
				eKK0081A010List.add(eKK0081A010Map);
			}
		}
		return eKK0081A010List;
	}
	
	/**
	 *課金先一覧照会（請求契約番号／サービス契約番号）を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcKeiNo サービス契約番号
	 * @param func_cd 機能コード
	 * @return 結果
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getKK0321B002List(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String svcKeiNo)throws Throwable
	{
		//課金先一覧照会（請求契約番号／サービス契約番号）
		List<HashMap<String, Object>> eKK0321B002List = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//課金先一覧照会（請求契約番号／サービス契約番号）の上りマッピング
		Object[][] eKK0321B002In =
		{
			{EKK0321B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321B002}
			// 機能コード："１"
			, {EKK0321B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿サービス契約番号
			, {EKK0321B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};

		// サービスIF実行
		CAANMsg[] eKK0321B002Msg1List = callSC(handle, scCall, param, fixedText, eKK0321B002In,
				new EKK0321B002CBSMsg().getContents()).getCAANMsgList(EKK0321B002CBSMsg.EKK0321B002CBSMSG1LIST);
		
		if (null != eKK0321B002Msg1List)
		{
			for (CAANMsg eKK0321B002Msg : eKK0321B002Msg1List)
			{
				HashMap<String, Object> eKK0321B002Map = new HashMap<String, Object>();
				eKK0321B002Map.put(EKK0321B002CBSMsg1List.SEIKY_KEI_NO, eKK0321B002Msg.getString(EKK0321B002CBSMsg1List.SEIKY_KEI_NO));
				eKK0321B002List.add(eKK0321B002Map);
			}
		}
		return eKK0321B002List;
	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return CAANMsg
	 * @throws Throwable 例外が発生した場合
	 */
	private CAANMsg callSC(SessionHandle handle
								, ServiceComponentRequestInvoker scCall
								, IRequestParameterReadWrite param
								, String dataMapKey
								, Object[][] mappingData
								, Object[][] contents) throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);

		Map<?, ?> result = scCall.run(paramMap, handle);

		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);

		CAANMsg msg = templates[0];

		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);

		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);

		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData, contents);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);

		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}

		return msg;
	}
	
	/**
	 * エラー情報を取得します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param
															, CAANMsg[] templates
															, int returnCode
															, String dataMapKey
															, Object[][] mappingData
															, Object[][] contents) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}

		if (null == JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;

		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);

		for (int i = 0; null != contents && i < contents.length ; i++)
		{
			String itemNm = (String)contents[i][0];
			if (itemNm.endsWith(ERRITEM_SUFFIX))
			{
				String errCd = (String)template.getString(itemNm);
				if (!JKKStringUtil.isNullBlank(errCd))
				{
					inMap.put(itemNm, errCd);
				}
			}
		}

		return param;
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする<br>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param msgList
	 * @param param
	 * @param mapName
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked", "cast", "boxing" })
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			String mapName) throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;
		
		// 業務データ設定
		dataMap = (HashMap)param.getData(mapName);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(mapName, dataMap);
		}
				
		CAANMsg msg = templates[0];

		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// エラー情報の設定
		param = editErrorInfo(param, templates, (Integer)return_code, mapName);
		
		// エラー情報のマップを取得
		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));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		
		return param;
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする<br>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param param      業務データ取得・書込用I/F
	 * @param templates  CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param mapName    SCマップ名
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked", "cast", "boxing" })
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates,
			int returnCode,
			String mapName) throws Throwable
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(ECK0011B002CBSMsg.STATUS);

		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);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(mapName);
		
		Iterator<String> it = template.getHashMap().keySet().iterator();
		while (it.hasNext())
		{
			String key = it.next();
			if (key.endsWith("_err"))
			{
				if (!template.isNull(key))
				{
					inMap.put(key, template.getString(key));
				}
			}
		}
		
		return param;
	}
	
	/**
	 * チェック処理です。<br>
	 * <br>
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return HashMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		List<CAANMsg> templates = new ArrayList<CAANMsg>();
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, Arrays.asList(templates));
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約登録のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0361D010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String sysID, String svcKeiNo, String idoDiv,
			String mskmDtlNo, String seikyKeiNo, String opSvcCd, String pcrsCd, String pplanCd,
			String pcPlanMksmYmd, String tmcpKeiNo, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0361D010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0361D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361D010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0361D010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0361D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービスコード
		template.set(EKK0361D010CBSMsg.OP_SVC_CD, opSvcCd);
		// オプション料金コースコード
		template.set(EKK0361D010CBSMsg.PCRS_CD, pcrsCd);		
		// オプション料金プランコード
		template.set(EKK0361D010CBSMsg.PPLAN_CD, pplanCd);	
		// 親契約識別コード
		template.set(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD, "01");//固定	
		// サービス契約番号
		template.set(EKK0361D010CBSMsg.SVC_KEI_NO, svcKeiNo);	
		// ＳＹＳＩＤ
		template.set(EKK0361D010CBSMsg.SYSID, sysID);
		// サービス利用開始希望年月日
		//template.set(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD, pcPlanMksmYmd);
		// 異動区分
		template.set(EKK0361D010CBSMsg.IDO_DIV, idoDiv);
		// 請求契約番号
		template.set(EKK0361D010CBSMsg.SEIKY_KEI_NO, seikyKeiNo);
		// 申込明細番号
		template.set(EKK0361D010CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		// 端末補償契約番号
		if (!JKKCommonUtil.isNull(tmcpKeiNo))
		{
			template.set(EKK0361D010CBSMsg.TMCP_KEI_NO, tmcpKeiNo);
		}
		// 端末補償申込年月日
		template.set(EKK0361D010CBSMsg.TMCP_MSKM_YMD, pcPlanMksmYmd);
		// 更新年月日時分秒（更新前
		template.set(EKK0361D010CBSMsg.UPD_DTM_BF, updDtmBf);	
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約照査のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0361C010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0361C010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0361C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361C010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0361C010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0361C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約番号
		template.set(EKK0361C010CBSMsg.OP_SVC_KEI_NO,    opSvcKeiNo);
		// 異動区分
		template.set(EKK0361C010CBSMsg.IDO_DIV,          idoDiv);

		// 更新年月日時分秒（更新前
		template.set(EKK0361C010CBSMsg.UPD_DTM_BF, updDtmBf);	
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約＜ISP＞照査締結のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0361C030(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0361C030CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0361C030CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361C030);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0361C030CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0361C030CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約番号
		template.set(EKK0361C030CBSMsg.OP_SVC_KEI_NO,    opSvcKeiNo);
		// 異動区分
		template.set(EKK0361C030CBSMsg.IDO_DIV,          idoDiv);
		
		// 部品呼び出し → 事務手数料自動適用要否
		template.set(EKK0361C030CBSMsg.RULE0059_AUTO_APLY, String.valueOf("0"));

		// 更新年月日時分秒（更新前
		template.set(EKK0361C010CBSMsg.UPD_DTM_BF, updDtmBf);	
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約＜ISP＞情報変更のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0361C050(IRequestParameterReadWrite param,
			// IT1-2018-0000160 MOD START
//			HashMap<String, Object> inMap, String opSvcKeiNo, String idoDiv, String mskmYmd, String updDtmBf) throws RequestParameterException
			HashMap<String, Object> inMap, String opSvcKeiNo, String idoDiv, String mskmYmd, String mskmDtlNo, String dspSvctkStaymdPc, String updDtmBf) throws RequestParameterException
			// IT1-2018-0000160 MOD END
	{
		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));
		
		CAANMsg template = new CAANMsg(EKK0361C050CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0361C050CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361C050);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0361C050CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0361C050CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約番号
		template.set(EKK0361C050CBSMsg.OP_SVC_KEI_NO,    opSvcKeiNo);
		// 異動区分
		template.set(EKK0361C050CBSMsg.IDO_DIV,          idoDiv);
		// IT1-2018-0000160 ADD START
		// オプションサービス契約＜ＩＳＰ＞情報変更マップ.表示用サービス提供開始年月日 → 表示用サービス提供開始年月日
		template.set(EKK0361C050CBSMsg.DSP_SVCTK_STAYMD, dspSvctkStaymdPc);
		// 申込明細番号
		template.set(EKK0361C050CBSMsg.MSKM_DTL_NO,          mskmDtlNo);
		// IT1-2018-0000160 ADD END
		// 端末補償申込年月日
		template.set(EKK0361C050CBSMsg.TMCP_MSKM_YMD,          mskmYmd);
		// 更新年月日時分秒（更新前
		template.set(EKK0361C010CBSMsg.UPD_DTM_BF, updDtmBf);	
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約キャンセルのサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C220(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C220CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C220CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C220);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C220CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C220CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約番号
		template.set(EKK0351C220CBSMsg.OP_SVC_KEI_NO,     opSvcKeiNo);
		// 申込明細番号
		template.set(EKK0351C220CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		//オプション引継ぎの場合
		if(JKKStrConst.CD00576_00003.equals(idoDiv)) 
		{
			// サービスキャンセル理由コード
			template.set(EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD, String.valueOf("09"));
		} 
		else 
		{
			// サービスキャンセル理由コード
			template.set(EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD, String.valueOf("05"));
		}
		// 異動区分
		template.set(EKK0351C220CBSMsg.IDO_DIV,           idoDiv);
		// 更新年月日時分秒（更新前）
		template.set(EKK0351C220CBSMsg.UPD_DTM_BF,        updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約解約 のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C240(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv,
			String pcPlandslDay, String pcPlanChrgdslDay, String updDtmBf, HashMap<String, Object> eKK0351A010Map) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C240CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C240CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C240);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C240CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C240CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約番号
		template.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO,     opSvcKeiNo);
		// 申込明細番号
		template.set(EKK0351C240CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// 予約適用開始希望年月日
		template.set(EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD, pcPlandslDay);
		// サービス終了年月日
		template.set(EKK0351C240CBSMsg.SVC_ENDYMD,        pcPlandslDay);

		// サービス課金終了年月日
		template.set(EKK0351C240CBSMsg.SVC_CHRG_ENDYMD, pcPlanChrgdslDay);

		// サービス解約理由コード
		//オプション引継ぎの場合
		if(JKKStrConst.CD00576_00003.equals(idoDiv) || JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv)) 
		{
			template.set(EKK0351C240CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_HKTG);
		} 
		else 
		{
			template.set(EKK0351C240CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_NORMAL);
		}
		// サービス解約理由メモ
		template.set(EKK0351C240CBSMsg.SVC_DLRE_MEMO,   (String)eKK0351A010Map.get(EKK0351A010CBSMsg1List.SVC_DLRE_MEMO));
		// 解約担当ユーザーＩＤ
		template.set(EKK0351C240CBSMsg.DSL_TNT_USER_ID, (String)eKK0351A010Map.get(EKK0351A010CBSMsg1List.DSL_TNT_USER_ID));
		// 違約金発生コード
		template.set(EKK0351C240CBSMsg.PNLTY_HASSEI_CD, "0");//違約金なし固定
		// 異動区分
		template.set(EKK0351C240CBSMsg.IDO_DIV,         idoDiv);
		// 更新年月日時分秒（更新前）
		template.set(EKK0351C240CBSMsg.UPD_DTM_BF,      updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約解約確定のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C250(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv,
			String pcPlandslDay, String pcPlanChrgdslDay, String updDtmBf, HashMap<String, Object> eKK0351A010Map) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C250CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C250CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C250);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C250CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C250CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約番号
		template.set(EKK0351C250CBSMsg.OP_SVC_KEI_NO,   opSvcKeiNo);
		// サービス終了年月日
		template.set(EKK0351C250CBSMsg.SVC_ENDYMD,      pcPlandslDay);

		// サービス課金終了年月日
		template.set(EKK0351C250CBSMsg.SVC_CHRG_ENDYMD, pcPlanChrgdslDay);

		// サービス解約理由コード
		//オプション引継ぎの場合
		if(JKKStrConst.CD00576_00003.equals(idoDiv) || JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv)) 
		{
			template.set(EKK0351C250CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_HKTG);
		} 
		else 
		{
			template.set(EKK0351C250CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_NORMAL);
		}
		
		// サービス解約理由メモ
		template.set(EKK0351C250CBSMsg.SVC_DLRE_MEMO,   (String)eKK0351A010Map.get(EKK0351A010CBSMsg1List.SVC_DLRE_MEMO));
		// 解約担当ユーザーID
		template.set(EKK0351C250CBSMsg.DSL_TNT_USER_ID, (String)eKK0351A010Map.get(EKK0351A010CBSMsg1List.DSL_TNT_USER_ID));
		// 異動区分
		template.set(EKK0351C250CBSMsg.IDO_DIV,         idoDiv);
		// 更新年月日時分秒（更新前）
		template.set(EKK0351C250CBSMsg.UPD_DTM_BF,      updDtmBf);

		// 解約時課金フラグ
		String chrgFlg = "1";
		template.set(EKK0351C250CBSMsg.DSLJI_CHRG_FLG, chrgFlg);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約回復のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C270(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv,
			String kaihkYmd, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C270CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C270CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C270);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C270CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C270CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約回復マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0351C270CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);
	
		// オプションサービス契約回復マップ.申込明細番号 → 申込明細番号
		template.set(EKK0351C270CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		
		// オプションサービス契約回復マップ.回復年月日 → 回復年月日
		template.set(EKK0351C270CBSMsg.KAIHK_YMD, kaihkYmd);
	
		// オプションサービス契約回復マップ.異動区分 → 異動区分
		template.set(EKK0351C270CBSMsg.IDO_DIV, idoDiv);
	
		// オプションサービス契約回復マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前）
		template.set(EKK0351C270CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *休止中オプションサービス契約回復のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C280(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv,
			String kaihkYmd, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C280CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C280CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C280);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C280CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C280CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// 休止中オプションサービス契約回復マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0351C280CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);
	
		// 休止中オプションサービス契約回復マップ.申込明細番号 → 申込明細番号
		template.set(EKK0351C280CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		
		// 休止中オプションサービス契約回復マップ.回復年月日 → 回復年月日
		template.set(EKK0351C280CBSMsg.KAIHK_YMD, kaihkYmd);
	
		// 休止中オプションサービス契約回復マップ.異動区分 → 異動区分
		template.set(EKK0351C280CBSMsg.IDO_DIV, idoDiv);
	
		// 休止中オプションサービス契約回復マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前）
		template.set(EKK0351C280CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *照査後オプションサービス契約キャンセル取消のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C300(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv,
			String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C300CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C300CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C300);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C300CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C300CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約回復マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0351C300CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);
	
		// オプションサービス契約回復マップ.申込明細番号 → 申込明細番号
		template.set(EKK0351C300CBSMsg.MSKM_DTL_NO, mskmDtlNo);
	
		// オプションサービス契約回復マップ.異動区分 → 異動区分
		template.set(EKK0351C300CBSMsg.IDO_DIV, idoDiv);
	
		// オプションサービス契約回復マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前）
		template.set(EKK0351C300CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *オプションサービス契約解約取消のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0351C310(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String mskmDtlNo, String idoDiv,
			String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0351C310CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351C310CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C310);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0351C310CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0351C310CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// オプションサービス契約回復マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0351C310CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);
	
		// オプションサービス契約回復マップ.申込明細番号 → 申込明細番号
		template.set(EKK0351C310CBSMsg.MSKM_DTL_NO, mskmDtlNo);
	
		// オプションサービス契約回復マップ.異動区分 → 異動区分
		template.set(EKK0351C310CBSMsg.IDO_DIV, idoDiv);
	
		// オプションサービス契約回復マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前）
		template.set(EKK0351C310CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約＜ISP＞登録 のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0411D010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String idoDiv, String mskmDtlNo,
			String seikyKeiNo, String sbOpSvcCd, String pcrsCd, String pplanCd, String pcWidePlanMksmYmd, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0411D010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0411D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0411D010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0411D010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0411D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約＜ISP＞登録.オプションサービス契約番号
		template.set(EKK0411D010CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約＜ISP＞登録.サブオプションサービスコード
		template.set(EKK0411D010CBSMsg.SBOP_SVC_CD, sbOpSvcCd);

		// サブオプションサービス契約＜ISP＞登録.料金コースコード
		template.set(EKK0411D010CBSMsg.PCRS_CD, pcrsCd);

		// サブオプションサービス契約＜ISP＞登録.料金プランコード
		template.set(EKK0411D010CBSMsg.PPLAN_CD, pplanCd);

		// サブオプションサービス契約＜ISP＞登録.申込明細番号
		template.set(EKK0411D010CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// サブオプションサービス契約＜ISP＞登録.異動区分
		template.set(EKK0411D010CBSMsg.IDO_DIV, idoDiv);

		// サブオプションサービス契約＜ISP＞登録.請求契約番号
		template.set(EKK0411D010CBSMsg.SEIKY_KEI_NO, seikyKeiNo);
		
		// サブオプションサービス契約＜ISP＞登録.端末補償申込年月日
		template.set(EKK0411D010CBSMsg.TMCP_MSKM_YMD, pcWidePlanMksmYmd);

		// サブオプションサービス契約＜ISP＞登録.更新年月日時分秒(更新前)
		template.set(EKK0411D010CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約＜ISP＞照査のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0411C020(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbOpSvcKeiNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0411C020CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0411C020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0411C020);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0411C020CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0411C020CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約＜ISP＞照査.オプションサービス契約番号
		template.set(EKK0411C020CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約＜ISP＞照査.サブオプションサービス契約番号
		template.set(EKK0411C020CBSMsg.SBOP_SVC_KEI_NO, sbOpSvcKeiNo);

		// サブオプションサービス契約＜ISP＞照査.異動区分
		template.set(EKK0411C020CBSMsg.IDO_DIV, idoDiv);

		// サブオプションサービス契約＜ISP＞照査.更新年月日時分秒(更新前)
		template.set(EKK0411C020CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約＜ISP＞照査のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0411C040(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbOpSvcKeiNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0411C040CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0411C040CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0411C040);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0411C040CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0411C040CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約＜ISP＞照査.オプションサービス契約番号
		template.set(EKK0411C040CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約＜ISP＞照査.サブオプションサービス契約番号
		template.set(EKK0411C040CBSMsg.SBOP_SVC_KEI_NO, sbOpSvcKeiNo);

		// サブオプションサービス契約＜ISP＞照査.異動区分
		template.set(EKK0411C040CBSMsg.IDO_DIV, idoDiv);

		// サブオプションサービス契約＜ISP＞照査.更新年月日時分秒(更新前)
		template.set(EKK0411C040CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約キャンセルのサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C150(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo,
			String mskmDtlNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C150CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C150CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C150);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C150CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C150CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約キャンセルマップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C150CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約キャンセルマップ.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C150CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);

		// サブオプションサービス契約キャンセルマップ.申込明細番号 → 申込明細番号
		template.set(EKK0401C150CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// 申込キャンセルコードの設定
		template.set(EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD, CNSL_RSN_CD_OTHER);

		// サブオプションサービス契約キャンセルマップ.異動区分 → 異動区分
		template.set(EKK0401C150CBSMsg.IDO_DIV, idoDiv);

		// サブオプションサービス契約キャンセルマップ.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		template.set(EKK0401C150CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約解約のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C170(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo,
			String mskmDtlNo, String idoDiv, String pcWidePlanDslDay, String pcWidePlanChrgDslDay, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C170CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C170CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C170);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C170CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C170CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約解約マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C170CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約解約マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);

		// サブオプションサービス契約解約マップ.申込明細番号 → 申込明細番号
		template.set(EKK0401C170CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		
		// サブオプションサービス契約解約マップ.予約適用開始希望年月日 → サービス終了年月日
		template.set(EKK0401C170CBSMsg.RSV_TSTA_KIBO_YMD, pcWidePlanDslDay);

		// サブオプションサービス契約解約マップ.サービス終了年月日 → サービス終了年月日
		template.set(EKK0401C170CBSMsg.SVC_ENDYMD, pcWidePlanDslDay);
		
		// サブオプションサービス契約解約マップ.サービス課金終了年月日 → サービス課金終了年月日

		template.set(EKK0401C170CBSMsg.SVC_CHRG_ENDYMD, pcWidePlanChrgDslDay);
		
		// サブオプションサービス契約解約マップ.サービス解約理由コード → サービス解約理由コード
		if(JKKStrConst.CD00576_00003.equals(idoDiv) || JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv)) 
		{
			template.set(EKK0401C170CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_HKTG);
		} 
		else 
		{
			template.set(EKK0401C170CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_NORMAL);
		}
		// サブオプションサービス契約解約マップ.サービス解約理由メモ → サービス解約理由メモ
		template.set(EKK0401C170CBSMsg.SVC_DLRE_MEMO, "");

		// サブオプションサービス契約解約マップ.違約金発生コード → 違約金発生コード
		template.set(EKK0401C170CBSMsg.PNLTY_HASSEI_CD, "0");
		
		// サブオプションサービス契約解約マップ.異動区分 → 異動区分
		template.set(EKK0401C170CBSMsg.IDO_DIV, idoDiv);

		// サブオプションサービス契約解約マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前）
		template.set(EKK0401C170CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約回復処理のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C200(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo,
			String mskmDtlNo, String idoDiv, String kaihkYmd, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C200CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C200CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C200);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C200CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C200CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約回復.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C200CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約回復.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C200CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);

		// サブオプションサービス契約回復.申込明細番号 → 申込明細番号
		template.set(EKK0401C200CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// サブオプションサービス契約回復.回復年月日 → 回復年月日
		template.set(EKK0401C200CBSMsg.KAIHK_YMD, kaihkYmd);

		// サブオプションサービス契約回復.異動区分 → 異動区分
		template.set(EKK0401C200CBSMsg.IDO_DIV, idoDiv);
		// サブオプションサービス契約回復.更新年月日時分秒（更新前） → 更新年月日時分秒
		template.set(EKK0401C200CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *照査後サブオプションサービス契約キャンセル取消のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C230(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo,
			String mskmDtlNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C230CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C230CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C230);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C230CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C230CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// 照査後サブオプションサービス契約キャンセル取消.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C230CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// 照査後サブオプションサービス契約キャンセル取消.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C230CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);

		// 照査後サブオプションサービス契約キャンセル取消.申込明細番号 → 申込明細番号
		template.set(EKK0401C230CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// 照査後サブオプションサービス契約キャンセル取消.異動区分 → 異動区分
		template.set(EKK0401C230CBSMsg.IDO_DIV, idoDiv);
		
		// 照査後サブオプションサービス契約キャンセル取消.更新年月日時分秒（更新前） → 更新年月日時分秒
		template.set(EKK0401C230CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約解約取消のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C240(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo,
			String mskmDtlNo, String idoDiv, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C240CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C240CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C240);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C240CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C240CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約解約取消.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C240CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約解約取消.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C240CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);

		// サブオプションサービス契約解約取消.申込明細番号 → 申込明細番号
		template.set(EKK0401C240CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// サブオプションサービス契約解約取消.異動区分 → 異動区分
		template.set(EKK0401C240CBSMsg.IDO_DIV, idoDiv);
		
		// サブオプションサービス契約解約取消.更新年月日時分秒（更新前） → 更新年月日時分秒
		template.set(EKK0401C240CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *休止中サブオプションサービス契約回復のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C210(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo,
			String mskmDtlNo, String idoDiv, String kaihkYmd, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C210CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C240CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C210);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C240CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C240CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// 休止中サブオプションサービス契約回復マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C210CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// 休止中サブオプションサービス契約回復マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C210CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);

		// 休止中サブオプションサービス契約回復マップ.申込明細番号 → 申込明細番号
		template.set(EKK0401C210CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// 休止中サブオプションサービス契約回復マップ.回復年月日 → 回復年月日
		template.set(EKK0401C210CBSMsg.KAIHK_YMD, kaihkYmd);

		// 休止中サブオプションサービス契約回復マップ.異動区分 → 異動区分
		template.set(EKK0401C210CBSMsg.IDO_DIV, idoDiv);

		// 休止中サブオプションサービス契約回復マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前）
		template.set(EKK0401C210CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *サブオプションサービス契約解約確定のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0401C180(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String opSvcKeiNo, String sbopSvcKeiNo, 
			String mskmDtlNo, String idoDiv, String pcWidePlanDslDay, String pcWidePlanChrgDslDay, String updDtmBf) 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));
		
		CAANMsg template = new CAANMsg(EKK0401C180CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0401C180CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C180);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK0401C180CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK0401C180CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// サブオプションサービス契約解約確定マップ.オプションサービス契約番号 → オプションサービス契約番号
		template.set(EKK0401C180CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);

		// サブオプションサービス契約解約確定マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号
		template.set(EKK0401C180CBSMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);
		
		// サブオプションサービス契約解約確定マップ.サービス終了年月日 → サービス終了年月日
		template.set(EKK0401C180CBSMsg.SVC_ENDYMD, pcWidePlanDslDay);

		// サブオプションサービス契約解約確定マップ.サービス課金終了年月日 → サービス課金終了年月日
		template.set(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, pcWidePlanChrgDslDay);
		
		// IT1-2018-0000190 ADD START
		// サブオプションサービス契約解約マップ.サービス解約理由コード → サービス解約理由コード
		if(JKKStrConst.CD00576_00003.equals(idoDiv) || JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv)) 
		{
			template.set(EKK0401C180CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_HKTG);
		} 
		else 
		{
			template.set(EKK0401C180CBSMsg.SVC_DLRE_CD,           SVC_DLRE_CD_NORMAL);
		}
		// IT1-2018-0000190 ADD END
		
		// 非課金判定結果マップ．課金フラグ → 解約時課金フラグ
		String chrgFlg = "1";
		template.set(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, chrgFlg);
		
		// サブオプションサービス契約解約確定マップ.サービス解約理由コード → サービス解約理由コード
		template.set(EKK0401C180CBSMsg.UPD_DTM_BF, updDtmBf);
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 共通項目のメッセージを作成します。
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
			Object[][] mappingData) 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));
		
		// サービスインターフェイスID
		String svcIf = (String)mappingData[0][1];
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		
		templates[0] = template;
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>サービスIFの結果を取得する<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param rsltMap サービスIFリスト
	 * @return templateList 結果が格納されたリスト
	 * @throws Throwable 
	 */
	private ArrayList<CAANMsg> getRsltList(Map<?, ?> rsltMap) 
	{
		
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])rsltMap.get(JCMConstants.TEMPLATE_LIST_KEY);
		ArrayList<CAANMsg> resultList = new ArrayList<CAANMsg>(Arrays.asList(templates));
		return resultList;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		return JPCUtilCommon.Rtrim(str);
	}
}
