/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW00965SFLogic
*   ソースファイル名：FUW00965SFLogic.java
*   作成者          ：富士通
*   日付            ：2021年05月06日
*＜機能概要＞
*   コンテンツ申込画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v53.00.00   2021/05/06   FJ）新谷    新規作成
*   v74.00.00   2025/01/09   FJ）余野木 【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応
**********************************************************************/
package eo.web.webview.FUW00965SF;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUContentsServiceInfoUtil;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0338_FUSV0338OPDBMapper;
import eo.web.webview.mapping.FUSV0347_FUSV0347OPDBMapper;

/**
 * コンテンツ申込画面ビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00965SFLogic extends JCCWebBusinessLogic
{

	/** 確認画面へ戻るボタン表示フラグ:1:表示 */
	private static final String KAKUNIN_BACK_BTN_DSP_FLG_ON = "1";

	/** 戻るボタン表示フラグ:1:表示 */
	private static final String BACK_BTN_DSP_FLG_ON = "1";

	/** 次へボタン表示フラグ:1:表示 */
	private static final String NEXT_BTN_DSP_FLG_ON = "1";

	/** ユースケースID（FUSV0338） */
	private static final String USECASE_ID_FUSV0338 = "FUSV0338";

	/** ユースケースID（FUSV0347） */
	private static final String USECASE_ID_FUSV0347 = "FUSV0347";

	/** FUSV034701SC */
	private static final String FUSV034701SC = "FUSV034701SC";

	/** WEB申込情報一覧照会明細 */
	private static final String EFU0361B010CBSMSG1LIST = "EFU0361B010CBSMsg1List";

	/** メールアドレス */
	private static final String MLAD = "mlad";

	/**
	 * 初期処理
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービス呼出処理
		callService(commonInfoBean, serviceFormBean);

		// コンテンツサービス情報の設定
		setContSvcInfo(serviceFormBean);

		// ボタン表示設定
		setBtnDispFlg(commonInfoBean, serviceFormBean);

		// コンテンツサービス情報の表示数チェック
		if (!checkContSvcInfoDispNum(serviceFormBean))
		{
			// 表示するコンテンツサービスが無い場合、リダイレクト設定を行う。
			setRedirectInfo(commonInfoBean, serviceFormBean);

			// 初期処理を終了
			return true;
		}

		// サービスフォームBeanに共有フォームBeanの値を復元
		setRtrnInfo(commonInfoBean, serviceFormBean);

		// Web申込受付実績を登録
		JFUWebCommon.executeWebMskmUkJskAdd(this);

		return true;
	}

	/**
	 * 次へボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 引継情報の作成(最初に引継情報の削除も行われる)
		createHikitugiInfo(commonInfoBean, serviceFormBean);

		// 遷移先画面の設定
		setNextScreenInfo(commonInfoBean);

		return true;
	}

	/**
	 * 戻るボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 引継情報の削除
		deleteHikitugiInfo(commonInfoBean);

		// 遷移先画面の設定
		setBackScreenInfo(commonInfoBean);

		return true;

	}

	/**
	 * 確認画面へ戻るボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean backKakunin() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 引継情報の作成(最初に引継情報の削除も行われる)
		createHikitugiInfo(commonInfoBean, serviceFormBean);

		// 遷移先画面の設定
		setBackKakuninScreenInfo(commonInfoBean);

		return true;
	}

	/**
	 * 料金シミュレーションを呼び出す。
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean ryokin() throws Exception
	{
		// 料金シミュレーション共通部品を呼び出し
		JFUWebCommon.ryokin(this);

		return true;
	}

	/**
	 * サービスを呼び出し、戻りデータをサービスフォームBeanに格納する。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	@SuppressWarnings("unchecked")
	private void callService(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// サービスIDをparamにセット（FUSV0338）
		Map<String, String> paramMap338 = new HashMap<String, String>();
		paramMap338.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0338);

		// DataBean-BPマッピング（FUSV0338）
		FUSV0338_FUSV0338OPDBMapper mapper338 = new FUSV0338_FUSV0338OPDBMapper();
		HashMap<String, Object> inputMap338 = new HashMap<String, Object>();
		HashMap<String, Object> outputMap338 = new HashMap<String, Object>();
		X31SDataBeanAccess[] paramBeanIn338 = { serviceFormBean };
		mapper338.setFUSV033801SC(paramBeanIn338, inputMap338, JPCModelConstant.FUNC_CD_1, this);

		// サービス呼び出し（FUSV0338）
		invokeService(paramMap338, inputMap338, outputMap338);

		// サービスからの戻りデータをBeanにセット（FUSV0338）
		X31SDataBeanAccess[] paramBeanOut = { serviceFormBean };
		mapper338.getFUSV033801SC(paramBeanOut, outputMap338);

		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.契約者情報.識別キーの取得
		X31SDataBeanAccessArray contract_info = webNewInfo.getDataBeanArray(CommonInfoCFConst.KEIYAKUSHA_INFO);
		X31SDataBeanAccess contract_infobean = contract_info.getDataBean(0);
		String skb_key = contract_infobean.sendMessageString(CommonInfoCFConst.SKBT_KEY_09, X31CWebConst.DATABEAN_GET_VALUE);

		String mlad = JFUStrConst.EMPTY;
		if (!JFUWebCommon.isNull(skb_key))
		{
			// サービスIDをparamにセット（FUSV0347）
			Map<String, String> paramMap347 = new HashMap<String, String>();
			paramMap347.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0347);

			// DataBean-BPマッピング（FUSV0347）
			FUSV0347_FUSV0347OPDBMapper mapper347 = new FUSV0347_FUSV0347OPDBMapper();
			HashMap<String, Object> inputMap347 = new HashMap<String, Object>();
			HashMap<String, Object> outputMap347 = new HashMap<String, Object>();
			mapper347.setFUSV034701SC(skb_key, inputMap347, JPCModelConstant.FUNC_CD_2);
			mapper347.setFUSV034702SC(skb_key, inputMap347, JPCModelConstant.FUNC_CD_1);
			mapper347.setFUSV034703SC(inputMap347, JPCModelConstant.FUNC_CD_2);

			// サービス呼び出し（FUSV0347）
			invokeService(paramMap347, inputMap347, outputMap347);

			// サービスからの戻りデータのメールアドレスを取得
			HashMap parentMap = (HashMap)outputMap347.get(FUSV034701SC);
			if (!JFUWebCommon.isNull(parentMap) && 0 < parentMap.size())
			{
				ArrayList childList = (ArrayList)parentMap.get(EFU0361B010CBSMSG1LIST);
				if (!JFUWebCommon.isNull(childList) && 0 < childList.size())
				{
					HashMap childMap = (HashMap)childList.get(0);
					if (!JFUWebCommon.isNull(childMap) && 0 < childMap.size())
					{
						mlad = (String)childMap.get(MLAD);
					}
				}
			}
		}

		// メールアドレスをBeanにセット
		serviceFormBean.sendMessageString(FUW00965SFConst.MLAD, X31CWebConst.DATABEAN_SET_VALUE, mlad);
	}

	/**
	 * コンテンツサービス情報をサービスフォームBeanに設定する。
	 * @param serviceFormBean サービスフォームBean
	 * @throws Exception XML解析時に発生する例外
	 */
	@SuppressWarnings("unchecked")
	private void setContSvcInfo(X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// サービスフォームBean.コンテンツサービスキー情報リストの取得
		X31SDataBeanAccessArray contSvcKeyInfoList = serviceFormBean.getDataBeanArray(FUW00965SFConst.CONT_SVC_KEY_INFO);
		// サービスフォームBean.コンテンツサービス情報リストの取得
		X31SDataBeanAccessArray contSvcInfoList = serviceFormBean.getDataBeanArray(FUW00965SFConst.CONT_SVC_INFO);
		// オンライン運用日時(年月日時分)の取得
		String opeDateTime = JFUWebCommon.getOpeDateTime(this, null).substring(0, 12);

		// "コンテンツサービスコード"をキーに、プロパティファイル「フロント用コンテンツ情報定義ファイル」から情報を取得し、ワークMapリストに保持
		ArrayList<Map<String, String>> workMapList = new ArrayList<Map<String, String>>();
		for (int i = 0; i < contSvcKeyInfoList.getCount(); i++)
		{
			X31SDataBeanAccess contSvcKeyInfo = contSvcKeyInfoList.getDataBean(i);
			String cont_svc_cd = contSvcKeyInfo.sendMessageString(FUW00965SFConst.CONT_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String cont_cd = contSvcKeyInfo.sendMessageString(FUW00965SFConst.CONT_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			Map<String, String> workMap = JFUContentsServiceInfoUtil.getContentsServiceInfoItemsAsMap(cont_svc_cd);
			workMap.put(JFUStrConst.CONT_SVC_INFO_CONT_CD, cont_cd);
			workMapList.add(workMap);
		}

		// 表示期間内のコンテンツサービス情報を表示用Mapリストに設定
		ArrayList<Map<String, String>> dispMapList = new ArrayList<Map<String, String>>();
		for (int i = 0; i < workMapList.size(); i++)
		{
			if (JFUContentsServiceInfoUtil.checkDispKikan(workMapList.get(i), opeDateTime))
			{
				dispMapList.add(workMapList.get(i));
			}
		}

		// 表示順序でソート
		Collections.sort(dispMapList, new Comparator()
		{

			/**
			 * コンテンツサービス情報を表示順で昇順にする
			 * <br>
			 * @param o1
			 * @param o2
			 * @return 並び替え結果
			 */
			public int compare(Object o1, Object o2)
			{
				HashMap map1 = (HashMap)o1;
				HashMap map2 = (HashMap)o2;
				String str1 = (String)map1.get(JFUStrConst.CONT_SVC_INFO_DISP_JUN);
				String str2 = (String)map2.get(JFUStrConst.CONT_SVC_INFO_DISP_JUN);
				return str1.compareTo(str2);
			}
		});

		// 表示用Mapリストの情報をサービスフォームBeanに設定
		for (int i = 0; i < dispMapList.size(); i++)
		{
			contSvcInfoList.addDataBean();
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00965SFConst.CONT_SVC_CD_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_CONT_SVC_CD));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00965SFConst.CONT_CD_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_CONT_CD));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00965SFConst.SVC_NM_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_SVC_NM));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00965SFConst.SVC_PRC_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_SVC_PRC));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00965SFConst.SETMEI_MONGON_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_SETMEI_MONGON));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00965SFConst.CHUI_MONGON_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_CHUI_MONGON));
		}
	}

	/**
	 * 画面に表示するコンテンツサービス情報があるかチェックする。
	 * @param serviceFormBean サービスフォームBean
	 * @return チェック結果
	 */
	private boolean checkContSvcInfoDispNum(X31SDataBeanAccess serviceFormBean)
	{
		// サービスフォームBean.コンテンツサービス情報リストの取得
		X31SDataBeanAccessArray contSvcInfoList = serviceFormBean.getDataBeanArray(FUW00965SFConst.CONT_SVC_INFO);

		if (0 == contSvcInfoList.getCount())
		{
			return false;
		}

		return true;
	}

	/**
	 * リダイレクト情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 * @throws Exception 
	 */
	private void setRedirectInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.画面遷移モードの取得
		String screenMode = webNewInfo.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUStrConst.SCREEN_MODE_KAKUNIN.equals(screenMode))
		{
			// 画面遷移モードが「確認画面遷移」の場合、確認画面へ戻るボタン押下時の遷移先画面情報を設定
			setBackKakuninScreenInfo(commonInfoBean);
		}
		else
		{
			// 画面遷移モードが「通常遷移」の場合、遷移元画面から遷移先を決定

			// 遷移元画面IDの取得
			String bfScreenId945 = JCCWebCommon.getScreenId(this, JFUScreenConst.SCREEN_ID_FUW00945);
			String bfScreenId959 = JCCWebCommon.getScreenId(this, JFUScreenConst.SCREEN_ID_FUW00959);
			String bfScreenId965 = JCCWebCommon.getScreenId(this, JFUScreenConst.SCREEN_ID_FUW00965);

			if ((!JFUWebCommon.isNull(bfScreenId945) || !JFUWebCommon.isNull(bfScreenId959))
					&& (JFUWebCommon.isNull(bfScreenId965) || bfScreenId965.isEmpty()))
			{
				// 遷移元画面から前画面への遷移で遷移してきた場合、戻るボタン押下時の遷移先画面情報を設定
				String bkDispFlg = serviceFormBean.sendMessageString(FUW00965SFConst.BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_GET_VALUE);
				if (BACK_BTN_DSP_FLG_ON.equals(bkDispFlg))
				{
					// 戻り先がある場合、戻るボタン押下時の遷移先画面情報を設定
					setBackScreenInfo(commonInfoBean);
				}
				else
				{
					// 戻り先がない場合、次へボタン押下時の遷移先画面情報を設定
					setNextScreenInfo(commonInfoBean);
				}
			}
			else
			{
				// 遷移元画面から次画面への遷移で遷移してきた場合、次へボタン押下時の遷移先画面情報を設定
				setNextScreenInfo(commonInfoBean);
			}

		}

		// 本来の遷移をキャンセル
		this.cancelTransferPage();

		// 次の遷移先を設定
		String nextScreenID = commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		this.setTransferPageId(nextScreenID + "0PJP");
	}

	/**
	 * サービスフォームBeanに共有フォームBeanの選択値を復元する。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void setRtrnInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.コンテンツサービス情報リスト(復元元)の取得
		X31SDataBeanAccessArray contSvcInfoListFrom = webNewInfo.getDataBeanArray(CommonInfoCFConst.CONT_SVC_INFO);

		// サービスフォームBean.コンテンツサービス情報リスト(復元先)の取得
		X31SDataBeanAccessArray contSvcInfoListTo = serviceFormBean.getDataBeanArray(FUW00965SFConst.CONT_SVC_INFO);

		for (int i = 0; i < contSvcInfoListFrom.getCount(); i++)
		{
			// 共有フォームBeanのコンテンツサービスコードを取得
			X31SDataBeanAccess contSvcInfoFrom = contSvcInfoListFrom.getDataBean(i);
			String contSvcCodeFrom = contSvcInfoFrom.sendMessageString(CommonInfoCFConst.CONT_SVC_CD_67, X31CWebConst.DATABEAN_GET_VALUE);

			if (JFUWebCommon.isNull(contSvcCodeFrom))
			{
				continue;
			}

			for (int j = 0; j < contSvcInfoListTo.getCount(); j++)
			{
				// サービスフォームBeanのコンテンツサービスコードを取得
				X31SDataBeanAccess contSvcInfoTo = contSvcInfoListTo.getDataBean(j);
				String contSvcCodeTo = contSvcInfoTo.sendMessageString(FUW00965SFConst.CONT_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE);

				if (JFUWebCommon.isNull(contSvcCodeTo))
				{
					continue;
				}

				if (contSvcCodeFrom.equals(contSvcCodeTo))
				{
					// コンテンツサービスコードが一致する場合、コンテンツサービス申込選択を復元
					boolean mskmChoice =
							contSvcInfoFrom.sendMessageBoolean(CommonInfoCFConst.CONT_SVC_MSKM_CHOICE_67, X31CWebConst.DATABEAN_GET_VALUE);
					contSvcInfoTo.sendMessageBoolean(FUW00965SFConst.CONT_SVC_MSKM_CHOICE_02, X31CWebConst.DATABEAN_SET_VALUE, mskmChoice);

					break;
				}
			}
		}

		// WEB新規情報.メール到達確認の取得
		boolean ml_cfm = webNewInfo.sendMessageBoolean(CommonInfoCFConst.ML_CFM_06, X31CWebConst.DATABEAN_GET_VALUE);

		if (ml_cfm)
		{
			// メール到達確認が設定されている場合、メール到達確認を復元
			serviceFormBean.sendMessageBoolean(FUW00965SFConst.ML_MIKAKUNIN_CHOICE, X31CWebConst.DATABEAN_SET_VALUE, true);
		}

	}

	/**
	 * ボタンの表示設定を行う。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void setBtnDispFlg(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.画面遷移モードの取得
		String screenMode = webNewInfo.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUStrConst.SCREEN_MODE_KAKUNIN.equals(screenMode))
		{
			// 画面遷移モードが「確認画面遷移」の場合、確認画面へ戻るボタンを表示
			serviceFormBean.sendMessageString(FUW00965SFConst.KAKUNIN_BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, KAKUNIN_BACK_BTN_DSP_FLG_ON);
		}
		else
		{
			// 画面遷移モードが「通常遷移」の場合、次へ、戻るボタンの表示を設定

			// WEB新規情報.申込回線サービスの取得
			String mskmKsnSvc = webNewInfo.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE);

			// WEB新規情報.申込マンションタイプの取得
			String mskmMnsType = webNewInfo.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);

			// 契約サービス情報の取得
			X31SDataBeanAccessArray keiyakuSvcInfoList = webNewInfo.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
			X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcInfoList.getDataBean(0);

			// 契約サービス情報.選択サービス（ネット）の取得
			String selectSvcNet = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);

			// 契約サービス情報.選択サービス（電話）の取得
			String selectSvcTel = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);

			// 契約サービス情報.選択サービス（テレビ）の取得
			String selectSvcTv = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);

			// ｅｏ光テレビの取得
			X31SDataBeanAccessArray eoTvList = webNewInfo.getDataBeanArray(CommonInfoCFConst.EOTV);
			X31SDataBeanAccess eoTv = eoTvList.getDataBean(0);

			// ｅｏ光テレビ.テレビコース（ｅｏ光テレビ入力）の取得
			String tvCrs = eoTv.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);

			if ((JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskmKsnSvc) || JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskmMnsType))
					&& (JFUStrConst.SELECT_SVC_TV_CHOICE.equals(selectSvcTv) && JFUStrConst.SELECT_SVC_NET_MI_CHOICE.equals(selectSvcNet) && JFUStrConst.SELECT_SVC_TEL_MI_CHOICE
							.equals(selectSvcTel)) && (JFUStrConst.EO_TV_COURSE_BS.equals(tvCrs) || JFUStrConst.EO_TV_COURSE_BS_STAR.equals(tvCrs)))
			{
				// 戻り先のオプション選択画面が無い場合、次へボタンのみ表示
				serviceFormBean.sendMessageString(FUW00965SFConst.NEXT_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, NEXT_BTN_DSP_FLG_ON);
			}
			else
			{
				// それ以外の場合、戻るボタンと次へボタンを表示
				serviceFormBean.sendMessageString(FUW00965SFConst.BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, BACK_BTN_DSP_FLG_ON);
				serviceFormBean.sendMessageString(FUW00965SFConst.NEXT_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, NEXT_BTN_DSP_FLG_ON);
			}
		}
	}

	/**
	 * 共有フォームBeanの引継ぎ情報を削除後、共有フォームBeanに引継ぎ情報の設定を行う。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void createHikitugiInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// 引継情報の削除
		deleteHikitugiInfo(commonInfoBean);

		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.コンテンツサービス情報リスト(作成先)の取得
		X31SDataBeanAccessArray contSvcInfoListTo = webNewInfo.getDataBeanArray(CommonInfoCFConst.CONT_SVC_INFO);

		// サービスフォームBean.コンテンツサービス情報リスト(作成元)の取得
		X31SDataBeanAccessArray contSvcInfoListFrom = serviceFormBean.getDataBeanArray(FUW00965SFConst.CONT_SVC_INFO);

		// WEB新規情報.コンテンツサービス情報リストを設定
		for (int i = 0; i < contSvcInfoListFrom.getCount(); i++)
		{
			contSvcInfoListTo.addDataBean();
			X31SDataBeanAccess contSvcInfo = contSvcInfoListTo.getDataBean(i);

			contSvcInfo.sendMessageString(CommonInfoCFConst.CONT_SVC_CD_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom.getDataBean(i)
					.sendMessageString(FUW00965SFConst.CONT_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
			contSvcInfo.sendMessageString(CommonInfoCFConst.CONT_CD_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom.getDataBean(i)
					.sendMessageString(FUW00965SFConst.CONT_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
			contSvcInfo.sendMessageString(CommonInfoCFConst.CONT_SVC_NM_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom.getDataBean(i)
					.sendMessageString(FUW00965SFConst.SVC_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
			contSvcInfo.sendMessageBoolean(CommonInfoCFConst.CONT_SVC_MSKM_CHOICE_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom
					.getDataBean(i).sendMessageBoolean(FUW00965SFConst.CONT_SVC_MSKM_CHOICE_02, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// WEB新規情報.メール到達確認を設定
		webNewInfo.sendMessageBoolean(CommonInfoCFConst.ML_CFM_06, X31CWebConst.DATABEAN_SET_VALUE, serviceFormBean.sendMessageBoolean(
				FUW00965SFConst.ML_MIKAKUNIN_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));
	}

	/**
	 * 共有フォームBeanの引継ぎ情報を削除する。
	 * @param commonInfoBean 共有フォームBean
	 */
	private void deleteHikitugiInfo(X31SDataBeanAccess commonInfoBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.コンテンツサービス情報リストの取得
		X31SDataBeanAccessArray contSvcInfoList = webNewInfo.getDataBeanArray(CommonInfoCFConst.CONT_SVC_INFO);

		if (0 < contSvcInfoList.getCount())
		{
			// WEB新規情報.コンテンツサービス情報リストがあれば、クリア
			contSvcInfoList.clearArray();
		}

		// WEB新規情報.メール到達確認をfalseに設定
		webNewInfo.sendMessageBoolean(CommonInfoCFConst.ML_CFM_06, X31CWebConst.DATABEAN_SET_VALUE, false);
	}

	/**
	 * 次へボタン押下時の遷移先画面情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 * @throws Exception 
	 */
	private void setNextScreenInfo(X31SDataBeanAccess commonInfoBean) throws Exception
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// 選択可能キャンペーンフラグの取得
		Boolean campaignFlg = JFUWebCommon.isCamapaignList(webNewInfo, JCCWebCommon.getOpeDate(this, null));

		if (campaignFlg)
		{
			// 選択可能キャンペーンリストがある場合、キャンペーン選択(量販・訪販)画面
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00959);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00959);
		}
		else
		{
			// 選択可能キャンペーンリストがない場合、お支払方法入力(量販・訪販)画面
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00945);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00945);
		}

		// 自身の画面の遷移元IDを削除
		JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00965, "");
	}

	/**
	 * 戻るボタン押下時の遷移先画面情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 */
	private void setBackScreenInfo(X31SDataBeanAccess commonInfoBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// 契約サービス情報の取得
		X31SDataBeanAccessArray keiyakuSvcInfoList = webNewInfo.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcInfoList.getDataBean(0);

		// 契約サービス情報.選択サービス（テレビ）の取得
		String selectSvcTv = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);

		// 契約サービス情報.選択サービス（電話）の取得
		String selectSvcTel = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);

		// ｅｏ光テレビの取得
		X31SDataBeanAccessArray eoTvList = webNewInfo.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eoTv = eoTvList.getDataBean(0);

		// ｅｏ光テレビ.テレビコース（ｅｏ光テレビ入力）の取得
		String tvCrs = eoTv.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);

// ANK-4592-00-00 MOD START
		if (JFUStrConst.SELECT_SVC_TV_CHOICE.equals(selectSvcTv) && (JFUStrConst.EO_TV_COURSE_BASIC.equals(tvCrs)
				|| JFUStrConst.EO_TV_COURSE_CS_PRE.equals(tvCrs) || JFUStrConst.EO_TV_COURSE_CS_BAS.equals(tvCrs)))
// ANK-4592-00-00 MOD END
		{
			// 選択サービス（テレビ）が「選択」 かつ テレビコース（eo光テレビ入力）が「ベーシックHD、プレミアムHD」の場合、
			// または「CSプレミアム」または「CSベーシック」の場合、eo光テレビオプション選択(量販・訪販)画面
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00965, JFUScreenConst.SCREEN_ID_FUW00919);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00919);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00919);
		}
		else if (JFUStrConst.SELECT_SVC_TEL_CHOICE.equals(selectSvcTel))
		{
			// 選択サービス（電話）が「選択」の場合、eo光電話オプション選択(量販・訪販)画面
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00965, JFUScreenConst.SCREEN_ID_FUW00917);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00917);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00917);
		}
		else
		{
			// それ以外の場合、eo光ネットオプション選択(量販・訪販)画面
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00965, JFUScreenConst.SCREEN_ID_FUW00916);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00916);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00916);
		}
	}

	/**
	 * 確認画面へ戻るボタン押下時の遷移先画面情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 */
	private void setBackKakuninScreenInfo(X31SDataBeanAccess commonInfoBean)
	{
		// オプション選択内容確認(量販・訪販)画面
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00928);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00928);
	}
}
