/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0013_FUSV0013OPDBMapper
*	ソースファイル名：FUSV0013_FUSV0013OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年07月01日
*＜機能概要＞
*	BP（ご契約者情報入力(新規法人)チェック）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/01	FJ		新規作成
*   v5.00.00    2013/02/20  FJ) 玉井    【ANK-1402-00-00】法人のお客様名設定先テーブル変更に伴うマッピング値変更対応
*   v45.00      2019/07/01	FJ) 張本    【ANK-3665-00-00】携帯電話番号の取得率向上対応
*   v50.00      2020/09/01	FJ) 美濃原  【ANK-3917-00-00】提携先企業向けエントリーコードの導入
*   v62.00      2022/11/17	FJ) 大槻    【ANK-4294-00-00】紹介CPの仕組み変更対応
**********************************************************************/
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 eo.common.constant.JFUStrConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00110SF.FUW00110SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 * <p>
 * <BR>
 * @author 富士通
 */
public class FUSV0013_FUSV0013OPDBMapper
{

	/** TODO:姓と名の区切り文字をどうするか           全角スペースでよいか */
	public static final String NAMAE_KUGIRI = "　";
	/** 法人名 e_ename */
	public static final String E_ENAME = "法人名";
	/** 法人名かな e_ekname */
	public static final String E_EKNAME = "法人名かな";
	/** 代表者氏名（姓） e_name_last */
	public static final String E_NAME_LAST = "代表者氏名（姓）";
	/** 代表者氏名（名） e_name_first */
	public static final String E_NAME_FIRST = "代表者氏名（名）";
	/** 代表者かな（姓） e_kname_last */
	public static final String E_KNAME_LAST = "代表者かな（姓）";
	/** 代表者かな（名） e_kname_first */
	public static final String E_KNAME_FIRST = "代表者かな（名）";
	/** 法人メールアドレス e_email */
	public static final String E_EMAIL = "法人メールアドレス";
	/** 契約者住所手動入力フラグ p_email */
	private static final String KEISHA_AD_MAN_INPUT_FLG = "契約者住所手動入力フラグ";

	/* ■ SC */
	/** マップキー メールアドレス */
	private static final String MAPKEY_MLAD = "mlad";
	/** マップキー お客様名 */
	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_COMP_NM = "comp_nm";
	/** マップキー 会社カナ名 */
	private static final String MAPKEY_KEY_COMP_KANA = "comp_kana";
	/** マップキー 法人連絡先担当者所属部署名 */
	private static final String MAPKEY_KEY_HJRRKS_TNT_SHZKB_NM = "hjrrks_tntsha_shozkbsho_nm";
	/** マップキー 契約者住所手動入力フラグ */
	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_COUPON_CD = "coupon_cd";
	/** マップキー 氏名（姓） */
	private static final String MAPKEY_KEY_LAST = "name_last";
	/** マップキー 分類コード */
	private static final String MAPKEY_KEY_BUNRUI_CD = "bunrui_cd";
	/** マップキー 結果コード(紹介コード欄) */
	private static final String RETURN_CD = "return_cd";
	/** マップキー 結果コード(クーポンコード欄) */
	private static final String RETURN_CD2 = "return_cd2";
	/** マップキー 通常の紹介コード（紹介コード独自チェック対象） */
	private static final String RETURN_TUJYO_CD = "return_tujyo_cd";
	/** マップキー 申込区分 */
	private static final String MAPKEY_MSKM_KBN = "mskm_kbn";
	/** マップキー お客様＜法人＞登録SC */
	private static final String MAPKEY_KEY_FUSV001301SC = "FUSV001301SC";
	/** マップキー 連絡先登録SC */
	private static final String MAPKEY_KEY_FUSV001302SC = "FUSV001302SC";
	/** マップキー 紹介者チェックCC */
	private static final String MAPKEY_KEY_FUSV001301CC = "FUSV001301CC";
	/** マップキー 住所情報分割CC */
	private static final String MAPKEY_KEY_FUSV001302CC = "FUSV001302CC";
	/** エイジング一覧照会（ユニーク）SC */
	private static final String MAPKEY_KEY_FUSV001303SC = "FUSV001303SC";

	/** マップキー 法人連絡先明細 */
	private static final String MAPKEY_KEY_ECK0031D010CBSLIST = "ECK0031D010CBSMsg1List";

	/* ■ その他 */
	/** マップキー 機能コード */
	private static final String MAPKEY_FUNC_CODE = "func_code";

	// ■SC明細
	/** エイジング一覧照会明細 */
	private static final String EZM0111B040CBSMSG1LIST = "EZM0111B040CBSMsg1List";

	/**
	 * コンストラクタ
	 */
	public FUSV0013_FUSV0013OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力１　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param kepgKjnifTratDoiUm　関電G個人情報取扱同意有無
	 * @param kepgKjnifFfg　関電G個人情報提供不可フラグ
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001301SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String kepgKjnifTratDoiUm, String kepgKjnifFfg)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// ---------------------------------------------------------------------
		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 代表者氏名（姓）＋（名） → お客様＜法人＞登録マップ.お客様名
		String daihyoSei = bean[0].sendMessageString(E_NAME_LAST, X31CWebConst.DATABEAN_GET_VALUE);
		String daihyoMei = bean[0].sendMessageString(E_NAME_FIRST, X31CWebConst.DATABEAN_GET_VALUE);
		String daihyoName = daihyoSei + NAMAE_KUGIRI + daihyoMei;

		parentMap.put(MAPKEY_KEY_CUST_NM, daihyoName);

		// ---------------------------------------------------------------------
		// 代表者かな（姓）＋（名） → お客様＜法人＞登録マップ.お客様カナ名
		String daihyoKanaSei = bean[0].sendMessageString(E_KNAME_LAST, X31CWebConst.DATABEAN_GET_VALUE);
		String daihyoKanaMei = bean[0].sendMessageString(E_KNAME_FIRST, X31CWebConst.DATABEAN_GET_VALUE);
		String daihyoKanaName = daihyoKanaSei + NAMAE_KUGIRI + daihyoKanaMei;
		// DB側ではひらがなでなくカタカナ（変換開始）
		String daihyoKata = JFUWebCommon.convFullHiraToFullKataV(daihyoKanaName);

		parentMap.put(MAPKEY_KEY_CUST_KANA, daihyoKata);

		// ---------------------------------------------------------------------
		// 法人名 → お客様＜法人＞登録マップ.会社名
		String hojinMei = bean[0].sendMessageString(E_ENAME, X31CWebConst.DATABEAN_GET_VALUE);

		parentMap.put(MAPKEY_KEY_COMP_NM, hojinMei);

		// ---------------------------------------------------------------------
		// 法人かな → お客様＜法人＞登録マップ.会社カナ名
		String hojinKanaMei = bean[0].sendMessageString(E_EKNAME, X31CWebConst.DATABEAN_GET_VALUE);
		// DB側ではひらがなでなくカタカナ（変換開始）
		String hojinKata = JFUWebCommon.convFullHiraToFullKataV(hojinKanaMei);

		parentMap.put(MAPKEY_KEY_COMP_KANA, hojinKata);

		parentMap.put(MAPKEY_KEY_ECK0031D010CBSLIST, new ArrayList());
		/* ++++++++++ v1.00.00 個別実装開始 ++++++++++ */
		List<HashMap<String, String>> childList = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> childMap = new HashMap<String, String>();
		childMap.put(MAPKEY_KEY_HJRRKS_TNT_SHZKB_NM, "");
		childList.add(childMap);
		parentMap.put(MAPKEY_KEY_ECK0031D010CBSLIST, childList);
		/* ++++++++++ v1.00.00 個別実装終了 ++++++++++ */

		// ---------------------------------------------------------------------
		// ---------------------------------------------------------------------
		// 契約者住所手動入力フラグ → お客様＜法人＞登録マップ.契約者住所手動入力フラグ 20120807対応 Otsuka

		// ---------------------------------------------------------------------
		String keisha_ad_man_input_flg = bean[0].sendMessageString(KEISHA_AD_MAN_INPUT_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		parentMap.put(MAPKEY_KEY_KEISHA_AD_MAN_INPUT_FLG, keisha_ad_man_input_flg);
		
		parentMap.put(MAPKEY_KEY_KEPG_KJNIF_TRAT_DOI_UM, kepgKjnifTratDoiUm);
		
		parentMap.put(MAPKEY_KEY_KEPG_KJNIFT_FFG, kepgKjnifFfg);

		// ---------------------------------------------------------------------
		
		outputMap.put(MAPKEY_KEY_FUSV001301SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力１　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001302SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// ---------------------------------------------------------------------
		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 法人メールアドレス → 連絡先登録マップ.メールアドレス
		String hojinMail = bean[0].sendMessageString("個人メールアドレス", X31CWebConst.DATABEAN_GET_VALUE);

		parentMap.put(MAPKEY_MLAD, hojinMail);

		// ---------------------------------------------------------------------
		outputMap.put(MAPKEY_KEY_FUSV001302SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力１　[1]：共有フォームビーン
	 * @param outputMap
	 * @param bunrui_cd 分類コード
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001301CC(X31SDataBeanAccess[] bean, HashMap outputMap, String bunrui_cd)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 紹介コード
		parentMap.put(MAPKEY_KEY_INTR_CD, bean[0].sendMessageString(FUW00110SFConst.INTR_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// クーポンコード
		parentMap.put(MAPKEY_KEY_COUPON_CD, bean[0].sendMessageString(FUW00110SFConst.COUPON_CD, X31CWebConst.DATABEAN_GET_VALUE));

		// 氏名（姓）
		parentMap.put(MAPKEY_KEY_LAST, JFUStrConst.EMPTY);
		// 分類コード 
		parentMap.put(MAPKEY_KEY_BUNRUI_CD, bunrui_cd);

		outputMap.put(MAPKEY_KEY_FUSV001301CC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力１　[1]：共有フォームビーン
	 * @param outputMap
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001302CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		String mkmKbn =
				bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0)
					.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);

		// 申込区分
		parentMap.put(MAPKEY_MSKM_KBN, mkmKbn);

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// ご契約者住所・都道府県・市区町村 → 住所分割処理マップ2.都道府県・市区町村
		parentMap.put("state_city", bean[0].sendMessageString("ご契約者住所・都道府県・市区町村", X31CWebConst.DATABEAN_GET_VALUE));
		// ご契約者住所・字 → 住所分割処理マップ2.字
		parentMap.put("aza", bean[0].sendMessageString("ご契約者住所・字", X31CWebConst.DATABEAN_GET_VALUE));
		// ご契約者住所・丁目・番地等 → 住所分割処理マップ2.丁目・番地等
		parentMap.put("chome_bnchi", bean[0].sendMessageString("ご契約者住所・丁目・番地等", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(MAPKEY_KEY_FUSV001302CC, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング（紹介コードチェック　結果コード）
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 */
	@SuppressWarnings("unchecked")
	public String getFUSV001301CC_RETURN_CD(HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_KEY_FUSV001301CC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_KEY_FUSV001301CC);
		}

		if (null != parentMap)
		{
			if (parentMap.containsKey(RETURN_CD))
			{
				return (String)parentMap.get(RETURN_CD);
			}
		}
		return null;
	}

	/**
	 * 下りマッピング（クーポンコードチェック　結果コード）
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 */
	@SuppressWarnings("unchecked")
	public String getFUSV001301CC_RETURN_CD2(HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_KEY_FUSV001301CC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_KEY_FUSV001301CC);
		}

		if (null != parentMap)
		{
			if (parentMap.containsKey(RETURN_CD2))
			{
				return (String)parentMap.get(RETURN_CD2);
			}
		}
		return null;
	}

	/**
	 * エイジング一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param funcCd 機能コード
	 * @return マッピング結果
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV001303SC(X31SDataBeanAccess[] bean, HashMap outputMap, String funcCd)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", funcCd);

		// eoID
		String eoid = bean[0].sendMessageString("ｅｏＩＤ", X31CWebConst.DATABEAN_GET_VALUE);

		// KEY_エイジング種別コード(eoID)
		parentMap.put("key_aging_sbt_cd", JFUStrConst.CD00412_004);
		// KEY_エイジング対象値
		parentMap.put("key_aging_tg_value", eoid);

		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		arrayList.add(detailMap);
		parentMap.put(EZM0111B040CBSMSG1LIST, arrayList);

		outputMap.put(MAPKEY_KEY_FUSV001303SC, parentMap);

		return outputMap;
	}

	/**
	 * エイジング一覧照会の下りマッピング処理です。
	 * 
	 * <br>
	 * @param bean データBean
	 * @param outputMap 結果マップ
	 * @return データBean
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess getFUSV001303SC(X31SDataBeanAccess bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_KEY_FUSV001303SC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_KEY_FUSV001303SC);
		}

		if (parentMap != null && parentMap.size() > 0 && parentMap.containsKey(EZM0111B040CBSMSG1LIST))
		{
			// 検索結果全件取得
			ArrayList childList = (ArrayList)parentMap.get(EZM0111B040CBSMSG1LIST);
			if(childList == null || childList.size() == 0)
			{
				// 結果が存在しない場合、空を設定し処理を終了する
				bean.sendMessageString("エイジングステータス", X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
				return bean;
			}

			// 検索結果の0番目を取得
			HashMap childMap = (HashMap)childList.get(0);
			if(childMap == null || childMap.size() == 0)
			{
				// 結果が存在しない場合、空を設定し処理を終了する
				bean.sendMessageString("エイジングステータス", X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
				return bean;
			}

			// エイジングステータス
			bean.sendMessageString("エイジングステータス", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("aging_stat"));
		}

		return bean;
	}
	/**
	 * 通常の紹介コード（紹介コード独自チェック対象）の値取得
	 * @param outputMap
	 * @return
	 */
	public String getFUSV001301CC_RETURN_TUJYO_CD(HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_KEY_FUSV001301CC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_KEY_FUSV001301CC);
		}

		if (null != parentMap)
		{
			
			if (parentMap.containsKey(RETURN_TUJYO_CD))
			{
				return (String)parentMap.get(RETURN_TUJYO_CD);
			}
		}
		return JFUStrConst.EMPTY ;

	}
}