/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：ｅｏ光テレビ契約変更／照会メニュー
*   ソースファイル名：FUW09501SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年09月07日
*＜機能概要＞
*  ｅｏ光テレビ契約変更／照会メニューのビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/07   FJ）新枦    新規作成
*   v4.00		2012/08/20	 FJ) 岡井	 【ANK-0324-00-00】オプションチャンネル申込の早期化について
*   v5.00		2013/02/18	 FJ)美濃原	 【ANK-1399-00-00】フロントＳ文言確認修正対応
*   v5.00		2013/04/10	 FJ) 瀧澤	 【IT1-2013-0000843】住所変更時の文言対応、選択したCCASに紐付くオプションチャンネルが存在しない場合の表示方法変更
*   v5.00		2013/04/10	 FJ) 瀧澤	 【OT指摘 No.1180】オプションチャンネル次月申込後のSTB申込ボタンの制御を修正（トリガーSTBでもボタンは押下可能）
*   v5.00		2013/05/23	 FJ) 瀧澤	 【ANK-1523-00-00】フロントSテレビキャンペーン対応について
*   v5.01		2013/11/11	 FJ) 文元	 【OM-2013-0004147】機器提供サービス契約からONU情報取得時、キャンセル・解約を対象外にする
*   v10.00		2014/07/08   FJ) 西山    【ANK-2135-00-00】BSオプションチャンネル「スターチャンネル」とのセット割検討
*   v10.00		2014/07/25   FJ）文元    【IT1-2014-0000248】既契約がBSスタチャンの場合の契約状態文言改修
*   v11.00      2014/09/10   FJ) 文元    【ANK-2256-00-00】【ＮＯ．１６４８】フロントからテレビガイド誌を解約した際の解約月の仕様変
*   v12.00      2015/01/29   FJ) 臼杵    【ANK-2358-00-00】【ＮＯ．１８３３】【スタchセット割】フロントにおけるコース変更抑止条件の変更対応
*   v14.00      2015/05/07   FJ）西川    【OM-2015-0001000】BSパススルーのバナー表示条件誤り対応
*   v25.00      2016/04/22   FJ) 張本    【ANK-2530-00-00】ＴＶ新コースおよびＶＯＤ導入
*   v40.00      2019/01/04   FJ)美濃原   【ANK-3509-00-00】TVコース変更時のVONU交換必須化対応（キャンペーン文言表示削除）
*   v74.00      2025/02/12   FJ)美濃原   【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応）
*   v75.00      2025/05/15   FJ)西川葵   【ANK-4678-00-00】eoサポートダイヤル受付時間短縮
*   v75.01      2025/06/02   FJ)美濃原   【ANK-4673-07-00】テレビ新コース（スカパー用）導入対応　2025年6月フォロー案件
**********************************************************************/

package eo.web.webview.FUW09501SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

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.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW06601SF.FUW06601SFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0125_FUSV0125OPDBMapper;

/**
 * ｅｏ光テレビ契約変更／照会メニューのビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW09501SFLogic extends JCCWebBusinessLogic
{
	/** HDD容量コード */
	private static final String HDD_CAPA_CD = "hdd_capa_cd";
	/** ＳＴＢ契約可能最大数 */
	private static final String STB_MAX_CNT = "stbMaxCnt";
	/** 画面定義ノード取得部品設定値(ＳＴＢ契約可能最大数:ホームタイプ) */
	private static final String STB_MAX_HT = "DISPSETTING/SETTING[@screenId='FUW09501']/DISPTEXT[@id='stb_ht']/text()";
	/** 画面定義ノード取得部品設定値(ＳＴＢ契約可能最大数:メゾンタイプ) */
	private static final String STB_MAX_MZ = "DISPSETTING/SETTING[@screenId='FUW09501']/DISPTEXT[@id='stb_mz']/text()";
	/** 画面定義ノード取得部品設定値(ＳＴＢ契約可能最大数:マンションタイプ) */
	private static final String STB_MAX_MT = "DISPSETTING/SETTING[@screenId='FUW09501']/DISPTEXT[@id='stb_mt']/text()";
	/** 画面定義ノード取得部品設定値(eo光テレビコース名) */
	private static final String TV_EO_COURSE_NM_BS = "DISPSETTING/SETTING[@screenId='FUW09501']/DISPTEXT[@id='A37']/text()";
	/** FUW095010PJP STB-ID 見出し */
	private static final String DSP_STB_ID = "STB-ID ： ";

	/** 契約中 */
	private static final String KEIYAKU = "0";
	/** 予約中 */
	private static final String YOYAKU = "1";
	/** 提供中以外 */
	private static final String KEIYAKU_IGAI = "2";
	/** 予約中※「地デジ・BSコース、地デジ・BSコース スターチャンネルセット」や「CSコース」に予約中、または逆。 */
	private static final String YOYAKU_BS = "3";
	/** 契約中だが申し込みできない */
	private static final String KEIYAKU_MSKM_FUKA = "4";

	/** 契約状態：契約中 */
	private static final String SVC_KEI_STAT_KEIYAKU = "契約中";
	/** 契約状態：未契約 */
	private static final String SVC_KEI_STAT_MI_KEIYAKU = "未契約";
	/** 契約状態：予約中 */
	private static final String SVC_KEI_STAT_YOYAKU = "予約中";

	/** 引き継ぎ情報：遷移元画面ID */
	private static final String MOTO_SCREEN_ID = "遷移元画面ＩＤ";

	/** 料金コースコード：ＨＤコース */
	private static final String[] NEW_PCRS_CD = { JFUStrConst.CD00134_A36, JFUStrConst.CD00134_A40, JFUStrConst.CD00134_A41, JFUStrConst.CD00134_A85, JFUStrConst.CD00134_A86, JFUStrConst.CD00134_A87 };
	/** 料金コースコード：ＳＤコース */
	private static final String[] OLD_PCRS_CD = { JFUStrConst.CD00134_A33, JFUStrConst.CD00134_A34, JFUStrConst.CD00134_A35 };
	/** サービスID */
	private static final String SERVICE_ID = "FUSV0125";
	/** 機能コード */
	private static final String KINOU_ID = "1";
	/** ZERO */
	private static final String ZERO = "0";
	/** ONE */
	private static final String ONE = "1";

	/** BS・地デジ表示フラグ：1 地デジ */
	private static final String BS_DISP_FLG_1 = "1";
	/** BS・地デジ表示フラグ：2 地デジ以外 */
	private static final String BS_DISP_FLG_2 = "2";

	/** 契約情報表示フラグ：1 コース変更ボタン表示 */
	private static final String KEI_DISP_FLG_1 = "1";
	/** 契約情報表示フラグ：2 確認するボタン表示(FUW07401) */
	private static final String KEI_DISP_FLG_2 = "2";
	/** 契約情報表示フラグ：3 確認するボタン表示(FUW07501) */
	private static final String KEI_DISP_FLG_3 = "3";
	/** 契約情報表示フラグ：4 ボタン非表示(契約できません) */
	private static final String KEI_DISP_FLG_4 = "4";
	/** 契約情報表示フラグ：5 ボタン非表示(文言無し) */
	private static final String KEI_DISP_FLG_5 = "5";

	/** オプション契約表示フラグ：1 オプション契約有り(申込、解約ボタン表示)  */
	private static final String OP_DISP_FLG_1 = "1";
	/** オプション契約表示フラグ：2 オプション契約無し(申込ボタン表示) */
	private static final String OP_DISP_FLG_2 = "2";
	/** オプション契約表示フラグ：3 ボタン非表示 */
	private static final String OP_DISP_FLG_3 = "3";
	/** オプション契約表示フラグ：4 ボタン非表示 (状態：予約中、ボタン非表示) */
	private static final String OP_DISP_FLG_4 = "4";

	/** ガイド誌表示フラグ：1 */
	private static final String GUIDE_DISP_FLG_1 = "1";
	/** ガイド誌表示フラグ：2 */
	private static final String GUIDE_DISP_FLG_2 = "2";

//	/** テレビチューナー情報表示フラグ：0（STB最大契約台数 かつ 全て最上位機種）ボタン非表示 */
//	private static final String TV_DISP_FLG_0 = "0";
	/** テレビチューナー情報表示フラグ：1（STB契約中）変更追加ボタン表示 */
	private static final String TV_DISP_FLG_1 = "1";
	/** テレビチューナー情報表示フラグ：2（STB予約中）確認ボタン表示 */
	private static final String TV_DISP_FLG_2 = "2";
	/** テレビチューナー情報表示フラグ：3（STB5台以上）ボタン非表示 */
	private static final String TV_DISP_FLG_3 = "3";
	/** テレビチューナー情報表示フラグ：4 (工事未完了)ボタン非表示 */
	private static final String TV_DISP_FLG_4 = "4";

	/** ＢＳパススルー情報表示フラグ：1（申込可能）*/
	private static final String BSPASS_DISP_FLG_1 = "1";
	/** ＢＳパススルー情報表示フラグ：2 （予約中）*/
	private static final String BSPASS_DISP_FLG_2 = "2";
	/** ＢＳパススルー情報表示フラグ：3 （BSエリア非表示）*/
	private static final String BSPASS_DISP_FLG_3 = "3";
	/** ＢＳパススルー情報表示フラグ：3 （ボタン非表示）契約可能条件を満たしているが、他の予約がある */
	private static final String BSPASS_DISP_FLG_4 = "4";

	/** 台数文言表示フラグ：1 STB契約可能台数の文言を非表示 */
	private static final String TV_DAISU_DISP_FLG_0 = "0";
	/** 台数文言表示フラグ：1 STB契約可能台数の文言を表示 */
	private static final String TV_DAISU_DISP_FLG_1 = "1";

	/** 契約状態エラーフラグ：1 */
	private static final String KEI_STAT_ERR_FLG_1 = "1";
	/** VONUBSパススルー可否(契約有) */
	private static final String BSPTKEI_FLG_ON = "1";
	/** ｅｏ光テレビチューナー変更リスト　メッセージ1（STB 予約中） */
	private static final String TV_LIST_MSG1 = "tv_list_msg1";
	/** 契約状態フラグ：追加予約中 */
	private static final String STATUS_FLG_0 = "0";

	/** 異動レコード有無フラグ：無 */
	private static final String IDO_RSV_FLG_OFF = "0";
	/** 異動レコード有無フラグ：有 */
	private static final String IDO_RSV_FLG_ON = "1";
	/** 異動予約詳細コード： */
	private static final String IDO_RSV_DTL_CD_003 = "003";

	/** タイトル：マンション物件一意照会 */
	private static final String TITLE_FUSV012507SC = "FUSV012507SC";
	/** Mapキー：マンション物件一意照会明細 */
	private static final String MAP_KEY_CBSMSGLIST_07 = "EKK0861A010CBSMsg1List";
	/** Mapキー：マンション物件コード */
	private static final String MAP_KEY_MANSION_BUKKEN_CD = "mansion_bukken_cd";

	/** タイトル：宅内機器型式一意照会 */
	private static final String TITLE_FUSV012508SC = "FUSV012508SC";
	/** Mapキー：宅内機器型式一意照会 */
	private static final String MAP_KEY_CBSMSGLIST_08 = "EZM0411A010CBSMsg1List";
	/** Mapキー：VONUBSパススルー可否 */
	private static final String MAP_KEY_VONU_BSPT_KH = "vonu_bspt_kh";

	/** タイトル：宅内機器一意照会 */
	private static final String TITLE_FUSV012509SC = "FUSV012509SC";
	/** Mapキー：宅内機器一意照会明細 */
	private static final String MAP_KEY_CBSMSGLIST_09 = "EWCA0010002CBSMsg1List";
	/** Mapキー：STBID */
	private static final String MAP_KEY_STB_ID = "stb_id";

	/** カウント:0 */
	private static final int CNT_0 = 0;
	/** カウント:1 */
	private static final int CNT_1 = 1;

	/** サービス契約情報.サービス契約番号 */
	private static final String CURR_SVCKEINO = "svckeino";
	/** 機器提供サービス契約情報.サービス契約内訳番号 */
	private static final String CURR_SVC_KEI_UCWK_NO = "svcKeiUcwkNo";
	/** サービス契約情報.料金コースコード */
	private static final String CURR_PCRS_CD = "pcrsCd";
	/** 機器提供サービス契約情報.宅内機器型式コード */
	private static final String CURR_TAKNKIKI_MODEL_CD = "taknkikiModelCd";
	/** Ｃ−ＣＡＳカードＮｏ */
	private static final String CURR_CCAS_CARD_NO = "ccasCardNo";
	/** 機器提供サービス契約.機器製造番号 */
	private static final String CURR_KIKI_SEIZO_NO_STB = "kikiSeizoNoStb";
	/** 機器提供サービス契約情報.機器提供サービス契約番号 (VONU) */
	private static final String CURR_KKTK_SVC_KEI_NO = "kktkSvcKeiNo";
	/** サービス契約ステータス */
	private static final String CURR_SVC_KEI_STAT = "svcKeiStat";
	/** サービス契約内訳ステータス */
	private static final String CURR_SVC_KEI_UW_STAT = "svcKeiUwStat";
	/** 機器提供サービス契約情報.eoTV機器設置承認状態コード */
	private static final String CURR_EO_TV_KK_ST_SNN_JT_CD = "eoTvKkStSnnJtCd";
	/** サービス契約回線内訳情報.住所形態コード */
	private static final String CURR_FORM_CD = "adFormCd";
	/** サービス契約回線内訳情報.マンション物件番号 */
	private static final String CURR_MANSION_BUKKEN_NO = "mansionBukkenNo";
	/** サービス処理結果.マンション物件 マンション物件コード */
	private static final String CURR_MANSION_BUKKEN_CD = "mansionBukkenCd";
	/** サービス処理結果.宅内機器 V-ONU VONUBSパススルー可否 */
	private static final String CURR_VONU_BSPT_KH = "vonuBsptKh";
	/** サービス処理結果.宅内機器 STB-ID */
	private static final String CURR_STB_ID = "stbId";
	/** 契約状態エラーフラグ 0:エラーでない 1:エラー */
	private static final String CURR_KEI_STAT_ERR_FLG = "keiStatErrFlg";

	/** STB 次月開始オプションチャンネル有無（サービス単位） */
	private static final String TOTAL_RSV_CHANNEL_NEXT = "totalRsvChannelNext";
	/** STB STBの契約台数 */
	private static final String ALL_STB_CNT = "allStbCnt";
	/** STB トリガーSTB以外の台数 */
	private static final String STB_CNT = "stbCnt";
	/** STB 契約可能最大数 */
	private static final String INT_STB_MAX_CNT = "intStbMaxCnt";
	/** STB 最上位HDD CAPA */
	private static final String MAX_HDD_CAPA_CNT = "maxHddCapaCnt";
	/** コース変更予約有無（サービス及び内訳） EKK0341B509 */
	private static final String TOTAL_RSV_STAT_CORSE = "totalRsvStatCorse";
	/** ＳＴＢ追加変更予約有無（サービス） EKK0341B509 */
	private static final String TOTAL_RSV_STAT_STB = "totalRsvStatStb";
	/** ＢＳパススルー予約有無（回線）EKK0341B509 */
	private static final String TOTAL_RSV_STAT_BS = "totalRsvStatBs";
	/** コース変更予約有無 EKK0341B509 */
	private static final String RSV_STAT_CORSE = "rsvStatCorse";
	/** ＳＴＢ変更予約有無 EKK0341B509 */
	private static final String RSV_STAT_STB = "rsvStatStb";
	/** オプションチャンネル次月開始有無 EKK0341B509 */
	private static final String RSV_CHANNEL_NEXT = "rsvChannelNext";
	/** コース変更予約有無 ＣＳコース用 */
	private static final String CS_RSV_STAT_CORSE = "csRsvStatCorse";
	/** ＶＯＮＵ交換予約有無（ＢＳパススルー含む） */
	private static final String CS_TOTAL_RSV_STAT_VONU = "csTotalRsvStatVonu";

	/** ハイフン */
	private static final String HYHUN = "-";

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;
	/** DataBean操作種別：項目値取得 */
	private static final String GET = X31CWebConst.DATABEAN_GET_VALUE;

	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";
	/** プロパティファイル取得文字列 */
	private static final String PATH_GYOUMU_KISEI_COMMON = "DISPSETTING/SETTING[@screenId='#']/DISPTEXT[@groupid='GYOUMU_KISEI_COMMON']";
	/** プロパティファイル取得文字列 */
	private static final String PATH_GYOUMU_KISEI_FUW01501 = "DISPSETTING/SETTING[@screenId='FUW09501']/DISPTEXT[@groupid='GYOUMU_KISEI']";

	/** CCタイトル：テレビコース名表示切替コモンコンポーネント処理 */
	private static final String CC_TITLE_FUSV012502CC = "FUSV012502CC";
	/** サービス名称(コース変更先) */
	private static final String CHAF_SVC_NM = "chaf_svc_nm";
	/** サービス名称 */
	private static final String CHBF_SVC_NM = "chbf_svc_nm";
	/** プランコード */
	private static final  String CHBF_PPLN_CD = "chbf_pplan_cd";
	/** 異動予約新料金コースコード */
	private static final String IDO_RSV_NEW_PCRS_CD = "idoRsvNewPcrsCd";
	/** 戻りコード */
	private static final String RET_CD = "ret_cd";

	/** CCタイトル：異動予約取得コモンコンポーネント処理 */
	private static final String CC_TITLE_FUSV012503CC = "FUSV012503CC";
	/** 異動予約一覧(サービス契約) "C009"(STB）、"C010"(B-CAS）、"C011"(C-CAS) */
	private static final String OUT_IDO_RSV_SVC_KEI_LIST = "ido_rsv_svc_kei_list";
	/** 異動予約一覧(サービス契約内訳) */
	private static final String OUT_IDO_RSV_SVC_KEI_UCWK_LIST = "ido_rsv_svc_kei_ucwk_list";
	/** 異動予約一覧(サービス契約) "C013"(VONU) */
	private static final String OUT_IDO_RSV_SVC_KEI_VONU_LIST = "ido_rsv_svc_kei_vonu_list";
	/** 予約機器提供サービスコード */
	private static final String RSV_KKTK_SVC_CD = "rsv_kktk_svc_cd";

	/** タイトル：異動予約一覧照会 */
	private static final String TITLE_FUSV012512SC = "FUSV012512SC";
	/** Mapキー：異動予約一覧照会明細 */
	private static final String MAP_KEY_GDRSVLIST_12 = "EKK1681B001CBSMsg1List";
	/** 異動予約番号 */
	private static final String GD_IDO_RSV_NO = "ido_rsv_no";
	/** 異動区分 */
	private static final String GD_RSV_IDO_DIV = "ido_div";
	/** 異動予約詳細コード */
	private static final String GD_RSV_IDO_RSV_DTL_CD = "ido_rsv_dtl_cd";
	/** 異動予約状態コード */
	private static final String GD_RSV_IDO_RSV_STAT_CD = "ido_rsv_stat_cd";
	/** オプションサービス契約番号 */
	private static final String GD_RSV_OP_SVC_KEI_NO = "op_svc_kei_no";
	/** 変更前）料金コースコード */
	private static final String GD_RSV_OLD_PCRS_CD = "old_pcrs_cd";
	/** 変更前）料金プランコード */
	private static final String GD_RSV_OLD_PPLAN_CD = "old_pplan_cd";
	/** 変更後）料金コースコード */
	private static final String GD_RSV_NEW_PCRS_CD = "new_pcrs_cd";
	/** 変更後）料金プランコード */
	private static final String GD_RSV_NEW_PPLAN_CD = "new_pplan_cd";
	/** 変更後）料金プラン名 */
	private static final String GD_RSV_NEW_PPLAN_CD_NM = "new_pplan_cd_nm";

	/**
	 * マップに保持している業務規制コードをStringBufferで返す。
	 * 
	 * <br>
	 * @param gyomuKiseiMap
	 * @return
	 * @throws Exception
	 */
	private StringBuffer getGyomuKisei(Map<String, String> gyomuKiseiMap)  throws Exception
	{
		Collection<String> gyomuKiseiCollection = gyomuKiseiMap.values();
		Iterator<String> itr = gyomuKiseiCollection.iterator();
		StringBuffer gyomuKiseiCd = new StringBuffer();
		while (itr.hasNext())
		{
			gyomuKiseiCd.append(itr.next());
		}
		
		return gyomuKiseiCd;
	}
	
	/**
	 * 業務規制情報を設定する。
	 * @return boolean true:規制中  false:規制中でない
	 */
	private void checkGyomuKisei() throws Exception
	{
		// 業務規制情報取得
		HashMap<String, Object> workKiseiInfoMap = JFUWebCommon.getBusinessControlMap(this);
		
		if (null != workKiseiInfoMap && 0 != workKiseiInfoMap.size())
		{
			// ●業務規制取得処理
			Map<String, String> gyomuKiseiMap = JFUWebCommon.getDispItemsAsMap(PATH_GYOUMU_KISEI_COMMON, QUERY_ATTR_NAME);
			Map<String, String> gyomuKiseiScreenIdMap = JFUWebCommon.getDispItemsAsMap(PATH_GYOUMU_KISEI_FUW01501, QUERY_ATTR_NAME);
			StringBuffer gyomuKiseiCd = new StringBuffer();
			gyomuKiseiCd = gyomuKiseiCd.append(getGyomuKisei(gyomuKiseiMap));
			gyomuKiseiCd = gyomuKiseiCd.append(JFUStrConst.COMMA);
			gyomuKiseiCd = gyomuKiseiCd.append(getGyomuKisei(gyomuKiseiScreenIdMap));
			
			String[] gyomuKiseiCdArray = gyomuKiseiCd.toString().split(JFUStrConst.COMMA);
			
			// 業務規制情報設定処理
			// 共有フォームBeanの取得
			X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
			// 業務規制リスト取得
			X31SDataBeanAccess workKiseiListBean = getWorkKiseiList(commonInfoBean);
			
			for (int i = 0; i < gyomuKiseiCdArray.length; i++)
			{
				// 業務規制情報マップから、対象規制情報を取得
				HashMap<?, ?> workKiseiMap = (HashMap<?, ?>)workKiseiInfoMap.get(gyomuKiseiCdArray[i]);
				
				// 業務規制フラグの取得
				String kiseiFlg = (String)workKiseiMap.get(JFUStrConst.KISEI_FLG);

				// フロント稼動対象規制フラグを設定
				if (JFUStrConst.CD01306_1.equals(kiseiFlg))
				{
					workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
							JFUStrConst.CD01306_1);
					String errorCd =   gyomuKiseiCdArray[i].replace( JFUStrConst.S_SYSTEM_CD, JFUStrConst.EMPTY);
					// 規制フラグが"1"(規制中)の場合
					DEBUG_LOG.info("業務規制【メンテナンス中エラー】" + errorCd);
					// メンテナンス中エラー
					throw new JCCBusinessException(errorCd);
				}
			}
		}
	}
	
	/**
	 * フロント業務リスト
	 * @param commonInfoBean
	 * @return workKiseiListBean
	 */
	private X31SDataBeanAccess getWorkKiseiList(X31SDataBeanAccess commonInfoBean)
	{
		// フロント業務リストを取得
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_WORK_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess frontWorkListBean = array.getDataBean(0);

		return frontWorkListBean;
	}
	
	/**
	 * init()
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- init_FUW09501SFLogic Start -----");
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = super.getServiceFormBean();
		// 利用可能サービスチェック
		JFUWebCommon.checkCommonRelation(this, SERVICE_ID);
		// 現顧客契約情報の最新化
		JFUWebCommon.refreshGenCustKei(this);

		// 共有フォームBeanからデータの取得 -------------------------------------------//
		HashMap<String, String> currentInfoMap = getCommonInfo(commonInfoBean);
		// サービス契約番号
		String svckeino = currentInfoMap.get(CURR_SVCKEINO);
		// サービス契約内訳番号
		String svcKeiUcwkNo = currentInfoMap.get(CURR_SVC_KEI_UCWK_NO);
		// 料金コースコード
		String pcrsCd = currentInfoMap.get(CURR_PCRS_CD);
		// 宅内機器型式コード
		String taknkikiModelCd = currentInfoMap.get(CURR_TAKNKIKI_MODEL_CD);
		// 機器製造番号
		String kikiSeizoNoStb = currentInfoMap.get(CURR_KIKI_SEIZO_NO_STB);
		// サービス契約ステータス
		String svcKeiStat = currentInfoMap.get(CURR_SVC_KEI_STAT);
		// サービス契約内訳ステータス 
		String svcKeiUwStat = currentInfoMap.get(CURR_SVC_KEI_UW_STAT);
		// マンション物件番号
		String mansionBukkenNo = currentInfoMap.get(CURR_MANSION_BUKKEN_NO);
		// 契約状態エラーフラグ 0:エラーでない 1:エラー */
		String keiStatErrFlg = "0";

		// -------------------------------------------------
		// サービスフォームBeanのリストクリア
		// -------------------------------------------------
		// サービスフォームBean.ｅｏ光テレビチューナー変更リストのデータを削除
		X31SDataBeanAccessArray tvList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.TV_LIST);
		tvList.clearArray();
		// サービスフォームBean.全機器リストのデータを削除
		X31SDataBeanAccessArray allStbList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.ALL_STB_LIST);
		allStbList.clearArray();
		// サービスフォームBean.契約情報リストのデータを削除
		X31SDataBeanAccessArray keiyakuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEIYAKU_LIST);
		keiyakuList.clearArray();
		// サービスフォームBean.コースリストのデータを削除
		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEI_LIST);
		keiList.clearArray();
		// サービスフォームBean.内訳リストのデータを削除
		X31SDataBeanAccessArray pcrsList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.PCRS_LIST);
		pcrsList.clearArray();
		// サービスフォームBean.オプションリストのデータを削除
		X31SDataBeanAccessArray opList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.OP_LIST);
		opList.clearArray();
		// サービスフォームBean.ガイドリストのデータを削除
		X31SDataBeanAccessArray guideList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.GUIDE_LIST);
		guideList.clearArray();
		// サービスフォームBean.異動予約リストのデータを削除
		X31SDataBeanAccessArray idoRsvList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.IDO_RSV_LIST);
		idoRsvList.clearArray();
		// サービスフォームBean.Ｖ−ＯＮＵリストのデータを削除
		X31SDataBeanAccessArray vonuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.VONU_LIST);
		vonuList.clearArray();
		serviceInfoBean.sendMessageString(FUW09501SFConst.EXISTS_OP_SVC_KEI, SET, JFUStrConst.EMPTY);

		// -------------------------------------------------
		// サービスの引数をサービスフォームBeanへ設定
		// -------------------------------------------------
		// サービス契約番号
		serviceInfoBean.sendMessageString(FUW09501SFConst.SVC_KEI_NO, SET, svckeino);
		// サービス契約内訳番号
		serviceInfoBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_NO, SET, svcKeiUcwkNo);
		// Ｃ−ＣＡＳカードＮｏ
		serviceInfoBean.sendMessageString(FUW09501SFConst.KIKI_SEIZO_NO, SET, currentInfoMap.get(CURR_CCAS_CARD_NO));
		// 機器製造番号
		serviceInfoBean.sendMessageString(FUW09501SFConst.KIKI_SEIZO_NO_STB, SET, kikiSeizoNoStb);
		// マンション物件番号
		serviceInfoBean.sendMessageString(FUW09501SFConst.MANSION_BUKKEN_NO, SET, mansionBukkenNo);
		// 宅内機器型式コード
		serviceInfoBean.sendMessageString(FUW09501SFConst.TAKNKIKI_MODEL_CD, SET, taknkikiModelCd);
		// 機器提供サービス契約番号
		serviceInfoBean.sendMessageString(FUW09501SFConst.KKTK_SVC_KEI_NO, SET, currentInfoMap.get(CURR_KKTK_SVC_KEI_NO));

		// 業務規制チェック
		checkGyomuKisei();
		
		// -------------------------------------------------
		// サービス呼出処理
		// -------------------------------------------------
		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID);

		// DataBean-BPマッピング
		FUSV0125_FUSV0125OPDBMapper mapper = new FUSV0125_FUSV0125OPDBMapper();
		HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();
		// サービス処理結果格納用マップ
		HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
				new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();
		
		// ＳＴＢＩＤ取得要リスト取得
		HashMap<String, String> stbidList = new HashMap<String, String>();
		X31SDataBeanAccessArray genKktkSvcKeiList = commonInfoBean.getDataBeanArray(JFUWebCommon.KKTK_SVC_KEI_INFO);
		
		for (int listCnt = 0; listCnt < genKktkSvcKeiList.getCount(); listCnt++)
		{
			X31SDataBeanAccess kktkSvcKeiInfo = genKktkSvcKeiList.getDataBean(listCnt);
			String kktkSvcCd = kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KKTK_SVC_CD_27, X31CWebConst.DATABEAN_GET_VALUE);

			if (JFUStrConst.KK0771_KKTK_SVC_CD_C009.equals(kktkSvcCd))
			{
				if (kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, X31CWebConst.DATABEAN_GET_VALUE) != null
						&& !JFUStrConst.EMPTY.equals(kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					stbidList.put(kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, X31CWebConst.DATABEAN_GET_VALUE), 
							kktkSvcKeiInfo.sendMessageString(CommonInfoCFConst.TAKNKIKI_MODEL_CD_27, X31CWebConst.DATABEAN_GET_VALUE));
				}
			}
		}
		

		X31SDataBeanAccess[] paramBean = { serviceInfoBean, commonInfoBean };

		mapper.setFUSV012501SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012502SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012503SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012504SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012505SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012506SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012507SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012508SC(paramBean, inputMap, KINOU_ID);
		mapper.setFUSV012509SC(paramBean, inputMap, KINOU_ID, stbidList);
		mapper.setFUSV012511SC(paramBean, inputMap, KINOU_ID);
		String bsptWribSvcCd = JFUWebCommon.getBsptWribSvcCd();
		mapper.setFUSV012501CC(paramBean, inputMap, bsptWribSvcCd);
		mapper.setFUSV012512SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV012502CC(paramBean, inputMap);
		mapper.setFUSV012503CC(paramBean, inputMap);
		if (JFUStrConst.CD00134_TV_CS_LIST.contains(pcrsCd))
		{
			// ＣＳコースの場合のみ実行
			mapper.setFUSV012513SC(paramBean, inputMap, KINOU_ID);
		}

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務用例外クラスをthrowする。
			DEBUG_LOG.debug("■■■FUW09501 (1)ｅｏ光テレビ契約変更／照会メニュー：システムエラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		X31SDataBeanAccess[] paramBeanOut = { serviceInfoBean };
		// サービスからの戻りデータをサービスフォームBeanにセット
		mapper.getFUSV012501SC(paramBeanOut, outputMap);
		mapper.getFUSV012502SC(paramBeanOut, outputMap);
		mapper.getFUSV012503SC(paramBeanOut, outputMap);
		mapper.getFUSV012504SC(paramBeanOut, outputMap);
		mapper.getFUSV012505SC(paramBeanOut, outputMap);
		mapper.getFUSV012506SC(paramBeanOut, outputMap);
		mapper.getFUSV012510SC(paramBeanOut, outputMap);
		// ＣＳコースで全CSカードに、1件でもオプションチャンネルが存在するかの判定結果
		boolean existsCsOpSvc = mapper.getFUSV012513SC(paramBeanOut, outputMap);
		// ●住所変更有無
		serviceInfoBean.sendMessageString(FUW09501SFConst.AD_CHG_UM, SET, JFUWebCommon.getAdChgUm(this, JFUStrConst.RELATION_CHECK_AD_CHG_CHK_PTN_D));

		// -------------------------------------------------
		// カレントレコードの設定(サービス契約)
		// -------------------------------------------------
		// サービス契約料金コース
		serviceInfoBean.sendMessageString(FUW09501SFConst.SVCKEI_PCRSCD, SET, pcrsCd);

		HashMap<String, String> taknkikiModeMap = mapper.getFUSV012511SC(paramBeanOut, outputMap);
		// BSパススルー工事費割引CPが適用済か考慮された割引サービスコード
		String bsptWribTekiyoFlg = mapper.getFUSV012501CC(this, outputMap);
		// -------------------------------------------------
		// カレントレコードの設定(機器提供サービス契約)
		// -------------------------------------------------
		// 全機器リスト(FUSV012501SC: EKK0341B509)
		allStbList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.ALL_STB_LIST);
		// 機器提供サービス契約カレントレコード.サービス契約内訳番号
		String curSvcKeiUcwkNo = JFUStrConst.EMPTY;
		// 機器提供サービス契約カレントレコード
		X31SDataBeanAccess stbMainBean = null;

		// 機器提供サービス契約カレントレコード有無フラグ：無し
		String stbMainBeanFlg = ZERO;

		for (int i = 0; i < allStbList.getCount(); i++)
		{
			X31SDataBeanAccess allStbListBean = allStbList.getDataBean(i);
			// 機器提供サービス契約.機器製造番号
			String kikiSeizoNo = allStbListBean.sendMessageString(FUW09501SFConst.KIKI_SEIZO_NO_03, GET);
			if (kikiSeizoNoStb.equals(kikiSeizoNo))
			{
				// 機器提供サービス契約カレントレコードに格納
				stbMainBean = allStbListBean;
				// カレントレコードのサービス契約内訳番号を取得
				curSvcKeiUcwkNo = allStbListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_NO_03, GET);
				// 機器提供サービス契約カレントレコード有無フラグ：有り
				stbMainBeanFlg = ONE;
				break;
			}
		}

		// -------------------------------------------------
		// カレントレコードの設定(サービス契約内訳)
		// -------------------------------------------------
		// 内訳リスト(FUSV012504SC: EKK0161B509 サービス契約内訳一覧照会（eo光テレビ情報取得）)
		pcrsList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.PCRS_LIST);
		// サービス契約内訳カレントレコード有無フラグ：無し
		String pcrsMainBeanFlg = ZERO;
		// サービス契約内訳カレントレコード
		X31SDataBeanAccess pcrsMainBean = null;
		for (int i = 0; i < pcrsList.getCount(); i++)
		{
			X31SDataBeanAccess pcrsListBean = pcrsList.getDataBean(i);
			// サービス契約内訳.サービス契約内訳番号
			String uchiSvcKeiUcwkNo = pcrsListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_NO_05, GET);
			if (curSvcKeiUcwkNo.equals(uchiSvcKeiUcwkNo))
			{
				// サービス契約内訳カレントレコードに格納
				pcrsMainBean = pcrsListBean;
				// サービス契約内訳カレントレコード有無フラグ：有り
				pcrsMainBeanFlg = ONE;
				break;
			}
		}

		// -------------------------------------------------
		// 初期表示エラーチェック
		// -------------------------------------------------
		// 契約状態チェック
		if (KEI_STAT_ERR_FLG_1.equals(keiStatErrFlg))
		{
			DEBUG_LOG.debug("■■■FUW09501 (2)ｅｏ光テレビ契約変更／照会メニュー：契約状態エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 契約情報リスト
		keiyakuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEIYAKU_LIST);
		if (keiyakuList.getCount() == 0)
		{
			// デバッグログ
			DEBUG_LOG.debug("■■■FUW09501 (3)ｅｏ光テレビ契約変更／照会メニュー：契約情報リストが0件：契約状態エラー■■■");
			// 契約情報リストが0件の場合、"0102"（契約状態エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 契約情報Bean(FUSV012503SC: EKK0081B515)
		X31SDataBeanAccess keiyakuBean = keiyakuList.getDataBean(0);
		// 契約情報.契約状態フラグ(サービス契約のステータスが"100"or"030”は"1"、それ以外は"0")
		String statusFlgKeiyaku = keiyakuBean.sendMessageString(FUW09501SFConst.STATUS_FLG_04, GET);

		if (STATUS_FLG_0.equals(statusFlgKeiyaku))
		{
			// デバッグログ
			DEBUG_LOG.debug("■■■FUW09501 (4)ｅｏ光テレビ契約変更／照会メニュー：契約情報.契約状態フラグ：契約状態エラー■■■");
			// 契約状態フラグが"0"：追加予約中の場合、"0102"（契約状態エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// ＳＴＢ契約可能最大数を取得(初期値設定:ホーム)
		String stbMaxCnt = JFUWebCommon.getDispItem(STB_MAX_HT);

		// ＣＳコース表示フラグ 初期化
		serviceInfoBean.sendMessageString(FUW09501SFConst.TV_CS_DISP_FLG, SET, JFUStrConst.EMPTY);

		// ＣＳコースへの移動予約情報（予約がなければ空マップ）
		HashMap<String, String> tvCsIdoMap = getTvCsIdo(serviceInfoBean, outputMap);
		// -------------------------------------------------
		// ＢＳ・地デジ以外
		// -------------------------------------------------

		if (JFUStrConst.CD00134_TV_CS_LIST.contains(pcrsCd))
		{
			// ＣＳコース ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）
			DEBUG_LOG.debug("★ ＣＳコースの場合 ★");
			// サービスフォームBean.BS・地デジ表示フラグ
			serviceInfoBean.sendMessageString(FUW09501SFConst.BS_DISP_FLG, SET, BS_DISP_FLG_2);
			// ＣＳコース表示フラグ
			serviceInfoBean.sendMessageString(FUW09501SFConst.TV_CS_DISP_FLG, SET, ONE);
			// ■共通作業マップの設定
			currentInfoMap = getTvCsCorseVonuInfo(serviceInfoBean, outputMap, currentInfoMap);
			// ■契約情報の設定
			setKeiInfoCs(serviceInfoBean, svcKeiStat, outputMap, tvCsIdoMap);
			// ■オプションチャンネル契約内容の設定
			setOpCsInfo(serviceInfoBean, currentInfoMap, outputMap, commonInfoBean, existsCsOpSvc);
			// ■eo光テレビガイドの設定
			setTvGuideInfo(serviceInfoBean, outputMap);
		}
		else if (!JFUStrConst.CD00134_A37.equals(pcrsCd))
		{
			// デバッグログ
			DEBUG_LOG.debug("★ 「ＢＳ・地デジ、ＣＳコース」以外の場合 ★");
			if (ZERO.equals(stbMainBeanFlg))
			{
				// デバッグログ
				DEBUG_LOG.debug("■■■FUW09501 (5)ｅｏ光テレビ契約変更／照会メニュー：機器提供サービス契約カレントレコードが0件：契約状態エラー■■■");
				// 機器提供サービス契約カレントレコードが0件の場合、"0102"（契約状態エラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}

			// サービス契約内訳カレントレコードが0件の場合、"0102"（契約状態エラー）
			if (ZERO.equals(pcrsMainBeanFlg))
			{
				// デバッグログ
				DEBUG_LOG.debug("■■■FUW09501 (6)ｅｏ光テレビ契約変更／照会メニュー：サービス契約内訳カレントレコードが0件：契約状態エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// サービス契約内訳.契約状態フラグ(サービス契約内訳のステータスが"100"または、"030"の場合は"1"、それ以外は"0")
			String statusFlgPcrs = pcrsMainBean.sendMessageString(FUW09501SFConst.STATUS_FLG_05, GET);

			if (STATUS_FLG_0.equals(statusFlgPcrs))
			{
				// デバッグログ
				DEBUG_LOG.debug("■■■FUW09501 (7)ｅｏ光テレビ契約変更／照会メニュー：サービス契約内訳.契約状態フラグ：契約状態エラー■■■");
				// 契約状態フラグが"0"：追加予約中の場合、"0102"（契約状態エラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// マンション物件コード
			String mansionBukkenCd = JFUStrConst.EMPTY;
			if (!JFUStrConst.EMPTY.equals(mansionBukkenNo))
			{
				// マンション物件番号が設定されている場合、マンション物件コードの取得
				mansionBukkenCd = getMansionBukkenCd(outputMap.get(TITLE_FUSV012507SC));
				if (JFUStrConst.CD01228_002.equals(mansionBukkenCd))
				{
					// メゾン
					stbMaxCnt = JFUWebCommon.getDispItem(STB_MAX_MZ);
				}
				else
				{
					// マンション
					stbMaxCnt = JFUWebCommon.getDispItem(STB_MAX_MT);
				}
			}
			currentInfoMap.put(STB_MAX_CNT, stbMaxCnt); // ＳＴＢ契約可能最大数
			currentInfoMap.put(CURR_MANSION_BUKKEN_CD, mansionBukkenCd);
			// VONUBSパススルー可否の取得
			String vonuBsptKh = getVonuBsptKh(outputMap.get(TITLE_FUSV012508SC));
			currentInfoMap.put(CURR_VONU_BSPT_KH, vonuBsptKh);
			// STBIDの取得
			String stbId = getStbId(outputMap.get(TITLE_FUSV012509SC));
			currentInfoMap.put(CURR_STB_ID, stbId);
			currentInfoMap = getStbCorseBsInfo(serviceInfoBean, currentInfoMap, taknkikiModeMap);

			// サービスフォームBean.BS・地デジ表示フラグ
			serviceInfoBean.sendMessageString(FUW09501SFConst.BS_DISP_FLG, SET, BS_DISP_FLG_2);
			// ■契約情報の設定
			setKeiInfo(serviceInfoBean, pcrsMainBean, currentInfoMap, outputMap, tvCsIdoMap);
			// ■オプションチャンネル契約内容の設定
			setOpInfo(serviceInfoBean, currentInfoMap, outputMap);
			// ■eo光テレビガイドの設定
			setTvGuideInfo(serviceInfoBean, outputMap);
			// ■eo光テレビチューナーの設定
			setTvTunerInfo(serviceInfoBean, stbMainBean, currentInfoMap, outputMap);
			// ■BSパススルーの設定
			setBsPassInfo(commonInfoBean, serviceInfoBean, currentInfoMap, outputMap, bsptWribTekiyoFlg);
		}
		else
		{
			// デバッグログ
			DEBUG_LOG.debug("★ ＢＳ・地デジの場合 ★");
			// -------------------------------------------------
			// ＢＳ・地デジ
			// -------------------------------------------------
			// サービスフォームBean.BS・地デジ表示フラグ
			serviceInfoBean.sendMessageString(FUW09501SFConst.BS_DISP_FLG, SET, BS_DISP_FLG_1);
			// ■契約情報の設定
			setKeiInfoBs(serviceInfoBean, svcKeiStat, outputMap, tvCsIdoMap);
		}
		// ＳＴＢ契約可能最大数を設定
		serviceInfoBean.sendMessageString(FUW09501SFConst.STB_MAX_CNT, SET, stbMaxCnt);

		// ボディ領域表示制御処理
		if (!JFUStrConst.CD00037_100.equals(svcKeiStat))
		{
			// サービス契約ステータスが「100」以外の場合
			// STBの表示領域フラグ
			serviceInfoBean.sendMessageBoolean(FUW09501SFConst.BODY_AREA_DISP_FLG, SET, false);
			// ガイド誌の表示領域フラグ（1：表示 2：非表示）
			serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_AREA_DISP_FLG, SET, "2");
		}
		else
		{
			if (JFUStrConst.CD00134_TV_CS_LIST.contains(pcrsCd))
			{
				// ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）
				// STBの表示領域フラグ
				serviceInfoBean.sendMessageBoolean(FUW09501SFConst.BODY_AREA_DISP_FLG, SET, false);
				// ガイド誌の表示領域フラグ（1：表示 2：非表示）
				serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_AREA_DISP_FLG, SET, "1");
			}
			// 地デジ・BS以外の場合のみサービス契約内訳ステータスを見る
			else if (!JFUStrConst.CD00134_A37.equals(pcrsCd))
			{
				if (!JFUStrConst.CD00037_100.equals(svcKeiUwStat))
				{
					// サービス契約内訳ステータスが「100」以外の場合
					// STBの表示領域フラグ
					serviceInfoBean.sendMessageBoolean(FUW09501SFConst.BODY_AREA_DISP_FLG, SET, false);
				}
				else
				{
					// サービス契約内訳ステータスが「100」の場合
					// STBの表示領域フラグ
					serviceInfoBean.sendMessageBoolean(FUW09501SFConst.BODY_AREA_DISP_FLG, SET, true);
				}
				// ガイド誌の表示領域フラグ（1：表示 2：非表示）
				serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_AREA_DISP_FLG, SET, "1");
			}
			else
			{
				// 地デジ・BSの場合
				// STBの表示領域フラグ
				serviceInfoBean.sendMessageBoolean(FUW09501SFConst.BODY_AREA_DISP_FLG, SET, false);
				// ガイド誌の表示領域フラグ（1：表示 2：非表示）
				serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_AREA_DISP_FLG, SET, "2");
			}
		}

		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		// ｅｏ光テレビ契約変更／照会メニュー画面に遷移
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW09501);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW09501);
		// ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）
		// 選択後到達画面ＩＤを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.SELECT_TTU_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		
		// オンライン運用日取得＆設定
		String opeDate = JFUWebCommon.getOpeDate(this, null);
		setFuOpedate(commonInfoBean, opeDate);

		// デバッグログ
		StringBuffer sb = new StringBuffer();
		sb.append("TV_CS_DISP_FLG[" + serviceInfoBean.sendMessageString(FUW09501SFConst.TV_CS_DISP_FLG, GET) + "],");
		sb.append("AD_CHG_UM[" + serviceInfoBean.sendMessageString(FUW09501SFConst.AD_CHG_UM, GET) + "],");
		sb.append("BS_DISP_FLG[" + serviceInfoBean.sendMessageString(FUW09501SFConst.BS_DISP_FLG, GET) + "],");
		sb.append("GUIDE_AREA_DISP_FLG[" + serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_AREA_DISP_FLG, GET) + "],");
		sb.append("BODY_AREA_DISP_FLG[" + serviceInfoBean.sendMessageBoolean(FUW09501SFConst.BODY_AREA_DISP_FLG, GET) + "],");
		sb.append("BSPASS_DISP_FLG[" + serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, GET) + "]");
		DEBUG_LOG.debug(sb.toString());

		DEBUG_LOG.debug("----- init_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * コース変更ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cngPcrs() throws Exception
	{

		// デバッグログ
		DEBUG_LOG.debug("----- cngPcrs_FUW09501SFLogic Start -----");
		// ---- 共有フォームbean ----
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		if (JFUWebCommon.isTvCs(commonInfoBean))
		{
			// ＣＳコースの場合
			setParamTvCs(JFUScreenConst.SCREEN_ID_FUW01505, JFUScreenConst.SCREEN_NAME_FUW01505, JFUScreenConst.SCREEN_ID_FUW01501);
		} else {
			// 引き継ぎ情報設定
			setParam(JFUScreenConst.SCREEN_ID_FUW01501, JFUScreenConst.SCREEN_NAME_FUW01501);
		}
		// デバッグログ
		DEBUG_LOG.debug("----- cngPcrs_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * コース変更予約取消ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean dslPcrs() throws Exception
	{

		// デバッグログ
		DEBUG_LOG.debug("----- dslPcrs_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW12001, JFUScreenConst.SCREEN_NAME_FUW12001);
		// デバッグログ
		DEBUG_LOG.debug("----- dslPcrs_FUW09501SFLogic End -----");

		return true;
	}

	/**
	 * 新コースへの変更予約確認ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cfmPcrs() throws Exception
	{

		// デバッグログ
		DEBUG_LOG.debug("----- cfmPcrs_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW12001, JFUScreenConst.SCREEN_NAME_FUW12001);
		// デバッグログ
		DEBUG_LOG.debug("----- cfmPcrs_FUW09501SFLogic End -----");

		return true;
	}

	/**
	 * チャンネル追加ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean addOpt() throws Exception
	{

		// デバッグログ
		DEBUG_LOG.debug("----- addOpt_FUW09501SFLogic Start -----");
		// 画面遷移
		// ---- 共有フォームbean ----
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		if (JFUWebCommon.isTvCs(commonInfoBean))
		{
			// ＣＳコースの場合
			setParamTvCs(JFUScreenConst.SCREEN_ID_FUW01505, JFUScreenConst.SCREEN_NAME_FUW01505, JFUScreenConst.SCREEN_ID_FUW12401);
		}
		else
		{
			// 引き継ぎ情報設定
			setParam(JFUScreenConst.SCREEN_ID_FUW06301, JFUScreenConst.SCREEN_NAME_FUW06301);
		}
		// デバッグログ
		DEBUG_LOG.debug("----- addOpt_FUW09501SFLogic End -----");

		return true;
	}

	/**
	 * チャンネル解約ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean dslOpt() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- dslOpt_FUW09501SFLogic Start -----");
		// ---- 共有フォームbean ----
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		if (JFUWebCommon.isTvCs(commonInfoBean))
		{
			// ＣＳコースの場合
			setParamTvCs(JFUScreenConst.SCREEN_ID_FUW01505, JFUScreenConst.SCREEN_NAME_FUW01505, JFUScreenConst.SCREEN_ID_FUW12501);
		}
		else
		{
			// 引き継ぎ情報設定
			setParam(JFUScreenConst.SCREEN_ID_FUW06401, JFUScreenConst.SCREEN_NAME_FUW06401);
		}
		// デバッグログ
		DEBUG_LOG.debug("----- dslOpt_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * ガイド誌変更ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cngGuide() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- cngGuide_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW06601, JFUScreenConst.SCREEN_NAME_FUW06601);
		// デバッグログ
		DEBUG_LOG.debug("----- cngGuide_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * STB変更/追加ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cngStb() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- cngStb_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW06802, JFUScreenConst.SCREEN_NAME_FUW06802);
		// デバッグログ
		DEBUG_LOG.debug("----- cngStb_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * STB変更予約確認ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cfmStb() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- cfmStb_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW12001, JFUScreenConst.SCREEN_NAME_FUW12001);
		// デバッグログ
		DEBUG_LOG.debug("----- cfmStb_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * BSパススルー申込ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean mskmBspt() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- mskmBspt_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW06802, JFUScreenConst.SCREEN_NAME_FUW06802);
		// デバッグログ
		DEBUG_LOG.debug("----- mskmBspt_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * BSパススルー予約確認ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cfmBspt() throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- cfmBspt_FUW09501SFLogic Start -----");
		// 引き継ぎ情報設定
		setParam(JFUScreenConst.SCREEN_ID_FUW12001, JFUScreenConst.SCREEN_NAME_FUW12001);
		// デバッグログ
		DEBUG_LOG.debug("----- cfmBspt_FUW09501SFLogic End -----");
		return true;
	}

	/**
	 * 引き継ぎ情報設定 <BR>
	 * 
	 * @param nextScreenId 遷移先画面ID
	 * @param nextScreenName 遷移先画面名
	 * @throws Exception 例外
	 */
	private void setParam(String nextScreenId, String nextScreenName) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setParam_FUW09501SFLogic Start -----");
		// ---- 共有フォームbean ----
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// ---- サービスフォームbean ----
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 引き継ぎ情報dataMap作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		if (JFUScreenConst.SCREEN_ID_FUW06301.equals(nextScreenId) || JFUScreenConst.SCREEN_ID_FUW06401.equals(nextScreenId)
				|| JFUScreenConst.SCREEN_ID_FUW01501.equals(nextScreenId))
		{
			// 「チャンネル追加ボタン押下時」 or 「チャンネル解約ボタン押下時」 or 「コース変更ボタン押下時」or
			// 「チャンネル追加ボタン押下時（ＣＳコース）」 or 「チャンネル解約ボタン押下時（ＣＳコース）」
			// 遷移元画面ID
			dataMap.put(MOTO_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW09501);
		}

		if (JFUScreenConst.SCREEN_ID_FUW06802.equals(nextScreenId) || JFUScreenConst.SCREEN_ID_FUW07401.equals(nextScreenId)
				|| JFUScreenConst.SCREEN_ID_FUW07501.equals(nextScreenId) || JFUScreenConst.SCREEN_ID_FUW12001.equals(nextScreenId))
		{
			// 「STB追加変更ボタン押下時」 or 「コース変更予約確認ボタン押下」or 「STB追加変更申込内容確認ボタン押下時」 or 「コースSTB追加変更予約確認ボタン押下」
			// 遷移元画面ID
			dataMap.put(MOTO_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW09501);
		}

		if (JFUScreenConst.SCREEN_ID_FUW06601.equals(nextScreenId))
		{
			// ガイド誌変更ボタン押下時
			// メニューガイド誌冊数
			dataMap.put(FUW06601SFConst.MENU_GUIDE_SATSU_CNT, serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDEMG_MSKM_CNT, GET));
		}
		// 引継ぎ情報を設定
		JFUWebCommon.setScreenInfo(this, nextScreenId, dataMap);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, nextScreenId);

		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, nextScreenName);

		// 選択後到達画面ＩＤを設定 ※初期化
		commonInfoBean.sendMessageString(CommonInfoCFConst.SELECT_TTU_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// デバッグログ
		DEBUG_LOG.debug("----- setParam_FUW09501SFLogic End -----");
	}

	/**
	 * 引き継ぎ情報設定[CSコース] <BR>
	 * 
	 * @param nextScreenId 遷移先画面ID
	 * @param nextScreenName 遷移先画面名
	 * @param selectTtuScreenId 選択後到達画面ＩＤ ※CCAS選択後に遷移する画面
	 * @throws Exception 例外
	 */
	private void setParamTvCs(String nextScreenId, String nextScreenName, String selectTtuScreenId) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setParam_FUW09501SFLogic Start -----");
		// ---- 共有フォームbean ----
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 引き継ぎ情報dataMap作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		// 遷移元画面ID
		dataMap.put(MOTO_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW09501);
		// 引継ぎ情報を設定
		JFUWebCommon.setScreenInfo(this, selectTtuScreenId, dataMap);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, nextScreenId);

		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, nextScreenName);

		// ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）
		// 選択後到達画面ＩＤを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.SELECT_TTU_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, selectTtuScreenId);

		// デバッグログ
		DEBUG_LOG.debug("----- setParam_FUW09501SFLogic End -----");

	}

	/**
	 * 料金コースコードが新コースかどうか判定する <BR>
	 * 
	 * @param strPcrsCd 料金コースコード
	 * @return chk 判定結果
	 */
	private boolean chkNewPcrsCd(String strPcrsCd)
	{
		boolean chk = false;
		for (int i = 0; i < NEW_PCRS_CD.length; i++)
		{
			if (NEW_PCRS_CD[i].equals(strPcrsCd))
			{
				chk = true;
				return chk;
			}
		}
		return chk;
	}

	/**
	 * 料金コースコードが旧コースかどうか判定する <BR>
	 * 
	 * @param strPcrsCd 料金コードコード
	 * @return chk 判定結果
	 */
	private boolean chkOldPcrsCd(String strPcrsCd)
	{
		boolean chk = false;
		for (int i = 0; i < OLD_PCRS_CD.length; i++)
		{
			if (OLD_PCRS_CD[i].equals(strPcrsCd))
			{
				chk = true;
				return chk;
			}
		}
		return chk;
	}

	/**
	 * 契約情報を設定する(ＳＤ(旧）、ＨＤ(新)) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param pcrsMainBean サービス契約内訳(EKK0161B509)
	 * @param currentInfoMap カレント情報
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @param tvCsIdoMap ＣＳコースへの異動予約情報（予約がなければ空マップ）
	 * @throws Exception
	 */
	private void setKeiInfo(X31SDataBeanAccess serviceInfoBean, X31SDataBeanAccess pcrsMainBean, HashMap<String, String> currentInfoMap,
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap, HashMap<String, String> tvCsIdoMap)
			throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setKeiInfo_FUW09501SFLogic Start -----");
		// -------------------------------------------------
		// コースリストの設定
		// -------------------------------------------------
		// サービスフォームBean.コースリスト
		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEI_LIST);
		X31SDataBeanAccess keiListBean = null;
		// コース変更後サービス契約料金コース
		serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, SET, JFUStrConst.EMPTY);

		// データBean追加
		keiListBean = keiList.addDataBean();

		// サービス契約内訳ステータス
		String svcKeiUcwkStat = pcrsMainBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_05, GET);

		if (JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
		{
			// ■契約中(ステータスが「100」)
			// コースリスト.料金コースコード
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, pcrsMainBean.sendMessageString(FUW09501SFConst.PCRS_CD_05, GET));
			// コースリスト.料金コースコード名
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, pcrsMainBean.sendMessageString(FUW09501SFConst.PCRS_NM_05, GET));
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU);
		}
		else if (!JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
		{
			// ■申し込み手続き中(ステータスが「100」以外)
			// コースリスト.料金コースコード
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, pcrsMainBean.sendMessageString(FUW09501SFConst.PCRS_CD_05, GET));
			// コースリスト.料金コースコード名
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, pcrsMainBean.sendMessageString(FUW09501SFConst.PCRS_NM_05, GET));
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU_IGAI);
		}

		// ■予約中
		// 異動レコード有無フラグ(サービス契約内訳のステータスが"100"は"1"、それ以外は"0")
		String idoRsvFlg = pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_RSV_FLG_05, GET);
		// デバッグログ
		DEBUG_LOG.debug("★ 異動レコード有無フラグ ★：＝" + idoRsvFlg);
		// 異動レコード有無フラグをサービスフォームBeanに設定
		serviceInfoBean.sendMessageString(FUW09501SFConst.IDO_RSV_FLG, SET, idoRsvFlg);

		// 異動予約詳細コード
		String idoRsvDtlCd = pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_RSV_DTL_CD_05, GET);
		// デバッグログ
		DEBUG_LOG.debug("★ 異動予約詳細コード ★：＝" + idoRsvDtlCd);

		// 異動予約あり＆移動予約詳細コード＝003 コース変更
		if (IDO_RSV_FLG_ON.equals(idoRsvFlg) && IDO_RSV_DTL_CD_003.equals(idoRsvDtlCd))
		{
			String newPcrsCd = pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_NEW_PCRS_CD_05, GET);
			// コース変更後サービス契約料金コース
			serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, SET, newPcrsCd);
			if (JFUStrConst.CD00134_TV_CS_LIST.contains(newPcrsCd))
			{
				// ■ＣＳコースの予約情報を追加
				setTvCsIdoYoyaku(serviceInfoBean, tvCsIdoMap);
			}
			else
			{
				// 異動予約あり＆コース変更の場合
				keiListBean = keiList.addDataBean();
				// コースリスト.料金コースコード
				keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_NEW_PCRS_CD_05, GET));
				// コースリスト.料金コースコード名
				keiListBean
						.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_NEW_PCRS_NM_05, GET));
				// コースリスト.サービス契約内訳ステータス名
				keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, YOYAKU);
			}
		}

		// -------------------------------------------------
		// 契約情報表示フラグの設定
		// -------------------------------------------------
		if (IDO_RSV_FLG_OFF.equals(idoRsvFlg))
		{
			// 異動予約なしの場合
			if (ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_STB)) && ZERO.equals(currentInfoMap.get(RSV_CHANNEL_NEXT))
					&& ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_BS)) && ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_CORSE)))
			{
				// 「STB追加変更（サービス単位）、オプションチャンネル次月開始（トリガー）、
				//      ＢＳパススルー予約無し、コース変更予約（サービス単位）」全て無しの場合
				serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_1);
			}
			else if (!JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
			{
				// 締結済の場合は、「お申し込みできません」を表示しない
				serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_5);
			}
			else
			{
				// ボタン非表示
				serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_4);

				// テレビコース名表示切替からサービス名を取得
				HashMap parentMap = (HashMap)outputMap.get(CC_TITLE_FUSV012502CC);
				String retCd = (String)parentMap.get(RET_CD);
				String chafSvcNm = JFUStrConst.EMPTY;;
				String idoRsvNewPcrsCd = (String)parentMap.get(IDO_RSV_NEW_PCRS_CD);
				// コース変更後サービス契約料金コース
				serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, SET, idoRsvNewPcrsCd);

				// 戻り値が正常の場合
				if (JFUStrConst.RET_CD_OK.equals(retCd))
				{
					// 異動予約新料金コースコードがＣＳコースの場合、画面に表示する
					if (JFUStrConst.CD00134_TV_CS_LIST.contains(idoRsvNewPcrsCd))
					{
						// ■ＣＳコースの予約情報を追加
						setTvCsIdoYoyaku(serviceInfoBean, tvCsIdoMap);
					}
					// 異動予約新料金コースコードが地デジ・ＢＳコースの場合、画面に表示する
					else if (JFUStrConst.CD00134_A37.equals(idoRsvNewPcrsCd))
					{
						// 表示コース名初期設定（地デジ・ＢＳコース）
						chafSvcNm = JFUWebCommon.getDispItem(TV_EO_COURSE_NM_BS);

						// サービス名称(コース変更先)が地デジ・ＢＳコース　スターチャンネルセットの場合
						if (!JFUWebCommon.isNull(parentMap.get(CHAF_SVC_NM)))
						{
							// サービス名称(コース変更先)を設定
							chafSvcNm = (String)parentMap.get(CHAF_SVC_NM);
						}

						// データBean追加
						keiListBean = keiList.addDataBean();
						// コースリスト.料金コースコード名
						keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, chafSvcNm);
						// コースリスト.サービス契約内訳ステータス名
						keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, YOYAKU_BS);
					}
				}
			}
		}
		else if (IDO_RSV_FLG_ON.equals(idoRsvFlg) && IDO_RSV_DTL_CD_003.equals(idoRsvDtlCd))
		{
			// 異動予約あり＆コース変更の場合
			// 契約中の料金コースコードを取得
			String keiyakuPcrsCd = pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_OLD_PCRS_CD_05, GET);
			// 予約中の料金コースコードを取得
			String yoyakuPcrsCd = pcrsMainBean.sendMessageString(FUW09501SFConst.IDO_NEW_PCRS_CD_05, GET);
			// デバッグログ
			DEBUG_LOG.debug("★ 契約中料金コースコード ★：＝" + keiyakuPcrsCd);
			DEBUG_LOG.debug("★ 予約中料金コースコード ★：＝" + yoyakuPcrsCd);

			// 予約中が旧コースの場合
			if (chkOldPcrsCd(yoyakuPcrsCd))
			{
				// ※旧→旧
				serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_2);
			}
			// 予約中が新コースの場合
			else if (chkNewPcrsCd(yoyakuPcrsCd))
			{
				// 契約中が旧コースの場合
				if (chkOldPcrsCd(keiyakuPcrsCd))
				{
					// ※旧→新
					serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_3);
				}
				else if (chkNewPcrsCd(keiyakuPcrsCd))
				{
					// ※新→新
					serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_2);
				}
			}
		}

		// 機種変更中の予約データがある場合
		if (isKikiMdlChgRsvcvSvcKei(outputMap))
		{
			serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_4);
		}

		// デバッグログ
		DEBUG_LOG.debug("----- setKeiInfo_FUW09501SFLogic End -----");
	}

	/**
	 * 契約情報の設定(地デジBS) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param svcKeiStat サービス契約ステータス
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @param tvCsIdoMap ＣＳコースへの異動予約情報（予約がなければ空マップ）
	 * @throws Exception
	 * 
	 */
	private void setKeiInfoBs(X31SDataBeanAccess serviceInfoBean, String svcKeiStat, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, String> tvCsIdoMap) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setKeiInfoBs_FUW09501SFLogic Start -----");
		// サービスフォームBean.契約情報リスト(FUSV012503SC: EKK0081B515 サービス契約一覧照会)
		X31SDataBeanAccessArray keiyakuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEIYAKU_LIST);
		// 契約情報Bean
		X31SDataBeanAccess keiyakuBean = keiyakuList.getDataBean(0);
		// コース変更後サービス契約料金コース
		serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, SET, JFUStrConst.EMPTY);

		// テレビコース名表示切替からサービス名と料金プランコードを取得
		HashMap parentMap = (HashMap)outputMap.get(CC_TITLE_FUSV012502CC);
		String chbfSvcNm = (String)parentMap.get(CHBF_SVC_NM);
		String chbfPplncd = (String)parentMap.get(CHBF_PPLN_CD);
		
		// -------------------------------------------------
		// コースリストの設定
		// -------------------------------------------------
		// サービスフォームBean.コースリスト
		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEI_LIST);
		X31SDataBeanAccess keiListBean = null;
		// ■契約中
		keiListBean = keiList.addDataBean();
		// コースリスト.料金コースコード
		keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, keiyakuBean.sendMessageString(FUW09501SFConst.PCRS_CD_04, GET));
		// コースリスト.料金コースコード名
		if (!JFUWebCommon.isNull(chbfSvcNm))
		{
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, chbfSvcNm);
		}
		else
		{
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, keiyakuBean.sendMessageString(FUW09501SFConst.PCRS_NM_04, GET));
		}

		if (JFUStrConst.CD00037_100.equals(svcKeiStat))
		{
			// サービス契約のステータスが提供中の場合 *地デジ・BSの場合は、サービス契約内訳が無いので、サービス契約のステータスで表示・非表示を判定
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU);
		}
		else
		{
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU_IGAI);
		}
		
		// ■予約中
		// 異動レコード有無フラグ(異動予約（下記の異動予約詳細コード)が存在する場合は"1"、それ以外は"0")
		String idoRsvFlg = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_RSV_FLG_05, GET);
		// 異動予約詳細コード('003'コース変更,'005' サービス休止,'006' サービス休止解除,'007' サービス解約,'009' 回線利用場所変更)
		String idoRsvDtlCd = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_RSV_DTL_CD_05, GET);
		// デバッグログ
		DEBUG_LOG.debug("★ 異動レコード有無フラグ ★：＝" + idoRsvFlg);
		DEBUG_LOG.debug("★ 異動予約詳細コード ★：＝" + idoRsvDtlCd);

		if (IDO_RSV_FLG_ON.equals(idoRsvFlg) && IDO_RSV_DTL_CD_003.equals(idoRsvDtlCd))
		{
			String newPcrsCd = JFUStrConst.EMPTY;
			// 異動予約あり＆コース変更の場合
			// 内訳リスト
			X31SDataBeanAccessArray pcrsList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.PCRS_LIST);
			for (int i = 0; i < pcrsList.getCount(); i++)
			{
				X31SDataBeanAccess pcrsListBean = pcrsList.getDataBean(i);
				keiListBean = keiList.addDataBean();
				newPcrsCd = nullToBlank(pcrsListBean.sendMessageString(FUW09501SFConst.PCRS_CD_05, GET));
				// コースリスト.料金コースコード
				keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, pcrsListBean.sendMessageString(FUW09501SFConst.PCRS_CD_05, GET));
				// コースリスト.料金コースコード名
				keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, pcrsListBean.sendMessageString(FUW09501SFConst.PCRS_NM_05, GET));
				// コースリスト.サービス契約内訳ステータス名
				keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, YOYAKU_BS);
			}
			// ■ＣＳコースの予約情報を追加
			if (JFUWebCommon.isNull(newPcrsCd))
			{
				newPcrsCd = setTvCsIdoYoyaku(serviceInfoBean, tvCsIdoMap);
			}
			serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, SET, newPcrsCd);
		}
		else
		{
			// （住所変更を含む）コース変更が無く、地デジ・ＢＳコース　スターチャンネルセットの場合は、「SVC_KEI_UCWK_STAT_NM_01」を上書き
			// ※jspにて、「SVC_KEI_UCWK_STAT_NM_01」の値により表示文言を制御している
			// 住所変更でない場合は、「現在お申し込みできません。」、住所変更の場合は、「契約中」と表示する
			if (IDO_RSV_FLG_OFF.equals(idoRsvFlg) && !JFUStrConst.CD00002_1.equals(serviceInfoBean.sendMessageString(FUW09501SFConst.AD_CHG_UM, GET)) && JFUStrConst.CD00565_PZ0201.equals(chbfPplncd))
			{
				// コースリスト.サービス契約内訳ステータス名
				keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU_MSKM_FUKA);
			}
		}

		// -------------------------------------------------
		// 契約情報表示フラグの設定
		// -------------------------------------------------
		if (IDO_RSV_FLG_OFF.equals(idoRsvFlg))
		{
			// 異動予約なしの場合(契約中のみ)
			serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_1);
		}
		else
		{
			// 異動予約ありの場合(予約中あり)
			serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_4);
		}
		
		// -------------------------------------------------
		// テレビチューナー情報表示フラグの設定
		// ※コース変更ボタン表示用
		// -------------------------------------------------
		// テレビチューナー情報表示フラグ
		serviceInfoBean.sendMessageString(FUW09501SFConst.TV_DISP_FLG, SET, TV_DISP_FLG_1);
		
		// デバッグログ
		DEBUG_LOG.debug("----- setKeiInfoBs_FUW09501SFLogic End -----");
	}

	/**
	 * 契約情報の設定(ＣＳコース) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param svcKeiStat サービス契約ステータス
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @param tvCsIdoMap ＣＳコースへの異動予約情報（予約がなければ空マップ）
	 * @throws Exception
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void setKeiInfoCs(X31SDataBeanAccess serviceInfoBean, String svcKeiStat, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, String> tvCsIdoMap) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setKeiInfoBs_FUW09501SFLogic Start -----");
		// サービスフォームBean.契約情報リスト(FUSV012503SC: EKK0081B515 サービス契約一覧照会)
		X31SDataBeanAccessArray keiyakuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEIYAKU_LIST);
		// 契約情報Bean
		X31SDataBeanAccess keiyakuBean = keiyakuList.getDataBean(0);
		// コース変更後サービス契約料金コース
		serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, SET, JFUStrConst.EMPTY);

		// テレビコース名表示切替からサービス名と料金プランコードを取得
		HashMap parentMap = (HashMap)outputMap.get(CC_TITLE_FUSV012502CC);
		String chbfSvcNm = (String)parentMap.get(CHBF_SVC_NM);
		String chbfPplncd = (String)parentMap.get(CHBF_PPLN_CD);
		String pcrsCd = keiyakuBean.sendMessageString(FUW09501SFConst.PCRS_CD_04, GET);
		String pplanNm = keiyakuBean.sendMessageString(FUW09501SFConst.PPLAN_NM_04, GET);
		
		// -------------------------------------------------
		// コースリストの設定
		// -------------------------------------------------
		// サービスフォームBean.コースリスト
		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEI_LIST);
		X31SDataBeanAccess keiListBean = null;
		// ■契約中
		keiListBean = keiList.addDataBean();
		// コースリスト.料金コースコード
		keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, keiyakuBean.sendMessageString(FUW09501SFConst.PCRS_CD_04, GET));
		// コースリスト.料金コースコード名
		if (!JFUWebCommon.isNull(chbfSvcNm))
		{
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, chbfSvcNm);
		}
		else
		{
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, pplanNm);
		}

		if (JFUStrConst.CD00037_100.equals(svcKeiStat))
		{
			// サービス契約のステータスが提供中の場合 「ＣＳコース」の場合は、サービス契約内訳が無いので、サービス契約のステータスで表示・非表示を判定
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU);
		}
		else
		{
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU_IGAI);
		}
		
		// ■予約中
		// 異動レコード有無フラグ(異動予約（下記の異動予約詳細コード)が存在する場合は"1"、それ以外は"0")
		String idoRsvFlg = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_RSV_FLG_05, GET);
		// 異動予約詳細コード('003'コース変更,'005' サービス休止,'006' サービス休止解除,'007' サービス解約,'009' 回線利用場所変更)
		String idoRsvDtlCd = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_RSV_DTL_CD_05, GET);
		String newPcrsCd = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_NEW_PCRS_CD_05, GET);

		// デバッグログ
		DEBUG_LOG.debug("★ 異動レコード有無フラグ ★：＝" + idoRsvFlg);
		DEBUG_LOG.debug("★ 異動予約詳細コード ★：＝" + idoRsvDtlCd);

		if (IDO_RSV_FLG_ON.equals(idoRsvFlg) && IDO_RSV_DTL_CD_003.equals(idoRsvDtlCd))
		{
			// 異動予約あり＆コース変更の場合
			// 内訳リスト
			X31SDataBeanAccessArray pcrsList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.PCRS_LIST);
			for (int i = 0; i < pcrsList.getCount(); i++)
			{
				X31SDataBeanAccess pcrsListBean = pcrsList.getDataBean(i);
				keiListBean = keiList.addDataBean();
				// コースリスト.料金コースコード
				keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, pcrsListBean.sendMessageString(FUW09501SFConst.PCRS_CD_05, GET));
				// コースリスト.料金コースコード名
				keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, pcrsListBean.sendMessageString(FUW09501SFConst.PCRS_NM_05, GET));
				// コースリスト.サービス契約内訳ステータス名
				keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, YOYAKU_BS);
			}
			// ■ＣＳコースの予約情報を追加
			setTvCsIdoYoyaku(serviceInfoBean, tvCsIdoMap);
			// ■地デジコースの予約情報を追加
			if (JFUStrConst.CD00134_A37.equals(newPcrsCd))
			{
				setChidejiIdo(serviceInfoBean, outputMap);
			}
		}
		else
		{
			// （住所変更を含む）コース変更が無く、地デジ・ＢＳコース　スターチャンネルセットの場合は、「SVC_KEI_UCWK_STAT_NM_01」を上書き
			// ※jspにて、「SVC_KEI_UCWK_STAT_NM_01」の値により表示文言を制御している
			// 住所変更でない場合は、「現在お申し込みできません。」、住所変更の場合は、「契約中」と表示する
			if (IDO_RSV_FLG_OFF.equals(idoRsvFlg) && !JFUStrConst.CD00002_1.equals(serviceInfoBean.sendMessageString(FUW09501SFConst.AD_CHG_UM, GET)) && JFUStrConst.CD00565_PZ0201.equals(chbfPplncd))
			{
//				// コースリスト.サービス契約内訳ステータス名
//				keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU_MSKM_FUKA);
				// コースリスト.サービス契約内訳ステータス名
				keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, KEIYAKU);
			}
		}

		// -------------------------------------------------
		// 契約情報表示フラグの設定
		// -------------------------------------------------
		if (IDO_RSV_FLG_OFF.equals(idoRsvFlg))
		{
			if (JFUWebCommon.isAnk4673Open(JFUWebCommon.getOpeDate(this, null)))
			{
				// 異動予約なしの場合(契約中のみ)
				serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_1);
			} else {
				// TODO: ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）暫定対応のため、変更ボタンは非表示
				serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_5);
			}
		}
		else
		{
			// 異動予約ありの場合(予約中あり)
			serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_4);
		}
		
		// -------------------------------------------------
		// テレビチューナー情報表示フラグの設定
		// ※コース変更ボタン表示用
		// -------------------------------------------------
		// テレビチューナー情報表示フラグ
		serviceInfoBean.sendMessageString(FUW09501SFConst.TV_DISP_FLG, SET, TV_DISP_FLG_1);

		// 機種変更中の予約データがある場合
		if (isKikiMdlChgRsvcvSvcKei(outputMap))
		{
			serviceInfoBean.sendMessageString(FUW09501SFConst.KEI_DISP_FLG, SET, KEI_DISP_FLG_4);
		}

		// デバッグログ
		DEBUG_LOG.debug("----- setKeiInfoBs_FUW09501SFLogic End -----");
	}

	/**
	 * オプションチャンネル契約内容の設定(ＳＤ(旧）、ＨＤ(新)) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param currentInfoMap カレント情報
	 * @param outputMap 
	 * @throws Exception
	 */
	private void setOpInfo(X31SDataBeanAccess serviceInfoBean, HashMap<String, String> currentInfoMap,
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setOpInfo_FUW09501SFLogic Start -----");
		// オプションリスト(FUSV012505SC: EKK0351B507)
		X31SDataBeanAccessArray opList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.OP_LIST);
		// デバッグログ
		DEBUG_LOG.debug("★ オプションリスト件数 ★：＝" + opList.getCount());
		// 選択したサービス契約内訳番号に紐付くオプションチャンネルの件数を取得
		String svcKeiUcwkNo = serviceInfoBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_NO, GET);
		int opChannelCng = 0;
		for (int i = 0; i < opList.getCount(); i++)
		{
			X31SDataBeanAccess opListBean = opList.getDataBean(i);
			if (svcKeiUcwkNo.equals(opListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_NO_06, GET)))
			{
				// 選択したCCAS番号に紐付くサービス契約内訳番号と合致した場合のみカウントする
				opChannelCng++;
			}
		}

		if (opChannelCng > CNT_0)
		{
			// 契約状態「契約中」文言
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_STAT_NM, SET, SVC_KEI_STAT_KEIYAKU);
			// オプション契約表示フラグ（解約ボタン表示）
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_1);
		}
		else
		{
			// 契約状態「未契約」文言
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_STAT_NM, SET, SVC_KEI_STAT_MI_KEIYAKU);
			// オプション契約表示フラグ（解約ボタン非表示）
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_2);
		}

		if (!(ZERO.equals(currentInfoMap.get(RSV_STAT_STB)) && ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_BS)) && ZERO.equals(currentInfoMap
				.get(RSV_STAT_CORSE))))
		{
			// 「STB追加変更（トリガー）、ＢＳパススルー予約、 コース変更予約（トリガー）」の何れかがある場合
			// ボタン非表示
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_3);
		}

		// 機種変更中の予約データ（サービス契約内訳）がある場合
		if (isKikiMdlChgRsvcvSvcKeiUcwk(outputMap))
		{
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_3);
		}

		// デバッグログ
		DEBUG_LOG.debug("----- setOpInfo_FUW09501SFLogic End -----");
	}

	/**
	 * eo光テレビガイドの設定(ＳＤ(旧）、ＨＤ(新)、ＣＳ) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @throws Exception
	 * 
	 */
	private void setTvGuideInfo(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
			throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setTvGuideInfo_FUW09501SFLogic Start -----");
		// ガイドリスト(FUSV012506SC: EKK0351B510)
		X31SDataBeanAccessArray guideList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.GUIDE_LIST);
		// 異動予約リスト(FUSV012510SC: EKK1681B501)
		X31SDataBeanAccessArray idoRsvList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.IDO_RSV_LIST);

		// ■eo光テレビガイド
		// ローカル変数.ケーブルガイド申込数に、初期値「0」を設定
		int guidemgMskmCnt = getGuidemgMskmCnt(serviceInfoBean, outputMap);

		// デバッグログ
		DEBUG_LOG.debug("★ ケーブルガイド申込数 ★：＝" + guidemgMskmCnt);

		// ｅｏ光テレビガイド誌冊数
		serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDEMG_MSKM_CNT, SET, String.valueOf(guidemgMskmCnt));

		// ■ガイド誌表示フラグの設定処理
		// デバッグログ
		DEBUG_LOG.debug("★ ガイドリスト件数 ★：＝" + guideList.getCount());
		if (guideList.getCount() == CNT_0)
		{
			// -------------------------------------------------
			// ガイドリストが0件の場合
			// -------------------------------------------------
			// ガイド誌表示フラグに1：表示を設定
			serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_DISP_FLG, SET, GUIDE_DISP_FLG_1);
		}
		else if (guideList.getCount() == CNT_1)
		{
			// -------------------------------------------------
			// ガイドリストが1件の場合
			// -------------------------------------------------
			if (idoRsvList.getCount() == 0)
			{
				// -------------------------------------------------
				// 異動予約リストが0件の場合（解約なし）
				// -------------------------------------------------
				// デバッグログ
				DEBUG_LOG.debug("★ 異動予約なし ★");
				X31SDataBeanAccess guideListBean = guideList.getDataBean(0);
				// オプションサービス契約ステータス
				String opSvcKeiStat = guideListBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_STAT_07, GET);
				// デバッグログ
				DEBUG_LOG.debug("★ オプションサービス契約ステータス ★：＝" + opSvcKeiStat);

				if (JFUStrConst.CD00037_100.equals(opSvcKeiStat))
				{
					// サービス提供中の場合、1：表示を設定
					serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_DISP_FLG, SET, GUIDE_DISP_FLG_1);
				}
				else
				{
					// サービス提供中以外の場合、2：非表示を設定
					serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_DISP_FLG, SET, GUIDE_DISP_FLG_2);
				}
			}
			else
			{
				// -------------------------------------------------
				// 異動予約リストが0件以外の場合（解約あり）
				// -------------------------------------------------
				// デバッグログ
				DEBUG_LOG.debug("★ 異動予約あり ★");
				// ガイド誌表示フラグに2：非表示を設定
				serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_DISP_FLG, SET, GUIDE_DISP_FLG_2);
			}
		}
		else
		{
			// -------------------------------------------------
			// ガイドリストが1件以上の場合
			// -------------------------------------------------
			// ガイド誌表示フラグに2：非表示を設定
			serviceInfoBean.sendMessageString(FUW09501SFConst.GUIDE_DISP_FLG, SET, GUIDE_DISP_FLG_2);
		}
		// デバッグログ
		DEBUG_LOG.debug("----- setTvGuideInfo_FUW09501SFLogic End -----");
	}

	/**
	 * eo光テレビチューナーの設定(ＳＤ(旧）、ＨＤ(新)) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param stbMainBean 機器提供サービス契約カレントレコード
	 * @param currentInfoMap カレント情報
	 * @param outputMap 
	 * @throws Exception
	 * 
	 */
	private void setTvTunerInfo(X31SDataBeanAccess serviceInfoBean, X31SDataBeanAccess stbMainBean, HashMap<String, String> currentInfoMap,
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setTvTunerInfo_FUW09501SFLogic Start -----");

		// テレビチューナー情報表示フラグ
		//   次月開始のオプションチャンネル(ステータス＝014)がある場合は、コース変更、STB追加は出来ないようになっている
		//　　　初期値設定「JFUStrConst.EMPTY」
		String tvDispFlg = JFUStrConst.EMPTY;
		String stbId = currentInfoMap.get(CURR_STB_ID);

		// 台数文言表示フラグ(初期値：表示）
		serviceInfoBean.sendMessageString(FUW09501SFConst.TV_DAISU_FLG, SET, TV_DAISU_DISP_FLG_1);

		int stbCnt = Integer.parseInt(currentInfoMap.get(STB_CNT)); //STB トリガーSTB以外の台数
		int intStbMaxCnt = Integer.parseInt(currentInfoMap.get(INT_STB_MAX_CNT)); //STB 契約可能最大数
//		int allStbCnt = Integer.parseInt(currentInfoMap.get(ALL_STB_CNT)); //STB STBの契約台数
//		int maxHddCapaCnt = Integer.parseInt(currentInfoMap.get(MAX_HDD_CAPA_CNT)); //STB 最上位HDD CAPA

		if (stbCnt >= intStbMaxCnt)
		{
			// トリガーのSTBを除く契約台数が５台以上(メゾンは１台以上)
			tvDispFlg = TV_DISP_FLG_3;
			// 最大機器数よりも多い台数を保持していると判断する
			serviceInfoBean.sendMessageBoolean(FUW09501SFConst.KIKI_MAX_OVER_FLG, SET, true);
		}
		else if (ONE.equals(currentInfoMap.get(RSV_STAT_STB)))
		{
			// STB予約中 画面上は、トリガーとなった機器の変更分を「予約手続中」として表示する（追加分はメニューでは表示しない）
			tvDispFlg = TV_DISP_FLG_2;
			// 台数文言表示フラグ(非表示)
			serviceInfoBean.sendMessageString(FUW09501SFConst.TV_DAISU_FLG, SET, TV_DAISU_DISP_FLG_0);
		}
//		else if (allStbCnt >= intStbMaxCnt && allStbCnt <= maxHddCapaCnt)
//		{
//			// 「ＳＴＢ契約可能最大数」かつ 「全ての機器で「機器のステータス＝サービス提供中」＆「STB機器が最上位機種」の場合」は、STBの変更は不可
//			tvDispFlg = TV_DISP_FLG_0;
//		}
		else if (ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_STB)) && ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_CORSE))
				&& ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_BS)))
		{
			// オプションチャンネル次月開始（トリガー）ありでも非表示としない(判定自体を行わない)
			// 「ＳＴＢ変更予約(サービス単位)
			//     ＢＳパススルー予約、コース変更予約有無（サービス単位）」全て無し
			tvDispFlg = TV_DISP_FLG_1;
		}
		else
		{
			// ボタン非表示
			tvDispFlg = TV_DISP_FLG_4;
		}

		String newPcrsCd = serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, GET);
		// ＣＳコースへのコース変更がある場合
		if (JFUStrConst.CD00134_TV_CS_LIST.contains(newPcrsCd))
		{
			tvDispFlg = TV_DISP_FLG_4;
		}
		// 機種変更中の予約データ（サービス契約、サービス契約内訳）がある場合
		else if (isStbKikiMdlChgRsvcvSvcKeiUcwk(outputMap))
		{
			tvDispFlg = TV_DISP_FLG_2;
		}
		else if (isKikiMdlChgRsvcvSvcKei(outputMap))
		{
			tvDispFlg = TV_DISP_FLG_4;
		}

		// テレビチューナー情報表示フラグ
		serviceInfoBean.sendMessageString(FUW09501SFConst.TV_DISP_FLG, SET, tvDispFlg);
		// デバッグログ
		DEBUG_LOG.debug("★ テレビチューナー情報表示フラグ ★：＝" + tvDispFlg);

		// -------------------------------------------------
		// ｅｏ光テレビチューナー変更リストの設定
		// -------------------------------------------------
		X31SDataBeanAccessArray tvList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.TV_LIST);
		X31SDataBeanAccess tvListBean = null;
		// ■契約中
		tvListBean = tvList.addDataBean();
		// ｅｏ光テレビチューナー変更リスト.料金コースコード名
		tvListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_02, SET, stbMainBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_03, GET));
		// ｅｏ光テレビチューナー変更リスト.サービス契約内訳ステータス名
		tvListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_02, SET, KEIYAKU);
		// ｅｏ光テレビチューナー変更リスト.ＳＴＢ−ＩＤ
		tvListBean.sendMessageString(FUW09501SFConst.STB_ID_02, SET, DSP_STB_ID + stbId);

		// STB6台保持しているデータの場合は、予約のレコードを格納しない
		if (!TV_DISP_FLG_3.equals(tvDispFlg))
		{
			// ■予約中
			if (ONE.equals(currentInfoMap.get(RSV_STAT_STB)))
			{
				tvListBean = tvList.addDataBean();
				// ｅｏ光テレビチューナー変更リスト.料金コースコード名
				tvListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_02, SET, stbMainBean
						.sendMessageString(FUW09501SFConst.RSV_PCRS_CD_NM_03, GET));
				// ｅｏ光テレビチューナー変更リスト.サービス契約内訳ステータス名
				tvListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_02, SET, YOYAKU);

				if (TV_DISP_FLG_2.equals(tvDispFlg))
				{
					// STB予約中
					// ｅｏ光テレビチューナー変更リスト.ＳＴＢ−ＩＤ
					// 「申し込み手続き中」
					tvListBean.sendMessageString(FUW09501SFConst.STB_ID_02, SET, JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW09501,
							TV_LIST_MSG1));
				}
			}
		}
		// デバッグログ
		DEBUG_LOG.debug("----- setTvTunerInfo_FUW09501SFLogic End -----");
	}

	/**
	 * BSパススルーの設定(ＳＤ(旧）、ＨＤ(新)) <BR>
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceInfoBean サービスフォームBean
	 * @param currentInfoMap カレント情報
	 * @param outputMap サービス処理結果格納用マップ
	 * @param bsptWribTekiyoFlg BSパススルー工事費割引CP適用済フラグ
	 * @throws Exception
	 * 
	 */
	private void setBsPassInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceInfoBean, HashMap<String, String> currentInfoMap,
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap, String bsptWribTekiyoFlg) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setBsPassInfo_FUW09501SFLogic Start -----");
		String mansionBukkenCd = currentInfoMap.get(CURR_MANSION_BUKKEN_CD);
		String vonuBsptKh = currentInfoMap.get(CURR_VONU_BSPT_KH);

		// サービスフォームBean.契約情報リスト
		X31SDataBeanAccessArray keiyakuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEIYAKU_LIST);
		// 契約情報Bean
		X31SDataBeanAccess keiyakuBean = keiyakuList.getDataBean(0);

		// -------------------------------------------------
		// BSパススルー情報表示フラグの設定
		// -------------------------------------------------
		// 料金コースコード　※契約中
		String pcrsCdKeiyaku = keiyakuBean.sendMessageString(FUW09501SFConst.PCRS_CD_04, GET);
		// デバッグログ
		DEBUG_LOG.debug("★ 契約中料金コースコード ★：＝" + pcrsCdKeiyaku);
		DEBUG_LOG.debug("★ BSパススルー工事費割引CP適用済フラグ ★：＝" + bsptWribTekiyoFlg);

		String newPcrsCd = serviceInfoBean.sendMessageString(FUW09501SFConst.NEW_SVCKEI_PCRSCD, GET);

		if (JFUStrConst.CD00134_A38.equals(pcrsCdKeiyaku))
		{
			// 契約中が旧コース(SD)の場合、ＢＳエリアを非表示
			serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_3);

			serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_CNG_FLG, SET, ZERO);
			if (!BSPTKEI_FLG_ON.equals(vonuBsptKh))
			{
				// BSパススルー非対応機の場合
				// キャンペーン対象を選定するために、コース変更をした場合にBSパススルーが申し込める状態かどうかを判定する

				if (!JFUStrConst.CD01228_001.equals(mansionBukkenCd))
				{
					// マンション物件コードが「001:マンション」以外の場合

					// 【申込可能】
					if (ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_CORSE)) && ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_STB)))
					{
						// ＢＳパススルーを申し込める対象者として判定（使用箇所はTV用キャンペーン文言カスタムタグで使用）
						serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_CNG_FLG, SET, ONE);
					}
				}
			}
		}
		else
		{
			// 契約中が新コース(HD)の場合
			if (BSPTKEI_FLG_ON.equals(vonuBsptKh))
			{
				// BSパススルー対応機の場合、ＢＳエリアを非表示
				serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_3);
			}
			else
			{
				// BS予約中の場合
				if (!ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_BS)))
				{
					// 予約中
					serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_2);
				}
				else
				{
					// BSパススルー非対応機の場合
					// キャンペーン対象を選定するために、コース変更をした場合にBSパススルーが申し込める状態かどうかを判定する
					if (!JFUStrConst.CD01228_001.equals(mansionBukkenCd))
					{
						// マンション物件コードが「001:マンション」以外の場合
						// 【申込可能】

						if (ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_CORSE)) && ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_STB)))
						{
							if (JFUWebCommon.OUT_PARAM_WRIB_STS_FLG_1.equals(bsptWribTekiyoFlg))
							{
								// ＢＳエリアを非表示（BSパススルーCP割引が適用済で、BSパススルー非対応はありえないが念のため）
								serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_3);
							}
							else
							{
								// 「コース変更予約（サービス単位）、ＳＴＢ追加変更予約（サービス単位）」全て無しの場合
								serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_1);
							}
						}
						else
						{
							if (JFUWebCommon.OUT_PARAM_WRIB_STS_FLG_1.equals(bsptWribTekiyoFlg))
							{
								// ＢＳエリアを非表示（BSパススルーCP割引が適用済で、BSパススルー非対応はありえないが念のため）
								serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_3);
							}
							else
							{ // ボタン非表示
								serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_4);
							}
						}
					}
					else
					{
						// ＢＳエリアを非表示
						serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_3);
					}
				}

				// 機種変更中の予約データ（サービス契約）がある場合
				if (isKikiMdlChgRsvcvSvcKei(outputMap))
				{
					DEBUG_LOG.debug("★ BSパススルー 機種変更中の予約データ（サービス契約）あり ★");
					if (JFUWebCommon.OUT_PARAM_WRIB_STS_FLG_1.equals(bsptWribTekiyoFlg))
					{
						// ＢＳエリアを非表示（BSパススルーCP割引が適用済で、BSパススルー非対応はありえないが念のため）
						serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_3);
					}
					else
					{
						// ボタン非表示
						serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_4);
					}
				}

				// ＣＳコースへのコース変更がある場合
				if (JFUStrConst.CD00134_TV_CS_LIST.contains(newPcrsCd))
				{
					// ボタン非表示
					serviceInfoBean.sendMessageString(FUW09501SFConst.BSPASS_DISP_FLG, SET, BSPASS_DISP_FLG_4);
				}

			}
		}
		// デバッグログ
		DEBUG_LOG.debug("----- setBsPassInfo_FUW09501SFLogic End -----");
	}

	/**
	 * 共有フォームBeanからの取得 <BR>
	 * @param commonInfoBean 共有フォームBean
	 * @return HashMap<String, String> カレント情報
	 * @throws Exception
	 * 
	 */
	private HashMap<String, String> getCommonInfo(X31SDataBeanAccess commonInfoBean) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getCommonInfo_FUW09501SFLogic Start -----");

		HashMap<String, String> currentInfoMap = new HashMap<String, String>();
		// サービス契約番号
		String svckeino = JFUStrConst.EMPTY;
		// サービス契約内訳番号
		String svcKeiUcwkNo = JFUStrConst.EMPTY;
		// 料金コースコード
		String pcrsCd = JFUStrConst.EMPTY;
		// 宅内機器型式コード
		String taknkikiModelCd = JFUStrConst.EMPTY;
		// Ｃ−ＣＡＳカード番号
		String ccasCardNo = JFUStrConst.EMPTY;
		// 機器製造番号
		String kikiSeizoNoStb = JFUStrConst.EMPTY;
		// 機器提供サービス契約番号
		String kktkSvcKeiNo = JFUStrConst.EMPTY;
		// サービス契約ステータス
		String svcKeiStat = JFUStrConst.EMPTY;
		// サービス契約内訳ステータス
		String svcKeiUwStat = JFUStrConst.EMPTY;
		// eoTV機器設置承認状態コード
		String eoTvKkStSnnJtCd = JFUStrConst.EMPTY;
		// 住所形態コード
		String adFormCd = JFUStrConst.EMPTY;
		// マンション物件番号
		String mansionBukkenNo = JFUStrConst.EMPTY;
		// 契約状態エラーフラグ 0:エラーでない 1:エラー
		String keiStatErrFlg = "0";

		// 共有フォームBean.ＳＳＯ情報
		X31SDataBeanAccess ssoInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SSO_INFO);
		// ＳＳＯ情報.Ｃ−ＣＡＳカード番号
		ccasCardNo = editKikiSeizoNo(ssoInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_21, GET));
		// ＳＳＯ情報.機器製造番号
		kikiSeizoNoStb = ssoInfo.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_STB_21, GET);

		// 共有フォームBean.サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);
		// サービス契約情報.サービス契約番号
		svckeino = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, GET);
		// サービス契約情報.料金コースコード
		pcrsCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PCRS_CD_23, GET);

		if (JFUStrConst.CD00134_A23.equals(pcrsCd) || JFUStrConst.CD00134_A75.equals(pcrsCd))
		{
			// サービス契約の料金コースコードが、eo光テレビ再送信、eo光テレビ再送信（地デジ・ＢＳコース）の場合

			// 業務共通例外クラス："0102"（契約状態エラー）
			DEBUG_LOG.info("■■■FUW09501 サービス契約情報料金コースコードエラー(料金コースコード：" + pcrsCd + ")");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 共有フォームBean.サービス契約回線内訳情報
		X31SDataBeanAccess svcKeiKaisenUcwkInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_KAISEN_UCWK_INFO);
		// サービス契約回線内訳情報.マンション物件番号
		mansionBukkenNo = svcKeiKaisenUcwkInfoBean.sendMessageString(CommonInfoCFConst.MANSION_BUKKEN_NO_26, GET);
		// サービス契約回線内訳情報.住所形態コード
		adFormCd = svcKeiKaisenUcwkInfoBean.sendMessageString(CommonInfoCFConst.AD_FORM_CD_26, GET);

		// -------------------------------------------------
		// サービス契約内訳番号、宅内機器型式コードの取得
		// -------------------------------------------------
		// 共有フォームBean.機器提供サービス契約情報
		X31SDataBeanAccessArray kktkSvcKeiInfoBeanArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.KKTK_SVC_KEI_INFO);

		// サービス契約ステータス
		svcKeiStat = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_STAT_23, GET);

		if (JFUStrConst.CD00134_TV_CS_LIST.contains(pcrsCd))
		{
			// ＣＳコース ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）
			if (!(JFUStrConst.CD00037_030.equals(svcKeiStat) || JFUStrConst.CD00037_100.equals(svcKeiStat)))
			{
				// ステータスが「030」「100」以外の場合エラー
				keiStatErrFlg = KEI_STAT_ERR_FLG_1;
			}
		}
		else if (!JFUStrConst.CD00134_A37.equals(pcrsCd))
		{
			// 料金コースコードが「A37：地デジ・BSコース」以外の場合

			// 機器提供サービス契約情報.機器提供サービス契約ステータス格納用変数
			String kktkSvcKeiStat = null;

			for (int i = 0; i < kktkSvcKeiInfoBeanArray.getCount(); i++)
			{
				X31SDataBeanAccess kktkSvcKeiInfoBean = kktkSvcKeiInfoBeanArray.getDataBean(i);
				// 機器提供サービス契約情報.機器製造番号を取得
				String kikiSeizoNo = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, GET);

				// ＳＳＯ情報.機器製造番号と機器提供サービス契約情報.機器製造番号が同じ場合
				if (kikiSeizoNoStb.equals(kikiSeizoNo))
				{
					// 機器提供サービス契約情報.機器提供サービス契約ステータス
					kktkSvcKeiStat = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_STAT_27, GET);
					// 機器提供サービス契約情報.eoTV機器設置承認状態コード
					eoTvKkStSnnJtCd = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.EO_TV_KKST_SNN_STAT_CD_27, GET);
					// 機器提供サービス契約情報.サービス契約内訳番号
					svcKeiUcwkNo = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_UCWK_NO_27, GET);

					break;
				}
			}

			// サービス契約内訳ステータス
			svcKeiUwStat = getSvcKeiUwStat(commonInfoBean, svcKeiUcwkNo);

			// 機器提供サービス契約ステータスチェック
			if (!JFUStrConst.CD00056_030.equals(kktkSvcKeiStat) && !JFUStrConst.CD00056_100.equals(kktkSvcKeiStat))
			{
				// 機器提供サービス契約ステータスが「030」または「100」以外の場合エラー
				keiStatErrFlg = KEI_STAT_ERR_FLG_1;
			}
			// eoTV機器設置承認状態コードチェック
			if (!JFUStrConst.CD00644_1.equals(eoTvKkStSnnJtCd) && !JFUStrConst.CD00644_2.equals(eoTvKkStSnnJtCd))
			{
				// 機器提供サービス契約情報.eoTV機器設置承認状態コードが「1」または「2」以外の場合エラー
				keiStatErrFlg = KEI_STAT_ERR_FLG_1;
			}
		}
		else if (JFUStrConst.CD00134_A37.equals(pcrsCd))
		{
			// 料金コースコードが「A37：地デジ・BSコース」の場合
			if (!(JFUStrConst.CD00037_030.equals(svcKeiStat) || JFUStrConst.CD00037_100.equals(svcKeiStat)))
			{
				// ステータスが「030」「100」以外の場合エラー
				keiStatErrFlg = KEI_STAT_ERR_FLG_1;
			}
		}

		// -------------------------------------------------
		// 機器提供サービス契約番号(VONU)の取得
		// -------------------------------------------------
		for (int i = 0; i < kktkSvcKeiInfoBeanArray.getCount(); i++)
		{
			X31SDataBeanAccess kktkSvcKeiInfoBean = kktkSvcKeiInfoBeanArray.getDataBean(i);
			// 機器提供サービス契約情報.機器提供サービスコードを取得
			String kktkSvcCd = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_CD_27, GET);
			String kktkSvcKeiStat = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_STAT_27, X31CWebConst.DATABEAN_GET_VALUE);

			// 機器提供サービス契約ステータスが申し込み不可のステータスの場合、読み飛ばし
			if (!enableKktkSvcKeiStat(kktkSvcKeiStat))
			{
				continue;
			}

			// 機器提供サービスコードが"C013"：VONUの場合
			if (JFUStrConst.KK0771_KKTK_SVC_CD_C013.equals(kktkSvcCd))
			{
				// 機器提供サービス契約情報.機器提供サービス契約番号
				kktkSvcKeiNo = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_NO_27, GET);
				// 機器提供サービス契約情報.宅内機器型式コード
				taknkikiModelCd = kktkSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.TAKNKIKI_MODEL_CD_27, GET);

				break;
			}
		}
		// デバッグログ
		DEBUG_LOG.debug("★ 機器製造番号 ★：＝" + kikiSeizoNoStb);
		DEBUG_LOG.debug("★ サービス契約番号 ★：＝" + svckeino);
		DEBUG_LOG.debug("★ 料金コースコード ★：＝" + pcrsCd);
		DEBUG_LOG.debug("★ サービス契約内訳番号 ★：＝" + svcKeiUcwkNo);
		DEBUG_LOG.debug("★ 宅内機器型式コード ★：＝" + taknkikiModelCd);
		DEBUG_LOG.debug("★ マンション物件番号 ★：＝" + mansionBukkenNo);
		DEBUG_LOG.debug("★ 住所形態コード ★：＝" + adFormCd);
		DEBUG_LOG.debug("★ 機器提供サービス契約番号 ★：＝" + kktkSvcKeiNo);
		DEBUG_LOG.debug("----- getCommonInfo_FUW09501SFLogic End -----");

		currentInfoMap.put(CURR_SVCKEINO, svckeino);
		currentInfoMap.put(CURR_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		currentInfoMap.put(CURR_PCRS_CD, pcrsCd);
		currentInfoMap.put(CURR_TAKNKIKI_MODEL_CD, taknkikiModelCd);
		currentInfoMap.put(CURR_CCAS_CARD_NO, ccasCardNo);
		currentInfoMap.put(CURR_KIKI_SEIZO_NO_STB, kikiSeizoNoStb);
		currentInfoMap.put(CURR_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		currentInfoMap.put(CURR_SVC_KEI_STAT, svcKeiStat);
		currentInfoMap.put(CURR_SVC_KEI_UW_STAT, svcKeiUwStat);
		currentInfoMap.put(CURR_EO_TV_KK_ST_SNN_JT_CD, eoTvKkStSnnJtCd);
		currentInfoMap.put(CURR_FORM_CD, adFormCd);
		currentInfoMap.put(CURR_MANSION_BUKKEN_NO, mansionBukkenNo);
		currentInfoMap.put(CURR_MANSION_BUKKEN_CD, JFUStrConst.EMPTY); //初期値
		currentInfoMap.put(CURR_VONU_BSPT_KH, JFUStrConst.EMPTY); //初期値
		currentInfoMap.put(CURR_STB_ID, JFUStrConst.EMPTY); //初期値
		currentInfoMap.put(CURR_KEI_STAT_ERR_FLG, keiStatErrFlg);

		return currentInfoMap;

	}

	/**
	 * マンション物件コード 取得処理
	 * <br/>
	 * サービスIFの検索結果からマンション物件コードを取得する。
	 *
	 * @param fusv0125SCMap サービス検索結果マップ
	 * @return マンション物件コード
	 */
	private String getMansionBukkenCd(HashMap<String, ArrayList<HashMap<String, String>>> fusv0125SCMap)
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getMansionBukkenCd_FUW09501SFLogic Start -----");
		// マンション物件コード
		String strMansionBukkenCd = JFUStrConst.EMPTY;
		// サービス処理結果.マンション物件一意照会明細
		ArrayList<HashMap<String, String>> cbsMsgList = fusv0125SCMap.get(MAP_KEY_CBSMSGLIST_07);
		if (!JFUWebCommon.isNull(cbsMsgList))
		{
			if (cbsMsgList.size() > 0)
			{
				// マンション物件一意照会マップ
				HashMap<String, String> cbsMsg = null;
				cbsMsg = cbsMsgList.get(0);
				strMansionBukkenCd = cbsMsg.get(MAP_KEY_MANSION_BUKKEN_CD);
			}
		}
		// デバッグログ
		DEBUG_LOG.debug("★ マンション物件コード ★：＝" + strMansionBukkenCd);
		DEBUG_LOG.debug("----- getMansionBukkenCd_FUW09501SFLogic End -----");
		return strMansionBukkenCd;
	}

	/**
	 * VONUBSパススルー可否 取得処理
	 * <br/>
	 * サービスIFの検索結果からVONUBSパススルー可否を取得する。
	 *
	 * @param fusv0125SCMap サービス検索結果マップ
	 * @return VONUBSパススルー可否
	 */
	private String getVonuBsptKh(HashMap<String, ArrayList<HashMap<String, String>>> fusv0125SCMap)
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getVonuBsptKh_FUW09501SFLogic Start -----");
		// VONUBSパススルー可否
		String strVonuBsptKh = JFUStrConst.EMPTY;
		// サービス処理結果.宅内機器型式一意照会明細
		ArrayList<HashMap<String, String>> cbsMsgList = fusv0125SCMap.get(MAP_KEY_CBSMSGLIST_08);
		if (!JFUWebCommon.isNull(cbsMsgList))
		{
			if (cbsMsgList.size() > 0)
			{
				// 宅内機器型式一意照会マップ
				HashMap<String, String> cbsMsg = null;
				cbsMsg = cbsMsgList.get(0);
				strVonuBsptKh = cbsMsg.get(MAP_KEY_VONU_BSPT_KH);
			}
			else
			{
				// 宅内機器型式コードが宅内機器に存在しない場合、BSパススルーを申し込めないようにする為に対応機を設定
				strVonuBsptKh = ONE;
			}
		}
		else
		{
			// VONUが存在しない場合、BSパススルーを申し込めないようにする為に対応機を設定
			strVonuBsptKh = ONE;
		}
		// デバッグログ
		DEBUG_LOG.debug("★ VONUBSパススルー可否 ★：＝" + strVonuBsptKh);
		DEBUG_LOG.debug("----- getVonuBsptKh_FUW09501SFLogic End -----");
		return strVonuBsptKh;
	}

	/**
	 * STBID 取得処理
	 * <br/>
	 * サービスIFの検索結果からSTBIDを取得する。
	 *
	 * @param fusv0125SCMap サービス検索結果マップ
	 * @return STBID
	 */
	private String getStbId(HashMap<String, ArrayList<HashMap<String, String>>> fusv0125SCMap)
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getStbId_FUW09501SFLogic Start -----");
		// STBID
		String strStbId = JFUStrConst.EMPTY;
		// サービス処理結果.宅内機器(STB／CASID)一覧照会明細
		ArrayList<HashMap<String, String>> cbsMsgList = fusv0125SCMap.get(MAP_KEY_CBSMSGLIST_09);
		if (!JFUWebCommon.isNull(cbsMsgList))
		{
			if (cbsMsgList.size() > 0)
			{
				// 宅内機器(STB／CASID)一覧照会マップ
				HashMap<String, String> cbsMsg = null;
				cbsMsg = cbsMsgList.get(0);
				strStbId = cbsMsg.get(MAP_KEY_STB_ID);
			}
		}
		// デバッグログ
		DEBUG_LOG.debug("★ STBID ★：＝" + strStbId);
		DEBUG_LOG.debug("----- getStbId_FUW09501SFLogic End -----");
		return strStbId;
	}

	/**
	 * C-CASカード番号のハイフン処理
	 * <br>
	 * @param arg0 	C-CASカード番号
	 * @return String 編集されたC-CASカード番号
	 */
	private static String editKikiSeizoNo(String arg0)
	{
		// デバッグログ
		DEBUG_LOG.debug("----- editKikiSeizoNo_FUW09501SFLogic Start -----");
		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(HYHUN);
			}

			strBuf.append(arg0.substring(i, i + 1));
		}

		// デバッグログ
		DEBUG_LOG.debug("★ C-CASカード番号 ★：＝" + strBuf.toString());
		DEBUG_LOG.debug("----- editKikiSeizoNo_FUW09501SFLogic End -----");
		return strBuf.toString();
	}

	/**
	 * サービス契約内訳ステータスの取得処理
	 * 
	 * <br>
	 * @param commonInfoBean 共有フォームBean
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return サービス契約内訳ステータス
	 */
	private static String getSvcKeiUwStat(X31SDataBeanAccess commonInfoBean, String svcKeiUcwkNo)
	{

		Map<String, String> conditionUcwk = new HashMap<String, String>();
		conditionUcwk.put(CommonInfoCFConst.SVC_KEI_UCWK_NO_24, svcKeiUcwkNo);

		// 共有フォームBeanの機器提供サービス契約情報からサービス契約内訳情報を取得
		X31SDataBeanAccess[] svcKeiUcwkInfo =
				JFUWebCommon.getDataBeanListByPathWithKey(commonInfoBean, JFUWebCommon.SVC_KEI_UCWK_INFO, conditionUcwk);

		if (svcKeiUcwkInfo == null || svcKeiUcwkInfo.length == 0)
		{
			return null;
		}
		else
		{
			for (int idx = 0; idx < svcKeiUcwkInfo.length; idx++)
			{
				// サービス契約内訳ステータス
				String status = JFUWebCommon.getDataBeanItemByPath(svcKeiUcwkInfo[idx], CommonInfoCFConst.SVC_KEI_UCWK_STAT_24);
				return status; //１件しかとれないはず。
			}
		}
		return null;

	}

	/**
	 * 契約状態の取得 [ＳＤ、ＨＤコース]
	 * @param serviceInfoBean サービスフォームBean
	 * @param currentInfoMap カレント情報
	 * @param taknkikiModeMap 最上位の宅内機器型式情報（ＳＴＢ）
	 * @return HashMap<String, String> currentInfoMap
	 */
	private static HashMap<String, String> getStbCorseBsInfo(X31SDataBeanAccess serviceInfoBean, HashMap<String, String> currentInfoMap,
			HashMap<String, String> taknkikiModeMap) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getStbCorseBsInfo_FUW09501SFLogic Start -----");
		// -------------------------------------------------
		// テレビチューナー情報表示フラグの設定
		// -------------------------------------------------
		int maxHddCapaCnt = JFUStrConst.I_ZERO; // 最上位となっているサービス提供中のSTB台数
		int allStbCnt = JFUStrConst.I_ZERO; // サービスに紐づくSTBの台数
		String maxHddCapaCd = taknkikiModeMap.get(HDD_CAPA_CD);
		if (maxHddCapaCd == null)
		{
			maxHddCapaCd = JFUStrConst.EMPTY;
		}

		// サービス契約内訳情報から取得した全機器リスト(FUSV012501SC: EKK0341B509) STB関連とVONU情報
		X31SDataBeanAccessArray allStbList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.ALL_STB_LIST);
		int intStbMaxCnt = Integer.parseInt((String)currentInfoMap.get(STB_MAX_CNT)); // ＳＴＢ契約可能最大数
		String rsvChannelNext = JFUStrConst.EMPTY;
		String rsvStatStb = JFUStrConst.EMPTY;
		String rsvStatCorse = JFUStrConst.EMPTY;
		String totalRsvStatBs = JFUStrConst.EMPTY;
		String totalRsvStatStb = JFUStrConst.EMPTY;
		String totalRsvStatCorse = JFUStrConst.EMPTY;

		int stbCnt = 0;
		// オプションチャンネル次月（サービス内全てで１件でもあるか）
		String totalRsvChannelNext = ZERO;
		for (int i = 0; i < allStbList.getCount(); i++)
		{
			X31SDataBeanAccess allStbBean = allStbList.getDataBean(i);
			// 機器提供サービス契約.機器製造番号
			String wKikiSeizoNo = allStbBean.sendMessageString(FUW09501SFConst.KIKI_SEIZO_NO_03, GET);
			String wRsvChannelNext = allStbBean.sendMessageString(FUW09501SFConst.RSV_CHANNEL_NEXT_03, GET);

			if (!ZERO.equals(wRsvChannelNext))
			{
				// オプションチャンネル次月開始分の申込ありの場合
				totalRsvChannelNext = ONE;
			}

			if (currentInfoMap.get(CURR_KIKI_SEIZO_NO_STB).equals(wKikiSeizoNo))
			{
				rsvChannelNext = allStbBean.sendMessageString(FUW09501SFConst.RSV_CHANNEL_NEXT_03, GET);
				rsvStatStb = allStbBean.sendMessageString(FUW09501SFConst.RSV_STAT_STB_03, GET);
				rsvStatCorse = allStbBean.sendMessageString(FUW09501SFConst.RSV_STAT_CORSE_03, GET);
				totalRsvStatBs = allStbBean.sendMessageString(FUW09501SFConst.TOTAL_RSV_STAT_BS_03, GET);
				totalRsvStatStb = allStbBean.sendMessageString(FUW09501SFConst.TOTAL_RSV_STAT_STB_03, GET);
				totalRsvStatCorse = allStbBean.sendMessageString(FUW09501SFConst.TOTAL_RSV_STAT_CORSE_03, GET);
			}
			else
			{
				// ＳＳＯ情報.機器製造番号と機器提供サービス契約.機器製造番号が異なるレコード、カウントする
				stbCnt++;
			}

			// 全ての機器で「機器のステータス＝サービス提供中」＆「STB機器が最上位機種」の場合は、STBの変更は不可
			// （追加予約中を除く）
			String kktkSvcKeiStat = allStbBean.sendMessageString(FUW09501SFConst.KKTK_SVC_KEI_STAT_03, GET);
			String checkHddCapaCd = allStbBean.sendMessageString(FUW09501SFConst.HDD_CAPA_CD_03, GET);
			allStbCnt++;
			if (JFUStrConst.CD00056_100.equals(kktkSvcKeiStat))
			{
				if (maxHddCapaCd.compareTo(checkHddCapaCd) <= 0)
				{
					maxHddCapaCnt++;
				}
			}
		}

		// ＳＴＢ契約可能最大数
		currentInfoMap.put(INT_STB_MAX_CNT, String.valueOf(intStbMaxCnt));
		// ＳＴＢ台数（トリガー以外）
		currentInfoMap.put(STB_CNT, String.valueOf(stbCnt));
		// ＳＴＢ契約台数（サービス契約単位）
		currentInfoMap.put(ALL_STB_CNT, String.valueOf(allStbCnt));
		// ＳＴＢ契約済で最上位機種の台数
		currentInfoMap.put(MAX_HDD_CAPA_CNT, String.valueOf(maxHddCapaCnt));
		// オプションチャンネル次月開始有無（サービス契約単位）
		currentInfoMap.put(TOTAL_RSV_CHANNEL_NEXT, String.valueOf(totalRsvChannelNext));

		// オプションチャンネル次月開始有無 EKK0341B509
		currentInfoMap.put(RSV_CHANNEL_NEXT, rsvChannelNext);
		// ＳＴＢ変更予約有無 EKK0341B509
		currentInfoMap.put(RSV_STAT_STB, rsvStatStb);
		// コース変更予約有無 EKK0341B509
		currentInfoMap.put(RSV_STAT_CORSE, rsvStatCorse);
		// ＢＳパススルー予約有無（回線）EKK0341B509
		currentInfoMap.put(TOTAL_RSV_STAT_BS, totalRsvStatBs);
		// ＳＴＢ追加変更予約有無（サービス） EKK0341B509
		currentInfoMap.put(TOTAL_RSV_STAT_STB, totalRsvStatStb);
		// コース変更予約有無（サービス及び内訳） EKK0341B509
		currentInfoMap.put(TOTAL_RSV_STAT_CORSE, totalRsvStatCorse);

		// デバッグログ
		DEBUG_LOG.debug("----- getStbCorseBsInfo_FUW09501SFLogic End -----");

		return currentInfoMap;

	}

	/**
	 * 契約状態の取得 [ＣＳコース]
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @param currentInfoMap カレント情報
	 * @return HashMap<String, String> currentInfoMap
	 */
	private HashMap<String, String> getTvCsCorseVonuInfo(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap,
			HashMap<String, String> currentInfoMap) throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getTvCsCorseVonuInfo_FUW09501SFLogic Start -----");
		String csRsvStatCorse = JFUStrConst.EMPTY;
		String csTotalRsvStatVonu = JFUStrConst.EMPTY;

		// サービスフォームBean.契約情報リスト(FUSV012503SC: EKK0081B515 サービス契約一覧照会)
		X31SDataBeanAccessArray keiyakuList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEIYAKU_LIST);
		// 契約情報Bean
		X31SDataBeanAccess keiyakuBean = keiyakuList.getDataBean(0);

		// 異動レコード有無フラグ(異動予約（下記の異動予約詳細コード)が存在する場合は"1"、それ以外は"0")
		String idoRsvFlg = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_RSV_FLG_05, GET);
		// 異動予約詳細コード('003'コース変更,'005' サービス休止,'006' サービス休止解除,'007' サービス解約,'009' 回線利用場所変更)
		String idoRsvDtlCd = keiyakuBean.sendMessageString(FUW09501SFConst.IDO_RSV_DTL_CD_05, GET);
		if (IDO_RSV_FLG_ON.equals(idoRsvFlg) && IDO_RSV_DTL_CD_003.equals(idoRsvDtlCd))
		{
			// コース変更予約有無（サービス契約）
			csRsvStatCorse = ONE;
		}

		// ＶＯＮＵ機器変更有無
		if (isKikiMdlChgRsvSvcKeiVonu(outputMap))
		{
			// 機器機種変更でVONU予約中
			csTotalRsvStatVonu = ONE;
		}

		// コース変更予約有無 ＣＳコース用
		currentInfoMap.put(CS_RSV_STAT_CORSE, csRsvStatCorse);
		// ＶＯＮＵ交換予約有無（ＢＳパススルー含む）ＣＳコース用
		currentInfoMap.put(CS_TOTAL_RSV_STAT_VONU, csTotalRsvStatVonu);

		// デバッグログ
		DEBUG_LOG.debug("----- getTvCsCorseVonuInfo_FUW09501SFLogic End -----");

		return currentInfoMap;

	}

	/**
	 * 機器提供サービス契約ステータスチェック
	 * 
	 * @param serviceFormBean	サービスフォームBean
	 * @return 処理結果
	 * @throws Exception 
	 * */
	private boolean enableKktkSvcKeiStat(String kktkSvcKeiStat)
	{
		DEBUG_LOG.info("----- enableKktkSvcKeiStat_FUW09501SFLogic Start -----");

		// 画面で参照可能な機器提供サービス契約ステータスで無ければ、falseを返却
		if (JFUStrConst.CD00056_910.equals(kktkSvcKeiStat) || JFUStrConst.CD00056_920.equals(kktkSvcKeiStat))
		{
			return false;
		}

		DEBUG_LOG.info("----- enableKktkSvcKeiStat_FUW09501SFLogic End -----");

		return true;
	}

	/**
	 * 機器機種変更で予約中の場合のチェック(サービス契約単位)
	 * <br>
	 * @param outputMap	
	 * @return boolean
	 */
	private boolean isKikiMdlChgRsvcvSvcKei(HashMap outputMap)
	{

		boolean retFlg = false;

		HashMap<String, ArrayList<HashMap>> rsvMap = (HashMap<String, ArrayList<HashMap>>)outputMap.get(CC_TITLE_FUSV012503CC);
		ArrayList<HashMap> rsvList = (ArrayList<HashMap>)rsvMap.get(OUT_IDO_RSV_SVC_KEI_LIST);
		if (rsvList != null && rsvList.size() > 0) {
			// 予約中データあり
			retFlg = true;
		}
		return retFlg;
	}

	/**
	 * 機器機種変更で予約中の場合のチェック(サービス契約内訳単位)
	 * <br>
	 * @param outputMap	
	 * @return boolean
	 */
	private boolean isKikiMdlChgRsvcvSvcKeiUcwk(HashMap outputMap)
	{

		boolean retFlg = false;

		HashMap<String, ArrayList<HashMap>> rsvMap = (HashMap<String, ArrayList<HashMap>>)outputMap.get(CC_TITLE_FUSV012503CC);
		ArrayList<HashMap> rsvList = (ArrayList<HashMap>)rsvMap.get(OUT_IDO_RSV_SVC_KEI_UCWK_LIST);
		if (rsvList != null && rsvList.size() > 0) {
			// 予約中データあり
			retFlg = true;
		}
		return retFlg;
	}

	/**
	 * 機器機種変更で予約中（ＳＴＢ）の場合のチェック(サービス契約内訳単位)
	 * <br>
	 * @param outputMap	
	 * @return boolean
	 */
	private boolean isStbKikiMdlChgRsvcvSvcKeiUcwk(HashMap outputMap)
	{

		boolean retFlg = false;

		HashMap<String, ArrayList<HashMap>> rsvMap = (HashMap<String, ArrayList<HashMap>>)outputMap.get(CC_TITLE_FUSV012503CC);
		ArrayList<HashMap> rsvList = (ArrayList<HashMap>)rsvMap.get(OUT_IDO_RSV_SVC_KEI_UCWK_LIST);
		for (HashMap rsvDtlMap : rsvList)
		{
			// ＳＴＢの予約中データあり
			if (JFUStrConst.CD00132_C009.equals(rsvDtlMap.get(RSV_KKTK_SVC_CD))) {
				retFlg = true;
				break;
			}
		}

		return retFlg;
	}
	
	/**
	 * 機器機種変更でVONU予約中の場合のチェック(サービス契約単位)
	 * <br>
	 * @param outputMap	
	 * @return boolean
	 */
	private boolean isKikiMdlChgRsvSvcKeiVonu(HashMap outputMap)
	{

		boolean retFlg = false;

		HashMap<String, ArrayList<HashMap>> rsvMap = (HashMap<String, ArrayList<HashMap>>)outputMap.get(CC_TITLE_FUSV012503CC);
		ArrayList<HashMap> rsvList = (ArrayList<HashMap>)rsvMap.get(OUT_IDO_RSV_SVC_KEI_VONU_LIST);
		if (rsvList != null && rsvList.size() > 0) {
			// 予約中データあり
			retFlg = true;
		}
		return retFlg;
	}

	/**
	 *eo光テレビガイド誌冊数の設定値取得<BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @return eo光テレビガイド誌冊数の設定値
	 * @throws Exception
	 * 
	 */
	private int getGuidemgMskmCnt(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap) 
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getGuidemgMskmCnt_FUW09501SFLogic Start -----");
		
		// 返却値初期設定
		int guidemgMskmCnt = 0;
		
		// ガイドリスト(FUSV012506SC: EKK0351B510)
		X31SDataBeanAccessArray guideList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.GUIDE_LIST);
		if (guideList == null || guideList.getCount() == 0)
		{
			return guidemgMskmCnt;
		}

		// 異動予約一覧照会
		HashMap gdIdoRsv = (HashMap)outputMap.get(TITLE_FUSV012512SC);
		ArrayList gdIdoRsvMapList = (ArrayList)gdIdoRsv.get(MAP_KEY_GDRSVLIST_12);
		
		for (int i = 0; i < guideList.getCount(); i++)
		{
			// ガイド誌解約の予約有無フラグ初期設定
			boolean kaiyakuAriFlg = false;
			
			// ガイドリストn件目取得
			X31SDataBeanAccess guideListBean = guideList.getDataBean(i);
			// オプションサービス契約番号取得
			String opSvcKeiNo = guideListBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_NO_07, GET);

			// 異動予約一覧照会を繰り返し参照
			for (int j = 0; j < gdIdoRsvMapList.size(); j++)
			{
				HashMap gdIdoRsvMap = (HashMap)gdIdoRsvMapList.get(j);

				String idoDiv = nullToBlank(gdIdoRsvMap.get(GD_RSV_IDO_DIV));
				String idoRsvdtlCd = nullToBlank(gdIdoRsvMap.get(GD_RSV_IDO_RSV_DTL_CD));
				String idoRsvStatCd = nullToBlank(gdIdoRsvMap.get(GD_RSV_IDO_RSV_STAT_CD));
				String rsvOpSvcKeiNo = nullToBlank(gdIdoRsvMap.get(GD_RSV_OP_SVC_KEI_NO));

				// 以下条件に全て合致する場合
				if (opSvcKeiNo.equals(rsvOpSvcKeiNo) && JFUStrConst.CD00576_00031.equals(idoDiv) && JFUStrConst.CD01167_016.equals(idoRsvdtlCd)
						&& (JFUStrConst.CD01168_00.equals(idoRsvStatCd) || JFUStrConst.CD01168_03.equals(idoRsvStatCd)))
				{
					// ガイド誌解約の移動予約が存在する場合、
					// ガイド誌解約の予約有無フラグＯＮ
					kaiyakuAriFlg = true;
					// 繰り返し処理を抜ける
					break;
				}
			}
			
			// ガイド誌解約の予約有無フラグがfalse(予約なし)の場合
			if (!kaiyakuAriFlg)
			{
				// ケーブルガイド申込数を設定
				guidemgMskmCnt = Integer.parseInt(guideListBean.sendMessageString(FUW09501SFConst.CABLE_GUIDE_MSKM_CNT_07, GET));
			}
		}
		
		// デバッグログ
		DEBUG_LOG.debug("----- getGuidemgMskmCnt_FUW09501SFLogic End -----");
		
		return guidemgMskmCnt;
	}
	
	/**
	 * Nullの場合は空文字を設定<BR>
	 * @param temp
	 * @return String
	 */
	private String nullToBlank(Object temp)
	{
		String ret = JFUStrConst.EMPTY;

		if (!JFUWebCommon.isNull(temp))
		{
			ret = (String)temp;
		}

		return ret;
	}

	/**
	 * オプションチャンネル契約内容の設定(ＣＳコース) <BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param currentInfoMap カレント情報
	 * @param outputMap 
	 * @param commonInfoBean 共有フォームBean
	 * @param existsCsOpSvc true：オプションチャンネル申込あり、false：オプションチャンネル申込なしorＣＳコースでない
	 * @throws Exception
	 */
	private void setOpCsInfo(X31SDataBeanAccess serviceInfoBean, HashMap<String, String> currentInfoMap,
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap, X31SDataBeanAccess commonInfoBean, boolean existsCsOpSvc)
			throws Exception
	{
		// デバッグログ
		DEBUG_LOG.debug("----- setOpInfo_FUW09501SFLogic Start -----");
		// オプションリスト(FUSV012505SC: EKK0351B507)
		X31SDataBeanAccessArray opList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.OP_LIST);
		// デバッグログ
		DEBUG_LOG.debug("★ オプションリスト件数 ★：＝" + opList.getCount());

		// (1)オプションチャンネル申込状態によって設定
		if (existsCsOpSvc)
		{
			// 契約状態「契約中」文言
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_STAT_NM, SET, SVC_KEI_STAT_KEIYAKU);
			// オプション契約表示フラグ（申込ボタン表示、解約ボタン表示）
			// serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_1);
			// TODO: ANK-4592-00-00_テレビ新コース（スカパー用）導入対応）暫定対応のため、解約は非表示
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_2);
			serviceInfoBean.sendMessageString(FUW09501SFConst.EXISTS_OP_SVC_KEI, SET, JFUStrConst.CD00002_1);
		}
		else
		{
			// 契約状態「未契約」文言
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_STAT_NM, SET, SVC_KEI_STAT_MI_KEIYAKU);
			// オプション契約表示フラグ（解約ボタン非表示）
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_2);
			serviceInfoBean.sendMessageString(FUW09501SFConst.EXISTS_OP_SVC_KEI, SET, JFUStrConst.CD00002_0);
		}

		// (2)スカパー連携ステータスチェックによって設定
		boolean isTvCsOpchSptvRnkStatAnyOk = JFUWebCommon.isTvCsOpchSptvRnkStatAnyOk(commonInfoBean);
		if (!isTvCsOpchSptvRnkStatAnyOk){
			// 契約状態「予約中」文言
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_SVC_KEI_STAT_NM, SET, SVC_KEI_STAT_YOYAKU);
			// オプション契約表示フラグ（ボタン非表示 (状態：予約中、ボタン非表示)）
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_4);
		}

		// (3)「STB追加変更（トリガー）、ＢＳパススルー予約無し、コース変更予約（トリガー）」全て無しかによって設定
//		if (!(ZERO.equals(currentInfoMap.get(RSV_STAT_STB)) && ZERO.equals(currentInfoMap.get(TOTAL_RSV_STAT_BS)) && ZERO.equals(currentInfoMap
//				.get(RSV_STAT_CORSE))))
//		{
//			// 「STB追加変更（トリガー）、ＢＳパススルー予約無し、コース変更予約（トリガー）」全て無しの場合
//			// ボタン非表示
//			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_3);
//		}

		// (3)コース変更 又は ＶＯＵＮ交換予約中の場合
		if (ONE.equals(currentInfoMap.get(CS_RSV_STAT_CORSE)) || ONE.equals(currentInfoMap.get(CS_TOTAL_RSV_STAT_VONU)))
		{
			// ボタン非表示
			serviceInfoBean.sendMessageString(FUW09501SFConst.OP_DISP_FLG, SET, OP_DISP_FLG_3);
		}

		// デバッグログ
		DEBUG_LOG.debug("----- setOpInfo_FUW09501SFLogic End -----");
	}

	/**
	 * ＣＳコースの予約情報の表示を行う。
	 * 
	 * @param serviceInfoBean サービスフォームBean
	 * @param tvCsIdoMap ＣＳコースへの異動予約情報（予約がなければ空マップ）
	 */
	private String setTvCsIdoYoyaku(X31SDataBeanAccess serviceInfoBean, HashMap<String, String> tvCsIdoMap) {

		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEI_LIST);
		X31SDataBeanAccess keiListBean = null;
		String newPcrsCd = JFUStrConst.EMPTY;

		if (tvCsIdoMap != null && tvCsIdoMap.size() > 0)
		{
			keiListBean = keiList.addDataBean();
			newPcrsCd = tvCsIdoMap.get(GD_RSV_NEW_PCRS_CD);
			// コースリスト.料金コースコード
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_01, SET, newPcrsCd);
			// コースリスト.料金コースコード名
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, tvCsIdoMap.get(GD_RSV_NEW_PPLAN_CD_NM));
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, YOYAKU_BS);
		}
		return newPcrsCd;

	}

	/**
	 * 異動予約から、ＣＳコース予約情報を取得する<BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @return ＣＳコースへの異動予約情報（予約がなければ空マップ）
	 * 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, String> getTvCsIdo(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap)
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getTvCsIdo_FUW09501SFLogic Start -----");
		
		HashMap<String, String> tvCsIdoMap = new HashMap();
		// 異動予約あり＆コース変更の場合（サービス契約内訳がないコース用）
		// 異動予約一覧照会 EKK1681B001 ※サービス契約に紐づく異動予約の一覧
		HashMap gdIdoRsv = (HashMap) outputMap.get(TITLE_FUSV012512SC);
		ArrayList<HashMap> gdIdoRsvMapList = (ArrayList<HashMap>) gdIdoRsv.get(MAP_KEY_GDRSVLIST_12);

		// 異動予約一覧照会を繰り返し参照
		for (HashMap childMap : gdIdoRsvMapList) {
			String idoRsvNo = nullToBlank(childMap.get(GD_IDO_RSV_NO));
			String idoDiv = nullToBlank(childMap.get(GD_RSV_IDO_DIV));
			String idoRsvdtlCd = nullToBlank(childMap.get(GD_RSV_IDO_RSV_DTL_CD));
			String idoRsvStatCd = nullToBlank(childMap.get(GD_RSV_IDO_RSV_STAT_CD));
			String newPcrsCd = nullToBlank(childMap.get(GD_RSV_NEW_PCRS_CD));

			if (isTvCsIdoYoyaku(idoRsvNo, idoRsvdtlCd, idoRsvStatCd, newPcrsCd))
			{
				// ＣＳコースへの"コース変更の異動予約"が存在する場合、繰り返し処理を抜ける
				tvCsIdoMap.put(GD_IDO_RSV_NO, nullToBlank(childMap.get(GD_IDO_RSV_NO)));
				tvCsIdoMap.put(GD_RSV_IDO_DIV, nullToBlank(childMap.get(GD_RSV_IDO_DIV)));
				tvCsIdoMap.put(GD_RSV_IDO_RSV_DTL_CD, nullToBlank(childMap.get(GD_RSV_IDO_RSV_DTL_CD)));
				tvCsIdoMap.put(GD_RSV_IDO_RSV_STAT_CD, nullToBlank(childMap.get(GD_RSV_IDO_RSV_STAT_CD)));
				tvCsIdoMap.put(GD_RSV_OLD_PCRS_CD, nullToBlank(childMap.get(GD_RSV_OLD_PCRS_CD)));
				tvCsIdoMap.put(GD_RSV_OLD_PPLAN_CD, nullToBlank(childMap.get(GD_RSV_OLD_PPLAN_CD)));
				tvCsIdoMap.put(GD_RSV_NEW_PCRS_CD, nullToBlank(childMap.get(GD_RSV_NEW_PCRS_CD)));
				tvCsIdoMap.put(GD_RSV_NEW_PPLAN_CD, nullToBlank(childMap.get(GD_RSV_NEW_PPLAN_CD)));
				tvCsIdoMap.put(GD_RSV_NEW_PPLAN_CD_NM, nullToBlank(childMap.get(GD_RSV_NEW_PPLAN_CD_NM)));
				DEBUG_LOG.debug("コース変更の異動予約 IDO_RSV_NO[" + idoRsvNo + "],IDO_DIV[" + idoDiv + "], IDO_RSV_DTL_CD[" + idoRsvdtlCd + "]");
				break;
			}
		}

		// デバッグログ
		DEBUG_LOG.debug("----- getTvCsIdo_FUW09501SFLogic End -----");
		return tvCsIdoMap;
	}

	/**
	 * ＣＳコースへの異動予約情報か判定する。
	 * 
	 * @param idoRsvNo 異動予約番号 
 	 * @param idoRsvdtlCd 異動予約詳細コード 
	 * @param idoRsvStatCd 異動予約状態コード 
	 * @param newPcrsCd 変更後）料金コースコード 
	 * @return true：ＣＳコース予約あり、false：ＣＳコース予約なし
	 */
	private boolean isTvCsIdoYoyaku(String idoRsvNo, String idoRsvdtlCd,
			String idoRsvStatCd, String newPcrsCd) {
		if ((!JFUWebCommon.isNull(idoRsvNo)) && JFUStrConst.CD01167_003.equals(idoRsvdtlCd))
		{
			// 「予約詳細コード＝コース変更」住変、コース変
			if (JFUStrConst.CD01168_00.equals(idoRsvStatCd) || JFUStrConst.CD01168_03.equals(idoRsvStatCd))
			{
				// 異動予約状態コード＝未反映、予約手続中 
				if (JFUStrConst.CD00134_TV_CS_LIST.contains(newPcrsCd))
				{
					// ＣＳコースへの変更
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * 地デジコースへの予約情報を取得する<BR>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービスIF実行結果が格納されたMap
	 * @throws Exception
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void setChidejiIdo(X31SDataBeanAccess serviceInfoBean, HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap) throws Exception 
	{
		// デバッグログ
		DEBUG_LOG.debug("----- getChidejiIdo_FUW09501SFLogic Start -----");

		X31SDataBeanAccessArray keiList = serviceInfoBean.getDataBeanArray(FUW09501SFConst.KEI_LIST);
		X31SDataBeanAccess keiListBean = null;
		// テレビコース名表示切替からサービス名を取得
		HashMap parentMap = (HashMap)outputMap.get(CC_TITLE_FUSV012502CC);
		String retCd = (String)parentMap.get(RET_CD);
		if (JFUStrConst.RET_CD_OK.equals(retCd))
		{
			String chafSvcNm = JFUStrConst.EMPTY;
			// 表示コース名初期設定（地デジ・ＢＳコース）
			chafSvcNm = JFUWebCommon.getDispItem(TV_EO_COURSE_NM_BS);
			// サービス名称(コース変更先)が地デジ・ＢＳコース　スターチャンネルセットの場合
			if (!JFUWebCommon.isNull(parentMap.get(CHAF_SVC_NM)))
			{
				// サービス名称(コース変更先)を設定
				chafSvcNm = (String)parentMap.get(CHAF_SVC_NM);
			}
			// データBean追加
			keiListBean = keiList.addDataBean();
			// コースリスト.料金コースコード名
			keiListBean.sendMessageString(FUW09501SFConst.PCRS_CD_NM_01, SET, chafSvcNm);
			// コースリスト.サービス契約内訳ステータス名
			keiListBean.sendMessageString(FUW09501SFConst.SVC_KEI_UCWK_STAT_NM_01, SET, YOYAKU_BS);
		}

		// デバッグログ
		DEBUG_LOG.debug("----- getChidejiIdo_FUW09501SFLogic End -----");
	}

	/**
	 * 運用日付(OPEDATE)の設定です。
	 *
	 * 共通フォームBean.フロント共有情報.フロント運用日付に運用日付(OPEDATE)を設定。
	 *
	 * @param commonInfoBean 共通フォームBean
	 * @param opeDate 運用日付(OPEDATE)
	 */
	private void setFuOpedate(X31SDataBeanAccess commonInfoBean, String opeDate)
	{
		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		// 共通フォームBean.フロント共有情報
		X31SDataBeanAccess frontInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO).getDataBean(0);
		// フロント共有情報.フロント運用日付を設定します。
		frontInfo.sendMessageString(CommonInfoCFConst.FU_OPEDATE_05, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
	}
}
