/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0110_KKSV0110OPDBMapper
*	ソースファイル名：KKSV0110_KKSV0110OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年07月19日
*＜機能概要＞
*	BP（申込新規承認）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/19	FJ          新規作成
*	v4.00.00	2012/07/13	FJ）多田    【ANK-0373-00-00】申込断面ﾃﾞｰﾀ
*	v5.00.00	2013/06/10	FJ）中山    【LT-2013-0000024】異動年月日時分秒をシステム年月日時分秒に修正
*   v6.00.00    2013/12/24  FJ）中山    【OM-2013-0005251】最終更新年月日の取得漏れの修正
*   v36.00.00   2018/03/02  FJ）麻生    【ANK-3362-00-00】申込書による申込時の申込断面データ作成
**********************************************************************/
package eo.web.webview.mapping;

import static eo.web.webview.common.JKKKeiNewCmnLogicUtil.getAddMskmFormCd;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JKKStrConst;
import eo.web.webview.KKW00101SF.KKW00101SFConst;
import eo.web.webview.common.JKKKeiNewCmnLogicUtil;
import eo.web.webview.common.JKKWebCommon;

/**
 * DataBean-BPマッピングをする。
 * <BR>
 * @author 富士通
 */
public class KKSV0110_KKSV0110OPDBMapper
{
	
	/**
	 * コンストラクタ
	 */
	public KKSV0110_KKSV0110OPDBMapper()
	{
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @param func_code 機能コード
	 * @param mskmInfoMap
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setEKK0011C110(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, HashMap mskmInfoMap) 
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 申込情報照会時に取得した申込テーブルデータ格納マップを取得
		HashMap mskmDataMap = null;
		HashMap mskmMap = (HashMap)mskmInfoMap.get("KKSV007901CC");
		if (mskmMap != null)
		{
			ArrayList mskmList = (ArrayList)mskmMap.get("mskm_svc_kei_ucwk_list");
			if (mskmList != null)
			{
				mskmDataMap = (HashMap)mskmList.get(0);
			}
		}

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 申込内容承認マップ.申込番号
		parentMap.put("mskm_no", bean[0].sendMessageString("申込番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 申込内容承認マップ.コンシューマ営業用申込状態識別コード
		parentMap.put("consmbsn_mskm_stat_skbt_cd", JKKStrConst.CD00760_04);
		// 申込内容承認マップ.更新年月日時分秒（更新前）
		parentMap.put("upd_dtm_bf", mskmDataMap.get("last_upd_dtm"));

		outputMap.put("EKK0011C110", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：申込新規登録画面　[1]：共有フォームＢｅａｎ
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param mskmInfoMap 申込の照会
	 * @param opeDateTimeStamp YYYYMMDDhhmmssSSS
	 * @return 上りマップ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV011001CC(
			X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, HashMap mskmInfoMap, String opeDateTimeStamp) throws Exception
	{
		
		if (bean == null)
		{
			return null;
		}
		
		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 進捗登録用リスト
		ArrayList<HashMap> addPrgList = new ArrayList<HashMap>();
		parentMap.put("add_prg_list", addPrgList);
		
		ArrayList<HashMap> svcList = new ArrayList<HashMap>();
		// ネット情報の登録
		setNetInfo(mskmInfoMap, svcList);
		// 電話情報の登録
		setTelInfo(mskmInfoMap, svcList);
		// テレビ情報の登録
		setTvInfo(mskmInfoMap, svcList);
		// モバイル情報の登録
		setMobaInfo(mskmInfoMap, svcList);
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		
		//登録されているサービスの件数分、処理を行う。
		for(HashMap svcMap : svcList)
		{
			//進捗の上りマップを作成
			addPrgList.add(getPrgMap(bean[0], opeDateTimeStamp, svcMap));
		}

		// 異動区分
		String mskmFlg = bean[0].sendMessageString(KKW00101SFConst.MSKM_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (JKKKeiNewCmnLogicUtil.MSKM_FLG_SHINKI.equals(mskmFlg))
		{
			// 新規申込の場合
			parentMap.put("kk109101_ido_div", JKKStrConst.CD00576_00001); // 00001（新規契約）
		}
		else
		{
			// 新規申込以外の場合
			parentMap.put("kk109101_ido_div", JKKStrConst.CD00576_00002); // 00002（サービス追加）
		}
		
		// 異動理由明細
		parentMap.put("kk109101_EKK1091D010CBSMsg1List", getIrsnDtl());
		
		outputMap.put("KKSV011001CC", parentMap);
		
		return outputMap;
	}

	/**
	 * ネットの照会情報をマッピングする
	 * @param mskmInfoMap 申込の照会
	 * @param addPrgList 進捗登録用リスト
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setNetInfo(HashMap mskmInfoMap, ArrayList<HashMap> addPrgList) throws Exception
	{
		if (mskmInfoMap == null)
		{
			return;
		}

		HashMap netMap = (HashMap)mskmInfoMap.get("KKSV007904CC");

		if (netMap == null)
		{
			return;
		}

		// 申込明細＜ｅｏ光ネット＞一覧照会明細
		ArrayList<HashMap<String, Object>> netList = (ArrayList<HashMap<String, Object>>)netMap.get("EKK0021B502CBSMsg1List");

		if (netList == null || netList.size() == 0)
		{
			return;
		}

		HashMap<String, Object> netChildMap = netList.get(0);

		// 申込明細番号
		String mskmDtlNo = (String)netChildMap.get("kk0021_mskm_dtl_no");
		// サービス契約番号
		String svcKeiNo = (String)netChildMap.get("kk0081_svc_kei_no");

		boolean isMskmDtlNo = mskmDtlNo != null && !"".equals(mskmDtlNo);
		boolean isSvcKeiNo = svcKeiNo != null && !"".equals(svcKeiNo);

		if (isMskmDtlNo && isSvcKeiNo)
		{
			HashMap map = new HashMap();
			map.put("mskm_dtl_no", mskmDtlNo);
			map.put("svc_kei_no", svcKeiNo);
			addPrgList.add(map);
		}
	}

	/**
	 * 電話の照会情報をマッピングする
	 * @param mskmInfoMap 申込の照会
	 * @param addPrgList 進捗登録用リスト
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setTelInfo(HashMap mskmInfoMap, ArrayList<HashMap> addPrgList) throws Exception
	{
		if (mskmInfoMap == null)
		{
			return;
		}

		HashMap telMap = (HashMap)mskmInfoMap.get("KKSV007905CC");

		if (telMap == null)
		{
			return;
		}

		// 申込明細番号
		String mskmDtlNo = (String)telMap.get("kk0021_mskm_dtl_no");
		// サービス契約番号
		String svcKeiNo = (String)telMap.get("kk0081_svc_kei_no");

		boolean isMskmDtlNo = mskmDtlNo != null && !"".equals(mskmDtlNo);
		boolean isSvcKeiNo = svcKeiNo != null && !"".equals(svcKeiNo);

		if (isMskmDtlNo && isSvcKeiNo)
		{
			HashMap map = new HashMap();
			map.put("mskm_dtl_no", mskmDtlNo);
			map.put("svc_kei_no", svcKeiNo);
			addPrgList.add(map);
		}
	}

	/**
	 * テレビの照会情報をマッピングする
	 * @param mskmInfoMap 申込の照会
	 * @param addPrgList 進捗登録用リスト
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setTvInfo(HashMap mskmInfoMap, ArrayList<HashMap> addPrgList) throws Exception
	{
		if (mskmInfoMap == null)
		{
			return;
		}

		HashMap tvMap = (HashMap)mskmInfoMap.get("KKSV007906CC");

		if (tvMap == null)
		{
			return;
		}

		// 申込明細番号
		String mskmDtlNo = (String)tvMap.get("kk0021_mskm_dtl_no");
		// サービス契約番号
		String svcKeiNo = (String)tvMap.get("kk0081_svc_kei_no");

		boolean isMskmDtlNo = mskmDtlNo != null && !"".equals(mskmDtlNo);
		boolean isSvcKeiNo = svcKeiNo != null && !"".equals(svcKeiNo);

		if (isMskmDtlNo && isSvcKeiNo)
		{
			HashMap map = new HashMap();
			map.put("mskm_dtl_no", mskmDtlNo);
			map.put("svc_kei_no", svcKeiNo);
			addPrgList.add(map);
		}
	}

	/**
	 * モバイルの照会情報をマッピングする
	 * @param mskmInfoMap 申込の照会
	 * @param addPrgList 進捗登録用リスト
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setMobaInfo(HashMap mskmInfoMap, ArrayList<HashMap> addPrgList) throws Exception
	{
		if (mskmInfoMap == null)
		{
			return;
		}

		HashMap mobaMap = (HashMap)mskmInfoMap.get("KKSV007908CC");

		if (mobaMap == null)
		{
			return;
		}

		// 申込明細番号
		String mskmDtlNo = (String)mobaMap.get("mobile_mskm_dtl_no");
		// サービス契約番号
		String svcKeiNo = (String)mobaMap.get("mobile_svc_kei_no");

		boolean isMskmDtlNo = mskmDtlNo != null && !"".equals(mskmDtlNo);
		boolean isSvcKeiNo = svcKeiNo != null && !"".equals(svcKeiNo);

		if (isMskmDtlNo && isSvcKeiNo)
		{
			HashMap map = new HashMap();
			map.put("mskm_dtl_no", mskmDtlNo);
			map.put("svc_kei_no", svcKeiNo);
			addPrgList.add(map);
		}
	}

	/**
	 * 上りマッピングをする（申込断面）
	 * @param   bean              [0]：申込新規登録画面
	 * @param   outputMap         登録データ
	 * @param   func_code         機能コード
	 * @param   opeDateTimeStamp  運用日付（YYYYMMDDhhmmssSSS）
	 * @return  登録データ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV011002CC(
			X31SDataBeanAccess[] bean,
			HashMap outputMap,
			String func_code,
			String opeDateTimeStamp) throws Exception
	{
		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);

		// 申込書番号
		parentMap.put("mskmsho_no", bean[0].sendMessageString(KKW00101SFConst.MSKMSHO_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 申込書種別コード
		parentMap.put("mskmsho_sbt_cd", bean[0].sendMessageString(KKW00101SFConst.JYUKYO_TYPE, X31CWebConst.DATABEAN_GET_VALUE));
		// 申込断面明細取得年月日時分秒
		parentMap.put("mskm_dmen_dtl_stku_dtm", opeDateTimeStamp.substring(0, 14));
		// 承認済フラグ
		parentMap.put("shonin_zumi_flg", JKKStrConst.CD00581_1);
		// ANK-3362-00-00 ADD START
		// 申込形態コード
		parentMap.put("mskm_form_cd", getAddMskmFormCd(bean[0]));
		// 申込受付種別コード
		String mkmUkSbtCd = JKKWebCommon.convertCode(bean[0], KKW00101SFConst.MSKM_SBT, KKW00101SFConst.SELECT_CD_59, KKW00101SFConst.CD_LIST_59);
		parentMap.put("mkm_uk_sbt_cd", mkmUkSbtCd);
		// ANK-3362-00-00 ADD END

		outputMap.put("KKSV011002CC", parentMap);

		return outputMap;

	}
	
	/**
	 * 進捗情報の上りマップを作成します。
	 * @param bean
	 * @param opeDateTimeStamp
	 * @param svcMap
	 * @return prgMap 進捗マップ
	 */
	private HashMap<String, Object> getPrgMap(X31SDataBeanAccess bean, String opeDateTimeStamp, HashMap<String, Object> svcMap)
	{
		HashMap<String, Object> prgMap = new HashMap<String, Object>();
		
		//申込明細番号
		prgMap.put("kk109101_mskm_dtl_no", svcMap.get("mskm_dtl_no"));
		//サービス契約番号
		prgMap.put("kk109101_svc_kei_no", svcMap.get("svc_kei_no"));
		//進捗ステータス
		prgMap.put("kk109101_prg_stat", JKKStrConst.CD00647_MSKM_REQ_SHONIN);
		//進捗特記事項1
		prgMap.put("kk109101_prg_tkjk_1", "");
		
		return prgMap;
	}
	
	/**
	 * 異動理由明細リストを作成する。
	 * @return irsnDtl
	 */
	private ArrayList<HashMap<String, Object>> getIrsnDtl()
	{
		// 異動理由明細
		ArrayList<HashMap<String, Object>> irsnDtl = new ArrayList<HashMap<String, Object>>();
		
		HashMap<String, Object> dtlMap = new HashMap<String, Object>();
		
		irsnDtl.add(dtlMap);
		
		// 異動理由コード（その他）
		dtlMap.put("kk109101_ido_rsn_cd", JKKStrConst.CD00846_OTHER);

		
		return irsnDtl;
	}
}