/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0940_KKSV0940OPDBMapper
*	ソースファイル名：KKSV0940_KKSV0940OPDBMapper.java
*	作成者			：FJ
*	日付			：2019年05月29日
*＜機能概要＞
*	BP（取扱コードマスタ一覧照会検索）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v44.00.00	2019/05/29	FJ		新規作成
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.KKW22501SF.KKW22501SFConst;
import eo.web.webview.common.JKKGetDataUtil;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0940_KKSV0940OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public KKSV0940_KKSV0940OPDBMapper(){
	}
	/**
	 * 処理区分(検索)
	 */
	private static final String PROCESS_KBN_01 = "01";
	/**
	 * 処理区分(CP検索)
	 */
	private static final String PROCESS_KBN_02 = "02";
	/**
	 * 処理区分(登録・変更・削除)
	 */
	private static final String PROCESS_KBN_03 = "03";
	/**
	 * 処理フラグ(登録)
	 */
	private static final String PROCESS_FLG_1 = "1";
	/**
	 * 処理フラグ(変更)
	 */
	private static final String PROCESS_FLG_2 = "2";
	/**
	 * 処理フラグ(削除)
	 */
	private static final String PROCESS_FLG_3 = "3";
	/**
	 * 詳細表示フラグ(表示)
	 */
	private static final String DTL_DSP_FLG_Y = "1";
	/**
	 * 詳細表示フラグ(表示)
	 */
	private static final String DTL_DSP_FLG_N = "0";
	/**
	 * 処理結果
	 */
	private static final Boolean RET_TRUE = true;

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV094001CC(X31SDataBeanAccess[] bean, HashMap outputMap) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}
		
		String process_kbn = bean[0].sendMessageString(KKW22501SFConst.PROCESS_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		
		/*************************************/
		/** 上り代理店検索                   */
		/*************************************/
		if (PROCESS_KBN_01.equals(process_kbn))
		{
			HashMap<String, Object> parentMap = new HashMap<String, Object>();
			
			// 検索条件＿代理店コード → 代理店イベントＣＰ設定処理マップ.代理店コード
			parentMap.put("key_agnt_cd", bean[0].sendMessageString("代理店コード", X31CWebConst.DATABEAN_GET_VALUE));
			
			// 処理区分→ 代理店イベントＣＰ設定処理マップ.処理区分
			parentMap.put("process_kbn", bean[0].sendMessageString("処理区分", X31CWebConst.DATABEAN_GET_VALUE));
			
			outputMap.put("KKSV094001CC", parentMap);
			
			return outputMap;
		}
		/*************************************/
		/** 上りCP検索                       */
		/*************************************/
		if (PROCESS_KBN_02.equals(process_kbn))
		{
			HashMap<String, Object> parentMap = new HashMap<String, Object>();
			
			// 表示用データ抽出項目コード→ 代理店イベントＣＰ設定処理マップ.表示用データ抽出項目コード
			parentMap.put("key_dsp_dchskm_cd", bean[0].sendMessageString("表示用データ抽出項目コード", X31CWebConst.DATABEAN_GET_VALUE));
			
			// 処理区分→ 代理店イベントＣＰ設定処理マップ.処理区分
			parentMap.put("process_kbn", bean[0].sendMessageString("処理区分", X31CWebConst.DATABEAN_GET_VALUE));
			
			outputMap.put("KKSV094001CC", parentMap);
							
			return outputMap;
		}
		/*************************************/
		/** 上り登録・変更・削除             */
		/*************************************/
		if(PROCESS_KBN_03.equals(process_kbn))
		{
			HashMap<String, Object> parentMap = new HashMap<String, Object>();

			X31SDataBeanAccessArray dchskmSeteJknList = bean[0].getDataBeanArray("データ抽出項目設定条件一覧照会（イベントＣＰ）明細");
			
			if (dchskmSeteJknList != null && dchskmSeteJknList.getCount() > 0)
			{
				HashMap<String, Object> childMap = new HashMap<String, Object>();

				ArrayList<HashMap<String, Object>> dchskm_sete_jkn_List = new ArrayList<HashMap<String, Object>>();

				
				// 処理区分→ 代理店イベントＣＰ設定処理マップ.処理区分
				parentMap.put("process_kbn", bean[0].sendMessageString("処理区分", X31CWebConst.DATABEAN_GET_VALUE));

				// 登録処理必要項目の取得

				String agntSetCampaignEndymd = bean[0].sendMessageString(KKW22501SFConst.AGNT_SET_CAMPAIGN_ENDYMD, X31CWebConst.DATABEAN_GET_VALUE);
				String agntSetCampaignStaymd = bean[0].sendMessageString(KKW22501SFConst.AGNT_SET_CAMPAIGN_STAYMD, X31CWebConst.DATABEAN_GET_VALUE);
				String searchDchskmCd = bean[0].sendMessageString(KKW22501SFConst.SEARCH_DCHSKM_CD, X31CWebConst.DATABEAN_GET_VALUE);
				// 代理店コード→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件値1
				childMap.put("dchskm_sete_jkn_value_1", bean[0].sendMessageString(KKW22501SFConst.SEARCH_AGNT_CD, X31CWebConst.DATABEAN_GET_VALUE));
				// データ抽出項目コード（登録用）→ 代理店イベントＣＰ設定処理マップ.データ抽出項目コード
				childMap.put("dchskm_cd", searchDchskmCd);
				// 受付開始年月日時分→ 代理店イベントＣＰ設定処理マップ.受付開始年月日時分
				childMap.put("uk_sta_ymdhm", agntSetCampaignStaymd + "0000");
				// 受付終了年月日時分→ 代理店イベントＣＰ設定処理マップ.受付終了年月日時分
				childMap.put("uk_end_ymdhm", agntSetCampaignEndymd + "2359");
				// 受付開始年月日時分→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件適用開始年月日
				childMap.put("dchskm_sete_jkn_tstaymd", agntSetCampaignStaymd);
				// 受付開始年月日時分→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件適用開始年月日
				childMap.put("dchskm_sete_jkn_tendymd", agntSetCampaignEndymd);
				
				if ((null != searchDchskmCd && !"".equals(searchDchskmCd)) && (null != agntSetCampaignStaymd && !"".equals(agntSetCampaignStaymd)) && (null != agntSetCampaignEndymd && !"".equals(agntSetCampaignEndymd)))
				{
					// 処理フラグ
					childMap.put("process_flg", PROCESS_FLG_1);
					// 処理結果
					outputMap.put("rslt_kbn_1", RET_TRUE);
				}
				
				dchskm_sete_jkn_List.add(childMap);
				
				
				String ukStaYmdhm = "";
				String ukEndYmdhm = "";
				boolean delCheck= false;
				String ukStaYmdhmBf = "";
				String ukEndYmdhmBf = "";
				X31SDataBeanAccess subbean = null;
				X31SDataBeanAccess bfSubbean = null;
				
				
				for (int i = 0; i < dchskmSeteJknList.getCount(); i++)
				{
					childMap = new HashMap<String, Object>();

					// 更新前比較用
					X31SDataBeanAccessArray bfDchskmSeteJknList = bean[0].getDataBeanArray("変更前データ抽出項目設定条件一覧照会（イベントＣＰ）明細");
					
					if (dchskmSeteJknList.getCount() - 1 >= i)
					{
						subbean = dchskmSeteJknList.getDataBean(i);
						bfSubbean = bfDchskmSeteJknList.getDataBean(i);
					}
					if (subbean == null)
					{
						continue;
					}
					
					// 受付開始年月日時分
					ukStaYmdhm = subbean.sendMessageString(KKW22501SFConst.UK_STA_YMDHM_01, X31CWebConst.DATABEAN_GET_VALUE);
					// 受付終了年月日時分
					ukEndYmdhm = subbean.sendMessageString(KKW22501SFConst.UK_END_YMDHM_01, X31CWebConst.DATABEAN_GET_VALUE);
					// 削除チェック
					delCheck = subbean.sendMessageBoolean(KKW22501SFConst.DEL_CHECK_01, X31CWebConst.DATABEAN_GET_VALUE);
					
					// (変更前)受付開始年月日時分
					ukStaYmdhmBf = bfSubbean.sendMessageString(KKW22501SFConst.UK_STA_YMDHM_01, X31CWebConst.DATABEAN_GET_VALUE);
					// (変更前)受付終了年月日時分
					ukEndYmdhmBf = bfSubbean.sendMessageString(KKW22501SFConst.UK_END_YMDHM_01, X31CWebConst.DATABEAN_GET_VALUE);
					
					// 削除チェックに変更があった場合、処理フラグを設定
					if (delCheck == true)
					{
						// 処理フラグ
						childMap.put("process_flg", PROCESS_FLG_3);
						// 処理結果
						outputMap.put("rslt_kbn_3", RET_TRUE);
					}
					else
					{
						// 受付開始年月日時分・受付終了年月日時分に変更があった場合、処理フラグを設定
						if ((ukStaYmdhm != null && !ukStaYmdhm.equals(ukStaYmdhmBf)) || (ukEndYmdhm != null && !ukEndYmdhm.equals(ukEndYmdhmBf)))
						{
							// 処理フラグ
							childMap.put("process_flg", PROCESS_FLG_2);
							// 処理結果
							outputMap.put("rslt_kbn_2", RET_TRUE);
						}
					}

					/*************************************/
					/** 上り登録・変更・削除  処理       */
					/*************************************/

					if (dchskmSeteJknList != null)
					{
						// 代理店コード→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件値1
						childMap.put("dchskm_sete_jkn_value_1", bean[0].sendMessageString(KKW22501SFConst.SEARCH_AGNT_CD, X31CWebConst.DATABEAN_GET_VALUE));
					}
					if (dchskmSeteJknList != null)
					{
						// データ抽出項目コード（変更用）→ 代理店イベントＣＰ設定処理マップ.データ抽出項目コード
						childMap.put("dchskm_cd", subbean.sendMessageString(KKW22501SFConst.DCHSKM_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
					}
					if (dchskmSeteJknList != null)
					{
						// 受付開始年月日時分→ 代理店イベントＣＰ設定処理マップ.受付開始年月日時分
						childMap.put("uk_sta_ymdhm", ukStaYmdhm + "0000");
						// 受付開始年月日時分→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件適用開始年月日
						childMap.put("dchskm_sete_jkn_tstaymd", ukStaYmdhm);
					}
					if (dchskmSeteJknList != null)
					{
						// 受付終了年月日時分→ 代理店イベントＣＰ設定処理マップ.受付終了年月日時分
						childMap.put("uk_end_ymdhm", ukEndYmdhm + "2359");
						// 受付開始年月日時分→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件適用開始年月日
						childMap.put("dchskm_sete_jkn_tendymd", ukEndYmdhm);
					}
					if (dchskmSeteJknList != null)
					{
						// データ抽出項目設定条件番号（変更用）→ 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件番号
						childMap.put("dchskm_sete_jkn_no", subbean.sendMessageString(KKW22501SFConst.DCHSKM_SETE_JKN_NO_01, X31CWebConst.DATABEAN_GET_VALUE));
					}
					if (dchskmSeteJknList != null)
					{
						// 受付終了年月日時分→ 代理店イベントＣＰ設定処理マップ.受付終了年月日時分
						childMap.put("upd_dtm", subbean.sendMessageString(KKW22501SFConst.UPD_DTM_01, X31CWebConst.DATABEAN_GET_VALUE));
					}
					dchskm_sete_jkn_List.add(childMap);
				}
				parentMap.put("dchskm_sete_jkn_list", dchskm_sete_jkn_List);
			}
			outputMap.put("KKSV094001CC", parentMap);
			return outputMap;
		}
		return null;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV094001CC(X31SDataBeanAccess[] bean, HashMap outputMap){
		
		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV094001CC")){
			parentMap = (HashMap)outputMap.get("KKSV094001CC");
		}
		
		ArrayList childList = null;
		String process_kbn = bean[0].sendMessageString(KKW22501SFConst.PROCESS_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		
		/*************************************/
		/** 下り代理店検索                   */
		/*************************************/
		if (PROCESS_KBN_01.equals(process_kbn))
		{
			X31SDataBeanAccessArray dchskm_sete_jkn_list = bean[0].getDataBeanArray("データ抽出項目設定条件一覧照会（イベントＣＰ）明細");
			X31SDataBeanAccessArray bf_dchskm_sete_jkn_list = bean[0].getDataBeanArray("変更前データ抽出項目設定条件一覧照会（イベントＣＰ）明細");
			
			if(dchskm_sete_jkn_list != null && bf_dchskm_sete_jkn_list != null && parentMap != null && parentMap.containsKey("EKK2391B502CBSMsg1List")){
				childList = (ArrayList)parentMap.get("EKK2391B502CBSMsg1List");
				
				if (childList != null && childList.size() > 0)
				{
					// 検索結果が1件以上の場合に"1"を設定。
					bean[0].sendMessageString(KKW22501SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DTL_DSP_FLG_Y);
					
					for (int i = 0; i < childList.size(); i++)
					{
						X31SDataBeanAccess subbean = null;
						X31SDataBeanAccess bfSubbean = null;
						if (dchskm_sete_jkn_list.getCount() - 1 >= i)
						{
							subbean = dchskm_sete_jkn_list.getDataBean(i);
							bfSubbean = bf_dchskm_sete_jkn_list.getDataBean(i);
						}
						else
						{
							subbean = dchskm_sete_jkn_list.addDataBean();
							bfSubbean = bf_dchskm_sete_jkn_list.addDataBean();
						}
						HashMap childMap = (HashMap)childList.get(i);
						if (subbean == null)
						{
							continue;
						}
						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.代理店コード ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.代理店コード
						if (childMap != null)
						{
							subbean.sendMessageString("代理店コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("agnt_cd"));
						}
						else
						{
							subbean.sendMessageString("代理店コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.代理店名 ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.代理店名
						if (childMap != null)
						{
							subbean.sendMessageString("代理店名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("agnt_nm"));
						}
						else
						{
							subbean.sendMessageString("代理店名", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.表示用データ抽出項目コード ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.表示用データ抽出項目コード
						if (childMap != null)
						{
							subbean.sendMessageString("表示用データ抽出項目コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dsp_dchskm_cd"));
						}
						else
						{
							subbean.sendMessageString("表示用データ抽出項目コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}

						// 表示用データ抽出項目コードが空の場合は以降処理しない
						if (JKKGetDataUtil.isNull(childMap.get("dsp_dchskm_cd"))) {
							continue;
						}

						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.受付開始年月日時分 ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.受付開始年月日時分
						if (childMap != null && childMap.get("uk_sta_ymdhm") != null)
						{
							subbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, ((String)childMap.get("uk_sta_ymdhm")).substring(0,8));
							// 変更処理時の比較用
							bfSubbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, ((String)childMap.get("uk_sta_ymdhm")).substring(0,8));
						}
						else
						{
							subbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
							bfSubbean.sendMessageString("受付開始年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.受付終了年月日時分 ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.受付終了年月日時分
						if (childMap != null && childMap.get("uk_end_ymdhm") != null)
						{
							subbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, ((String)childMap.get("uk_end_ymdhm")).substring(0,8));
							// 変更処理時の比較用
							bfSubbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, ((String)childMap.get("uk_end_ymdhm")).substring(0,8));
						}
						else
						{
							subbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
							bfSubbean.sendMessageString("受付終了年月日時分", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.データ抽出項目コード（制御用） ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.データ抽出項目コード
						if (childMap != null)
						{
							subbean.sendMessageString("データ抽出項目コード（変更用）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dchskm_cd"));
						}
						else
						{
							subbean.sendMessageString("データ抽出項目コード（変更用）", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						// データ抽出項目設定条件一覧照会（イベントＣＰ）明細.データ抽出項目設定条件番号（制御用） ← 代理店イベントＣＰ設定処理マップ.データ抽出項目設定条件一覧照会（イベントCP）明細.データ抽出項目設定条件番号
						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）明細.更新年月日時分秒
						if (childMap != null)
						{
							subbean.sendMessageString("更新年月日時分秒", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("upd_dtm"));
						}
						else
						{
							subbean.sendMessageString("更新年月日時分秒", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
					}
				}
				else
				{
					// 検索結果が0件の場合に"0"を設定。
					bean[0].sendMessageString(KKW22501SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DTL_DSP_FLG_N);
				}
			}
		}
		
		/*************************************/
		/** 下りCP検索                       */
		/*************************************/
		if (PROCESS_KBN_02.equals(process_kbn))
		{
			childList = null;
			
			if(parentMap != null && parentMap.containsKey("EKK1351B501CBSMsg1List")){
				childList = (ArrayList)parentMap.get("EKK1351B501CBSMsg1List");
				
				if (childList != null && childList.size() > 0)
				{
					HashMap childMap = (HashMap)childList.get(0);
					// データ抽出項目コード ← 代理店イベントＣＰ設定処理マップ.データ抽出項目一覧照会明細.データ抽出項目コード
					bean[0].sendMessageString("データ抽出項目コード（登録用）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dchskm_cd"));
					
					// データ抽出項目名 ← 代理店イベントＣＰ設定処理マップ.データ抽出項目一覧照会明細.データ抽出項目名
					bean[0].sendMessageString("データ抽出項目名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dchskm_nm"));
				}
				else
				{
					// データ抽出項目コード ← 代理店イベントＣＰ設定処理マップ.データ抽出項目一覧照会明細.データ抽出項目コード
					bean[0].sendMessageString("データ抽出項目コード（登録用）", X31CWebConst.DATABEAN_SET_VALUE, "");
					
					// データ抽出項目名 ← 代理店イベントＣＰ設定処理マップ.データ抽出項目一覧照会明細.データ抽出項目名
					bean[0].sendMessageString("データ抽出項目名", X31CWebConst.DATABEAN_SET_VALUE, "該当キャンペーンが存在しません");
				}
			}
		}
		return bean;
	}
}