/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKAddSvcKeiMobileCC
*   ソースファイル名：JKKAddSvcKeiMobileCC.java
*   作成者          ：富士通
*   日付            ：2011年08月24日
*＜機能概要＞
*   eoモバイル登録チェックを行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/08/24   FJ）眞方    新規作成
*   v4.00.00    2012/08/07   FJ) 上田    【ANK-0398-00-00】住所管理に伴う「例外登録」の管理追加対応
*   v4.01.00    2012/10/31   FJ）多田    【IT1-2012-0001640】住所手動入力対応
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.KKSV0366_KKSV0366OP_KKSV036601CC;
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.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.ejb.cbs.cbsmsg.EKK0121C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0121D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0781A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0781A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0081B011CBSMsg;


/**
 * eoモバイル登録チェックを行う。
 * <BR>
 * @author 富士通
 */
public class JKKAddSvcKeiMobileCC extends AbstractCommonComponent implements ICommonComponent
{
	/** リターンメッセージ */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージ */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	
	/**
	 * 入力チェックメイン処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite checkMain(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		// エラーフラグ(実行判定用)
		String errFlgCc = "0";

		String opeDate = null;
		String funcCd = null;
		String svcCd = null;
		String prcGrpCd = null;
		String pplanCd = null;
		String pcrsCd = null;
		String kktkSvcCd = null;
		String kktkPplanCd = null;
		String kktkPcrsCd = null;
		String kiji = null;

		// 下りユーザデータ
		Map resUserMap = new HashMap();

		//***************************************************
		// 入力パラメータの取得
		//***************************************************
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		if (ccParam == null)
		{
			return param;
		}
		opeDate = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.OPE_DATE);
		funcCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.FUNC_CODE);
		pcrsCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_PCRS_CD);
		kktkPcrsCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KKTK_PCRS_CD);
		kiji = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIJIRAN);

		Map<?, ?> result = null;

		// コースが選択されている時は、料金グループ、サービスコース、料金プランを取得
		if ((pcrsCd != null) && (!"".equals(pcrsCd)))
		{
			//***************************************************
			// 料金グループコード取得
			//***************************************************
			result = callGetPrcGrpCdSc(handle, param, opeDate, pcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				prcGrpCd = JKKBpCommon.getResultString(result, EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST + "[0]." + EKK0791A010CBSMsg1List.PRC_GRP_CD);
				if ((prcGrpCd == null) || ("".equals(prcGrpCd)))
				{
					// 料金コースが存在しない時
					resUserMap.put(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_PCRS_NOT_EXIST , "1");
				}
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}

			//***************************************************
			// サービスコード取得
			//***************************************************
			if ("0".equals(errFlgCc))
			{
				result = callGetSvcCdSc(handle, param, opeDate, prcGrpCd);
				if (JKKBpCommon.isSuccess(result))
				{
					svcCd = JKKBpCommon.getResultString(result, EKK0781A010CBSMsg.EKK0781A010CBSMSG1LIST + "[0]." + EKK0781A010CBSMsg1List.SVC_CD);
				}
				else
				{
					errFlgCc = "1";
					JKKBpCommon.setResultCtrlData(param, result);
				}
			}

			//***************************************************
			// 料金プランコード取得
			//***************************************************
			result = callGetPrcPlanCdSc(handle, param, opeDate, pcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				pplanCd = JKKBpCommon.getResultString(result, EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST + "[0]." + EKK0591B003CBSMsg1List.PPLAN_CD);
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
		}

		// 機器が選択されている時は、機器のサービスコース、プランコードを取得
		if ((kktkPcrsCd != null) && (!"".equals(kktkPcrsCd)))
		{

			//***************************************************
			// 機器提供サービスコード取得
			//***************************************************
			result = callGetPrcGrpCdSc(handle, param, opeDate, kktkPcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				kktkSvcCd = JKKBpCommon.getResultString(result, EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST + "[0]." + EKK0791A010CBSMsg1List.KKTK_SVC_CD);
				if ((kktkSvcCd == null) || ("".equals(kktkSvcCd)))
				{
					// 機器が存在しない時
					resUserMap.put(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KKTK_PCRS_NOT_EXIST , "1");
				}
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}

			//***************************************************
			// 機器提供_料金プランコード取得
			//***************************************************
			result = callGetPrcPlanCdSc(handle, param, opeDate, kktkPcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				kktkPplanCd = JKKBpCommon.getResultString(result, EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST + "[0]." + EKK0591B003CBSMsg1List.PPLAN_CD);
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
			
			//***************************************************
			// 機器提供サービス契約登録チェック
			//***************************************************
			result = callAddKktkSvcKeiSc(handle, param, funcCd, ccName, kktkSvcCd, kktkPplanCd, kktkPcrsCd);
			if (JKKBpCommon.isError(result))
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
		}

		//***************************************************
		// サービス契約＜eoモバイル＞登録チェック
		//***************************************************
		result = callAddSvcKeiMobileSc(handle, param, funcCd, svcCd, prcGrpCd, pplanCd, pcrsCd, kiji);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		//***************************************************
		// 下りユーザデータマッピング
		//***************************************************
		JKKBpCommon.setResultUserData(param, ccName, resUserMap);
		if ("0".equals(errFlgCc))
		{
			JKKBpCommon.setResultCtrlData(param, result, ccName , 0, 0);
		}
		else
		{
			String errMsg = "eoモバイル登録チェックCCで例外が発生しました";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * 入力チェックメイン処理(照査前登録用)
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite checkMainShosa(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		// エラーフラグ(実行判定用)
		String errFlgCc = "0";

		String svcCd = null;
		String prcGrpCd = null;
		String pplanCd = null;
		String kktkSvcCd = null;
		String kktkPplanCd = null;

		// 下りユーザデータ
		Map resUserMap = new HashMap();

		//**********************************************************************
		// 入力パラメータの取得
		//**********************************************************************
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		if (ccParam == null)
		{
			return param;
		}
		String funcCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.FUNC_CODE);
		String opeDate = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.OPE_DATE);
		String svcKeiNo = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SVC_KEI_NO);
		String pcrsCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_PCRS_CD);
		String kktkPcrsCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KKTK_PCRS_CD);
		String kikiSohusPcd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_PCD);
		String expInput = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_EXCEPTION_INPUT);
		String kikiSohusAdCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AD_CD);
		String skekkaCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_CD);
		String skekkaDtlCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_DTL_CD);
		String skekkaHokiCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_HOKI_CD);
		String skekkaSendCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_SEND_CD);
		String kiji = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIJIRAN);

		Map<?, ?> result = null;

		// コースが選択されている時は、料金グループ、サービスコース、料金プランを取得
		if ((pcrsCd != null) && (!"".equals(pcrsCd)))
		{

			//**********************************************************************
			// 料金グループコード取得
			//**********************************************************************
			result = callGetPrcGrpCdSc(handle, param, opeDate, pcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				prcGrpCd = JKKBpCommon.getResultString(result, EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST + "[0]." + EKK0791A010CBSMsg1List.PRC_GRP_CD);
				if ((prcGrpCd == null) || ("".equals(prcGrpCd)))
				{
					// 料金コースが存在しない時
					resUserMap.put(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_PCRS_NOT_EXIST , "1");
				}
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}

			//**********************************************************************
			// サービスコード取得
			//**********************************************************************
			if ("0".equals(errFlgCc))
			{
				result = callGetSvcCdSc(handle, param, opeDate, prcGrpCd);
				if (JKKBpCommon.isSuccess(result))
				{
					svcCd = JKKBpCommon.getResultString(result, EKK0781A010CBSMsg.EKK0781A010CBSMSG1LIST + "[0]." + EKK0781A010CBSMsg1List.SVC_CD);
				}
				else
				{
					errFlgCc = "1";
					JKKBpCommon.setResultCtrlData(param, result);
				}
			}

			//**********************************************************************
			// 料金プランコード取得
			//**********************************************************************
			result = callGetPrcPlanCdSc(handle, param, opeDate, pcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				pplanCd = JKKBpCommon.getResultString(result, EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST + "[0]." + EKK0591B003CBSMsg1List.PPLAN_CD);
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
		}

		// 機器が選択されている時は、機器のサービスコース、プランコードを取得
		if ((kktkPcrsCd != null) && (!"".equals(kktkPcrsCd)))
		{

			//**********************************************************************
			// 機器提供サービスコード取得
			//**********************************************************************
			result = callGetPrcGrpCdSc(handle, param, opeDate, kktkPcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				kktkSvcCd = JKKBpCommon.getResultString(result, EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST + "[0]." + EKK0791A010CBSMsg1List.KKTK_SVC_CD);
				if ((kktkSvcCd == null) || ("".equals(kktkSvcCd)))
				{
					// 機器が存在しない時
					resUserMap.put(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KKTK_PCRS_NOT_EXIST , "1");
				}
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}

			//**********************************************************************
			// 機器提供_料金プランコード取得
			//**********************************************************************
			result = callGetPrcPlanCdSc(handle, param, opeDate, kktkPcrsCd);
			if (JKKBpCommon.isSuccess(result))
			{
				kktkPplanCd = JKKBpCommon.getResultString(result, EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST + "[0]." + EKK0591B003CBSMsg1List.PPLAN_CD);
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
			
			//*************************************************************************************************
			// 機器提供サービス契約登録チェック
			// ※機器送付先の住所、および 機器提供サービスコード、料金プランコード、料金コースコードの入力チェック
			//*************************************************************************************************
			result = callAddKktkSvcKeiSc(handle, param, funcCd, ccName, kktkSvcCd, kktkPplanCd, kktkPcrsCd);
			if (JKKBpCommon.isError(result))
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
		}

		//**********************************************************************
		// サービス契約＜eoモバイル＞登録チェック
		// ※サービスコード、料金グループ、料金プラン、料金コースの入力チェック
		//**********************************************************************
		result = callAddSvcKeiMobileSc(handle, param, funcCd, svcCd, prcGrpCd, pplanCd, pcrsCd, kiji);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		//**********************************************************************
		// サービス契約<eoモバイル>情報変更チェック
		// ※審査結果コード、審査結果コード(詳細)、審査結果補記、審査結果送信コードの入力チェック
		//**********************************************************************
		result = callUpdSvcKeiMobileSc(handle, param, funcCd, svcKeiNo, skekkaCd, skekkaDtlCd, skekkaHokiCd, skekkaSendCd);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}
		
		//**********************************************************************
		// 下りユーザデータマッピング
		//**********************************************************************
		JKKBpCommon.setResultUserData(param, ccName, resUserMap);
		if ("0".equals(errFlgCc))
		{
			JKKBpCommon.setResultCtrlData(param, result, ccName , 0, 0);
		}
		else
		{
			String errMsg = "サービス契約更新(eoモバイル)CCで例外が発生しました";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * 料金コース一意照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @param pcrsCd 料金コースコード
	 * @return 実行結果
	 * @throws Throwable
	 */
	protected Map<?, ?> callGetPrcGrpCdSc(SessionHandle handle, IRequestParameterReadWrite param, String opeDate, String pcrsCd) throws Throwable
	{
		/***************************************************/
		/** 料金コース一意照会SCへの上りマッピング         */
		/***************************************************/
		String funcCd = "2";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0791A010CBSMsg.KEY_PCRS_CD, pcrsCd);
		inMap.put(EKK0791A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0791A010", EKK0791A010CBSMsg.class , inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金コース一意照会SC呼び出し開始（ 料金コースコード：" + ((pcrsCd != null) ? pcrsCd : "") + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金コース一意照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 料金プラン一覧照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @param pcrsCd 料金コースコード
	 * @return 実行結果
	 * @throws Throwable
	 */
	protected Map<?, ?> callGetPrcPlanCdSc(SessionHandle handle, IRequestParameterReadWrite param, String opeDate, String pcrsCd) throws Throwable
	{
		/***************************************************/
		/** 料金プラン一覧照会SCへの上りマッピング         */
		/***************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0591B003CBSMsg.KEY_PCRS_CD, pcrsCd);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0591B003", EKK0591B003CBSMsg.class , inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン一覧照会SC呼び出し開始（ 料金コースコード：" + ((pcrsCd != null) ? pcrsCd : "") + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン一覧照会SC呼び出し完了" + result);

		return result;
	}
	

	/**
	 * 料金グループ一意照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @param prcGrpCd 料金コースコード
	 * @return 実行結果
	 * @throws Throwable
	 */
	protected Map<?, ?> callGetSvcCdSc(SessionHandle handle, IRequestParameterReadWrite param, String opeDate, String prcGrpCd) throws Throwable
	{
		/***************************************************/
		/** 料金グループ一意照会SCへの上りマッピング       */
		/***************************************************/
		String funcCd = "2";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0781A010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
		inMap.put(EKK0781A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);

		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0781A010", EKK0781A010CBSMsg.class , inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(),
				"料金グループ一意照会SC呼び出し開始(料金グループコード：" + ((prcGrpCd != null) ? prcGrpCd : "") + ")");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金グループ一意照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * サービス契約<eoモバイル>登録SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param ccName CC名
	 * @param svcCd サービスコード
	 * @param prcGrpCd 料金グループコード
	 * @param pplanCd 料金プランコード
	 * @param pcrsCd 料金コースコード
	 * @param kiji 記事欄
	 * @return 実行結果
	 * @throws Throwable
	 */
	protected Map<?, ?> callAddSvcKeiMobileSc(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String svcCd, String prcGrpCd,
			String pplanCd, String pcrsCd, String kiji) throws Throwable
	{
		/*****************************************************/
		/** サービス契約<eoモバイル>登録SCへの上りマッピング */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0121D010CBSMsg.SVC_CD, svcCd);
		inMap.put(EKK0121D010CBSMsg.PPLAN_CD, pplanCd);
		inMap.put(EKK0121D010CBSMsg.PCRS_CD, pcrsCd);
		inMap.put(EKK0121D010CBSMsg.PRC_GRP_CD, prcGrpCd);
		inMap.put(EKK0121D010CBSMsg.WORK_RRK_BIKO, kiji);
		inMap.put(EKK0121D010CBSMsg.RULE0059_AUTO_APLY, "1");
		HashMap<String, Object> paramMap = null;
		if ("1".equals(funcCd))
		{
			paramMap = JKKBpCommon.createScParam(param, "EKK0121D010", EKK0121D010CBSMsg.class, inMap, funcCd);
		}
		else
		{
			paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0121D010", EKK0121D010CBSMsg.class, inMap, funcCd);
		}

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約<eoモバイル>登録SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約<eoモバイル>登録SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 共通住所一覧照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @param adCd 住所コード
	 * @param pcd 郵便番号
	 * @return 実行結果
	 * @throws Throwable
	 */
	protected Map<?, ?> callAdSearchSc(SessionHandle handle, IRequestParameterReadWrite param, String opeDate, String adCd, String pcd)
			throws Throwable
	{

		/*****************************************************/
		/** 共通住所一覧照会SCへの上りマッピング             */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EZM0081B011CBSMsg.KEY_AD_CD, adCd);
		inMap.put(EZM0081B011CBSMsg.KEY_PCD, pcd);
		inMap.put(EZM0081B011CBSMsg.KEY_YMD, opeDate);
		inMap.put(EZM0081B011CBSMsg.MAX_SEARCH_NUM, "10");
		inMap.put(EZM0081B011CBSMsg.DISPLAY_NUM, "10");
		inMap.put(EZM0081B011CBSMsg.DISPLAY_PAGE_NUM, "10");

		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EZM0081B011", EZM0081B011CBSMsg.class, inMap, "1");

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "共通住所一覧照会SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "共通住所一覧照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 機器提供サービス契約登録SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param ccName CC名
	 * @param kktkSvcCd 機器提供_サービスコード
	 * @param kktkPplanCd 機器提供_料金プランコード
	 * @param kktkPcrsCd 機器提供_料金コースコード
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callAddKktkSvcKeiSc(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String ccName, String kktkSvcCd,
			String kktkPplanCd, String kktkPcrsCd) throws Throwable
	{

		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);

		/***************************************************/
		/** 機器提供サービス契約SCへの上りマッピング       */
		/***************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AD_CD));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_PCD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_PCD));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_STATE_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_STATE_NM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_CITY_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_CITY_NM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_OAZTSU_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_OAZTSU_NM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_AZCHO_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AZCHO_NM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_BNCHIGO, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_BNCHIGO));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_ADRTTM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_ADRTTM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_ADRRM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_ADRRM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_NM));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_KANA, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_KANA));
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_TELNO, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_TELNO));
		inMap.put(EKK0341D010CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SHS_AD_MAN_INPUT_FLG));
		inMap.put(EKK0341D010CBSMsg.KKTK_SVC_CD, kktkSvcCd);
		inMap.put(EKK0341D010CBSMsg.PPLAN_CD, kktkPplanCd);
		inMap.put(EKK0341D010CBSMsg.PCRS_CD, kktkPcrsCd);
		inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CHK_LV, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AD_CHK_LV));
		
		HashMap<String, Object> paramMap = null;
		if ("1".equals(funcCd))
		{
			paramMap = JKKBpCommon.createScParam(param, "EKK0341D010", EKK0341D010CBSMsg.class, inMap, funcCd);
		}
		else
		{
			paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0341D010", EKK0341D010CBSMsg.class, inMap, funcCd);
		}

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "機器提供サービス契約登録SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "機器提供サービス契約登録SC呼び出し完了" + result);

		return result;
	}

	/**
	 * サービス契約<eoモバイル>情報変更SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param svcKeiNo サービス契約番号
	 * @param skekkaCd 審査結果コード
	 * @param skekkaDtlCd 審査結果詳細コード
	 * @param skekkaHokiCd 審査結果補記コード
	 * @param skekkaSendCd 審査結果送信コード
	 * @return 実行結果
	 * @throws Throwable
	 */
	protected Map<?, ?> callUpdSvcKeiMobileSc(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String svcKeiNo, String skekkaCd,
			String skekkaDtlCd, String skekkaHokiCd, String skekkaSendCd) throws Throwable
	{
		/*****************************************************/
		/** サービス契約<eoモバイル>情報変更SCへの上りマッピング */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0121C040CBSMsg.SVC_KEI_NO, svcKeiNo);
		inMap.put(EKK0121C040CBSMsg.SKEKKA_CD, skekkaCd);
		inMap.put(EKK0121C040CBSMsg.SKEKKA_DTL_CD, skekkaDtlCd);
		inMap.put(EKK0121C040CBSMsg.SKEKKA_HOKI_CD, skekkaHokiCd);
		inMap.put(EKK0121C040CBSMsg.SKEKKA_SEND_CD, skekkaSendCd);
		inMap.put(EKK0121C040CBSMsg.AUTO_SHOSA_TRAN_STAT_CD, "0");
		HashMap<String, Object> paramMap = null;
		if ("1".equals(funcCd))
		{
			paramMap = JKKBpCommon.createScParam(param, "EKK0121C040", EKK0121C040CBSMsg.class, inMap, funcCd);
		}
		else
		{
			paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0121C040", EKK0121C040CBSMsg.class, inMap, funcCd);
		}

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約<eoモバイル>情報変更SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約<eoモバイル>情報変更SC呼び出し完了" + result);

		return result;
	}

	/**
	 * ＢＰチェック用の入力パラメータを作成する。
	 * <br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return ＢＰチェック用パラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(fixedText);

		// パラメータが取得できない時はBPチェックをスキップ
		if (null == ccParam)
		{
			return JKKBpCommon.createBpNotCheckParam();
		}
		
		// ----------------------------------------------------------------------------------------------------------------
		// ＢＰチェック用の入力パラメータ生成
		// ----------------------------------------------------------------------------------------------------------------
		ArrayList<CAANMsg> msgList = new ArrayList<CAANMsg>();

		String kktkPcrsCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KKTK_PCRS_CD);

		// 機器が選択されている時
		if (null != kktkPcrsCd && !"".equals(kktkPcrsCd)) 
		{
			// 機器提供サービス契約登録SC
			Map<Object, Object> inMap = new HashMap<Object, Object>();
			// 機器送付先住所コード
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AD_CD));
			// 機器送付先郵便番号
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_PCD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_PCD));
			// 機器送付先都道府県名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_STATE_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_STATE_NM));
			// 機器送付先市区町村名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_CITY_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_CITY_NM));
			// 機器送付先大字通称名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_OAZTSU_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_OAZTSU_NM));
			// 機器送付先字丁目名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_AZCHO_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AZCHO_NM));
			// 機器送付先番地号
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_BNCHIGO, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_BNCHIGO));
			// 機器送付先住所補記・建物名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_ADRTTM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_ADRTTM));
			// 機器送付先住所補記・部屋番号
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_ADRRM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_ADRRM));
			// 機器送付先名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_NM, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_NM));
			// 機器送付先カナ名
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_KANA, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_KANA));
			// 機器送付先電話番号
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_TELNO, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_TELNO));
			// 機器送付先住所手動入力フラグ
			inMap.put(EKK0341D010CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SHS_AD_MAN_INPUT_FLG));
			// 機器提供サービスコード
			inMap.put(EKK0341D010CBSMsg.KKTK_SVC_CD, "");
			// 料金プランコード
			inMap.put(EKK0341D010CBSMsg.PPLAN_CD, "");
			// 料金コースコード
			inMap.put(EKK0341D010CBSMsg.PCRS_CD, kktkPcrsCd);
			// 機器送付先住所チェックレベル
			inMap.put(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CHK_LV, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIKI_SOHUS_AD_CHK_LV));

			HashMap<String, Object> kikiSvcKeiMap = JKKBpCommon.createScParamForSearch(param, "EKK0341D010", EKK0341D010CBSMsg.class, inMap, "2");
			msgList.add(((CAANMsg[])kikiSvcKeiMap.get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
		}

		// サービス契約<eoモバイル>登録SC
		Map<Object, Object> mblInMap = new HashMap<Object, Object>();
		// サービスコード
		mblInMap.put(EKK0121D010CBSMsg.SVC_CD, "");
		// 料金プランコード
		mblInMap.put(EKK0121D010CBSMsg.PPLAN_CD, "");
		// 料金コースコード
		mblInMap.put(EKK0121D010CBSMsg.PCRS_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_PCRS_CD));
		// 料金グループコード
		mblInMap.put(EKK0121D010CBSMsg.PRC_GRP_CD, "");
		// 業務連絡備考
		mblInMap.put(EKK0121D010CBSMsg.WORK_RRK_BIKO, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KIJIRAN));
		// 事務手数料自動適用要否（チェックでは"1"を設定しているが、"1"だと相関ルールチェックが行われ、エラーになるので"0"を設定）
		mblInMap.put(EKK0121D010CBSMsg.RULE0059_AUTO_APLY, "0");

		HashMap<String, Object> svcKeiMblInMap = JKKBpCommon.createScParamForSearch(param, "EKK0121D010", EKK0121D010CBSMsg.class, mblInMap, "2");
		msgList.add(((CAANMsg[])svcKeiMblInMap.get(JCMConstants.TEMPLATE_LIST_KEY))[0]);

		// 当CC実行元画面が照査前登録（eoモバイル）の場合
		if ("KKSV036601CC".equals(fixedText))
		{
			// サービス契約<eoモバイル>情報変更SC
			Map<Object, Object> updMap = new HashMap<Object, Object>();
			updMap.put(EKK0121C040CBSMsg.SVC_KEI_NO, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SVC_KEI_NO));			// サービス契約番号
			updMap.put(EKK0121C040CBSMsg.SKEKKA_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_CD));			// 審査結果コード
			updMap.put(EKK0121C040CBSMsg.SKEKKA_DTL_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_DTL_CD));	// 審査結果詳細コード
			updMap.put(EKK0121C040CBSMsg.SKEKKA_HOKI_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_HOKI_CD));	// 審査結果補記コード
			updMap.put(EKK0121C040CBSMsg.SKEKKA_SEND_CD, ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_SKEKKA_SEND_CD));	// 審査結果送信コード
			updMap.put(EKK0121C040CBSMsg.AUTO_SHOSA_TRAN_STAT_CD, "0");															// 自動照査処理状態コード

			HashMap<String, Object> svcKeiMblChangeMap = JKKBpCommon.createScParamForSearch(param, "EKK0121C040", EKK0121C040CBSMsg.class, updMap, "2");
			msgList.add(((CAANMsg[])svcKeiMblChangeMap.get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
		}

		// パラメータを纏める
		int msgCnt = msgList.size();
		
		CAANMsg[] templates = new CAANMsg[msgCnt];
		
		for (int i = 0; i < msgCnt; i++)
		{
			templates[i] = msgList.get(i);
		}
		
		HashMap<String, Object> bpCheckParam = setSCInputCommonData(param, new HashMap<String, Object>());
		
		bpCheckParam.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return bpCheckParam;
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(
			IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode, String fixedText) throws Throwable
	{	
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(fixedText);
		int templateCount = 0;

		// パラメータが取得できない時はBPチェックをスキップ
		if (null == ccParam)
		{
			return JKKBpCommon.editErrorInfo(param, caanMsgs, returnCode);
		}
		
		String kktkPcrsCd = (String)ccParam.get(KKSV0366_KKSV0366OP_KKSV036601CC.MOBILE_KKTK_PCRS_CD);

		// 機器が選択されている時
		if (null != kktkPcrsCd && !"".equals(kktkPcrsCd)) 
		{
			// 機器提供サービス契約登録SC
			editErrInfoEKK0341D010(param, caanMsgs[templateCount++], returnCode, fixedText);
		}
		
		// サービス契約<eoモバイル>登録SC
		editErrInfoEKK0121D010(param, caanMsgs[templateCount++], returnCode, fixedText);
		
		// 当CC実行元画面が照査前登録（eoモバイル）の場合
		if ("KKSV036601CC".equals(fixedText))
		{
			// サービス契約<eoモバイル>情報変更SC
			editErrInfoEKK0121C040(param, caanMsgs[templateCount++], returnCode, fixedText);
		}
		
		return param;
	}
	
	/**
	 * コントロールマップエラー情報格納処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param itemplateStatus ステータス
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite setControlMapErrInfo(IRequestParameterReadWrite param, int itemplateStatus, int returnCode)
		throws RequestParameterException
	{
		int templateStatus = itemplateStatus;

		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)
		{
			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);
		}
		return param;
	}
	
	/**
	 * SCインプット共通データ設定処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param paramMap パラメータマップ
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setSCInputCommonData(IRequestParameterReadWrite param, HashMap<String, Object> paramMap)
		throws RequestParameterException
	{
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		return paramMap;
	}

	/**
	 * 機器提供サービス契約のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template サービスインターフェイス用のパラメータ
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0341D010(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
		throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0341D010CBSMsg.STATUS), returnCode);
		
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機器送付先住所コード
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CD_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_ad_cd_err"))
			{
				inMap.put("kiki_sohus_ad_cd_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CD_ERR));
			}
		}

		// 機器送付先郵便番号
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_PCD_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_pcd_err"))
			{
				inMap.put("kiki_sohus_pcd_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_PCD_ERR));
			}
		}

		//  機器送付先都道府県名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_STATE_NM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_state_nm_err"))
			{
				inMap.put("kiki_sohus_state_nm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_STATE_NM_ERR));
			}
		}

		// 機器送付先市区町村名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_CITY_NM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_city_nm_err"))
			{
				inMap.put("kiki_sohus_city_nm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_CITY_NM_ERR));
			}
		}

		// 機器送付先大字通称名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_OAZTSU_NM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_oaztsu_nm_err"))
			{
				inMap.put("kiki_sohus_oaztsu_nm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_OAZTSU_NM_ERR));
			}
		}

		// 機器送付先字丁目名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_AZCHO_NM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_azcho_nm_err"))
			{
				inMap.put("kiki_sohus_azcho_nm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_AZCHO_NM_ERR));
			}
		}

		// 機器送付先番地号
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_BNCHIGO_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_bnchigo_err"))
			{
				inMap.put("kiki_sohus_bnchigo_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_BNCHIGO_ERR));
			}
		}

		// 機器送付先住所補記・建物名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_ADRTTM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_adrttm_err"))
			{
				inMap.put("kiki_sohus_adrttm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_ADRTTM_ERR));
			}
		}

		// 機器送付先住所補記・部屋番号
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_ADRRM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_adrrm_err"))
			{
				inMap.put("kiki_sohus_adrrm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_ADRRM_ERR));
			}
		}

		// 機器送付先名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_NM_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_nm_err"))
			{
				inMap.put("kiki_sohus_nm_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_NM_ERR));
			}
		}

		// 機器送付先カナ名
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_KANA_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_kana_err"))
			{
				inMap.put("kiki_sohus_kana_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_KANA_ERR));
			}
		}

		// 機器送付先電話番号
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_TELNO_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_telno_err"))
			{
				inMap.put("kiki_sohus_telno_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_TELNO_ERR));
			}
		}

		// 機器送付先住所手動入力フラグ
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG_ERR))
		{
			if (!inMap.containsKey("kiki_shs_ad_man_input_flg_err"))
			{
				inMap.put("kiki_shs_ad_man_input_flg_err", template.getString(EKK0341D010CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG_ERR));
			}
		}

		// 機器提供サービスコード
		if (!template.isNull(EKK0341D010CBSMsg.KKTK_SVC_CD_ERR))
		{
			if (!inMap.containsKey("kktk_svc_cd_err"))
			{
				inMap.put("kktk_svc_cd_err", template.getString(EKK0341D010CBSMsg.KKTK_SVC_CD_ERR));
			}
		}

		// 料金プランコード
		if (!template.isNull(EKK0341D010CBSMsg.PPLAN_CD_ERR))
		{
			if (!inMap.containsKey("pplan_cd_err"))
			{
				inMap.put("pplan_cd_err", template.getString(EKK0341D010CBSMsg.PPLAN_CD_ERR));
			}
		}

		// 料金コースコード
		if (!template.isNull(EKK0341D010CBSMsg.PCRS_CD_ERR))
		{
			if (!inMap.containsKey("pcrs_cd_err"))
			{
				inMap.put("pcrs_cd_err", template.getString(EKK0341D010CBSMsg.PCRS_CD_ERR));
			}
		}

		// 機器送付先住所チェックレベルエラー
		if (!template.isNull(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CHK_LV_ERR))
		{
			if (!inMap.containsKey("kiki_sohus_ad_chk_lv_err"))
			{
				inMap.put("kiki_sohus_ad_chk_lv_err", template.getString(EKK0341D010CBSMsg.KIKI_SOHUS_AD_CHK_LV_ERR));
			}
		}

		return param;
	}
	
	/**
	 * サービス契約<eoモバイル>登録のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template サービスインターフェイス用のパラメータ
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0121D010(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
		throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0121D010CBSMsg.STATUS), returnCode);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// サービスコード
		if (!template.isNull(EKK0121D010CBSMsg.SVC_CD_ERR))
		{
			if (!inMap.containsKey("svc_cd_err"))
			{
				inMap.put("svc_cd_err", template.getString(EKK0121D010CBSMsg.SVC_CD_ERR));
			}
		}

		// 料金プランコード
		if (!template.isNull(EKK0121D010CBSMsg.PPLAN_CD_ERR))
		{
			if (!inMap.containsKey("pplan_cd_err"))
			{
				inMap.put("pplan_cd_err", template.getString(EKK0121D010CBSMsg.PPLAN_CD_ERR));
			}
		}

		// 料金コースコード
		if (!template.isNull(EKK0121D010CBSMsg.PCRS_CD_ERR))
		{
			if (!inMap.containsKey("pcrs_cd_err"))
			{
				inMap.put("pcrs_cd_err", template.getString(EKK0121D010CBSMsg.PCRS_CD_ERR));
			}
		}

		// 料金グループコード
		if (!template.isNull(EKK0121D010CBSMsg.PRC_GRP_CD_ERR))
		{
			if (!inMap.containsKey("prc_grp_cd_err"))
			{
				inMap.put("prc_grp_cd_err", template.getString(EKK0121D010CBSMsg.PRC_GRP_CD_ERR));
			}
		}

		// 業務連絡備考
		if (!template.isNull(EKK0121D010CBSMsg.WORK_RRK_BIKO_ERR))
		{
			if (!inMap.containsKey("work_rrk_biko_err"))
			{
				inMap.put("work_rrk_biko_err", template.getString(EKK0121D010CBSMsg.WORK_RRK_BIKO_ERR));
			}
		}

		// 事務手数料自動適用要否
		if (!template.isNull(EKK0121D010CBSMsg.RULE0059_AUTO_APLY_ERR))
		{
			if (!inMap.containsKey("rule0059_auto_aply_err"))
			{
				inMap.put("rule0059_auto_aply_err", template.getString(EKK0121D010CBSMsg.RULE0059_AUTO_APLY_ERR));
			}
		}

		return param;
	}
	
	/**
	 * サービス契約<eoモバイル>情報変更のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template サービスインターフェイス用のパラメータ
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0121C040(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
		throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0121C040CBSMsg.STATUS), returnCode);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// サービス契約番号
		if (!template.isNull(EKK0121C040CBSMsg.SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_no_err"))
			{
				inMap.put("svc_kei_no_err", template.getString(EKK0121C040CBSMsg.SVC_KEI_NO_ERR));
			}
		}
		
		// 審査結果コード
		if (!template.isNull(EKK0121C040CBSMsg.SKEKKA_CD_ERR))
		{
			if (!inMap.containsKey("skekka_cd_err"))
			{
				inMap.put("skekka_cd_err", template.getString(EKK0121C040CBSMsg.SKEKKA_CD_ERR));
			}
		}
		
		// 審査結果詳細コード
		if (!template.isNull(EKK0121C040CBSMsg.SKEKKA_DTL_CD_ERR))
		{
			if (!inMap.containsKey("skekka_dtl_cd_err"))
			{
				inMap.put("skekka_dtl_cd_err", template.getString(EKK0121C040CBSMsg.SKEKKA_DTL_CD_ERR));
			}
		}
		
		// 審査結果補記コード
		if (!template.isNull(EKK0121C040CBSMsg.SKEKKA_HOKI_CD_ERR))
		{
			if (!inMap.containsKey("skekka_hoki_cd_err"))
			{
				inMap.put("skekka_hoki_cd_err", template.getString(EKK0121C040CBSMsg.SKEKKA_HOKI_CD_ERR));
			}
		}
		
		// 審査結果送信コード
		if (!template.isNull(EKK0121C040CBSMsg.SKEKKA_SEND_CD_ERR))
		{
			if (!inMap.containsKey("skekka_send_cd_err"))
			{
				inMap.put("skekka_send_cd_err", template.getString(EKK0121C040CBSMsg.SKEKKA_SEND_CD_ERR));
			}
		}
		
		// 自動照査処理状態コード
		if (!template.isNull(EKK0121C040CBSMsg.AUTO_SHOSA_TRAN_STAT_CD_ERR))
		{
			if (!inMap.containsKey("auto_shosa_tran_stat_cd_err"))
			{
				inMap.put("auto_shosa_tran_stat_cd_err", template.getString(EKK0121C040CBSMsg.AUTO_SHOSA_TRAN_STAT_CD_ERR));
			}
		}
		
		return param;
	}
}
