/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW07501SFLogic
*   ソースファイル名：FUW07501SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年02月01日
*＜機能概要＞
*    eo光テレビSTB追加変更申込内容確認画面サービスフォームBeanビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/02/01   FJ）今村    新規作成
*   v4.00       2012/12/26   FJ）岡井    【TAI-2012-0000136】初期表示エラー対応
*   v5.00       2013/02/18   FJ) 文元    【ST2-2013-0000820】メゾンコース名が表示されない不具合対応
*   v5.00       2013/04/26   FJ) 瀧澤    【IT1-2013-0000843】住所変更中にエラーとならないように対応
*   v5.01       2013/08/29   FJ）文元    【OM-2013-0001219】機器提供サービス契約が解約、またはキャンセルの場合に宅内機器を取得しないよう対応
*   v8.00       2014/01/27   FJ) 文元    【ANK-1589-00-00】消費増税に伴う料金施策
*   v11.00      2014/08/11   FJ) 谷本    【ANK-2141-00-00】STB交換方法の変更
*
**********************************************************************/
package eo.web.webview.FUW07501SF;

import static com.fujitsu.futurity.web.x31.X31CWebConst.TELEGRAM_INFO_USECASE_ID;
import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JFUStrConst.CD00134_A33;
import static eo.common.constant.JFUStrConst.CD00134_A34;
import static eo.common.constant.JFUStrConst.CD00134_A35;
import static eo.common.constant.JFUStrConst.CD00134_A36;
import static eo.common.constant.JFUStrConst.CD00134_A37;
import static eo.common.constant.JFUStrConst.CD00134_A38;
import static eo.common.constant.JFUStrConst.CD00134_A39;
import static eo.common.constant.JFUStrConst.CD00134_A40;
import static eo.common.constant.JFUStrConst.CD00134_A41;
import static eo.common.constant.JFUStrConst.ERROR_CODE_0002;
import static eo.common.constant.JFUStrConst.ERROR_CODE_0009;
import static eo.common.constant.JFUStrConst.ERROR_CODE_0102;
import static eo.common.constant.JPCModelConstant.FUNC_CD_1;
import static eo.web.webview.CommonInfoCF.CommonInfoCFConst.NEXT_SCREEN_ID;
import static eo.web.webview.CommonInfoCF.CommonInfoCFConst.NEXT_SCREEN_NAME;
import static eo.web.webview.common.JFUScreenConst.SCREEN_ID_FUW07501;
import static eo.web.webview.common.JFUScreenConst.SCREEN_ID_FUW09501;
import static eo.web.webview.common.JFUScreenConst.SCREEN_NAME_FUW07501;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
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.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0130_FUSV0130OPDBMapper;

/**
 * eo光テレビSTB追加変更申込内容確認画面サービスフォームBeanビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW07501SFLogic extends JCCWebBusinessLogic
{
	/** 画面表示定義ファイルキー「変更なし」*/
	private static final String KEY_MSKM_NAIYO_0 = "mskm_naiyo_0";
	/** 画面表示定義ファイルキー「変更」*/
	private static final String KEY_MSKM_NAIYO_1 = "mskm_naiyo_1";
	/** 画面表示定義ファイルキー「追加」*/
	private static final String KEY_MSKM_NAIYO_2 = "mskm_naiyo_2";

	/** フラグ「0:無、否、非表示」*/
	private static final String FLG_0 = "0";
	/** フラグ「1:有、要、表示」*/
	private static final String FLG_1 = "1";

	/** ＳＴＢＩＤ検索有無フラグ「1:検索する」*/
	private static final String SC_STBID_FLG_1 = "1";
	/** コース変更フラグ「1:コース変更」*/
	private static final String COURSE_CHANGE_FLG_1 = "1";

	/** 住居フラグ　１：ホーム */
	private static final String AD_FORM_FLG_1 = "1";
	/** 住居フラグ　２：マンション */
	private static final String AD_FORM_FLG_2 = "2";
	/** 住居フラグ　３：メゾン */
	private static final String AD_FORM_FLG_3 = "3";

	/** 契約状態 「0:STB契約中のみ」*/
	private static final String STATUS_0 = "0";
	/** 契約状態 「1:STB変更予約あり」*/
	private static final String STATUS_1 = "1";
	/** 契約状態 「2:STB新規追加」*/
	private static final String STATUS_2 = "2";

	/** 契約情報リスト 内訳契約状態：0：契約中 */
	private static final String UCWK_STATUS_0 = "0";
	/** 契約情報リスト 内訳契約状態：1：予約中 */
	private static final String UCWK_STATUS_1 = "1";
	/** 契約情報リスト 内訳契約状態：2：なし */
	private static final String UCWK_STATUS_2 = "2";

	/** 契約可能件数  */
	private static final int KEI_LIMIT_CNT = 5;
	/** 機器リスト　選択しない用のグレード */
	private static final String MAX_GRADE = "999";

	/** コースリスト対応配列 0:スタンダード 1：バリュー 2：ライト 3：ベーシックHD 4：プレミアムHD 5：コンパクト 6：地デジ・BS 7：SDコース 8：HDコース */
	private static final String[] PCRS_CNG_LIST =
			{ CD00134_A35, CD00134_A33, CD00134_A34, CD00134_A40, CD00134_A41, CD00134_A36, CD00134_A37, CD00134_A38, CD00134_A39 };

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;
	/** DataBean操作種別：項目値取得 */
	private static final String GET = X31CWebConst.DATABEAN_GET_VALUE;
	/** DataBean操作種別：配列型項目に要素を追加 */
	private static final String ADD = X31CWebConst.DATABEAN_ADD_VALUE;
	/** 要素セパレータ N要素(末尾) */
	private static final String N_LAST = JFUWebCommon.SEP_N_LAST;

	/** サービスユースケースID：eo光テレビSTB追加変更申込内容確認(初期表示) */
	private static final String SVC_USECASE_ID_FUSV0130 = "FUSV0130";
	/** サービスユースケースID：eo光テレビSTB追加変更申込(申し込む)(住所変更のチェックなし) */
	private static final String SVC_USECASE_ID_FUSV0131_1 = "FUSV0131_1";

	/** CCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）宅内機器一意照会CC */
	private static final String CC_TITLE_FUSV013001CC = "FUSV013001CC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）機器提供サービス契約一覧照会(STB) */
	private static final String SC_TITLE_FUSV013001SC = "FUSV013001SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）機器提供サービス契約一覧照会(CCAS) */
	private static final String SC_TITLE_FUSV013003SC = "FUSV013003SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）機器提供サービス契約一覧照会(VONU) */
	private static final String SC_TITLE_FUSV013004SC = "FUSV013004SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）サービス契約一覧照会 */
	private static final String SC_TITLE_FUSV013005SC = "FUSV013005SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）サービス契約内訳一覧照会 */
	private static final String SC_TITLE_FUSV013006SC = "FUSV013006SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）一時支払金一意照会（出張費） */
	private static final String SC_TITLE_FUSV013008SC = "FUSV013008SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）一時支払金一意照会（交換手数料） */
	private static final String SC_TITLE_FUSV013009SC = "FUSV013009SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）一時支払金一意照会（追加手数料） */
	private static final String SC_TITLE_FUSV013010SC = "FUSV013010SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）一時支払金一意照会（BSPT工事費） */
	private static final String SC_TITLE_FUSV013011SC = "FUSV013011SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）マンション物件一意照会 */
	private static final String SC_TITLE_FUSV013012SC = "FUSV013012SC";
	/** SCタイトル：eo光テレビSTB追加変更申込内容確認(初期表示）料金コース一覧照会 */
	private static final String SC_TITLE_FUSV013015SC = "FUSV013015SC";
	/** SCタイトル：eo光テレビSTB追加変更申込(初期表示）一時支払金一意照会（STB交換契約事務手数料） */
	private static final String SC_TITLE_FUSV013016SC = "FUSV013016SC";

	/** Mapキー：宅内機器一意照会明細 */
	private static final String MAP_KEY_CC01CBSMSGLIST = "TKKIKISHOKAI1List";
	/** Mapキー：機器提供サービス契約一覧明細(STB) */
	private static final String MAP_KEY_SC1CBSMSGLIST = "EKK0341B509CBSMsg1List";
	/** Mapキー：機器提供サービス契約一覧明細(CCAS) */
	private static final String MAP_KEY_SC3CBSMSGLIST = "EKK0341B509CBSMsg1List";
	/** Mapキー：機器提供サービス契約一覧明細(VONU) */
	private static final String MAP_KEY_SC4CBSMSGLIST = "EKK0341B509CBSMsg1List";
	/** Mapキー：サービス契約一覧明細 */
	private static final String MAP_KEY_SC5CBSMSGLIST = "EKK0081B515CBSMsg1List";
	/** Mapキー：サービス契約内訳一覧明細 */
	private static final String MAP_KEY_SC6CBSMSGLIST = "EKK0161B509CBSMsg1List";
	/** Mapキー：一時支払金一意照会明細（出張費） */
	private static final String MAP_KEY_SC8CBSMSGLIST = "EKK0721A010CBSMsg1List";
	/** Mapキー：一時支払金一意照会明細（交換手数料） */
	private static final String MAP_KEY_SC9CBSMSGLIST = "EKK0721A010CBSMsg1List";
	/** Mapキー：一時支払金一意照会明細（追加手数料） */
	private static final String MAP_KEY_SC10CBSMSGLIST = "EKK0721A010CBSMsg1List";
	/** Mapキー：一時支払金一意照会明細（BSPT工事費） */
	private static final String MAP_KEY_SC11CBSMSGLIST = "EKK0721A010CBSMsg1List";
	/** Mapキー：マンション物件一意照会 */
	private static final String MAP_KEY_SC12CBSMSGLIST = "EKK0861A010CBSMsg1List";
	/** Mapキー：料金コース一覧照会明細 */
	private static final String MAP_KEY_SC15CBSMSGLIST = "EKK0791B502CBSMsg1List";

	/** Mapキー：料金グループコード */
	private static final String MAP_KEY_PRC_GRP_CD = "prc_grp_cd";
	/** Mapキー：料金コースコード */
	private static final String MAP_KEY_PCRS_CD = "pcrs_cd";
	/** Mapキー：料金コースコード名 */
	private static final String MAP_KEY_PCRS_CD_NM = "pcrs_cd_nm";
	/** Mapキー：料金コース名   */
	private static final String MAP_KEY_PCRS_NM = "pcrs_nm";
	/** Mapキー：料金プラン単位名	    */
	private static final String MAP_KEY_PPLAN_KOTEI_TANI_NM = "pplan_kotei_tani_nm";
	/** Mapキー：料金プランコード */
	private static final String MAP_KEY_PPLAN_CD = "pplan_cd";
	/** Mapキー：料金プランコード(マンション基本) */
	private static final String MAP_KEY_PPLANM_CD = "pplanm_cd";
	/** Mapキー：料金プランコード(メゾン基本) */
	private static final String MAP_KEY_PPLANMZ_CD = "pplanmz_cd";
	/** Mapキー：料金コース追加料金プランコード（ホーム追加）  */
	private static final String MAP_KEY_PPLAN_CD_ADD = "pplan_cd_add";
	/** Mapキー：料金コース追加料金プランコード（マンション追加）  */
	private static final String MAP_KEY_PPLANM_CD_ADD = "pplanm_cd_add";
	/** Mapキー：料金コース基本プランの料金（ホーム基本）  */
	private static final String MAP_KEY_PRICE = "price";
	/** Mapキー：料金コース基本プランの料金（マンション基本）  */
	private static final String MAP_KEY_PRICEM = "pricem";
	/** Mapキー：料金コース基本プランの料金（メゾン基本）  */
	private static final String MAP_KEY_PRICEMZ = "pricemz";
	/** Mapキー：料金コース追加プランの料金（ホーム追加）  */
	private static final String MAP_KEY_PRICE_ADD = "price_add";
	/** Mapキー：料金コース追加プランの料金（マンション追加）  */
	private static final String MAP_KEY_PRICEM_ADD = "pricem_add";
	/** Mapキー：料金プランコード（異動予約） */
	private static final String IDO_NEW_PPLAN_CD = "ido_new_pplan_cd";
	/** Mapキー：料金コースコード（異動予約） */
	private static final String IDO_NEW_PCRS_CD = "ido_new_pcrs_cd";
	/** Mapキー：料金コースコード名（異動予約） */
	private static final String IDO_NEW_PCRS_NM = "ido_new_pcrs_nm";

	/** Mapキー：マンション物件コード */
	private static final String MAP_KEY_MANSION_BUKKEN_CD = "mansion_bukken_cd";
	/** Mapキー：機器提供サービス契約番号 */
	private static final String MAP_KEY_KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	/** Mapキー：サービス契約内訳番号 */
	private static final String MAP_KEY_SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
	/** Mapキー：機器製造番号 */
	private static final String MAP_KIKI_SEIZO_NO = "kiki_seizo_no";
	/** Mapキー：機器製造番号 */
	private static final String MAP_KEY_KIKI_SEIZO_NO = "key_kiki_seizo_no";
	/** Mapキー：一時支払料金額 */
	private static final String MAP_KEY_TMP_PAY_PRC_AMNT = "tmp_pay_prc_amnt";
	/** Mapキー：TVコースグループコード  */
	private static final String MAP_KEY_TV_COURSE_GRP_CD = "tv_course_grp_cd";
	/** Mapキー：料金コース種別コード   */
	private static final String MAP_KEY_PCRS_SBT_CD = "pcrs_sbt_cd";
	/** Mapキー：料金コースグレード順位  */
	private static final String MAP_KEY_PCRS_GRADE_JUN = "pcrs_grade_jun";
	/** Mapキー：機器提供サービスコード  */
	private static final String MAP_KEY_KKTK_SVC_CD = "kktk_svc_cd";
	/** Mapキー：表示順序  */
	private static final String MAP_KEY_DSP_JUN = "dsp_jun";
	/** Mapキー：ＨＤＤ容量コード名称  */
	private static final String MAP_KEY_HDD_CAPA_CD_NM = "hdd_capa_cd_nm";
	/** Mapキー：ＨＤＤ容量コード  */
	private static final String MAP_KEY_HDD_CAPA_CD = "hdd_capa_cd";
	/** Mapキー：予約中ＨＤＤ容量コード  */
	private static final String MAP_KEY_RSV_HDD_CAPA_CD = "rsv_hdd_capa_cd";
	/** Mapキー：予約中ＨＤＤ容量コード名称  */
	private static final String MAP_KEY_RSV_HDD_CAPA_CD_NM = "rsv_hdd_capa_cd_nm";
	/** Mapキー：ＳＴＢＩＤ  */
	private static final String MAP_KEY_STB_ID = "stb_id";
	/** Mapキー：契約状態フラグ  */
	private static final String MAP_KEY_STATUS_FLG = "status_flg";
	/** Mapキー：異動レコード有無フラグ  */
	private static final String MAP_KEY_IDO_RSV_FLG = "ido_rsv_flg";
	/** Mapキー：異動予約詳細コード  */
	private static final String MAP_KEY_IDO_RSV_DTL_CD = "ido_rsv_dtl_cd";
	/** Mapキー：選択機器コース名  */
	private static final String MAP_KEY_RSV_PCRS_CD_NM = "rsv_pcrs_cd_nm";
	/** Mapキー：選択機器コースコード  */
	private static final String MAP_KEY_RSV_PCRS_CD = "rsv_pcrs_cd";
	/** Mapキー：選択機器プランコード  */
	private static final String MAP_KEY_RSV_PPLAN_CD = "rsv_pplan_cd";
	/** Mapキー：お申し込み日  */
	private static final String MAP_KEY_MSKM_YMD = "mskm_ymd";
	/** Mapキー：予約中お申し込み日  */
	private static final String MAP_KEY_RSV_MSKM_YMD = "rsv_mskm_ymd";

	/**
	 * 初期処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean init() throws Exception
	{
		DEBUG_LOG.debug("★★★★★eo光テレビSTB追加変更申込内容確認のビューロジック処理(INIT) START★★★★★");

		// 初期設定
		JFUWebCommon.getScreenInfo(this);
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		X31SDataBeanAccess serviceInfoBean = super.getServiceFormBean();

		// 利用可能サービスチェック
		JFUWebCommon.checkCommonRelation(this, SVC_USECASE_ID_FUSV0131_1);

		// リクエスト情報の取得(URL直接遷移の場合のみ)
		String motoScreenId = serviceInfoBean.sendMessageString(FUW07501SFConst.MOTO_SCREEN_ID, GET);
		if (SCREEN_ID_FUW09501.equals(motoScreenId))
		{
			// 現顧客契約情報の最新化
			JFUWebCommon.refreshGenCustKei(this);
		}
		else if (!JFUStrConst.EMPTY.equals(motoScreenId))
		{
			// 遷移元画面IDが設定され、メニュー画面以外の場合　共通エラー用 アクセスエラー
			DEBUG_LOG.info("----- FUW07501_init() アクセスエラー -----");
			throw new JCCBusinessException(ERROR_CODE_0009);
		}

		// サービスフォームBean初期値設定
		initSFBean(serviceInfoBean);

		// 共有フォームBeanからサービスフォームBeanへ値のコピー
		copySFBean(commonInfoBean, serviceInfoBean);

		// サービス処理結果マップ
		HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
				new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();

		// サービス呼出処理
		callFUSV0130(serviceInfoBean, commonInfoBean, outputMap);

		// サービスフォームBean設定
		setSFBean(serviceInfoBean, outputMap);

		// 遷移先画面情報の設定
		commonInfoBean.sendMessageString(NEXT_SCREEN_ID, SET, SCREEN_ID_FUW07501);
		commonInfoBean.sendMessageString(NEXT_SCREEN_NAME, SET, SCREEN_NAME_FUW07501);

		DEBUG_LOG.debug("★★★★★eo光テレビSTB追加変更申込内容確認のビューロジック処理(INIT) END★★★★★");
		return true;
	}

	/**
	 * サービスフォームBean初期値設定
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 */
	private void initSFBean(X31SDataBeanAccess serviceInfoBean)
	{
		// 表示可否フラグ
		serviceInfoBean.sendMessageString(FUW07501SFConst.KEI_DISP_FLG, SET, FLG_0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.COURSE_PRICE_DISP_FLG, SET, FLG_0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.STB_DISP_FLG, SET, FLG_0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.STB_PRICE_DISP_FLG, SET, FLG_0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.BSPASS_DISP_FLG, SET, FLG_0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.KOJI_PRICE_DISP_FLG, SET, FLG_0);

		// フラグ関連
		serviceInfoBean.sendMessageString(FUW07501SFConst.COURSE_CHANGE_FLG, SET, COURSE_CHANGE_FLG_1);
		serviceInfoBean.sendMessageString(FUW07501SFConst.SC_STBID_FLG, SET, SC_STBID_FLG_1);
		serviceInfoBean.sendMessageString(FUW07501SFConst.AD_FORM_FLG, SET, AD_FORM_FLG_1);

		// 一時支払料金
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_11_LIST, SET, "0");
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_12_LIST, SET, "0");
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_13_LIST, SET, "0");
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_14_LIST, SET, "0");
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_15_LIST, SET, "0");
	}

	/**
	 * 共有フォームBeanからサービスフォームBeanへ値をコピーします
	 * <br>
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceInfoBean サービスフォームBean
	 */
	private void copySFBean(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceInfoBean)
	{
		// サービスフォームBean ← 共有フォームBean.ＳＳＯ情報
		X31SDataBeanAccess ssoInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SSO_INFO).getDataBean(0);
		copyValue(ssoInfo, serviceInfoBean, CommonInfoCFConst.SYSID_21, FUW07501SFConst.SYSID);
		copyValue(ssoInfo, serviceInfoBean, CommonInfoCFConst.SVC_KEI_NO_21, FUW07501SFConst.SVC_KEI_NO);

		// サービスフォームBean ← 共有フォームBean.サービス契約回線内訳情報
		X31SDataBeanAccess svcKeiKaisenUcwkInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_KAISEN_UCWK_INFO).getDataBean(0);
		copyValue(svcKeiKaisenUcwkInfo, serviceInfoBean, CommonInfoCFConst.MANSION_BUKKEN_NO_26, FUW07501SFConst.MANSION_BUKKEN_NO);

		// サービスフォームBean ← 共有フォームBean.機器提供サービス契約情報
		X31SDataBeanAccessArray kktkSvcKeiList = commonInfoBean.getDataBeanArray(JFUWebCommon.KKTK_SVC_KEI_INFO);
		String vonuKktkSvcKeiNo = JFUStrConst.EMPTY;
		String vonuTaknkikiModelCd = JFUStrConst.EMPTY;
		// ループ：機器提供サービス契約情報件数分
		int stbCnt = 0;
		for (int i = 0; i < kktkSvcKeiList.getCount(); i++)
		{
			X31SDataBeanAccess kktkSvcKeiInfo = kktkSvcKeiList.getDataBean(i);
			String kktkSvcCd = kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KKTK_SVC_CD_27, GET);
			String kktkSvcKeiStat = kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_STAT_27, X31CWebConst.DATABEAN_GET_VALUE);

			// 機器提供サービス契約ステータスが申し込み不可のステータスの場合、読み飛ばし
			if (!enableKktkSvcKeiStat(kktkSvcKeiStat))
			{
				continue;
			}

			if (JFUStrConst.KK0771_KKTK_SVC_CD_C009.equals(kktkSvcCd))
			{
				// 機器提供サービスコードがSTBの場合
				String kikiSeizoNo = kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, GET);
				if (kikiSeizoNo != null && !JFUStrConst.EMPTY.equals(kikiSeizoNo))
				{
					X31SDataBeanAccess stbidInfo =
							JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW07501SFConst.STBID_LIST + N_LAST, stbCnt);
					stbidInfo.sendMessageString(FUW07501SFConst.KIKI_SEIZO_NO_04, SET, kikiSeizoNo); // ＳＴＢＩＤ取得要リスト.機器製造番号
					stbCnt++;
				}
			}
			else if (JFUStrConst.KK0771_KKTK_SVC_CD_C013.equals(kktkSvcCd))
			{
				// 機器提供サービスコードがV-ONUの場合
				vonuKktkSvcKeiNo = kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_NO_27, GET);
				vonuTaknkikiModelCd = kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.TAKNKIKI_MODEL_CD_27, GET);
			}
		}
		serviceInfoBean.sendMessageString(FUW07501SFConst.V_ONU_NO, SET, vonuKktkSvcKeiNo); // 機器提供サービス契約番号（ＶＯＮＵ）
		serviceInfoBean.sendMessageString(FUW07501SFConst.TAKNKIKI_MODEL_CD, SET, vonuTaknkikiModelCd); // 宅内機器型式コード
	}

	/**
	 * サービスフォームBeanの設定を行います
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービス処理結果マップ
	 * @throws Exception
	 */
	private void setSFBean(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
			throws Exception
	{
		// 機器提供サービス契約レコード(STB)
		HashMap<String, HashMap<String, String>> stb_all_kei_map = new HashMap<String, HashMap<String, String>>();
		// 機器提供サービス契約レコード(CCAS)
		HashMap<String, HashMap<String, String>> stb_all_kei_map_ccas = new HashMap<String, HashMap<String, String>>();
		// サービス契約内訳レコード
		HashMap<String, HashMap<String, String>> pcrs_all_kei_map = new HashMap<String, HashMap<String, String>>();
		// 機器提供サービス契約番号格納リスト
		TreeSet<String> stb_no_list = new TreeSet<String>();
		// ＳＴＢＩＤマップ
		HashMap<String, String> stbid_map = new HashMap<String, String>();

		// サービス処理結果マップの編集処理
		editDispMapSC1(serviceInfoBean, outputMap, stb_all_kei_map, stb_no_list);
		editDispMapSC3(serviceInfoBean, outputMap, stb_all_kei_map, stb_all_kei_map_ccas);
		editDispMapSC4(serviceInfoBean, outputMap);
		editDispMapSC12(serviceInfoBean, outputMap);
		editDispMapSC15(serviceInfoBean, outputMap);
		editDispMapSC5(serviceInfoBean, outputMap);
		editDispMapSC6(serviceInfoBean, outputMap, pcrs_all_kei_map);
		editDispMapSC8(serviceInfoBean, outputMap);
		editDispMapSC9(serviceInfoBean, outputMap);
		editDispMapSC10(serviceInfoBean, outputMap);
		editDispMapSC11(serviceInfoBean, outputMap);
		editDispMapCC01(serviceInfoBean, outputMap, stbid_map);
		editDispMapSC16(serviceInfoBean, outputMap);

		String adFormFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.AD_FORM_FLG, GET);
		if (!AD_FORM_FLG_3.equals(adFormFlg) && stb_no_list.size() > KEI_LIMIT_CNT)
		{
			// ホーム・マンションの場合、機器提供サービス契約が6件以上存在するためエラー
			DEBUG_LOG.info("----- FUW07501_setSFBean() 機器提供サービス契約件数超過エラー[メゾン以外] ----- 住居フラグ：" + adFormFlg);
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		else if (AD_FORM_FLG_3.equals(adFormFlg) && stb_no_list.size() > 1)
		{
			// メゾンの場合、機器提供サービス契約が2件以上存在するためエラー
			DEBUG_LOG.info("----- FUW07501_setSFBean() 機器提供サービス契約件数超過エラー[メゾン] ----- 住居フラグ：" + adFormFlg);
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		// 契約情報リストの設定
		setKeiList(serviceInfoBean, stb_no_list, stb_all_kei_map, stb_all_kei_map_ccas, pcrs_all_kei_map, stbid_map);

		String keiDispFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.KEI_DISP_FLG, GET);
		String bspassDispFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.BSPASS_DISP_FLG, GET);
		String stbDispFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.STB_DISP_FLG, GET);
		if (FLG_0.equals(keiDispFlg) && FLG_0.equals(bspassDispFlg) && FLG_0.equals(stbDispFlg))
		{
			// コース変更なし、BSパススルー予約なし、STB予約なしの場合エラー
			String msg = " 契約情報可否フラグ：" + keiDispFlg + "ＢＳパススルー表示可否フラグ：" + bspassDispFlg + "ＳＴＢ表示可否フラグ：" + stbDispFlg;
			DEBUG_LOG.info("----- FUW07501_setSFBean() コース変更なし、BSパススルー予約なし、STB予約なしエラー -----" + msg);
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		// 料金情報の設定
		setRyokinInfo(serviceInfoBean);

		// 表示項目の設定
		setDispInfo(serviceInfoBean);
	}

	/**
	 * 契約情報リストの設定
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param stb_no_list 機器提供サービス契約番号格納リスト
	 * @param stb_all_kei_map 機器提供サービス契約中レコード(STB)
	 * @param stb_all_kei_map_ccas 機器提供サービス契約中レコード(CCAS)
	 * @param pcrs_all_kei_map サービス契約内訳契約中レコード
	 * @param stbid_map ＳＴＢＩＤマップ
	 * @throws Exception
	 */
	private void setKeiList(X31SDataBeanAccess serviceInfoBean, TreeSet<String> stb_no_list,
			HashMap<String, HashMap<String, String>> stb_all_kei_map, HashMap<String, HashMap<String, String>> stb_all_kei_map_ccas,
			HashMap<String, HashMap<String, String>> pcrs_all_kei_map, HashMap<String, String> stbid_map) throws Exception
	{
		// データタイプBeanの初期化
		serviceInfoBean.getDataBeanArray(FUW07501SFConst.KEI_LIST).clearArray();
		boolean stbYoyakuFlg = false;
		boolean takuhaiKokanFlg = false;
		final String HENKO_NASHI = getDispText(KEY_MSKM_NAIYO_0);
		final String HENKO = getDispText(KEY_MSKM_NAIYO_1);
		final String TSUIKA = getDispText(KEY_MSKM_NAIYO_2);

		// ループ：機器提供サービス契約番号格納リスト(STB)
		int i = 0;
		for (String stb_no : stb_no_list)
		{
			// 機器提供サービスレコード(STB)
			HashMap<String, String> stbAllKeiMap = stb_all_kei_map.get(stb_no);
			// 機器提供サービスレコード(CCAS)
			HashMap<String, String> stbAllKeiMapCcas = stb_all_kei_map_ccas.get(stb_no);
			// サービス契約内訳レコード
			HashMap<String, String> pcrsAllKeiMap = pcrs_all_kei_map.get(stbAllKeiMap.get(MAP_KEY_SVC_KEI_UCWK_NO));
			// 契約情報リスト
			X31SDataBeanAccess keiInfo = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW07501SFConst.KEI_LIST + N_LAST, i);
			keiInfo.sendMessageString(FUW07501SFConst.KEI_NO_01, SET, Integer.toString(i + 1)); // 契約番号

			// 内訳情報の設定
			String ucwkStatusFlg = pcrsAllKeiMap.get(MAP_KEY_STATUS_FLG);
			String ucwkIdoRsvDtlCd = pcrsAllKeiMap.get(MAP_KEY_IDO_RSV_DTL_CD);

			keiInfo.sendMessageString(FUW07501SFConst.UCWK_PCRS_NM_01, SET, pcrsAllKeiMap.get(MAP_KEY_PCRS_NM)); // 内訳料金コース名
			keiInfo.sendMessageString(FUW07501SFConst.UCWK_PCRS_CD_01, SET, pcrsAllKeiMap.get(MAP_KEY_PCRS_CD)); // 内訳料金コースコード
			keiInfo.sendMessageString(FUW07501SFConst.UCWK_PPLAN_CD_01, SET, pcrsAllKeiMap.get(MAP_KEY_PPLAN_CD)); // 内訳料金プランコード
			keiInfo.sendMessageString(FUW07501SFConst.UCWK_STATUS_01, SET, UCWK_STATUS_0);

			if (FLG_0.equals(ucwkStatusFlg))
			{
				// 内訳契約状態フラグ(0：追加予約中)の場合
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_PCRS_NM_01, SET, TSUIKA + pcrsAllKeiMap.get(MAP_KEY_PCRS_NM)); // 内訳料金コース名
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_ADD_PCRS_NM_01, SET, TSUIKA + pcrsAllKeiMap.get(MAP_KEY_PCRS_NM)); // 内訳追加料金コース名
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_STATUS_01, SET, UCWK_STATUS_2);
			}
			if (JFUStrConst.CD01167_003.equals(ucwkIdoRsvDtlCd))
			{
				// 異動予約詳細コード(003:コース変更)の場合
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_PCRS_NM_01, SET, pcrsAllKeiMap.get(IDO_NEW_PCRS_NM));
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_PCRS_CD_01, SET, pcrsAllKeiMap.get(IDO_NEW_PCRS_CD));
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_PPLAN_CD_01, SET, pcrsAllKeiMap.get(IDO_NEW_PPLAN_CD));
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_STATUS_01, SET, UCWK_STATUS_1);
			}
			else if (JFUStrConst.CD01167_005.equals(ucwkIdoRsvDtlCd) || JFUStrConst.CD01167_006.equals(ucwkIdoRsvDtlCd)
					|| JFUStrConst.CD01167_007.equals(ucwkIdoRsvDtlCd))
			{
				// 異動予約詳細コード(005:サービス休止、006:サービス休止解除、007:サービス解約)の場合
				keiInfo.sendMessageString(FUW07501SFConst.UCWK_STATUS_01, SET, UCWK_STATUS_1);
			}

			// 機器情報の設定
			String kikiStatusFlg = stbAllKeiMap.get(MAP_KEY_STATUS_FLG);
			String ccasDisp = editKikiSeizoNo(stbAllKeiMapCcas.get(MAP_KIKI_SEIZO_NO));
			String kikiSeizoNo = stbAllKeiMap.get(MAP_KIKI_SEIZO_NO);

			keiInfo.sendMessageString(FUW07501SFConst.C_CAS_NO_DISP_01, SET, ccasDisp); // Ｃ＿ＣＡＳカードＮｏ
			if (kikiSeizoNo != null && !JFUStrConst.EMPTY.equals(kikiSeizoNo))
			{
				keiInfo.sendMessageString(FUW07501SFConst.STB_ID_01, SET, stbid_map.get(kikiSeizoNo)); // ＳＴＢＩＤ
			}

			keiInfo.sendMessageString(FUW07501SFConst.MSKM_YMD_01, SET, stbAllKeiMap.get(MAP_KEY_MSKM_YMD)); // お申し込み日
			keiInfo.sendMessageString(FUW07501SFConst.HDD_CAPA_NM_01, SET, stbAllKeiMap.get(MAP_KEY_HDD_CAPA_CD_NM)); // ＨＤＤ容量コード名称
			keiInfo.sendMessageString(FUW07501SFConst.HDD_CAPA_CD_01, SET, stbAllKeiMap.get(MAP_KEY_HDD_CAPA_CD)); // ＨＤＤ容量コード
			keiInfo.sendMessageString(FUW07501SFConst.KIKI_PCRS_NM_01, SET, stbAllKeiMap.get(MAP_KEY_PCRS_CD_NM)); // 機器料金コース名
			keiInfo.sendMessageString(FUW07501SFConst.KIKI_PCRS_CD_01, SET, stbAllKeiMap.get(MAP_KEY_PCRS_CD)); // 機器料金コースコード
			keiInfo.sendMessageString(FUW07501SFConst.KIKI_PPLAN_CD_01, SET, stbAllKeiMap.get(MAP_KEY_PPLAN_CD)); // 機器料金プランコード
			keiInfo.sendMessageString(FUW07501SFConst.MSKM_NAIYO_01, SET, HENKO_NASHI); // お申し込み内容
			keiInfo.sendMessageString(FUW07501SFConst.STATUS_01, SET, STATUS_0); // 機器契約状態

			if (FLG_0.equals(kikiStatusFlg))
			{
				// 機器提供サービス契約が追加予約中の場合
				keiInfo.sendMessageString(FUW07501SFConst.MSKM_NAIYO_01, SET, TSUIKA);
				keiInfo.sendMessageString(FUW07501SFConst.STATUS_01, SET, STATUS_2);
				stbYoyakuFlg = true;
			}
			else if (JFUStrConst.CD01167_011.equals(kikiStatusFlg) || JFUStrConst.CD01167_029.equals(kikiStatusFlg))
			{
				// 機器提供サービス契約のレコードがコース変更予約中の場合
				keiInfo.sendMessageString(FUW07501SFConst.MSKM_YMD_01, SET, stbAllKeiMap.get(MAP_KEY_RSV_MSKM_YMD));
				keiInfo.sendMessageString(FUW07501SFConst.HDD_CAPA_NM_01, SET, stbAllKeiMap.get(MAP_KEY_RSV_HDD_CAPA_CD_NM));
				keiInfo.sendMessageString(FUW07501SFConst.HDD_CAPA_CD_01, SET, stbAllKeiMap.get(MAP_KEY_RSV_HDD_CAPA_CD));
				keiInfo.sendMessageString(FUW07501SFConst.KIKI_PCRS_NM_01, SET, stbAllKeiMap.get(MAP_KEY_RSV_PCRS_CD_NM));
				keiInfo.sendMessageString(FUW07501SFConst.KIKI_PCRS_CD_01, SET, stbAllKeiMap.get(MAP_KEY_RSV_PCRS_CD));
				keiInfo.sendMessageString(FUW07501SFConst.KIKI_PPLAN_CD_01, SET, stbAllKeiMap.get(MAP_KEY_RSV_PPLAN_CD));
				keiInfo.sendMessageString(FUW07501SFConst.MSKM_NAIYO_01, SET, HENKO);
				keiInfo.sendMessageString(FUW07501SFConst.STATUS_01, SET, STATUS_1);
				stbYoyakuFlg = true;
			
				// 宅配の予約中
				if (JFUStrConst.CD01167_029.equals(kikiStatusFlg)) {
					takuhaiKokanFlg = true;
				}
			}
			else if (!FLG_1.equals(kikiStatusFlg))
			{
				// 機器提供サービス契約がコース変更以外の予約中
				keiInfo.sendMessageString(FUW07501SFConst.MSKM_NAIYO_01, SET, HENKO);
				keiInfo.sendMessageString(FUW07501SFConst.STATUS_01, SET, STATUS_1);
				stbYoyakuFlg = true;
			}
			i++;
		}

		if (stbYoyakuFlg)
		{
			// 1件以上の機器予約が存在する場合
			serviceInfoBean.sendMessageString(FUW07501SFConst.STB_DISP_FLG, SET, FLG_1); // ＳＴＢ表示可否フラグ

			// 宅配交換予約が存在する場合
			if (takuhaiKokanFlg)
			{
				serviceInfoBean.sendMessageString(FUW07501SFConst.TAKUHAI_CHANGE_FLG, SET, FLG_1); // 宅配交換フラグ
			}
		}
	}

	/**
	 * 基本コースのレコード番号取得処理
	 * <br>
	 * @param keiCfmList 契約情報リスト
	 * @return	基本コースのレコード番号
	 * @throws Exception 例外
	 */
	private String getMainCnt(X31SDataBeanAccessArray keiCfmList) throws Exception
	{
		// ループ：契約台数分
		for (int i = 0; i < keiCfmList.getCount(); i++)
		{
			X31SDataBeanAccess keiInfo = keiCfmList.getDataBean(i);
			String ucwkPplanCd = keiInfo.sendMessageString(FUW07501SFConst.UCWK_PPLAN_CD_01, GET);

			if (isJdgKeiCngPcrs(ucwkPplanCd))
			{
				// コース選択が「スタンダード」または「プレミアムＨＤ」の場合
				return Integer.toString(i);
			}
		}
		// ループ：契約台数分
		for (int i = 0; i < keiCfmList.getCount(); i++)
		{
			X31SDataBeanAccess keiInfo = keiCfmList.getDataBean(i);
			String keiCngPcrs = keiInfo.sendMessageString(FUW07501SFConst.UCWK_PCRS_CD_01, GET);

			if (isJdgKeiCngPcrs2(keiCngPcrs))
			{
				// コース選択が「バリュー」または「ベーシックＨＤ」の場合
				return Integer.toString(i);
			}
		}
		return "0";
	}

	/**
	 * コース選択判定
	 * スタンダードコースまたはプレミアムコースか確認<br>
	 * @param keiCngPcrs	コース選択
	 * @return	判定結果
	 * @throws Exception	すべての例外
	 */
	private boolean isJdgKeiCngPcrs(String keiCngPcrs) throws Exception
	{
		if ((JFUStrConst.CD00565_PA4101.equals(keiCngPcrs) || JFUStrConst.CD00565_PA3501.equals(keiCngPcrs)
				|| JFUStrConst.CD00565_PA4103.equals(keiCngPcrs) || JFUStrConst.CD00565_PA3503.equals(keiCngPcrs)
				|| JFUStrConst.CD00565_PA4105.equals(keiCngPcrs) || JFUStrConst.CD00565_PA3505.equals(keiCngPcrs)))
		{
			// コース選択が「スタンダード」または「プレミアムＨＤ」の場合
			return true;
		}
		return false;
	}

	/**
	 * コース選択判定2
	 * バリューコースまたはベーシックコースか確認<br>
	 * @param keiCngPcrs	コース選択
	 * @return	判定結果
	 * @throws Exception	すべての例外
	 */
	private boolean isJdgKeiCngPcrs2(String keiCngPcrs) throws Exception
	{
		if ((JFUStrConst.CD00134_A33.equals(keiCngPcrs) || JFUStrConst.CD00134_A40.equals(keiCngPcrs)))
		{
			// コース選択が「バリュー」または「ベーシックＨＤ」の場合
			return true;
		}
		return false;
	}

	/**
	 * 料金情報の設定
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @throws Exception
	 */
	private void setRyokinInfo(X31SDataBeanAccess serviceInfoBean) throws Exception
	{
		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW07501SFConst.KEI_LIST);
		X31SDataBeanAccessArray ryokinList = serviceInfoBean.getDataBeanArray(FUW07501SFConst.RYOKIN);
		// 基本コースのレコード取得
		String mainChkFlg = getMainCnt(keiList);

		X31SDataBeanAccess kikiInfo = serviceInfoBean.getDataBeanArray(FUW07501SFConst.KIKI_LIST).getDataBean(0);

		int kikiCnt = Integer.parseInt(serviceInfoBean.sendMessageString(FUW07501SFConst.KIKI_KENSU_CNT, GET));
		int stbPriceSum = 0; // STB料金合計
		int coursePriceSum = 0; // コース料金合計
		int cngStbCnt = 0; // STB交換台数
		int addStbCnt = 0; // STB追加台数
		String coursePriceTani = JFUStrConst.EMPTY; // コース料金単位
		String stbPriceTani = JFUStrConst.EMPTY; // STB料金単位

		// ループ：契約情報リスト件数分
		for (int i = 0; i < keiList.getCount(); i++)
		{
			X31SDataBeanAccess keiInfo = keiList.getDataBean(i);

			// コース料金の設定
			String coursePrice = "0";
			String ucwkPplanCd = keiInfo.sendMessageString(FUW07501SFConst.UCWK_PPLAN_CD_01, GET);
			// ループ：料金リスト件数分
			for (int j = 0; j < ryokinList.getCount(); j++)
			{
				X31SDataBeanAccess ryokinInfo = ryokinList.getDataBean(j);
				coursePriceTani = ryokinInfo.sendMessageString(FUW07501SFConst.PPLAN_KOTEI_TANI_NM_03, GET);
				String pplan = ryokinInfo.sendMessageString(FUW07501SFConst.PLAN_CD_03, GET);
				String pplanCdAdd = ryokinInfo.sendMessageString(FUW07501SFConst.PLAN_CD_ADD_03, GET);

				if (ucwkPplanCd.equals(pplan) || ucwkPplanCd.equals(pplanCdAdd))
				{
					// 基本プランでない場合、値引き額を設定
					// （税抜き金額）
					coursePrice = JFUWebCommon.getCalcPlanPrcExcludeTax(this, ryokinInfo.sendMessageString(FUW07501SFConst.PRC_03, GET));
					if (i != Integer.parseInt(mainChkFlg))
					{
						// 追加プランの場合
						// （税抜き金額）
						coursePrice = JFUWebCommon.getCalcPlanPrcExcludeTax(this, ryokinInfo.sendMessageString(FUW07501SFConst.PRC_ADD_03, GET));
					}
					// コース料金合計の加算
					coursePriceSum += Integer.parseInt(coursePrice);
					break;
				}
			}
			// 税抜き金額を設定
			keiInfo.sendMessageString(FUW07501SFConst.COURSE_PRICE_01, SET, formatNumber(coursePrice) + coursePriceTani); // 契約情報リスト.コース料金

			// STB料金の設定
			String stbPrice = "0";
			String kikiPplanCd = keiInfo.sendMessageString(FUW07501SFConst.KIKI_PPLAN_CD_01, GET);
			// ループ：機器リスト件数分
			for (int j = 0; j < kikiCnt; j++)
			{
				stbPriceTani = kikiInfo.sendMessageString(FUW07501SFConst.TANI_NM_LIST_02, GET, j);
				String pplan = kikiInfo.sendMessageString(FUW07501SFConst.PPLAN_LIST_02, GET, j);
				if (kikiPplanCd.equals(pplan))
				{
					// 契約リスト.料金プランコードと機器リスト.料金プランコードが同じ場合
					// （税抜き金額）
					stbPrice = JFUWebCommon.getCalcPlanPrcExcludeTax(this, kikiInfo.sendMessageString(FUW07501SFConst.PRC_LIST_02, GET, j));
					// STB料金合計の加算
					stbPriceSum += Integer.parseInt(stbPrice);
					break;
				}
			}
			keiInfo.sendMessageString(FUW07501SFConst.STB_PRICE_01, SET, formatNumber(stbPrice) + stbPriceTani); // 契約情報リスト.ＳＴＢ料金

			// STB交換台数、STB追加台数の設定
			String status = keiInfo.sendMessageString(FUW07501SFConst.STATUS_01, GET);
			if (STATUS_2.equals(status))
			{
				addStbCnt++;
			}
			else if (STATUS_1.equals(status))
			{
				cngStbCnt++;
			}
		}

		String formatStbPriceSum = formatNumber(Integer.toString(stbPriceSum)) + coursePriceTani;
		String formatCoursePriceSum = formatNumber(Integer.toString(coursePriceSum)) + stbPriceTani;

		// STB料金合計
		serviceInfoBean.sendMessageString(FUW07501SFConst.STB_PRICE_SUM, SET, formatStbPriceSum);
		// コース料金合計
		serviceInfoBean.sendMessageString(FUW07501SFConst.COURSE_PRICE_SUM, SET, formatCoursePriceSum);
		// 工事費用の設定
		setKojiPrice(serviceInfoBean, cngStbCnt, addStbCnt);
	}

	/**
	 * 工事費用を設定します
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param cngStbCnt STB交換台数
	 * @param addStbCnt STB追加台数
	 * @throws Exception 
	 * @throws NumberFormatException 
	 */
	private void setKojiPrice(X31SDataBeanAccess serviceInfoBean, int cngStbCnt, int addStbCnt) throws NumberFormatException, Exception
	{
		DEBUG_LOG.info("STB交換台数：" + cngStbCnt + "STB追加台数：" + addStbCnt);

		// 税抜き金額を算出
		int shutchoPrice =
				Integer
						.parseInt(JFUWebCommon
								.getCalcPlanPrcExcludeTax(this, serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_11_LIST, GET)));
		int cngPrice =
				Integer
						.parseInt(JFUWebCommon
								.getCalcPlanPrcExcludeTax(this, serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_12_LIST, GET)));
		int addPrice =
				Integer
						.parseInt(JFUWebCommon
								.getCalcPlanPrcExcludeTax(this, serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_13_LIST, GET)));

		// 工事費用 = (STB交換台数 * 交換手数料) + (STB追加台数 * 追加手数料) + 出張費
		int kojiPrice = (cngStbCnt * cngPrice) + (addStbCnt * addPrice) + shutchoPrice;

		if (FLG_1.equals(serviceInfoBean.sendMessageString(FUW07501SFConst.BSPASS_DISP_FLG, GET)))
		{
			// BSパススルー表示ONの場合
			// 税抜金額を算出
			int bsptPrice =
					Integer.parseInt(JFUWebCommon.getCalcPlanPrcExcludeTax(this, 
							serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_14_LIST, GET)));
			// 工事費用 = 工事費用 + BSパススルー工事費
			kojiPrice += bsptPrice;
		}
		
		// 宅配交換の場合
		if (FLG_1.equals(serviceInfoBean.sendMessageString(FUW07501SFConst.TAKUHAI_CHANGE_FLG, GET)))
		{
			int kokanPrice =
					Integer.parseInt(JFUWebCommon.getCalcPlanPrcExcludeTax(this, 
							serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_15_LIST, GET)));
			kojiPrice = cngStbCnt * kokanPrice;
		}

		serviceInfoBean.sendMessageString(FUW07501SFConst.KOJI_PRICE, SET, formatNumber(Integer.toString(kojiPrice)) + " 円");
	}

	/**
	 * 表示項目を設定します
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 */
	private void setDispInfo(X31SDataBeanAccess serviceInfoBean)
	{
		// 契約情報
		String keiDispFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.KEI_DISP_FLG, GET);
		// BSパススルーのお申し込み
		String bspassDispFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.BSPASS_DISP_FLG, GET);
		// eo光テレビチューナー(STB)予約内容
		String stbDispFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.STB_DISP_FLG, GET);

		// 変更後のeo光テレビチューナー（STB）利用料
		if (FLG_1.equals(stbDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW07501SFConst.STB_PRICE_DISP_FLG, SET, FLG_1);
		}
		// お申し込み後のコース料金
		if (FLG_1.equals(stbDispFlg) || FLG_1.equals(keiDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW07501SFConst.COURSE_PRICE_DISP_FLG, SET, FLG_1);
		}
		// ご契約内容変更に伴う工事費用
		if (FLG_1.equals(stbDispFlg) || FLG_1.equals(bspassDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW07501SFConst.KOJI_PRICE_DISP_FLG, SET, FLG_1);
		}
	}

	/**
	 * サービス呼出処理(eo光テレビSTB追加変更申込内容確認(初期表示))
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービスフォームBean
	 * @throws Exception 
	 */
	private void callFUSV0130(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean,
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap) throws Exception
	{
		FUSV0130_FUSV0130OPDBMapper mapper = new FUSV0130_FUSV0130OPDBMapper();
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_FUSV0130);
		X31SDataBeanAccess[] beanArray = new X31SDataBeanAccess[] { bean, commonInfoBean };
		HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();

		// DataBean-BP上りマッピング
		mapper.setFUSV0130WORK01(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013001SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013002SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013003SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013004SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013005SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013006SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013007SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013008SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013009SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013010SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013011SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013012SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013001CC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013014SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013015SC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013002CC(beanArray, inputMap, FUNC_CD_1);
		mapper.setFUSV013003CC(beanArray, inputMap, JFUScreenConst.SCREEN_ID_FUW07501);
		mapper.setFUSV013016SC(beanArray, inputMap, FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務エラーを再throw
			DEBUG_LOG.info("----- FUW07501_callFUSV0130() サービス実行エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0002);
		}
	}

	/**
	 * サービス検索結果マップの値が存在するか判定します。
	 * <br>
	 * @param outputMap サービス検索結果マップ
	 * @param keySC SCタイトルキー
	 * @param keyCBSMsg CBSMsgキー
	 * @return サービス検索結果マップの値が存在する場合は、TRUE
	 */
	private boolean existsOutPutMap(HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap, String keySC, String keyCBSMsg)
	{
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = null;
		if (outputMap.containsKey(keySC))
		{
			parentMap = outputMap.get(keySC);
		}
		if (parentMap == null || !parentMap.containsKey(keyCBSMsg))
		{
			// パラメータ異常ならば終了
			return false;
		}
		ArrayList<HashMap<String, String>> childList = parentMap.get(keyCBSMsg);
		if (childList == null || childList.size() == 0)
		{
			// パラメータ異常ならば終了
			return false;
		}
		return true;
	}

	/**
	 * コピー元DataBean項目をコピー先DataBeanへコピーします
	 * <br>
	 * @param srcBean コピー元DataBean
	 * @param destBean コピー先DataBean
	 * @param srcName コピー元項目名
	 * @param destName コピー先項目名
	 */
	private void copyValue(X31SDataBeanAccess srcBean, X31SDataBeanAccess destBean, String srcName, String destName)
	{
		String value = srcBean.sendMessageString(srcName, GET);
		destBean.sendMessageString(destName, SET, value);
	}

	/**
	 * DISPTEXT要素のテキストを返却します。
	 * <br>
	 * @param textId TEXTID
	 * @return テキスト
	 * @throws Exception XML解析時に発生する例外
	 */
	private static String getDispText(String textId) throws Exception
	{
		return JFUWebCommon.getDispText(SCREEN_ID_FUW07501, textId);
	}

	/**
	 * C-CASカード番号のハイフン処理
	 * <br>
	 * @param arg0 	C-CASカード番号
	 * @return String 編集されたC-CASカード番号
	 */
	private static String editKikiSeizoNo(String arg0)
	{
		if (arg0 == null || JFUStrConst.EMPTY.equals(arg0))
		{
			return JFUStrConst.EMPTY;
		}

		StringBuffer strBuf = new StringBuffer();

		// C-CASカード番号の文字数を取得
		int length = arg0.length();

		for (int i = 0; i < length; i++)
		{
			// C-CASカード番号の4桁目、8桁目、12桁目、16桁目にハイフンを設定
			if (4 == length - i || 8 == length - i || 12 == length - i || 16 == length - i)
			{
				strBuf.append("-");
			}

			strBuf.append(arg0.substring(i, i + 1));
		}

		return strBuf.toString();
	}

	/**
	 * 数値書式(カンマ区切り)の編集を行います。
	 * <br>
	 * @param arg0 カンマ区切りに編集する文字列
	 * @return String 数値書式(カンマ区切り)に編集された文字列
	 */
	private static String formatNumber(String arg0)
	{
		return JPCUtilCommon.formatNumber(arg0);
	}

	/**
	 * 機器提供サービス契約一覧（STB)の加工編集処理（FUSV013001SC）
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap	 サービス検索結果マップ
	 * @param stb_all_kei_map 機器提供サービス契約中レコード(STB)
	 * @param stb_no_list 機器提供サービス契約番号格納リスト
	 */
	private void editDispMapSC1(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, HashMap<String, String>> stb_all_kei_map, TreeSet<String> stb_no_list)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013001SC, MAP_KEY_SC1CBSMSGLIST))
		{
			// 機器提供サービス契約が存在しない場合、契約状態エラー
			DEBUG_LOG.info("----- FUW07501_editDispMapSC1() データ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013001SC);
		ArrayList<HashMap<String, String>> stbList = parentMap.get(MAP_KEY_SC1CBSMSGLIST);

		// 機器提供サービス契約一覧（STB）の件数分Loop
		for (int i = 0; i < stbList.size(); i++)
		{
			HashMap<String, String> stbMap = stbList.get(i);
			DEBUG_LOG.info("★FUSV013001SC" + stbMap);

			String kktkSvckeiNo = stbMap.get(MAP_KEY_KKTK_SVC_KEI_NO);
			// 機器提供サービス契約番号格納配列に機器提供サービス契約番号を追加
			stb_no_list.add(kktkSvckeiNo);
			// 機器提供サービス契約レコードの設定
			stb_all_kei_map.put(kktkSvckeiNo, stbMap);
		}
	}

	/**
	 * 機器提供サービス契約一覧（CCAS)の加工編集処理（FUSV013003SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param stb_all_kei_map 機器提供サービス契約中レコード(STB)
	 * @param stb_all_kei_map_ccas 機器提供サービス契約中レコード(CCAS)
	 */
	private void editDispMapSC3(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, HashMap<String, String>> stb_all_kei_map, HashMap<String, HashMap<String, String>> stb_all_kei_map_ccas)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013003SC, MAP_KEY_SC3CBSMSGLIST))
		{
			// 機器提供サービス契約が存在しない場合、契約状態エラー
			DEBUG_LOG.info("----- FUW07501_editDispMapSC3() データ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013003SC);
		ArrayList<HashMap<String, String>> ccasList = parentMap.get(MAP_KEY_SC3CBSMSGLIST);

		// 機器提供サービス契約一覧（CCAS）の件数分Loop
		for (int i = 0; i < ccasList.size(); i++)
		{
			HashMap<String, String> ccasMap = ccasList.get(i);
			DEBUG_LOG.info("★FUSV013003SC" + ccasMap);

			String ccasUcwkNo = ccasMap.get(MAP_KEY_SVC_KEI_UCWK_NO);
			String stbKktkSvckeiNo = JFUStrConst.EMPTY; // 機器提供サービス契約番号(STB)

			// 機器提供サービス契約一覧（STB）の件数分Loop
			for (HashMap<String, String> stbMap : stb_all_kei_map.values())
			{
				String stbUcwkNo = stbMap.get(MAP_KEY_SVC_KEI_UCWK_NO);
				if (ccasUcwkNo.equals(stbUcwkNo))
				{
					// 全機器リスト(STB).サービス契約内訳番号と全機器リスト(CCAS).サービス契約内訳番号が同じ場合
					stbKktkSvckeiNo = stbMap.get(MAP_KEY_KKTK_SVC_KEI_NO);
					break;
				}
			}
			// 機器提供サービス契約レコードの設定
			stb_all_kei_map_ccas.put(stbKktkSvckeiNo, ccasMap);
		}
	}

	/**
	 * 機器提供サービス契約一覧（VONU)の加工編集処理（FUSV013004SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC4(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013004SC, MAP_KEY_SC4CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013004SC);
		ArrayList<HashMap<String, String>> vonuList = parentMap.get(MAP_KEY_SC4CBSMSGLIST);

		// 機器提供サービス契約一覧（VONU）の件数分Loop
		for (int i = 0; i < vonuList.size(); i++)
		{
			HashMap<String, String> vonuMap = vonuList.get(i);
			DEBUG_LOG.info("★FUSV013004SC" + vonuMap);

			String vonuStatusFlg = vonuMap.get(MAP_KEY_STATUS_FLG);
			if (JFUStrConst.CD01167_011.equals(vonuStatusFlg) || JFUStrConst.CD01167_012.equals(vonuStatusFlg))
			{
				// 契約状態フラグ(0：追加予約中)の場合、予約あり
				serviceInfoBean.sendMessageString(FUW07501SFConst.BSPASS_DISP_FLG, SET, FLG_1);
			}
		}
	}

	/**
	 * サービス契約一覧の加工編集処理（FUSV013005SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC5(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013005SC, MAP_KEY_SC5CBSMSGLIST))
		{
			// サービス契約にレコードが存在しない場合、契約状態エラー
			DEBUG_LOG.info("----- FUW07501_editDispMapSC5() データ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013005SC);
		HashMap<String, String> keiMap = parentMap.get(MAP_KEY_SC5CBSMSGLIST).get(0);
		DEBUG_LOG.info("★FUSV013005SC" + keiMap);

		String statusFlg = keiMap.get(MAP_KEY_STATUS_FLG);
		String pcrsCd = keiMap.get(MAP_KEY_PCRS_CD);
		String idoRsvFlg = keiMap.get(MAP_KEY_IDO_RSV_FLG);

		if (FLG_0.equals(statusFlg))
		{
			// 契約状態フラグ(0：追加予約中)のためエラー
			DEBUG_LOG.info("----- FUW07501_editDispMapSC5() 追加予約中エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		if (CD00134_A37.equals(pcrsCd))
		{
			// 契約中コースが地デジの場合、契約状態エラー
			DEBUG_LOG.info("----- FUW07501_editDispMapSC5() 地デジ・BSコースエラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		if (FLG_1.equals(idoRsvFlg))
		{
			// 異動レコード有無フラグ(1：有)の場合
			serviceInfoBean.sendMessageString(FUW07501SFConst.KEI_DISP_FLG, SET, FLG_1); // 契約情報表示可否フラグ
		}
	}

	/**
	 * サービス契約内訳一覧の加工編集処理（FUSV013006SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param pcrs_all_kei_map サービス契約内訳契約中レコード
	 */
	private void editDispMapSC6(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, HashMap<String, String>> pcrs_all_kei_map)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013006SC, MAP_KEY_SC6CBSMSGLIST))
		{
			// サービス契約内訳にレコードが存在しないためエラー
			DEBUG_LOG.info("----- FUW07501_editDispMapSC6() データ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013006SC);
		ArrayList<HashMap<String, String>> ucwkList = parentMap.get(MAP_KEY_SC6CBSMSGLIST);

		// サービス契約一覧内訳の件数分Loop
		for (int i = 0; i < ucwkList.size(); i++)
		{
			HashMap<String, String> ucwkMap = ucwkList.get(i);
			DEBUG_LOG.info("★FUSV013006SC" + ucwkMap);

			String svcKeiUcwkNo = ucwkMap.get(MAP_KEY_SVC_KEI_UCWK_NO);
			// サービス契約内訳レコードの設定
			pcrs_all_kei_map.put(svcKeiUcwkNo, ucwkMap);
		}
	}

	/**
	 * 一時支払金一意照会（出張費）の加工編集処理（FUSV013008SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC8(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013008SC, MAP_KEY_SC8CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013008SC);
		HashMap<String, String> childMap = parentMap.get(MAP_KEY_SC8CBSMSGLIST).get(0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_11_LIST, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（交換手数料）の加工編集処理（FUSV013009SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC9(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013009SC, MAP_KEY_SC9CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013009SC);
		HashMap<String, String> childMap = parentMap.get(MAP_KEY_SC9CBSMSGLIST).get(0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_12_LIST, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（追加手数料）の加工編集処理（FUSV013010SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC10(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013010SC, MAP_KEY_SC10CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013010SC);
		HashMap<String, String> childMap = parentMap.get(MAP_KEY_SC10CBSMSGLIST).get(0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_13_LIST, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（BSPT工事費）の加工編集処理（FUSV013011SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC11(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013011SC, MAP_KEY_SC11CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013011SC);
		HashMap<String, String> childMap = parentMap.get(MAP_KEY_SC11CBSMSGLIST).get(0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_14_LIST, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（ＳＴＢ交換契約事務手数料）の加工編集処理（FUSV013016SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 * 
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC16(X31SDataBeanAccess serviceInfoBean,
			final HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013016SC, MAP_KEY_SC11CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013016SC);
		HashMap<String, String> childMap = parentMap.get(MAP_KEY_SC11CBSMSGLIST).get(0);
		serviceInfoBean.sendMessageString(FUW07501SFConst.TMP_PAY_15_LIST, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * マンション物件一意照会の加工編集処理（FUSV013012SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC12(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013012SC, MAP_KEY_SC12CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013012SC);
		HashMap<String, String> childMap = parentMap.get(MAP_KEY_SC12CBSMSGLIST).get(0);
		DEBUG_LOG.info("★FUSV013012SC" + childMap);

		serviceInfoBean.sendMessageString(FUW07501SFConst.AD_FORM_FLG, SET, AD_FORM_FLG_2);
		// マンション物件コードが002の場合下記を設定
		if (JFUStrConst.CD01228_002.equals(childMap.get(MAP_KEY_MANSION_BUKKEN_CD)))
		{
			serviceInfoBean.sendMessageString(FUW07501SFConst.AD_FORM_FLG, SET, AD_FORM_FLG_3);
		}
	}

	/**
	 * 宅内機器一意照会の加工編集処理（FUSV013001CC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param stbid_map       ＳＴＢＩＤマップ
	 */
	private void editDispMapCC01(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, String> stbid_map)
	{
		if (!existsOutPutMap(outputMap, CC_TITLE_FUSV013001CC, MAP_KEY_CC01CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(CC_TITLE_FUSV013001CC);
		ArrayList<HashMap<String, String>> childList = parentMap.get(MAP_KEY_CC01CBSMSGLIST);

		// ループ：宅内機器一意照会明細件数分
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap<String, String> childMap = childList.get(i);
			DEBUG_LOG.info("★FUSV013001CC" + childMap);
			stbid_map.put(childMap.get(MAP_KEY_KIKI_SEIZO_NO), childMap.get(MAP_KEY_STB_ID));
		}
	}

	/**
	 * 料金コース一覧照会の加工処理（FUSV013015SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービス契約番号一覧サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @throws Exception
	 */
	private void editDispMapSC15(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
			throws Exception
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013015SC, MAP_KEY_SC15CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}
		final String TSUIKA = getDispText(KEY_MSKM_NAIYO_2);

		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = outputMap.get(SC_TITLE_FUSV013015SC);
		ArrayList<HashMap<String, String>> childList = parentMap.get(MAP_KEY_SC15CBSMSGLIST);

		HashMap<String, HashMap<String, String>> wkCourseMap = new HashMap<String, HashMap<String, String>>();
		ArrayList<HashMap<String, String>> kikiList = new ArrayList<HashMap<String, String>>();

		// 料金コース一覧照会（料金コース月額料金取得用）の件数分Loop
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap<String, String> childMap = childList.get(i);
			DEBUG_LOG.info("★FUSV013015SC" + childMap);

			String prcGrpCd = childMap.get(MAP_KEY_PRC_GRP_CD);
			String pcrsCd = childMap.get(MAP_KEY_PCRS_CD);
			String kktkSvcCd = childMap.get(MAP_KEY_KKTK_SVC_CD);

			if (JFUStrConst.CD00133_11.equals(prcGrpCd))
			{
				// 料金グループコードが「eo光テレビ(K-CAT)」 の場合
				for (int j = 0; j < PCRS_CNG_LIST.length; j++)
				{
					if (PCRS_CNG_LIST[j].equals(pcrsCd))
					{
						wkCourseMap.put(pcrsCd, childMap);
						break;
					}
				}
			}
			if (JFUStrConst.KK0771_KKTK_SVC_CD_C009.equals(kktkSvcCd))
			{
				// 機器提供サービスコードが「STB」の場合
				kikiList.add(childMap);
			}
		}

		String adFormFlg = serviceInfoBean.sendMessageString(FUW07501SFConst.AD_FORM_FLG, GET);

		// ループ：コースリスト対応配列
		for (int i = 0; i < PCRS_CNG_LIST.length; i++)
		{
			HashMap<String, String> courseMap = wkCourseMap.get(PCRS_CNG_LIST[i]);
			if (courseMap != null)
			{
				// 料金コース情報が取得できている場合
				X31SDataBeanAccess courseInfo = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW07501SFConst.RYOKIN + N_LAST, i);
				String pcrsCd = courseMap.get(MAP_KEY_PCRS_CD);

				if (AD_FORM_FLG_1.equals(adFormFlg) || JFUStrConst.CD00134_A37.equals(pcrsCd) || JFUStrConst.CD00134_A38.equals(pcrsCd)
						|| JFUStrConst.CD00134_A39.equals(pcrsCd))
				{
					// ホーム
					courseInfo.sendMessageString(FUW07501SFConst.PLAN_CD_03, SET, courseMap.get(MAP_KEY_PPLAN_CD));
					courseInfo.sendMessageString(FUW07501SFConst.PLAN_CD_ADD_03, SET, courseMap.get(MAP_KEY_PPLAN_CD_ADD));
					courseInfo.sendMessageString(FUW07501SFConst.PRC_03, SET, courseMap.get(MAP_KEY_PRICE));
					courseInfo.sendMessageString(FUW07501SFConst.PRC_ADD_03, SET, courseMap.get(MAP_KEY_PRICE_ADD));
				}
				else if (AD_FORM_FLG_2.equals(adFormFlg))
				{
					// マンション
					courseInfo.sendMessageString(FUW07501SFConst.PLAN_CD_03, SET, courseMap.get(MAP_KEY_PPLANM_CD));
					courseInfo.sendMessageString(FUW07501SFConst.PLAN_CD_ADD_03, SET, courseMap.get(MAP_KEY_PPLANM_CD_ADD));
					courseInfo.sendMessageString(FUW07501SFConst.PRC_03, SET, courseMap.get(MAP_KEY_PRICEM));
					courseInfo.sendMessageString(FUW07501SFConst.PRC_ADD_03, SET, courseMap.get(MAP_KEY_PRICEM_ADD));
				}
				else
				{
					// メゾン
					courseInfo.sendMessageString(FUW07501SFConst.PLAN_CD_03, SET, courseMap.get(MAP_KEY_PPLANMZ_CD));
					courseInfo.sendMessageString(FUW07501SFConst.PRC_03, SET, courseMap.get(MAP_KEY_PRICEMZ));
				}
				courseInfo.sendMessageString(FUW07501SFConst.CD_03, SET, pcrsCd);
				courseInfo.sendMessageString(FUW07501SFConst.NM_03, SET, courseMap.get(MAP_KEY_PCRS_NM));
				courseInfo.sendMessageString(FUW07501SFConst.PRC_GRP_CD_03, SET, courseMap.get(MAP_KEY_PRC_GRP_CD));
				courseInfo.sendMessageString(FUW07501SFConst.TV_COURSE_GRP_CD_03, SET, courseMap.get(MAP_KEY_TV_COURSE_GRP_CD));
				courseInfo.sendMessageString(FUW07501SFConst.PCRS_SBT_CD_03, SET, courseMap.get(MAP_KEY_PCRS_SBT_CD));
				courseInfo.sendMessageString(FUW07501SFConst.NM_ADD_03, SET, TSUIKA + courseMap.get(MAP_KEY_PCRS_NM));
				courseInfo.sendMessageString(FUW07501SFConst.PPLAN_KOTEI_TANI_NM_03, SET, " " + courseMap.get(MAP_KEY_PPLAN_KOTEI_TANI_NM));
			}
		}

		// 表示順序でソート
		for (int i = 0; i <= kikiList.size(); i++)
		{
			for (int j = i + 1; j < kikiList.size(); j++)
			{
				HashMap<String, String> childMap = kikiList.get(i);
				String disp = childMap.get(MAP_KEY_DSP_JUN);
				HashMap<String, String> childMap2 = kikiList.get(j);
				String disp2 = childMap2.get(MAP_KEY_DSP_JUN);
				if (disp.compareTo(disp2) > 0)
				{
					// dispがdisp2より大きい場合、入れ替え
					kikiList.remove(j);
					kikiList.add(j, childMap);
					kikiList.remove(i);
					kikiList.add(i, childMap2);
				}
			}
		}

		X31SDataBeanAccess kikiInfo = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW07501SFConst.KIKI_LIST);
		kikiInfo.sendMessageString(FUW07501SFConst.CD_LIST_02, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW07501SFConst.NM_LIST_02, ADD, "選択しない");
		kikiInfo.sendMessageString(FUW07501SFConst.HDD_CD_LIST_02, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW07501SFConst.HDD_LIST_02, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW07501SFConst.PPLAN_LIST_02, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW07501SFConst.PRC_LIST_02, ADD, "0");
		kikiInfo.sendMessageString(FUW07501SFConst.GLADE_LIST_02, ADD, MAX_GRADE);
		kikiInfo.sendMessageString(FUW07501SFConst.DISP_LIST_02, ADD, "0");
		kikiInfo.sendMessageString(FUW07501SFConst.TANI_NM_LIST_02, ADD, JFUStrConst.EMPTY);

		// 料金コース一覧照会（機器の月額料金取得用）の件数分Loop
		for (int i = 0; i < kikiList.size(); i++)
		{
			HashMap<String, String> kikiMap = kikiList.get(i);
			kikiInfo.sendMessageString(FUW07501SFConst.CD_LIST_02, ADD, kikiMap.get(MAP_KEY_PCRS_CD));
			kikiInfo.sendMessageString(FUW07501SFConst.NM_LIST_02, ADD, kikiMap.get(MAP_KEY_PCRS_NM));
			kikiInfo.sendMessageString(FUW07501SFConst.HDD_CD_LIST_02, ADD, kikiMap.get(MAP_KEY_HDD_CAPA_CD));
			kikiInfo.sendMessageString(FUW07501SFConst.HDD_LIST_02, ADD, kikiMap.get(MAP_KEY_HDD_CAPA_CD_NM));
			kikiInfo.sendMessageString(FUW07501SFConst.PPLAN_LIST_02, ADD, kikiMap.get(MAP_KEY_PPLAN_CD));
			kikiInfo.sendMessageString(FUW07501SFConst.PRC_LIST_02, ADD, kikiMap.get(MAP_KEY_PRICE));
			kikiInfo.sendMessageString(FUW07501SFConst.GLADE_LIST_02, ADD, kikiMap.get(MAP_KEY_PCRS_GRADE_JUN));
			kikiInfo.sendMessageString(FUW07501SFConst.DISP_LIST_02, ADD, kikiMap.get(MAP_KEY_DSP_JUN));
			kikiInfo.sendMessageString(FUW07501SFConst.TANI_NM_LIST_02, ADD, " " + kikiMap.get(MAP_KEY_PPLAN_KOTEI_TANI_NM));
		}

		serviceInfoBean.sendMessageString(FUW07501SFConst.KIKI_KENSU_CNT, SET, Integer.toString(kikiList.size() + 1));
	}

	/**
	 * 機器提供サービス契約ステータスチェック
	 * 
	 * @param serviceFormBean	サービスフォームBean
	 * @return 処理結果
	 * @throws Exception 
	 * */
	private boolean enableKktkSvcKeiStat(String kktkSvcKeiStat)
	{
		DEBUG_LOG.info("----- FUW07501 Start enableKktkSvcKeiStat -----");

		// 画面で参照可能な機器提供サービス契約ステータスで無ければ、falseを返却
		if (JFUStrConst.CD00056_910.equals(kktkSvcKeiStat) || JFUStrConst.CD00056_920.equals(kktkSvcKeiStat))
		{
			return false;
		}

		DEBUG_LOG.info("----- FUW07501 End enableKktkSvcKeiStat -----");

		return true;
	}
}