/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0203_FUSV0203OPDBMapper
*	ソースファイル名：FUSV0203_FUSV0203OPDBMapper.java
*	作成者			：FJ
*	日付			：2012年02月16日
*＜機能概要＞
*	BP（ご契約者情報個人入力チェック（量販・訪販））へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/16	FJ		新規作成
*   v8.00.00    2014/03/14  FJ）西山   【ANK-1962-00-00】関電CRMに向けた取り組み対応
*   v29.00.00   2017/01/19  FJ）黒田   【ANK-3112-00-00】訪販チャネルのタブレット対応
*   v35.00      2017/10/13  FJ）岡井   【ANK-3225-00-00】未成年mineoマスタユーザのeo申込について
*   v54.00      2021/07/19  FJ）美濃原 【ANK-4078-00-00】提携先企業向けエントリーコードの訪販量販webへの導入対応
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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.web.webview.FUW00921SF.FUW00921SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class FUSV0203_FUSV0203OPDBMapper
{

	/** 姓と名の区切り文字 */
	private static final String NAMAE_KUGIRI = "　";
	/** 氏名(姓) p_name_last */
	private static final String P_NAME_LAST = "氏名（姓）";
	/** 氏名(名) p_name_first */
	private static final String P_NAME_FIRST = "氏名（名）";
	/** 氏名かな(姓) p_kname_last */
	private static final String P_KNAME_LAST = "氏名かな（姓）";
	/** 氏名かな(名) p_kname_first */
	private static final String P_KNAME_FIRST = "氏名かな（名）";
	/** 性別 p_sex */
	private static final String P_SEX = "性別";

	/* ■ SC */
	/** マップキー お客様名 */
	private static final String MAPKEY_KEY_CUST_NM = "cust_nm";
	/** マップキー お客様カナ名 */
	private static final String MAPKEY_KEY_CUST_KANA = "cust_kana";
	/** マップキー お客様性別コード */
	private static final String MAPKEY_KEY_CUST_SEX_CD = "cust_sex_cd";
	/** マップキー お客様生年月日 */
	private static final String MAPKEY_KEY_CUST_BIRTHD = "cust_birthd";
	/** マップキー 契約者住所手動入力フラグ */
	private static final String MAPKEY_KEY_KEISHA_AD_MAN_INPUT_FLG = "keisha_ad_man_input_flg";
	/** マップキー 関電G個人情報取扱同意有無 */
	private static final String MAPKEY_KEY_KEPG_KJNIF_TRAT_DOI_UM = "kepg_kjnif_trat_doi_um";
	/** マップキー 関電G個人情報提供不可フラグ */
	private static final String MAPKEY_KEY_KEPG_KJNIFT_FFG = "kepg_kjnift_ffg";
	/** マップキー 紹介コード */
	private static final String MAPKEY_KEY_INTR_CD = "intr_cd";
	/** マップキー 分類コード */
	private static final String MAPKEY_KEY_BUNRUI_CD = "bunrui_cd";
	/** マップキー 氏名（姓） */
	private static final String MAPKEY_KEY_LAST = "name_last";
	/** マップキー 親権者名 */
	private static final String MAPKEY_KEY_SKSHA_NM = "sksha_nm";
	/** マップキー 親権者カナ名 */
	private static final String MAPKEY_KEY_SKSHA_KANA = "sksha_kana";
	/** マップキー 親権者生年月日 */
	private static final String MAPKEY_KEY_SKSHA_BIRTHD = "sksha_birthd";
	/** マップキー 親権者続柄コード */
	private static final String MAPKEY_KEY_SKSHA_ZOKUGARA_CD = "sksha_zokugara_cd";
	/** マップキー 続柄その他 */
	private static final String MAPKEY_KEY_ZOKUGARA_OTHER = "zokugara_other";
	/** マップキー 親権者電話番号 */
	private static final String MAPKEY_KEY_SKSHA_TELNO = "sksha_telno";
// ANK-3112-00-00 ADD START
	/** マップキー メールアドレス */
	private static final String MAPKEY_KEY_MLAD = "mlad";
// ANK-3112-00-00 ADD END
	/** マップキー 結果コード */
	private static final String RETURN_CD = "return_cd";
	/** マップキー お客様<個人>登録SC */
	private static final String MAPKEY_KEY_FUSV020301SC = "FUSV020301SC";
// ANK-3112-00-00 ADD START
	/** マップキー 連絡先登録SC */
	private static final String MAPKEY_KEY_FUSV020303SC = "FUSV020303SC";
// ANK-3112-00-00 ADD END
	/** マップキー 紹介者チェックCC */
	private static final String MAPKEY_KEY_FUSV020301CC = "FUSV020301CC";
	/** マップキー WEB申込情報一覧照会SC */
	private static final String MAPKEY_KEY_FUSV020304SC = "FUSV020304SC";
	/** マップキー WEB申込情報更新SC */
	private static final String MAPKEY_KEY_FUSV020305SC = "FUSV020305SC";

	/* ■ その他 */
	/** マップキー 機能コード */
	private static final String MAPKEY_FUNC_CODE = "func_code";
	/** 文字列「"0"」  */
	private static final String STR_ZERO = "0";

	/**
	 * コンストラクタ
	 */
	public FUSV0203_FUSV0203OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力（量販・訪販）
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param kepgKjnifTratDoiUm 関電G個人情報取扱同意有無
	 * @param kepgKjnifFfg 関電G個人情報提供不可フラグ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV020301SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String kepgKjnifTratDoiUm,
			String kepgKjnifFfg, String under20flg)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// ---------------------------------------------------------------------
		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 氏名（姓）＋（名） → お客様＜個人＞登録マップ.お客様名
		String namaeSei = bean[0].sendMessageString(P_NAME_LAST, X31CWebConst.DATABEAN_GET_VALUE);
		String namaeMei = bean[0].sendMessageString(P_NAME_FIRST, X31CWebConst.DATABEAN_GET_VALUE);
		String namaeName = namaeSei + NAMAE_KUGIRI + namaeMei;

		parentMap.put(MAPKEY_KEY_CUST_NM, namaeName);

		// ---------------------------------------------------------------------
		// 氏名かな（姓）＋（名） → お客様＜個人＞登録マップ.お客様カナ名
		String namaeKsei = bean[0].sendMessageString(P_KNAME_LAST, X31CWebConst.DATABEAN_GET_VALUE);
		String namaeKmei = bean[0].sendMessageString(P_KNAME_FIRST, X31CWebConst.DATABEAN_GET_VALUE);
		String namaeKname = namaeKsei + NAMAE_KUGIRI + namaeKmei;
		// DB側ではひらがなでなくカタカナ（変換開始）
		String namae_kata = JFUWebCommon.convFullHiraToFullKataV(namaeKname);

		parentMap.put(MAPKEY_KEY_CUST_KANA, namae_kata);

		// ---------------------------------------------------------------------
		// 性別 → お客様＜個人＞登録マップ.お客様性別コード

		// ---------------------------------------------------------------------
		String seibetsu = bean[0].sendMessageString(P_SEX, X31CWebConst.DATABEAN_GET_VALUE);

		parentMap.put(MAPKEY_KEY_CUST_SEX_CD, seibetsu);

		// ---------------------------------------------------------------------
		// 生年月日（年）＋（月）＋（日） → お客様＜個人＞登録マップ.お客様生年月日

		X31SDataBeanAccessArray dataBeanAccessArray = bean[0].getDataBeanArray(FUW00921SFConst.P_BIRTH); // 生年月日選択肢

		int selectYear = Integer.valueOf(bean[0].sendMessageString(FUW00921SFConst.P_BIRTH_YEAR, X31CWebConst.DATABEAN_GET_VALUE)).intValue();
		int selectMonth = Integer.valueOf(bean[0].sendMessageString(FUW00921SFConst.P_BIRTH_MONTH, X31CWebConst.DATABEAN_GET_VALUE)).intValue();
		int selectDay = Integer.valueOf(bean[0].sendMessageString(FUW00921SFConst.P_BIRTH_DAY, X31CWebConst.DATABEAN_GET_VALUE)).intValue();

		X31SDataBeanAccess yFormBean = dataBeanAccessArray.getDataBean(0);
		X31SDataBeanAccess mFormBean = dataBeanAccessArray.getDataBean(0);
		X31SDataBeanAccess dFormBean = dataBeanAccessArray.getDataBean(0);

		String birthY = yFormBean.sendMessageString(FUW00921SFConst.YEAR_WAREKI_02, X31CWebConst.DATABEAN_GET_VALUE, selectYear).substring(0, 4);
		String birthM = mFormBean.sendMessageString(FUW00921SFConst.MONTH_02, X31CWebConst.DATABEAN_GET_VALUE, selectMonth);
		String birthD = dFormBean.sendMessageString(FUW00921SFConst.DAY_02, X31CWebConst.DATABEAN_GET_VALUE, selectDay);
		birthM = (birthM.length() == 1) ? (STR_ZERO + birthM) : (birthM);
		birthD = (birthD.length() == 1) ? (STR_ZERO + birthD) : (birthD);
		String birthYmd = birthY + birthM + birthD;

		parentMap.put(MAPKEY_KEY_CUST_BIRTHD, birthYmd);

		// ---------------------------------------------------------------------
		// ---------------------------------------------------------------------
		// ---------------------------------------------------------------------
		// 契約者住所手動入力フラグ → お客様＜個人＞登録マップ.契約者住所手動入力フラグ 20120807対応 Otsuka

		// ---------------------------------------------------------------------
		String keisha_ad_man_input_flg = bean[0].sendMessageString(FUW00921SFConst.KEISHA_AD_MAN_INPUT_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		parentMap.put(MAPKEY_KEY_KEISHA_AD_MAN_INPUT_FLG, keisha_ad_man_input_flg);

		// 関電G個人情報取扱同意有無
		parentMap.put(MAPKEY_KEY_KEPG_KJNIF_TRAT_DOI_UM, kepgKjnifTratDoiUm);
		// 関電G個人情報提供不可フラグ
		parentMap.put(MAPKEY_KEY_KEPG_KJNIFT_FFG, kepgKjnifFfg);
		
		// ---------------------------------------------------------------------

		// 20歳未満の場合に設定する
		if (JFUStrConst.CD00002_1.equals(under20flg))
		{
			// 親権者名
			String shinkenshaSei = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_SEI, X31CWebConst.DATABEAN_GET_VALUE);
			String shinkenshaMei = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_MEI, X31CWebConst.DATABEAN_GET_VALUE);
			String shinekenshaNm = JFUStrConst.EMPTY;
			if(!JFUWebCommon.isNull(shinkenshaSei) && !JFUWebCommon.isNull(shinkenshaMei))
			{
				shinekenshaNm = shinkenshaSei + NAMAE_KUGIRI + shinkenshaMei;
			}
			parentMap.put(MAPKEY_KEY_SKSHA_NM, shinekenshaNm);

			// 親権者カナ名
			String shinkenshaSeiKana = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_SEI_KANA, X31CWebConst.DATABEAN_GET_VALUE);
			String shinkenshaMeiKana = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_MEI_KANA, X31CWebConst.DATABEAN_GET_VALUE);
			String shinekenshaNmKana = JFUStrConst.EMPTY;
			if(!JFUWebCommon.isNull(shinkenshaSeiKana) && !JFUWebCommon.isNull(shinkenshaMeiKana))
			{
				shinekenshaNmKana = shinkenshaSeiKana + NAMAE_KUGIRI + shinkenshaMeiKana;
			}
			parentMap.put(MAPKEY_KEY_SKSHA_KANA, JFUWebCommon.convFullHiraToFullKataV(shinekenshaNmKana));

			// 親権者生年月日
			String shinkenshaBirthY = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_BIRTH_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
			String shinkenshaBirthM = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_BIRTH_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
			String shinkenshaBirthD = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_BIRTH_DAY, X31CWebConst.DATABEAN_GET_VALUE);
			shinkenshaBirthM = (shinkenshaBirthM.length() == 1) ? (STR_ZERO + shinkenshaBirthM) : (shinkenshaBirthM);
			shinkenshaBirthD = (shinkenshaBirthD.length() == 1) ? (STR_ZERO + shinkenshaBirthD) : (shinkenshaBirthD);
			String shinkenshaBirthYmd = shinkenshaBirthY + shinkenshaBirthM + shinkenshaBirthD;
			parentMap.put(MAPKEY_KEY_SKSHA_BIRTHD, shinkenshaBirthYmd);

			// 親権者続柄コード
			String shinkenshaZokugaraCd = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_ZOKUGARA_CD, X31CWebConst.DATABEAN_GET_VALUE);
			parentMap.put(MAPKEY_KEY_SKSHA_ZOKUGARA_CD, shinkenshaZokugaraCd);

			// 続柄その他
			String shinkenshaZokugaraSonota = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_ZOKUGARA_SONOTA, X31CWebConst.DATABEAN_GET_VALUE);
			parentMap.put(MAPKEY_KEY_ZOKUGARA_OTHER, shinkenshaZokugaraSonota);

			// 親権者電話番号
			String shinkenshaTelNo1 = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_TELNO_1, X31CWebConst.DATABEAN_GET_VALUE);
			String shinkenshaTelNo2 = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_TELNO_2, X31CWebConst.DATABEAN_GET_VALUE);
			String shinkenshaTelNo3 = bean[0].sendMessageString(FUW00921SFConst.SHINKENSHA_TELNO_3, X31CWebConst.DATABEAN_GET_VALUE);
			String shineknshaTelNo = shinkenshaTelNo1 + shinkenshaTelNo2 + shinkenshaTelNo3;
			parentMap.put(MAPKEY_KEY_SKSHA_TELNO, shineknshaTelNo);
		}

		outputMap.put(MAPKEY_KEY_FUSV020301SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV020302SC(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);

		parentMap.put("EKK0011D010CBSMsg1List", new ArrayList());

		List<HashMap<String, String>> childList = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> childMap = new HashMap<String, String>();
		childMap.put("hnin_cfm_aticle_sbt_cd", bean[0].sendMessageString(FUW00921SFConst.CONFIRM_DOCUMENT_SELECT, X31CWebConst.DATABEAN_GET_VALUE));
		childList.add(childMap);
		parentMap.put("EKK0011D010CBSMsg1List", childList);

		// ご本人様確認書類詳細 → 申込登録SC.本人確認書類名
		parentMap.put("hnin_cfm_bunsho_kind_nm", bean[0].sendMessageString(FUW00921SFConst.CONFIRM_DOCUMENT_DETAIL, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV020302SC", parentMap);

		return outputMap;
	}

// ANK-3112-00-00 ADD START
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV020303SC(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(MAPKEY_FUNC_CODE, func_code);

		// 個人メールアドレス → 連絡先登録SC.メールアドレス
		parentMap.put(MAPKEY_KEY_MLAD, bean[0].sendMessageString(FUW00921SFConst.P_EMAIL, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(MAPKEY_KEY_FUSV020303SC, parentMap);

		return outputMap;
	}
// ANK-3112-00-00 ADD END

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力（量販・訪販）
	 * @param outputMap
	 * @param intrCd　紹介コード
	 * @param bunruiCd 分類コード
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV020301CC(X31SDataBeanAccess[] bean, HashMap outputMap, String intrCd, String bunruiCd)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 分類コード
		parentMap.put(MAPKEY_KEY_BUNRUI_CD, bunruiCd);
		// 紹介コード
		parentMap.put(MAPKEY_KEY_INTR_CD, intrCd);
		// 氏名（姓）
		parentMap.put(MAPKEY_KEY_LAST, bean[0].sendMessageString(FUW00921SFConst.P_NAME_LAST, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(MAPKEY_KEY_FUSV020301CC, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング（紹介者チェック　結果コード）
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 */
	@SuppressWarnings("unchecked")
	public String getFUSV020301CC_RETURN_CD(HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_KEY_FUSV020301CC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_KEY_FUSV020301CC);
		}

		if (null != parentMap)
		{
			if (parentMap.containsKey(RETURN_CD))
			{
				return (String)parentMap.get(RETURN_CD);
			}
		}
		return null;

	}
	
	/**
	 * WEB申込情報一覧照会SC
	 * 
	 * @param bean
	 * @param outputMap
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV020304SC(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(MAPKEY_FUNC_CODE, func_code);

		// 識別キー
		parentMap.put("key_skbt_key", bean[0].sendMessageString(FUW00921SFConst.SKBT_KEY, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(MAPKEY_KEY_FUSV020304SC, parentMap);

		return outputMap;
		
	}
	
	/**
	 * WEB申込情報更新SC
	 * 
	 * @param bean
	 * @param outputMap
	 * @param func_code
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV020305SC(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(MAPKEY_FUNC_CODE, func_code);

		// "1"承認済
		parentMap.put("onet_key_ninsho_flg", "1");

		outputMap.put(MAPKEY_KEY_FUSV020305SC, parentMap);

		return outputMap;
		
	}
}