/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKUpdSvcPaywayCC
*   ソースファイル名：JKKUpdSvcPaywayCC.java
*   作成者          ：富士通
*   日付            ：2011年12月07日
*＜機能概要＞
*   登録部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/07   FJ）山本    新規作成
*   v4.00.00    2012/06/26   FJ) 佐藤    【ANK-0398-00-00】「例外登録」の管理追加
*   v4.01.00    2012/12/10   FJ) 三浦    【ANK-1392-00-00】課題524-フロントのクレジットデータ更新
*   v11.00.00   2014/11/28   FJ) 川島    【OM-2014-0003751】
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

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.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.ejb.cbs.cbsmsg.EKK0491C060CBSMsg;

/**
 * 支払方法変更コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
public class JKKUpdSvcPaywayCC extends AbstractCommonComponent
{

	/** エラーメッセージ **/
	private static final String ERR_MSG = "支払方法変更CCで例外が発生しました";

	/**
	 * 支払方法変更のメイン処理を実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite changeMain(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		// マップに値が設定されていない場合は処理を行わない。
		if (param.getData(ccName) == null)
		{
			return param;
		}
		
		// 支払方法更新
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);

		// 請求契約更新SC呼出
		Map<?, ?> result = executeUpdSvcPaywayKKW0491(handle, param, ccParam);
		if (JKKBpCommon.isSuccess(result))
		{
			JKKBpCommon.setLastDtmBySeiky(param, JKKBpCommon.getResultString(result, EKK0491C060CBSMsg.UPD_DTM));
		}
		else
		{
			JKKBpCommon.setResultCtrlData(param, result);
			throw new CCException(ERR_MSG, new Exception(ERR_MSG));
		}
		// 下りユーザデータマッピング処理
		JKKBpCommon.setResultCtrlData(param, result, ccName , 0, 0);

		return param;
	}

	/**
	 * ＢＰチェック用の入力パラメータを作成します。
	 * <br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return ＢＰチェック用パラメータ
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	{
		// 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 />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode, String fixedText)
			throws Throwable
	{
		return editErrorInfo(param, caanMsgs, returnCode);
	}
	
	/**
	 * 請求契約の更新処理を実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccParam 支払方法変更マップ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	private Map<?, ?> executeUpdSvcPaywayKKW0491(SessionHandle handle, IRequestParameterReadWrite param, Map<String, Object> ccParam) throws Exception
	{
		String funcCd = "1";

		Map<Object, Object> inMap = new HashMap<Object, Object>();
		
		// 請求契約番号
		inMap.put(EKK0491C060CBSMsg.SEIKY_KEI_NO, ccParam.get("seiky_kei_no"));
		// 申込明細番号
		inMap.put(EKK0491C060CBSMsg.MSKM_DTL_NO, ccParam.get("mskm_dtl_no"));
		// 請求契約カナ名
		inMap.put(EKK0491C060CBSMsg.SEIKY_KEI_KANA, (String)ccParam.get("seiky_kei_kana"));
		// 情報表示コード
		inMap.put(EKK0491C060CBSMsg.INFO_DSP_CD, ccParam.get("info_dsp_cd"));
		// 請求書発行要否
		inMap.put(EKK0491C060CBSMsg.SEIKYUS_HAKKO_YH, ccParam.get("seikyus_hakko_yh"));
		// 請求書送付先_契約者住所差異フラグ
		inMap.put(EKK0491C060CBSMsg.SKS_SHS_KSH_AD_SAI_FLG, ccParam.get("sks_shs_ksh_ad_sai_flg"));
		// 請求書送付先名_お客様名差異フラグ
		inMap.put(EKK0491C060CBSMsg.SKS_SHS_NM_CUST_NM_SAI_FLG, ccParam.get("sks_shs_nm_cust_nm_sai_flg"));
		// 送付先法人格種別コード
		inMap.put(EKK0491C060CBSMsg.SHS_HOJIN_SBT_CD, ccParam.get("shs_hojin_sbt_cd"));
		// 送付先法人格前後指定コード
		inMap.put(EKK0491C060CBSMsg.SHS_HOJIN_ZENGO_SHITEI_CD, ccParam.get("shs_hojin_zengo_shitei_cd"));
		// 送付先カナ名
		inMap.put(EKK0491C060CBSMsg.SHS_KANA, ccParam.get("shs_kana"));
		// 送付先名
		inMap.put(EKK0491C060CBSMsg.SOHUS_NM, ccParam.get("sohus_nm"));
		// 送付先部課名
		inMap.put(EKK0491C060CBSMsg.SOHUS_BKM, ccParam.get("sohus_bkm"));
		// 送付先担当者名
		inMap.put(EKK0491C060CBSMsg.SOHUS_TNTSHA_NM, ccParam.get("sohus_tntsha_nm"));
		// 送付先住所コード
		inMap.put(EKK0491C060CBSMsg.SOHUS_AD_CD, ccParam.get("sohus_ad_cd"));
		// 送付先郵便番号
		inMap.put(EKK0491C060CBSMsg.SOHUS_PCD, ccParam.get("sohus_pcd"));
		// 送付先都道府県名
		inMap.put(EKK0491C060CBSMsg.SOHUS_STATE_NM, ccParam.get("sohus_state_nm"));
		// 送付先市区町村名
		inMap.put(EKK0491C060CBSMsg.SOHUS_CITY_NM, ccParam.get("sohus_city_nm"));
		// 送付先大字通称名
		inMap.put(EKK0491C060CBSMsg.SOHUS_OAZTSU_NM, ccParam.get("sohus_oaztsu_nm"));
		// 送付先字丁目名
		inMap.put(EKK0491C060CBSMsg.SOHUS_AZCHO_NM, ccParam.get("sohus_azcho_nm"));
		// 送付先住所補記・建物名
		inMap.put(EKK0491C060CBSMsg.SOHUS_ADRTTM, ccParam.get("sohus_adrttm"));
		// 送付先住所補記・部屋番号
		inMap.put(EKK0491C060CBSMsg.SOHUS_ADRRM, ccParam.get("sohus_adrrm"));
		// 送付先番地号
		inMap.put(EKK0491C060CBSMsg.SOHUS_BNCHIGO, ccParam.get("sohus_bnchigo"));
		// 送付先電話番号
		inMap.put(EKK0491C060CBSMsg.SOHUS_TELNO, ccParam.get("sohus_telno"));
		// 送付先FAX番号
		inMap.put(EKK0491C060CBSMsg.SOHUS_FAX_NO, ccParam.get("sohus_fax_no"));
		// 送付先メールアドレス
		inMap.put(EKK0491C060CBSMsg.SOHUS_MLAD, ccParam.get("sohus_mlad"));
		// 請求書送付先変更年月日
		inMap.put(EKK0491C060CBSMsg.SEIKYUS_SOHUS_CHGE_YMD, ccParam.get("seikyus_sohus_chge_ymd"));
		// 請求方法適用調整年月日
		inMap.put(EKK0491C060CBSMsg.SEIKY_WAY_APLY_ADJ_YMD, ccParam.get("seiky_way_aply_adj_ymd"));
		// 予約適用開始希望年月日
		inMap.put(EKK0491C060CBSMsg.RSV_TSTA_KIBO_YMD, ccParam.get("rsv_tsta_kibo_ymd"));
		// 予約適用年月日
		inMap.put(EKK0491C060CBSMsg.RSV_APLY_YMD, ccParam.get("ope_date"));
		// 異動区分
		inMap.put(EKK0491C060CBSMsg.IDO_DIV, (String)ccParam.get("ido_div"));
		// 初回請求年月
		inMap.put(EKK0491C060CBSMsg.FIRST_SEIKY_YM, ccParam.get("first_seiky_ym"));
		// 初回支払申込書送付要否
		inMap.put(EKK0491C060CBSMsg.FIRST_PAY_MSKMSHO_SOHU_YH, ccParam.get("first_pay_mskmsho_sohu_yh"));
		// 初回支払申込書送付年月日
		inMap.put(EKK0491C060CBSMsg.FIRST_PAY_MSKMSHO_SOHU_YMD, ccParam.get("first_pay_mskmsho_sohu_ymd"));
		// 初回支払申込書受領年月日
		inMap.put(EKK0491C060CBSMsg.FIRST_PAY_MSKMSHO_RCP_YMD, ccParam.get("first_pay_mskmsho_rcp_ymd"));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0491C060CBSMsg.UPD_DTM_BF, JKKBpCommon.getLastDtmBySeiky(param, (String)ccParam.get("kk0491_upd_dtm_bf")));
		// 送付先住所手動入力フラグ
		inMap.put(EKK0491C060CBSMsg.SOHUS_AD_MAN_INPUT_FLG, ccParam.get("sohus_ad_man_input_flg"));
		// 送付先住所チェックレベル
		inMap.put(EKK0491C060CBSMsg.SOHUS_AD_CHK_LV, (String)ccParam.get("sohus_ad_chk_lv"));
		
		HashMap<String, Object> paramMap = JKKBpCommon.createScParam(param, "EKK0491C060", EKK0491C060CBSMsg.class, inMap, funcCd);

		JKKBpCommon.printBpDebugLog(this.getClass(), "SC呼び出し開始");
		Map<?, ?> result =  new ServiceComponentRequestInvoker().run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "SC呼び出し完了" + result);

		return result;
	}
}
