/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹構築
*	モジュール名	：FUSV0011_FUSV0011OPDBMapper
*	ソースファイル名：FUSV0011_FUSV0011OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年07月15日
*＜機能概要＞
*	BP（ご契約者情報照会）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/15	FJ		新規作成
*   v5.00.00    2013/02/19  FJ) 玉井    【ANK-1402-00-00】法人のお客様名設定先テーブル変更に伴うマッピング値変更対応
*   v5.00.00    2013/06/07  FJ) 瀧澤    【ANK-1528-00-00】お客様個人情報の機種依存文字対応(連絡先スキーマのメールアドレス更新処理を変更)
*   v27.00      2016/09/21  FJ) 岡井    【ANK-2987-00-00】メールリーチ率向上
*   v27.00      2016/12/06  FJ) 岡井    【OM-2016-0002470】ＥＦＯデータ集計でシステムエラーとなっている
**********************************************************************/
package eo.web.webview.mapping;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
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.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00110SF.FUW00110SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 * <p>
 * <BR>
 * @author 富士通
 */
public class FUSV0011_FUSV0011OPDBMapper
{

	/* ■ SC */
	/** マップキー ＫＥＹ＿SYSID */
	private static final String MAPKEY_KEY_SYSID = "key_sysid";
	/** マップキー ＫＥＹ＿予約適用年月日 */
	private static final String MAPKEY_KEY_RSV_APLY_YMD = "key_rsv_aply_ymd";
	/** マップキー ＫＥＹ＿サービス契約回線内訳番号 */
	private static final String MAPKEY_KEY_SVC_KEI_UCWK_NO = "key_svc_kei_ucwk_no";
	/** マップキー ＳＹＳＩＤ */
	private static final String MAPKEY_SYSID = "sysid";
	/** マップキー メールアドレス */
	private static final String MAPKEY_MLAD = "mlad";
	/** マップキー 連絡先番号 */
	private static final String RRKS_NO = "rrks_no";
	/** 機能コード */
	private static final String FUNC_CD = "func_cd";
	/** オプトインメール設定フラグ */
	private static final String OPTINM_SETTEI_FLG = "optinm_settei_flg";
	/** オプトインメールリスト */
	private static final String OPTINM_LIST = "optinm_list";
	/** オプトインメール番号 */
	private static final String OPTINM_NO = "optinm_no";
	/** オプトインメール名 */
	private static final String OPTINM_NM = "optinm_nm";
	/** 初期値フラグ */
	private static final String SHK_VALUE_FLG = "shk_value_flg";

	/** マップキー FUSV001101SC(ご契約者情報照会) */
	private static final String MAPKEY_FUSV001101SC = "FUSV001101SC";
	/** マップキー FUSV001102SC(ご契約者情報入力(新規個人)チェック) */
	private static final String MAPKEY_FUSV001102SC = "FUSV001102SC";
	/** マップキー FUSV001103SC(ご契約者情報入力(新規法人)チェック) */
	private static final String MAPKEY_FUSV001103SC = "FUSV001103SC";
	/** マップキー FUSV001104SC(ご契約者情報入力(追加)チェック) */
	private static final String MAPKEY_FUSV001104SC = "FUSV001104SC";
	/** マップキー FUSV001101CC(オプトインメール情報取得CC) */
	private static final String MAPKEY_FUSV001101CC = "FUSV001101CC";
	/** マップキー お客様一意照会明細 */
	private static final String MAPKEY_ECK0011A010CBSMSG1LIST = "ECK0011A010CBSMsg1List";
	/** マップキー お客様<法人>一意照会明細 */
	private static final String MAPKEY_ECK0031A010CBSMSG1LIST = "ECK0031A010CBSMsg1List";
	/** マップキー メールアドレス一覧 */
	private static final String MAPKEY_EKK0361B501CBSMSG1LIST = "EKK0361B501CBSMsg1List";
	/** マップキー メールアドレス一覧(連絡先) */
	private static final String MAPKEY_ECK0201B503CBSMSG1LIST = "ECK0201B503CBSMsg1List";

	/* ■ 実行判定で使用 */
	/** マップキー 契約種別 */
	private static final String MAPKEY_KEIYAKU_SBT = "keiyakuSbt";

	/* ■ その他 */
	/** マップキー 機能コード */
	private static final String MAPKEY_FUNC_CODE = "func_code";
	/** オプトインメール設定フラグ 1：設定済 */
	private static final String OPTINM_SETTEI_FLG_1 = "1";
	/** メール受信設定表示フラグ 0：非表示 */
	private static final String MAIL_JUSIN_SETTEI_DSP_FLG_0 = "0";
	/** メール受信設定表示フラグ 1：表示 */
	private static final String MAIL_JUSIN_SETTEI_DSP_FLG_1 = "1";
	/** 初期値フラグ 1：デフォルトチェック */
	private static final String SHK_VALUE_FLG_1 = "1";

	/* ■プロパティファイル */
	/** 定義取得パス 対象外オプトインメール番号 */
	private static final String PATH_PA_PPLAN_NM = "DISPSETTING/SETTING[@screenId='FUW00110']/DISPTEXT[@groupid='TG_OUT_OPTINM_NO']";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";
	/** 不明な遷移元 */
	private static final String ID_OPTINM_NO = "OPTINM_NO";

	/** プロパティファイル取得文字列（CX案件は競争ルールと同日に商用適用となるため競争ルールと同じ蓋開け定義を利用する） */
	private static final String CX_START_FROM = "DISPSETTING/COMMONSETTING/DISPTEXT[@id='KOJIHI_KAP_24_START_YMD']";

	/**
	 * コンストラクタ
	 */
	public FUSV0011_FUSV0011OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001101SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccess webNewBean = null; // 共有フォームBeanのＷＥＢ新規以下へのアクセサ
		X31SDataBeanAccessArray beanArray = null;

		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 共有フォームBean.ＷＥＢ新規[0].ｓｙｓＩＤ → お客様一意照会マップ.ＫＥＹ＿SYSID
		parentMap.put(MAPKEY_KEY_SYSID, webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));

		// ---------------------------------------------------------------------
		// サービスフォームBean.運用日付を設定 → お客様一意照会マップ.ＫＥＹ＿予約適用年月日
		parentMap.put(MAPKEY_KEY_RSV_APLY_YMD, bean[0].sendMessageString(FUW00110SFConst.OPE_DATE, X31CWebConst.DATABEAN_GET_VALUE));

		// ---------------------------------------------------------------------
		outputMap.put(MAPKEY_FUSV001101SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param keiyakuSbt　契約種別
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001102SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String keiyakuSbt)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccess webNewBean = null; // 共有フォームBeanのＷＥＢ新規以下へのアクセサ
		X31SDataBeanAccessArray beanArray = null;

		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 共有フォームBean.ＷＥＢ新規[0].ｓｙｓＩＤ → お客様<法人>一意照会マップ.ＫＥＹ＿SYSID
		parentMap.put(MAPKEY_KEY_SYSID, webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));

		// 契約種別(1:個人、2:法人)
		parentMap.put(MAPKEY_KEIYAKU_SBT, keiyakuSbt);

		outputMap.put(MAPKEY_FUSV001102SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001103SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccess webNewBean = null; // 共有フォームBeanのＷＥＢ新規以下へのアクセサ
		X31SDataBeanAccess keiyakuSvcBean = null; // ＷＥＢ新規の契約サービス情報以下へのアクセサ
		X31SDataBeanAccessArray beanArray = null;

		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);
		beanArray = webNewBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		keiyakuSvcBean = beanArray.getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// ---------------------------------------------------------------------
		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 共有フォームBean.ＷＥＢ新規[0].ｓｙｓＩＤ → メールアドレス一覧照会マップ.ＫＥＹ＿SYSID
		parentMap.put(MAPKEY_KEY_SYSID, webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));

		// ---------------------------------------------------------------------
		// 共有フォームBean.ＷＥＢ新規[0].契約サービス情報[0].サービス契約回線内訳番号
		// → メールアドレス一覧照会マップ.ＫＥＹ＿サービス契約回線内訳番号
		parentMap.put(MAPKEY_KEY_SVC_KEI_UCWK_NO, keiyakuSvcBean.sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_10,
				X31CWebConst.DATABEAN_GET_VALUE));

		// ---------------------------------------------------------------------
		outputMap.put(MAPKEY_FUSV001103SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001104SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccess webNewBean = null; // 共有フォームBeanのＷＥＢ新規以下へのアクセサ
		X31SDataBeanAccessArray beanArray = null;

		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(MAPKEY_FUNC_CODE, func_code);

		// ---------------------------------------------------------------------
		// 共有フォームBean.ＷＥＢ新規[0].ｓｙｓＩＤ → 連絡先メールアドレス一覧照会.SYSID
		parentMap.put(MAPKEY_SYSID, webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));

		// ---------------------------------------------------------------------
		outputMap.put(MAPKEY_FUSV001104SC, parentMap);

		return outputMap;
	}

	/**
	 * オプトインメール情報取得CCの上りマッピングをします。
	 *
	 * <br>
	 * @param bean [0]：ご契約者情報入力 [1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap 結果
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV001101CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		// 共有フォームBeanのＷＥＢ新規以下へのアクセサ
		X31SDataBeanAccess webNewBean = null; 
		X31SDataBeanAccessArray beanArray = null;

		// ＷＥＢ新規情報
		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 機能コード
		parentMap.put(FUNC_CD, func_code);
		// SYSID
		parentMap.put(MAPKEY_SYSID, webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(MAPKEY_FUSV001101CC, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @return X31SDataBeanAccess[] ご契約者情報入力　[1]：共有フォームビーン
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV001101SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_FUSV001101SC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_FUSV001101SC);
		}

		ArrayList childList = null;

		childList = null;
		if (parentMap.containsKey(MAPKEY_ECK0011A010CBSMSG1LIST))
		{
			childList = (ArrayList)parentMap.get(MAPKEY_ECK0011A010CBSMSG1LIST);

			X31SDataBeanAccess subbean = bean[0];
			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				// サービスフォームBean.お客様名 ← お客様一意照会マップ.お客様一意照会明細.お客様名
				subbean.sendMessageString(FUW00110SFConst.OKK_NM, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cust_nm"));
				// サービスフォームBean.お客様カナ名 ← お客様一意照会マップ.お客様一意照会明細.お客様カナ名
				subbean.sendMessageString(FUW00110SFConst.OKK_NM_KANA, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cust_kana"));
				// サービスフォームBean.お客様性別コード ← お客様一意照会マップ.お客様一意照会明細.お客様性別コード
				subbean.sendMessageString(FUW00110SFConst.OKK_SEX_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cust_sex_cd"));
				// サービスフォームBean.お客様性別コード名称 ← お客様一意照会マップ.お客様一意照会明細.お客様性別コード名称
				subbean.sendMessageString(FUW00110SFConst.OKK_SEX_NM, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cust_sex_cd_nm"));
				// サービスフォームBean.お客様生年月日 ← お客様一意照会マップ.お客様一意照会明細.お客様生年月日
				subbean.sendMessageString(FUW00110SFConst.OKK_BIRTH, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cust_birthd"));
			}
		}
		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @return X31SDataBeanAccess[] ご契約者情報入力　[1]：共有フォームビーン
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV001102SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_FUSV001102SC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_FUSV001102SC);
		}

		ArrayList childList = null;

		childList = null;
		if (parentMap.containsKey(MAPKEY_ECK0031A010CBSMSG1LIST))
		{
			childList = (ArrayList)parentMap.get(MAPKEY_ECK0031A010CBSMSG1LIST);

			X31SDataBeanAccess subbean = bean[0];
			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				// サービスフォームBean.会社名 ← お客様＜法人＞一意照会マップ.お客様＜法人＞一意照会明細.会社名
				subbean.sendMessageString(FUW00110SFConst.KAISHA_NM, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("comp_nm"));
				// サービスフォームBean.会社カナ名 ← お客様＜法人＞一意照会マップ.お客様＜法人＞一意照会明細.会社カナ名
				subbean.sendMessageString(FUW00110SFConst.KAISHA_NM_KANA, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("comp_kana"));
				// 2013/02/19 ANK-1402-00-00
				// サービスフォームBean.お客様名 ← お客様＜法人＞一意照会マップ.お客様＜法人＞一意照会明細.代表者名
				subbean.sendMessageString(FUW00110SFConst.OKK_NM, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dihysha_nm"));
				// サービスフォームBean.お客様カナ名 ← お客様＜法人＞一意照会マップ.お客様＜法人＞一意照会明細.代表者カナ名
				subbean.sendMessageString(FUW00110SFConst.OKK_NM_KANA, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("dihysha_kana"));

			
			}
		}
		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：ご契約者情報入力　[1]：共有フォームビーン
	 * @param outputMap
	 * @return X31SDataBeanAccess[] ご契約者情報入力　[1]：共有フォームビーン
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV001103SC(X31SDataBeanAccess[] bean, HashMap outputMap, X31BWebBusinessLogic bl) throws Exception
	{

		Set<String> mladSummary = new HashSet<String>();
		
		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_FUSV001103SC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_FUSV001103SC);
		}

		ArrayList childList = null;

		// 契約種別の個人／法人の別によって格納先が変わる

		X31SDataBeanAccessArray beanArray = null;
		X31SDataBeanAccess webNewBean = null;
		X31SDataBeanAccess targetMailList = null;

		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);

		beanArray = bean[0].getDataBeanArray(FUW00110SFConst.P_EMAIL_LIST);
		targetMailList = beanArray.getDataBean(0);

		childList = null;
		if (parentMap.containsKey(MAPKEY_EKK0361B501CBSMSG1LIST))
		{
			childList = (ArrayList)parentMap.get(MAPKEY_EKK0361B501CBSMSG1LIST);

			for (int i = 0; i < childList.size(); i++)
			{

				HashMap childMap = (HashMap)childList.get(i);
				Object objMlad = childMap.get(MAPKEY_MLAD);
				String strMlad = (objMlad != null) ? (((String)objMlad)) : ("");

				strMlad = strMlad.replaceAll("^[ 　\\t]+", "");
				strMlad = strMlad.replaceAll("[ 　\\t]+$", "");

				if (strMlad.length() <= 0)
				{
					continue; // ブランク値はリストに登録しない
				}

				if (!JFUWebCommon.isEmail1Check(strMlad))
				{
					// メールアドレスの形式がEmail1形式でない場合はリストに登録しない
					continue;
				}

				mladSummary.add(strMlad);

				// (個人／法人)メールアドレスリスト.項目実値 ← メールアドレス一覧照会マップ.メールアドレス一覧.メールアドレス
				targetMailList.sendMessageString(FUW00110SFConst.TRUE_VALUE_01, X31CWebConst.DATABEAN_ADD_VALUE, strMlad);
				// (個人／法人)メールアドレスリスト.項目ラベル ← メールアドレス一覧照会マップ.メールアドレス一覧.メールアドレス
				targetMailList.sendMessageString(FUW00110SFConst.LABEL_VALUE_01, X31CWebConst.DATABEAN_ADD_VALUE, strMlad);
			}
		}
		
		parentMap = null;
		if (outputMap.containsKey(MAPKEY_FUSV001104SC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_FUSV001104SC);
		}

		childList = null;

		beanArray = null;
		targetMailList = null;
		webNewBean = null;

		beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		webNewBean = beanArray.getDataBean(0);

		beanArray = bean[0].getDataBeanArray(FUW00110SFConst.P_EMAIL_LIST);
		targetMailList = beanArray.getDataBean(0);

		childList = null;
		
		// 共有フォームBeanの契約者情報を取得
		X31SDataBeanAccessArray keiyakuInfoBeanArray = webNewBean.getDataBeanArray(CommonInfoCFConst.KEIYAKUSHA_INFO);
		X31SDataBeanAccess keiyakuInfoBean = keiyakuInfoBeanArray.getDataBean(0);

		boolean contentsRrsk = false;
		if (parentMap.containsKey(MAPKEY_ECK0201B503CBSMSG1LIST))
		{
			childList = (ArrayList)parentMap.get(MAPKEY_ECK0201B503CBSMSG1LIST);

			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				if (JFUStrConst.CD00871_1.equals(childMap.get("rrks_bunrui_cd")))
				{
					contentsRrsk = true;
					Object objMlad = childMap.get(MAPKEY_MLAD);
					String strMlad = (objMlad != null) ? (((String)objMlad)) : ("");
					X31SDataBeanAccess subbean = bean[0];
	
					strMlad = strMlad.replaceAll("^[ 　\\t]+", "");
					strMlad = strMlad.replaceAll("[ 　\\t]+$", "");
	
					if (strMlad.length() <= 0)
					{
						continue; // ブランク値はリストに登録しない
					}
	
					if (!JFUWebCommon.isEmail1Check(strMlad))
					{
						// メールアドレスの形式がEmail1形式でない場合はリストに登録しない
						continue;
					}
	
					if (!mladSummary.contains(strMlad))
					{
						// (個人／法人)メールアドレスリスト.項目実値 ← メールアドレス一覧照会マップ.メールアドレス一覧.メールアドレス
						targetMailList.sendMessageString(FUW00110SFConst.TRUE_VALUE_01, X31CWebConst.DATABEAN_ADD_VALUE, strMlad);
						// (個人／法人)メールアドレスリスト.項目ラベル ← メールアドレス一覧照会マップ.メールアドレス一覧.メールアドレス
						targetMailList.sendMessageString(FUW00110SFConst.LABEL_VALUE_01, X31CWebConst.DATABEAN_ADD_VALUE, strMlad);
					}
					
					subbean.sendMessageString(FUW00110SFConst.P_EMAIL, X31CWebConst.DATABEAN_SET_VALUE, strMlad);
					break;
				}
			}
			String cxStartFrom = JFUWebCommon.getDispItem(CX_START_FROM);
			if (!JFUWebCommon.isNull(cxStartFrom) && Integer.parseInt(cxStartFrom) <= Integer.parseInt(JFUWebCommon.getOpeDate(bl, null)))
			{
			if (!contentsRrsk){
				// (個人／法人)メールアドレスリスト.項目実値 ← メールアドレス一覧照会マップ.メールアドレス一覧.メールアドレス
				targetMailList.sendMessageString(FUW00110SFConst.TRUE_VALUE_01, X31CWebConst.DATABEAN_ADD_VALUE, "otherMailAddress");
				// (個人／法人)メールアドレスリスト.項目ラベル ← メールアドレス一覧照会マップ.メールアドレス一覧.メールアドレス
				targetMailList.sendMessageString(FUW00110SFConst.LABEL_VALUE_01, X31CWebConst.DATABEAN_ADD_VALUE, "その他メールアドレス");
			}
			}
			for (int j = 0; j < childList.size(); j++)
			{
				HashMap childMap = (HashMap)childList.get(j);
				if (JFUStrConst.CD00871_0.equals(childMap.get("rrks_bunrui_cd")))
				{
					Object objMlad = childMap.get(MAPKEY_MLAD);
					String strMlad = (objMlad != null) ? (((String)objMlad)) : ("");
	
					strMlad = strMlad.replaceAll("^[ 　\\t]+", "");
					strMlad = strMlad.replaceAll("[ 　\\t]+$", "");
					// 更新対象のレコードがあれば、連絡先メールアドレスの情報を共有フォームBeanに詰める
					keiyakuInfoBean.sendMessageString(CommonInfoCFConst.RRKS_NO_MLAD_09, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get(RRKS_NO));
					break;
				}
			}
		}
		return bean;
	}

	/**
	 * オプトインメール情報取得CCの下りマッピングをします。
	 * 
	 * @param bean bean [0]：ご契約者情報入力 [1]：共有フォームビーン
	 * @param outputMap 結果
	 * @return X31SDataBeanAccess
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV001101CC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MAPKEY_FUSV001101CC))
		{
			parentMap = (HashMap)outputMap.get(MAPKEY_FUSV001101CC);
		}

		if (parentMap == null || parentMap.size() == 0)
		{
			// 情報が取得できていない場合
			bean[0].sendMessageString(FUW00110SFConst.MAIL_JUSIN_SETTEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE,
					MAIL_JUSIN_SETTEI_DSP_FLG_0);
			return bean;
		}

		// 対象外オプトインメール番号リスト
		List<String> tgOutOptinmNoList = getTgOutOptinmNoList();
		DEBUG_LOG.info("※対象外オプトインメール番号リスト：" + tgOutOptinmNoList);

		// メール受信設定表示フラグ
		if (parentMap.containsKey(OPTINM_SETTEI_FLG))
		{
			if (!OPTINM_SETTEI_FLG_1.equals((String)parentMap.get(OPTINM_SETTEI_FLG)))
			{
				// オプトインメール設定フラグが「1：設定済」以外の場合
				bean[0].sendMessageString(FUW00110SFConst.MAIL_JUSIN_SETTEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE,
						MAIL_JUSIN_SETTEI_DSP_FLG_1);
			}
			else
			{
				// オプトインメール設定フラグが「1：設定済」の場合
				bean[0].sendMessageString(FUW00110SFConst.MAIL_JUSIN_SETTEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE,
						MAIL_JUSIN_SETTEI_DSP_FLG_0);
			}
		}

		// 個人メール受信設定＆法人メール受信設定
		if (parentMap.containsKey(OPTINM_LIST) && (ArrayList)parentMap.get(OPTINM_LIST) != null)
		{
			// 個人メール受信設定
			X31SDataBeanAccessArray kMailJushinSetteiArray = bean[0].getDataBeanArray(FUW00110SFConst.P_MAIL_JUSIN_SETTEI);
			kMailJushinSetteiArray.clearArray();

			// 法人メール受信設定
			X31SDataBeanAccessArray hMailJushinSetteiArray = bean[0].getDataBeanArray(FUW00110SFConst.E_MAIL_JUSIN_SETTEI);
			hMailJushinSetteiArray.clearArray();

			ArrayList optinmList = (ArrayList)parentMap.get(OPTINM_LIST);
			for (int i = 0; i < optinmList.size(); i++)
			{
				HashMap childMap = (HashMap)optinmList.get(i);

				// 対象外オプトインメール番号判定
				if (tgOutOptinmNoList.contains((String)childMap.get(OPTINM_NO)))
				{
					// 対象外オプトインメール番号である場合
					continue;
				}

				X31SDataBeanAccess kMailJushinSettei = kMailJushinSetteiArray.addDataBean();
				X31SDataBeanAccess hMailJushinSettei = hMailJushinSetteiArray.addDataBean();

				// オプトインメール選択状態
				if (SHK_VALUE_FLG_1.equals((String)childMap.get(SHK_VALUE_FLG)))
				{
					// 初期値フラグが「1：デフォルトチェック」の場合
					kMailJushinSettei.sendMessageBoolean(FUW00110SFConst.P_SEL_OPTINM_02, X31CWebConst.DATABEAN_SET_VALUE, true);
					hMailJushinSettei.sendMessageBoolean(FUW00110SFConst.E_SEL_OPTINM_03, X31CWebConst.DATABEAN_SET_VALUE, true);
				}
				else
				{
					// 上記以外の場合
					kMailJushinSettei.sendMessageBoolean(FUW00110SFConst.P_SEL_OPTINM_02, X31CWebConst.DATABEAN_SET_VALUE, false);
					hMailJushinSettei.sendMessageBoolean(FUW00110SFConst.E_SEL_OPTINM_03, X31CWebConst.DATABEAN_SET_VALUE, false);
				}

				// オプトインメール番号
				kMailJushinSettei.sendMessageString(FUW00110SFConst.P_OPTINM_NO_02, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get(OPTINM_NO));
				hMailJushinSettei.sendMessageString(FUW00110SFConst.E_OPTINM_NO_03, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get(OPTINM_NO));
				// オプトインメール名
				kMailJushinSettei.sendMessageString(FUW00110SFConst.P_OPTINM_NM_02, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get(OPTINM_NM));
				hMailJushinSettei.sendMessageString(FUW00110SFConst.E_OPTINM_NM_03, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get(OPTINM_NM));
			}

			if (kMailJushinSetteiArray == null || kMailJushinSetteiArray.getCount() == 0
					|| hMailJushinSetteiArray == null || hMailJushinSetteiArray.getCount() == 0)
			{
				// 表示するオプトインメール情報がない場合
				bean[0].sendMessageString(FUW00110SFConst.MAIL_JUSIN_SETTEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE,
						MAIL_JUSIN_SETTEI_DSP_FLG_0);
			}
		}
		else
		{
			// 表示するオプトインメール情報がない場合
			bean[0].sendMessageString(FUW00110SFConst.MAIL_JUSIN_SETTEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE,
					MAIL_JUSIN_SETTEI_DSP_FLG_0);
		}

		return bean;
	}

	/**
	 * 対象外オプトインメール番号リストを取得します。
	 * 
	 * <br>
	 * @return 対象外オプトインメール番号リスト
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private List<String> getTgOutOptinmNoList() throws Exception
	{
		List<String> resultList = new ArrayList();

		// 対象外オプトインメール番号一覧を取得
		Map<String, String> tgOutOptinmNoMap = JFUWebCommon.getDispItemsAsMap(PATH_PA_PPLAN_NM, QUERY_ATTR_NAME);

		if (tgOutOptinmNoMap == null || tgOutOptinmNoMap.size() == 0)
		{
			// 情報が取得できていない場合
			return resultList;
		}

		String tgOutOptinmNo = tgOutOptinmNoMap.get(ID_OPTINM_NO);

		if (JFUWebCommon.isNull(tgOutOptinmNo))
		{
			// 情報が取得できていない場合
			return resultList;
		}

		if (tgOutOptinmNo.contains(JFUStrConst.COMMA))
		{
			// カンマ区切りの場合
			String[] tgOutOptinmNoList = tgOutOptinmNo.split(JFUStrConst.COMMA);

			for (int i = 0; i < tgOutOptinmNoList.length; i++)
			{
				String no = tgOutOptinmNoList[i];

				if (JFUWebCommon.isNull(no))
				{
					continue;
				}

				resultList.add(no);
			}
		}
		else
		{
			// カンマ区切りでない場合
			resultList.add(tgOutOptinmNo);
		}

		return resultList;
	}
}