/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0073_FUSV0073OPDBMapper
*	ソースファイル名：FUSV0073_FUSV0073OPDBMapper.java
*	作成者			：富士通
*	日付			：2011年08月17日
*＜機能概要＞
*	BP（ダイヤルアップ接続サービス申込(申込)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/17	FJ）西川	新規作成
*	v4.0.0		2012/12/05	FJ) 大島	TAI-2012-0000136:不要コメント削除
**********************************************************************/
package eo.web.webview.mapping;

import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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 com.fujitsu.futurity.web.x33.beans.X33VDataTypeList;

import eo.common.constant.JFUStrConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW03501SF.FUW03501SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 *
 * <br>
 * @author 富士通
 */
public class FUSV0073_FUSV0073OPDBMapper
{
	// ■SC
	/** 料金プラン一覧照会（オプションサービスコード）SC */
	private static final String FUSV007301SC = "FUSV007301SC";
	/** 申込明細一意照会SC */
	private static final String FUSV007302SC = "FUSV007302SC";
	/** 料金コース_オプションサービス一意照会SC */
	private static final String FUSV007303SC = "FUSV007303SC";
	/** オプションサービス契約一意照会SC */
	private static final String FUSV007304SC = "FUSV007304SC";

	// ■CC
	/** 初期費用一覧照会CC */
	private static final String FUSV007301CC = "FUSV007301CC";
	/** ダイヤルアップ関連チェックCC */
	private static final String FUSV007302CC = "FUSV007302CC";

	// ■サービスIF リストID
	/** 料金プラン一覧照会（オプションサービスコード）明細リスト */
	private static final String EKK0591B001CBSMSG1LIST = "EKK0591B001CBSMsg1List";
	/** 申込明細一意照会明細リスト */
	private static final String EKK0021A010CBSMSG1LIST = "EKK0021A010CBSMsg1List";
	/** 料金コース_オプションサービス一意照会明細リスト */
	private static final String EKK0811A010CBSMSG1LIST = "EKK0811A010CBSMsg1List";
	/** オプションサービス契約一意照会明細リスト */
	private static final String EKK0351A010CBSMSG1LIST = "EKK0351A010CBSMsg1List";

	// ■CC リストID
	/** 初期費用一覧照会明細リスト */
	private static final String EKK0721A010CBSMSG1LIST = "EKK0721A010CBSMsg1List";

	// ■サービスIFのID
	/** 料金コースコード */
	private static final String KEY_PCRS_CD = "key_pcrs_cd";
	/** オプションサービスコード */
	private static final String OP_SVC_CD = "op_svc_cd";
	/** 料金コースコード */
	private static final String PCRS_CD = "pcrs_cd";
	/** 料金プランコード */
	private static final String PPLAN_CD = "pplan_cd";
	/** 料金プラン固定金額 */
	private static final String PPLAN_KOTEI_AMNT = "pplan_kotei_amnt";
	/** 料金プラン固定単位コード名称 */
	private static final String PPLAN_KOTEI_TANI_CD_NM = "pplan_kotei_tani_cd_nm";
	/** 料金コース名 */
	private static final String PCRS_NM = "pcrs_nm";
	/** 初期費用名称 */
	private static final String TMP_PAY_PRC_NM = "tmp_pay_prc_nm";
	/** 初期費用金額 */
	private static final String TMP_PAY_PRC_AMNT = "tmp_pay_prc_amnt";
	/** 申込年月日 */
	private static final String MSKM_YMD = "mskm_ymd";
	/** 最大オプションサービス数 */
	private static final String MAX_OP_SVC_CNT = "max_op_svc_cnt";
	/** 無料オプションサービス数 */
	private static final String MRYO_OP_SVC_CNT = "mryo_op_svc_cnt";
	/** ＫＥＹ＿オプションサービス契約番号 */
	private static final String KEY_OP_SVC_KEI_NO = "key_op_svc_kei_no";
	/** ＫＥＹ＿オプションサービス契約番号 */
	private static final String KEY_GENE_ADD_DTM = "key_gene_add_dtm";
	/** 受付開始年月日時分(料金プラン) */
	private static final String KK0591_UK_STA_YMDHM = "kk0591_uk_sta_ymdhm";
	/** 受付終了年月日時分(料金プラン) */
	private static final String KK0591_UK_END_YMDHM = "kk0591_uk_end_ymdhm";
	/** 受付開始年月日時分(料金コース) */
	private static final String KK0791_UK_STA_YMDHM = "kk0791_uk_sta_ymdhm";
	/** 受付終了年月日時分(料金コース) */
	private static final String KK0791_UK_END_YMDHM = "kk0791_uk_end_ymdhm";
	/** サービス契約番号 */
	private static final String KEY_SVC_KEI_NO = "key_svc_kei_no";

	/** 実行フラグID */
	private static final String FUSV007304SCFLAG = "fusv007304scflag";
	private static final String FUSV007302SCFLAG = "fusv007302scflag";
	/** 実行フラグ0 実行しない */
	private static final String SIF_FLAG_0 = "0";
	/** 実行フラグ1 実行する */
	private static final String SIF_FLAG_1 = "1";

	// ■料金表関係
	/** タイトル div id */
	private static final String DIV_TITLE = "title";
	/** 初期費用 tr id */
	private static final String SHOKI_TR = "shoki_";
	/** none */
	private static final String NONE = "none";
	/** - 円 */
	private static final String NONE_YEN = "−";

	/** 月額料金文言取得キー */
	private static final String GETUGAKU = "getugaku";
	/** 基本料金文言取得キー */
	private static final String KIHON = "kihon";
	/** 初期費用文言取得キー */
	private static final String SHOKICOST = "shokicost";
	/** 月額料金デザインクラス取得キー */
	private static final String TITLE_STYLE_1 = "TITLE_STYLE_1";
	/** 初期費用デザインクラス取得キー */
	private static final String TITLE_STYLE_2 = "TITLE_STYLE_2";
	/** 月額料金幅クラス取得キー */
	private static final String TABLE_HABA_1 = "TABLE_HABA_1";
	/** 初期費用幅クラス取得キー */
	private static final String TABLE_HABA_2 = "TABLE_HABA_2";
	/** テーブル左値リスト設定キー */
	private static final String KEY_TABLE_LEFT_VALUE_LIST = "KEY_TABLE_LEFT_VALUE_LIST";
	/** テーブル右値リスト設定キー */
	private static final String KEY_TABLE_RIGHT_VALUE_LIST = "KEY_TABLE_RIGHT_VALUE_LIST";
	/** テーブル値識別リスト設定キー */
	private static final String KEY_TABLE_VALUE_SKBT_LIST = "KEY_TABLE_VALUE_SKBT_LIST";
	/** 1行表示数取得キー */
	private static final String LINE_DSP_NUM = "001";

	/** 定義取得パス スタイルクラス(料金表用) */
	private static final String PATH_STYLE_CLASS = "DISPSETTING/SETTING[@screenId='FUW03501']/DISPCTL";
	/** 定義取得パス 文言(料金表用) */
	private static final String PATH_PA_STR = "DISPSETTING/SETTING[@screenId='FUW03501']/DISPTEXT[@groupid='PA_STR']";
	/** 定義取得パス 表示数制限 */
	private static final String PATH_DSP_LINE_NUM = "DISPSETTING/SETTING[@screenId='FUW03501']/DISPCTL[@groupid='LINE_DSP_NUM']";
	/** 定義取得パス 料金ボタンクラス名 */
	private static final String PATH_PA_PPLAN_BTN_CLASS = "DISPSETTING/SETTING[@screenId='FUW03501']/DISPCTL[@groupid='PA_PPLAN_BTN_CLASS']";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	// ■その他
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** アンダーライン */
	private static final String STRING_UL = "_";
	/** スペース */
	private static final String STRING_SPACE = " ";
	/** 円 */
	private static final String YEN = "円";
	/** 日付フォーマット */
	private static final String FMT_YYYYMMDDHHMM = "yyyyMMddhhmm";
	/** 受付可否区分 0：否 */
	private static final String UK_DIV_0 = "0";
	/** 受付可否区分 1：可 */
	private static final String UK_DIV_1 = "1";
	/** 無料 **/
	private static final String FREE_LABEL = "無料";

	/**
	 * コンストラクタです。
	 */
	public FUSV0073_FUSV0073OPDBMapper()
	{
	}

	/**
	 * 料金プラン一覧照会（オプションサービスコード）の上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	public HashMap<String, Object> setFUSV007301SC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 料金プラン一覧照会（オプションサービスコード）明細
		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> detailMap = new HashMap<String, Object>();
		arrayList.add(detailMap);
		parentMap.put(EKK0591B001CBSMSG1LIST, arrayList);

		outputMap.put(FUSV007301SC, parentMap);

		return outputMap;
	}

	/**
	 * 初期費用一覧照会CCの上りマッピングをします。
	 * @param bean
	 * @param outputMap マップ
	 * @param func_code 機能コード
	 * @param key_pcrs_cd 料金コースコード
	 * @return HashMap 結果マップ
	 */
	public HashMap<String, Object> setFUSV007301CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> detailMap = new HashMap<String, Object>();
		arrayList.add(detailMap);
		parentMap.put(EKK0721A010CBSMSG1LIST, arrayList);

		outputMap.put(FUSV007301CC, parentMap);

		return outputMap;
	}

	/**
	 * ダイヤルアップ関連チェックCCの上りマッピングをします。
	 * @param bean
	 * @param outputMap マップ
	 * @param func_code 機能コード
	 * @param key_pcrs_cd 料金コースコード
	 * @return HashMap 結果マップ
	 */
	public HashMap<String, Object> setFUSV007302CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共有フォームBean.サービス契約情報.料金コースコード
		parentMap.put(KEY_SVC_KEI_NO, bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV007302CC, parentMap);

		return outputMap;
	}

	/**
	 * 申込明細一意照会の上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	public HashMap<String, Object> setFUSV007302SC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		String opSvcCd = bean[0].sendMessageString(FUW03501SFConst.NOW_OP_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// 実行判定フラグを設定
		if (JFUStrConst.CD00136_B020.equals(opSvcCd))
		{
			// 共通情報のマッピング
			parentMap.put(FUNC_CODE, func_code);

			// ダイヤルアップ契約中の場合、実行する
			parentMap.put(FUSV007302SCFLAG, SIF_FLAG_1);

			// 申込明細一意照会明細
			ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
			HashMap<String, Object> detailMap = new HashMap<String, Object>();
			arrayList.add(detailMap);
			parentMap.put(EKK0021A010CBSMSG1LIST, arrayList);

		}
		else
		{
			// ダイヤルアップ未契約の場合、実行しない
			parentMap.put(FUSV007302SCFLAG, SIF_FLAG_0);
		}

		outputMap.put(FUSV007302SC, parentMap);

		return outputMap;
	}

	/**
	 * 料金コース_オプションサービス一意照会の上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	public HashMap<String, Object> setFUSV007303SC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 共有フォームBean.サービス契約情報.料金コースコード
		parentMap.put(KEY_PCRS_CD, bean[1].sendMessageString(CommonInfoCFConst.PCRS_CD_23, X31CWebConst.DATABEAN_GET_VALUE));

		// 料金コース_オプションサービス一意照会明細
		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> detailMap = new HashMap<String, Object>();
		arrayList.add(detailMap);
		parentMap.put(EKK0811A010CBSMSG1LIST, arrayList);

		outputMap.put(FUSV007303SC, parentMap);

		return outputMap;
	}

	/**
	 * オプションサービス契約一意照会の上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @param inMap
	 * @return outputMap
	 */
	public HashMap<String, Object> setFUSV007304SC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code,
			HashMap<String, Object> inMap)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		String opSvcCd = bean[0].sendMessageString(FUW03501SFConst.NOW_OP_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// 実行判定フラグを設定
		if (JFUStrConst.CD00136_B020.equals(opSvcCd))
		{
			// ダイヤルアップ契約中の場合、実行する
			parentMap.put(FUSV007304SCFLAG, SIF_FLAG_1);

			// 共通情報のマッピング
			parentMap.put(FUNC_CODE, func_code);

			// 共有フォームBean.オプションサービス契約情報.オプションサービスコード
			parentMap.put(OP_SVC_CD, opSvcCd);
			// 共有フォームBean.オプションサービス契約情報.オプションサービス契約番号
			parentMap.put(KEY_OP_SVC_KEI_NO, inMap.get(CommonInfoCFConst.OP_SVC_KEI_NO_28));
			// 共有フォームBean.オプションサービス契約情報.世代登録年月日時分秒
			parentMap.put(KEY_GENE_ADD_DTM, inMap.get(CommonInfoCFConst.GENE_ADD_DTM_28));

			// オプションサービス契約一意照会明細
			ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
			HashMap<String, Object> detailMap = new HashMap<String, Object>();
			arrayList.add(detailMap);
			parentMap.put(EKK0351A010CBSMSG1LIST, arrayList);
		}
		else
		{
			// ダイヤルアップ未契約の場合、実行しない
			parentMap.put(FUSV007304SCFLAG, SIF_FLAG_0);
		}

		outputMap.put(FUSV007304SC, parentMap);

		return outputMap;
	}

	/**
	 * 料金プラン一覧照会（オプションサービスコード）の下りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return bean
	 * @throws Exception
	 */
	public X31SDataBeanAccess getFUSV007301SC(X31SDataBeanAccess bean, HashMap<Object, Object> outputMap) throws Exception
	{
		return bean;
	}

	/**
	 * 申込明細一意照会の下りマッピング処理です。
	 * <br>
	 * @param bean ダイヤルアップ接続サービス申込
	 * @param outputMap
	 * @return データBean
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess getFUSV007302SC(X31SDataBeanAccess bean, HashMap outputMap)
	{
		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV007302SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV007302SC);
		}

		// 申込明細一意照会明細からDatabeanに入れる
		if (null != parentMap && parentMap.containsKey(EKK0021A010CBSMSG1LIST))
		{
			// 明細リストを取得
			ArrayList childList = (ArrayList)parentMap.get(EKK0021A010CBSMSG1LIST);

			// Databeanに値を設定
			for (int i = 0; i < childList.size(); i++)
			{
				// 明細リスト内のマップを取得
				HashMap childMap = (HashMap)childList.get(i);

				// サービスフォームBean.申込年月日 ← 申込明細一意照会明細.申込年月日
				bean.sendMessageString(FUW03501SFConst.MSKM_YMD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get(MSKM_YMD));
			}
		}

		return bean;
	}

	/**
	 * 料金コース_オプションサービス一意照会の下りマッピング処理です。
	 * <br>
	 * @param bean ダイヤルアップ接続サービス申込
	 * @param outputMap
	 * @return データBean
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess getFUSV007303SC(X31SDataBeanAccess bean, HashMap outputMap)
	{
		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV007303SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV007303SC);
		}

		// 料金コース_オプションサービス一意照会明細からDatabeanに入れる
		if (null != parentMap && parentMap.containsKey(EKK0811A010CBSMSG1LIST))
		{
			// 明細リストを取得
			ArrayList childList = (ArrayList)parentMap.get(EKK0811A010CBSMSG1LIST);

			// Databeanに値を設定
			if (childList != null && childList.size() > 0)
			{
				for (int i = 0; i < childList.size(); i++)
				{
					// 明細リスト内のマップを取得
					HashMap childMap = (HashMap)childList.get(i);

					// サービスフォームBean.ダイヤルアップ接続契約上限数 ← 最大オプションサービス数
					bean.sendMessageString(FUW03501SFConst.DIAL_CONNECT_KEI_MAX, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
							.get(MAX_OP_SVC_CNT));
					// サービスフォームBean.ダイヤルアップ接続契約無料数 ← 無料オプションサービス数
					bean.sendMessageString(FUW03501SFConst.DIAL_CONNECT_KEI_MURYO, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
							.get(MRYO_OP_SVC_CNT));
				}
			}
		}

		return bean;
	}

	/**
	 * 料金コースリスト（選択ボタン）の下りマッピング処理です。
	 * <br>
	 * @param bl
	 * @param bean
	 * @param outputMap
	 * @return bean
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess getPcrsListBean(X31BWebBusinessLogic bl, X31SDataBeanAccess bean, HashMap outputMap) throws Exception
	{
		HashMap parentMap = null;
		ArrayList childList = null;
		ArrayList targetList = new ArrayList();

		if (outputMap.containsKey(FUSV007301SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV007301SC);
		}

		// 料金プラン一覧照会（オプションサービスコード）明細リストを取得
		if (parentMap != null && parentMap.containsKey(EKK0591B001CBSMSG1LIST))
		{
			childList = (ArrayList)parentMap.get(EKK0591B001CBSMSG1LIST);
		}

		for (int i = 0; i < childList.size(); i++)
		{
			// 明細リスト内のマップを取得
			HashMap childMap = (HashMap)childList.get(i);

			// 受付対象可否区分
			String ukDiv = null;

			// 日付ファーマット設定
			DateFormat dateFormat = new SimpleDateFormat(FMT_YYYYMMDDHHMM);

			// オンライン運用日時を設定
			Date nowYMDHM = dateFormat.parse(JFUWebCommon.getOpeDateTime(bl, null), new ParsePosition(0));

			// 料金プラン受付開始日時を取得
			Date ukPplanStaYMDHM = dateFormat.parse((String)childMap.get(KK0591_UK_STA_YMDHM), new ParsePosition(0));
			// 料金プラン受付終了日時を取得
			Date ukPplanEndYMDHM = dateFormat.parse((String)childMap.get(KK0591_UK_END_YMDHM), new ParsePosition(0));
			// 料金コース受付開始日時を取得
			Date ukPcrsStaYMDHM = dateFormat.parse((String)childMap.get(KK0791_UK_STA_YMDHM), new ParsePosition(0));
			// 料金コース受付終了日時を取得
			Date ukPcrsEndYMDHM = dateFormat.parse((String)childMap.get(KK0791_UK_END_YMDHM), new ParsePosition(0));

			// 受付可否を判定
			if (ukPplanStaYMDHM.after(nowYMDHM) || ukPplanEndYMDHM.before(nowYMDHM))
			{
				// 否
				ukDiv = UK_DIV_0;
			}
			else if (ukPcrsStaYMDHM.after(nowYMDHM) || ukPcrsEndYMDHM.before(nowYMDHM))
			{
				// 否
				ukDiv = UK_DIV_0;
			}
			else
			{
				// 可
				ukDiv = UK_DIV_1;
			}

			// 受付中の場合、受付対象リストに格納する
			// (画面に選択ボタンを出す)
			if (UK_DIV_1.equals(ukDiv))
			{
				targetList.add(childMap);
			}
		}

		// マッピング
		setPcrsListInfo(bean, targetList);

		return bean;
	}

	/**
	 * 料金コースリストBeanに値を設定します。
	 *
	 * <br>
	 * @param bean
	 * @param targetList
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void setPcrsListInfo(X31SDataBeanAccess bean, ArrayList targetList) throws Exception
	{
		// 表示制御用の値を取得
		Map<String, String> lineDspNumMap = JFUWebCommon.getDispItemsAsMap(PATH_DSP_LINE_NUM, QUERY_ATTR_NAME);
		// クラス名を取得
		Map<String, String> planCassNmMap = JFUWebCommon.getDispItemsAsMap(PATH_PA_PPLAN_BTN_CLASS, QUERY_ATTR_NAME);

		// 1行表示数を取得
		int lineMaxNum = Integer.parseInt(lineDspNumMap.get(LINE_DSP_NUM));
		// 料金コース親リストサイズ
		int pcrsOyaSize = 0;

		// 料金コース親リストサイズを設定
		if (targetList.size() % lineMaxNum == 0)
		{
			pcrsOyaSize = targetList.size() / lineMaxNum;
		}
		else
		{
			pcrsOyaSize = targetList.size() / lineMaxNum + 1;
		}

		// インデックス値
		int index = 0;

		// 料金コース親リスト
		X33VDataTypeList pcrsCdOyaList = new X33VDataTypeList(pcrsOyaSize);
		// Bean格納用リスト(リスト)
		X33VDataTypeList pcrsCdList = new X33VDataTypeList(lineMaxNum);

		for (int n = 0; n < pcrsOyaSize; n++)
		{
			// DataBean 料金コース親リスト
			X31SDataBeanAccessArray pcrsCdOyaBeanArray = bean.getDataBeanArray(FUW03501SFConst.PCRS_CD_OYA_LIST);
			pcrsCdOyaBeanArray.addDataBean();
			X31SDataBeanAccess pcrsCdOyaDataType = pcrsCdOyaBeanArray.getDataBean(n);

			X31SDataBeanAccess pcrsCdDataBean = null;

			// 子リストからDatabeanに入れる
			for (int i = 0; i < lineMaxNum; i++)
			{
				if (targetList.size() == index)
				{
					break;
				}

				HashMap childMap = (HashMap)targetList.get(index);

				// DataBean 料金コースリスト
				X31SDataBeanAccessArray pcrsCdBeanArray = pcrsCdOyaDataType.getDataBeanArray(FUW03501SFConst.PCRS_CD_LIST);
				pcrsCdBeanArray.addDataBean();
				pcrsCdDataBean = pcrsCdBeanArray.getDataBean(i);

				// 料金プラン判定文字列を生成
				StringBuffer pplanStr = new StringBuffer(16);
				pplanStr.append((String)childMap.get(OP_SVC_CD));
				pplanStr.append(STRING_UL);
				pplanStr.append((String)childMap.get(PCRS_CD));
				pplanStr.append(STRING_UL);
				pplanStr.append((String)childMap.get(PPLAN_CD));

				// 料金プランコード(料金プラン判定文字列)
				pcrsCdDataBean.sendMessageString(FUW03501SFConst.CHG_TAISHO_PPLAN_CD_02, X31CWebConst.DATABEAN_SET_VALUE, pplanStr.toString());

				// 料金プラン名
				pcrsCdDataBean.sendMessageString(FUW03501SFConst.CHG_TAISHO_PPLAN_NM_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
						.get(PCRS_NM));

				// 料金ボタンクラス名
				pcrsCdDataBean.sendMessageString(FUW03501SFConst.CHG_TAISHO_PCRS_CLASS_NM_02, X31CWebConst.DATABEAN_SET_VALUE, planCassNmMap
						.get(pplanStr.toString()));

				// インデックス番号
				pcrsCdDataBean.sendMessageString(FUW03501SFConst.CHG_TAISHO_PCRS_INDEX_NM_02, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(index));

				// インデックス値カウント
				index++;
			}
			pcrsCdList.add(pcrsCdDataBean);
			pcrsCdOyaList.add(pcrsCdList);
		}

		bean.sendMessageObject(FUW03501SFConst.PCRS_CD_OYA_LIST, X31CWebConst.DATABEAN_SET_VALUE, pcrsCdOyaList);
	}

	/**
	 * 料金表の下りマッピング処理です。
	 * <br>
	 *
	 * @param bean
	 * @param inMap
	 * @throws Exception
	 * @return bean
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess getPriceAreaBean(X31SDataBeanAccess bean, HashMap inMap, String prcGpCd, boolean shokiFlg) throws Exception
	{
		// 有料フラグを取得
		boolean payFlg = bean.sendMessageBoolean(FUW03501SFConst.PAY_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		// マンション区分(有料文言制御)を取得
		boolean manshonDivFlg = bean.sendMessageBoolean(FUW03501SFConst.MANSION_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		// マンションフラグ
		boolean manshonFlg = JFUStrConst.CD00133_04.equals(prcGpCd);
		// 無料数
		int muryoCnt = Integer.parseInt(bean.sendMessageString(FUW03501SFConst.DIAL_CONNECT_KEI_MURYO, X31CWebConst.DATABEAN_GET_VALUE));

		// ******************************************************************
		// コメント div id
		List<String> setCommentSkbtList = new ArrayList<String>();
		// コメント テキスト
		List<String> setCommentList = new ArrayList<String>();

		// タイトル div id
		List<String> setTableTitleSkbtList = new ArrayList<String>();
		// タイトル テキスト
		List<String> setTableTitleList = new ArrayList<String>();

		// 月額料金 テーブル tr id
		List<String> setTableValueSkbtList = new ArrayList<String>();
		// 初期費用 テーブル tr id
		List<String> setTableValueSkbtList2 = new ArrayList<String>();
		// テーブル スタイル
		List<String> setTableStyleClass1List = new ArrayList<String>();
		// テーブル 幅
		List<String> setTableStyleClass2List = new ArrayList<String>();

		// 月額料金 左値
		List<String> setTableLeftValueList = new ArrayList<String>();
		// 月額料金 右値
		List<String> setTableRightValueList = new ArrayList<String>();

		// 初期費用 左値
		List<String> setTableLeftValueList2 = new ArrayList<String>();
		// 初期費用 右値
		List<String> setTableRightValueList2 = new ArrayList<String>();

		// 備考 div id
		List<String> setBikoSkbtList = new ArrayList<String>();
		// 備考 テキスト
		List<String> setBikoList = new ArrayList<String>();

		// テーブルの値、左値、右値の各リストを格納
		Map<String, List<String>> tableValueMap = new LinkedHashMap<String, List<String>>();
		// ******************************************************************

		HashMap parentdMap = null;
		ArrayList childList = null;

		// マップとリストの取得キーを格納
		String[] priceMapStr = { FUSV007301SC, FUSV007301CC };
		String[] priceListStr = { EKK0591B001CBSMSG1LIST, EKK0721A010CBSMSG1LIST };

		// 料金プラン名(料金表用)を取得
		Map<String, String> mongonMap = JFUWebCommon.getDispItemsAsMap(PATH_PA_STR, QUERY_ATTR_NAME);
		// 料金表スタイルクラスを取得
		Map<String, String> classMap = JFUWebCommon.getDispItemsAsMap(PATH_STYLE_CLASS, QUERY_ATTR_NAME);

		if (inMap != null && mongonMap != null && classMap != null)
		{
			for (int i = 0; i < priceMapStr.length; i++)
			{
				parentdMap = (HashMap)inMap.get(priceMapStr[i]);
				childList = (ArrayList)parentdMap.get(priceListStr[i]);

				if (FUSV007301SC.equals(priceMapStr[i]) && childList != null && childList.size() > 0)
				{

					for (int j = 0; j < childList.size(); j++)
					{
						// 料金情報マップ取得
						HashMap childMap = (HashMap)childList.get(j);

						// 上部のプラン名取得のkey作成用
						StringBuffer keyUpper = new StringBuffer(16);
						String keyLower = null;

						// キー作成「オプションサービスコード_料金コースコード_料金プランコード」
						keyUpper.append(childMap.get(OP_SVC_CD));
						keyUpper.append(STRING_UL);
						keyUpper.append(childMap.get(PCRS_CD));
						keyUpper.append(STRING_UL);
						keyUpper.append(childMap.get(PPLAN_CD));

						// 料金表 左値作成
						StringBuffer priStr = new StringBuffer(16);

						// 料金表示制御
						if (payFlg && muryoCnt == 0 && Integer.parseInt((String)childMap.get(PPLAN_KOTEI_AMNT)) > 0)
						{
							// 金額が0以上の場合、そのまま設定する
							priStr.append(JFUWebCommon.formatNumber((String)childMap.get(PPLAN_KOTEI_AMNT)));
							priStr.append(STRING_SPACE);
							priStr.append(childMap.get(PPLAN_KOTEI_TANI_CD_NM));
						}
						else
						{
							// 金額が0以下の場合、無料を設定する
							priStr.append(FREE_LABEL);
						}

						// 作成したキーを小文字変換
						keyLower = keyUpper.toString().toLowerCase();

						if (j == 0)
						{
							// テーブルタイトルエリア
							setTableTitleSkbtList.add(DIV_TITLE);
							// タイトル名
							setTableTitleList.add(mongonMap.get(GETUGAKU));

							// テーブルスタイル(タイトルの背景色)に値を入れたい場合に設定する
							setTableStyleClass1List.add(classMap.get(TITLE_STYLE_1));
							// テーブルスタイル(テーブルの幅)に値を入れたい場合に設定する
							setTableStyleClass2List.add(classMap.get(TABLE_HABA_1));
						}

						// 値 tr id
						setTableValueSkbtList.add(keyLower);
						// 左値
						setTableLeftValueList.add(mongonMap.get(KIHON));
						// 右値
						setTableRightValueList.add(priStr.toString());
					}
				}
				else if (FUSV007301CC.equals(priceMapStr[i]) && childList != null && childList.size() > 0)
				{
					// 初期費用が無い場合、以降の処理を行わない
					if (!shokiFlg || (manshonFlg && !manshonDivFlg))
					{
						continue;
					}

					// 初期費用インデックス値
					int shokiIndex = 0;

					// 初期費用(事務手数料、工事費)の設定
					for (int k = 0; k < childList.size(); k++)
					{
						// 料金情報マップ取得
						HashMap childMap = (HashMap)childList.get(k);

						if (k == 0)
						{
							// タイトル名
							setTableTitleList.add(mongonMap.get(SHOKICOST));
							// タイトル「div」の「id」
							setTableTitleSkbtList.add(DIV_TITLE);

							// テーブルスタイル(タイトルの背景色)に値を入れたい場合に設定する
							setTableStyleClass1List.add(classMap.get(TITLE_STYLE_2));
							// テーブルスタイル(テーブルの幅)に値を入れたい場合に設定する
							setTableStyleClass2List.add(classMap.get(TABLE_HABA_2));
						}

						// 初期費用インデックス値カウント
						if (k != 0 && k % 2 == 0)
						{
							shokiIndex++;
						}

						// 料金表 左値作成
						StringBuffer priStr = new StringBuffer(16);
						priStr.append(JFUWebCommon.formatNumber((String)childMap.get(TMP_PAY_PRC_AMNT)));
						priStr.append(STRING_SPACE);
						priStr.append(YEN);

						// 値テーブル：「tr」の「id」名
						setTableValueSkbtList2.add(SHOKI_TR + String.valueOf(shokiIndex));
						// 左値
						setTableLeftValueList2.add((String)childMap.get(TMP_PAY_PRC_NM));
						// 右値
						setTableRightValueList2.add(priStr.toString());
					}
				}
			}
		}

		// ★未選択用(固定単価)
		// 値 tr id
		setTableValueSkbtList.add(NONE);
		// 左値
		if (null != mongonMap)
		{
			setTableLeftValueList.add(mongonMap.get(KIHON));
			// 右値
			setTableRightValueList.add(NONE_YEN);

			// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル左値リスト設定キー』
			// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル右値リスト設定キー』
			// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル値識別リスト設定キー』
			tableValueMap.put(mongonMap.get(GETUGAKU) + 0 + KEY_TABLE_LEFT_VALUE_LIST, setTableLeftValueList);
			tableValueMap.put(mongonMap.get(GETUGAKU) + 0 + KEY_TABLE_RIGHT_VALUE_LIST, setTableRightValueList);
			tableValueMap.put(mongonMap.get(GETUGAKU) + 0 + KEY_TABLE_VALUE_SKBT_LIST, setTableValueSkbtList);

			tableValueMap.put(mongonMap.get(SHOKICOST) + 1 + KEY_TABLE_LEFT_VALUE_LIST, setTableLeftValueList2);
			tableValueMap.put(mongonMap.get(SHOKICOST) + 1 + KEY_TABLE_RIGHT_VALUE_LIST, setTableRightValueList2);
			tableValueMap.put(mongonMap.get(SHOKICOST) + 1 + KEY_TABLE_VALUE_SKBT_LIST, setTableValueSkbtList2);

		}

		// ************************************************************************************************************************
		// ●コメントエリア情報設定処理呼び出し
		// ●備考エリア情報設定処理呼び出し
		// ●タイトル・テーブルエリア情報設定処理呼び出し
		// ************************************************************************************************************************

		X31SDataBeanAccessArray prcInfoAreaListArray = bean.getDataBeanArray(JFUStrConst.PRC_INFO_PRC_INFO_AREA_LIST);
		X31SDataBeanAccess titleListArrayAccess = prcInfoAreaListArray.addDataBean();

		// コメントエリア表示用リスト設定
		JFUWebCommon.setCommentList(titleListArrayAccess, setCommentSkbtList, setCommentList);
		// 備考エリア表示用リスト設定
		JFUWebCommon.setBikoList(titleListArrayAccess, setBikoSkbtList, setBikoList);
		// テーブルタイトルエリア表示用リスト設定
		JFUWebCommon.setTableTitleList(titleListArrayAccess, setTableTitleSkbtList, setTableTitleList, setTableStyleClass1List,
				setTableStyleClass2List, tableValueMap);

		return bean;
	}
}