/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKGetSvcPaywayCC
*   ソースファイル名：JKKGetSvcPaywayCC.java
*   作成者          ：富士通
*   日付            ：2011年06月13日
*＜機能概要＞
*   支払方法照会部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00    2013/04/11   FJ）三浦    新規作成
**********************************************************************/
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.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.util.JKKCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK0491B507CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B507CBSMsg1List;

/**
 * 督促情報の照会を行います。
 * <br>
 * @author 富士通
 */
public class JKKGetTokusokuCC extends AbstractCommonComponent implements ICommonComponent
{

	/**
	 * 督促情報照会処理
	 * <br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getTokusoku(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);
		
		if(ccParam == null)
		{
			return param;
		}

		// サービス契約番号
		String svcKeiNo = (String)ccParam.get("key_svc_kei_no");
		
		if(JKKCommonUtil.isNull(svcKeiNo))
		{
			return param;
		}
		
		/****************************************************/
		/** 請求契約一覧照会（サービス契約番号）            */
		/****************************************************/
		result = callGetSikykeiListSc(handle, param, svcKeiNo);
		if (JKKBpCommon.isSuccess(result))
		{
			String listNamePre = EKK0491B507CBSMsg.EKK0491B507CBSMSG1LIST + "[0].";

			// 督促ステータス
			setDataMap(userMap, "tokusoku_stat_cd", JKKBpCommon.getResultString(result, listNamePre + EKK0491B507CBSMsg1List.TOKUSOKU_STAT));
		}
		else
		{
			errFlgCc = "1";
			JKKBpCommon.setResultCtrlData(param, result);
		}

		/***************************************************/
		/** 下りデータマッピング処理開始                   */
		/***************************************************/
		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 サービス契約番号
	 * @return 実行結果
	 * @throws Throwable
	 */
	private Map<?, ?> callGetSikykeiListSc(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo)
			throws Throwable
	{

		/**************************************************************************/
		/** 請求契約一覧照会（サービス契約番号）SCへの上りマッピング              */
		/**************************************************************************/
		String funcCd = "1";
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0491B507CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0491B507", EKK0491B507CBSMsg.class , inMap, funcCd);

		/**************************************************************************/
		/** ＳＣ呼出実行                                                          */
		/**************************************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "請求契約一覧照会（サービス契約番号）SC呼び出し開始（ サービス契約番号：" + svcKeiNo + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "請求契約一覧照会（サービス契約番号）SC呼び出し完了" + result);

		return result;
	}

	/**
	 * ＢＰチェック用の入力パラメータを作成する。
	 * <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);
		}
	}
}
