/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0321_FUSV0321OPDBMapper
*	ソースファイル名：FUSV0321_FUSV0321OPDBMapper.java
*	作成者			：FJ
*	日付			：2018年09月11日
*＜機能概要＞
*	BP（機器補償オプション申込(初期表示)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者			修正内容
*   v39.00      2018/09/11  FJ）和田(さ)   【ANK-3484-00-00】端末補償サービス導入
*
**********************************************************************/
package eo.web.webview.mapping;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.common.JCMConstants;
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.common.util.JPCUtilCommon;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW12301SF.FUW12301SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 *
 * <br>
 * @author 富士通
 */
public class FUSV0321_FUSV0321OPDBMapper
{

	
	/** 配列番号[2]:サービス契約情報 */
	private static final int INFO_IDX_SVC_KEI = 2;

	/** 照会リスト */
	private static final String INFO_LIST = "info_list";
	/** ＰＣプランリスト */
	private static final String PC_PLAN_LIST = "pc_plan_list";
	/** ＰＣワイドプランリスト */
	private static final String PC_WIDE_LIST = "pc_wide_list";
	/** ＴＶプランリスト */
	private static final String TV_PLAN_LIST = "tv_plan_list";
	
	// PCプラン、TVプラン
	/** オプションサービスコード名称 */
	private static final String OP_SVC_CD_NM = "op_svc_cd_nm";
	/** オプションサービス契約ステータス */
	private static final String OP_SVC_KEI_STAT = "op_svc_kei_stat";
	/** サービス開始年月日 */
	private static final String SVC_STAYMD = "svc_staymd";
	/** 機器補償残利用回数 */
	private static final String KIKI_COMPS_ZAN_USE_CNT = "kiki_comps_zan_use_cnt";
	/** データ復旧残利用回数 */
	private static final String DATA_FUKKYU_ZAN_USE_CNT = "data_fukkyu_zan_use_cnt";
	/** 端末補償申込年月日 */
	private static final String TMCP_MSKM_YMD = "tmcp_mskm_ymd";
	/** サービス課金終了年月日 */
	private static final String SVC_CHRG_ENDYMD = "svc_chrg_endymd";
	/** キャンセル連携年月日 */
	private static final String TMCP_CNCL_RNKI_YMD = "tmcp_cncl_rnki_ymd";
		
	// PCWプラン
	/** サブオプションサービスコード名称 */
	private static final String SBOP_SVC_CD_NM = "sbop_svc_cd_nm";
	/** サブオプションサービス契約ステータス */
	private static final String SBOP_SVC_KEI_STAT = "sbop_svc_kei_stat";
	// サービス開始年月日、サービス課金終了年月日、端末補償申込年月日はPCプランと同名
	
	/** 未申込 */
	private static final String MI_MSKM = "未申込";
	/** 未申込(-) */
	private static final String MI_MSKM_BAR = "-";
	/** 契約状態：PCプランorTVプラン */
	private static final String STAT_PC_TV_PLAN = "1";
	/** 契約状態：PCワイドプラン */
	private static final String STAT_PCW_PLAN = "2";
	/** 契約状態：なし */
	private static final String STAT_NON = "0";


	/** 日付フォーマット：年月日 */
	public static final String DATE_FORMAT_1 = "yyyy年M月d日";
	/** 日付フォーマット：yyyyMMdd */
	public static final String DATE_FORMAT_2 = "yyyyMMdd";

	/** 同日を含む／含まないの指定フラグ("1"：含む) */
	private static final String DOJITSU_HUKUMU = "1";


	// ■CC
	/** FUSV032101CC */
	private static final String FUSV032101CC = "FUSV032101CC";

	// ■SC
	/** FUSV032101SC */
	private static final String FUSV032101SC = "FUSV032101SC";

	/** 割賦契約一覧照会(eoスマートリンク)明細 */
	private static final String EKK2541B501CBSMSG1LIST = "EKK2541B501CBSMsg1List";
	
	// ■項目キー
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** 処理区分 */
	private static final String SHORI_DIV = "shori_div";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";

	/** 照会処理区分 */
	private static final String SHOKAI_DIV_REG = "1";

	/** ＫＥＹ＿サービス契約番号 */
	private static final String KEY_SVC_KEI_NO = "key_svc_kei_no";

	/**
	 * コンストラクタ
	 */
	public FUSV0321_FUSV0321OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：機器補償オプション申込(初期表示)　[1]：共有フォームビーン
	 * @param outputMap マップ
	 * @param func_code　機能コード
	 * @return HashMap マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV032101CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 3)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		X31SDataBeanAccess svcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(bean[1], JFUWebCommon.SVC_KEI_INFO);

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);
		// 処理区分 → 端末補償操作CC.処理区分
		parentMap.put(SHORI_DIV, SHOKAI_DIV_REG);
		// サービス契約番号 → 端末補償操作CC.サービス契約番号
		parentMap.put(SVC_KEI_NO, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV032101CC, parentMap);

		return outputMap;
	}

	
	/**
	 * 上りマッピングをします。(割賦契約一覧照会(eoスマートリンク)SC)
	 * 
	 * <br>
	 * @param bean  [0]：eoスマートリンク申込  [1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code  機能コード
	 * @return HashMap
	 */
	public HashMap<String, Object> setFUSV032101SC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);

		// ＫＥＹ＿サービス契約番号
		parentMap.put(KEY_SVC_KEI_NO, 
				bean[INFO_IDX_SVC_KEI].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV032101SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean [0]：おうちの機器補償：ＰＣプラン
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV032102SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 3)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 料金プランコード（おうちの機器補償：ＰＣプラン） 
		// → 料金プラン固定単価一覧照会（固定料金表示）（おうちの機器補償：ＰＣプラン）SCマップ.ＫＥＹ＿料金プランコード
		parentMap.put("key_pplan_cd", JFUStrConst.CD00565_PBE401);

		outputMap.put("FUSV032102SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean [0]：おうちの機器補償：ＰＣワイドプラン
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV032103SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 3)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 料金プランコード（おうちの機器補償：ＰＣワイドプラン） 
		// → 料金プラン固定単価一覧照会（固定料金表示）（おうちの機器補償：ＰＣワイドプラン）SCマップ.ＫＥＹ＿料金プランコード
		parentMap.put("key_pplan_cd", JFUStrConst.CD00565_PD1201);

		outputMap.put("FUSV032103SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean [0]：おうちの機器補償：ＴＶプラン
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV032104SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 3)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 料金プランコード（おうちの機器補償：ＴＶプラン） 
		// → 料金プラン固定単価一覧照会（固定料金表示）（おうちの機器補償：ＴＶプラン）SCマップ.ＫＥＹ＿料金プランコード
		parentMap.put("key_pplan_cd", JFUStrConst.CD00565_PBE501);

		outputMap.put("FUSV032104SC", parentMap);

		return outputMap;
	}	
	
	/**
	 * 下りマッピング
	 * @param bean　[0]：機器補償オプション申込　[1]：共有フォームビーン
	 * @param outputMap マップ
	 * @param opeDate 運用日付
	 * @return bean　[0]：機器補償オプション申込　[1]：共有フォームビーン
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV032101CC(X31SDataBeanAccess[] bean, HashMap outputMap, String opeDate)  throws Exception
	{

		HashMap parentMap = (HashMap)outputMap.get("FUSV032101CC");
		if (null == parentMap)
		{
			return null; // 上りマップが空の場合はなにもしない
		}
		
		if(parentMap.containsKey(INFO_LIST))
		{
			HashMap<String, List<HashMap<String, Object>>> infoList = (HashMap<String, List<HashMap<String, Object>>>)parentMap.get("info_list");
			// ＰＣプラン、ＰＣワイドプラン、ＴＶプランのいずれかが契約ありの場合true
			boolean kcKeiUmChkFlg = false;
			
			// -----------------------------------------------------------
			// ＰＣプラン、ＰＣワイドプランの確認
			// -----------------------------------------------------------
			// ＰＣプラン、ＰＣワイドプランどちらを採用するか確認
			String pcStat  = null;
			String pcwStat = null;
			
			List<HashMap<String, Object>> planList  = new ArrayList<HashMap<String, Object>>();
			List<HashMap<String, Object>> planwList = new ArrayList<HashMap<String, Object>>();
			
			// ＰＣプランの情報取得
			if(infoList != null && infoList.containsKey(PC_PLAN_LIST))
			{
				planList = infoList.get(PC_PLAN_LIST);
				if (planList != null && planList.size() != 0)
				{
					if (!planList.isEmpty() && planList.get(0).containsKey(OP_SVC_KEI_STAT))
					{
						pcStat =  planList.get(0).get(OP_SVC_KEI_STAT).toString();
					}
				}
			}

			// ＰＣワイドプランの情報取得
			if(infoList != null && infoList.containsKey(PC_WIDE_LIST))
			{
				planwList = infoList.get(PC_WIDE_LIST);
				if (planwList != null && planwList.size() != 0)
				{
					if (!planwList.isEmpty() && planwList.get(0).containsKey(SBOP_SVC_KEI_STAT))
					{
						pcwStat =  planwList.get(0).get(SBOP_SVC_KEI_STAT).toString();
					}
				}
			}

			// PCプランが解約済の場合、申込不可期間確認用にサービス課金終了年月日を取得する
			String svcChrgEndymdPc = "";
			if (JFUStrConst.CD00037_910.equals(pcStat))
			{
				// キャンセル連携済みでない場合に解約済とする
				if (JFUWebCommon.isNull(planList.get(0).get(TMCP_CNCL_RNKI_YMD)))
				{
					svcChrgEndymdPc = planList.get(0).get(SVC_CHRG_ENDYMD).toString();
				}
			}

			// 「910:解約済」「920:キャンセル済」は除く
			if (JFUStrConst.CD00037_910.equals(pcStat) || JFUStrConst.CD00037_920.equals(pcStat))
			{
				pcStat = null;
			}
			
			if (JFUStrConst.CD00037_910.equals(pcwStat) || JFUStrConst.CD00037_920.equals(pcwStat))
			{
				pcwStat = null;
			}
			
			
			// PCプラン・PCワイドプランどちらを表示するか設定
			// 補償情報タイプリスト
			X31SDataBeanAccessArray tnmtBeanArray = bean[0].getDataBeanArray(FUW12301SFConst.COMPS_LIST);

			// １． (PCプラン)サービス提供中未満かつ(PCワイドプラン)サービス提供中未満⇒PCワイドプラン
			// (PCプラン)サービス提供中　　かつ(PCワイドプラン)サービス提供中未満⇒PCプラン
			// (PCプラン)サービス提供中　　かつ(PCワイドプラン)サービス提供中　　⇒PCワイドプラン
	
			// １．(PCプラン)「010:受付済」「020:照査済」「030:締結済」
			// 	⇒PCワイドプランが存在すればPCワイドプラン、存在しなければPCプランを表示
			if (pcStat != null)
			{
				if (JFUStrConst.CD00037_010.equals(pcStat) || JFUStrConst.CD00037_020.equals(pcStat)
						|| JFUStrConst.CD00037_030.equals(pcStat))
				{
					if (null == pcwStat)
					{	
						// PCプラン
						setCompsList(tnmtBeanArray, planList, planList, false, opeDate, svcChrgEndymdPc, false);
					}
					else
					{
						// PCワイドプラン
						setCompsList(tnmtBeanArray, planwList, planList, true, opeDate, svcChrgEndymdPc, true);
					}
				}
				
					
				// ２．３．(PCプラン)「010:受付済」「020:照査済」「030:締結済」これら以外
				// 		２．(PCワイドプラン)「010:受付済」「020:照査済」「030:締結済」、存在しない
				// 			⇒PCプランを表示
				// 		３．(PCワイドプラン)「010:受付済」「020:照査済」「030:締結済」これら以外
				// 			⇒PCワイドプランを表示
		
				if (null != pcStat && !JFUStrConst.CD00037_010.equals(pcStat) && !JFUStrConst.CD00037_020.equals(pcStat)
						&& !JFUStrConst.CD00037_030.equals(pcStat) )
				{
					if (JFUStrConst.CD00037_010.equals(pcwStat) || JFUStrConst.CD00037_020.equals(pcwStat)
							|| JFUStrConst.CD00037_030.equals(pcwStat) || null == pcwStat)
					{	
						// PCワイドプランの契約有無
						boolean pcwKeiFlg = true;
						if ( null == pcwStat) {
							pcwKeiFlg = false;
						}
						// PCプラン
						setCompsList(tnmtBeanArray, planList, planList, false, opeDate, svcChrgEndymdPc, pcwKeiFlg);
					}
					else
					{
						// PCワイドプラン
						setCompsList(tnmtBeanArray, planwList, planList, true, opeDate, svcChrgEndymdPc, true);
					}
				}
				
				kcKeiUmChkFlg = true;
			}
				
			// PCプラン・PCワイドプランどちらもないときは「未設定」
			if (null == pcStat || pcStat.isEmpty())
			{
				setCompsList(tnmtBeanArray, null, null, false, opeDate, svcChrgEndymdPc, false);
			}


			// -----------------------------------------------------------
			// ＴＶプランの確認
			// -----------------------------------------------------------
			// ＴＶプランの情報取得
			List<HashMap<String, Object>> planListTv = new ArrayList<HashMap<String, Object>>();
			String svcChrgEndymdTv = "";

			if(infoList != null && infoList.containsKey(TV_PLAN_LIST))
			{
				planListTv = infoList.get(TV_PLAN_LIST);
				if (planListTv != null && planListTv.size() != 0 
						&& !planListTv.isEmpty() && planListTv.get(0).containsKey(OP_SVC_KEI_STAT))
				{
					// 解約済の場合、申込不可期間確認用にサービス課金終了年月日を取得する
					if (JFUStrConst.CD00037_910.equals(planListTv.get(0).get(OP_SVC_KEI_STAT).toString()))
					{
						// キャンセル連携済みでない場合に解約済とする
						if (JFUWebCommon.isNull(planListTv.get(0).get(TMCP_CNCL_RNKI_YMD)))
						{
							svcChrgEndymdTv = planListTv.get(0).get(SVC_CHRG_ENDYMD).toString();
						}
					}

					if (!JFUStrConst.CD00037_910.equals(planListTv.get(0).get(OP_SVC_KEI_STAT).toString())
							&& !JFUStrConst.CD00037_920.equals(planListTv.get(0).get(OP_SVC_KEI_STAT).toString()))
					{
						kcKeiUmChkFlg = true;
					}
					else {
						planListTv.clear();
					}
					
				}
				// 補償情報タイプリスト
				setCompsList(tnmtBeanArray, planListTv, planListTv, false, opeDate, svcChrgEndymdTv, false);
			}
			
			
			// -----------------------------------------------------------
			// 各項目の設定
			// -----------------------------------------------------------
			// 機器補償契約契約有無("0"：契約なし、"1"：契約あり）
			// ＰＣプラン、ＰＣワイドプラン、ＴＶプランのいずれかが契約ありの場合、表示する。
			String kcKeiUmChk = "0";
			if (!kcKeiUmChkFlg) 
			{
				kcKeiUmChk = "1";
			}
			bean[0].sendMessageObject(FUW12301SFConst.KC_KEI_UM, X31CWebConst.DATABEAN_SET_VALUE, kcKeiUmChk);
		}
		return bean;
	}

	
	/**
	 * 下りマッピングをします。(割賦契約一覧照会(eoスマートリンク)SC)
	 * 
	 * <br> 
	 * @param bean　[0]：機器補償オプション申込　[1]：共有フォームビーン
	 * @param outputMap
	 * @return bean　[0]：機器補償オプション申込　[1]：共有フォームビーン
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV032101SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV032101SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV032101SC);
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listFUSV032101SC_kk_t_kap_kei_EKK2541B501CBSMsg1List 
			= bean[0].getDataBeanArray(FUW12301SFConst.KK_T_KAP_KEI);

		childList = null;

		if (listFUSV032101SC_kk_t_kap_kei_EKK2541B501CBSMsg1List != null 
				&& parentMap != null && parentMap.containsKey(EKK2541B501CBSMSG1LIST))
		{

			childList = (ArrayList)parentMap.get(EKK2541B501CBSMSG1LIST);

			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;
				if (listFUSV032101SC_kk_t_kap_kei_EKK2541B501CBSMsg1List.getCount() - 1 >= i)
				{
					subbean = listFUSV032101SC_kk_t_kap_kei_EKK2541B501CBSMsg1List.getDataBean(i);
				}
				else
				{
					subbean = listFUSV032101SC_kk_t_kap_kei_EKK2541B501CBSMsg1List.addDataBean();
				}

				HashMap childMap = (HashMap)childList.get(i);

				if (subbean == null)
				{
					continue;
				}

				if (childMap == null)
				{
					continue;
				}

				// 割賦契約一覧明細タイプ.割賦契約ステータス ← 割賦契約一覧照会(eoスマートリンク)明細.割賦契約ステータス
				subbean.sendMessageString(FUW12301SFConst.KAP_KEI_STAT_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get("kap_kei_stat"));
				// 割賦契約一覧明細タイプ.割賦請求開始年月 ← 割賦契約一覧照会(eoスマートリンク)明細.割賦請求開始年月
				subbean.sendMessageString(FUW12301SFConst.KAP_SEIKY_STA_YM_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get("kap_seiky_sta_ym"));
				// 割賦契約一覧明細タイプ.機器提供サービス契約ステータス ← 割賦契約一覧照会(eoスマートリンク)明細.機器提供サービス契約ステータス
				subbean.sendMessageString(FUW12301SFConst.KKTK_SVC_KEI_STAT_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get("kktk_svc_kei_stat"));
				// 割賦契約一覧明細タイプ.機器オプションサービス契約番号 ← 割賦契約一覧照会(eoスマートリンク)明細.機器オプションサービス契約番号
				subbean.sendMessageString(FUW12301SFConst.KKOP_SVC_KEI_NO_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get("kkop_svc_kei_no"));
				// 割賦契約一覧明細タイプ.機器オプションサービス契約ステータス ← 割賦契約一覧照会(eoスマートリンク)明細.機器オプションサービス契約ステータス
				subbean.sendMessageString(FUW12301SFConst.KKOP_SVC_KEI_STAT_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get("kkop_svc_kei_stat"));
			}
		}

		return bean;
	}

	/**
	 * 下りマッピング（料金（おうちの機器補償：ＰＣプラン））※税込みで取得
	 * <br>
	 * @param bean [0]：機器補償オプション申込
	 * @param outputMap
	 * @return bean [0]：機器補償オプション申込
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV032102SC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV032102SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV032102SC");
		}

		ArrayList childList = null;

		if (parentMap != null && parentMap.containsKey("EKK0601B002CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK0601B002CBSMsg1List");

			if (childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);
				bean[0].sendMessageString(FUW12301SFConst.PC_PLAN_PRC, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get("pplan_kotei_amnt"));
			}
		}

		return bean;
	}
	/**
	 * 下りマッピング（料金（おうちの機器補償：ＰＣワイドプラン））※税込みで取得
	 * <br>
	 * @param bean [0]：機器補償オプション申込
	 * @param outputMap
	 * @return bean [0]：機器補償オプション申込
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV032103SC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV032103SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV032103SC");
		}

		ArrayList childList = null;

		if (parentMap != null && parentMap.containsKey("EKK0601B002CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK0601B002CBSMsg1List");

			if (childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);
				bean[0].sendMessageString(FUW12301SFConst.PCW_PLAN_PRC, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get("pplan_kotei_amnt"));
			}
		}

		return bean;
	}
	/**
	 * 下りマッピング（料金（おうちの機器補償：ＴＶプラン））※税込みで取得
	 * <br>
	 * @param bean [0]：機器補償オプション申込
	 * @param outputMap
	 * @return bean [0]：機器補償オプション申込
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV032104SC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("FUSV032104SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV032104SC");
		}

		ArrayList childList = null;

		if (parentMap != null && parentMap.containsKey("EKK0601B002CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK0601B002CBSMsg1List");

			if (childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);
				bean[0].sendMessageString(FUW12301SFConst.TV_PLAN_PRC, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get("pplan_kotei_amnt"));
			}
		}

		return bean;
	}
	
	/**
	 * 補償情報タイプリスト内容の設定
	 *
	 * @param tnmtBeanArray Bean
	 * @param planList 検索結果
	 * @param planListZanUseCnt 検索結果(残回数取得用)
	 * @param pcwDspFlg 契約内容の表示がPCワイドプランの場合true
	 * @param opeDate 運用日付
	 * @param svcChrgEndymd 解約済の場合,サービス課金終了年月日
	 * @param pcwKeiFlg PCワイドプランを契約している場合true
	 * @throws Exception 例外
	 */
	
	private void setCompsList(X31SDataBeanAccessArray tnmtBeanArray
									, List<HashMap<String, Object>> planList
									, List<HashMap<String, Object>> planListZanUseCnt
									, boolean pcwFlg
									, String opeDate
									, String svcChrgEndymd
									, boolean pcwKeiFlg
									) throws Exception
	{
		// 補償情報タイプリスト
		// TVの場合はすでにネットが設定されている可能性があるためクリアしない
		if (tnmtBeanArray.getCount() < 1)
		{
			tnmtBeanArray.clearArray();
		}
		
		// データBeanを追加＆情報設定
		X31SDataBeanAccess tnmtBean = tnmtBeanArray.addDataBean();

		String opSvcCdNmKey = OP_SVC_CD_NM;	// 商品名
		
		// PCワイドプラン時の名称を設定しなおす
		if (pcwFlg)
		{
			// 項目名設定
			opSvcCdNmKey = SBOP_SVC_CD_NM;
		}
		
		// ステータスを取得
		String stat = null;
		if (null != planList && !planList.isEmpty()) 
		{ 
			if (!pcwFlg)
			{
				if (planList.get(0).containsKey(OP_SVC_KEI_STAT)) 
				{
					stat = planList.get(0).get(OP_SVC_KEI_STAT).toString();
				}
			} else {
				if (planList.get(0).containsKey(SBOP_SVC_KEI_STAT)) 
				{
					stat = planList.get(0).get(SBOP_SVC_KEI_STAT).toString();
				}
			}
		}

		
		// ●商品名
		String opSvcCdNm = JFUStrConst.EMPTY; 
		if (null != planList && !planList.isEmpty() && planList.get(0).containsKey(opSvcCdNmKey))
		{
			opSvcCdNm =  planList.get(0).get(opSvcCdNmKey).toString();
		}

		if (JFUStrConst.EMPTY.equals(opSvcCdNm))
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.OP_SVC_CD_NM_01, X31CWebConst.DATABEAN_SET_VALUE, MI_MSKM);
		}
		else
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.OP_SVC_CD_NM_01, X31CWebConst.DATABEAN_SET_VALUE, opSvcCdNm);
		}
		
		
		// ●申込日
		String tmcpMskmYmd = JFUStrConst.EMPTY; 
		if (null != planList && !planList.isEmpty() && planList.get(0).containsKey(TMCP_MSKM_YMD))
		{
			tmcpMskmYmd = planList.get(0).get(TMCP_MSKM_YMD).toString(); 
		}

		if (JFUStrConst.EMPTY.equals(tmcpMskmYmd))
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.TMCP_MSKM_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, MI_MSKM);
		}
		else
		{
			// 日付フォーマット適用
			SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_FORMAT_1);
			SimpleDateFormat sdf2 = new SimpleDateFormat(DATE_FORMAT_2);

			String dateChg = sdf1.format(sdf2.parse(tmcpMskmYmd));
			tnmtBean.sendMessageObject(FUW12301SFConst.TMCP_MSKM_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, dateChg);
		}
		

		// ●補償開始日
		String svcStaymd = JFUStrConst.EMPTY; 
		if (null != planList && !planList.isEmpty() )
		{
			// ステータスが100(サービス提供中)未満の場合、「-」。
			if (null != stat 
					&& !JFUStrConst.CD00037_010.equals(stat) 
					&& !JFUStrConst.CD00037_020.equals(stat)
					&& !JFUStrConst.CD00037_030.equals(stat) 
					&& planList.get(0).containsKey(SVC_STAYMD))
			{
				svcStaymd = planList.get(0).get(SVC_STAYMD).toString(); 
			} else {
				svcStaymd = MI_MSKM_BAR;
			}
			
		}

		if (JFUStrConst.EMPTY.equals(svcStaymd))
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.SVC_STAYMD_01, X31CWebConst.DATABEAN_SET_VALUE, MI_MSKM);
		}
		else if (MI_MSKM_BAR.equals(svcStaymd)) 
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.SVC_STAYMD_01, X31CWebConst.DATABEAN_SET_VALUE, svcStaymd);
		} else {
			// 日付フォーマット適用
			SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_FORMAT_1);
			SimpleDateFormat sdf2 = new SimpleDateFormat(DATE_FORMAT_2);

			String dateChg = sdf1.format(sdf2.parse(svcStaymd));
			tnmtBean.sendMessageObject(FUW12301SFConst.SVC_STAYMD_01, X31CWebConst.DATABEAN_SET_VALUE, dateChg);
		}
		
		
		// ●データ復旧サービス利用残回数
		String dataFukkyuZanUseCnt = JFUStrConst.EMPTY; 
		
		// ステータスが100：サービス提供中未満の場合、表示しない
		if (null != stat && !JFUStrConst.CD00037_010.equals(stat) && !JFUStrConst.CD00037_020.equals(stat)
				&& !JFUStrConst.CD00037_030.equals(stat) )
		{
			if (planListZanUseCnt != null 
					&& !planListZanUseCnt.isEmpty() && planListZanUseCnt.get(0).containsKey(DATA_FUKKYU_ZAN_USE_CNT))
			{
				dataFukkyuZanUseCnt = planListZanUseCnt.get(0).get(DATA_FUKKYU_ZAN_USE_CNT).toString(); 
			}
		}
	
		// 空の場合
		if (JFUStrConst.EMPTY.equals(dataFukkyuZanUseCnt))
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.DATA_FUKKYU_ZAN_USE_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, MI_MSKM_BAR);
		}
		// 内容がある場合
		else
		{
			StringBuffer buf = new StringBuffer();
			String cntStr = "";

			cntStr = dataFukkyuZanUseCnt;
			buf.append(cntStr);
			buf.append(JFUStrConst.KAI);
			String cntStrKai = buf.toString();
			
			tnmtBean.sendMessageObject(FUW12301SFConst.DATA_FUKKYU_ZAN_USE_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, cntStrKai);
		}
		
		
		// ●機器補償サービス利用残回数
		String kikiCompsZanUseCnt = JFUStrConst.EMPTY; 
		// ステータスが100：サービス提供中未満の場合、表示しない
		if (null != stat && !JFUStrConst.CD00037_010.equals(stat) && !JFUStrConst.CD00037_020.equals(stat)
				&& !JFUStrConst.CD00037_030.equals(stat) )
		{
			if (planListZanUseCnt != null 
					&& !planListZanUseCnt.isEmpty() && planListZanUseCnt.get(0).containsKey(KIKI_COMPS_ZAN_USE_CNT))
			{
				kikiCompsZanUseCnt = planListZanUseCnt.get(0).get(KIKI_COMPS_ZAN_USE_CNT).toString(); 
			}
		}

		// 空の場合
		if (JFUStrConst.EMPTY.equals(kikiCompsZanUseCnt))
		{
			tnmtBean.sendMessageObject(FUW12301SFConst.KIKI_COMPS_ZAN_USE_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, MI_MSKM_BAR);
		}
		// 内容がある場合
		else
		{
			StringBuffer buf = new StringBuffer();
			String cntStr = "";

			cntStr = kikiCompsZanUseCnt;
			buf.append(cntStr);
			buf.append(JFUStrConst.KAI);
			String cntStrKai = buf.toString();
			
			tnmtBean.sendMessageObject(FUW12301SFConst.KIKI_COMPS_ZAN_USE_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, cntStrKai);
		}
		
		
		// ●申込不可期間(契約可能：false、契約不可：true）
		// 解約から10ヶ月未満の場合、表示しない。
		// ⇒オプションのサービス課金終了日の翌月から9ヶ月経過していれば申込可能とする。
		Boolean mskmFailPrd = false;
		
		// 10ヶ月後の1日（同日を含む） ＜ 運用日の場合、申込可能
		if ( null != svcChrgEndymd && !svcChrgEndymd.isEmpty())
		{
			String svcChrgEndymd10 
			= JFUWebCommon.addMonth(svcChrgEndymd, Integer.parseInt("10")).substring(0, 6) + JFUStrConst.S_FIRST_DAY;
		
			if (!JPCUtilCommon.isFutureDate(opeDate, svcChrgEndymd10, DOJITSU_HUKUMU))
			{
				mskmFailPrd = true;
			}
		}
		tnmtBean.sendMessageObject(FUW12301SFConst.MSKM_FAIL_PRD_01, X31CWebConst.DATABEAN_SET_VALUE, mskmFailPrd);
		
		
		// ●契約プラン
		String kei_plan = STAT_PC_TV_PLAN;
		// 0:契約なし、1:PCプランorTVプラン、2:PCワイドプラン
		if (pcwKeiFlg)
		{
			kei_plan = STAT_PCW_PLAN;
		}

		if (null == planList || planList.isEmpty())
		{
			kei_plan = STAT_NON;
		}
		tnmtBean.sendMessageObject(FUW12301SFConst.KEI_PLAN_01, X31CWebConst.DATABEAN_SET_VALUE, kei_plan);
	}

}