/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CKSV0004_CKSV0004OPDBMapper
*	ソースファイル名：CKSV0004_CKSV0004OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2011年08月26日
*＜機能概要＞
*	BP（お客様情報登録_登録確認サービス）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/26	Fujitsu		新規作成
*   v4.00.00    2012/09/21   FJ）稲岡    ANK-0546-00-00 対応
*	v4.00.01	2012/12/10	FJ）庭山	【IT1-2012-0002197】対応
*	v4.00.02	2012/12/21	FJ）庭山	【IT1-2012-0002526】対応
*	v4.00.03	2013/02/17	 FJ）野口	【ST3-2013-0000040】対応
*   v10.00.00   2014/11/04	 FJ)舩橋     ANK-2273-00-00
*	v29.00.00	2017/04/17   FJ）クウン	 ANK-3132-00-00_バックヤード画面へのコンテンツ同意登録機能の追加
**********************************************************************/
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 eo.common.constant.JCKStrConst;
import eo.web.webview.CKW00201SF.CKW00201SFConst;
import eo.web.webview.common.JCKCommonConst;
import eo.web.webview.common.JKKCommonConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CKSV0004_CKSV0004OPDBMapper extends CKW002OPDBMapper{
	
	/**
	 * コンストラクタ
	 */
	public CKSV0004_CKSV0004OPDBMapper(){
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お客様情報登録
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param mmbSbtFlg
	 * @param openFlg
	 * @param familyFlg
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCKSV000401CC(X31SDataBeanAccess[] bean,
									HashMap outputMap,
									String func_code,
									boolean mmbSbtFlg,
									boolean openFlg,
									boolean familyFlg) throws Exception
	{
		if (bean == null)
		{
			return null;
		}
		
		if (bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		X31SDataBeanAccess custbean = bean[0].getDataBeanArray(JCKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST).getDataBean(0);
		
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// 会員種別フラグ
		parentMap.put("mmb_sbt_flg", mmbSbtFlg);
		// オープン会員フラグ
		parentMap.put("open_mmb_flg", openFlg);
		// ファミリー会員フラグ
		parentMap.put("family_mmb_flg", familyFlg);
		// 契約者分割フラグ
		parentMap.put("bnkt_flg", bean[0].sendMessageBoolean(CKW00201SFConst.KSH_BNKT_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		// オンライン運用日付
		parentMap.put("ope_date", bean[0].sendMessageString(CKW00201SFConst.OPEDATE, X31CWebConst.DATABEAN_GET_VALUE));
		
/* ++++++++++ v4.00.03 追加開始 ++++++++++ */
		HashMap hash = null;
/* ++++++++++ v4.00.03 追加終了 ++++++++++ */
		
		// 個人の場合
		if (mmbSbtFlg)
		{
			// お客様＜個人＞
			parentMap = super.setValueForECK0021D010(bean, parentMap, func_code, "ECK0021");
/* ++++++++++ v4.00.03 追加開始 ++++++++++ */
			hash = (HashMap)parentMap.get("ECK0021");
/* ++++++++++ v4.00.03 追加終了 ++++++++++ */
		}
		else
		{
			// お客様＜法人＞
			parentMap = super.setValueForECK0031D010(bean, parentMap, func_code, "ECK0031");
/* ++++++++++ v4.00.03 追加開始 ++++++++++ */
			hash = (HashMap)parentMap.get("ECK0031");
/* ++++++++++ v4.00.03 追加終了 ++++++++++ */
		}
		
		// ファミリーコード／ＰＯＰＩＤ
		parentMap.put("family_cd_pop_id", bean[0].sendMessageString(CKW00201SFConst.FAMILY_CD_POPID, X31CWebConst.DATABEAN_GET_VALUE));
		
		// コンテンツお客様名（カナ）
		parentMap.put("key_cust_kana", bean[0].sendMessageString(CKW00201SFConst.CONT_CUST_KANA, X31CWebConst.DATABEAN_GET_VALUE));
		// コンテンツお客様生年月日
		parentMap.put("key_cust_birthd", bean[0].sendMessageString(CKW00201SFConst.CONT_CUST_BIRTHD, X31CWebConst.DATABEAN_GET_VALUE));
		// コンテンツお客様メールアドレス
		parentMap.put("key_mlad", bean[0].sendMessageString(CKW00201SFConst.CONT_CUST_MLAD, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 分割元＿引継＿ＳＹＳＩＤ
		parentMap.put("key_sysid", custbean.sendMessageString(JCKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		// 分割元＿引継＿サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		
		// "001" → ＫＥＹ＿異動予約詳細コード
		parentMap.put("key_ido_rsv_dtl_cd", JCKCommonConst.IDO_RSV_DTL_CD_CUST_ANN_DIV_CHG);
		// "00" → ＫＥＹ＿異動予約状態コード
		parentMap.put("key_ido_rsv_stat_cd", JCKCommonConst.IDO_RSV_STAT_CD_UN_RLD);
		
		// ｅｏＩＤ
		parentMap.put("eoid", bean[0].sendMessageString(CKW00201SFConst.EOID, X31CWebConst.DATABEAN_GET_VALUE));
		// ニックネーム
		parentMap.put("nkname", bean[0].sendMessageString(CKW00201SFConst.NKNAME, X31CWebConst.DATABEAN_GET_VALUE));
		
		// "20:メールドメイン" → ＫＥＹ＿NGワードコード
		parentMap.put("key_ng_word_cd", JCKStrConst.CD00204_MAIL_DOMAIN);
		
		// 企業識別コード
		parentMap.put("comp_skbt_cd", bean[0].sendMessageString(CKW00201SFConst.COMP_SKBT_CD, X31CWebConst.DATABEAN_GET_VALUE));
		
/* ++++++++++ v4.00.03 追加開始 ++++++++++ */
		parentMap.put("keisha_ad_chk_lv", hash.get("keisha_ad_chk_lv"));
		parentMap.put("sksha_ad_chk_lv", hash.get("sksha_ad_chk_lv"));
/* ++++++++++ v4.00.03 追加終了 ++++++++++ */
		
		// ANK-2273-00-00 ADD START
		// 請求同時分割フラグ
		parentMap.put("seiky_bnkt_flg", bean[0].sendMessageBoolean(CKW00201SFConst.SEIKY_DOJI_BNKT, X31CWebConst.DATABEAN_GET_VALUE));
		// 分割元＿請求契約番号
		parentMap.put("mt_seiky_kei_no", bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// ANK-2273-00-00 ADD END

		outputMap.put("CKSV000401CC", parentMap);
		
		return parentMap;
	}
	
	/**
	 * 下りマッピング
	 * @param bean　[0]：お客様情報登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCKSV000401CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = (HashMap)outputMap.get("CKSV000401CC");
		
		if (parentMap == null)
		{
			return null;
		}
		
		// 分割元＿契約者タイプ
		bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_KSH_TYPE, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("ksh_type_cd"));
		
		return bean;
	}
	
	/**
	 * 下りマッピング
	 * @param outputMap
	 * @param key
	 */
	@SuppressWarnings("unchecked")
	public HashMap getAgingMap(HashMap outputMap, String key)
	{
		HashMap parentMap = (HashMap)outputMap.get("CKSV000401CC");
		
		if (parentMap == null)
		{
			return null;
		}
		
		ArrayList childList = (ArrayList)parentMap.get(key);
		if (childList != null)
		{
			for(int i = 0; i < childList.size(); i++)
			{
				return (HashMap)childList.get(i);
			}
		}
		
		return null;
	}
	
	/**
	 * マスター会員チェック
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param mmbSbt
	 * @param kshType
	 * @return boolean
	 */
	@SuppressWarnings("unchecked")
	public boolean isCheckMasterMmb(X31SDataBeanAccess bean, HashMap outputMap, String mmbSbt, String kshType)
	{
		HashMap parentMap = (HashMap)outputMap.get("CKSV000401CC");
		
		if (parentMap == null)
		{
			return false;
		}
		
		// 親マスター会員
		String mstMmbSbt = (String)parentMap.get("mst_member_sbt_cd");
		String mstKshType = (String)parentMap.get("mst_keisha_type_cd");
		boolean flg = false;
		
		// マスター会員（個人）、個人でファミリー会員（個人）、個人の場合
		if (JCKCommonConst.CD00039_MASTER_KOJIN.equals(mstMmbSbt) && JCKCommonConst.CD00036_KOJIN.equals(mstKshType)
				&& JCKCommonConst.CD00039_FAMILY_KOJIN.equals(mmbSbt) && JCKCommonConst.CD00036_KOJIN.equals(kshType))
		{
			flg = true;
		}
		// マスター会員（個人）、保守でファミリー会員（個人）、保守の場合
		else if (JCKCommonConst.CD00039_MASTER_KOJIN.equals(mstMmbSbt) && JCKCommonConst.CD00036_MNT.equals(mstKshType)
				&& JCKCommonConst.CD00039_FAMILY_KOJIN.equals(mmbSbt) && JCKCommonConst.CD00036_MNT.equals(kshType))
		{
			flg = true;
		}
		// マスター会員（法人）、法人でファミリー会員（法人）、個人の場合
		else if (JCKCommonConst.CD00039_MASTER_HOJIN.equals(mstMmbSbt) && JCKCommonConst.CD00036_HOJIN.equals(mstKshType)
				&& JCKCommonConst.CD00039_FAMILY_HOJIN.equals(mmbSbt) && JCKCommonConst.CD00036_KOJIN.equals(kshType))
		{
			flg = true;
		}
		// マスター会員（法人）、保守でファミリー会員（法人）、保守の場合
		else if (JCKCommonConst.CD00039_MASTER_HOJIN.equals(mstMmbSbt) && JCKCommonConst.CD00036_MNT.equals(mstKshType)
				&& JCKCommonConst.CD00039_FAMILY_HOJIN.equals(mmbSbt) && JCKCommonConst.CD00036_MNT.equals(kshType))
		{
			flg = true;
		}
		
		if (flg)
		{
			// グループコード
			bean.sendMessageString(CKW00201SFConst.GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("grp_cd"));
			// マスタ会員＿ＳＹＳＩＤ
			bean.sendMessageString(CKW00201SFConst.MASTER_SYSID, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("grp_leader_sysid"));
			return false;
		}
		
		return true;
	}
	
	/**
	 * 拒否メールドメインチェック
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return boolean
	 */
	@SuppressWarnings("unchecked")
	public boolean isCheckMailDomain(X31SDataBeanAccess bean, HashMap outputMap)
	{
		// コンテンツお客様メールアドレス
		String contCustMlad = bean.sendMessageString(CKW00201SFConst.CONT_CUST_MLAD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 入力値のドメイン取得
		String inputDomain = contCustMlad.substring(contCustMlad.indexOf('@') + 1);
		
		HashMap parentMap = (HashMap)outputMap.get("CKSV000401CC");
		
		if (parentMap == null)
		{
			return false;
		}
		
		// 拒否メールドメインリスト取得
		ArrayList childList = (ArrayList)parentMap.get("ng_word_list");
		if (childList != null)
		{
			for(int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				
				if (inputDomain.equals(childMap.get("ng_word")))
				{
					return true;
				}
			}
		}
		
		return false;
	}
	
	/**
	 * チェック結果取得
	 * <br>
	 * @param outputMap
	 * @param key
	 * @return boolean
	 */
	@SuppressWarnings("unchecked")
	public boolean isChkRslt(HashMap outputMap, String key)
	{
		HashMap parentMap = (HashMap)outputMap.get("CKSV000401CC");
		
		if (parentMap == null)
		{
			return false;
		}
		
		return (Boolean)parentMap.get(key);
	}
	
	//---------v29.00.00 ANK-3132-00-00 ADD START---------//
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お客様情報登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setMineoJotoKahiGetCC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{
		if (bean == null)
		{
			return null;
		}
		
		if (bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		X31SDataBeanAccess custbean = bean[0].getDataBeanArray(JCKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST).getDataBean(0);

		ArrayList jotoKahiList = new ArrayList();		// 関連チェック用
		HashMap<String, String> childMap = new HashMap<String, String>();
		
		// 顧客契約引継ぎリストがnull以外の場合
		if (custbean != null){
			// 分割元_料金グループコード　：mineoの契約の場合、下記の内容を設定する
			if (JKKCommonConst.PRC_GRP_CD_51.equals(bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_PRC_GRP_CD, X31CWebConst.DATABEAN_GET_VALUE))){
				// 分割元＿引継＿サービス契約番号
				childMap.put("key_svc_kei_no", bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
				// 分割元＿引継＿ＳＹＳＩＤ
				childMap.put("key_sysid", custbean.sendMessageString(JCKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));

				jotoKahiList.add(childMap);
			}
		}

		parentMap.put("joto_kahi_list", jotoKahiList);
		
		outputMap.put("MineoJotoKahiGetCC", parentMap);
		
		return parentMap;
	}
	//---------v29.00.00 ANK-3132-00-00 ADD END-----------//
}
