/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CNSV0057_CNSV0057OPDBMapper
*	ソースファイル名：CNSV0057_CNSV0057OPDBMapper.java
*	作成者			：FJ
*	日付			：2021年07月12日
*＜機能概要＞
*	コンテンツ一時申込登録画面へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v54.00.00	2021/07/12	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.common.constant.JKKStrConst;
import eo.common.util.JZMAdOutputEdit;
import eo.web.webview.CKW02505SF.CKW02505SFConst;
import eo.web.webview.CNW01901SF.CNW01901SFConst;
import eo.web.webview.KKW00121SF.KKW00121SFConst;
import eo.web.webview.ZMW10901SF.ZMW10901SFConst;
import eo.web.webview.common.JCNWebConst;
import eo.web.webview.common.JKKKeiNewCmnLogicUtil;
import eo.web.webview.common.JKKWebCommon;
import eo.web.webview.common.JZMWebCommon;


/**
 * DataBean-BPマッピングをする。
 * 
 * <br>
 * @author 富士通
 */
public class CNSV0057_CNSV0057OPDBMapper
{
	
	/** コンテンツ申込情報状態コード 91：自動取消済*/
	private static final String CONT_MKM_INF_STCD_91 = "91";
	
	/**
	 * コンストラクタ
	 */
	public CNSV0057_CNSV0057OPDBMapper()
	{
	}

	/**
	 * 
	 * 上りマッピングをする
	 * <br>
	 * @param outputMap
	 * v@param mskmNo 申込番号
	 * @param svc_kei_list サービス契約リスト
	 * @param cont_mskm_list コンテンツ申込リスト
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCNSV005701CC(HashMap outputMap, String mskmNo, X31SDataBeanAccessArray svc_kei_list, X31SDataBeanAccessArray cont_mskm_list)
	{
		ArrayList<HashMap<String, String>> cont_mskm_info_list = new ArrayList<HashMap<String, String>>();
		ArrayList<HashMap<String, String>> svc_kei_info_list = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> cont_mskm_info_map = null;
		HashMap<String, String> svc_kei_info_map = null;
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// コンテンツ申込情報を作成
		// 変更があるもののみ抽出
		// コンテンツ申込リストより申込状態の変更前後の比較を行う
		for(int i = 0; i < cont_mskm_list.getCount(); i++)
		{
			cont_mskm_info_map = new HashMap<String, String>();
			
			// コンテンツ申込情報
			X31SDataBeanAccess subbeanContMskmInfo = cont_mskm_list.getDataBean(i);
			// コンテンツ申込情報状態コードを取得
			String contMsmInfStcd = (String) subbeanContMskmInfo.sendMessageString(CNW01901SFConst.CONT_MSM_INF_STCD, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 変更前後コンテンツ申込状態フラグを取得
			Boolean bfContMskmStFlg = (Boolean) subbeanContMskmInfo.sendMessageBoolean(CNW01901SFConst.CHG_BF_CONT_MSKM_ST_FLG, X31CWebConst.DATABEAN_GET_VALUE);
			Boolean afContMskmStFlg = (Boolean) subbeanContMskmInfo.sendMessageBoolean(CNW01901SFConst.CHG_AF_CONT_MSKM_ST_FLG, X31CWebConst.DATABEAN_GET_VALUE);
			// 比較
			if(!(bfContMskmStFlg == afContMskmStFlg))
			{
				// 申込状態の変更前後にて差分がある場合、コンテンツ申込情報に格納
				// コンテンツ申込番号
				cont_mskm_info_map.put("cont_mskm_no", (String) subbeanContMskmInfo.sendMessageString(CNW01901SFConst.CONT_MSKM_NO, X31CWebConst.DATABEAN_GET_VALUE));
				// 申込番号
				cont_mskm_info_map.put("mskm_no", mskmNo);
				// コンテンツサービスコード
				cont_mskm_info_map.put("cont_svc_cd", (String) subbeanContMskmInfo.sendMessageString(CNW01901SFConst.CONT_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE));
				// コンテンツサービス名
				cont_mskm_info_map.put("cont_svc_nm", (String) subbeanContMskmInfo.sendMessageString(CNW01901SFConst.CONT_SVC_NM, X31CWebConst.DATABEAN_GET_VALUE));
				// 更新年月日時分秒
				cont_mskm_info_map.put("upd_dtm", (String) subbeanContMskmInfo.sendMessageString(CNW01901SFConst.CONT_UPD_DTM , X31CWebConst.DATABEAN_GET_VALUE));
				
				// 機能コード
				// 変更前後コンテンツ申込状態フラグより機能コードを特定し設定する
				// チェックされた場合、
				if((!bfContMskmStFlg) && afContMskmStFlg){
					// コンテンツ申込情報状態コードが自動取消済の場合、
					if(CONT_MKM_INF_STCD_91.equals(contMsmInfStcd))
					{
						// [2]：削除・登録を設定
						cont_mskm_info_map.put("func_code", "2");
					}
					else
					{
						// コンテンツ申込情報状態コードが自動取消済以外の場合、
						// [0]：登録を設定
						cont_mskm_info_map.put("func_code", "0");
					}
				}
				else if(bfContMskmStFlg && (!afContMskmStFlg))
				// チェックが外された場合、
				{
					// [1]：削除を設定
					cont_mskm_info_map.put("func_code", "1");
				}
				// コンテンツ情報に追加
				cont_mskm_info_list.add(cont_mskm_info_map);
			}
		}
		
		// サービス契約情報を作成
		// サービス契約リスト分ループを実行
		for(int i = 0; i < svc_kei_list.getCount(); i++)
		{
			// サービス契約情報
			X31SDataBeanAccess subbeanSvcInfo = svc_kei_list.getDataBean(i);
			// 対象ループ申込番号を保持
			String roopMskmNo = (String) subbeanSvcInfo.sendMessageString(CNW01901SFConst.MSKM_NO, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 選択対象の申込番号とループ対象申込番号が同じ場合下記の処理を行う。
			if(mskmNo.equals(roopMskmNo))
			{
				// サービス契約情報に格納
				// beanよりサービス契約個別情報を取得
				X31SDataBeanAccessArray svc_kei_kobetu_list = subbeanSvcInfo.getDataBeanArray(CNW01901SFConst.SVC_KEI_KOBETU_LIST);
				
				// サービス契約個別リスト分ループを実行
				for(int j = 0; j < svc_kei_kobetu_list.getCount(); j++)
				{
					svc_kei_info_map = new HashMap<String, String>();
					
					// サービス契約個別情報
					X31SDataBeanAccess subbeanSvcKobetu = svc_kei_kobetu_list.getDataBean(j);
					
					// サービス契約
					svc_kei_info_map.put("svc_kei_no", (String) subbeanSvcKobetu.sendMessageString(CNW01901SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
					svc_kei_info_list.add(svc_kei_info_map);
				}
				break;
			}
		}
		
		// コンテンツ申込情報 → コンテンツ申込情報
		parentMap.put("cont_mskm_info_list", cont_mskm_info_list);
		
		// サービス契約情報 → コンテンツ申込情報
		parentMap.put("svc_kei_info_list", svc_kei_info_list);
		
		// 共通情報のマッピング
		outputMap.put("CNSV005701CC", parentMap);
		
		return outputMap;
	}
}