/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetSpMskmCC
*   ソースファイル名：JFUGetSpMskmCC.java
*   作成者          ：富士通
*   日付            ：2017年04月17日
*＜機能概要＞
*   セキュリティパック申込取得コモンコンポーネント部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*  v32.0.0     2017/04/17   FJ)横山    【ANK-3149-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 eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0451B010CBSMsg;

/**
 * セキュリティパック申込を取得する。
 * <br>
 * @author 富士通
 */

public class JFUGetSpMskmCC extends JFUGetNetOpSvKeiCC
{
	/* ===== パラメータ ===== */
	/** KEY_サービス契約番号 */
	private static final String KEY_SVC_KEI_NO = "svc_kei_no";

	/** MAP */
	private static final String SecPacMskmDspList = "SecPacMskmDspList";

	/** ファミリーパック */
	private static final String FAMIPA_KEI_UM = "famipa_kei_um";

	/** セキュリティーパック */
	private static final String SECPA_KEI_UM = "secpa_kei_um";

	/** プレミアムパック */
	private static final String PREPA_KEI_UM = "prepa_kei_um";

	/* ■□ EKK0451B010_割引サービス契約一覧照会（割引サービス指定）SC ■□ */
	/** テンプレートID(割引サービス契約一覧照会（割引サービス指定）) */
	private static final String TEMP_ID_EKK0451B010 = "EKK0451B010";
	/** テンプレートID(明細)(割引サービス契約一覧照会（割引サービス指定）) */
	private static final String TEMP_ID_DTL_EKK0451B010 = EKK0451B010CBSMsg.EKK0451B010CBSMSG1LIST;
	/** IN項目リスト(割引サービス契約一覧照会（割引サービス指定）) */
	private static final List<String> IN_COL_LIST_EKK0451B010 = Arrays.asList(EKK0451B010CBSMsg.KEY_SVC_KEI_NO, EKK0451B010CBSMsg.KEY_WRIB_SVC_CD);
	/** 関連チェックエラー項目(割引サービス契約一覧照会（割引サービス指定）) */
	private static final String ERR_COL_EKK0451B010 = EKK0451B010CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMP_TEMP_KEY_EKK0451B010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0451B010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/**
	 * セキュリティパック申込取得処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 結果マップ
		HashMap<String, String> resultMap = new HashMap<String, String>();

		// -----------------------------------------------------
		// ■リクエストパラメータ取得
		// -----------------------------------------------------
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// サービス契約番号を取得
		String svcKeiNo = (String)inMap.get(KEY_SVC_KEI_NO);

		// ==============================================================================================================
		// ■ ファミリーパック契約確認
		// ==============================================================================================================
		// ○EKK0451B010_割引サービス契約一覧照会（割引サービス指定）
		// 上りマッピング
		setInMapEKK0451B010(param, fixedText, svcKeiNo);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK0451B010, TEMP_ID_DTL_EKK0451B010, IN_COL_LIST_EKK0451B010, ERR_COL_EKK0451B010);
		// 〇ファミリーパック申込有無
		String famipaMskmUmu = JFUStrConst.CD00002_0; // "0"：無
		if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0451B010), TEMP_ID_DTL_EKK0451B010))
		{
			// 割引サービス契約ステータス
			famipaMskmUmu = JFUStrConst.CD00002_1; // "1"：有
		}

		// ==============================================================================================================
		// ■ セキュリティパック契約確認
		// ==============================================================================================================
		// ○EKK0451B010_割引サービス契約一覧照会（割引サービス指定）
		// 上りマッピング
		setInMapEKK0451B010Sec(param, fixedText, svcKeiNo);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK0451B010, TEMP_ID_DTL_EKK0451B010, IN_COL_LIST_EKK0451B010, ERR_COL_EKK0451B010);
		// 〇セキュリティパック申込有無
		String secpaMskmUmu = JFUStrConst.CD00002_0; // "0"：無
		if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0451B010), TEMP_ID_DTL_EKK0451B010))
		{
			// 割引サービス契約ステータス
			secpaMskmUmu = JFUStrConst.CD00002_1; // "1"：有
		}

		// ==============================================================================================================
		// ■ プレミアムパック契約確認
		// ==============================================================================================================
		// ○EKK0451B010_割引サービス契約一覧照会（割引サービス指定）
		// 上りマッピング
		setInMapEKK0451B010Pre(param, fixedText, svcKeiNo);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK0451B010, TEMP_ID_DTL_EKK0451B010, IN_COL_LIST_EKK0451B010, ERR_COL_EKK0451B010);
		// 〇プレミアムパック申込有無
		String prepaMskmUmu = JFUStrConst.CD00002_0; // "0"：無
		if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0451B010), TEMP_ID_DTL_EKK0451B010))
		{
			// 割引サービス契約ステータス
			prepaMskmUmu = JFUStrConst.CD00002_1; // "1"：有
		}

		HashMap<Object, Object> retOpMap = new HashMap<Object, Object>();
		retOpMap.put(FAMIPA_KEI_UM, famipaMskmUmu);
		retOpMap.put(SECPA_KEI_UM, secpaMskmUmu);
		retOpMap.put(PREPA_KEI_UM, prepaMskmUmu);
		setReturnDataMap(resultMap, SecPacMskmDspList, retOpMap);

		param.setData(fixedText, resultMap);

		//取得結果をユーザデータに設定する
		return param;
	}

	/**
	 * 上りマッピング項目設定(割引サービス契約一覧照会（割引サービス指定）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0451B010(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:抽出条件に一致するレコードの一覧照会を行う)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0451B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿割引サービスコード
		inMap.put(EKK0451B010CBSMsg.KEY_WRIB_SVC_CD, JFUStrConst.KK0841_WRIB_SVC_CD_FAMIPA);

	}

	/** 2017/04/10 ANK-3149-00-00 add start */

	/**
	 * 上りマッピング項目設定(割引サービス契約一覧照会（割引サービス指定）（セキュリティパック）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0451B010Sec(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:抽出条件に一致するレコードの一覧照会を行う)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0451B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿割引サービスコード
		inMap.put(EKK0451B010CBSMsg.KEY_WRIB_SVC_CD, JFUStrConst.KK0841_WRIB_SVC_CD_SECUPA);

	}

	/**
	 * 上りマッピング項目設定(割引サービス契約一覧照会（割引サービス指定）（プレミアムパック）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0451B010Pre(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:抽出条件に一致するレコードの一覧照会を行う)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0451B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿割引サービスコード KK0841_WRIB_SVC_CD_PREPA
		inMap.put(EKK0451B010CBSMsg.KEY_WRIB_SVC_CD, JFUStrConst.KK0841_WRIB_SVC_CD_PREPA);

	}

	/**
	 * 下りマッピング項目設定(マップ値)
	 * <br>
	 * @param resultMap
	 * @param retKey
	 * @param tempMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setReturnDataMap(HashMap resultMap, String retKey, HashMap tempMap) throws RequestParameterException
	{
		// リターンマップに返却値を設定
		ArrayList<Object> retlist = (ArrayList<Object>)resultMap.get(retKey);
		if (retlist == null)
		{
			retlist = new ArrayList<Object>();
		}
		retlist.add(tempMap);
		// ソート(表示順、サービス契約番号の昇順)
		resultMap.put(retKey, retlist);

	}

}
