/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0218_FUSV0218OPDBMapper
*	ソースファイル名：FUSV0218_FUSV0218OPDBMapper.java
*	作成者			：FJ
*	日付			：2012年07月31日
*＜機能概要＞
*	BP（割引キャンペーンコード一覧紹介（紹介コード））へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/07/31	FJ		新規作成
*   v54.00.00   2021/07/19  FJ）美濃原 【ANK-4078-00-00】提携先企業向けエントリーコードの訪販量販webへの導入対応
*   v62.00      2022/11/17	FJ) 大槻   【ANK-4294-00-00】紹介CPの仕組み変更対応
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.FUW00905SF.FUW00905SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class FUSV0218_FUSV0218OPDBMapper
{

	/** マップキー 紹介コード */
	private static final String MAPKEY_KEY_INTR_CD = "intr_cd";

	/** マップキー クーポンコード */
	private static final String MAPKEY_KEY_COUPON_CD = "coupon_cd";

	/** マップキー 紹介者チェックCC */
	private static final String MAPKEY_KEY_FUSV021803CC = "FUSV021803CC";

	/** INPUT：業務パラメータID */
	private static final String IN_WORK_PARAM_ID = "key_work_param_id";

	/**
	 * コンストラクタ
	 */
	public FUSV0218_FUSV0218OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：メニュー（量販・訪販）
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	public HashMap setFUSV021802SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, X31BWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 取扱コード → 代理店一意照会SCマップ.ＫＥＹ＿代理店コード
		parentMap.put("key_agnt_cd", bean[0].sendMessageString("取扱コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 予約適用年月日 → 代理店一意照会SCマップ.ＫＥＹ＿予約適用年月日
		parentMap.put("key_rsv_aply_ymd", JCCWebCommon.getOpeDate(bl, null));

		outputMap.put("FUSV021802SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：メニュー（量販・訪販）
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	public HashMap setFUSV021803SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 基準年月日 → 割引サービス適用条件一覧照会（その他CP）SCマップ.ＫＥＹ＿基準年月日
		parentMap.put("key_kjnymd", bean[0].sendMessageString("基準年月日", X31CWebConst.DATABEAN_GET_VALUE));
		// 割引サービス適用条件種別コード → 割引サービス適用条件一覧照会（その他CP）SCマップ.ＫＥＹ＿割引サービス適用条件種別コード
		parentMap.put("key_wrsv_aply_jkn_sbt_cd", bean[0].sendMessageString("割引サービス適用条件種別コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 取扱コード → 割引サービス適用条件一覧照会（その他CP）SCマップ.ＫＥＹ＿割引サービス適用条件値1
		parentMap.put("key_wrsv_aply_jkn_value_1", bean[0].sendMessageString("取扱コード", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV021803SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：メニュー（量販・訪販）
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	public HashMap setFUSV021804SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 基準年月日 → データ抽出項目設定条件一覧照会（その他CP）SCマップ.ＫＥＹ＿基準年月日
		parentMap.put("key_kjnymd", bean[0].sendMessageString("基準年月日", X31CWebConst.DATABEAN_GET_VALUE));
		// 割引サービス適用条件種別コード → データ抽出項目設定条件一覧照会（その他CP）SCマップ.ＫＥＹ＿データ抽出項目設定条件種別コード
		parentMap.put("key_dchskm_sete_jkn_sbt_cd", bean[0].sendMessageString("割引サービス適用条件種別コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 取扱コード → データ抽出項目設定条件一覧照会（その他CP）SCマップ.ＫＥＹ＿データ抽出項目設定条件値1
		parentMap.put("key_dchskm_sete_jkn_value_1", bean[0].sendMessageString("取扱コード", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV021804SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする　業務パラメータ
	 * eoエントリーコード（有効期限あり）のコード体系
	 * @param outputMap
	 */
	public HashMap setFUSV021801CC(HashMap outputMap)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", JPCModelConstant.FUNC_CD_1);

		// ■ＫＥＹ＿業務パラメータID
		parentMap.put(IN_WORK_PARAM_ID, JFUStrConst.FU_EO_ENTRY_YK_KIGEN);

		outputMap.put("FUSV021801CC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする　業務パラメータ
	 * 通常の紹介コード（紹介コード独自チェック対象）のコード体系
	 * @param outputMap
	 * @return
	 */
	public HashMap setFUSV021802CC(HashMap outputMap)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", JPCModelConstant.FUNC_CD_1);

		// ■ＫＥＹ＿業務パラメータID
		parentMap.put(IN_WORK_PARAM_ID, JFUStrConst.KK_INTRCD_CHK_TG);

		outputMap.put("FUSV021802CC", parentMap);

		return outputMap;
	}

	/**
	* 下りマッピング
	* @param bean　[0]：メニュー（量販・訪販）
	* @param outputMap
	*/
	public X31SDataBeanAccess[] getFUSV021802SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV021802SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV021802SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listFUSV021802SC_other_cmp_list_select_EKK0061A010CBSMsg1List = bean[0].getDataBeanArray("その他キャンペーンリスト（選択リスト用）");
		childList = null;
		if (listFUSV021802SC_other_cmp_list_select_EKK0061A010CBSMsg1List != null && parentMap != null
				&& parentMap.containsKey("EKK0061A010CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK0061A010CBSMsg1List");

			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;
				if (listFUSV021802SC_other_cmp_list_select_EKK0061A010CBSMsg1List.getCount() - 1 >= i)
				{
					subbean = listFUSV021802SC_other_cmp_list_select_EKK0061A010CBSMsg1List.getDataBean(i);
				}
				else
				{
					subbean = listFUSV021802SC_other_cmp_list_select_EKK0061A010CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null)
				{
					continue;
				}

				// その他キャンペーンリスト（選択リスト用）.その他キャンペーンコード ← 代理店一意照会SCマップ.代理店一意照会明細.依頼先訪問サポート会社コード
				if (childMap != null)
				{
					subbean.sendMessageString("その他キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("req_sk_vsit_sprt_comp_cd"));
				}
				else
				{
					subbean.sendMessageString("その他キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：メニュー（量販・訪販）
	 * @param outputMap
	 */
	public X31SDataBeanAccess[] getFUSV021803SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV021803SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV021803SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listFUSV021803SC_toriten_cmp_list_EKK2311B506CBSMsg1List = bean[0].getDataBeanArray("取扱店キャンペーンリスト");
		childList = null;
		if (listFUSV021803SC_toriten_cmp_list_EKK2311B506CBSMsg1List != null && parentMap != null && parentMap.containsKey("EKK2311B506CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK2311B506CBSMsg1List");

			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;
				if (listFUSV021803SC_toriten_cmp_list_EKK2311B506CBSMsg1List.getCount() - 1 >= i)
				{
					subbean = listFUSV021803SC_toriten_cmp_list_EKK2311B506CBSMsg1List.getDataBean(i);
				}
				else
				{
					subbean = listFUSV021803SC_toriten_cmp_list_EKK2311B506CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null)
				{
					continue;
				}

				// 取扱店キャンペーンリスト.適用条件番号 ← 割引サービス適用条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.割引サービス適用条件番号
				if (childMap != null)
				{
					subbean.sendMessageString("適用条件番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("wrsv_aply_jkn_no"));
				}
				else
				{
					subbean.sendMessageString("適用条件番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.取扱店キャンペーンコード ← 割引サービス適用条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.割引サービスコード
				if (childMap != null)
				{
					subbean.sendMessageString("取扱店キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("wrib_svc_cd"));
				}
				else
				{
					subbean.sendMessageString("取扱店キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.取扱店キャンペーン名 ← 割引サービス適用条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.割引サービス名
				if (childMap != null)
				{
					subbean.sendMessageString("取扱店キャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("wrib_svc_nm"));
				}
				else
				{
					subbean.sendMessageString("取扱店キャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.受付開始年月日時分 ← 割引サービス適用条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.受付開始年月日時分
				if (childMap != null)
				{
					subbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("uk_sta_ymdhm"));
				}
				else
				{
					subbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.受付終了年月日時分 ← 割引サービス適用条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.受付終了年月日時分
				if (childMap != null)
				{
					subbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("uk_end_ymdhm"));
				}
				else
				{
					subbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.取扱店キャンペーンコード区分 ← 取扱店キャンペーンコード区分 データ抽出項目設定条件
				subbean.sendMessageString(FUW00905SFConst.TORITEN_CMP_CD_KBN_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.TORITEN_CMP_KBN_DCHSKM);
			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：メニュー（量販・訪販）
	 * @param outputMap
	 */
	public X31SDataBeanAccess[] getFUSV021804SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV021804SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV021804SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listFUSV021804SC_toriten_cmp_list_EKK2391B501CBSMsg1List = bean[0].getDataBeanArray("取扱店キャンペーンリスト");
		childList = null;

		if (listFUSV021804SC_toriten_cmp_list_EKK2391B501CBSMsg1List != null && parentMap != null && parentMap.containsKey("EKK2391B501CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK2391B501CBSMsg1List");

			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;

				subbean = listFUSV021804SC_toriten_cmp_list_EKK2391B501CBSMsg1List.addDataBean();

				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null)
				{
					continue;
				}

				// 取扱店キャンペーンリスト.適用条件番号 ← データ抽出項目設定条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.データ抽出項目設定条件番号
				if (childMap != null)
				{
					subbean.sendMessageString("適用条件番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dchskm_sete_jkn_no"));
				}
				else
				{
					subbean.sendMessageString("適用条件番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.取扱店キャンペーンコード ← データ抽出項目設定条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.データ抽出項目コード
				if (childMap != null)
				{
					subbean.sendMessageString("取扱店キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dchskm_cd"));
				}
				else
				{
					subbean.sendMessageString("取扱店キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.取扱店キャンペーン名 ← データ抽出項目設定条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.データ抽出項目名
				if (childMap != null)
				{
					subbean.sendMessageString("取扱店キャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dchskm_nm"));
				}
				else
				{
					subbean.sendMessageString("取扱店キャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.受付開始年月日時分 ← データ抽出項目設定条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.受付開始年月日時分
				if (childMap != null)
				{
					subbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("uk_sta_ymdhm"));
				}
				else
				{
					subbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 取扱店キャンペーンリスト.受付終了年月日時分 ← データ抽出項目設定条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.受付終了年月日時分
				if (childMap != null)
				{
					subbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("uk_end_ymdhm"));
				}
				else
				{
					subbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}

				// 取扱店キャンペーンリスト.取扱店キャンペーンコード区分 ← 取扱店キャンペーンコード区分 割引サービス設定条件
				subbean
						.sendMessageString(FUW00905SFConst.TORITEN_CMP_CD_KBN_04, X31CWebConst.DATABEAN_SET_VALUE,
								JFUStrConst.TORITEN_CMP_KBN_WRB_SVC);

				// 取扱店キャンペーンリスト.取扱店表示用キャンペーンコード ← データ抽出項目設定条件一覧照会（その他CP）SCマップ.その他キャンペーン一覧明細.表示用キャンペーンコード
				if (childMap != null)
				{
					subbean.sendMessageString("取扱店表示用キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dsp_dchskm_cd"));
				}
				else
				{
					subbean.sendMessageString("取扱店表示用キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}
		return bean;
	}

	/**
	 * 下りマッピング　業務パラメータ
	 * eoエントリーコード（有効期限あり）のコード体系か判定を行う。
	 * 
	 * @param outputMap
	 * @param intrCd 画面.紹介コード
	 * @return "1"：eoエントリーコード（有効期限あり）
	 */
	public String getFUSV021801CC(HashMap outputMap, String couponCd)
	{

		if (JFUWebCommon.isNull(couponCd))
		{
			return JFUStrConst.EMPTY;
		}

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV021801CC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV021801CC");
		}

		String result = JFUStrConst.EMPTY;
		if (parentMap != null && parentMap.size() > 0)
		{
			result = (String)parentMap.get("work_param_sette_value");
		}

		// 業務パラメータに設定されている文字列で始まるコードか判定する
		List<String> resultList = new ArrayList<String>();
		if (!JFUWebCommon.isNull(result))
		{
			String[] wRtnStr = result.split(JFUStrConst.COMMA);
			resultList = Arrays.asList(wRtnStr);
			for (String wCd : resultList)
			{
				if (couponCd.startsWith(wCd))
				{
					return JFUStrConst.RED_INTRODUCE_BUNRUI_YK_KIGEN;
				}
			}
		}
		return JFUStrConst.EMPTY;
	}

	/**
	 * 下りマッピングをする　業務パラメータ
	 * 通常の紹介コード（紹介コード独自チェック対象）のコード体系か判定を行う
	 * @param outputMap
	 * @param intrCd
	 * @return
	 */
	public String getFUSV021802CC(HashMap outputMap, String intrCd)
	{

		if (JFUWebCommon.isNull(intrCd))
		{
			return JFUStrConst.EMPTY;
		}

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV021802CC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV021802CC");
		}

		String result = JFUStrConst.EMPTY;
		if (parentMap != null && parentMap.size() > 0)
		{
			result = (String)parentMap.get("work_param_sette_value");
		}

		// 業務パラメータに設定されている文字列で始まるコードか判定する
		List<String> resultList = new ArrayList<String>();
		if (!JFUWebCommon.isNull(result))
		{
			String[] wRtnStr = result.split(JFUStrConst.COMMA);
			resultList = Arrays.asList(wRtnStr);
			for (String wCd : resultList)
			{
				if (intrCd.startsWith(wCd))
				{
					return JFUStrConst.RED_INTRODUCE_BUNRUI_YK_TUJYO_KIGEN;
				}
			}
		}
		return JFUStrConst.EMPTY;
	}

	/**
	 * 紹介者チェックCC
	 * 
	 * @param bean
	 * @param outputMap
	 * @return
	 */
	public HashMap setFUSV021803CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 紹介コード
		parentMap.put(MAPKEY_KEY_INTR_CD, bean[0].sendMessageString(FUW00905SFConst.INTR_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// クーポンコード
		parentMap.put(MAPKEY_KEY_COUPON_CD, bean[0].sendMessageString(FUW00905SFConst.COUPON_CD, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(MAPKEY_KEY_FUSV021803CC, parentMap);

		return outputMap;
	}
}