/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW12001SFLogic
*   ソースファイル名：FUW12001SFLogic.java
*   作成者          ：富士通
*   日付            ：2016年04月01日
*＜機能概要＞
*    eo光テレビ料金コースSTB追加変更予約確認画面サービスフォームBeanビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v25.00.00   2016/04/01   FJ）横山    新規作成
*
**********************************************************************/
package eo.web.webview.FUW12001SF;

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.CD00134_A85;
import static eo.common.constant.JFUStrConst.CD00134_A86;
import static eo.common.constant.JFUStrConst.CD00134_A87;
import static eo.common.constant.JFUStrConst.ERROR_CODE_0002;
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_FUW12001;
import static eo.web.webview.common.JFUScreenConst.SCREEN_NAME_FUW12001;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
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 FUW12001SFLogic extends JCCWebBusinessLogic
{
	/** 画面表示定義ファイルキー「変更なし」*/
	private static final String KEY_MSKM_NAIYO_HRNKO_NS = "mskm_naiyo_0";
	/** 画面表示定義ファイルキー「変更」*/
	private static final String KEY_MSKM_NAIYO_HENKO_AR = "mskm_naiyo_1";
	/** 画面表示定義ファイルキー「追加」*/
	private static final String KEY_MSKM_NAIYO_TSUIKA = "mskm_naiyo_2";

	/** 画面表示定義ファイルキー「(追加)」*/
	private static final String KEY_TSUIKA = "tsuika";

	/** フラグ「0:無、否、非表示」*/
	private static final String FLG_NS = "0";
	/** フラグ「1:有、要、表示」*/
	private static final String FLG_AR = "1";

	/** ＳＴＢＩＤ検索有無フラグ「1:検索する」*/
	private static final String SC_STBID_FLG_SEARCH = "1";

	/** 異動レコード有無フラグ「0:レコードなし」*/
	private static final String IDO_RSV_FLG_RCD_NS = "0";

	/** 住居フラグ　１：ホーム */
	private static final String AD_FORM_FLG_HOME = "1";
	/** 住居フラグ　２：マンション */
	private static final String AD_FORM_FLG_MS = "2";
	/** 住居フラグ　３：メゾン */
	private static final String AD_FORM_FLG_MZ = "3";

	/** 契約状態 「0:STB契約中のみ」*/
	private static final String STATUS_CHG_ADD_NS = "0";
	/** 契約状態 「1:STB変更予約あり」*/
	private static final String STATUS_CHG_AR = "1";
	/** 契約状態 「2:STB新規追加」*/
	private static final String STATUS_ADD_AR = "2";

	/** 契約情報リスト 内訳契約状態：0：契約中 */
	private static final String UCWK_STATUS_KEI = "0";
	/** 契約情報リスト 内訳契約状態：1：予約中 */
	private static final String UCWK_STATUS_RSV = "1";
	/** 契約情報リスト 内訳契約状態：2：なし */
	private static final String UCWK_STATUS_NS = "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コース
	 * 9：スマートベーシック 10：スマートプレミアム 11：スマートコンパクト */
	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,
		CD00134_A86, CD00134_A87, CD00134_A85};

	/** 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_FUSV0130_1 = "FUSV0130_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_IDO_NEW_PCRS_CD = "ido_new_pcrs_cd";
	/** Mapキー：新料金プランコード */
	private static final String MAP_KEY_IDO_NEW_PPLAN_CD = "ido_new_pplan_cd";
	/** 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_FUSV0130_1);

		// 現顧客契約情報の最新化
		JFUWebCommon.refreshGenCustKei(this);

		// サービスフォームBean初期値設定
		initSFBean(serviceInfoBean, commonInfoBean);

		// サービス処理結果マップ
		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_FUW12001);
		commonInfoBean.sendMessageString(NEXT_SCREEN_NAME, SET, SCREEN_NAME_FUW12001);

		DEBUG_LOG.debug("★★★★★eo光テレビ料金コースSTB追加変更予約確認のビューロジック処理(INIT) END★★★★★");
		return true;
	}

	/**
	 * サービスフォームBean初期値設定
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param commonInfoBean 共有フォームBean
	 */
	private void initSFBean(X31SDataBeanAccess serviceInfoBean,X31SDataBeanAccess commonInfoBean)
	{
		// 共有フォームBean.ＳＳＯ情報
		X31SDataBeanAccess ssoInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SSO_INFO).getDataBean(0);
		// 共有フォームBean.サービス契約回線内訳情報
		X31SDataBeanAccess svcKeiKaisenUcwkInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_KAISEN_UCWK_INFO).getDataBean(0);
		// 共有フォームBean.機器提供サービス契約情報
		X31SDataBeanAccessArray kktkSvcKeiList = commonInfoBean.getDataBeanArray(JFUWebCommon.KKTK_SVC_KEI_INFO);

		// フラグ初期化
		serviceInfoBean.sendMessageString(FUW12001SFConst.AD_FORM_FLG, SET, AD_FORM_FLG_HOME);
		serviceInfoBean.sendMessageString(FUW12001SFConst.SC_STBID_FLG, SET, SC_STBID_FLG_SEARCH);

		// ＳＹＳＩＤ
		copyValue(ssoInfo, serviceInfoBean, CommonInfoCFConst.SYSID_21, FUW12001SFConst.SYSID);
		// サービス契約番号
		copyValue(ssoInfo, serviceInfoBean, CommonInfoCFConst.SVC_KEI_NO_21, FUW12001SFConst.SVC_KEI_NO);
		// Ｃ＿ＣＡＳカードＮｏ
		String ccasNo = ssoInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_21, GET);
		serviceInfoBean.sendMessageString(FUW12001SFConst.C_CAS_NO, SET, ccasNo);
		// Ｃ＿ＣＡＳカードＮｏ＿表示用
		serviceInfoBean.sendMessageString(FUW12001SFConst.C_CAS_NO_DISP, SET, editKikiSeizoNo(ccasNo));
		// マンション物件番号
		copyValue(svcKeiKaisenUcwkInfo, serviceInfoBean, CommonInfoCFConst.MANSION_BUKKEN_NO_26, FUW12001SFConst.MANSION_BUKKEN_NO);

		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 (!JFUWebCommon.isNull(kikiSeizoNo))
				{
					X31SDataBeanAccess stbidInfo =
							JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW12001SFConst.STBID_GET_LIST + N_LAST, stbCnt);
					// ＳＴＢＩＤ取得用リスト[n].機器製造番号（ＳＴＢ）
					stbidInfo.sendMessageString(FUW12001SFConst.KIKI_SEIZO_NO_STB_01, 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(FUW12001SFConst.KKTK_SVC_KEI_NO_VONU, SET, vonuKktkSvcKeiNo); // 機器提供サービス契約番号（ＶＯＮＵ）
		// 宅内機器型式コード（ＶＯＮＵ）
		serviceInfoBean.sendMessageString(FUW12001SFConst.TAKNKIKI_MODEL_CD_VONU, 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
	{
		// 機器提供サービス契約レコード
		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>>();
		// 料金コース名マップ
		HashMap<String, String> pcrs_nm_map = new HashMap<String, String>();
		// 料金マップ
		HashMap<String, String> price_map = new HashMap<String, String>();
		// 料金単位名マップ
		HashMap<String, String> tani_map = new HashMap<String, String>();
		// 機器提供サービス契約レコード(STB)
		HashMap<String, HashMap<String, String>> stb_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>();

		// サービス処理結果マップの編集処理（料金コース）
		editDispMapSC5Course(serviceInfoBean, outputMap);
		editDispMapSC3Course(serviceInfoBean, outputMap, stb_all_kei_map_ccas);
		editDispMapSC12Course(serviceInfoBean, outputMap);
		editDispMapSC15Course(serviceInfoBean, outputMap, pcrs_nm_map, price_map, tani_map);
		editDispMapSC6Course(serviceInfoBean, outputMap, stb_all_kei_map_ccas, pcrs_all_kei_map);
		// サービス処理結果マップの編集処理（STB）
		editDispMapSC1STB(serviceInfoBean, outputMap, stb_all_kei_map, stb_no_list);
		editDispMapSC3STB(serviceInfoBean, outputMap, stb_all_kei_map, stb_all_kei_map_ccas);
		editDispMapSC4STB(serviceInfoBean, outputMap);
		editDispMapSC12STB(serviceInfoBean, outputMap);
		editDispMapSC15STB(serviceInfoBean, outputMap);
		editDispMapSC5STB(serviceInfoBean, outputMap);
		editDispMapSC6STB(serviceInfoBean, outputMap, pcrs_all_kei_map);
		editDispMapSC8STB(serviceInfoBean, outputMap);
		editDispMapSC9STB(serviceInfoBean, outputMap);
		editDispMapSC10STB(serviceInfoBean, outputMap);
		editDispMapSC11STB(serviceInfoBean, outputMap);
		editDispMapCC01STB(serviceInfoBean, outputMap, stbid_map);
		editDispMapSC16STB(serviceInfoBean, outputMap);
		editDispMapSC1STB(serviceInfoBean, outputMap, stb_all_kei_map, stb_no_list);

		// STB台数チェック
		String adFormFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.AD_FORM_FLG, GET);
		if (!AD_FORM_FLG_MZ.equals(adFormFlg) && stb_no_list.size() > KEI_LIMIT_CNT)
		{
			// ホーム・マンションの場合、機器提供サービス契約が6件以上存在するためエラー
			DEBUG_LOG.info("----- FUW12001_setSFBean() 機器提供サービス契約件数超過エラー[メゾン以外] ----- 住居フラグ：" + adFormFlg);
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		else if (AD_FORM_FLG_MZ.equals(adFormFlg) && stb_no_list.size() > 1)
		{
			// メゾンの場合、機器提供サービス契約が2件以上存在するためエラー
			DEBUG_LOG.info("----- FUW12001_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);

		// 表示項目の設定
		setDispInfo(serviceInfoBean);

		// 表示情報有無チェック
		String nowPcrsDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PCRS_DISP_KH_FLG, GET);
		String newPcrsDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_DISP_KH_FLG, GET);
		String keiDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.KEI_INFO_DISP_FLG, GET);
		String bspassDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.BSPASS_DISP_FLG, GET);
		String stbDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.STB_RSV_DISP_FLG, GET);
		if (FLG_NS.equals(nowPcrsDispFlg) && FLG_NS.equals(newPcrsDispFlg) && 
				FLG_NS.equals(keiDispFlg) && FLG_NS.equals(bspassDispFlg) && FLG_NS.equals(stbDispFlg))
		{
			// 現在の料金コース表示：否、変更後の料金コース表示：否、
			// 契約情報表示：否、ＢＳパススルー表示：否、ＳＴＢ予約表示可否フラグ：否の場合エラー
			DEBUG_LOG.info("----- FUW12001_setSFBean() 表示情報なしエラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		// 料金情報の設定
		setRyokinInfo(serviceInfoBean, pcrs_nm_map, price_map, tani_map);

	}

	/**
	 * 契約情報リストの設定
	 * <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(FUW12001SFConst.KEI_LIST).clearArray();
		boolean stbYoyakuFlg = false;
		boolean takuhaiKokanFlg = false;
		final String HENKO_NASHI = getDispText(KEY_MSKM_NAIYO_HRNKO_NS);
		final String HENKO = getDispText(KEY_MSKM_NAIYO_HENKO_AR);
		final String TSUIKA = getDispText(KEY_MSKM_NAIYO_TSUIKA);

		// ループ：機器提供サービス契約番号格納リスト(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, FUW12001SFConst.KEI_LIST + N_LAST, i);
			keiInfo.sendMessageString(FUW12001SFConst.KEI_NO_02, 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(FUW12001SFConst.UCWK_PCRS_NM_02, SET, pcrsAllKeiMap.get(MAP_KEY_PCRS_NM)); // 内訳料金コース名
			keiInfo.sendMessageString(FUW12001SFConst.UCWK_PCRS_CD_02, SET, pcrsAllKeiMap.get(MAP_KEY_PCRS_CD)); // 内訳料金コースコード
			keiInfo.sendMessageString(FUW12001SFConst.UCWK_PPLAN_CD_02, SET, pcrsAllKeiMap.get(MAP_KEY_PPLAN_CD)); // 内訳料金プランコード
			keiInfo.sendMessageString(FUW12001SFConst.UCWK_STATUS_02, SET, UCWK_STATUS_KEI); // 内訳契約状態
			
			if (FLG_NS.equals(ucwkStatusFlg))
			{
				// 内訳契約状態フラグ(0：追加予約中)の場合
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_PCRS_NM_02, SET, TSUIKA + pcrsAllKeiMap.get(MAP_KEY_PCRS_NM)); // 内訳料金コース名
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_ADD_PCRS_NM_02, SET, TSUIKA + pcrsAllKeiMap.get(MAP_KEY_PCRS_NM)); // 内訳追加料金コース名
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_STATUS_02, SET, UCWK_STATUS_NS);
			}
			if (JFUStrConst.CD01167_003.equals(ucwkIdoRsvDtlCd))
			{
				// 異動予約詳細コード(003:コース変更)の場合
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_PCRS_NM_02, SET, pcrsAllKeiMap.get(IDO_NEW_PCRS_NM));
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_PCRS_CD_02, SET, pcrsAllKeiMap.get(IDO_NEW_PCRS_CD));
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_PPLAN_CD_02, SET, pcrsAllKeiMap.get(IDO_NEW_PPLAN_CD));
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_STATUS_02, SET, UCWK_STATUS_RSV);
			}
			else if (JFUStrConst.CD01167_005.equals(ucwkIdoRsvDtlCd) || JFUStrConst.CD01167_006.equals(ucwkIdoRsvDtlCd)
					|| JFUStrConst.CD01167_007.equals(ucwkIdoRsvDtlCd))
			{
				// 異動予約詳細コード(005:サービス休止、006:サービス休止解除、007:サービス解約)の場合
				keiInfo.sendMessageString(FUW12001SFConst.UCWK_STATUS_02, SET, UCWK_STATUS_RSV);
			}

			// 機器情報の設定
			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(FUW12001SFConst.C_CAS_NO_DISP_02, SET, ccasDisp); // Ｃ＿ＣＡＳカードＮｏ
			if (!JFUWebCommon.isNull(kikiSeizoNo))
			{
				keiInfo.sendMessageString(FUW12001SFConst.STB_ID_02, SET, stbid_map.get(kikiSeizoNo)); // ＳＴＢＩＤ
			}

			keiInfo.sendMessageString(FUW12001SFConst.MSKM_YMD_02, SET, stbAllKeiMap.get(MAP_KEY_MSKM_YMD)); // お申し込み日
			keiInfo.sendMessageString(FUW12001SFConst.HDD_CAPA_NM_02, SET, stbAllKeiMap.get(MAP_KEY_HDD_CAPA_CD_NM)); // ＨＤＤ容量コード名称
			keiInfo.sendMessageString(FUW12001SFConst.HDD_CAPA_CD_02, SET, stbAllKeiMap.get(MAP_KEY_HDD_CAPA_CD)); // ＨＤＤ容量コード
			keiInfo.sendMessageString(FUW12001SFConst.KIKI_PCRS_NM_02, SET, stbAllKeiMap.get(MAP_KEY_PCRS_CD_NM)); // 機器料金コース名
			keiInfo.sendMessageString(FUW12001SFConst.KIKI_PCRS_CD_02, SET, stbAllKeiMap.get(MAP_KEY_PCRS_CD)); // 機器料金コースコード
			keiInfo.sendMessageString(FUW12001SFConst.KIKI_PPLAN_CD_02, SET, stbAllKeiMap.get(MAP_KEY_PPLAN_CD)); // 機器料金プランコード
			keiInfo.sendMessageString(FUW12001SFConst.MSKM_NAIYO_02, SET, HENKO_NASHI); // お申し込み内容
			keiInfo.sendMessageString(FUW12001SFConst.KIKI_STATUS_02, SET, STATUS_CHG_ADD_NS); // 機器契約状態

			if (FLG_NS.equals(kikiStatusFlg))
			{
				// 機器提供サービス契約が追加予約中の場合
				keiInfo.sendMessageString(FUW12001SFConst.MSKM_NAIYO_02, SET, TSUIKA);
				keiInfo.sendMessageString(FUW12001SFConst.KIKI_STATUS_02, SET, STATUS_ADD_AR);
				stbYoyakuFlg = true;
			}
			else if (JFUStrConst.CD01167_011.equals(kikiStatusFlg) || JFUStrConst.CD01167_029.equals(kikiStatusFlg))
			{
				// 機器提供サービス契約のレコードがコース変更予約中の場合
				keiInfo.sendMessageString(FUW12001SFConst.MSKM_YMD_02, SET, stbAllKeiMap.get(MAP_KEY_RSV_MSKM_YMD));
				keiInfo.sendMessageString(FUW12001SFConst.HDD_CAPA_NM_02, SET, stbAllKeiMap.get(MAP_KEY_RSV_HDD_CAPA_CD_NM));
				keiInfo.sendMessageString(FUW12001SFConst.HDD_CAPA_CD_02, SET, stbAllKeiMap.get(MAP_KEY_RSV_HDD_CAPA_CD));
				keiInfo.sendMessageString(FUW12001SFConst.KIKI_PCRS_NM_02, SET, stbAllKeiMap.get(MAP_KEY_RSV_PCRS_CD_NM));
				keiInfo.sendMessageString(FUW12001SFConst.KIKI_PCRS_CD_02, SET, stbAllKeiMap.get(MAP_KEY_RSV_PCRS_CD));
				keiInfo.sendMessageString(FUW12001SFConst.KIKI_PPLAN_CD_02, SET, stbAllKeiMap.get(MAP_KEY_RSV_PPLAN_CD));
				keiInfo.sendMessageString(FUW12001SFConst.MSKM_NAIYO_02, SET, HENKO);
				keiInfo.sendMessageString(FUW12001SFConst.KIKI_STATUS_02, SET, STATUS_CHG_AR);
				stbYoyakuFlg = true;
			
				// 宅配の予約中
				if (JFUStrConst.CD01167_029.equals(kikiStatusFlg)) {
					takuhaiKokanFlg = true;
				}
			}
			else if (!FLG_AR.equals(kikiStatusFlg))
			{
				// 機器提供サービス契約がコース変更以外の予約中
				keiInfo.sendMessageString(FUW12001SFConst.MSKM_NAIYO_02, SET, HENKO);
				keiInfo.sendMessageString(FUW12001SFConst.KIKI_STATUS_02, SET, STATUS_CHG_AR);
				stbYoyakuFlg = true;
			}
			i++;
		}
		if (stbYoyakuFlg)
		{
			// 1件以上の機器予約が存在する場合
			serviceInfoBean.sendMessageString(FUW12001SFConst.STB_RSV_DISP_FLG, SET, FLG_AR); // ＳＴＢ表示可否フラグ

			// 宅配交換予約が存在する場合
			if (takuhaiKokanFlg)
			{
				serviceInfoBean.sendMessageString(FUW12001SFConst.TAKUHAI_CHG_FLG, SET, FLG_AR); // 宅配交換フラグ
			}
		}
	}

	/**
	 * 基本コースのレコード番号取得処理
	 * <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(FUW12001SFConst.UCWK_PPLAN_CD_02, 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(FUW12001SFConst.UCWK_PCRS_CD_02, 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
	 * @param pcrs_nm_map 料金コース名マップ
	 * @param price_map 料金マップ
	 * @param tani_map 料金単位名マップ
	 * @throws Exception
	 */
	private void setRyokinInfo(X31SDataBeanAccess serviceInfoBean, HashMap<String, String> pcrs_nm_map,
			HashMap<String, String> price_map, HashMap<String, String> tani_map) throws Exception
	{
		// 現在の料金コースの設定
		String nowPcrsCd = serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PCRS_CD, GET);
		String nowPplanCd = serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PPLAN_CD, GET);
		if (!JFUWebCommon.isNull(nowPplanCd))
		{
			String nowPcrsNm = pcrs_nm_map.get(nowPplanCd);
			// 税込金額
			String nowPriceZeikomi = formatNumber(price_map.get(nowPplanCd));
			String nowPriceTani = tani_map.get(nowPcrsCd);
			serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PCRS_NM, SET, nowPcrsNm);
			// 税込金額を設定
			serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PRICE, SET, nowPriceZeikomi);
			serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PRICE_TANI, SET, nowPriceTani);
		}
		// 変更後の料金コースの設定
		String newPcrsCd = serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_CD, GET);
		String newPplanCd = serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PPLAN_CD, GET);
		if (!JFUWebCommon.isNull(newPplanCd))
		{
			String newPcrsNm = pcrs_nm_map.get(newPplanCd);
			// 税込金額
			String newPriceZeikomi = formatNumber(price_map.get(newPplanCd));
			String newPriceTani = tani_map.get(newPcrsCd);
			serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_NM, SET, newPcrsNm);
			serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PRICE, SET, newPriceZeikomi);
			serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PRICE_TANI, SET, newPriceTani);
		}

		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW12001SFConst.KEI_LIST);
		X31SDataBeanAccessArray ryokinList = serviceInfoBean.getDataBeanArray(FUW12001SFConst.CRS_BT_PRC_LIST);
		// 基本コースのレコード取得
		String mainChkFlg = getMainCnt(keiList);

		X31SDataBeanAccessArray kikiList = serviceInfoBean.getDataBeanArray(FUW12001SFConst.KIKI_LIST);
		X31SDataBeanAccess kikiInfo = kikiList.getDataBean(0);

		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(FUW12001SFConst.UCWK_PPLAN_CD_02, GET);
			// ループ：料金リスト件数分
			for (int j = 0; j < ryokinList.getCount(); j++)
			{
				X31SDataBeanAccess ryokinInfo = ryokinList.getDataBean(j);
				coursePriceTani = ryokinInfo.sendMessageString(FUW12001SFConst.PPLAN_KOTEI_TANI_NM_04, GET);
				String pplan = ryokinInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_BASE_04, GET);
				String pplanCdAdd = ryokinInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_ADD_04, GET);

				if (ucwkPplanCd.equals(pplan) || ucwkPplanCd.equals(pplanCdAdd))
				{
					// 基本プランでない場合、値引き額を設定
					// （税込金額）
					coursePrice = 
							ryokinInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_BASE_04, GET);
					if (i != Integer.parseInt(mainChkFlg))
					{
						// 追加プランの場合
						// （税込金額）
						coursePrice = 
								ryokinInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_ADD_04, GET);
					}
					// コース料金合計の加算
					coursePriceSum += Integer.parseInt(coursePrice);
					break;
				}
			}
			// 税抜き金額を設定
			keiInfo.sendMessageString(FUW12001SFConst.CRS_PRC_02, SET, formatNumber(coursePrice) + coursePriceTani); // 契約情報リスト.コース料金

			// STB料金の設定
			String stbPrice = "0";
			String kikiPplanCd = keiInfo.sendMessageString(FUW12001SFConst.KIKI_PPLAN_CD_02, GET);
			int kikiCnt = Integer.parseInt(serviceInfoBean.sendMessageString(FUW12001SFConst.KIKI_KENSU_CNT, GET));
			// ループ：機器リスト件数分
			for (int j = 0; j < kikiCnt; j++)
			{
				stbPriceTani = kikiInfo.sendMessageString(FUW12001SFConst.PPLAN_TANI_NM_LIST_03, GET, j);
				String pplan = kikiInfo.sendMessageString(FUW12001SFConst.PPLAN_LIST_03, GET, j);
				if (kikiPplanCd.equals(pplan))
				{
					// 契約リスト.料金プランコードと機器リスト.料金プランコードが同じ場合
					// （税込金額）
					stbPrice = kikiInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_LIST_03, GET, j);
					// STB料金合計の加算
					stbPriceSum += Integer.parseInt(stbPrice);
					break;
				}
			}
			keiInfo.sendMessageString(FUW12001SFConst.STB_PRC_02, SET, formatNumber(stbPrice) + stbPriceTani); // 契約情報リスト.ＳＴＢ料金

			// STB交換台数、STB追加台数の設定
			String status = keiInfo.sendMessageString(FUW12001SFConst.KIKI_STATUS_02, GET);
			if (STATUS_ADD_AR.equals(status))
			{
				addStbCnt++;
			}
			else if (STATUS_CHG_AR.equals(status))
			{
				cngStbCnt++;
			}
		}

		String formatStbPriceSum = formatNumber(Integer.toString(stbPriceSum)) + stbPriceTani;
		String formatCoursePriceSum = formatNumber(Integer.toString(coursePriceSum)) + coursePriceTani;

		// STB料金合計
		serviceInfoBean.sendMessageString(FUW12001SFConst.STB_PRC_SUM, SET, formatStbPriceSum);
		// コース料金合計
		serviceInfoBean.sendMessageString(FUW12001SFConst.CRS_PRC_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(
								serviceInfoBean.sendMessageString(FUW12001SFConst.TMP_PAY_SHUCHO_PRC, GET));
		int cngPrice =
				Integer
						.parseInt(
								serviceInfoBean.sendMessageString(FUW12001SFConst.TMP_PAY_EXCHG_PRC, GET));
		int addPrice =
				Integer
						.parseInt(
								serviceInfoBean.sendMessageString(FUW12001SFConst.TMP_PAY_ADD_PRC, GET));

		// 工事費用 = (STB交換台数 * 交換手数料) + (STB追加台数 * 追加手数料) + 出張費
		int kojiPrice = (cngStbCnt * cngPrice) + (addStbCnt * addPrice) + shutchoPrice;

		if (FLG_AR.equals(serviceInfoBean.sendMessageString(FUW12001SFConst.BSPASS_DISP_FLG, GET)))
		{
			// BSパススルー表示ONの場合
			// 税抜金額を算出
			int bsptPrice =
					Integer.parseInt( 
							serviceInfoBean.sendMessageString(FUW12001SFConst.TMP_PAY_BSPT_KOJI_PRC, GET));
			// 工事費用 = 工事費用 + BSパススルー工事費
			kojiPrice += bsptPrice;
		}

		// 宅配交換の場合
		if (FLG_AR.equals(serviceInfoBean.sendMessageString(FUW12001SFConst.TAKUHAI_CHG_FLG, GET)))
		{
			int kokanPrice =
					Integer.parseInt(
							serviceInfoBean.sendMessageString(FUW12001SFConst.TMP_PAY_STB_EXCHG_PRC, GET));
			kojiPrice = cngStbCnt * kokanPrice;
		}

		serviceInfoBean.sendMessageString(FUW12001SFConst.KOJI_PRC_SUM, SET, formatNumber(Integer.toString(kojiPrice)) + " 円");
	}

	/**
	 * 表示項目を設定します
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 */
	private void setDispInfo(X31SDataBeanAccess serviceInfoBean)
	{
		// コース変更後料金表示フラグ
		String newPcrsDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_DISP_KH_FLG, GET);
		// BSパススルーのお申し込み
		String bspassDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.BSPASS_DISP_FLG, GET);
		// eo光テレビチューナー(STB)予約内容
		String stbDispFlg = serviceInfoBean.sendMessageString(FUW12001SFConst.STB_RSV_DISP_FLG, GET);

		// 契約情報表示可否フラグ
		if (FLG_AR.equals(newPcrsDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW12001SFConst.KEI_INFO_DISP_FLG, SET, FLG_AR);
		}
		// 変更後のeo光テレビチューナー（STB）利用料
		if (FLG_AR.equals(stbDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_STB_PRC_DISP_FLG, SET, FLG_AR);
		}
		// お申し込み後のコース料金
		if (FLG_AR.equals(stbDispFlg) || FLG_AR.equals(newPcrsDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_CRS_PRC_DISP_FLG, SET, FLG_AR);
		}
		// ご契約内容変更に伴う工事費用
		if (FLG_AR.equals(stbDispFlg) || FLG_AR.equals(bspassDispFlg))
		{
			serviceInfoBean.sendMessageString(FUW12001SFConst.KOJI_PRC_DISP_FLG, SET, FLG_AR);
		}
	}

	/**
	 * サービス呼出処理(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_FUW12001);
		mapper.setFUSV013016SC(beanArray, inputMap, FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務エラーを再throw
			DEBUG_LOG.info("----- FUW12001_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_FUW12001, textId);
	}

	/**
	 * C-CASカード番号のハイフン処理
	 * <br>
	 * @param arg0 	C-CASカード番号
	 * @return String 編集されたC-CASカード番号
	 */
	private static String editKikiSeizoNo(String arg0)
	{
		if (JFUWebCommon.isNull(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);
	}


	/**
	 * サービス契約一覧の加工編集処理（FUSV013005SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC5Course(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		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);

		if (STATUS_CHG_ADD_NS.equals(statusFlg))
		{
			// 契約状態フラグ(0：追加予約中)のためエラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC5Course() 追加予約中エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		if (CD00134_A37.equals(pcrsCd))
		{
			// 契約中コースが地デジの場合、契約状態エラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC5Course() 地デジ・BSコースエラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
	}

	/**
	 * 機器提供サービス契約一覧（CCAS)の加工編集処理（FUSV013003SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param stb_all_kei_map_ccas 機器提供サービス契約中レコード(CCAS)
	 */
	private void editDispMapSC3Course(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, HashMap<String, String>> stb_all_kei_map_ccas)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013003SC, MAP_KEY_SC3CBSMSGLIST))
		{
			// 機器提供サービス契約が存在しない場合、契約状態エラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC3Course() データ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		String ssoCcasNo = serviceInfoBean.sendMessageString(FUW12001SFConst.C_CAS_NO, GET);

		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);

			if (ssoCcasNo.equals(ccasMap.get(MAP_KIKI_SEIZO_NO)))
			{
				// SSO.CCASカードNoと機器提供サービス契約.CCASカードNoが同じ場合

				String kktkSvckeiNo = ccasMap.get(MAP_KEY_KKTK_SVC_KEI_NO);
				// 機器提供サービス契約レコードの設定
				stb_all_kei_map_ccas.put(kktkSvckeiNo, ccasMap);
				break;
			}
		}

		if (stb_all_kei_map_ccas.isEmpty())
		{
			// サービスフォームBean.CCASカードNoに紐づく機器提供サービス契約が存在しない場合、契約状態エラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC3Course() SSO.CCASカードNoに紐づくデータ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
	}

	/**
	 * マンション物件一意照会の加工編集処理（FUSV013012SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC12Course(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);

		String adFormFlg = AD_FORM_FLG_MS;
		// マンション物件コードが002の場合下記を設定
		if (JFUStrConst.CD01228_002.equals(childMap.get(MAP_KEY_MANSION_BUKKEN_CD)))
		{
			adFormFlg = AD_FORM_FLG_MZ;
		}
		serviceInfoBean.sendMessageString(FUW12001SFConst.AD_FORM_FLG, SET, adFormFlg);
	}

	/**
	 * 料金コース一覧照会の加工処理（FUSV013015SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービス契約番号一覧サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param pcrs_nm_map     料金コース名マップ
	 * @param price_map       料金マップ
	 * @param tani_map        料金単位名マップ
	 * @throws Exception
	 */
	private void editDispMapSC15Course(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, String> pcrs_nm_map, HashMap<String, String> price_map, HashMap<String, String> tani_map) throws Exception
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013015SC, MAP_KEY_SC15CBSMSGLIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			DEBUG_LOG.info("----- FUW12001editDispMapSC15Course() データ未存在エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}

		final String TSUIKA = getDispText(KEY_TSUIKA);

		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>>();

		// 料金コース一覧照会（料金コース月額料金取得用）の件数分Loop
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap<String, String> childMap = childList.get(i);
			String prcGrpCd = childMap.get(MAP_KEY_PRC_GRP_CD);
			String pcrsCd = childMap.get(MAP_KEY_PCRS_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;
					}
				}
			}
		}

		// ループ：コースリスト対応配列
		for (int i = 0; i < PCRS_CNG_LIST.length; i++)
		{
			HashMap<String, String> courseMap = wkCourseMap.get(PCRS_CNG_LIST[i]);
			if (courseMap != null)
			{
				// 料金単位名
				tani_map.put(courseMap.get(MAP_KEY_PCRS_CD), " " + courseMap.get(MAP_KEY_PPLAN_KOTEI_TANI_NM));

				// ホーム
				String pplanCd = courseMap.get(MAP_KEY_PPLAN_CD);
				if (!JFUWebCommon.isNull(pplanCd))
				{
					price_map.put(pplanCd, courseMap.get(MAP_KEY_PRICE));
					pcrs_nm_map.put(pplanCd, courseMap.get(MAP_KEY_PCRS_NM));
				}
				// ホーム(追加)
				String pplanCdAdd = courseMap.get(MAP_KEY_PPLAN_CD_ADD);
				if (!JFUWebCommon.isNull(pplanCdAdd))
				{
					price_map.put(pplanCdAdd, courseMap.get(MAP_KEY_PRICE_ADD));
					pcrs_nm_map.put(pplanCdAdd, TSUIKA + courseMap.get(MAP_KEY_PCRS_NM));
				}
				// マンション
				String pplanmCd = courseMap.get(MAP_KEY_PPLANM_CD);
				if (!JFUWebCommon.isNull(pplanmCd))
				{
					price_map.put(pplanmCd, courseMap.get(MAP_KEY_PRICEM));
					pcrs_nm_map.put(pplanmCd, courseMap.get(MAP_KEY_PCRS_NM));
				}
				// マンション(追加)
				String pplanmCdAdd = courseMap.get(MAP_KEY_PPLANM_CD_ADD);
				if (!JFUWebCommon.isNull(pplanmCdAdd))
				{
					price_map.put(pplanmCdAdd, courseMap.get(MAP_KEY_PRICEM_ADD));
					pcrs_nm_map.put(pplanmCdAdd, TSUIKA + courseMap.get(MAP_KEY_PCRS_NM));
				}
				// メゾン
				String pplanmzCd = courseMap.get(MAP_KEY_PPLANMZ_CD);
				if (!JFUWebCommon.isNull(pplanmzCd))
				{
					price_map.put(pplanmzCd, courseMap.get(MAP_KEY_PRICEMZ));
					pcrs_nm_map.put(pplanmzCd, courseMap.get(MAP_KEY_PCRS_NM));
				}
			}
		}
		DEBUG_LOG.info("★FUSV013015SC_料金コース名マップ" + pcrs_nm_map);
		DEBUG_LOG.info("★FUSV013015SC_料金マップ" + price_map);
		DEBUG_LOG.info("★FUSV013015SC_料金単位マップ" + tani_map);
	}

	/**
	 * サービス契約内訳一覧の加工編集処理（FUSV013006SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param stb_all_kei_map_ccas 機器提供サービス契約中レコード(CCAS)
	 * @param pcrs_all_kei_map サービス契約内訳契約中レコード
	 */
	private void editDispMapSC6Course(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, HashMap<String, String>> stb_all_kei_map_ccas, HashMap<String, HashMap<String, String>> pcrs_all_kei_map)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013006SC, MAP_KEY_SC6CBSMSGLIST))
		{
			// サービス契約内訳にレコードが存在しないためエラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC6Course() データ未存在エラー -----");
			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);

			// 機器提供サービス契約一覧（CCAS）の件数分Loop
			for (HashMap<String, String> ccasMap : stb_all_kei_map_ccas.values())
			{
				if (svcKeiUcwkNo.equals(ccasMap.get(MAP_KEY_SVC_KEI_UCWK_NO)))
				{
					// サービス契約内訳.サービス契約内訳番号とCCAS.サービス契約内訳番号が異なる場合
					String idoRsvFlg = ucwkMap.get(MAP_KEY_IDO_RSV_FLG);
					if (!IDO_RSV_FLG_RCD_NS.equals(idoRsvFlg))
					{
						serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PCRS_CD, SET, ucwkMap.get(MAP_KEY_PCRS_CD));
						serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PPLAN_CD, SET, ucwkMap.get(MAP_KEY_PPLAN_CD));
						serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_CD, SET, ucwkMap.get(MAP_KEY_IDO_NEW_PCRS_CD));
						serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PPLAN_CD, SET, ucwkMap.get(MAP_KEY_IDO_NEW_PPLAN_CD));

						//申込内容表示可否フラグ
						serviceInfoBean.sendMessageString(FUW12001SFConst.MSKM_NAIYO_DISP_KH_FLG, SET, FLG_AR);
						//現在の料金コース表示可否フラグ
						serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PCRS_DISP_KH_FLG, SET, FLG_AR);
						//変更後の料金コース表示可否フラグ
						serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_DISP_KH_FLG, SET, FLG_AR);

						// サービス契約内訳レコードの設定
						pcrs_all_kei_map.put(svcKeiUcwkNo, ucwkMap);
						break;
					}
				}
			}
		}

		if (pcrs_all_kei_map.isEmpty())
		{
			//コース変更が無い場合
			//申込内容表示可否フラグ
			serviceInfoBean.sendMessageString(FUW12001SFConst.MSKM_NAIYO_DISP_KH_FLG, SET, FLG_NS);
			//現在の料金コース表示可否フラグ
			serviceInfoBean.sendMessageString(FUW12001SFConst.NOW_PCRS_DISP_KH_FLG, SET, FLG_NS);
			//変更後の料金コース表示可否フラグ
			serviceInfoBean.sendMessageString(FUW12001SFConst.NEW_PCRS_DISP_KH_FLG, SET, FLG_NS);
		}
	}

	/**
	 * 機器提供サービス契約一覧（STB)の加工編集処理（FUSV013001SC）
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap	 サービス検索結果マップ
	 * @param stb_all_kei_map 機器提供サービス契約中レコード(STB)
	 * @param stb_no_list 機器提供サービス契約番号格納リスト
	 */
	private void editDispMapSC1STB(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("----- FUW12001_editDispMapSC1STB() データ未存在エラー -----");
			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 editDispMapSC3STB(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("----- FUW12001_editDispMapSC3STB() データ未存在エラー -----");
			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 editDispMapSC4STB(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))
			{
				// 契約状態フラグ(011：機器コース変更 or 012：機器変更手続)の場合、予約あり
				serviceInfoBean.sendMessageString(FUW12001SFConst.BSPASS_DISP_FLG, SET, FLG_AR);
			}
		}
	}


	/**
	 * マンション物件一意照会の加工編集処理（FUSV013012SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC12STB(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(FUW12001SFConst.AD_FORM_FLG, SET, AD_FORM_FLG_MS);
		// マンション物件コードが002の場合下記を設定
		if (JFUStrConst.CD01228_002.equals(childMap.get(MAP_KEY_MANSION_BUKKEN_CD)))
		{
			serviceInfoBean.sendMessageString(FUW12001SFConst.AD_FORM_FLG, SET, AD_FORM_FLG_MZ);
		}
	}


	/**
	 * 料金コース一覧照会の加工処理（FUSV013015SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービス契約番号一覧サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @throws Exception
	 */
	private void editDispMapSC15STB(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_TSUIKA);

		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(FUW12001SFConst.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, FUW12001SFConst.CRS_BT_PRC_LIST + N_LAST, i);
				String pcrsCd = courseMap.get(MAP_KEY_PCRS_CD);

				if (AD_FORM_FLG_HOME.equals(adFormFlg) || JFUStrConst.CD00134_A37.equals(pcrsCd) || JFUStrConst.CD00134_A38.equals(pcrsCd)
						|| JFUStrConst.CD00134_A39.equals(pcrsCd))
				{
					// ホーム
					courseInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_BASE_04, SET, courseMap.get(MAP_KEY_PPLAN_CD));
					courseInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_ADD_04, SET, courseMap.get(MAP_KEY_PPLAN_CD_ADD));
					courseInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_BASE_04, SET, courseMap.get(MAP_KEY_PRICE));
					courseInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_ADD_04, SET, courseMap.get(MAP_KEY_PRICE_ADD));
				}
				else if (AD_FORM_FLG_MS.equals(adFormFlg))
				{
					// マンション
					courseInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_BASE_04, SET, courseMap.get(MAP_KEY_PPLANM_CD));
					courseInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_ADD_04, SET, courseMap.get(MAP_KEY_PPLANM_CD_ADD));
					courseInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_BASE_04, SET, courseMap.get(MAP_KEY_PRICEM));
					courseInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_ADD_04, SET, courseMap.get(MAP_KEY_PRICEM_ADD));
				}
				else
				{
					// メゾン
					courseInfo.sendMessageString(FUW12001SFConst.PPLAN_CD_BASE_04, SET, courseMap.get(MAP_KEY_PPLANMZ_CD));
					courseInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_BASE_04, SET, courseMap.get(MAP_KEY_PRICEMZ));
				}
				courseInfo.sendMessageString(FUW12001SFConst.PCRS_CD_04, SET, pcrsCd);
				courseInfo.sendMessageString(FUW12001SFConst.PCRS_NM_BASE_04, SET, courseMap.get(MAP_KEY_PCRS_NM));
				courseInfo.sendMessageString(FUW12001SFConst.PRC_GRP_CD_04, SET, courseMap.get(MAP_KEY_PRC_GRP_CD));
				courseInfo.sendMessageString(FUW12001SFConst.TV_CRS_GRP_CD_04, SET, courseMap.get(MAP_KEY_TV_COURSE_GRP_CD));
				courseInfo.sendMessageString(FUW12001SFConst.PCRS_SBT_CD_04, SET, courseMap.get(MAP_KEY_PCRS_SBT_CD));
				courseInfo.sendMessageString(FUW12001SFConst.PCRS_NM_ADD_04, SET, TSUIKA + courseMap.get(MAP_KEY_PCRS_NM));
				courseInfo.sendMessageString(FUW12001SFConst.PPLAN_KOTEI_TANI_NM_04, SET, " " + courseMap.get(MAP_KEY_PPLAN_KOTEI_TANI_NM));
			}
		}

		// 表示順序でソート
		Collections.sort(kikiList, new Comparator<Map<String, String>>()
		{

			/**
			 * 機器リストの並び替え
			 * 
			 * <br>
			 * 機器リストを表示順序（昇順）で並び替えます。
			 * @param map1 機器リストの明細が格納されているMap
			 * @param map2 機器リストの明細が格納されているMap
			 * @return 比較結果
			 */
			@Override
			public int compare(Map<String, String> map1, Map<String, String> map2)
			{
				// 整理番号で並び替える(昇順)
				return map1.get(MAP_KEY_DSP_JUN).compareTo(map2.get(MAP_KEY_DSP_JUN));
			}
		});

		X31SDataBeanAccess kikiInfo = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW12001SFConst.KIKI_LIST);
		kikiInfo.sendMessageString(FUW12001SFConst.SELECT_CD_03, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW12001SFConst.PCRS_CD_LIST_03, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW12001SFConst.PPLAN_LIST_03, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW12001SFConst.NM_LIST_03, ADD, "選択しない");
		kikiInfo.sendMessageString(FUW12001SFConst.HDD_CD_LIST_03, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW12001SFConst.HDD_LIST_03, ADD, JFUStrConst.EMPTY);
		kikiInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_LIST_03, ADD, "0");
		kikiInfo.sendMessageString(FUW12001SFConst.GLADE_LIST_03, ADD, MAX_GRADE);
		kikiInfo.sendMessageString(FUW12001SFConst.DISP_JUN_LIST_03, ADD, "0");
		kikiInfo.sendMessageString(FUW12001SFConst.PPLAN_TANI_NM_LIST_03, ADD, JFUStrConst.EMPTY);

		// 料金コース一覧照会（機器の月額料金取得用）の件数分Loop
		for (int i = 0; i < kikiList.size(); i++)
		{
			HashMap<String, String> kikiMap = kikiList.get(i);
			kikiInfo.sendMessageString(FUW12001SFConst.PCRS_CD_LIST_03, ADD, kikiMap.get(MAP_KEY_PCRS_CD));
			kikiInfo.sendMessageString(FUW12001SFConst.PPLAN_LIST_03, ADD, kikiMap.get(MAP_KEY_PPLAN_CD));
			kikiInfo.sendMessageString(FUW12001SFConst.NM_LIST_03, ADD, kikiMap.get(MAP_KEY_PCRS_NM));
			kikiInfo.sendMessageString(FUW12001SFConst.HDD_CD_LIST_03, ADD, kikiMap.get(MAP_KEY_HDD_CAPA_CD));
			kikiInfo.sendMessageString(FUW12001SFConst.HDD_LIST_03, ADD, kikiMap.get(MAP_KEY_HDD_CAPA_CD_NM));
			kikiInfo.sendMessageString(FUW12001SFConst.MONTH_PRC_LIST_03, ADD, kikiMap.get(MAP_KEY_PRICE));
			kikiInfo.sendMessageString(FUW12001SFConst.GLADE_LIST_03, ADD, kikiMap.get(MAP_KEY_PCRS_GRADE_JUN));
			kikiInfo.sendMessageString(FUW12001SFConst.DISP_JUN_LIST_03, ADD, kikiMap.get(MAP_KEY_DSP_JUN));
			kikiInfo.sendMessageString(FUW12001SFConst.PPLAN_TANI_NM_LIST_03, ADD, " " + kikiMap.get(MAP_KEY_PPLAN_KOTEI_TANI_NM));
		}
		serviceInfoBean.sendMessageString(FUW12001SFConst.KIKI_KENSU_CNT, SET, Integer.toString(kikiList.size() + 1));
	}

	/**
	 * サービス契約一覧の加工編集処理（FUSV013005SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC5STB(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		if (!existsOutPutMap(outputMap, SC_TITLE_FUSV013005SC, MAP_KEY_SC5CBSMSGLIST))
		{
			// サービス契約にレコードが存在しない場合、契約状態エラー
			DEBUG_LOG.info("----- FUW12001_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_NS.equals(statusFlg))
		{
			// 契約状態フラグ(0：追加予約中)のためエラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC5() 追加予約中エラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		if (CD00134_A37.equals(pcrsCd))
		{
			// 契約中コースが地デジの場合、契約状態エラー
			DEBUG_LOG.info("----- FUW12001_editDispMapSC5() 地デジ・BSコースエラー -----");
			throw new JCCBusinessException(ERROR_CODE_0102);
		}
		if (FLG_AR.equals(idoRsvFlg))
		{
			// 異動レコード有無フラグ(1：有)の場合
			serviceInfoBean.sendMessageString(FUW12001SFConst.KEI_INFO_DISP_FLG, SET, FLG_AR); // 契約情報表示可否フラグ
		}
	}

	/**
	 * サービス契約内訳一覧の加工編集処理（FUSV013006SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param pcrs_all_kei_map サービス契約内訳契約中レコード
	 */
	private void editDispMapSC6STB(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("----- FUW12001_editDispMapSC6STB() データ未存在エラー -----");
			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 editDispMapSC8STB(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(FUW12001SFConst.TMP_PAY_SHUCHO_PRC, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（交換手数料）の加工編集処理（FUSV013009SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC9STB(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(FUW12001SFConst.TMP_PAY_EXCHG_PRC, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（追加手数料）の加工編集処理（FUSV013010SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC10STB(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(FUW12001SFConst.TMP_PAY_ADD_PRC, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（BSPT工事費）の加工編集処理（FUSV013011SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC11STB(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(FUW12001SFConst.TMP_PAY_BSPT_KOJI_PRC, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 一時支払金一意照会（ＳＴＢ交換契約事務手数料）の加工編集処理（FUSV013016SC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 * 
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 */
	private void editDispMapSC16STB(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(FUW12001SFConst.TMP_PAY_STB_EXCHG_PRC, SET, childMap.get(MAP_KEY_TMP_PAY_PRC_AMNT));
	}

	/**
	 * 宅内機器一意照会の加工編集処理（FUSV013001CC）
	 * <br/>
	 * サービスIFの検索結果リストを画面表示用の階層構造リストに変換します。
	 *
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap       サービス検索結果マップ
	 * @param stbid_map       ＳＴＢＩＤマップ
	 */
	private void editDispMapCC01STB(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));
		}
	}

	/**
	 * 機器提供サービス契約ステータスチェック
	 * 
	 * @param serviceFormBean	サービスフォームBean
	 * @return 処理結果
	 * @throws Exception 
	 * */
	private boolean enableKktkSvcKeiStat(String kktkSvcKeiStat)
	{
		DEBUG_LOG.info("----- FUW12001 Start enableKktkSvcKeiStat -----");

		// 画面で参照可能な機器提供サービス契約ステータスで無ければ、falseを返却
		if (JFUStrConst.CD00056_910.equals(kktkSvcKeiStat) || JFUStrConst.CD00056_920.equals(kktkSvcKeiStat))
		{
			return false;
		}

		DEBUG_LOG.info("----- FUW12001 End enableKktkSvcKeiStat -----");

		return true;
	}
}