/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKGetSvcPaywayCC
*   ソースファイル名：JKKGetSvcPaywayCC.java
*   作成者          ：富士通
*   日付            ：2011年06月13日
*＜機能概要＞
*   支払方法照会部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/06/13   FJ）山川    新規作成
*   v2.00.00    2011/09/28   FJ）関      処理修正
*   v4.00.00    2012/06/26   FJ) 佐藤    【ANK-0398-00-00】「例外登録」の管理追加
*   v4.01.00    2012/10/11   FJ）多田(真) 【KAD-2012-0000308】解約済みサービスに対してのサービス追加について
*   v4.02.00    2012/12/14   FJ) 三浦    【ANK-1392-00-00】課題524-フロントのクレジットデータ更新
*   v4.03.00    2012/12/20   FJ) 北浦    【KAD-2012-0001108】書面での受付番号の申込イメージの紐付けについて
*   v5.00.00    2013/02/07   FJ) 中山    【ST2-2013-0000666】DB照会データがNULLの場合の空文字列変換
*   v5.01.00    2013/03/12   FJ) 薄出    【OT-2013-0000343】エラー確認の呼出パラメータ作成処理を修正
*   v20.00.00   2015/11/11   FJ) 澤田    【ANK-2565-00-00】クレジットカード番号預かりサービス導入（step3：預かり番号化
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
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.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK0491B507CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B507CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0501A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0501A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0521A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0521A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg1List;

/**
 * 支払方法の照会を行います。
 * <br>
 * @author 富士通
 */
public class JKKGetSvcPaywayCC extends AbstractCommonComponent implements ICommonComponent
{

	/**
	 * 支払方法照会処理
	 * <br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getSvcPayway(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);

		// 運用日付
		String opeDate = (String)ccParam.get("ope_date");
		// サービス契約番号
		String svcKeiNo = null;
		
		if(JKKCommonUtil.isNull(ccParam.get("add_mt_svc_kei_no")))
		{
			// ワークエリアからサービス契約情報を取得する
			Map svcKeiMap = getSvcKeiMap(param);
			if (svcKeiMap == null)
			{
				return param;
			}
			// サービス契約情報からサービス契約番号取得
			svcKeiNo = (String)svcKeiMap.get("svc_kei_no");
		}
		else
		{	// リスエストパラメータの追加元サービス契約番号
			svcKeiNo = (String)ccParam.get("add_mt_svc_kei_no");
		}

		/****************************************************/
		/** 請求契約一覧照会（サービス契約番号）            */
		/****************************************************/
		String seikyWayCd = null;
		String seikyWayNo = null;
		result = callGetSikykeiListSc(handle, param, svcKeiNo, opeDate);
		if (JKKBpCommon.isSuccess(result))
		{
			String listNamePre = EKK0491B507CBSMsg.EKK0491B507CBSMSG1LIST + "[0].";

			// 請求契約番号
			setDataMap(userMap, "seiky_kei_no", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_KEI_NO));
			// 世代登録年月日時分秒
			setDataMap(userMap, "kk0491_gene_add_dtm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.GENE_ADD_DTM));
			// 請求方法変更年月日
			setDataMap(userMap, "seiky_way_chge_ymd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_CHGE_YMD));
			// 請求契約カナ
			setDataMap(userMap, "seiky_kei_kana", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_KEI_KANA));
			// 請求方法適用調整年月日
			setDataMap(userMap, "seiky_way_aply_adj_ymd", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.SEIKY_WAY_APLY_ADJ_YMD));
			// 請求契約ステータス
			setDataMap(userMap, "seiky_kei_stat", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_KEI_STAT));
			// 督促ステータス
			setDataMap(userMap, "tokusoku_stat_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.TOKUSOKU_STAT));
			// 督促ステータス
			setDataMap(userMap, "tokusoku_stat", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.TOKUSOKU_STAT));
			// 送付先法人格前後指定コード
			setDataMap(userMap, "shs_hojin_zengo_shitei_cd", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.SHS_HOJIN_ZENGO_SHITEI_CD));
			// 送付先法人格種別コード
			setDataMap(userMap, "shs_hojin_sbt_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SHS_HOJIN_SBT_CD));
			// 送付先カナ名
			setDataMap(userMap, "shs_kana", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SHS_KANA));
			// 送付先名
			setDataMap(userMap, "sohus_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_NM));
			// 送付先部課名
			setDataMap(userMap, "sohus_bkm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_BKM));
			// 送付先担当者名
			setDataMap(userMap, "sohus_tntsha_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_TNTSHA_NM));
			// 送付先電話番号
			setDataMap(userMap, "sohus_telno", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_TELNO));
			// 送付先FAX番号
			setDataMap(userMap, "sohus_fax_no", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_FAX_NO));
			// 送付先メールアドレス
			setDataMap(userMap, "sohus_mlad", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_MLAD));
			// 請求書送付先変更年月日
			setDataMap(userMap, "seikyus_sohus_chge_ymd", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.SEIKYUS_SOHUS_CHGE_YMD));
			// 予約適用開始希望年月日
			setDataMap(userMap, "rsv_tsta_kibo_ymd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.RSV_TSTA_KIBO_YMD));
			// 初回支払申込書送付要否
			setDataMap(userMap, "first_pay_mskmsho_sohu_yh", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.FIRST_PAY_MSKMSHO_SOHU_YH));
			// 初回支払申込書送付年月日
			setDataMap(userMap, "first_pay_mskmsho_sohu_ymd", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.FIRST_PAY_MSKMSHO_SOHU_YMD));
			// 請求方法コード
			setDataMap(userMap, "seiky_way_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_CD));
			// 請求書発行要否
			setDataMap(userMap, "seikyus_hakko_yh", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKYUS_HAKKO_YH));
			// 送付先住所コード
			setDataMap(userMap, "sohus_ad_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_AD_CD));
			// 送付先郵便番号
			setDataMap(userMap, "sohus_pcd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_PCD));
			// 送付先都道府県名
			setDataMap(userMap, "sohus_state_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_STATE_NM));
			// 送付先市区町村名
			setDataMap(userMap, "sohus_city_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_CITY_NM));
			// 送付先大字通称名
			setDataMap(userMap, "sohus_oaztsu_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_OAZTSU_NM));
			// 送付先字丁目名
			setDataMap(userMap, "sohus_azcho_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_AZCHO_NM));
			// 送付先番地号
			setDataMap(userMap, "sohus_bnchigo", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_BNCHIGO));
			// 送付先住所手動入力フラグ
			setDataMap(userMap, "sohus_ad_man_input_flg", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.SOHUS_AD_MAN_INPUT_FLG));
			// 送付先住所補記・建物名
			setDataMap(userMap, "sohus_adrttm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_ADRTTM));
			// 送付先住所補記・部屋番号
			setDataMap(userMap, "sohus_adrrm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SOHUS_ADRRM));
			// 請求方法番号(口座)
			setDataMap(userMap, "seiky_way_no_koza", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_NO_KOZA));
			// 請求方法番号(クレジットカード)
			setDataMap(userMap, "seiky_way_no_crecard", JKKBpCommon
					.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_NO_CRECARD));
			// 情報表示コード
			setDataMap(userMap, "info_dsp_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.INFO_DSP_CD));
			// 申込明細番号
			setDataMap(userMap, "mskm_dtl_no", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.MSKM_DTL_NO));
			// 異動区分
			setDataMap(userMap, "ido_div", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.IDO_DIV));
			// 初回請求年月
			setDataMap(userMap, "first_seiky_ym", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.FIRST_SEIKY_YM));
			// 初回支払申込書受領年月日
			setDataMap(userMap, "first_pay_mskmsho_rcp_ymd", JKKBpCommon.getResultString(result, listNamePre
					+ EKK0491B507CBSMsg1List.FIRST_PAY_MSKMSHO_RCP_YMD));
			// 更新年月日時分秒
			// IT2-2012-0000853対応（異動予約レコードが存在する場合の排他エラー回避）
			setDataMap(userMap, "kk0491_upd_dtm", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.LAST_UPD_DTM));

			// 請求方法コード(1:窓口払い、2:預金口座振替、3:郵便自動振込、4:クレジット)
			seikyWayCd = JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_CD);

			// 請求方法コードが 預金口座振替 または 郵便自動振込 の場合
			if (JKKStrConst.SEIKY_WAY_CD_YOKIN.equals(seikyWayCd) || JKKStrConst.SEIKY_WAY_CD_YUCHO.equals(seikyWayCd))
			{
				seikyWayNo = JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_NO_KOZA);
			}
			// 請求方法コードが クレジット の場合
			else if (JKKStrConst.SEIKY_WAY_CD_CREDIT.equals(seikyWayCd))
			{
				seikyWayNo = JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.SEIKY_WAY_NO_CRECARD);
			}

		}
		else
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		/****************************************************/
		/** 口座一意照会                                    */
		/****************************************************/
		// 請求方法コードが 預金口座振替 または 郵便自動振込 の場合
		if (JKKStrConst.SEIKY_WAY_CD_YOKIN.equals(seikyWayCd) || JKKStrConst.SEIKY_WAY_CD_YUCHO.equals(seikyWayCd))
		{
			result = callGetKozaSc(handle, param, seikyWayNo);
			if (JKKBpCommon.isSuccess(result))
			{
				String listNamePre = EKK0501A010CBSMsg.EKK0501A010CBSMSG1LIST + "[0].";

				// NGステータス
				setDataMap(userMap, "ng_stat", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.KOZA_STAT_NM));
				// 口座ステータス
				setDataMap(userMap, "koza_stat", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.KOZA_STAT));
				// 口座ステータス名称
				setDataMap(userMap, "koza_stat_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.KOZA_STAT_NM));
				// 口座名義人カナ名
				setDataMap(userMap, "koza_meigin_kana", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.KOZA_MEIGIN_KANA));
				// 金融機関名
				setDataMap(userMap, "bank_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.BANK_CD_NM));
				// 金融機関支店名
				setDataMap(userMap, "bank_shiten_nm", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.BANK_SHITEN_CD_NM));
				// 金融機関コード
				setDataMap(userMap, "bank_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.BANK_CD));
				// 金融機関支店コード
				setDataMap(userMap, "bank_shiten_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.BANK_SHITEN_CD));
				// 口座番号
				setDataMap(userMap, "koza_no", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.KOZA_NO));
				// 預金種目コード
				setDataMap(userMap, "yokin_shumoku_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.YOKIN_SHUMOKU_CD));
				// 通帳記号
				setDataMap(userMap, "tsucho_symbol", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.TSUCHO_SYMBOL));
				// 通帳番号
				setDataMap(userMap, "tsucho_no", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.TSUCHO_NO));
				// 更新年月日時分秒
				setDataMap(userMap, "kk0501_upd_dtm", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.UPD_DTM));
				// 新規コード (UI残755)
				setDataMap(userMap, "new_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0501A010CBSMsg1List.NEW_CD));
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
		}

		/****************************************************/
		/** クレジットカード一意照会                        */
		/****************************************************/
		// 請求方法コードが クレジット の場合
		if (JKKStrConst.SEIKY_WAY_CD_CREDIT.equals(seikyWayCd))
		{
			result = callGetCrecardSc(handle, param, seikyWayNo);
			if (JKKBpCommon.isSuccess(result))
			{
				String listNamePre = EKK0521A010CBSMsg.EKK0521A010CBSMSG1LIST + "[0].";
				
				// ↓↓↓ 2013/03/12【OT-2013-0000343】エラー確認の呼出パラメータ作成処理を修正 薄出 START ↓↓↓
				// 世代登録年月日時分秒
				setDataMap(userMap, "kk0521_gene_add_dtm", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.GENE_ADD_DTM));
				// ↑↑↑ 2013/03/12【OT-2013-0000343】エラー確認の呼出パラメータ作成処理を修正 薄出  END  ↑↑↑
				
				// NGステータス
				setDataMap(userMap, "ng_stat", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_STAT_NM));
				// クレジットカード名義（ローマ字）
				setDataMap(userMap, "crecard_nm_romaji", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_NM_ROMAJI));
				// クレジットカード名義カナ名
				setDataMap(userMap, "crecard_nm_kana", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_NM_KANA));
				// クレジットカード会社コード
				setDataMap(userMap, "crecard_comp_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_COMP_CD));
				// クレジットカード番号
				setDataMap(userMap, "crecard_no", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_NO));
				// クレジットカード有効期限
				setDataMap(userMap, "crecard_yk_kigen", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_YK_KIGEN));
				// 有効性確認結果区分
				setDataMap(userMap, "yk_cfm_rslt_div", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.YK_CFM_RSLT_DIV));
				// 有効性確認結果区分名称
				setDataMap(userMap, "yk_cfm_rslt_div_nm", JKKBpCommon
						.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.YK_CFM_RSLT_DIV_NM));
				// クレジットカード無効年月
				setDataMap(userMap, "creca_mk_ym", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECA_MK_YM));
				// 更新年月日時分秒
				setDataMap(userMap, "kk0521_upd_dtm", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.UPD_DTM));
				// ++++++++++++++ 2015/11/11 v20.00.00 【ANK-2565-00-00】 追加開始 ++++++++++++++++ //
				// クレジットカード番号預りID
				setDataMap(userMap, "crecard_no_azkri_id", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.CRECARD_NO_AZKRI_ID));
				// 仕向け先コード
				setDataMap(userMap, "shikosaki_comp_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0521A010CBSMsg1List.SHIKOSAKI_COMP_CD));
				// ++++++++++++++ 2015/11/11 v20.00.00 【ANK-2565-00-00】 追加終了 ++++++++++++++++ //
			}
			else
			{
				errFlgCc = "1";
				JKKBpCommon.setResultCtrlData(param, result);
			}
		}
		

		// コード名称マスタ一意照会
		setDataMap(userMap, "seiky_kei_stat_sbt_cd", (String)userMap.get("seiky_kei_stat"));
		setDataMap(userMap, "seiky_kei_stat", getCodeName(handle, param, "CD00057", (String)userMap.get("seiky_kei_stat")));
		setDataMap(userMap, "tokusoku_stat", getCodeName(handle, param, "CD00184", (String)userMap.get("tokusoku_stat")));

		/***************************************************/
		/** 下りデータマッピング処理開始                   */
		/***************************************************/
		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 svcKeiNo サービス契約番号
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetSikykeiListSc(SessionHandle handle,
			IRequestParameterReadWrite param, String svcKeiNo, String opeDate)
			throws Throwable
	{

		/**************************************************************************/
		/** 請求契約一覧照会（サービス契約番号）SCへの上りマッピング                                */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0491B507CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
//		inMap.put(EKK0491B507CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0491B507", EKK0491B507CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
//		JKKBpCommon.printBpDebugLog(this.getClass(), "請求契約一覧照会（サービス契約番号）SC呼び出し開始（ サービス契約番号：" + svcKeiNo + 
//				"、予約適用年月日：" + opeDate + " ）");
		JKKBpCommon.printBpDebugLog(this.getClass(), "請求契約一覧照会（サービス契約番号）SC呼び出し開始（ サービス契約番号：" + svcKeiNo + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "請求契約一覧照会（サービス契約番号）SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 口座一意照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param seikyWayNoKoza 請求方法番号(口座)
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetKozaSc(SessionHandle handle,
			IRequestParameterReadWrite param, String seikyWayNoKoza)
			throws Throwable
	{

		/**************************************************************************/
		/** 口座一意照会SCへの上りマッピング                                      */
		/**************************************************************************/
		String funcCd = "2";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0501A010CBSMsg.KEY_SEIKY_WAY_NO_KOZA, seikyWayNoKoza);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0501A010", EKK0501A010CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "口座一意照会SC呼び出し開始（ 請求方法番号(口座)：" + seikyWayNoKoza + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "口座一意照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * クレジットカード一意照会SC呼出SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param seikyWayNoCrecard 請求方法番号(クレジットカード)
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetCrecardSc(SessionHandle handle,
			IRequestParameterReadWrite param, String seikyWayNoCrecard)
			throws Throwable
	{

		/**************************************************************************/
		/** クレジットカード一意照会SCへの上りマッピング                          */
		/**************************************************************************/
		String funcCd = "2";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0521A010CBSMsg.KEY_SEIKY_WAY_NO_CRECARD, seikyWayNoCrecard);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0521A010", EKK0521A010CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "クレジットカード一意照会SC呼び出し開始（ 請求方法番号(クレジットカード)："
				+ seikyWayNoCrecard + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "クレジットカード一意照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * コード名称取得
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return 実行結果
	 * @throws Throwable
	 */
	private String getCodeName(SessionHandle handle,
			IRequestParameterReadWrite param, String cdSbtCd, String cdDiv)
	throws Throwable
	{
		String codeName = "";
		
		Map<?, ?> result = callGetCodeName(handle, param, cdSbtCd, cdDiv);
		if (JKKBpCommon.isSuccess(result))
		{
			String listNamePre = EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST + "[0].";
			codeName = JKKBpCommon.getResultString(result, listNamePre + EZM0171A010CBSMsg1List.CD_DIV_NM);
		}
		
		return codeName;
	}
	
	/**
	 * コード名称管理一意照会SC呼び出しSCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetCodeName(SessionHandle handle,
			IRequestParameterReadWrite param, String cdSbtCd, String cdDiv)
			throws Throwable
	{
				/**************************************************************************/
				/**  コード名称管理一意照会SCへの上りマッピング                          */
				/**************************************************************************/
				String funcCd = "1";
				Map<Object, Object> inMap = new HashMap<Object, Object>();

				inMap.put(EZM0171A010CBSMsg.KEY_CD_SBT_CD , cdSbtCd);
				inMap.put(EZM0171A010CBSMsg.KEY_CD_DIV , cdDiv);

				HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EZM0171A010", EZM0171A010CBSMsg.class , inMap, funcCd);

				/**************************************************************************/
				/** ＳＣ呼出実行                                                          */
				/**************************************************************************/
				ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
				JKKBpCommon.printBpDebugLog(this.getClass(), "コード名称管理一意照会SC呼び出し開始（コード種別コード："
						+ cdSbtCd + " コード種別コード:" + cdDiv +  " ）");
				Map<?, ?> result = scCall.run(paramMap, handle);
				JKKBpCommon.printBpDebugLog(this.getClass(), "コード名称管理一意照会SC呼び出し完了" + result);

				return result;
	}
	
	
	/**
	 * ワーク領域のサービス契約情報格納マップの取得を行います。
	 * <br>
	 * @param param
	 * @return ワーク領域のサービス契約情報格納マップ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private Map getSvcKeiMap(IRequestParameterReadWrite param) throws RequestParameterException
	{

		// 契約情報を格納するリスト
		Map svcKeiMap = new HashMap();

		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			return svcKeiMap;
		}

		// 申込サービス契約内訳一覧照会ＣＣの作業領域のマップを取得
		HashMap mskmSvcKeiUcwkWorkMap = (HashMap)workMap.get("JKKGetMskmSvcKeiUcwkListCCWork");
		if (mskmSvcKeiUcwkWorkMap == null)
		{
			return svcKeiMap;
		}

		// 申込明細リストを取得
		ArrayList<HashMap> mskmDtlList = (ArrayList<HashMap>)mskmSvcKeiUcwkWorkMap.get("mskm_dtl_list");
		if (mskmDtlList == null)
		{
			return svcKeiMap;
		}

		svcKeiMap = ((ArrayList<HashMap>)mskmDtlList.get(0).get("svc_kei_list")).get(0);

		return svcKeiMap;
	}

	/**
	 * ＢＰチェック用の入力パラメータを作成する。
	 * <br />
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	{
		// チェックのみ行うCCの為、BPチェックは行わない(0件のCAANMsg配列を返却)
		HashMap param4BpChek = new HashMap();
		param4BpChek.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{});
		return param4BpChek;
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <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);
		}
	}
}
