/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKGetMskmNewInitCC
*   ソースファイル名：JKKGetMskmNewInitCC.java
*   作成者          ：富士通
*   日付            ：2011年10月03日
*＜機能概要＞
*   申込新規初期表示照会部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/03   FJ）関      新規作成
*   v4.00.00    2012/09/14   FJ) 谷口    【ANK-0546-00-00】宅内ＰＦ
*   v4.01.00    2012/11/21   FJ) 谷口    【IT1-2012-0002046】宅内ＰＦ（受付担当者欄追加）
*   v5.00.00    2013/02/07   FJ) 中山    【ST2-2013-0000666】DB照会データがNULLの場合の空文字列変換
*   v5.01.00    2013/03/12   FJ) 北浦    【IT1-2012-0000427】単価マスタ取得対応
*  v36.00.00    2018/01/26   FJ) 三原    【ANK-3296-00-00】標準工事費分割請求
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
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.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.ejb.cbs.cbsmsg.EDK0451A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0531B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0531B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0601B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0601B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0611A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0611A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2521A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2521A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0051B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0051B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

/**
 * 申込新規初期表示の照会を行います。
 * <br>
 * @author 富士通
 */
public class JKKGetMskmNewInitCC extends AbstractCommonComponent implements ICommonComponent
{

	/**
	 * 申込新規初期表示照会処理
	 * <br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getMskmNewInit(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		// エラーフラグ(実行判定用)
		String errFlgCc = "0";

		// 作業用変数の初期化
		Map<?, ?> result = null;

		// データ返却用のマップオブジェクト
		Map userMap = new HashMap();

		// CCへの入力パラメータ取得
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);

		// IT障害管理 IT1-2012-0000058対応 MapがNULLなら処理終了。
		if (ccParam == null)
		{
			return param;
		}

		// 運用日付
		String opeDate = (String)ccParam.get("ope_date");

		/****************************************************/
		/** クレジットカード会社一覧照会SC呼出              */
		/****************************************************/
		result = callGetCrecardCompListScAndSet(handle, param, userMap, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		/****************************************************/
		/** 通信事業者一覧照会SC呼出                        */
		/****************************************************/
		result = callGetTsjgsListScAndSet(handle, param, userMap, ccName, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		/****************************************************/
		/** コード名称データ取得(複数一括)                  */
		/****************************************************/
		Map<String, Object> utilRes = JKKCodeMeishoKanriUtil.getDataList(handle, param, opeDate, (List)ccParam.get("key_cd_sbt_list"));
		userMap.put("res_cd_sbt_map", utilRes);

		/****************************************************/
		/** 業務パラメータ取得SC呼出                        */
		/****************************************************/
		if (!callGetWorkParamListScAndSet(handle, param, userMap, ccName, opeDate))
		{
			errFlgCc = "1";
		}

		/****************************************************/
		/** 引当棚一意照会SC呼出                            */
		/****************************************************/
		result = callGethkatListScAndSet(handle, param, userMap, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		/****************************************************/
		/** 通信事業者一覧照会SC呼出(自社用)                */
		/****************************************************/
		result = callGetTsjgsListScForJishaCd(handle, param, userMap, ccName, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}
		
		/**********************************************************/
		/** 料金プラン固定単価（オプション申込料金）一覧照会SC呼出*/
		/**********************************************************/
		result = callGetPplanKttankaListSc(handle, param, userMap, ccName, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}
		
		/**********************************************************/
		/** 料金プラン従量単価一意照会SC呼出*/
		/**********************************************************/
		result = callGetPplanJuryoListSc(handle, param, userMap, ccName, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		// ANK-3296-00-00 ADD START
		/**********************************************************/
		/** 割賦プラン一意照会SC呼出*/
		/**********************************************************/
		result = callGetKapPlanListSc(handle, param, userMap, ccName, opeDate);
		if (JKKBpCommon.isError(result))
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}
		// ANK-3296-00-00 ADD END

		/***************************************************/
		/** 下りデータマッピング処理開始                   */
		/***************************************************/
		JKKBpCommon.setResultUserData(param, ccName, userMap);
		if ("0".equals(errFlgCc))
		{
			JKKBpCommon.setResultCtrlData(param, result, ccName, 0, 0);
		} 
		else
		{
			String errMsg = "申込新規共通照会CCで例外が発生しました";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * クレジットカード会社一覧照会SC呼出を行い結果を返却用マップに設定します。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGetCrecardCompListScAndSet(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String opeDate)
			throws Throwable
	{

		Map<?, ?> result = callGetCrecardCompListSc(handle, param, opeDate);
		CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, EKK0531B501CBSMsg.EKK0531B501CBSMSG1LIST);
		ArrayList crecardCompList = new ArrayList();
		for (int i = 0; i < caanMsgList.length; i++)
		{
			HashMap crecardCompMap = new HashMap();
			String listNamePre = EKK0531B501CBSMsg.EKK0531B501CBSMSG1LIST + "[" + i + "].";
			setDataMap(crecardCompMap, "crecard_comp_cd", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0531B501CBSMsg1List.CRECARD_COMP_CD));
			setDataMap(crecardCompMap, "crecard_comp_nm", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0531B501CBSMsg1List.CRECARD_COMP_NM));
			crecardCompList.add(crecardCompMap);
		}
		
		userMap.put("crecard_comp_list", crecardCompList);

		return result;
	}

	/**
	 * クレジットカード会社一覧照会SC呼出
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetCrecardCompListSc(SessionHandle handle,
			IRequestParameterReadWrite param, String opeDate)
			throws Throwable
	{

		/**************************************************************************/
		/** クレジットカード会社一覧照会SCへの上りマッピング                          */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0531B501CBSMsg.CRECARD_JIGYO_CD, "2");
		inMap.put(EKK0531B501CBSMsg.OPERATEDATE, opeDate);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0531B501", EKK0531B501CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "クレジットカード一覧照会SC呼び出し開始（ 運用日付：" + opeDate + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "クレジットカード一覧照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 通信事業者一覧照会SC呼出を行い結果を返却用マップに設定します。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param ccName
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGetTsjgsListScAndSet(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String ccName, String opeDate)
			throws Throwable
	{

		Map<?, ?> result = callGetTsjgsListSc(handle, param, ccName, opeDate);
		CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, ETU0051B010CBSMsg.ETU0051B010CBSMSG1LIST);
		ArrayList tsjgsList = new ArrayList();
		for (int i = 0; i < caanMsgList.length; i++)
		{
			HashMap tsjgsMap = new HashMap();
			String listNamePre = ETU0051B010CBSMsg.ETU0051B010CBSMSG1LIST + "[" + i + "].";
			setDataMap(tsjgsMap, "tsjgs_cd", JKKBpCommon.getResultString(result, listNamePre + ETU0051B010CBSMsg1List.TSJGS_CD));
			setDataMap(tsjgsMap, "tsjgs_nm", JKKBpCommon.getResultString(result, listNamePre + ETU0051B010CBSMsg1List.TSJGS_NM));
			tsjgsList.add(tsjgsMap);
		}
		userMap.put("tsjgs_list", tsjgsList);

		return result;
	}

	/**
	 * 通信事業者一覧照会SC呼出
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> callGetTsjgsListSc(SessionHandle handle,
			IRequestParameterReadWrite param, String ccName, String opeDate)
			throws Throwable
	{

		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);

		/**************************************************************************/
		/** 通信事業者一覧照会SCへの上りマッピング                                */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(ETU0051B010CBSMsg.FUNC_CODE, funcCd);
		inMap.put(ETU0051B010CBSMsg.KEY_JISHA_TASHA_FLG, ccParam.get("tsjgs_key_jisha_tasha_flg"));
		inMap.put(ETU0051B010CBSMsg.SEARCH_TYPE, ccParam.get("tsjgs_search_type"));
		inMap.put(ETU0051B010CBSMsg.MAX_SEARCH_NUM, ccParam.get("tsjgs_max_search_num"));
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "ETU0051B010", ETU0051B010CBSMsg.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;
	}

	/**
	 * 通信事業者一覧照会SC呼出を行い結果を返却用マップに設定します。(自社用)
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGetTsjgsListScForJishaCd(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String ccName, String opeDate)
			throws Throwable
	{

		Map<?, ?> result = callGetTsjgsListScForJishaCd(handle, param, ccName, opeDate);
		CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, ETU0051B010CBSMsg.ETU0051B010CBSMSG1LIST);
		ArrayList tsjgsList = new ArrayList();
		for (int i = 0; i < caanMsgList.length; i++)
		{
			HashMap tsjgsMap = new HashMap();
			String listNamePre = ETU0051B010CBSMsg.ETU0051B010CBSMSG1LIST + "[" + i + "].";
			setDataMap(tsjgsMap, "tsjgs_cd", JKKBpCommon.getResultString(result, listNamePre + ETU0051B010CBSMsg1List.TSJGS_CD));
			tsjgsList.add(tsjgsMap);
		}
		userMap.put("jisha_tsjgs_list", tsjgsList);

		return result;
	}

	/**
	 * 通信事業者一覧照会SC呼出(自社用)
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetTsjgsListScForJishaCd(SessionHandle handle,
			IRequestParameterReadWrite param, String ccName, String opeDate)
			throws Throwable
	{

		/**************************************************************************/
		/** 通信事業者一覧照会SCへの上りマッピング                                */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(ETU0051B010CBSMsg.FUNC_CODE, funcCd);
		inMap.put(ETU0051B010CBSMsg.KEY_JISHA_TASHA_FLG, JKKStrConst.CD00189_JISHA);
		inMap.put(ETU0051B010CBSMsg.SEARCH_TYPE, "1");	// 検索処理パターン(一括)
		inMap.put(ETU0051B010CBSMsg.MAX_SEARCH_NUM, "100");
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "ETU0051B010", ETU0051B010CBSMsg.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;
	}
	
	/**
	 * 料金プラン固定単価（オプション申込料金）一覧照会SC呼出を行い結果を返却用マップに設定します。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGetPplanKttankaListSc(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String ccName, String opeDate)
			throws Throwable
	{
		Map<?, ?> result = null;
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)ccParam.get("pplan_kttanka_list");
		if (dataList == null)
		{
			return result;
		}
		
		ArrayList pplanKttankaList = new ArrayList();
		for (HashMap<String, Object> dataMap : dataList)
		{
			result = callGetPplanKttankaListSc(handle, param, ccName, opeDate, dataMap);
			CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, EKK0601B001CBSMsg.EKK0601B001CBSMSG1LIST);
			
			for (int i = 0; i < caanMsgList.length; i++)
			{
				HashMap pplanKttankaMap = new HashMap();
				String listNamePre = EKK0601B001CBSMsg.EKK0601B001CBSMSG1LIST + "[" + i + "].";
				setDataMap(pplanKttankaMap, "pplan_kotei_amnt", JKKBpCommon.getResultString(result, listNamePre + EKK0601B001CBSMsg1List.PPLAN_KOTEI_AMNT));
				pplanKttankaList.add(pplanKttankaMap);
			}
		}
		userMap.put("pplan_kttanka_list", pplanKttankaList);

		return result;
	}

	
	/**
	 * 料金プラン固定単価（オプション申込料金）一覧照会SCを呼び出します。
	 * <br/>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @param dataMap Inputデータマップ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetPplanKttankaListSc(SessionHandle handle, IRequestParameterReadWrite param,
			String ccName, String opeDate, HashMap<String, Object> dataMap) throws Throwable
	{
		/**************************************************************************/
		/** 料金プラン固定単価（オプション申込料金）一覧照会SCへの上りマッピング  */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0601B001CBSMsg.FUNC_CODE, funcCd);
		inMap.put(EKK0601B001CBSMsg.MAX_SEARCH_NUM, "100");
		inMap.put(EKK0601B001CBSMsg.KEY_PCRS_CD, (String)dataMap.get("key_pcrs_cd"));
		inMap.put(EKK0601B001CBSMsg.KEY_PPLAN_CD, (String)dataMap.get("key_pplan_cd"));
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0601B001", EKK0601B001CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン固定単価（オプション申込料金）一覧照会SC呼び出し開始（ 運用日付：" + opeDate + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン固定単価（オプション申込料金）一覧照会SC呼び出し完了" + result);

		return result;
	}		
	
	/**
	 * 料金プラン従量単価一意照会SC呼出を行い結果を返却用マップに設定します。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGetPplanJuryoListSc(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String ccName, String opeDate)
			throws Throwable
	{
		Map<?, ?> result = null;
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)ccParam.get("pplan_jrtanka_list");
		if (dataList == null)
		{
			return result;
		}
		
		ArrayList pplanKttankaList = new ArrayList();
		for (HashMap<String, Object> dataMap : dataList)
		{
			result = callGetPplanJuryoListSc(handle, param, ccName, opeDate, dataMap);
			CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, EKK0611A010CBSMsg.EKK0611A010CBSMSG1LIST);
			
			for (int i = 0; i < caanMsgList.length; i++)
			{
				HashMap pplanKttankaMap = new HashMap();
				String listNamePre = EKK0611A010CBSMsg.EKK0611A010CBSMSG1LIST + "[" + i + "].";
				setDataMap(pplanKttankaMap, "pplan_juryo_amnt", JKKBpCommon.getResultString(result, listNamePre + EKK0611A010CBSMsg1List.PPLAN_JURYO_AMNT));
				pplanKttankaList.add(pplanKttankaMap);
			}
		}
		userMap.put("pplan_jrtanka_list", pplanKttankaList);

		return result;
	}	
	
	/**
	 * 料金プラン従量単価一意照会SCを呼び出します。
	 * <br/>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @param dataMap Inputデータマップ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetPplanJuryoListSc(SessionHandle handle, IRequestParameterReadWrite param,
			String ccName, String opeDate, HashMap<String, Object> dataMap) throws Throwable
	{
		/**************************************************************************/
		/** 料金プラン従量単価一意照会SCへの上りマッピング  */
		/**************************************************************************/
		String funcCd = "2";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0611A010CBSMsg.FUNC_CODE, funcCd);
		inMap.put(EKK0611A010CBSMsg.KEY_PPLAN_TANKA_SBT_CD, String.valueOf(eo.common.constant.JKKStrConst.CD01111_K01));
		inMap.put(EKK0611A010CBSMsg.KEY_KEI_STAT_SBT_CD, String.valueOf(eo.common.constant.JKKStrConst.CD01112_01));
		inMap.put(EKK0611A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		inMap.put(EKK0611A010CBSMsg.KEY_PCRS_CD, (String)dataMap.get("key_pcrs_cd"));
		inMap.put(EKK0611A010CBSMsg.KEY_PPLAN_CD, (String)dataMap.get("key_pplan_cd"));
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0611A010", EKK0611A010CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン従量単価一意照会SC呼び出し開始（ 運用日付：" + opeDate + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン従量単価一意照会SC呼び出し完了" + result);

		return result;
	}	
	
	/**
	 * 業務パラメータ管理一意照会SC呼出を行い結果を返却用マップに設定します。
	 * <br/>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected boolean callGetWorkParamListScAndSet(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String ccName, String opeDate)
			throws Throwable
	{
		boolean retVal = true;
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)ccParam.get("work_param_list");
		if (dataList == null)
		{
			return retVal;
		}
		
		ArrayList<HashMap<String, Object>> wpList = (ArrayList<HashMap<String, Object>>)userMap.get("work_param_list");
		if (wpList == null)
		{
			wpList = new ArrayList<HashMap<String, Object>>();
			userMap.put("work_param_list", wpList);
		}
		
		for (HashMap<String, Object> dataMap : dataList)
		{
			Map<?, ?> result = callGetWorkParamSc(handle, param, ccName, opeDate, dataMap);
			CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
			for (int i = 0; i < caanMsgList.length; i++)
			{
				HashMap wpMap = new HashMap();
				String listNamePre = EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST + "[" + i + "].";
				setDataMap(wpMap, "work_param_sette_value", JKKBpCommon.getResultString(result, listNamePre
						+ EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
				wpList.add(wpMap);
				break;
			}
			if (JKKBpCommon.isError(result))
			{
				JKKBpCommon.setResultCtrlData(param, result);
				retVal = false;
			}
		}
		return retVal;
	}

	/**
	 * 業務パラメータ管理一意照会SCを呼び出します。
	 * <br/>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @param dataMap Inputデータマップ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetWorkParamSc(SessionHandle handle, IRequestParameterReadWrite param,
			String ccName, String opeDate, HashMap<String, Object> dataMap) throws Throwable
	{

		/**************************************************************************/
		/** 業務パラメータ管理一意照会SCへの上りマッピング                        */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EZM0321A010CBSMsg.FUNC_CODE, funcCd);
		inMap.put(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, (String)dataMap.get("key_work_param_id"));
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EZM0321A010", EZM0321A010CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		return result;
	}

	/**
	 * 引当棚一意照会SC呼出を行い結果を返却用マップに設定します。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGethkatListScAndSet(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String opeDate)
			throws Throwable
	{

		Map<?, ?> result = callhkatListSc(handle, param, opeDate);
		CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, EDK0451A010CBSMsg.EDK0451A010CBSMSG1LIST);
		ArrayList hkatList = new ArrayList();
		for (int i = 0; i < caanMsgList.length; i++)
		{
			HashMap hkatMap = new HashMap();
			String listNamePre = EDK0451A010CBSMsg.EDK0451A010CBSMSG1LIST + "[" + i + "].";
			setDataMap(hkatMap, "shelf_cd", JKKBpCommon.getResultString(result, listNamePre + EDK0451A010CBSMsg1List.SHELF_CD));
			hkatList.add(hkatMap);
		}
		
		userMap.put("hkat_list", hkatList);

		return result;
	}

	/**
	 * 引当棚一意照会SC呼出
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callhkatListSc(SessionHandle handle,
			IRequestParameterReadWrite param, String opeDate)
			throws Throwable
	{

		/**************************************************************************/
		/** 引当棚一意照会SCへの上りマッピング                                    */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EDK0451A010CBSMsg.KEY_HAMBAI_SBT_CD, "10");
		inMap.put(EDK0451A010CBSMsg.KEY_UNYO_YMD, opeDate);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EDK0451A010", EDK0451A010CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "引当棚一意照会SC呼び出し開始（ 運用日付：" + opeDate + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "引当棚一意照会SC呼び出し完了" + result);

		return result;
	}

	// ANK-3296-00-00 ADD START
	/**
	 * 割賦プラン一意照会SC呼出を行い結果を返却用マップに設定します。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param userMap 返却用マップ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected Map<?, ?> callGetKapPlanListSc(SessionHandle handle,
			IRequestParameterReadWrite param, Map userMap, String ccName, String opeDate)
			throws Throwable
	{
		Map<?, ?> result = null;
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)ccParam.get("kap_plan_list");
		if (dataList == null)
		{
			return result;
		}
		
		ArrayList kapPlanList = new ArrayList();
		for (HashMap<String, Object> dataMap : dataList)
		{
			result = callGetKapPlanListSc(handle, param, ccName, opeDate, dataMap);
			CAANMsg[] caanMsgList = JKKBpCommon.getResultMsgList(result, EKK2521A010CBSMsg.EKK2521A010CBSMSG1LIST);
			
			for (int i = 0; i < caanMsgList.length; i++)
			{
				HashMap kapPlanMap = new HashMap();
				String listNamePre = EKK2521A010CBSMsg.EKK2521A010CBSMSG1LIST + "[" + i + "].";
				setDataMap(kapPlanMap, "kap_pay_cnt", JKKBpCommon.getResultString(result, listNamePre + EKK2521A010CBSMsg1List.KAP_PAY_CNT));
				kapPlanList.add(kapPlanMap);
			}
		}
		userMap.put("kap_plan_list", kapPlanList);

		return result;
	}	
	
	/**
	 * 割賦プラン一意照会SCを呼び出します。
	 * <br/>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @param dataMap Inputデータマップ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetKapPlanListSc(SessionHandle handle, IRequestParameterReadWrite param,
			String ccName, String opeDate, HashMap<String, Object> dataMap) throws Throwable
	{
		/**************************************************************************/
		/** 割賦プラン一意照会SCへの上りマッピング  */
		/**************************************************************************/
		String funcCd = "2";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK2521A010CBSMsg.FUNC_CODE, funcCd);
		
		// CCへの入力パラメータ取得
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		
		// ＫＥＹ＿割賦プランコードを設定
		inMap.put(EKK2521A010CBSMsg.KEY_KAP_PLAN_CD, (String)dataMap.get("key_kap_plan_cd"));
		// ＫＥＹ＿予約適用年月日を設定
		inMap.put(EKK2521A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK2521A010", EKK2521A010CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "割賦プラン一意照会SC呼び出し開始（ 運用日付：" + opeDate + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "割賦プラン一意照会SC呼び出し完了" + result);

		return result;
	}
	// ANK-3296-00-00 ADD END

	/**
	 * ＢＰチェック用の入力パラメータを作成する。
	 * <br />
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return ＢＰチェック用パラメータ
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	{
		// 当CCではBPチェックは行わない(0件のCAANMsg配列を返却)
		return JKKBpCommon.createBpNotCheckParam();
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode)
	{
		// BPチェックを行わない為、チェック結果の編集も不要
		return param;
	}

	/**
	 * ユーザデータ情報に値を設定します。<br>
	 * 　@getValueにデータが存在する場合、dataMapに設定します。<br>
	 * 　A上記以外の場合、空文字を設定します。<br>
	 * @param dataMap 値を設定するユーザデータ情報
	 * @param setKey ユーザデータ情報のキー名
	 * @param getValue メッセージキャリアからの取得値
	 */
	@SuppressWarnings("unchecked")
	private void setDataMap(Map dataMap, String setKey, String getValue)
	{
		if (null == getValue)
		{
			dataMap.put(setKey, "");
		}
		else
		{
			dataMap.put(setKey, getValue);
		}
	}
}
