/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetMskmRouteCC
*   ソースファイル名：JFUGetMskmRouteCC.java
*   作成者          ：富士通
*   日付            ：2024年02月05日
*＜機能概要＞
*   申込経路取得コモンコンポーネント部品（BP）
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
 *   v70.00      2024/02/05   FJ) 美濃原    【ANK-4551-00-00】202404CP対応
*   
**********************************************************************/
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.EKK2391B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2391B501CBSMsg1List;

/**
 * 申込経路判定コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
public class JFUGetMskmRouteCC extends JFUBaseCC
{

	// ■IN項目
	/** 取扱コード */
	private static final String IN_TRAT_CD = "trat_Cd";
	/** WEB割商品券（代理店） 例：DT4000006、DT4000008 */
	private static final String IN_TICKET_LIST = "ticket_List";
	/** WEB割商品券（GMS代理店） 例：DT4000008 **/
	private static final String IN_GMS_TICKET = "gms_ticket";

	// ■OUT項目
	/** 商品券自動適用代理店   旧：autoCampaignAgnt */
	private static final String AUTO_CAMPAIGN_AGNT = "auto_campaign_agnt";
	/** 量販店種別 */
	private static final String RYOHAN_KIND = "ryohan_kind";

	/** ON **/
	private static final String FLG_ON = "1";

	
	// ■データ抽出項目設定条件一覧照会（その他CP）
	/** テンプレートID データ抽出項目設定条件一覧照会（その他CP） */
	private static final String TEMP_ID_EKK2391B501 = "EKK2391B501";
	/** テンプレートID(明細) データ抽出項目設定条件一覧照会（その他CP） */
	private static final String TEMP_DTL_EKK2391B501 = EKK2391B501CBSMsg.EKK2391B501CBSMSG1LIST;
	/** IN項目リスト データ抽出項目設定条件一覧照会（その他CP） */
	private static final List<String> IN_COLUMN_LIST_EKK2391B501 =
			Arrays.asList(EKK2391B501CBSMsg.KEY_KJNYMD, EKK2391B501CBSMsg.KEY_DCHSKM_SETE_JKN_SBT_CD, EKK2391B501CBSMsg.KEY_DCHSKM_SETE_JKN_VALUE_1);
	/** 関連チェックエラー項目 データ抽出項目設定条件一覧照会（その他CP） */
	private static final String ERROR_COLUMN_EKK2391B501 = EKK2391B501CBSMsg.KEY_DCHSKM_SETE_JKN_VALUE_1_ERR;

	/**
	 * 申込経路判定処理<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getMskmRoute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 代理店用キャンペーンコード取得
		List<String> ticketList = new ArrayList<String>();
		List<String> gmsList = new ArrayList<String>();

		if (inMap.containsKey(IN_TICKET_LIST))
		{
			String chicketList = (String)inMap.get(IN_TICKET_LIST);
			ticketList = Arrays.asList(chicketList.split(JFUStrConst.COMMA));
		}
		if (inMap.containsKey(IN_GMS_TICKET))
		{
			String chicketList = (String)inMap.get(IN_GMS_TICKET);
			gmsList = Arrays.asList(chicketList.split(JFUStrConst.COMMA));
		}

		// ●データ抽出項目設定条件一覧照会（その他CP）
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_EKK2391B501);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapEKK2391B501_tratcd(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK2391B501, TEMP_DTL_EKK2391B501, IN_COLUMN_LIST_EKK2391B501, ERROR_COLUMN_EKK2391B501);
		// データ抽出項目設定条件一覧照会（その他CP）のデータ抽出項目設定一覧明細を取得
		ArrayList<HashMap> resEKK2391B501List_tratcd = getDTLList((HashMap)param.getData(fixedText), TEMP_DTL_EKK2391B501);

		String autoCampaignAgnt = JFUStrConst.EMPTY;
		String ryohanKind = JFUStrConst.MSKM_ROUTE_RYOHAN;
		// ●繰り返し処理１
		// データ抽出項目設定条件一覧照会（その他CP）の結果件数分ループ
		for (HashMap mapEKK2391B501 : resEKK2391B501List_tratcd)
		{
			String dchskmCd = JFUStrConst.EMPTY;
			// データ抽出項目取得
			if (!JFUBPCommon.isNull(mapEKK2391B501.get(EKK2391B501CBSMsg1List.DCHSKM_CD)))
			{
				dchskmCd = (String)mapEKK2391B501.get(EKK2391B501CBSMsg1List.DCHSKM_CD);
				dchskmCd = dchskmCd.replace(JFUStrConst.HALF_SPACE, JFUStrConst.EMPTY);
			}

			if (dchskmCd.length() == 0)
			{
				// データ抽出項目コードが未設定の場合は、次のデータへ
				continue;
			}

			// 代理店指定の商品券がWEB割の場合
			if (ticketList.contains(dchskmCd))
			{
				autoCampaignAgnt = FLG_ON;
				ryohanKind = JFUStrConst.MSKM_ROUTE_RYOHAN_AGNT_NOT_GMS;
			}
			// 代理店指定の商品券がWEB割の場合
			if (gmsList.contains(dchskmCd))
			{
				ryohanKind = JFUStrConst.MSKM_ROUTE_RYOHAN_AGNT_GMS;
			}
		}
		param.setData(AUTO_CAMPAIGN_AGNT, autoCampaignAgnt);
		param.setData(RYOHAN_KIND, ryohanKind);

		return param;
	}

	/**
	 * 上りマッピング項目を設定します。(データ抽出項目設定条件一覧照会（その他CP）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK2391B501_tratcd(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿基準年月日
		inMap.put(EKK2391B501CBSMsg.KEY_KJNYMD, JCCBPCommon.getOpeDate(null));
		// ＫＥＹ＿データ抽出項目設定条件種別コード
		inMap.put(EKK2391B501CBSMsg.KEY_DCHSKM_SETE_JKN_SBT_CD, JFUStrConst.CD01360_06);
		// ＫＥＹ＿データ抽出項目設定条件値1
		inMap.put(EKK2391B501CBSMsg.KEY_DCHSKM_SETE_JKN_VALUE_1, inMap.get(IN_TRAT_CD));

	}

	/**
	 * 明細リストを返却します。
	 * <br>
	 * @param dataMap INマップ
	 * @param listNm リスト名
	 * @return 検索結果リスト
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap> getDTLList(HashMap dataMap, String listNm)
	{
		// 結果格納用リスト
		ArrayList<HashMap> resultList = new ArrayList<HashMap>();
		// リスト内検索
		ArrayList childList = (ArrayList)dataMap.get(listNm);

		if (childList != null && childList.size() > 0)
		{
			for (int j = 0; j < childList.size(); j++)
			{
				HashMap childMap = (HashMap)childList.get(j);
				resultList.add(childMap);
			}
		}

		return resultList;
	}

	/**h
	 * チェック処理（共通処理）
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

}
