/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUCngSvcKeiTv04CC
*   ソースファイル名：JFUCngSvcKeiTv04CC.java
*   作成者          ：富士通
*   日付            ：2013年10月16日
*＜機能概要＞
*   eo光テレビ登録(通知書登録CCマッピング)コンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00       2013/10/16   FJ）中谷    新規作成【OM-2013-0002803】通知書登録対応
*	v26.00      2016/06/30   FJ) 張本    【ANK-2687-00-00】プレミアムサポート施策
*   
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

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.common.JCMConstants;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C013CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0031D010CBSMsg;

/**
 * eo光テレビ登録(通知書登録CCマッピング)コンポーネント部品です。
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUCngSvcKeiTv04CC extends JFUBaseTvChgCommonCC
{
	/** サービス契約番号(eo光テレビ登録(コース変更)CC) */
	private static final String SC_FIXED_TEXT_SVC_KEI_NO = "FUSV012701CC";
	/** 申込書番号(申込書番号採番SC) */
	private static final String SC_FIXED_TEXT_MSKMSHO_NO = "FUSV012712SC";
	/** 申込明細番号(申込内容承認登録SC) */
	private static final String SC_FIXED_TEXT_MSKM_DTL_NO = "FUSV012701SC";
	/** 工事案件番号(工事案件(eo光テレビ)受付SC) */
	private static final String SC_FIXED_TEXT_KOJIAK_NO = "FUSV012706SC";
	/** 通知書登録CC */
	private static final String SC_FIXED_TEXT_TCHISHO = "FUSV012710CC";
	/** チケット利用申請依頼CC */
	private static final String SC_FIXED_TEXT_TICKET = "FUSV012714CC";

	/** チケット利用申請依頼CC チケット利用申請依頼リスト*/
	private static final String TICKET_IRAI_LIST = "ticket_use_shin_irai_list";
	/** チケット利用申請依頼CC キャンペーン登録契機対象キー1*/
	private static final String TICKET_IRAI_KEY1 = "cmp_add_optnty_tg_key_1";

	/** マップキー:サービス契約番号 */
	private static final String KK0081_SVC_KEI_NO = "kk0081_svc_kei_no";

	/* ■□ サービス契約一意照会SC ■□ */
	/** テンプレートID(サービス契約一意照会) */
	private static final String TEMPLATE_ID_1 = "EKK0081A010";
	/** テンプレートID(サービス契約一意照会明細) */
	private static final String TEMPLATE_ID_1_DETAIL = EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST;
	/** IN項目リスト(サービス契約一意照会) */
	private static final List<String> IN_COLUMN_LIST_1 =
			Arrays.asList(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, EKK0081A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェックエラー項目(サービス契約一意照会) */
	private static final String ERROR_COLUMN_1 = EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(サービス契約一意照会) */
	private static final String TEMP_TEMPLATE_KEY_1 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_1 + TEMP_TEMPLATE_PRIFIX_SEP;

	/**
	 * 通知書登録部品CC情報マッピング
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite tchishoMapping(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		try
		{

			HashMap inMap = new HashMap();
			param.setData(fixedText, inMap);

			// ユーザデータ取得(サービス契約番号)
			HashMap svcKeiNoMap = (HashMap)param.getData(SC_FIXED_TEXT_SVC_KEI_NO);
			// サービス契約番号
			String svcKeiNo = (String)svcKeiNoMap.get(KK0081_SVC_KEI_NO);
			// 機能コード
			String funcCd = (String)svcKeiNoMap.get(JCMConstants.FUNC_CODE_KEY);

			// チェックのみの場合は処理無し
			if (JPCModelConstant.FUNC_CD_2.equals(funcCd))
			{
				super.tchishoMappingNoChg(param, SC_FIXED_TEXT_TCHISHO);
				return param;
			}

			// ユーザデータ取得(申込書番号)
			HashMap mskmshoNoMap = (HashMap)param.getData(SC_FIXED_TEXT_MSKMSHO_NO);
			// 申込書番号
			String mskmshoNo = (String)mskmshoNoMap.get(EKK0021C013CBSMsg.MSKMSHO_NO);

			// ユーザデータ取得(申込明細番号)
			HashMap mskmDtlNoMap = (HashMap)param.getData(SC_FIXED_TEXT_MSKM_DTL_NO);
			List list = (ArrayList)mskmDtlNoMap.get(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
			// 申込明細番号
			String mskmDtlNo = (String)((HashMap)list.get(JFUStrConst.I_ZERO)).get(EKK0011D020CBSMsg1List.MSKM_DTL_NO);

			// ユーザデータ取得(工事案件番号)
			HashMap kojiakNoMap = (HashMap)param.getData(SC_FIXED_TEXT_KOJIAK_NO);
			// 工事案件番号
			String kojiakNo = (String)kojiakNoMap.get(EKU0031D010CBSMsg.KOJIAK_NO);

			// ●サービス契約一意照会
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_1);
			// 上りマッピング
			setInMapSvcKeiSearch(param, fixedText, svcKeiNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_1, TEMPLATE_ID_1_DETAIL, IN_COLUMN_LIST_1, ERROR_COLUMN_1);
			// SYSID
			String sysid =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_1), TEMPLATE_ID_1_DETAIL,
							EKK0081A010CBSMsg1List.SYSID, JFUStrConst.I_ZERO);
			// 料金グループコード
			String prcGrpCd =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_1), TEMPLATE_ID_1_DETAIL,
							EKK0081A010CBSMsg1List.PRC_GRP_CD, JFUStrConst.I_ZERO);

			// ●通知書登録CCマッピング
			super.tchishoMapping(param, svcKeiNo, prcGrpCd, sysid, null, mskmDtlNo, kojiakNo, mskmshoNo, SC_FIXED_TEXT_TCHISHO);

			// ●チケット申請一覧に工事案件番号を設定
			// STB追加を伴う場合はeo光テレビSTB追加変更申込(JFUEoTvCngAddStbCC)にて設定
			setTicketIraiCC(param, kojiakNo, SC_FIXED_TEXT_TICKET);
		}
		finally
		{
			// 一時領域削除
			super.deleteTempArea(param, fixedText);
		}
		return param;
	}

	/**
	 * 上りマッピング項目設定(サービス契約一意照会）
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svckeiNo SVC_KEI_NO
	 * @throws RequestParameterException
	 */
	private void setInMapSvcKeiSearch(IRequestParameterReadWrite param, String fixedText, String svckeiNo) throws RequestParameterException
	{
		// 機能コード設定(2:カレント)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約番号
		inMap.put(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svckeiNo);
		// 予約適用年月日
		inMap.put(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));
	}


	/**
	 * チケット利用申請依頼CCの上りマッピングを設定する
	 * @param param リクエストパラメータ
	 * @param cmpAddOptntyTgKey キャンペーン登録対象キー
	 * @throws RequestParameterException
	 */
	private void setTicketIraiCC(IRequestParameterReadWrite param, String cmpAddOptntyTgKey, String ScFixedText) throws RequestParameterException
	{
		// チケット利用申請依頼CCマップ
		HashMap<String, Object> parentMap = (HashMap<String, Object>)param.getData(ScFixedText);

		ArrayList list = null;

		// チケット利用申請依頼リスト
		if (parentMap.containsKey(TICKET_IRAI_LIST))
		{
			list = (ArrayList)parentMap.get(TICKET_IRAI_LIST);
		}
		else
		{
			return;
		}

		for (int i = 0; i < list.size(); i++)
		{
			HashMap childMap = (HashMap)list.get(i);
			// チケット利用申請依頼リスト.キャンペーン登録契機対象キー1
			childMap.put(TICKET_IRAI_KEY1, cmpAddOptntyTgKey);
		}
		parentMap.put(TICKET_IRAI_LIST, list);
	}

}
