/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetOptinmInfoCC
*   ソースファイル名：JFUGetOptinmInfoCC.java
*   作成者          ：富士通
*   日付            ：2016年09月21日
*＜機能概要＞
*  オプトインメール情報取得コモンコンポーネント部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v27.00      2016/09/21   FJ)岡井     【ANK-2987-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.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECK0141B002CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0141B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0141B005CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B002CBSMsg;

/**
 * オプトインメール情報取得部品です。
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUGetOptinmInfoCC extends JFUBaseCC
{
	/* ■□ ECK0141B002_オプトインメール一覧照会SC ■□ */
	/** テンプレートID(オプトインメール一覧照会) */
	private static final String TEMP_ID_ECK0141B002 = "ECK0141B002";
	/** テンプレートID(オプトインメール一覧照会明細) */
	private static final String TEMP_ID_DTL_ECK0141B002 = ECK0141B002CBSMsg.ECK0141B002CBSMSG1LIST;
	/** IN項目リスト(オプトインメール一覧照会) */
	private static final List<String> IN_LIST_ECK0141B002 = Arrays.asList(ECK0141B002CBSMsg.KEY_OPE_YMD);
	/** 関連チェックエラー項目(オプトインメール一覧照会) */
	private static final String ERR_ECK0141B002 = ECK0141B002CBSMsg.KEY_OPE_YMD_ERR;
	/** SC実行結果取得キー(オプトインメール一覧照会) */
	private static final String TEMP_TEMP_KEY_ECK0141B002 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_ECK0141B002 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ ECK0141B005_オプトインメール受信設定一覧照会(SYSID)２SC ■□ */
	/** テンプレートID(オプトインメール受信設定一覧照会(SYSID)２) */
	private static final String TEMP_ID_ECK0141B005 = "ECK0141B005";
	/** テンプレートID(オプトインメール受信設定一覧照会(SYSID)２明細) */
	private static final String TEMP_ID_DTL_ECK0141B005 = ECK0141B005CBSMsg.ECK0141B005CBSMSG1LIST;
	/** IN項目リスト(オプトインメール受信設定一覧照会(SYSID)２) */
	private static final List<String> IN_LIST_ECK0141B005 = Arrays.asList(ECK0141B005CBSMsg.KEY_SYSID);
	/** 関連チェックエラー項目(オプトインメール受信設定一覧照会(SYSID)２) */
	private static final String ERR_ECK0141B005 = ECK0141B005CBSMsg.KEY_SYSID_ERR;
	/** SC実行結果取得キー(オプトインメール受信設定一覧照会(SYSID)２) */
	private static final String TEMP_TEMP_KEY_ECK0141B005 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_ECK0141B005 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ ECK0201B002_連絡先(コンテンツ用メールアドレス)一覧照会SC ■□ */
	/** テンプレートID(連絡先(コンテンツ用メールアドレス)一覧照会) */
	private static final String TEMP_ID_ECK0201B002 = "ECK0201B002";
	/** テンプレートID(連絡先(コンテンツ用メールアドレス)一覧照会明細) */
	private static final String TEMP_ID_DTL_ECK0201B002 = ECK0201B002CBSMsg.ECK0201B002CBSMSG1LIST;
	/** IN項目リスト(連絡先(コンテンツ用メールアドレス)一覧照会) */
	private static final List<String> IN_LIST_ECK0201B002 = Arrays.asList(ECK0201B002CBSMsg.KEY_SYSID);
	/** 関連チェックエラー項目(連絡先(コンテンツ用メールアドレス)一覧照会) */
	private static final String ERR_ECK0201B002 = ECK0201B002CBSMsg.KEY_SYSID_ERR;
	/** SC実行結果取得キー(連絡先(コンテンツ用メールアドレス)一覧照会) */
	private static final String TEMP_TEMP_KEY_ECK0201B002 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_ECK0201B002 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ IN項目 ■□ */
	/** IN：機能コード */
	private static final String IN_FUNC_CD = "func_cd";
	/** IN：SYSID */
	private static final String IN_SYSID = "sysid";

	/* ■□ OUT項目 ■□ */
	/** OUT：オプトインメール設定フラグ */
	private static final String OUT_OPTINM_SETTEI_FLG = "optinm_settei_flg";
	/** OUT：オプトインメールリスト */
	private static final String OUT_OPTINM_LIST = "optinm_list";

	/* ■□ その他 ■□ */
	/** オプトインメール設定フラグ 0：未設定 */
	private static final String OPTINM_SETTEI_FLG_0 = "0";
	/** オプトインメール設定フラグ 1：設定済 */
	private static final String OPTINM_SETTEI_FLG_1 = "1";

	/**
	 * オプトインメール情報取得処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		if (inMap == null || inMap.size() == 0)
		{
			// 情報が存在しない場合
			return param;
		}

		// 機能コード
		String funcCd = (String)inMap.get(IN_FUNC_CD);

		// ●ECK0141B002_オプトインメール一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_ECK0141B002);
		// 上りマッピング
		setECK0141B002(param, fixedText);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_ECK0141B002, TEMP_ID_DTL_ECK0141B002, IN_LIST_ECK0141B002, ERR_ECK0141B002);
		// 下りマッピング
		getECK0141B002(param, fixedText);

		if (!JPCModelConstant.FUNC_CD_2.equals(funcCd))
		{
			// 機能コードが「2」(チェック実施)以外の場合
			inMap.put(OUT_OPTINM_SETTEI_FLG, OPTINM_SETTEI_FLG_0);
			return param;
		}

		// ●ECK0141B005_オプトインメール受信設定一覧照会(SYSID)２
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_ECK0141B005);
		// 上りマッピング
		setECK0141B005(param, fixedText);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_ECK0141B005, TEMP_ID_DTL_ECK0141B005, IN_LIST_ECK0141B005, ERR_ECK0141B005);
		// 結果取得
		List<HashMap> eCK0141B005List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_ECK0141B005), TEMP_ID_DTL_ECK0141B005);

		// ●ECK0201B002_連絡先(コンテンツ用メールアドレス)一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_ECK0201B002);
		// 上りマッピング
		setECK0201B002(param, fixedText);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_ECK0201B002, TEMP_ID_DTL_ECK0201B002, IN_LIST_ECK0201B002, ERR_ECK0201B002);
		// 結果取得
		List<HashMap> eCK0201B002List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_ECK0201B002), TEMP_ID_DTL_ECK0201B002);

		if ((eCK0141B005List == null || eCK0141B005List.size() == 0)
				|| (eCK0201B002List == null || eCK0201B002List.size() == 0))
		{
			// オプトインメール受信設定、または、連絡先(コンテンツ用メールアドレス)が存在しない場合
			inMap.put(OUT_OPTINM_SETTEI_FLG, OPTINM_SETTEI_FLG_0);
		}
		else
		{
			// オプトインメール受信設定、連絡先(コンテンツ用メールアドレス)が存在する場合
			inMap.put(OUT_OPTINM_SETTEI_FLG, OPTINM_SETTEI_FLG_1);
		}

		return param;
	}

	/**
	 * チェック処理（共通処理）です。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * オプトインメール一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void setECK0141B002(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿運用年月日
		inMap.put(ECK0141B002CBSMsg.KEY_OPE_YMD, JFUBPCommon.getOpeDate(null));
	}

	/**
	 * オプトインメール一覧照会の下りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void getECK0141B002(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 結果取得
		List<HashMap> eCK0141B002List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_ECK0141B002), TEMP_ID_DTL_ECK0141B002);
		ArrayList optinmList = new ArrayList();

		if (eCK0141B002List != null && eCK0141B002List.size() > 0)
		{
			// 結果が存在する場合
			for (HashMap eCK0141B002Map : eCK0141B002List)
			{
				HashMap map = new HashMap();

				map.put(ECK0141B002CBSMsg1List.OPTINM_NO, eCK0141B002Map.get(ECK0141B002CBSMsg1List.OPTINM_NO));
				map.put(ECK0141B002CBSMsg1List.OPTINM_NM, eCK0141B002Map.get(ECK0141B002CBSMsg1List.OPTINM_NM));
				map.put(ECK0141B002CBSMsg1List.SHK_VALUE_FLG, eCK0141B002Map.get(ECK0141B002CBSMsg1List.SHK_VALUE_FLG));

				optinmList.add(map);
			}
		}

		// 結果格納
		inMap.put(OUT_OPTINM_LIST, optinmList);
	}

	/**
	 * オプトインメール受信設定一覧照会(SYSID)２の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void setECK0141B005(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿ＳＹＳＩＤ
		inMap.put(ECK0141B005CBSMsg.KEY_SYSID, inMap.get(IN_SYSID));
	}

	/**
	 * 連絡先(コンテンツ用メールアドレス)一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void setECK0201B002(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿ＳＹＳＩＤ
		inMap.put(ECK0201B002CBSMsg.KEY_SYSID, inMap.get(IN_SYSID));
	}
}
