/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW05401SFLogic
*   ソースファイル名：FUW05401SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年12月01日
*＜機能概要＞
*   eo光電話オプションサービス申込解約 ビューロジックです。
*
*   電話オプション共通のビューロジックです。
*   ・(FUW05401)割込電話サービス申込解約
*   ・(FUW05501)転送電話サービス申込解約
*   ・(FUW05601)転送電話選択サービス申込解約
*   ・(FUW05701)発信者番号表示サービス申込解約
*   ・(FUW05801)非通知着信拒否サービス申込解約
*   ・(FUW05901)迷惑電話拒否サービス申込解約
*   ・(FUW06001)指定番号着信選択サービス申込解約
*   ・(FUW06101)通話明細送付サービス申込解約
*   ・(FUW06201)050ナンバープラスサービス申込解約
*   ・(FUW10201)通話料指定額到達お知らせ機能申込変更
*   ・(FUW10301)国際電話利用停止機能申込解約
*
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/01   FJ）北島    新規作成
*   v3.00       2012/04/10   FJ）濱口    【ANK-0041-00-00】 申込完了メール対応
*   v3.00       2012/04/10   FJ）濱口    【ANK-0047-00-00】 通話料上限通知機能対応
*   v3.00       2012/04/10   FJ）濱口    【ANK-0048-00-00】 国際電話利用停止機能対応
*   v4.00       2012/06/20   FJ) 中谷    【ANK-1163-00-00】変更系申込が可能となるタイミングについて
*   v4.00       2012/06/20   FJ) 美濃原  【ANK-1163-00-00】変更系申込が可能となるタイミングについて
*   v4.00       2012/07/13   FJ) 美濃原  【ANK-0381-00-00】ＩＰｖ６無料文言不備
*	v4.00       2012/07/19   FJ) 濱口     ロット１案件の内容漏れの対応
*   v4.00       2012/08/06   FJ）山名    【ST2-2012-0001451】
*   v4.00       2012/09/30   FJ) 美濃原  【ANK-1163-00-00】変更系申込が可能となるタイミングについて
*	v4.00       2012/10/27   FJ) 大島    【ANK-1255-00-00】オプション解約に伴う課金制御
*	v3.00       2012/11/09   FJ) 山名    【ST2-2012-0001768】通信事業者コードマスタ取得修正
*	v5.00       2013/02/04   FJ) 美濃原  【ANK-1399-00-00】フロントＳ文言確認修正対応
*	v7.00       2013/12/19   FJ) 岡井    【障害対応】多機能ルーター対応
*	v8.00       2014/01/27   FJ) 文元    【ANK-1589-00-00】消費増税に伴う料金施策
*   v9.00       2014/05/02   FJ）畑中    【ANK-2056-00-00】光TELセレクトオプションパック
*   v9.00       2014/05/20   FJ）西山    【ANK-2057-00-00】eo多機能ルーターによる複数通話対応
*   v14.00      2015/03/19   FJ) 西川    【OM-2015-0000218】撤去工事完了時のオプション申込受付不具合
*   v33.00      2017/08/31   FJ) 西川    【ANK-2794-00-00】フロントの督促ST制限強化
*   v37.00      2019/10/15   FJ) 大島    【ANK-3763-00-00】フロントWebの転送電話オプション受付停止対応
*
**********************************************************************/
package eo.web.webview.FUW05401SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
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 com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JFUCommonUtil;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0031_FUSV0031OPDBMapper;
import eo.web.webview.mapping.FUSV0032_FUSV0032OPDBMapper;
import eo.web.webview.mapping.FUSV0033_FUSV0033OPDBMapper;
import eo.web.webview.mapping.FUSV0207_FUSV0207OPDBMapper;

/**
 * eo光電話オプションサービス申込解約 ビューロジック
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW05401SFLogic extends JCCWebBusinessLogic
{

	////////////////////////////////////////////////////////////////////////////////
	//	定数
	////////////////////////////////////////////////////////////////////////////////
	/** 処理区分 : "1"(申込) */
	private static final String TRAN_DIV_MSKM = "1";

	/** 処理区分 : "2"(解約) */
	private static final String TRAN_DIV_DSL = "2";

	/** 処理区分 : "3"(変更) */
	private static final String TRAN_DIV_CHG = "3";

	/** サービスID : eo光電話オプションサービス申込解約(初期表示) */
	private static final String SVC_ID_INIT = "FUSV0031";

	/** サービスID : eo光電話オプションサービス申込解約(申込) */
	private static final String SVC_ID_MSKM = "FUSV0032";

	/** サービスID : eo光電話オプションサービス申込解約(解約) */
	private static final String SVC_ID_DSL = "FUSV0033";

	/** サービスID : eo光電話オプションサービス申込解約(変更) */
	private static final String SVC_ID_CHG = "FUSV0207";

	/** サービスID : 関連チェックID eo光電話オプションサービス申込解約(変更) */
	private static final String COMMON_REL_CHECK_ID_CHG = "FUSV0032";

	/** 判定後割引サービスコード */
	private static final String WRIB_SVC_CD  = "wrib_svc_cd";

	/** 基本料金情報取得キー(料金プラン固定単価（オプション申込料金）一覧照会の実行結果取得キー) */
	private static final String MAP_KEY_FUSV003104SC = "FUSV003104SC";

	/** 論理画面ID : FUW054_割込電話サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW054 = "FUW054";

	/** 論理画面ID : FUW055_転送電話サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW055 = "FUW055";

	/** 論理画面ID : FUW056_転送電話選択サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW056 = "FUW056";

	/** 論理画面ID : FUW057_発信者番号表示サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW057 = "FUW057";

	/** 論理画面ID : FUW058_非通知着信拒否サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW058 = "FUW058";

	/** 論理画面ID : FUW059_迷惑電話拒否サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW059 = "FUW059";

	/** 論理画面ID : FUW060_指定番号着信選択サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW060 = "FUW060";

	/** 論理画面ID : FUW061_通話明細送付サービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW061 = "FUW061";

	/** 論理画面ID : FUW062_050ナンバープラスサービス申込解約 */
	private static final String RONRI_SCREEN_ID_FUW062 = "FUW062";

	/** 論理画面ID : FUW102_通話料指定額到達お知らせ機能申込変更 */
	private static final String RONRI_SCREEN_ID_FUW102 = "FUW102";

	/** 論理画面ID : FUW103_国際電話利用停止機能申込解約 */
	private static final String RONRI_SCREEN_ID_FUW103 = "FUW103";

	/** 申込画面ID接尾辞 */
	private static final String MSKM_SCREEN_SUFFIX = "01";

	/** 確認画面ID接尾辞 */
	private static final String CRM_SCREEN_SUFFIX = "02";

	/** 完了画面ID接尾辞 */
	private static final String FIN_SCREEN_SUFFIX = "03";

	/** 同日を含む／含まない：含む (JPCUtilCommon.isPastDate()の必須パラメータ) */
	private static final String DOJITSU_HUKUMU = "1";

	/** オプションサービスコードマッピングMap */
	private static final Map<String, String> OP_SVC_CD_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW054, JFUStrConst.CD00136_B023); // 割込電話
			put(RONRI_SCREEN_ID_FUW055, JFUStrConst.CD00136_B024); // 転送電話
			put(RONRI_SCREEN_ID_FUW057, JFUStrConst.CD00136_B025); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW059, JFUStrConst.CD00136_B026); // 迷惑電話拒否
			put(RONRI_SCREEN_ID_FUW060, JFUStrConst.CD00136_B027); // 指定番号着信選択
			put(RONRI_SCREEN_ID_FUW061, JFUStrConst.CD00136_B028); // 通話明細送付
			put(RONRI_SCREEN_ID_FUW062, JFUStrConst.CD00136_B029); // 050ナンバープラス
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00136_B024); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00136_B025); // 非通知着信拒否(発信者番号表示のサブ)
			put(RONRI_SCREEN_ID_FUW102, JFUStrConst.CD00136_B072); // 通話料上限通知
			put(RONRI_SCREEN_ID_FUW103, JFUStrConst.CD00136_B071); // 国際電話利用停止
		}
	};

	/** サブオプションサービスコードマッピングMap */
	private static final Map<String, String> SBOP_SVC_CD_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00137_D07); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00137_D08); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};

	/** 料金コースコード(オプションサービス契約)マッピングMap - サブオプション用(親オプションの料金コースコード) */
	private static final Map<String, String> PCRS_CD_KK0351_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00134_B28); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00134_B29); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};

	/** 料金プランコード(オプションサービス契約)マッピングMap - サブオプション用(親オプションの料金プランコード) */
	private static final Map<String, String> PPLAN_CD_KK0351_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00565_PB2801); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00565_PB2901); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};

	/** 料金コースコード(サブオプションサービス契約)マッピングMap */
	private static final Map<String, String> PCRS_CD_KK0401_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW055, JFUStrConst.CD00134_D07); // 転送電話
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00134_D07); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW057, JFUStrConst.CD00134_D08); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00134_D08); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};

	/** 料金プランコード(サブオプションサービス契約)マッピングMap */
	private static final Map<String, String> PPLAN_CD_KK0401_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW055, JFUStrConst.CD00565_PD0701); // 転送電話
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00565_PD0701); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW057, JFUStrConst.CD00565_PD0801); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00565_PD0801); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};

	/** 料金コースコード(料金プラン固定単価)マッピングMap */
	private static final Map<String, String> PCRS_CD_KK0601_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW054, JFUStrConst.CD00134_B27); // 割込電話
			put(RONRI_SCREEN_ID_FUW055, JFUStrConst.CD00134_B28); // 転送電話
			put(RONRI_SCREEN_ID_FUW057, JFUStrConst.CD00134_B29); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW059, JFUStrConst.CD00134_B30); // 迷惑電話拒否
			put(RONRI_SCREEN_ID_FUW060, JFUStrConst.CD00134_B31); // 指定番号着信選択
			put(RONRI_SCREEN_ID_FUW061, JFUStrConst.CD00134_B32); // 通話明細送付
			put(RONRI_SCREEN_ID_FUW062, JFUStrConst.CD00134_B33); // 050ナンバープラス
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00134_D07); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00134_D08); // 非通知着信拒否(発信者番号表示のサブ)
			put(RONRI_SCREEN_ID_FUW102, JFUStrConst.CD00134_B76); // 通話料上限通知
			put(RONRI_SCREEN_ID_FUW103, JFUStrConst.CD00134_B75); // 国際電話利用停止
		}
	};

	/** 料金プランコード(料金プラン固定単価)マッピングMap */
	private static final Map<String, String> PPLAN_CD_KK0601_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW054, JFUStrConst.CD00565_PB2701); // 割込電話
			put(RONRI_SCREEN_ID_FUW055, JFUStrConst.CD00565_PB2801); // 転送電話
			put(RONRI_SCREEN_ID_FUW057, JFUStrConst.CD00565_PB2901); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW059, JFUStrConst.CD00565_PB3001); // 迷惑電話拒否
			put(RONRI_SCREEN_ID_FUW060, JFUStrConst.CD00565_PB3101); // 指定番号着信選択
			put(RONRI_SCREEN_ID_FUW061, JFUStrConst.CD00565_PB3201); // 通話明細送付
			put(RONRI_SCREEN_ID_FUW062, JFUStrConst.CD00565_PB3301); // 050ナンバープラス
			put(RONRI_SCREEN_ID_FUW056, JFUStrConst.CD00565_PD0701); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUStrConst.CD00565_PD0801); // 非通知着信拒否(発信者番号表示のサブ)
			put(RONRI_SCREEN_ID_FUW102, JFUStrConst.CD00565_PB7601); // 通話料上限通知
			put(RONRI_SCREEN_ID_FUW103, JFUStrConst.CD00565_PB7501); // 国際電話利用停止
		}
	};

	/** 申込(解約)画面名マッピングMap */
	private static final Map<String, String> MSKM_SCREEN_NAME_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW054, JFUScreenConst.SCREEN_NAME_FUW05401); // 割込電話
			put(RONRI_SCREEN_ID_FUW055, JFUScreenConst.SCREEN_NAME_FUW05501); // 転送電話
			put(RONRI_SCREEN_ID_FUW057, JFUScreenConst.SCREEN_NAME_FUW05701); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW059, JFUScreenConst.SCREEN_NAME_FUW05901); // 迷惑電話拒否
			put(RONRI_SCREEN_ID_FUW060, JFUScreenConst.SCREEN_NAME_FUW06001); // 指定番号着信選択
			put(RONRI_SCREEN_ID_FUW061, JFUScreenConst.SCREEN_NAME_FUW06101); // 通話明細送付
			put(RONRI_SCREEN_ID_FUW062, JFUScreenConst.SCREEN_NAME_FUW06201); // 050ナンバープラス
			put(RONRI_SCREEN_ID_FUW056, JFUScreenConst.SCREEN_NAME_FUW05601); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUScreenConst.SCREEN_NAME_FUW05801); // 非通知着信拒否(発信者番号表示のサブ)
			put(RONRI_SCREEN_ID_FUW102, JFUScreenConst.SCREEN_NAME_FUW10201); // 通話料上限通知
			put(RONRI_SCREEN_ID_FUW103, JFUScreenConst.SCREEN_NAME_FUW10301); // 国際電話利用停止
		}
	};

	/** 確認画面名マッピングMap */
	private static final Map<String, String> CFM_SCREEN_NAME_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW054, JFUScreenConst.SCREEN_NAME_FUW05402); // 割込電話
			put(RONRI_SCREEN_ID_FUW055, JFUScreenConst.SCREEN_NAME_FUW05502); // 転送電話
			put(RONRI_SCREEN_ID_FUW057, JFUScreenConst.SCREEN_NAME_FUW05702); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW059, JFUScreenConst.SCREEN_NAME_FUW05902); // 迷惑電話拒否
			put(RONRI_SCREEN_ID_FUW060, JFUScreenConst.SCREEN_NAME_FUW06002); // 指定番号着信選択
			put(RONRI_SCREEN_ID_FUW061, JFUScreenConst.SCREEN_NAME_FUW06102); // 通話明細送付
			put(RONRI_SCREEN_ID_FUW062, JFUScreenConst.SCREEN_NAME_FUW06202); // 050ナンバープラス
			put(RONRI_SCREEN_ID_FUW056, JFUScreenConst.SCREEN_NAME_FUW05602); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUScreenConst.SCREEN_NAME_FUW05802); // 非通知着信拒否(発信者番号表示のサブ)
			put(RONRI_SCREEN_ID_FUW102, JFUScreenConst.SCREEN_NAME_FUW10202); // 通話料上限通知
			put(RONRI_SCREEN_ID_FUW103, JFUScreenConst.SCREEN_NAME_FUW10302); // 国際電話利用停止
		}
	};

	/** 完了画面名マッピングMap */
	private static final Map<String, String> FIN_SCREEN_NAME_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW054, JFUScreenConst.SCREEN_NAME_FUW05403); // 割込電話
			put(RONRI_SCREEN_ID_FUW055, JFUScreenConst.SCREEN_NAME_FUW05503); // 転送電話
			put(RONRI_SCREEN_ID_FUW057, JFUScreenConst.SCREEN_NAME_FUW05703); // 発信者番号表示
			put(RONRI_SCREEN_ID_FUW059, JFUScreenConst.SCREEN_NAME_FUW05903); // 迷惑電話拒否
			put(RONRI_SCREEN_ID_FUW060, JFUScreenConst.SCREEN_NAME_FUW06003); // 指定番号着信選択
			put(RONRI_SCREEN_ID_FUW061, JFUScreenConst.SCREEN_NAME_FUW06103); // 通話明細送付
			put(RONRI_SCREEN_ID_FUW062, JFUScreenConst.SCREEN_NAME_FUW06203); // 050ナンバープラス
			put(RONRI_SCREEN_ID_FUW056, JFUScreenConst.SCREEN_NAME_FUW05603); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW058, JFUScreenConst.SCREEN_NAME_FUW05803); // 非通知着信拒否(発信者番号表示のサブ)
			put(RONRI_SCREEN_ID_FUW102, JFUScreenConst.SCREEN_NAME_FUW10203); // 通話料上限通知
			put(RONRI_SCREEN_ID_FUW103, JFUScreenConst.SCREEN_NAME_FUW10303); // 国際電話利用停止
		}
	};

	/** サブオプションが関連付けられている画面のマッピングMap */
	private static final Map<String, String> CHILD_RONRI_SCREEN_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(RONRI_SCREEN_ID_FUW055, RONRI_SCREEN_ID_FUW056); // 転送電話選択(転送電話のサブ)
			put(RONRI_SCREEN_ID_FUW057, RONRI_SCREEN_ID_FUW058); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};

	/** オプションサービス論理画面リスト */
	private static final List<String> OP_SVC_RONRI_LIST =
			Arrays.asList(RONRI_SCREEN_ID_FUW054, RONRI_SCREEN_ID_FUW055, RONRI_SCREEN_ID_FUW057, RONRI_SCREEN_ID_FUW059, RONRI_SCREEN_ID_FUW060,
					RONRI_SCREEN_ID_FUW061, RONRI_SCREEN_ID_FUW062, RONRI_SCREEN_ID_FUW102, RONRI_SCREEN_ID_FUW103);

	/** オプションパック適用オプションリスト(サブオプションも含む) */
	private static final List<String> TEL_PACK_OPT_LIST =
			Arrays.asList(JFUStrConst.CD00136_B025, JFUStrConst.CD00136_B023, JFUStrConst.CD00136_B024, JFUStrConst.CD00137_D07,
					JFUStrConst.CD00137_D08, JFUStrConst.CD00136_B026, JFUStrConst.CD00136_B027);

	/**
	 * 割引サービス料金リスト
	 *
	 *【要素の内訳】
	 * [n][0]割引サービスコード
	 * [n][1]料金コースコード
	 * [n][2]料金プランコード
	 */
	private static final String[][] WRIB_OPCD_LIST =
		new String[][] {
			{ JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK3, JFUStrConst.CD00134_F03, JFUStrConst.CD00565_PF0301 },
			{ JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK7, JFUStrConst.CD00134_F04, JFUStrConst.CD00565_PF0401 }
		};

	/** サブオプションサービス論理画面リスト */
	private static final List<String> SBOP_SVC_RONRI_LIST = Arrays.asList(RONRI_SCREEN_ID_FUW056, RONRI_SCREEN_ID_FUW058);

	/** 未来日判定パラメータ："1"(同日を含む) */
	private static final String IS_FUTURE_DATE_PARAM_TODAY_YES = "1";

	/** 共有フォームBean.SSO情報 */
	private static final int BEAN_SSO_1 = 1;

	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	/** SYSID */
	private static final String SYSID = "sysid";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** サービス契約内訳番号 */
	private static final String SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
	/** 異動区分 */
	private static final String IDO_DIV = "ido_div";

	/** サービスオーダ発行 対象データリスト */
	private static final String REQ_TRGT_DATA_LIST = "trgt_data_list";

	/** SOD情報格納マップ */
	private static final String HAKKO_SOD_MAP = "hakkoSODMap";
	/** SOD基本情報 */
	private static final String SOD_KIHON_INFO = "sod_kihon_info";
	/** サービス契約情報 */
	private static final String SVC_KEI_INFO = "svc_kei_info";
	/** サービス契約内訳情報 */
	private static final String SVC_KEI_UCWK_INFO = "svc_kei_ucwk_info";
	/** オプションサービス契約情報 */
	private static final String OPSVKEI_INFO = "opsvkei_info";
	/** 機器提供サービス契約情報 */
	private static final String KKTSVKEI_INFO = "kktsvkei_info";

	/** 変更後サービス契約内訳世代登録年月日時分秒 */
	private static final String CHAF_SVC_KEI_UCWK_GENE_ADD_DTM = "chaf_svc_kei_ucwk_gene_add_dtm";

	/** 変更前オプションサービス契約番号 */
	private static final String CHBF_OPSVKEI_NO = "chbf_opsvkei_no";
	/** 変更前オプションサービス契約世代登録年月日時分秒 */
	private static final String CHBF_OPSVKEI_GENE_ADD_DTM = "chbf_opsvkei_gene_add_dtm";

	/** 変更前オプションサービス契約番号 */
	private static final String CHBF_SBOPSVKEI_NO = "chbf_sbopsvkei_no";
	/** 変更前オプションサービス契約世代登録年月日時分秒 */
	private static final String CHBF_SBOPSVKEI_GENE_ADD_DTM = "chbf_sbopsvkei_gene_add_dtm";

	/** 変更後機器提供サービス契約番号 */
	private static final String CHAF_KKTSVKEI_NO = "chaf_kktsvkei_no";

	/** 変更後機器提供サービス契約世代登録年月日時分秒 */
	private static final String CHAF_KKTSVKEI_GENE_ADD_DTM = "chaf_kktsvkei_gene_add_dtm";

	/** エラーアイテムID：異動区分 */
	private static final String ITEMID_IDO_DIV = "ido_div";

	/** 予約手続中件数 */
	private static final String RSV_TTDKI_CNT = "RSV_TTDKI_CNT";

	/** 契約中件数 */
	private static final String KEIYAKU_CHU_CNT = "KEIYAKU_CHU_CNT";

	/** 同月解約件数 */
	private static final String DOUGETU_DSL_CNT = "DOUGETU_DSL_CNT";

	/** 電話オプション申込み可否判定マップキー */
	private static final String TEL_OP_MSKM_CHECK_KEY = "JFUTelOpMskmCheckCC";

	/** 申込完了メールID FUW054 申込(割込電話) */
	private static final String MSKM_COMP_MAIL_ID_FUW054_1 = "FUW054_1";
	/** 申込完了メールID FUW054 申込(複数通話) */
	private static final String MSKM_COMP_MAIL_ID_FUW054_3 = "FUW054_3";
	/** 申込完了メールID FUW055 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW055_1 = "FUW055_1";
	/** 申込完了メールID FUW056 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW056_1 = "FUW056_1";
	/** 申込完了メールID FUW057 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW057_1 = "FUW057_1";
	/** 申込完了メールID FUW058 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW058_1 = "FUW058_1";
	/** 申込完了メールID FUW059 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW059_1 = "FUW059_1";
	/** 申込完了メールID FUW060 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW060_1 = "FUW060_1";
	/** 申込完了メールID FUW061 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW061_1 = "FUW061_1";
	/** 申込完了メールID FUW062 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW062_1 = "FUW062_1";
	/** 申込完了メールID FUW102 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW102_1 = "FUW102_1";
	/** 申込完了メールID FUW103 申込 */
	private static final String MSKM_COMP_MAIL_ID_FUW103_1 = "FUW103_1";

	/** 申込完了メールID FUW054 解約(割込電話) */
	private static final String MSKM_COMP_MAIL_ID_FUW054_2 = "FUW054_2";
	/** 申込完了メールID FUW054 解約(複数通話) */
	private static final String MSKM_COMP_MAIL_ID_FUW054_4 = "FUW054_4";
	/** 申込完了メールID FUW055 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW055_2 = "FUW055_2";
	/** 申込完了メールID FUW056 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW056_2 = "FUW056_2";
	/** 申込完了メールID FUW057 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW057_2 = "FUW057_2";
	/** 申込完了メールID FUW058 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW058_2 = "FUW058_2";
	/** 申込完了メールID FUW059 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW059_2 = "FUW059_2";
	/** 申込完了メールID FUW060 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW060_2 = "FUW060_2";
	/** 申込完了メールID FUW061 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW061_2 = "FUW061_2";
	/** 申込完了メールID FUW062 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW062_2 = "FUW062_2";
	/** 申込完了メールID FUW103 解約 */
	private static final String MSKM_COMP_MAIL_ID_FUW103_2 = "FUW103_2";

	/** 申込完了メールID FUW102 変更 */
	private static final String MSKM_COMP_MAIL_ID_FUW102_2 = "FUW102_2";

	/** 画面間引き継ぎ情報：申込割引サービスコード */
	private static final String MAPKEY_MSKM_WRIB_SVC_CD = "申込割引サービスコード";

	/** 画面間引き継ぎ情報：申込料金コースコード（割引） */
	private static final String MAPKEY_MSKM_WRIB_PCRS_CD = "申込料金コースコード";

	/** 画面間引き継ぎ情報：申込料金プランコード（割引） */
	private static final String MAPKEY_MSKM_WRIB_PPLAN_CD = "申込料金プランコード";

	/** 画面間引き継ぎ情報：申込オプションサービスコード */
	private static final String MAPKEY_MSKM_OP_SVC_CD = "申込オプションサービスコード";

	/** 画面間引き継ぎ情報：複数通話フラグ */
	private static final String MAPKEY_MSKM_MULTI_TALK_FLG = "複数通話フラグ";

	/** 割り込み画面ID付加文字列 */
	private static final String GAMEN_ID_SUFIX_STR = "0PJP";

	/**
	 * オプションサービス料金リスト（サブオプション含む）
	 *
	 *【要素の内訳】
	 * [n][0]オプションサービスコード
	 * [n][1]料金コースコード
	 * [n][2]料金プランコード
	 */
	private static final String[][] OP_PRC_LIST =
		new String[][] {
			{ JFUStrConst.CD00136_B025, JFUStrConst.CD00134_B29, JFUStrConst.CD00565_PB2901 },
			{ JFUStrConst.CD00136_B023, JFUStrConst.CD00134_B27, JFUStrConst.CD00565_PB2701 },
			{ JFUStrConst.CD00136_B024, JFUStrConst.CD00134_B28, JFUStrConst.CD00565_PB2801 },
			{ JFUStrConst.CD00137_D07,  JFUStrConst.CD00134_D07, JFUStrConst.CD00565_PD0701 },
			{ JFUStrConst.CD00137_D08,  JFUStrConst.CD00134_D08, JFUStrConst.CD00565_PD0801 },
			{ JFUStrConst.CD00136_B026, JFUStrConst.CD00134_B30, JFUStrConst.CD00565_PB3001 },
			{ JFUStrConst.CD00136_B027, JFUStrConst.CD00134_B31, JFUStrConst.CD00565_PB3101 }
		};

	////////////////////////////////////////////////////////////////////////////////
	//	【FUW05401】
	////////////////////////////////////////////////////////////////////////////////

	/**
	 * 初期表示処理【FUW05401】
	 * <br>
	 * @return boolean true(固定)
	 * @throws Exception	すべての例外
	 */
	public boolean init() throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 init Start  -----");

		// ----------------------------------------------
		// 引継情報の取得
		// ----------------------------------------------
		// メニュー画面より遷移元画面ID・処理区分を引継
		JFUWebCommon.getScreenInfo(this);

		// ----------------------------------------------
		// Bean取得
		// ----------------------------------------------
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// ----------------------------------------------
		// 論理機能IDを取得
		// ----------------------------------------------
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		//----------------------------------------------
		// 共通関連チェック
		//----------------------------------------------
		// APLConstの設定はNO_CHECK(遷移元：「FUW05301_eo光電話お客さま契約情報変更／照会メニュー」、SSOログイン経由)にし、ここで処理を行う
		JFUWebCommon.checkCommonRelation(this, SVC_ID_INIT);

		// サービスフォームBean.遷移元画面IDが「""(未設定）」でない場合
		if (0 < JFUWebCommon.getLength(JFUWebCommon.trim(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.FROM_SCREEN_ID))))
		{
			//----------------------------------------------
			// 現顧客契約情報最新化
			//----------------------------------------------
			JFUWebCommon.refreshGenCustKei(this);
		}

		// ----------------------------------------------
		// サービスインターフェイスパラメータの設定
		// ----------------------------------------------
		paramForFUSV0031(bean, commonInfoBean, ronriScreenId);

		// -------------------------------------------------
		// 共通フォームBeanからサービス契約情報を取得
		// -------------------------------------------------
		setSvcKeiInfo(commonInfoBean, bean);

		//----------------------------------------------
		// サービス呼出処理
		//----------------------------------------------
		HashMap<String, Object> outputMap = callSvcFUSV0031(bean, commonInfoBean);

		// ----------------------------------------------
		// 処理対象レコード抽出
		// ----------------------------------------------
		X31SDataBeanAccess[] tranTrgtRecOpArray = getTranTrgtRecOp(bean);

		// ----------------------------------------------
		// 業務エラー判定(初期表示)
		// ----------------------------------------------
		checkInitError(bean, commonInfoBean, tranTrgtRecOpArray);

		// ----------------------------------------------
		// 親サービス契約情報の編集
		// ----------------------------------------------
		setOyaKeiInfo(bean);

		// ----------------------------------------------
		// 処理対象のオプションサービス
		//	/サブオプションサービス契約レコードに対する
		// 各種処理
		//	・契約状態の判定
		//	・予約手続中チェック
		//	・処理区分判定
		//	・督促状態チェック
		// ----------------------------------------------
		HashMap<String, Integer> kensuMap = runVariTranForTrgtKeiRec(commonInfoBean, bean, tranTrgtRecOpArray);

		//----------------------------------------------
		// お得判定後の割引サービスコード取得
		//----------------------------------------------
		String packScreenWribSvcCd = getPackScreenWribSvcCd(bean);

		// ----------------------------------------------
		// 各種判定処理
		// ----------------------------------------------
		runVariJudge(bean, tranTrgtRecOpArray, kensuMap);

		// ----------------------------------------------
		// 処理対象レコードのキー情報編集
		// ----------------------------------------------
		setTranTrgtKeyInfo(bean, tranTrgtRecOpArray);

		// ----------------------------------------------
		// 通話料指定額到達通知指定金額の設定処理
		// ----------------------------------------------
		setTwryoStiam(bean, tranTrgtRecOpArray);

		// 有料／無料の場合、設定内容が異なるため、
		// 無料フラグ設定後に料金表情報を設定する
		setPrcInfoAreaEoTelOp(bean, outputMap, ronriScreenId);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);

		// ----------------------------------------------
		// 共有フォームBean設定
		// ----------------------------------------------
		// 遷移先画面名
		if (!JFUWebCommon.isNull(packScreenWribSvcCd))
		{
			// -------------------------------------------------
			// 画面間引き継ぎ情報の設定
			// -------------------------------------------------
			// オプションサービスコード取得
			String opSvcCd = "";
			if (SBOP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
			{
				opSvcCd = getSbopSvcCd(ronriScreenId);
			}
			else if (OP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
			{
				opSvcCd = getOpSvcCd(ronriScreenId);
			}

			// 処理区分取得
			String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);
			// 画面間引継ぎ情報設定
			HashMap<String, Object> map = this.createDataMapForPack(tran_div, packScreenWribSvcCd, opSvcCd);

			JFUWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW11001, map);

			// 割り込み設定
			super.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW11001 + GAMEN_ID_SUFIX_STR);
			// 遷移先画面名
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW11001);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW11001);
		}
		else
		{
			// 遷移先画面名
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, getMskmScreenName(ronriScreenId));
		}

		DEBUG_LOG.info("----- FUW5401 init End  -----");

		return true;
	}

	/**
	 * 処理対象レコードのキー情報編集
	 * <br>
	 * @param bean					サービスフォームBean
	 * @param tranTrgtRecOpArray		処理対象レコードの配列
	 * @throws Exception			すべての例外
	 */
	private void setTranTrgtKeyInfo(X31SDataBeanAccess bean, X31SDataBeanAccess[] tranTrgtRecOpArray) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 setTranTrgtKeyInfo Start  -----");

		// ----------------------------------------------
		// 共通設定項目
		// ----------------------------------------------
		// -------------------------------------------------
		// 申込登録明細の作成
		// →申込登録サービスIFの単項目関連制約チェックで
		//   申込登録明細のレコード件数が1件以上であることを
		//   要求される為、明細レコードを1件作成する。
		// -------------------------------------------------
		// サービスフォームBean/申込登録明細/0
		// 申込形態コード ← "01"(WEB)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.MSKM_DTL_LIST + JFUWebCommon.SEP_0 + FUW05401SFConst.MSKM_FORM_CD_06,
				JFUStrConst.CD00591_01);

		// -------------------------------------------------
		// 異動理由明細の作成
		// →進捗登録サービスIFの単項目関連制約チェックで
		//   異動理由明細のレコード件数が1件以上であることを
		//   要求される為、明細レコードを1件作成する。
		// -------------------------------------------------
		// サービスフォームBean/異動理由明細/0
		// 異動理由コード ← "56"(その他)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.IDO_DTL_LIST + JFUWebCommon.SEP_0 + FUW05401SFConst.IDO_RSN_CD_07,
				JFUStrConst.CD00846_56);

		// ---------------------------------------------------------------
		// 処理対象が存在しない場合は、キー情報の転記なし
		if ((null == tranTrgtRecOpArray) || (0 == tranTrgtRecOpArray.length))
		{
			return;
		}
		// ---------------------------------------------------------------

		// 処理対象のサービス契約情報[0]
		X31SDataBeanAccess svcKeiInfo = tranTrgtRecOpArray[0];

		// オプションサービス契約番号	← 処理対象リスト[0].オプションサービス契約番号(op_svc_kei_no)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.OP_SVC_KEI_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.OP_SVC_KEI_NO_01));
		// サブオプションサービス契約番号	← 処理対象リスト[0].サブオプションサービス契約番号(sbop_svc_kei_no)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SBOP_SVC_KEI_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.SBOP_SVC_KEI_NO_01));
		// エイジング番号	← 処理対象リスト[0].エイジング番号(aging_no)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.AGING_NO, JFUWebCommon
				.getDataBeanItemByPath(svcKeiInfo, FUW05401SFConst.AGING_NO_01));
		// 最終更新年月日時分秒(エイジング)	← 処理対象リスト[0].最終更新年月日時分秒(エイジング)(zm0111_upd_dtm_bf)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.ZM0111_UPD_DTM_BF, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.ZM0111_UPD_DTM_BF_01));
		// 050オプション電話番号	← 処理対象リスト[0].050オプション電話番号(n_050_op_telno)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.N_050_OP_TELNO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.N_050_OP_TELNO_01));

		DEBUG_LOG.info("----- FUW5401 setTranTrgtKeyInfo End  -----");
	}

	/**
	 * 処理対象レコードのキー情報編集
	 * <br>
	 * @param bean					サービスフォームBean
	 * @param tranTrgtRecOpArray		処理対象レコードの配列
	 * @throws Exception			すべての例外
	 */
	private void setTwryoStiam(X31SDataBeanAccess bean, X31SDataBeanAccess[] tranTrgtRecOpArray) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 setTwryoStiam Start  -----");

		// 通話料上限通知申込/変更の場合の処理
		if (JFUStrConst.CD00136_B072.equals(bean.sendMessageString(FUW05401SFConst.OP_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// ---------------------------------------------------------------
			// 処理対象が存在しない場合は、キー情報の転記なし
			if (!((null == tranTrgtRecOpArray) || (0 == tranTrgtRecOpArray.length)))
			{
				String opSvcKeiStat = JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[0], FUW05401SFConst.OP_SVC_KEI_STAT_01);
				if (JFUStrConst.CD00037_020.equals(opSvcKeiStat) || JFUStrConst.CD00037_030.equals(opSvcKeiStat)
						|| JFUStrConst.CD00037_100.equals(opSvcKeiStat))
				{
					// オプションサービス契約ステータスが"020","030","100"の場合にセットする
					// 処理対象のサービス契約情報[0]
					X31SDataBeanAccess svcKeiInfo = tranTrgtRecOpArray[0];

					// 通話料指定額到達通知指定金額	← 処理対象リスト[0].通話料指定額到達通知指定金額(twryo_stiam_ttu_tchi_stiam)
					JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TWRYO_STIAM_TTU_TCHI_STIAM, cutTwryo(JFUWebCommon.getDataBeanItemByPath(
							svcKeiInfo, FUW05401SFConst.TWRYO_STIAM_TTU_TCHI_STIAM)));
					// 変更前通話料指定額	← 処理対象リスト[0].通話料指定額到達通知指定金額(tuwa_shitei_amnt_chbf)
					JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TUWA_SHITEI_AMNT_CHBF, cutTwryo(JFUWebCommon.getDataBeanItemByPath(
							svcKeiInfo, FUW05401SFConst.TWRYO_STIAM_TTU_TCHI_STIAM)));
				}
				else
				{
					// 新規申込扱い
					// 通話料指定額到達通知指定金額	← 業務パラメータ設定値(work_param_sette_value)
					JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TWRYO_STIAM_TTU_TCHI_STIAM, cutTwryo(JFUWebCommon.getDataBeanItemByPath(
							bean, FUW05401SFConst.WORK_PARAM_SETTE_VALUE)));
				}
			}
			else
			{
				// 通話料指定額到達通知指定金額	← 業務パラメータ設定値(work_param_sette_value)
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TWRYO_STIAM_TTU_TCHI_STIAM, cutTwryo(JFUWebCommon.getDataBeanItemByPath(
						bean, FUW05401SFConst.WORK_PARAM_SETTE_VALUE)));
			}
		}

		DEBUG_LOG.info("----- FUW5401 setTwryoStiam End  -----");
	}

	/**
	 * 通話料指定金額の桁数調整
	 * <br>
	 * @param par
	 * @return	ret	通話料指定額到達通知指定金額(twryo_stiam_ttu_tchi_stiam)
	 */
	private String cutTwryo(String par)
	{

		String ret = JFUStrConst.EMPTY;

		if (!JFUCommonUtil.isNull(par))
		{
			ret = par.substring(0, par.length() - 3);
		}

		return ret;
	}

	/**
	 * サービスインターフェイスパラメータの設定(初期表示サービス用）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param ronriScreenId		論理画面ID
	 * @throws Exception		すべての例外
	 */
	private void paramForFUSV0031(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 paramForFUSV0031 Start  -----");

		// ----------------------------------------------
		// 共有フォームBean情報の取得
		// ----------------------------------------------
		setCommonInfoBeanToSvcFormBean(bean, commonInfoBean);

		// ----------------------------------------------
		// 処理対象オプションサービス情報の設定
		// ----------------------------------------------
		setOpSvcInfo(bean, ronriScreenId);

		DEBUG_LOG.info("----- FUW5401 paramForFUSV0031 End  -----");
	}

	/**
	 * 処理対象オプションサービス情報の設定
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param ronriScreenId		論理画面ID
	 * @throws Exception		すべての例外
	 */
	private void setOpSvcInfo(X31SDataBeanAccess bean, String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 setOpSvcInfo Start  -----");

		// オプションサービスコード
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.OP_SVC_CD, getOpSvcCd(ronriScreenId));
		// サブオプションサービスコード
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SBOP_SVC_CD, getSbopSvcCd(ronriScreenId));
		// 料金コースコード(オプションサービス契約)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0351_PCRS_CD, getPcrsCdKK0351(ronriScreenId));
		// 料金プランコード(オプションサービス契約)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0351_PPLAN_CD, getPplanCdKK0351(ronriScreenId));
		// 料金コースコード(サブオプションサービス契約)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0401_PCRS_CD, getPcrsCdKK0401(ronriScreenId));
		// 料金プランコード(サブオプションサービス契約)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0401_PPLAN_CD, getPplanCdKK0401(ronriScreenId));
		// 料金コースコード(料金プラン固定単価)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0601_PCRS_CD, getPcrsCdKK0601(ronriScreenId));
		// 料金プランコード(料金プラン固定単価)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0601_PPLAN_CD, getPplanCdKK0601(ronriScreenId));
		// 050オプション電話処理フラグ
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.N_050_OP_TELNO_TRAN_FLG, getN050OpTelnoTranFlg(ronriScreenId));
		// オプション処理フラグ
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.OP_TRAN_FLG, getOpTranFlg(ronriScreenId));
		// サブオプション処理フラグ
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG, getSbopTranFlg(ronriScreenId));
		// サービスオーダ処理フラグ
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SOD_TRAN_FLG, getSodTranFlg(ronriScreenId));

		DEBUG_LOG.info("----- FUW5401 setOpSvcInfo End  -----");
	}

	/**
	 * 共有フォームBean情報の取得(サービスフォームBeanに設定)
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @throws Exception		すべての例外
	 */
	private void setCommonInfoBeanToSvcFormBean(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 setCommonInfoBeanToSvcFormBean Start  -----");

		// SYSID	← 共有フォームBean.ＷＥＢ変更情報.ＳＳＯ情報.ＳＹＳＩＤ(sysid)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SYSID, JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SSO_INFO
				+ JFUWebCommon.SEP_0 + CommonInfoCFConst.SYSID_21));

		// サービス契約番号	← 共有フォームBean.ＷＥＢ変更情報.ＳＳＯ情報.サービス契約番号(svc_kei_no)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SVC_KEI_NO, JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SSO_INFO
				+ JFUWebCommon.SEP_0 + CommonInfoCFConst.SVC_KEI_NO_21));

		// 電話番号	← 共有フォームBean.ＷＥＢ変更情報.ＳＳＯ情報.電話番号
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TELNO, JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SSO_INFO
				+ JFUWebCommon.SEP_0 + CommonInfoCFConst.TELNO_21));

		// 料金コースコード(サービス契約)	← 共有フォームBean.ＷＥＢ変更情報.現顧客契約情報.サービス契約情報[0].料金コースコード(pcrs_cd)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0081_PCRS_CD, JFUWebCommon.getDataBeanItemByPath(commonInfoBean,
				JFUWebCommon.SVC_KEI_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.PCRS_CD_23));

		// 料金プランコード(サービス契約)	← 共有フォームBean.ＷＥＢ変更情報.現顧客契約情報.サービス契約情報[0].料金プランコード(pplan_cd)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0081_PPLAN_CD, JFUWebCommon.getDataBeanItemByPath(commonInfoBean,
				JFUWebCommon.SVC_KEI_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.PPLAN_CD_23));

		// 請求契約番号	← 共有フォームBean.ＷＥＢ変更情報.現顧客契約情報.サービス契約情報.請求契約情報.請求契約番号(seiky_kei_no)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SEIKY_KEI_NO, JFUWebCommon.getDataBeanItemByPath(commonInfoBean,
				JFUWebCommon.SEIKY_KEI_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.SEIKY_KEI_NO_32));

		// 最終更新年月日時分秒(サービス契約)	← 共有フォームBean.ＷＥＢ変更情報.現顧客契約情報.サービス契約情報.最終更新年月日時分秒(last_upd_dtm)
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.KK0081_UPD_DTM_BF, JFUWebCommon.getDataBeanItemByPath(commonInfoBean,
				JFUWebCommon.SVC_KEI_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.LAST_UPD_DTM_23));

		DEBUG_LOG.info("----- FUW5401 setCommonInfoBeanToSvcFormBean End  -----");
	}

	/**
	 * 親サービス契約情報の編集
	 * <br>
	 * @param bean			サービスフォームBean
	 * @throws Exception	すべての例外
	 */
	private void setOyaKeiInfo(X31SDataBeanAccess bean) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 setOyaKeiInfo Start  -----");

		// サービス契約情報リスト(1件目)
		X31SDataBeanAccess svcKeiInfo = bean.getDataBeanArray(FUW05401SFConst.SVC_KEI_INFO_LIST).getDataBean(0);

		// サービス契約内訳番号
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SVC_KEI_UCWK_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.SVC_KEI_UCWK_NO_01));

		// サービス契約回線内訳番号
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SVC_KEI_KAISEN_UCWK_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.SVC_KEI_KAISEN_UCWK_NO_01));

		// WEBオプション追加不可フラグ
		JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.WEB_OP_ADD_FAIL_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				FUW05401SFConst.WEB_OP_ADD_FAIL_FLG_01));

		DEBUG_LOG.info("----- FUW5401 setOyaKeiInfo End  -----");
	}

	/**
	 * 各種判定処理
	 * <br>
	 * オプション/サブオプションの申込/解約/回復に関わる各種判定を行います。
	 * ・オプション新規申込可否チェック<br>
	 * ・050ナンバープラス再申込制限チェック<br>
	 * ・オプション申込上限チェック<br>
	 * ・オプション有料/無料判定<br>
	 * ・サブオプション申込可否判定<br>
	 * ・サブオプション解約要否判定<br>
	 * ・回復可否判定<br>
	 * ・<br>
	 * ・<br>
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param tranTrgtRecOpArray	処理対象レコードの配列
	 * @param kensuMap			件数情報
	 * @throws Exception		すべての例外
	 */
	private void runVariJudge(X31SDataBeanAccess bean, X31SDataBeanAccess[] tranTrgtRecOpArray, HashMap<String, Integer> kensuMap) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 runVariJudge Start  -----");

		// 予約手続中件数
		int rsvTtdkiCnt = kensuMap.get(RSV_TTDKI_CNT);
		// 契約中件数
		int keiyakuChuCnt = kensuMap.get(KEIYAKU_CHU_CNT);
		// 同月解約件数
		int dougetuDslCnt = kensuMap.get(DOUGETU_DSL_CNT);

// ANK-3763-00-00 ADD START
		// 転送電話の申込を抑止
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		String ronriScreenId = getRonriScreenId(commonInfoBean);
		if (RONRI_SCREEN_ID_FUW055.equals(ronriScreenId) && TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV)))
		{
			// エラーパターンIDに「"0002"：システムエラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (15)eo光電話オプションサービス申込解約：転送電話申込エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002); // "0002"：システムエラー
		}
		
// ANK-3763-00-00 ADD END

		// ----------------------------------------------
		// オプション新規申込可否チェック
		// ----------------------------------------------
		// 処理区分(tran_div)＝"1"(申込)かつWEBオプション追加不可フラグ＝"1"(否)の場合
		if (TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV))
				&& JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.WEB_OP_ADD_FAIL_FLG)))
		{
			// エラーパターンIDに「"0101"：利用制限エラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (1)eo光電話オプションサービス申込解約：WEBオプション追加不可フラグエラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101); // "0101"：利用制限エラー
		}

		// ----------------------------------------------
		// 050ナンバープラス再申込制限チェック
		// ----------------------------------------------
		// 処理区分(tran_div)＝"1"(申込)かつ０５０オプション電話処理フラグ＝"1"(要)
		// かつ同月解約件数が1件以上存在する場合は、業務共通例外クラス(JCCBusinessException)をスローする。
		if (TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV))
				&& JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.N_050_OP_TELNO_TRAN_FLG))
				&& dougetuDslCnt > 0)
		{
			// エラーパターンIDに「"0101"：利用制限エラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (2)eo光電話オプションサービス申込解約：０５０オプション電話 同月解約エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101); // "0101"：利用制限エラー
		}

		// ----------------------------------------------
		// オプション申込上限チェック
		// ----------------------------------------------
		// 処理区分(tran_div)＝"1"(申込)の場合のみ、オプション申込上限チェックを行なう。
		if (TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV)))
		{
			// サービスフォームBean.料金コース_オプションサービスリスト(pcrs_op_svc_list)の1件目のレコードから、
			// 最大オプションサービス数(max_op_svc_cnt)を取得する。
			String strMaxOpSvcCnt =
					JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.PCRS_OP_SVC_LIST + JFUWebCommon.SEP_0
							+ FUW05401SFConst.MAX_OP_SVC_CNT_03);
			int inMaxOpSvcCnt = 0;
			if (!JFUWebCommon.isNull(strMaxOpSvcCnt))
			{
				inMaxOpSvcCnt = Integer.parseInt(strMaxOpSvcCnt);
			}

			// サービスフォームBean.料金コースコード(サービス契約)(kk0081_pcrs_cd)＝"A32"(２番号コース)の場合のみ、
			// 取得した最大オプションサービス数(max_op_svc_cnt)を2で割る。(※1)
			if (JFUStrConst.CD00134_A32.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.KK0081_PCRS_CD)))
			{
				inMaxOpSvcCnt = inMaxOpSvcCnt / 2;
			}

			// 契約中件数≧最大オプションサービス数(max_op_svc_cnt)の場合は、業務共通例外クラス(JCCBusinessException)をスローする。
			if (keiyakuChuCnt >= inMaxOpSvcCnt)
			{
				// エラーパターンIDに「"0101"：利用制限エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (3)eo光電話オプションサービス申込解約：最大オプション数エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101); // "0101"：利用制限エラー
			}
		}

		// ----------------------------------------------
		// オプション有料/無料判定
		// ----------------------------------------------
		// サービスフォームBean.料金コース_オプションサービスリスト(pcrs_op_svc_list)の1件目のレコードから、
		// 無料オプションサービス数(mryo_op_svc_cnt)を取得する。
		String strMryoOpSvcCnt =
				JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.PCRS_OP_SVC_LIST + JFUWebCommon.SEP_0 + FUW05401SFConst.MRYO_OP_SVC_CNT_03);
		int inMryoOpSvcCnt = 0;
		if (!JFUWebCommon.isNull(strMryoOpSvcCnt))
		{
			inMryoOpSvcCnt = Integer.parseInt(strMryoOpSvcCnt);
		}
		// サービスフォームBean.料金コースコード(サービス契約)(kk0081_pcrs_cd)＝"A32"(２番号コース)の場合のみ、
		// 取得した無料オプションサービス数(mryo_op_svc_cnt)を2で割る。
		if (JFUStrConst.CD00134_A32.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.KK0081_PCRS_CD)))
		{
			inMryoOpSvcCnt = inMryoOpSvcCnt / 2;
		}

		// サービスフォームBean.処理区分(tran_div)＝"1"(申込)、
		// かつ契約中件数＋予約手続中件数＜無料オプションサービス数(mryo_op_svc_cnt)の場合
		if (TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV)) && keiyakuChuCnt + rsvTtdkiCnt < inMryoOpSvcCnt)
		{
			// 無料を設定する
			JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.MRYO_FLG, JFUStrConst.CD00002_1);
		}
		else
		// サービスフォームBean.処理区分(tran_div)＝"2"(解約)または"3"(変更)
		// かつ契約中件数＋予約手続中件数≦無料オプションサービス数(mryo_op_svc_cnt)の場合
		if ((TRAN_DIV_DSL.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV)) && keiyakuChuCnt + rsvTtdkiCnt <= inMryoOpSvcCnt)
				|| (TRAN_DIV_CHG.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV)) && keiyakuChuCnt + rsvTtdkiCnt <= inMryoOpSvcCnt))
		{
			// 無料を設定する
			JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.MRYO_FLG, JFUStrConst.CD00002_1);
		}
		else
		// 上記以外の場合
		{
			// 料金プラン固定金額を取得
			String koteiAmount =
					JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.KIHON_PRC_LIST + JFUWebCommon.SEP_0
							+ FUW05401SFConst.PPLAN_KOTEI_AMNT_04);

			if (JFUWebCommon.isNull(koteiAmount) || JFUStrConst.S_ZERO.equals(koteiAmount))
			{
				// 無料を設定する
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.MRYO_FLG, JFUStrConst.CD00002_1);
			}
			else
			{
				// 有料を設定する
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.MRYO_FLG, JFUStrConst.CD00002_0);
			}
		}

		// ----------------------------------------------
		// サブオプション申込可否判定
		// ----------------------------------------------
		// サービスフォームBean.処理区分(tran_div)＝"1"(申込)、かつサービスフォームBean.サブオプション処理フラグ(sbop_tran_flg)＝"1"(要)の場合のみ、
		// 処理対象サブオプションが申込可能かの判定を行なう。
		if (TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV))
				&& JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG)))
		{
			// 処理対象リストが0件、もしくは取得したオプションサービス契約ステータス(op_svc_kei_stat)＝"910"(解約済)の場合
			if (tranTrgtRecOpArray.length == 0
					|| JFUStrConst.CD00037_910.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[0], FUW05401SFConst.OP_SVC_KEI_STAT_01)))
			{
				// エラーパターンIDに「"0102"：契約状態エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (4)eo光電話オプションサービス申込解約：サブオプション申込可否エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
			}
		}

		// ----------------------------------------------
		// サブオプション解約要否判定
		// ----------------------------------------------
		sbopDslYhJudge(bean, tranTrgtRecOpArray);

		DEBUG_LOG.info("----- FUW5401 runVariJudge End  -----");
	}

	/**
	 * サブオプション解約要否判定
	 * <br>
	 * サービスフォームBean.処理区分(tran_div)＝"2"(解約)、<br>
	 * かつサービスフォームBean.オプション処理フラグ(op_tran_flg)＝"1"(要)の場合のみ、<br>
	 * 解約対象オプションに紐付くサブオプションの同時解約が必要かの判定を行なう。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param tranTrgtRecOpArray	処理対象レコードの配列
	 * @throws Exception		すべての例外
	 */
	private void sbopDslYhJudge(X31SDataBeanAccess bean, X31SDataBeanAccess[] tranTrgtRecOpArray) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 sbopDslYhJudge Start  -----");

		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);
		// オプション処理フラグ(op_tran_flg)
		String op_tran_flg = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.OP_TRAN_FLG);

		// 処理区分(tran_div)＝"2"(解約)、オプション処理フラグ(op_tran_flg)＝"1"(要)の場合
		if ((TRAN_DIV_DSL.equals(tran_div)) && (JFUStrConst.CD00001_1.equals(op_tran_flg)))
		{
			// (※ 処理区分＝"2"(解約)で処理対象が0件はありえないので件数チェックは不要)
			//          ↓
			// 処理対象のサービス契約情報[0].サブオプションサービス契約ステータス(sbop_svc_kei_stat)
			String sbop_svc_kei_stat = JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[0], FUW05401SFConst.SBOP_SVC_KEI_STAT_01);

			// サブが存在しない
			if (sbop_svc_kei_stat == null)
			{
				// サブオプション処理フラグ	← "0"(否)
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG, JFUStrConst.CD00001_0);
				// サブオプションサービス契約ステータス(op_svc_kei_stat)＝"020"(照査済)、"030"(締結済)、"100"(サービス提供中)の場合
			}
			else if (JFUStrConst.CD00037_020.equals(sbop_svc_kei_stat) || JFUStrConst.CD00037_030.equals(sbop_svc_kei_stat)
					|| JFUStrConst.CD00037_100.equals(sbop_svc_kei_stat))
			{
				// サブオプション処理フラグ	← "1"(要)
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG, JFUStrConst.CD00001_1);
			}
			else if (JFUStrConst.EMPTY.equals(sbop_svc_kei_stat) || JFUStrConst.CD00037_910.equals(sbop_svc_kei_stat)
					|| JFUStrConst.CD00037_920.equals(sbop_svc_kei_stat))
			{
				// サブオプション処理フラグ	← "0"(否)
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG, JFUStrConst.CD00001_0);
			}
			// 上記以外
			else
			{
				// エラーパターンIDに「"0102"：契約状態エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (5)eo光電話オプションサービス申込解約：サブオプション解約要否エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
			}
		}

		DEBUG_LOG.info("----- FUW5401 sbopDslYhJudge End  -----");
	}

	/**
	 * 処理対象契約レコード各種処理実行
	 * <br>
	 * 処理対象のオプションサービス/サブオプションサービス契約レコードに対する<br>
	 * 各種処理を行います。<br>
	 * ・契約状態の判定<br>
	 * ・予約手続中チェック<br>
	 * ・処理区分判定
	 * <br>
	 * @param bean			サービスフォームBean
	 * @param tranTrgtRecOpArray	処理対象レコードの配列
	 * @param commonInfoBean  共有フォームBean
	 * @return HashMap<String, Integer>	件数情報
	 * @throws Exception	すべての例外
	 */
	private HashMap<String, Integer> runVariTranForTrgtKeiRec( X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess bean, X31SDataBeanAccess[] tranTrgtRecOpArray) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 runVariTranForTrgtKeiRec Start  -----");

		// ----------------------------------------------
		// 契約状態の判定
		// ----------------------------------------------
		// 運用日付
		String opeDate = JFUWebCommon.getOpeDate(this, null);
		// 予約手続中件数
		int rsvTtdkiCnt = 0;
		// 契約中件数
		int keiyakuChuCnt = 0;
		// 同月解約件数
		int dougetuDslCnt = 0;

		// サービスフォームBean/サービス契約情報リスト
		X31SDataBeanAccessArray svcKeiInfoList = bean.getDataBeanArray(FUW05401SFConst.SVC_KEI_INFO_LIST);

		for (int i = 0; i < tranTrgtRecOpArray.length; i++)
		{

			// 予約適用年月日(オプションサービス契約)
			String rsvAplyYmd = JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.KK0351_RSV_APLY_YMD_01);

			// 契約状態を判定し、各状態の件数にカウントする。
			// オプション処理フラグ(op_tran_flg)＝"1"(要)の場合
			if (JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.OP_TRAN_FLG)))
			{
				// オプションサービス契約ステータス＝"010"(受付済)の場合
				if (JFUStrConst.CD00037_010.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.OP_SVC_KEI_STAT_01)))
				{
					// 予約手続中件数＋１
					rsvTtdkiCnt++;
				}
				else
				// サブオプションサービス契約ステータス＝"010"(受付済)の場合
				if (JFUStrConst.CD00037_010.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.SBOP_SVC_KEI_STAT_01)))
				{
					// 予約手続中件数＋１
					rsvTtdkiCnt++;
				}
				else
				// オプションサービス契約ステータス＝"020"(照査済)、"030"(締結済)、"100"(サービス提供中)の場合
				if (JFUStrConst.CD00037_020.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.OP_SVC_KEI_STAT_01))
						|| JFUStrConst.CD00037_030.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i],
								FUW05401SFConst.OP_SVC_KEI_STAT_01))
						|| JFUStrConst.CD00037_100.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i],
								FUW05401SFConst.OP_SVC_KEI_STAT_01)))
				{
					// 契約中件数＋１
					keiyakuChuCnt++;
				}
				else

				// オプションサービス契約ステータス(op_svc_kei_stat)＝"910"(解約済)、
				// かつ「予約適用年月日(オプションサービス契約)(kk0351_rsv_aply_ymd)≦運用日付」、
				// かつ「予約適用年月日(オプションサービス契約)(kk0351_rsv_aply_ymd)の年月＝運用日付の年月」の場合
				if ((JFUStrConst.CD00037_910.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.OP_SVC_KEI_STAT_01)))
						&& (JFUWebCommon.isFutureDate(opeDate, rsvAplyYmd, IS_FUTURE_DATE_PARAM_TODAY_YES))
						&& (JFUWebCommon.isEqualDate(opeDate.substring(0, 6) + "01", rsvAplyYmd.substring(0, 6) + "01")))
				{
					// 同月解約件数＋１
					dougetuDslCnt++;
				}
			}
			else
			// サブオプション処理フラグ(sbop_tran_flg)＝"1"(要)の場合
			if (JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG)))
			{
				// サブオプションサービス契約ステータス＝"010"(受付済)の場合
				if (JFUStrConst.CD00037_010.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.SBOP_SVC_KEI_STAT_01)))
				{
					// 予約手続中件数＋１
					rsvTtdkiCnt++;
				}
				else
				// サブオプションサービス契約ステータス＝"020"(照査済)、"030"(締結済)、"100"(サービス提供中)の場合
				if (JFUStrConst.CD00037_020.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.SBOP_SVC_KEI_STAT_01))
						|| JFUStrConst.CD00037_030.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i],
								FUW05401SFConst.SBOP_SVC_KEI_STAT_01))
						|| JFUStrConst.CD00037_100.equals(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i],
								FUW05401SFConst.SBOP_SVC_KEI_STAT_01)))
				{
					// 契約中件数＋１
					keiyakuChuCnt++;
				}
			}
		}

		// ▼電話オプションの異動予約存在判定
		//  「eo光電話サービス契約情報一覧照会マップ」内に
		//   サービス契約の異動予約情報が設定されているレコードが存在するかをチェックする。
		String reserveFlg = bean.sendMessageString(FUW05401SFConst.RESERVE_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JFUStrConst.S_ONE.equals(reserveFlg))
		{
			for (int i = 0; i < svcKeiInfoList.getCount(); i++)
			{
				X31SDataBeanAccess svcKeiInfobean = svcKeiInfoList.getDataBean(i);

				String opSvcCd = svcKeiInfobean.sendMessageString(FUW05401SFConst.OP_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
				String sbopSvcCd = svcKeiInfobean.sendMessageString(FUW05401SFConst.SBOP_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);

				String opSvcStat = svcKeiInfobean.sendMessageString(FUW05401SFConst.OP_SVC_KEI_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);
				String sbopSvcStat = svcKeiInfobean.sendMessageString(FUW05401SFConst.SBOP_SVC_KEI_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);

				// オプション、サブオプションがパック適用範囲外の場合
				if (!TEL_PACK_OPT_LIST.contains(opSvcCd) && !TEL_PACK_OPT_LIST.contains(sbopSvcCd))
				{
					continue;
				}

				// パック構成オプションに異動予約がある場合
				if (JFUStrConst.CD00037_010.equals(opSvcStat) || JFUStrConst.CD00037_010.equals(sbopSvcStat))
				{
					// 予約あり
					reserveFlg = JFUStrConst.S_ONE;
					bean.sendMessageString(FUW05401SFConst.RESERVE_FLG, X31CWebConst.DATABEAN_SET_VALUE, reserveFlg);
					break;
				}

				// 異動予約詳細コード(オプションサービス契約) ≠ null
				// もしくは異動予約詳細コード(サブオプションサービス契約) ≠ null の場合
				if (!JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(svcKeiInfobean, FUW05401SFConst.KK0351_IDO_RSV_DTL_CD_01))
						|| !JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(svcKeiInfobean, FUW05401SFConst.KK0401_IDO_RSV_DTL_CD_01)))
				{
					// 予約あり
					reserveFlg = JFUStrConst.S_ONE;
					bean.sendMessageString(FUW05401SFConst.RESERVE_FLG, X31CWebConst.DATABEAN_SET_VALUE, reserveFlg);
					break;
				}
			}
		}

		// ----------------------------------------------
		// 予約手続中チェック
		// ----------------------------------------------
		// 「予約手続中件数」が1件以上の場合は、業務共通例外クラス(JCCBusinessException)をスローする。
		if (rsvTtdkiCnt > 0 || JFUStrConst.S_ONE.equals(reserveFlg))
		{
			// エラーパターンIDに「"0203"：契約変更手続中エラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (6)eo光電話オプションサービス申込解約：予約手続中エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0203); // "0203"：契約変更手続中エラー
		}

		// ----------------------------------------------
		// 処理区分判定
		// ----------------------------------------------
		// 予約手続中件数
		HashMap<String, Integer> kensuMap = new HashMap<String, Integer>();

		kensuMap.put(RSV_TTDKI_CNT, rsvTtdkiCnt);
		// 契約中件数
		kensuMap.put(KEIYAKU_CHU_CNT, keiyakuChuCnt);
		// 同月解約件数
		kensuMap.put(DOUGETU_DSL_CNT, dougetuDslCnt);

		judgeTranDiv(bean, kensuMap);

		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);
		if (TRAN_DIV_MSKM.equals(tran_div) || TRAN_DIV_CHG.equals(tran_div))
		{
			// 処理区分が「申込」と「変更」の場合

			// 初期表示処理にて督促チェックを実施する。
			checkTokusokuStat(commonInfoBean);
		}

		DEBUG_LOG.info("----- FUW5401 runVariTranForTrgtKeiRec End  -----");

		return kensuMap;
	}

	/**
	 * 処理対象レコード抽出
	 * <br>
	 * @param bean			サービスフォームBean
	 * @return	処理対象のオプションサービス/サブオプションサービス契約レコードを格納したリスト
	 * @throws Exception	すべての例外
	 */
	private X31SDataBeanAccess[] getTranTrgtRecOp(X31SDataBeanAccess bean) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getTranTrgtRecOp Start  -----");

		// サービスフォームBean.オプションサービスコード(op_svc_cd)
		String op_svc_cd = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.OP_SVC_CD);

		//----------------------------------------------------------------------------------
		// オプションサービスコード(op_svc_cd)が
		// サービスフォームBean.オプションサービスコード(op_svc_cd)と一致するレコードを抽出
		//----------------------------------------------------------------------------------
		Map<String, String> condition = new HashMap<String, String>();
		condition.put(FUW05401SFConst.OP_SVC_CD_01, op_svc_cd);
		X31SDataBeanAccess[] beans = JFUWebCommon.getDataBeanListByPathWithKey(bean, FUW05401SFConst.SVC_KEI_INFO_LIST, condition);

		DEBUG_LOG.info("----- FUW5401 getTranTrgtRecOp End  -----");

		return beans;
	}

	/**
	 * 処理区分判定
	 * <br>
	 * @param bean			サービスフォームBean
	 * @param kensuMap		件数情報
	 * @throws Exception	すべての例外
	 */
	private void judgeTranDiv(X31SDataBeanAccess bean, HashMap<String, Integer> kensuMap) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 judgeTranDiv Start  -----");

		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);
		// サービスフォームBean.オプションサービスコード
		String op_svc_cd = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.OP_SVC_CD);
		// 契約中件数
		int keiyakuChuCnt = kensuMap.get(KEIYAKU_CHU_CNT);

		// 処理区分が"1"(申込)の場合
		if (TRAN_DIV_MSKM.equals(tran_div))
		{
			// 「契約中件数」が1件以上の場合は、業務共通例外クラス(JCCBusinessException)をスローする。
			if (keiyakuChuCnt > 0)
			{
				// エラーパターンIDに「"0201"：お客様情報変更エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (7)eo光電話オプションサービス申込解約：契約中エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201); // "0201"：お客様情報変更エラー
			}
		}
		// 処理区分が"2"(解約)または"3"(変更)の場合
		else if (TRAN_DIV_DSL.equals(tran_div) || TRAN_DIV_CHG.equals(tran_div))
		{
			// 「契約中件数」が0件の場合は、業務共通例外クラス(JCCBusinessException)をスローする。
			if (keiyakuChuCnt == 0)
			{
				// エラーパターンIDに「"0201"：お客様情報変更エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (8)eo光電話オプションサービス申込解約：契約中件数０件エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201); // "0201"：お客様情報変更エラー
			}
			// 処理区分がnullの場合
		}
		else if (JFUWebCommon.isNull(tran_div))
		{
			// 外部システムからの横入りによる遷移では処理区分が指定されないので、現在の契約状態から処理区分を自動設定する。
			// 「契約中件数」が0件の場合は、処理区分に"1"(申込)を設定する
			if (keiyakuChuCnt == 0)
			{
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV, TRAN_DIV_MSKM);
			}
			else
			// 「契約中件数」が1件以上の場合は、処理区分に"2"(解約)を設定する(通話料上限通知以外)
			if (keiyakuChuCnt > 0 && (!(JFUStrConst.CD00136_B072.equals(op_svc_cd))))
			{
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV, TRAN_DIV_DSL);
			}
			else
			// 「契約中件数」が1件以上の場合は、処理区分に"3"(変更)を設定する(通話料上限通知)
			if (keiyakuChuCnt > 0 && (JFUStrConst.CD00136_B072.equals(op_svc_cd)))
			{
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV, TRAN_DIV_CHG);
			}
		}

		DEBUG_LOG.info("----- FUW5401 judgeTranDiv End  -----");
	}

	/**
	 * サービス呼出処理（FUSV0031_eo光電話オプションサービス申込解約(初期表示)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @return outputMap		SC戻り値のMap
	 * @throws Exception		すべての例外
	 */
	private HashMap<String, Object> callSvcFUSV0031(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0031 Start  -----");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { commonInfoBean, bean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_INIT);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0031_FUSV0031OPDBMapper mapper = new FUSV0031_FUSV0031OPDBMapper();

		// サービスの入力値設定
		// 機能コード:"1"
		mapper.setFUSV003101SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2); // EKK0081B508	eo光電話サービス契約情報一覧照会
		mapper.setFUSV003102SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // EKK0341B002	機器提供サービス契約一覧照会(サービス契約番号)
		mapper.setFUSV003103SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2); // EKK0811A010	料金コース_オプションサービス一意照会
		mapper.setFUSV003104SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // EKK0601B001	料金プラン固定単価（オプション申込料金）一覧照会
		mapper.setFUSV003105SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // EKK0601B001	料金プラン固定単価（オプション申込料金）一覧照会
		mapper.setFUSV003106SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // EKK0601B501	業務パラメータ管理一覧照会
		mapper.setFUSV003107SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // EKK2811B503	機器オプションサービス契約一覧照会（フロント）
		mapper.setFUSV003108SC(paramBean, inputMap
				, JFUWebCommon.getOpeDate(this, null)
				, JPCModelConstant.FUNC_CD_1); // EKK2811B504	機器オプションサービス契約一覧照会（複合検索）

		// 電話セレクトオプションパック照会
		mapper.setJKKTelSelectOpPackOperateCC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setJFUTelOpMskmCheckCC(commonInfoBean, bean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 初期表示時例外ハンドリング処理
			this.handleInitException(se);
		}

		// サービスの出力値設定
		mapper.getFUSV003101SC(paramBean, outputMap);
		mapper.getFUSV003102SC(paramBean, outputMap);
		mapper.getFUSV003103SC(paramBean, outputMap);
		mapper.getFUSV003104SC(paramBean, outputMap);
		mapper.getFUSV003105SC(paramBean, outputMap);
		mapper.getFUSV003106SC(paramBean, outputMap);
		mapper.getFUSV003107SC(paramBean, outputMap);
		mapper.getFUSV003108SC(paramBean, outputMap);

		// オプション申込フラグ（0:申込可、1:申込不可）
		if (outputMap.containsKey(TEL_OP_MSKM_CHECK_KEY))
		{
			HashMap parentMap = (HashMap)outputMap.get(TEL_OP_MSKM_CHECK_KEY);
			if (parentMap != null)
			{
				if (JFUStrConst.CD00002_1.equals((String)parentMap.get("mskmKhFlg")))
				{
					// 申込み不可
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);

				}
			}
		}

		// オンライン運用日付(yyyyMMDD)を取得
		String opeDate = JFUWebCommon.getOpeDate(this, null);
		// 料金コース_オプションサービス一覧照会(料金コースコード)SC下りマッピング
		mapper.getJKKTelSelectOpPackOperateCC(paramBean, outputMap, opeDate);

		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0031 End  -----");

		// --------------------------------------------------------------
		// 料金表情報の設定でSC戻り値のMapが必要なため、outputMapを返す。
		// --------------------------------------------------------------
		return outputMap;

	}

	/**
	 * 料金表情報の設定
	 * <br>
	 * @param bean			サービスフォームBean
	 * @param outputMap		サービス処理結果Map
	 * @throws Exception	すべての例外
	 */
	/*修正者:FJ)高浜，修正前の版数:1.7，修正後の版:1.8，修正内容:備考文言表示を画面ごとに制御するよう修正
	private void setPrcInfoAreaEoTelOp(X31SDataBeanAccess bean, HashMap<String, Object> outputMap) throws Exception
	*/
	/*修正者:FJ)高浜，修正前の版数:1.7，修正後の版:1.8，修正内容:備考文言表示を画面ごとに制御するよう修正*/
	private void setPrcInfoAreaEoTelOp(X31SDataBeanAccess bean, HashMap<String, Object> outputMap, String ronriScreenId) throws Exception
	/*修正者:FJ)高浜，修正前の版数:1.7，修正後の版:1.8，修正内容:備考文言表示を画面ごとに制御するよう修正*/
	{
		DEBUG_LOG.info("----- FUW5401 setPrcInfoAreaEoTelOp Start  -----");

		if (JFUStrConst.CD00002_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.MRYO_FLG)))
		{
			// 無料の場合
			// 無料表示用の基本料金情報を設定する。
			JFUWebCommon.setFreePrcInfoMap(outputMap, MAP_KEY_FUSV003104SC);
		}
		// ----------------------------------------------
		// 料金表情報の設定(共通メソッド)
		// ----------------------------------------------
		/*修正者:FJ)高浜，修正前の版数:1.7，修正後の版:1.8，修正内容:備考文言表示を画面ごとに制御するよう修正
		JFUWebCommon.setPrcInfoArea(bean, outputMap, MAP_KEY_FUSV003104SC, JFUStrConst.EMPTY, JFUScreenConst.SCREEN_ID_FUW05401);
		*/
		/*修正者:FJ)高浜，修正前の版数:1.7，修正後の版:1.8，修正内容:備考文言表示を画面ごとに制御するよう修正*/
		// 画面ID
		String gamenId = JFUStrConst.EMPTY;

		if (RONRI_SCREEN_ID_FUW062.equals(ronriScreenId))
		{
			//論理がFUW062：050ナンバープラスサービス申込解約 の場合はこの画面のIDをセット
			gamenId = JFUScreenConst.SCREEN_ID_FUW06201;
		}
		else
		{
			//FUW062以外はFUW054をセット
			gamenId = JFUScreenConst.SCREEN_ID_FUW05401;
		}
		JFUWebCommon.setPrcInfoArea(bean, outputMap, MAP_KEY_FUSV003104SC, JFUStrConst.EMPTY, gamenId);
		/*修正者:FJ)高浜，修正前の版数:1.7，修正後の版:1.8，修正内容:備考文言表示を画面ごとに制御するよう修正*/

		DEBUG_LOG.info("----- FUW5401 setPrcInfoAreaEoTelOp End  -----");
	}

	/**
	 * 業務エラー判定(初期表示)
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param tranTrgtRecOpArray		処理対象レコードの配列(オプション)
	 * @throws Exception	すべての例外
	 */
	private void checkInitError(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess[] tranTrgtRecOpArray) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 checkInitError Start  -----");

		// ----------------------------------------------
		// (a)サービス契約存在チェック
		// ----------------------------------------------
		// サービス契約情報リストのレコード件数が0件、
		// または機器提供サービス契約リストのレコード件数が0件の場合
		if (bean.getDataBeanArray(FUW05401SFConst.SVC_KEI_INFO_LIST).getCount() == 0
				|| bean.getDataBeanArray(FUW05401SFConst.KKTK_SVC_KEI_LIST).getCount() == 0)
		{
			// エラーパターンIDに「"0102"：契約状態エラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (9)eo光電話オプションサービス申込解約：サービス契約、機器提供レコード０件エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
		}

		// ----------------------------------------------
		// (b)サービス契約状態チェック
		// ----------------------------------------------
		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		String status =
				JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SVC_KEI_UCWK_INFO + JFUWebCommon.SEP_0
						+ CommonInfoCFConst.SVC_KEI_UCWK_STAT_24);

		// サービス契約内訳ステータスが「"020"：照査済」「"030"：締結済」「"100"：サービス提供中」以外の場合
		if (!(JFUStrConst.CD00037_020.equals(status) || JFUStrConst.CD00037_030.equals(status) || JFUStrConst.CD00037_100.equals(status)))
		{
			// エラーパターンIDに「"0102"：契約状態エラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (10)eo光電話オプションサービス申込解約：サービス契約内訳ステータスエラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
		}

		// サブオプション処理フラグ(sbop_tran_flg)＝"1"(要)の場合
		if (JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG)))
		{
			// 親オプションのデータが存在しない場合、
			if (tranTrgtRecOpArray == null || tranTrgtRecOpArray.length == 0)
			{
				// エラーパターンIDに「"0102"：契約状態エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (11)eo光電話オプションサービス申込解約：サブオプションサービス契約ステータスエラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
			}
			status = JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[0], FUW05401SFConst.OP_SVC_KEI_STAT_01);
			// サブオプションサービス契約ステータスが「"020"：照査済」「"030"：締結済」「"100"：サービス提供中」以外の場合
			if (!(JFUStrConst.CD00037_020.equals(status) || JFUStrConst.CD00037_030.equals(status) || JFUStrConst.CD00037_100.equals(status)))
			{
				// エラーパターンIDに「"0102"：契約状態エラー」を設定する。
				DEBUG_LOG.info("■■■FUW05401 (11)eo光電話オプションサービス申込解約：サブオプションサービス契約ステータスエラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
			}
		}
		/* ++++++++++ v4.00 修正終了 ++++++++++ */
		// ----------------------------------------------
		// (c)異動予約存在チェック
		// ----------------------------------------------
		// オプション処理フラグ(op_tran_flg)＝"1"(要)の場合
		if (JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.OP_TRAN_FLG)))
		{
			if (null != tranTrgtRecOpArray)
			{
				for (int i = 0; i < tranTrgtRecOpArray.length; i++)
				{
					// 異動予約詳細コード(オプションサービス契約) ≠ null
					// もしくは異動予約詳細コード(サブオプションサービス契約) ≠ null の場合
					if (!JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.KK0351_IDO_RSV_DTL_CD_01))
							|| !JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i],
									FUW05401SFConst.KK0401_IDO_RSV_DTL_CD_01)))
					{
						// エラーパターンIDに「"0203"：契約変更手続中エラー」を設定する。
						DEBUG_LOG.info("■■■FUW05401 (12)eo光電話オプションサービス申込解約：異動予約手続中エラー■■■");
						throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0203); // "0203"：契約変更手続中エラー
					}
				}
			}
		}
		else
		// サブオプション処理フラグ(sbop_tran_flg)＝"1"(要)の場合
		if (JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG)))
		{
			if (null != tranTrgtRecOpArray)
			{
				for (int i = 0; i < tranTrgtRecOpArray.length; i++)
				{
					// 異動予約詳細コード(サブオプションサービス契約) ≠ null の場合
					if (!JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i], FUW05401SFConst.KK0351_IDO_RSV_DTL_CD_01))
							|| !JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[i],
									FUW05401SFConst.KK0401_IDO_RSV_DTL_CD_01)))
					{
						// エラーパターンIDに「"0203"：契約変更手続中エラー」を設定する。
						DEBUG_LOG.info("■■■FUW05401 (13)eo光電話オプションサービス申込解約：異動予約手続中エラー■■■");
						throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0203); // "0203"：契約変更手続中エラー
					}
				}
			}
		}

		// ----------------------------------------------
		// (d)マスタ不整合チェック
		// ----------------------------------------------
		// 料金コース_オプションサービスリストのレコード件数が0件の場合
		if (bean.getDataBeanArray(FUW05401SFConst.PCRS_OP_SVC_LIST).getCount() == 0)
		{
			// エラーパターンIDに「"0002"：システムエラー」を設定する。
			DEBUG_LOG.info("■■■FUW05401 (14)eo光電話オプションサービス申込解約：料金コース_オプションサービス０件エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002); // "0002"：システムエラー
		}

		DEBUG_LOG.info("----- FUW5401 checkInitError End  -----");
	}

	/**
	 * 初期表示時例外ハンドリング処理
	 * <br/>
	 * 初期表示処理時に発生した業務例外のハンドリングを行ないます。
	 *
	 * @param se サービス呼出で発生したJCCWebServiceExceptionオブジェクト
	 * @throws Exception すべての例外
	 */
	private void handleInitException(final JCCWebServiceException se) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 handleInitException Start  -----");

		// 例外詳細情報を取得
		X31CMessageMoreInfo[] moreInfo = se.getMessageList().getMessageMoreInfoList();
		// メッセージ詳細情報クラスを取得
		// (単項目チェックエラーの発生有無を確認するだけなので、先頭レコードのみ処理する)
		X31CMessageMoreInfo info = moreInfo[0];

		String status = info.getStatus();

		DEBUG_LOG.info("----- FUW5401 handleInitException End  -----");

		// ステータスが"1000"(単項目チェックエラー)の場合
		if (String.valueOf(JPCModelConstant.SINGLEDATA_ERR).equals(status))
		{
			// 画面初期表示時の単項目チェックエラーは、画面上で訂正できない。
			// →フロント共通エラー画面に遷移
			DEBUG_LOG.info("■■■FUW05401 (15)eo光電話オプションサービス申込解約：単項目チェックエラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102); // "0102"：契約状態エラー
		}

		// その他のエラーは入力パラメータに起因しないエラーなので、システムエラー扱いとする。
		DEBUG_LOG.info("■■■FUW05401 (16)eo光電話オプションサービス申込解約：システムエラー（単項目チェックエラー以外）■■■");
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002); // "0002"：システムエラー
	}

	/**
	 * 確認するボタン押下処理【FUW05401】
	 *
	 * @return boolean true(固定)
	 * @throws Exception	すべての例外
	 */
	public boolean cfm() throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 cfm Start  -----");

		// ----------------------------------------------
		// Bean取得
		// ----------------------------------------------
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// ----------------------------------------------
		// 論理機能IDを取得
		// ----------------------------------------------
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		//----------------------------------------------
		// 申込前チェック・申込実行
		//  機能コード："2"
		//----------------------------------------------
		chkPreAndExecMskm(bean, commonInfoBean, JPCModelConstant.FUNC_CD_2, ronriScreenId);

		// ----------------------------------------------
		// 共有フォームBean設定
		// ----------------------------------------------
		// 遷移先画面ＩＤ
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, getCfmScreenId(ronriScreenId));
		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, getCfmScreenName(ronriScreenId));

		DEBUG_LOG.info("----- FUW5401 cfm End  -----");

		return true;
	}

	////////////////////////////////////////////////////////////////////////////////
	//	【FUW05402】
	////////////////////////////////////////////////////////////////////////////////

	/**
	 * 戻るボタン押下処理【FUW05402】
	 * <br>
	 * @return boolean true(固定)
	 * @throws Exception	すべての例外
	 */
	public boolean back() throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 back Start  -----");

		// ----------------------------------------------
		// Bean取得
		// ----------------------------------------------
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// ----------------------------------------------
		// 論理機能IDを取得
		// ----------------------------------------------
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		// ----------------------------------------------
		// 共有フォームBean設定
		// ----------------------------------------------
		// 遷移先画面ＩＤ
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, getMskmScreenId(ronriScreenId));
		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, getMskmScreenName(ronriScreenId));

		DEBUG_LOG.info("----- FUW5401 back End  -----");

		return true;
	}

	/**
	 * 申し込む/解約するボタン押下処理【FUW05402】
	 *
	 * @return boolean true(固定)
	 * @throws Exception	すべての例外
	 */
	public boolean mskmDsl() throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 mskmDsl Start  -----");

		// ----------------------------------------------
		// Bean取得
		// ----------------------------------------------
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// ----------------------------------------------
		// 論理機能IDを取得
		// ----------------------------------------------
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		//----------------------------------------------
		// 申込前チェック・申込実行
		//  機能コード："1"
		//----------------------------------------------
		chkPreAndExecMskm(bean, commonInfoBean, JPCModelConstant.FUNC_CD_1, ronriScreenId);

		// 申込完了メール設定処理
		setMskmMailInfo(bean, ronriScreenId);

		// -------------------------------------------------
		// 現顧客契約リフレッシュ処理
		// -------------------------------------------------
		JFUWebCommon.refreshGenCustKei(this);

		// ----------------------------------------------
		// 共有フォームBean設定
		// ----------------------------------------------
		// 遷移先画面ＩＤ
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, getFinScreenId(ronriScreenId));
		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, getFinScreenName(ronriScreenId));

		DEBUG_LOG.info("----- FUW5401 mskmDsl End  -----");

		return true;
	}

	/**
	 * 申込前チェック・申込実行処理
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param funcCd			機能コード
	 * @param ronriScreenId		論理画面ID
	 * @throws Exception		すべての例外
	 */
	private void chkPreAndExecMskm(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String funcCd, String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 chkPreAndExecMskm Start  -----");

		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);

		if (JPCModelConstant.FUNC_CD_1.equals(funcCd))
		{
			// 「申込」「解約ボタン押下時のみ共通関連チェックを行う。
			//  確認の初期処理ではチェックを行わない。
			//----------------------------------------------
			// 共通関連チェック
			//----------------------------------------------
			// 処理区分が"1"(申込)の場合
			if (TRAN_DIV_MSKM.equals(tran_div))
			{
				// 申込サービスIDでチェック(督促チェックあり)
				JFUWebCommon.checkCommonRelation(this, SVC_ID_MSKM);
			}
			// 上記以外("2":解約)の場合
			else if (TRAN_DIV_DSL.equals(tran_div))
			{
				// 解約サービスIDでチェック(督促チェックなし)
				JFUWebCommon.checkCommonRelation(this, SVC_ID_DSL);
			}
			// 上記以外("3":変更)の場合
			else if (TRAN_DIV_CHG.equals(tran_div))
			{
				// 変更サービスIDでチェック(督促チェックあり)
				JFUWebCommon.checkCommonRelation(this, COMMON_REL_CHECK_ID_CHG);
			}
		}

		//----------------------------------------------
		// サービス呼出処理
		//----------------------------------------------
		callSvcMskm(bean, commonInfoBean, funcCd);

		// ----------------------------------------------
		// 業務エラー判定(申込)
		// ----------------------------------------------
		if (JPCModelConstant.FUNC_CD_1.equals(funcCd))
		{
			checkMskmError(bean);
		}

		DEBUG_LOG.info("----- FUW5401 chkPreAndExecMskm End  -----");
	}

	/**
	 * 業務エラー判定(申込)
	 * <br>
	 * @param bean			サービスフォームBean
	 * @throws Exception	すべての例外
	 */
	private void checkMskmError(X31SDataBeanAccess bean) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 checkMskmError Start  -----");

		// 050電話番号払い出しチェック
		// サービスフォームBean.処理区分＝"1"(申込)、かつサービスフォームBean.050オプション電話処理フラグ＝"1"(要)、
		// サービスフォームBean.回復処理フラグ＝"0"(否)の場合
		// 申込処理で050電話番号の払い出しが成功しているかのチェックを行なう。
		if ((TRAN_DIV_MSKM.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV)))
				&& JFUStrConst.CD00001_1.equals(JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.N_050_OP_TELNO_TRAN_FLG)))
		{
			// サービスフォームBean.電話番号一覧照会明細リスト(telno_icrn_shokai_dtl_list)の明細件数が0件の場合
			if (0 == bean.getDataBeanArray(FUW05401SFConst.TELNO_ICRN_SHOKAI_DTL_LIST).getCount())
			{
				// 業務共通例外クラス（JCCBusinessException）をスローする。
				DEBUG_LOG.info("■■■FUW05401 (17)eo光電話オプションサービス申込解約：050電話番号払い出し 電話番号一覧照会明細リスト０件エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002); // "0002"：システムエラー
			}
			else
			{
				// 件数が0件でない場合、採番した電話番号を050電話番号に設定(完了画面表示用)

				// 電話番号一覧照会明細リスト(1件目)
				X31SDataBeanAccess telnoIcrnShokaiDtlList = bean.getDataBeanArray(FUW05401SFConst.TELNO_ICRN_SHOKAI_DTL_LIST).getDataBean(0);

				// 電話番号が空文字の場合
				if (JFUWebCommon.isNull(JFUWebCommon.getDataBeanItemByPath(telnoIcrnShokaiDtlList, FUW05401SFConst.TELNO_05)))
				{
					// 業務共通例外クラス（JCCBusinessException）をスローする。
					DEBUG_LOG.info("■■■FUW05401 (18)eo光電話オプションサービス申込解約：050電話番号払い出しエラー■■■");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002); // "0002"：システムエラー
				}

				// ０５０オプション電話番号
				JFUWebCommon.setDataBeanItemByPath(bean, FUW05401SFConst.N_050_OP_TELNO, JFUWebCommon.getDataBeanItemByPath(telnoIcrnShokaiDtlList,
						FUW05401SFConst.TELNO_05));

			}

		}

		DEBUG_LOG.info("----- FUW5401 checkMskmError End  -----");
	}

	/**
	 * サービス呼出処理（申込処理）
	 * <br>
	 * 引数で指定されたサービスIDのサービス(申込/解約/回復)を呼び出します。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param funcCd			機能コード
	 * @throws Exception		すべての例外
	 */
	private void callSvcMskm(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String funcCd) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 callSvcMskm Start  -----");

		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);

		// サービスフォームBean.処理区分(tran_div)＝"1"(申込)
		if (TRAN_DIV_MSKM.equals(tran_div))
		{
			callSvcFUSV0032(bean, commonInfoBean, funcCd); // FUSV0032	eo光電話オプションサービス申込解約(申込)
		}
		// サービスフォームBean.処理区分(tran_div)＝"2"(解約)の場合
		else if (TRAN_DIV_DSL.equals(tran_div))
		{
			callSvcFUSV0033(bean, commonInfoBean, funcCd); // FUSV0033	eo光電話オプションサービス申込解約(解約)
		}
		// サービスフォームBean.処理区分(tran_div)＝"3"(変更)の場合
		else if (TRAN_DIV_CHG.equals(tran_div))
		{
			callSvcFUSV0207(bean, commonInfoBean, funcCd); // FUSV0207	eo光電話オプションサービス申込解約(変更)
		}

		DEBUG_LOG.info("----- FUW5401 callSvcMskm End  -----");
	}

	/**
	 * サービス呼出処理（eo光電話オプションサービス申込解約(申込)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param funcCd			機能コード
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0032(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String funcCd) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0032 Start  -----");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { commonInfoBean, bean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_MSKM);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0032_FUSV0032OPDBMapper mapper = new FUSV0032_FUSV0032OPDBMapper();

		// 電話番号一覧照会明細リストをクリアする
		X31SDataBeanAccessArray telnoIcrnShokaiDtlList = bean.getDataBeanArray(FUW05401SFConst.TELNO_ICRN_SHOKAI_DTL_LIST);
		telnoIcrnShokaiDtlList.clearArray();

		// サービスの入力値設定(機能コード)
		mapper.setFUSV0032WORK01(paramBean, inputMap, funcCd); // 作業項目マップ01
		mapper.setFUSV003214SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // ETU0051B010	通信事業者一覧照会
		mapper.setFUSV003201SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1); // EZM0121B010	電話番号一覧照会
		mapper.setFUSV003202SC(paramBean, inputMap, funcCd); // EZM0111D010		エイジング対象登録
		mapper.setFUSV003203SC(paramBean, inputMap, funcCd); // EKK0011D020		申込内容承認登録
		mapper.setFUSV003204SC(paramBean, inputMap, funcCd); // EKK0371D010		オプションサービス契約<電話>登録
		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		mapper.setFUSV003212SC(paramBean, inputMap, funcCd); // EKK0371C010		オプションサービス契約<電話>照査
		/* ++++++++++ v4.00 修正終了 ++++++++++ */
		mapper.setFUSV003205SC(paramBean, inputMap, funcCd); // EKK0371C030		オプションサービス契約<電話>照査締結
		mapper.setFUSV003206SC(paramBean, inputMap, funcCd); // EKK0371C040		オプションサービス契約<電話>開始
		mapper.setFUSV003207SC(paramBean, inputMap, funcCd); // EKK0431D010		サブオプションサービス契約<電話>登録
		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		mapper.setFUSV003213SC(paramBean, inputMap, funcCd); // EKK0431C010		サブオプションサービス契約<電話>照査
		/* ++++++++++ v4.00 修正終了 ++++++++++ */
		mapper.setFUSV003208SC(paramBean, inputMap, funcCd); // EKK0431C030		サブオプションサービス契約<電話>照査締結
		mapper.setFUSV003209SC(paramBean, inputMap, funcCd); // EKK0431C040		サブオプションサービス契約<電話>使用開始
		mapper.setFUSV003210SC(paramBean, inputMap, funcCd); // EKK1091D010		進捗登録
		mapper.setFUSV003211SC(paramBean, inputMap, funcCd); // EKK0021C060		申込明細照査・後続業務依頼

		setFUSV003202CC(paramBean, inputMap, funcCd, false); // JKKHakkoSODCC	サービスオーダ発行部品

		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		// サービス契約内訳ステータス設定
		JFUWebCommon.setSvcKeiUcwkStat(this, inputMap);

		// 論理画面ID
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		// サブオプションサービス契約登録の場合
		if (SBOP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
		{
			// オプションサービス契約ステータスを予備1に設定
			JFUWebCommon.setOpSvcKeiStatByOpSvcCdRsv1(this, inputMap, getOpSvcCd(ronriScreenId));
		}
		/* ++++++++++ v4.00 修正終了 ++++++++++ */

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 申込時例外ハンドリング処理
			this.handleMskmException(se);
		}

		// サービスの出力値設定(電話番号)
		mapper.getFUSV003201SC(paramBean, outputMap);

		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0032 End  -----");
	}

	/**
	 * 上りマッピングをする。
	 * <br>
	 * @param bean			[0]：共有フォームビーン　[1]：ｅｏ光電話オプションサービス申込解約
	 * @param outputMap		設定値格納用マップ
	 * @param func_code		機能コード
	 * @param tran_flg		処理フラグ(true:解約・回復　false:申込)
	 * @return 送信情報
	 * @throws Exception
	 */
	private HashMap<String, Object> setFUSV003202CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code, boolean tran_flg)
			throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 setFUSV003202CC Start  -----");

		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 対象データリスト
		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();

		// サブオプション処理フラグ(sbop_tran_flg)
		String sbop_tran_flg = JFUWebCommon.getDataBeanItemByPath(bean[1], FUW05401SFConst.SBOP_TRAN_FLG);

		for (int i = 0; i < bean[BEAN_SSO_1].getDataBeanArray(FUW05401SFConst.KKTK_SVC_KEI_LIST).getCount(); i++)
		{

			// SODマップ
			HashMap<String, Object> childMap = new HashMap<String, Object>();

			// SOD基本情報
			HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
			// SYSID
			sodKihonInfo.put(SYSID, bean[BEAN_SSO_1].sendMessageString(FUW05401SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE));
			// 異動区分
			sodKihonInfo.put(IDO_DIV, JFUStrConst.CD00576_00031);
			// SODマップに追加
			childMap.put(SOD_KIHON_INFO, sodKihonInfo);

			// サービス契約情報
			HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
			// サービス契約番号
			svcKeiInfo.put(SVC_KEI_NO, bean[BEAN_SSO_1].sendMessageString(FUW05401SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
			// SODマップに追加
			childMap.put(SVC_KEI_INFO, svcKeiInfo);

			// サービス契約内訳情報
			HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
			// サービス契約内訳番号
			svcKeiUcwkInfo.put(SVC_KEI_UCWK_NO, bean[BEAN_SSO_1].sendMessageString(FUW05401SFConst.SVC_KEI_UCWK_NO, X31CWebConst.DATABEAN_GET_VALUE));
			// 変更前オプションサービス契約世代登録年月日時分秒(サービス契約内訳)
			svcKeiUcwkInfo.put(CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, JFUWebCommon.getDataBeanItemByPath(bean[BEAN_SSO_1], FUW05401SFConst.SVC_KEI_INFO_LIST
					+ JFUWebCommon.SEP_0 + FUW05401SFConst.KK0161_GENE_ADD_DTM_01));
			// SODマップに追加
			childMap.put(SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);

			// オプションサービス契約情報
			HashMap<String, Object> opsvkeiInfo = new HashMap<String, Object>();

			// 処理フラグが解約・回復の場合、
			// またはサブオプションの申込の場合、変更前情報を設定する
			if (tran_flg || JFUStrConst.CD00001_1.equals(sbop_tran_flg))
			{
				// 変更前オプションサービス契約番号
				opsvkeiInfo.put(CHBF_OPSVKEI_NO, bean[BEAN_SSO_1].sendMessageString(FUW05401SFConst.OP_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
				// 変更前オプションサービス契約世代登録年月日時分秒(オプションサービス契約)
				X31SDataBeanAccess[] tranTrgtRecOpArray = getTranTrgtRecOp(bean[BEAN_SSO_1]);
				String extK0351 = JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[0], FUW05401SFConst.KK0351_GENE_ADD_DTM_01);
				opsvkeiInfo.put(CHBF_OPSVKEI_GENE_ADD_DTM, extK0351);
				// 変更前サブオプションサービス契約番号
				opsvkeiInfo.put(CHBF_SBOPSVKEI_NO, bean[BEAN_SSO_1].sendMessageString(FUW05401SFConst.SBOP_SVC_KEI_NO,
						X31CWebConst.DATABEAN_GET_VALUE));
				// 変更前サブオプションサービス契約世代登録年月日時分秒(サブオプションサービス契約)
				String extK0401 = JFUWebCommon.getDataBeanItemByPath(tranTrgtRecOpArray[0], FUW05401SFConst.KK0401_GENE_ADD_DTM_01);
				opsvkeiInfo.put(CHBF_SBOPSVKEI_GENE_ADD_DTM, extK0401);
			}

			// SODマップに追加
			childMap.put(OPSVKEI_INFO, opsvkeiInfo);

			// 機器提供サービス内訳情報
			HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();

			// 変更後機器提供サービス契約番号
			kktsvkeiInfo.put(CHAF_KKTSVKEI_NO, JFUWebCommon.getDataBeanItemByPath(bean[BEAN_SSO_1], FUW05401SFConst.KKTK_SVC_KEI_LIST + "/" + i + "/"
					+ FUW05401SFConst.KKTK_SVC_KEI_NO_02));

			// 変更後機器提供サービス契約世代登録年月日時分秒
			kktsvkeiInfo.put(CHAF_KKTSVKEI_GENE_ADD_DTM, JFUWebCommon.getDataBeanItemByPath(bean[BEAN_SSO_1], FUW05401SFConst.KKTK_SVC_KEI_LIST + "/"
					+ i + "/" + FUW05401SFConst.GENE_ADD_DTM_02));

			// SODマップに追加
			childMap.put(KKTSVKEI_INFO, kktsvkeiInfo);

			// SODマップを対象データリストに追加
			arrayList.add(childMap);

		}

		// 対象データリストをマップに追加
		parentMap.put(REQ_TRGT_DATA_LIST, arrayList);

		// 対象データリストのマッピング
		outputMap.put(HAKKO_SOD_MAP, parentMap);

		DEBUG_LOG.info("----- FUW5401 setFUSV003202CC End  -----");

		return outputMap;
	}

	/**
	 * サービス呼出処理（eo光電話オプションサービス申込解約(解約)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param funcCd			機能コード
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0033(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String funcCd) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0033 Start  -----");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { commonInfoBean, bean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_DSL);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0033_FUSV0033OPDBMapper mapper = new FUSV0033_FUSV0033OPDBMapper();

		// サービスの入力値設定(機能コード)
		mapper.setFUSV0033WORK01(paramBean, inputMap, funcCd); // 作業項目マップ01
		mapper.setFUSV003301SC(paramBean, inputMap, funcCd); // EKK0011D020		申込内容承認登録
		mapper.setFUSV003302SC(paramBean, inputMap, funcCd); // EKK0401C170		サブオプションサービス契約解約
		mapper.setFUSV003303SC(paramBean, inputMap, funcCd); // EKK0401C180		サブオプションサービス契約解約確定
		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		mapper.setFUSV003309SC(paramBean, inputMap, funcCd); // EKK0401C150		サブオプションサービス契約キャンセル
		/* ++++++++++ v4.00 修正終了 ++++++++++ */
		mapper.setFUSV003304SC(paramBean, inputMap, funcCd); // EKK0351C240		オプションサービス契約解約
		mapper.setFUSV003305SC(paramBean, inputMap, funcCd); // EKK0351C250		オプションサービス契約解約確定
		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		mapper.setFUSV003310SC(paramBean, inputMap, funcCd); // EKK0351C220		オプションサービス契約キャンセル
		/* ++++++++++ v4.00 修正終了 ++++++++++ */
		mapper.setFUSV003306SC(paramBean, inputMap, funcCd); // EKK1091D010		進捗登録
		mapper.setFUSV003307SC(paramBean, inputMap, funcCd); // EZM0111C010		エイジング対象使用終了
		mapper.setFUSV003308SC(paramBean, inputMap, funcCd); // EKK0021C060		申込明細照査・後続業務依頼
		mapper.setFUSV003303CC(paramBean, inputMap); // JFUHiChrgJdgCC	非課金判定CC
		setFUSV003202CC(paramBean, inputMap, funcCd, true); // JKKHakkoSODCC	サービスオーダ発行部品

		/* ++++++++++ v4.00 修正開始 ++++++++++ */
		// 論理画面ID
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		// オプションサービス契約ステータス設定
		JFUWebCommon.setOpSvcKeiStatByOpSvcCd(this, inputMap, getOpSvcCd(ronriScreenId));

		// サブオプションサービス契約登録の場合
		// サブオプションサービス契約登録の場合
		if (SBOP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
		{
			// サブオプションサービス契約ステータスを予備1に設定
			JFUWebCommon.setSbopSvcKeiStatRsv1(this, inputMap, getOpSvcCd(ronriScreenId), getSbopSvcCd(ronriScreenId));
		}
		else
		{
			String sbopTranFlg = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.SBOP_TRAN_FLG);
			// サービスフォームBean.サブオプション処理フラグ(op_tran_flg)＝"1"(要)の場合（「"020"：照査済」「"030"：締結済」「"100"：サービス提供中」）
			//    親が解約された場合、子も解約を行う。
			if (JFUStrConst.CD00001_1.equals(sbopTranFlg))
			{
				// サブオプションサービス契約ステータスを予備1に設定
				JFUWebCommon.setSbopSvcKeiStatRsv1(this, inputMap, getOpSvcCd(ronriScreenId), getSbopSvcCd(getChildRonriScreenId(ronriScreenId)));
			}
		}
		/* ++++++++++ v4.00 修正終了 ++++++++++ */

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 申込時例外ハンドリング処理
			this.handleMskmException(se);
		}

		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0033 End  -----");

	}

	/**
	 * サービス呼出処理（eo光電話オプションサービス申込解約(変更)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param funcCd			機能コード
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0207(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String funcCd) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0207 Start  -----");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { commonInfoBean, bean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_CHG);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0207_FUSV0207OPDBMapper mapper = new FUSV0207_FUSV0207OPDBMapper();

		// サービスの入力値設定(機能コード)
		mapper.setFUSV020701SC(paramBean, inputMap, funcCd); // EKK0011D020		申込内容承認登録
		mapper.setFUSV020702SC(paramBean, inputMap, funcCd); // EKK0371C050		オプションサービス契約〈契約〉情報変更
		mapper.setFUSV020703SC(paramBean, inputMap, funcCd); // EKK1091D010		進捗登録
		mapper.setFUSV020704SC(paramBean, inputMap, funcCd); // EKK0021C060		申込明細照査・後続業務依頼
		mapper.setFUSV020705SC(paramBean, inputMap, funcCd); // EAC0401C020		eo光電話通話合計超過通知コード変更
		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 申込時例外ハンドリング処理
			this.handleMskmException(se);
		}

		DEBUG_LOG.info("----- FUW5401 callSvcFUSV0207 End  -----");
	}

	/**
	 * 申込時例外ハンドリング処理
	 *<br>
	 * @param se			申込処理時に発生したJCCWebServiceExceptionオブジェクト
	 * @throws Exception	すべての例外
	 */
	private void handleMskmException(final JCCWebServiceException se) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 handleMskmException Start  -----");

		//----------------------------------------------
		// 例外情報を取得
		//----------------------------------------------
		X31CMessageMoreInfo[] moreInfo = se.getMessageList().getMessageMoreInfoList();
		// メッセージ詳細情報クラスを取得
		// (関連チェック系は必ずエラーが1つのため0番目から取得する)
		X31CMessageMoreInfo info = moreInfo[0];

		String itemid = info.getItemId();
		String status = info.getStatus();

		DEBUG_LOG.info("----- FUW5401 handleMskmException End  -----");

		// ステータスが"1100"（内部スキーマ関連チェックエラー）の場合
		if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status))
		{
			// 業務共通例外クラス："0204"（更新不可エラー）
			DEBUG_LOG.info("■■■FUW05401 (19)eo光電話オプションサービス申込解約：内部スキーマ関連チェックエラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
		}

		// ステータスが"1300"(外部スキーマの相関チェックエラー)の場合
		if (String.valueOf(JPCModelConstant.TEMPLATE_CORRELATION_ERR).equals(status))
		{
			// アイテムIDが"ido_div"(異動区分)の場合
			if (ITEMID_IDO_DIV.equals(itemid))
			{

				// 業務共通例外クラス："0102"（契約状態エラー）
				DEBUG_LOG.info("■■■FUW05401 (20)eo光電話オプションサービス申込解約：契約状態エラー■■■");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
		}

		// 上記以外の場合、業務共通例外クラス（JCCBusinessException）をスローする。
		DEBUG_LOG.info("■■■FUW05401 (21)eo光電話オプションサービス申込解約：外部スキーマの相関チェックエラー■■■");
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);

	}

	/**
	 * オプションサービスコード取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応するオプションサービスコード
	 * @throws Exception		すべての例外
	 */
	private String getOpSvcCd(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getOpSvcCd Start  -----");

		DEBUG_LOG.info("----- FUW5401 getOpSvcCd End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return OP_SVC_CD_MAPPING_MAP.get(ronriScreenId);
	}

	/**
	 * サブオプションサービスコード取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応するサブオプションサービスコード
	 * @throws Exception		すべての例外
	 */
	private String getSbopSvcCd(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getSbopSvcCd Start  -----");

		DEBUG_LOG.info("----- FUW5401 getSbopSvcCd End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return JFUWebCommon.nvl(SBOP_SVC_CD_MAPPING_MAP.get(ronriScreenId), JFUStrConst.EMPTY);
	}

	/**
	 * 料金コースコード(オプションサービス契約)取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する料金コースコード
	 * @throws Exception		すべての例外
	 */
	private String getPcrsCdKK0351(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getPcrsCdKK0351 Start  -----");

		DEBUG_LOG.info("----- FUW5401 getPcrsCdKK0351 End  -----");

		// サブオプションの場合
		if (SBOP_SVC_RONRI_LIST.contains(ronriScreenId))
		{
			// 論理画面ＩＤをキーにMapから対応するコードを取得
			return PCRS_CD_KK0351_MAPPING_MAP.get(ronriScreenId);
		}
		// その他は(料金プラン固定単価)と同じ
		return getPcrsCdKK0601(ronriScreenId);
	}

	/**
	 * 料金プランコード(オプションサービス契約)取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する料金プランコード
	 * @throws Exception		すべての例外
	 */
	private String getPplanCdKK0351(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getPplanCdKK0351 Start  -----");

		DEBUG_LOG.info("----- FUW5401 getPplanCdKK0351 End  -----");

		// サブオプションの場合
		if (SBOP_SVC_RONRI_LIST.contains(ronriScreenId))
		{
			// 論理画面ＩＤをキーにMapから対応するコードを取得
			return PPLAN_CD_KK0351_MAPPING_MAP.get(ronriScreenId);
		}
		// その他は(料金プラン固定単価)と同じ
		return getPplanCdKK0601(ronriScreenId);
	}

	/**
	 * 料金コースコード(サブオプションサービス契約)取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する料金コースコード
	 * @throws Exception		すべての例外
	 */
	private String getPcrsCdKK0401(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getPcrsCdKK0401 Start  -----");

		DEBUG_LOG.info("----- FUW5401 getPcrsCdKK0401 End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return JFUWebCommon.nvl(PCRS_CD_KK0401_MAPPING_MAP.get(ronriScreenId));
	}

	/**
	 * 料金プランコード(サブオプションサービス契約)取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する料金プランコード
	 * @throws Exception		すべての例外
	 */
	private String getPplanCdKK0401(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getPplanCdKK0401 Start  -----");

		DEBUG_LOG.info("----- FUW5401 getPplanCdKK0401 End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return JFUWebCommon.nvl(PPLAN_CD_KK0401_MAPPING_MAP.get(ronriScreenId));
	}

	/**
	 * 料金コースコード(料金プラン固定単価)取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する料金コースコード
	 * @throws Exception		すべての例外
	 */
	private String getPcrsCdKK0601(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getPcrsCdKK0601 Start  -----");

		DEBUG_LOG.info("----- FUW5401 getPcrsCdKK0601 End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return PCRS_CD_KK0601_MAPPING_MAP.get(ronriScreenId);
	}

	/**
	 * 料金プランコード(料金プラン固定単価)取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する料金プランコード
	 * @throws Exception		すべての例外
	 */
	private String getPplanCdKK0601(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getPplanCdKK0601 Start  -----");

		DEBUG_LOG.info("----- FUW5401 getPplanCdKK0601 End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return PPLAN_CD_KK0601_MAPPING_MAP.get(ronriScreenId);
	}

	/**
	 * 050オプション電話処理フラグ 取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return	各機能(論理画面ID)に対応する 050オプション電話処理フラグ
	 * @throws Exception		すべての例外
	 */
	private String getN050OpTelnoTranFlg(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getN050OpTelnoTranFlg Start  -----");

		DEBUG_LOG.info("----- FUW5401 getN050OpTelnoTranFlg End  -----");

		// (050ナンバープラス)の場合のみ、"1"(要)
		if (RONRI_SCREEN_ID_FUW062.equals(ronriScreenId))
		{
			return JFUStrConst.CD00001_1;
		}
		else
		{
			// それ以外は、"0"(否)
			return JFUStrConst.CD00001_0;
		}
	}

	/**
	 * オプション処理フラグ
	 * <br>
	 * @param ronriScreenId	論理画面ID
	 * @return	各機能(論理画面ID)に対応する オプション処理フラグ
	 * @throws Exception	すべての例外
	 */
	private String getOpTranFlg(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getOpTranFlg Start  -----");

		DEBUG_LOG.info("----- FUW5401 getOpTranFlg End  -----");

		// オプションサービス論理画面リストに含まれる場合、"1"(要)
		if (OP_SVC_RONRI_LIST.contains(ronriScreenId))
		{
			return JFUStrConst.CD00001_1;
		}
		else
		{
			// それ以外は、"0"(否)
			return JFUStrConst.CD00001_0;
		}
	}

	/**
	 * サブオプション処理フラグ
	 * <br>
	 * @param ronriScreenId	論理画面ID
	 * @return	各機能(論理画面ID)に対応する サブオプション処理フラグ
	 * @throws Exception	すべての例外
	 */
	private String getSbopTranFlg(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getSbopTranFlg Start  -----");

		DEBUG_LOG.info("----- FUW5401 getSbopTranFlg End  -----");

		// サブオプションサービス論理画面リストに含まれる場合、"1"(要)
		if (SBOP_SVC_RONRI_LIST.contains(ronriScreenId))
		{
			return JFUStrConst.CD00001_1;
		}
		else
		{
			// それ以外は、"0"(否)
			return JFUStrConst.CD00001_0;
		}
	}

	/**
	 * サービスオーダ処理フラグ 取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return	各機能(論理画面ID)に対応する サービスオーダ処理フラグ
	 * @throws Exception		すべての例外
	 */
	private String getSodTranFlg(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getSodTranFlg Start  -----");

		DEBUG_LOG.info("----- FUW5401 getSodTranFlg End  -----");

		// (通話明細送付・通話料上限通知)の場合のみ、"0"(否)
		if ((RONRI_SCREEN_ID_FUW061.equals(ronriScreenId)) || (RONRI_SCREEN_ID_FUW102.equals(ronriScreenId)))
		{
			return JFUStrConst.CD00001_0;
		}
		else
		{
			// それ以外は、"1"(要)
			return JFUStrConst.CD00001_1;
		}
	}

	/**
	 * サブオプションが関連付けられている画面ID取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return サブオプションが関連付けられている画面ID
	 * @throws Exception		すべての例外
	 */
	private String getChildRonriScreenId(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getChildRonriScreenId Start  -----");

		DEBUG_LOG.info("----- FUW5401 getChildRonriScreenId End  -----");

		// 論理画面ＩＤをキーにMapから対応するコードを取得
		return JFUWebCommon.nvl(CHILD_RONRI_SCREEN_MAPPING_MAP.get(ronriScreenId), JFUStrConst.EMPTY);
	}

	/**
	 * 申込画面ID取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する確認画面ID
	 * @throws Exception		すべての例外
	 */
	private String getMskmScreenId(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getMskmScreenId Start  -----");

		DEBUG_LOG.info("----- FUW5401 getMskmScreenId End  -----");

		return ronriScreenId + MSKM_SCREEN_SUFFIX;
	}

	/**
	 * 確認画面ID取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する確認画面ID
	 * @throws Exception		すべての例外
	 */
	private String getCfmScreenId(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getCfmScreenId Start  -----");

		DEBUG_LOG.info("----- FUW5401 getCfmScreenId End  -----");

		return ronriScreenId + CRM_SCREEN_SUFFIX;
	}

	/**
	 * 完了画面ID取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する確認画面ID
	 * @throws Exception		すべての例外
	 */
	private String getFinScreenId(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getFinScreenId Start  -----");

		DEBUG_LOG.info("----- FUW5401 getFinScreenId End  -----");

		return ronriScreenId + FIN_SCREEN_SUFFIX;
	}

	/**
	 * 申込画面名取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する確認画面名
	 * @throws Exception		すべての例外
	 */
	private String getMskmScreenName(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getMskmScreenName Start  -----");

		DEBUG_LOG.info("----- FUW5401 getMskmScreenName End  -----");

		// 論理画面ＩＤをキーにMapから対応する画面名を取得
		return MSKM_SCREEN_NAME_MAPPING_MAP.get(ronriScreenId);
	}

	/**
	 * 確認画面名取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する確認画面名
	 * @throws Exception		すべての例外
	 */
	private String getCfmScreenName(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getCfmScreenName Start  -----");

		DEBUG_LOG.info("----- FUW5401 getCfmScreenName End  -----");

		// 論理画面ＩＤをキーにMapから対応する画面名を取得
		return CFM_SCREEN_NAME_MAPPING_MAP.get(ronriScreenId);
	}

	/**
	 * 完了画面名取得
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return 各機能(論理画面ID)に対応する確認画面名
	 * @throws Exception		すべての例外
	 */
	private String getFinScreenName(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getFinScreenName Start  -----");

		DEBUG_LOG.info("----- FUW5401 getFinScreenName End  -----");

		// 論理画面ＩＤをキーにMapから対応する画面名を取得
		return FIN_SCREEN_NAME_MAPPING_MAP.get(ronriScreenId);
	}

	/**
	 * 論理画面ID取得
	 * <br>
	 * @param commonInfoBean	共有フォームBean
	 * @return	遷移先画面ＩＤから取得した論理画面ID
	 * @throws Exception		すべての例外
	 */
	private String getRonriScreenId(X31SDataBeanAccess commonInfoBean) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 getRonriScreenId Start  -----");

		String ronriScreenId = commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE).substring(0, 6);
		DEBUG_LOG.debug("【論理画面ID】" + ronriScreenId);

		DEBUG_LOG.info("----- FUW5401 getRonriScreenId End  -----");

		return ronriScreenId;
	}

	/**
	 * 申込完了メールの設定値を設定します。
	 * <br>
	 * @param bean
	 * @param ronriScreenId
	 * @throws Exception
	 */
	private void setMskmMailInfo(X31SDataBeanAccess bean, String ronriScreenId) throws Exception
	{
		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.TRAN_DIV);

		// 処理区分が「申込」の場合
		if (TRAN_DIV_MSKM.equals(tran_div))
		{
			if (RONRI_SCREEN_ID_FUW054.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				String multiPhoneCallFlg = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.MULTI_PHONE_CALL_FLG);
				if (JFUStrConst.CD00002_1.equals(multiPhoneCallFlg))
				{
					// 複数通話
					JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW054_3);
				}
				else
				{
					// 割込電話
					JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW054_1);
				}
			}
			else if (RONRI_SCREEN_ID_FUW055.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW055_1);
			}
			else if (RONRI_SCREEN_ID_FUW056.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW056_1);
			}
			else if (RONRI_SCREEN_ID_FUW057.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW057_1);
			}
			else if (RONRI_SCREEN_ID_FUW058.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW058_1);
			}
			else if (RONRI_SCREEN_ID_FUW059.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW059_1);
			}
			else if (RONRI_SCREEN_ID_FUW060.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW060_1);
			}
			else if (RONRI_SCREEN_ID_FUW061.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW061_1);
			}
			else if (RONRI_SCREEN_ID_FUW062.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW062_1);
			}
			else if (RONRI_SCREEN_ID_FUW102.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW102_1);
			}
			else if (RONRI_SCREEN_ID_FUW103.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW103_1);
			}
			else
			{
				// 該当しない場合、何もしない
			}
		}

		// 処理区分が「解約」の場合
		else if (TRAN_DIV_DSL.equals(tran_div))
		{
			if (RONRI_SCREEN_ID_FUW054.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				String multiPhoneCallFlg = JFUWebCommon.getDataBeanItemByPath(bean, FUW05401SFConst.MULTI_PHONE_CALL_FLG);
				if (JFUStrConst.CD00002_1.equals(multiPhoneCallFlg))
				{
					// 複数通話
					JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW054_4);
				}
				else
				{
					// 割込電話
					JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW054_2);
				}
			}
			else if (RONRI_SCREEN_ID_FUW055.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW055_2);
			}
			else if (RONRI_SCREEN_ID_FUW056.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW056_2);
			}
			else if (RONRI_SCREEN_ID_FUW057.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW057_2);
			}
			else if (RONRI_SCREEN_ID_FUW058.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW058_2);
			}
			else if (RONRI_SCREEN_ID_FUW059.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW059_2);
			}
			else if (RONRI_SCREEN_ID_FUW060.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW060_2);
			}
			else if (RONRI_SCREEN_ID_FUW061.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW061_2);
			}
			else if (RONRI_SCREEN_ID_FUW062.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW062_2);
			}
			else if (RONRI_SCREEN_ID_FUW103.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW103_2);
			}

		}
		// 処理区分が「変更」の場合
		else if (TRAN_DIV_CHG.equals(tran_div))
		{
			if (RONRI_SCREEN_ID_FUW102.equals(ronriScreenId))
			{
				// 申込完了メール送信部品呼出処理
				JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID_FUW102_2);
			}
			else
			{
				// 該当しない場合、何もしない
			}
		}
	}

	/**
	 * オプション料金リストを作成する。
	 *
	 * <br>
	 * @param bean サービスフォームBean
	 * @return オプション料金リスト
	 * @throws Exception
	 */
	private ArrayList<HashMap<String, String>> getOptPackPrcList(X31SDataBeanAccess serviceFormBean) throws Exception
	{

		// オンライン運用日付(yyyyMMDD)を取得
		String opeDate = JFUWebCommon.getOpeDate(this, null);

		// ----------------------------------------------
		// Bean取得
		// ----------------------------------------------
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// ----------------------------------------------
		// 論理機能IDを取得
		// ----------------------------------------------
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		// ----------------------------------------------
		// オプションサービスコードを取得
		// ----------------------------------------------
		String screenOpSvcCd = "";
		if (SBOP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
		{
			screenOpSvcCd = getSbopSvcCd(ronriScreenId);
		}
		else if (OP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
		{
			screenOpSvcCd = getOpSvcCd(ronriScreenId);
		}

		// 削除されるオプションのサブオプションサービスコード
		String delSbopSvcCd = "";

		// サービスフォームBean.処理区分
		String tran_div = JFUWebCommon.getDataBeanItemByPath(serviceFormBean, FUW05401SFConst.TRAN_DIV);

		ArrayList<HashMap<String, String>> prcList = new ArrayList<HashMap<String, String>>();

		// サービスフォームBean/サービス契約情報リスト
		X31SDataBeanAccessArray svcKeiInfoList = serviceFormBean.getDataBeanArray(FUW05401SFConst.SVC_KEI_INFO_LIST);

		int iCount = svcKeiInfoList.getCount();

		// オプションの料金情報取得
		for (int i = 0; i < iCount; i++)
		{
			// 次のサービス契約情報を取得
			X31SDataBeanAccess bean = svcKeiInfoList.getDataBean(i);

			// オプションサービスコード
			String opSvcCd = bean.sendMessageString(FUW05401SFConst.OP_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			// オプションサービス契約ステータス
			String opSvcKeiStat = bean.sendMessageString(FUW05401SFConst.OP_SVC_KEI_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);
			// 予約適用年月日(オプションサービス契約)
			String kk0351RsvAplyYmd = bean.sendMessageString(FUW05401SFConst.KK0351_RSV_APLY_YMD_01, X31CWebConst.DATABEAN_GET_VALUE);
			// 料金コースコード
			String opPcrsCd = "";
			// 料金プランコード
			String opPplanCd = "";

			// 解約修理中のオプションサービスの場合
			if (TRAN_DIV_DSL.equals(tran_div) && screenOpSvcCd.equals(opSvcCd))
			{
				// サブオプションサービスコードを取得
				String sbScreenId = getChildRonriScreenId(ronriScreenId);
				delSbopSvcCd = getSbopSvcCd(sbScreenId);

				// 解約処理中のオプション料金情報はリストに含めない
				continue;
			}

			// 電話オプションパック適用外のオプションの場合
			if (!TEL_PACK_OPT_LIST.contains(opSvcCd))
			{
				continue;
			}

			// オプションサービス契約ステータスが「"910"：解約済」、
			// かつ予約適用年月日(オプションサービス契約)≦オンライン運用日付の場合
			if (JFUStrConst.CD00037_910.equals(opSvcKeiStat) && JPCUtilCommon.isPastDate(kk0351RsvAplyYmd, opeDate, DOJITSU_HUKUMU))
			{
				// このレコードは解約済なのでスキップ
				continue;
			}

			// オプションサービス契約ステータスが「"920"：キャンセル済」、
			// かつ予約適用年月日(オプションサービス契約)≦オンライン運用日付の場合
			if (JFUStrConst.CD00037_920.equals(opSvcKeiStat) && JPCUtilCommon.isPastDate(kk0351RsvAplyYmd, opeDate, DOJITSU_HUKUMU))
			{
				// このレコードは無効につきスキップ
				continue;
			}

			// オプションサービス契約コードから料金コースコード、料金プランコード取得
			for (int j = 0; j < OP_PRC_LIST.length; j++)
			{
				if (OP_PRC_LIST[j][0].equals(opSvcCd))
				{
					opPcrsCd = OP_PRC_LIST[j][1];
					opPplanCd = OP_PRC_LIST[j][2];
					break;
				}
			}

			// 料金情報リストに追加
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("pcrs_cd", opPcrsCd);
			map.put("pplan_cd", opPplanCd);
			prcList.add(map);

		}

		// サブオプションの料金情報取得
		for (int i = 0; i < iCount; i++)
		{

			// 次のサービス契約情報を取得
			X31SDataBeanAccess bean = svcKeiInfoList.getDataBean(i);

			// サブオプションサービスコード
			String sbopSvcCd = bean.sendMessageString(FUW05401SFConst.SBOP_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			// サブオプションサービス契約ステータス
			String sbopSvcKeiStat = bean.sendMessageString(FUW05401SFConst.SBOP_SVC_KEI_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);
			// 予約適用年月日(サブオプションサービス契約)
			String kk0401RsvAplyYmd = bean.sendMessageString(FUW05401SFConst.KK0401_RSV_APLY_YMD_01, X31CWebConst.DATABEAN_GET_VALUE);
			// 料金コースコード
			String sbopPcrsCd = "";
			// 料金プランコード
			String sbopPplanCd = "";

			// 解約修理中のオプションサービスの場合
			if (TRAN_DIV_DSL.equals(tran_div))
			{
				// 解約処理中のオプション料金情報はリストに含めない
				if (screenOpSvcCd.equals(sbopSvcCd) || delSbopSvcCd.equals(sbopSvcCd))
				{
					continue;
				}
			}

			// 電話オプションパック適用外のオプションの場合
			if (!TEL_PACK_OPT_LIST.contains(sbopSvcCd))
			{
				continue;
			}

			// サブオプションサービス契約ステータスが「"910"：解約済」もしくは「"920"：キャンセル済」、
			// かつ予約適用年月日(サブオプションサービス契約)≦オンライン運用日付の場合
			if ((JFUStrConst.CD00037_910.equals(sbopSvcKeiStat) || JFUStrConst.CD00037_920.equals(sbopSvcKeiStat))
					&& JPCUtilCommon.isPastDate(kk0401RsvAplyYmd, opeDate, DOJITSU_HUKUMU))
			{
				// このレコードは無効or解約済なのでスキップ
				continue;
			}

			// オプションサービス契約コードから料金コースコード、料金プランコード取得
			for (int j = 0; j < OP_PRC_LIST.length; j++)
			{
				if (OP_PRC_LIST[j][0].equals(sbopSvcCd))
				{
					sbopPcrsCd = OP_PRC_LIST[j][1];
					sbopPplanCd = OP_PRC_LIST[j][2];
					break;
				}
			}

			// 料金情報リストに追加
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("pcrs_cd", sbopPcrsCd);
			map.put("pplan_cd", sbopPplanCd);
			prcList.add(map);
		}

		// 処理区分が（申込）の場合
		if (TRAN_DIV_MSKM.equals(tran_div))
		{
			// 申し込むオプションの料金情報を追加する
			String pcrsCd = getPcrsCdKK0601(ronriScreenId);
			String pplanCd = getPplanCdKK0601(ronriScreenId);

			HashMap<String, String> map = new HashMap<String, String>();
			map.put("pcrs_cd", pcrsCd);
			map.put("pplan_cd", pplanCd);
			prcList.add(map);
		}

		return prcList;

	}

	/**
	 * パック適用オプション判定
	 * <br>
	 * @param ronriScreenId		論理画面ID
	 * @return	パック適用オプション判定結果
	 * @throws Exception		すべての例外
	 */
	private boolean chkOpInPack(String ronriScreenId) throws Exception
	{
		DEBUG_LOG.info("----- FUW5401 chkOpInPack Start  -----");

		String opSvcCd = "";
		boolean opPack = false;

		// オプションサービスコード取得
		if (SBOP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
		{
			opSvcCd = getSbopSvcCd(ronriScreenId);
		}
		else if (OP_SVC_CD_MAPPING_MAP.containsKey(ronriScreenId))
		{
			opSvcCd = getOpSvcCd(ronriScreenId);
		}

		// パック適用オプションの場合
		if (!JFUWebCommon.isNull(opSvcCd) && TEL_PACK_OPT_LIST.contains(opSvcCd))
		{
			opPack = true;
		}

		DEBUG_LOG.info("----- FUW5401 chkOpInPack End  -----");

		return opPack;
	}

	/**
	 * 画面間引き継ぎ情報データマップ生成処理（オプションパック画面用）
	 * 本メニュー画面からポップアップで遷移するオプションパック申込/解約画面に引き渡す情報を生成します。
	 *
	 * @param tranDiv  処理区分(未指定の場合はnull)
	 * @param wribSvcCd  割引サービスコード
	 * @param opSvcCd  オプションサービスコード
	 * @return dataMap 引き継ぎ情報データマップ
	 */
	private HashMap<String, Object> createDataMapForPack(final String tranDiv, final String wribSvcCd, final String opSvcCd)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		String wribPcrsCd = "";
		String wribPPlanCd = "";
		String multiTalkFlg = getServiceFormBean().sendMessageString(FUW05401SFConst.MULTI_PHONE_CALL_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		// 遷移元画面ID ← 固定値："FUW05401"(割込電話サービス申込)
		dataMap.put(FUW05401SFConst.FROM_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW05401);

		// 処理区分が指定されている場合のみ
		if (!JFUWebCommon.isNull(tranDiv))
		{
			// 処理区分 ← 処理区分
			dataMap.put(FUW05401SFConst.TRAN_DIV, tranDiv);
		}

		// 割引サービスコードから料金コースコード、料金プランコードを取得
		for (int i = 0; i < WRIB_OPCD_LIST.length; i++)
		{
			if (WRIB_OPCD_LIST[i][0].equals(wribSvcCd))
			{
				wribPcrsCd = WRIB_OPCD_LIST[i][1];
				wribPPlanCd = WRIB_OPCD_LIST[i][2];
				break;
			}
		}

		// 申込割引サービスコード ← 割引サービスコード
		dataMap.put(MAPKEY_MSKM_WRIB_SVC_CD, wribSvcCd);

		// 申込料金コースコード（割引） ← 料金コースコード
		dataMap.put(MAPKEY_MSKM_WRIB_PCRS_CD, wribPcrsCd);

		// 申込料金プランコード（割引） ← 料金プランコード
		dataMap.put(MAPKEY_MSKM_WRIB_PPLAN_CD, wribPPlanCd);

		// 申込オプションサービスコード ← オプションサービスコード
		dataMap.put(MAPKEY_MSKM_OP_SVC_CD, opSvcCd);

		// 複数通話フラグ
		dataMap.put(MAPKEY_MSKM_MULTI_TALK_FLG, multiTalkFlg);

		return dataMap;
	}

	/**
	 * サービス契約情報取得処理
	 * <br/>
	 * 共有フォームBeanからサービス契約情報を取得し、サービスフォームBeanに設定します。
	 *
	 * @param commonInfoBean  共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void setSvcKeiInfo(final X31SDataBeanAccess commonInfoBean, final X31SDataBeanAccess serviceFormBean)
	{

		// 共通フォームBean/ＷＥＢ変更情報/0/現顧客契約情報/0/サービス契約情報/0
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);
		// 共通フォームBean/ＷＥＢ変更情報/0/現顧客契約情報/0/サービス契約情報/0/サービス契約内訳情報/0
		X31SDataBeanAccess svcKeiUcwkInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_UCWK_INFO);

		// サービス契約情報/0/サービス契約ステータス
		String wrib_svc_kei_no = svcKeiInfo.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE);
		// サービス契約内訳情報/0/サービス契約内訳ステータス
		String svc_kei_ucwk_no = svcKeiUcwkInfo.sendMessageString(CommonInfoCFConst.SVC_KEI_UCWK_NO_24, X31CWebConst.DATABEAN_GET_VALUE);

		// 割引サービス契約番号（JKKTelSelectOpPackOperateCCの上りマッピング用）
		serviceFormBean.sendMessageString(FUW05401SFConst.WRIB_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, wrib_svc_kei_no);
		// 割引サービス契約内訳番号（JKKTelSelectOpPackOperateCCの上りマッピング用）
		serviceFormBean.sendMessageString(FUW05401SFConst.WRIB_SVC_KEI_UCWK_NO, X31CWebConst.DATABEAN_SET_VALUE, svc_kei_ucwk_no);

	}

	/**
	 * 電話オプションパック申込解約画面に渡す割引サービスコードを取得する。
	 *
	 * <br>
	 * @param bean サービスフォームBean
	 * @return 割引サービスコード
	 * @throws Exception
	 */
	private String getPackScreenWribSvcCd(X31SDataBeanAccess bean) throws Exception
	{

		// ----------------------------------------------
		// Bean取得
		// ----------------------------------------------
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// ----------------------------------------------
		// 論理機能IDを取得
		// ----------------------------------------------
		String ronriScreenId = getRonriScreenId(commonInfoBean);

		//----------------------------------------------
		// 適用中の割引サービスコード取得
		//----------------------------------------------
		String currentWribSvcCd = bean.sendMessageString(FUW05401SFConst.WRIB_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE);

		//----------------------------------------------
		// お得判定後の割引サービスコード取得
		//----------------------------------------------
		String packScreenWribSvcCd = "";

		// パック対象オプションの場合
		if (chkOpInPack(ronriScreenId))
		{
			// 運用日付取得
			String baseDate = JFUWebCommon.getOpeDate(this, null);
			// オプション料金リスト取得
			ArrayList<HashMap<String, String>> prcList = getOptPackPrcList(bean);

			// お得判定
			HashMap<String, Object> packMap = JFUWebCommon.getTelOptPack(this, baseDate, prcList);
			String otokuWribSvcCd = (String)packMap.get(WRIB_SVC_CD);

			// パック画面に渡すパック種別を取得
			if (JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK7.equals(otokuWribSvcCd)
					|| JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK7.equals(currentWribSvcCd))
			{
				packScreenWribSvcCd = JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK7;
			}
			else if (JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK3.equals(otokuWribSvcCd)
					|| JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK3.equals(currentWribSvcCd))
			{
				packScreenWribSvcCd = JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK3;
			}
		}

		return packScreenWribSvcCd;

	}

	/**
	 * 利用可能とする督促ステータスチェック
	 *
	 * @param commonInfoBean  共有フォームBean
	 * @throws Exception
	 */
	private void checkTokusokuStat(final X31SDataBeanAccess commonInfoBean) throws Exception
	{

		// -------------------------------------------------
		// 現顧客契約情報からサービス契約情報を取得
		// -------------------------------------------------
		// ★WEB変更情報
		X31SDataBeanAccess webChgInfoBean = getX31SDataBeanAccess(commonInfoBean, CommonInfoCFConst.WEB_CHG_INFO);

		// ★現顧客情報(WEB変更情報の子階層)
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		X31SDataBeanAccess genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);

		// ★サービス契約情報
		X31SDataBeanAccessArray svcKeiInfoArray = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = svcKeiInfoArray.getDataBean(0);

		// ★請求契約情報
		X31SDataBeanAccessArray seikyKeiInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = seikyKeiInfoArray.getDataBean(0);

		String tokusokuStat = seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.TOKUSOKU_STAT_32,  X31CWebConst.DATABEAN_GET_VALUE);

		// 共有フォームBean.請求契約情報.督促ステータスが「00:督促なし」の場合、チェック処理を抜ける
		if (JFUWebCommon.isNull(tokusokuStat) || JFUStrConst.CD00184_00.equals(tokusokuStat))
		{
			return;
		}

		if (Integer.parseInt(tokusokuStat) >= Integer.parseInt(JFUStrConst.CD00184_15))
		{
			// 督促ステータスが「15:強制解約予告済」以上の場合

			DEBUG_LOG.info("■■■FUW05401 eo光電話オプションサービス申込解約：「15:強制解約予告済」以上のため、督促状態エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0104); // "0104"：督促状態エラー
		}
	}

	/**
	 * データBeanリストから0番目のデータBeanを取得
	 * <br/>
	 * データBeanリストから0番目のデータBeanを取得します。
	 *
	 * @param bean サービスフォームBean
	 * @param componentID componentID
	 * @return 取得したデータBean
	 */
	private X31SDataBeanAccess getX31SDataBeanAccess(X31SDataBeanAccess bean, String componentID)
	{
		X31SDataBeanAccessArray subBeanArray = bean.getDataBeanArray(componentID);
		X31SDataBeanAccess subBean = subBeanArray.getDataBean(0);
		if (null == subBean)
		{
			subBeanArray.addDataBean();
			subBean = subBeanArray.getDataBean(0);
		}
		return subBean;
	}

}

