/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW12101SFLogic
*   ソースファイル名：FUW12101SFLogic.java
*   作成者          ：富士通
*   日付            ：2017年04月17日
*＜機能概要＞
*    セキュリティオプション申込画面サービスフォームBeanビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v32.00      2017/04/17   FJ）張本    【ANK-3149-00-00】新セキュリティパック導入
*   v32.01      2017/06/20   FJ）張本    【IT1-2017-0000089】ファミパ選択切替時の多機能ルータ申込表示不正
*   v33.00      2017/09/05   FJ）西川    【ANK-2794-00-00】フロントの督促ST制限強化
*   v35.00      2017/12/19	 FJ) 美濃原  【ANK-3303-00-00】【eoプレミアムクラブ】セキュリティパック100円引×1年間
*   v37.00      2018/02/19   FJ) 美濃原  【ANK-3366-00-00】eo光設備卸対応
*   v51.00      2020/10/12   FJ) 美濃原  【ANK-3918-00-00】プレクラ施策追加「インターネットサギウォール」「おうちの機器補償」
*   v66.00      2023/01/31   FJ) 美濃原  【ANK-4307-00-00】【eo定期】プレミアムクラブリニューアル対応
*   v61.00      2023/05/24   FJ) 張本    【ANK-4315-00-00】【eo定期】eoホームゲートウェイ導入対応
*   v75.00      2025/05/15   FJ)西川葵   【ANK-4678-00-00】eoサポートダイヤル受付時間短縮
*
**********************************************************************/
package eo.web.webview.FUW12101SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUCommonRelationCheck;
import eo.web.webview.common.JFUEoPremiumClubDsp;
import eo.web.webview.common.JFUMskmFinMail;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0306_FUSV0306OPDBMapper;
import eo.web.webview.mapping.FUSV0307_FUSV0307OPDBMapper;

/**
 * セキュリティオプション申込画面サービスフォームBeanビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW12101SFLogic extends JCCWebBusinessLogic
{

	/** サービスユースケースID：セキュリティオプション申込(初期表示) */
	private static final String USECASE_ID_FUSV0306 = "FUSV0306";
	/** サービスユースケースID：セキュリティオプション申込(申込) */
	private static final String USECASE_ID_FUSV0307 = "FUSV0307";

	/** 型番号:ルータ */
	private static final String MODEL_NO_EORT = "*EORT*";

	/** 選択：解約する */
	private static final String CHOICE_CAN = "1";
	/** 選択：継続する */
	private static final String CHOICE_CON = "0";

	/** 多機能ルータ選択：無線機能を継続して利用する */
	private static final String TKN_CHOICE_0 = "0";
	/** 多機能ルータ選択：有線機能に変更する */
	private static final String TKN_CHOICE_1 = "1";

	/** ＦＰ継続示パターン：多機能ルータ(有線またはVAのみ) */
	private static final String FP_CON_DSP_PTN_2 = "2";
	/** ＦＰ解約表示パターン：多機能ルーター（無線) */
	private static final String FP_CAN_DSP_PTN_2 = "2";
	/** ＦＰ解約表示パターン：無線ルーター契約中 旧型番以外 */
	private static final String FP_CAN_DSP_PTN_3 = "3";
	/** ＦＰ解約表示パターン：無線ルーター契約中 旧型番 */
	private static final String FP_CAN_DSP_PTN_4 = "4";
	/** ウィルスバスター表示パターン：複数契約 */
	private static final String VB_DSP_PTN_2 = "2";
	/** 有害Ｗｅｂフィルタ表示パターン：複数契約 */
	private static final String UWF_DSP_PTN_2 = "2";
	/** ルータ区分：複数契約 */
	private static final String RT_KBN_9 = "9";

	/** メッセージID EKF0440-TW */
	private static final String MSG_EKF0440_TW = "EKF0440-TW";
	/** メッセージID EKF0420-TW */
	private static final String MSG_EKF0420_TW = "EKF0420-TW";
	/** メッセージ置換文字列 EKF0440-TW */
	private static final String[] REP_EKF0440_TW = new String[] { "利用規約に", "お申し込み" };
	/** メッセージ置換文字列 EKF0420-TW */
	private static final String[] REP_EKF0420_TW = new String[] { "セキュリティオプション", "1つ以上選択" };
	/** エラー項目ID sp_riyo_kiyaku_doi */
	private static final String ERR_SP_RIYO_KIYAKU_DOI = "sp_riyo_kiyaku_doi";
	/** エラー項目ID isw_riyo_kiyaku_doi */
	private static final String ERR_ISW_RIYO_KIYAKU_DOI = "isw_riyo_kiyaku_doi";
	/** エラー項目ID nfp_riyo_kiyaku_doi */
	private static final String ERR_NFP_RIYO_KIYAKU_DOI = "norton_riyo_kiyaku_doi";
	/** エラー項目ID spop_mskm */
	private static final String ERR_SPOP_MSKM = "spop_mskm";

	/** メール機能ID：FUW121_1 */
	private static final String PROCID_FUW121_1 = "FUW121_1";
	/** メール機能ID：FUW121_2 */
	private static final String PROCID_FUW121_2 = "FUW121_2";
	/** メール機能ID：FUW121_3 */
	private static final String PROCID_FUW121_3 = "FUW121_3";
	/** メール機能ID：FUW121_4 */
	private static final String PROCID_FUW121_4 = "FUW121_4";

	/** [料金情報]プロパティファイル取得クエリ */
	private static final String QUERY_DISPCTL_PATH = "DISPSETTING/SETTING[@screenId='FUW12101']/DISPCTL[@groupid='PRC_INFO_TABLE']";

	/** [料金情報]プロパティファイル取得属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	/** 画面表示定義取得キー【料金情報ラベル】月額料金：タイトル */
	private static final String TITLE_LABEL_0 = "TITLE_LABEL_0";

	/** 画面表示定義取得キー【料金情報ラベル】基本料金 */
	private static final String COL_LABEL_0_0 = "COL_LABEL_0_0";
	/** 画面表示定義取得キー【料金情報ラベル】ｅｏセキュリティーパック */
	private static final String COL_LABEL_0_1 = "COL_LABEL_0_1";
	/** 画面表示定義取得キー【料金情報ラベル】インターネットサギウォール　ｆｏｒ　ｅｏ */
	private static final String COL_LABEL_0_2 = "COL_LABEL_0_2";
	/** 画面表示定義取得キー【料金情報ラベル】ノートンファミリープレミア　ｆｏｒ　ｅｏ */
	private static final String COL_LABEL_0_3 = "COL_LABEL_0_3";
	/** 画面表示定義取得キー【料金情報ラベル】インターネットサギウォール（セット割）　ｆｏｒ　ｅｏ */
	private static final String COL_LABEL_0_4 = "COL_LABEL_0_4";

	/** 画面表示定義取得キー【料金情報スタイル】月額料金：タイトル */
	private static final String TITLE_STYLE_0 = "TITLE_STYLE_0";

	/** 画面表示定義取得キー【料金情報スタイル】月額料金：左値・右値 */
	private static final String COL_STYLE_0 = "COL_STYLE_0";

	/** メール文言取得パス */
	private static final String ML_MNGN_PATH = "DISPSETTING/SETTING[@screenId='FUW12101']/DISPTEXT[@groupid='ML_MNGN']";
	/** メール文言取得キー セキュリティパック */
	private static final String MNGN_SP = "MNGN_SP";
	/** メール文言取得キー インターネットサギウォール */
	private static final String MNGN_ISW = "MNGN_ISW";
	/** メール文言取得キー ノートンファミリープレミア */
	private static final String MNGN_NFP = "MNGN_NFP";

	/**
	 * 初期処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean init() throws Exception
	{
		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(INIT) START★★★★★");

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// 初期設定
		JCCWebCommon.getScreenInfo(this);

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceInfoBean = super.getServiceFormBean();

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { serviceInfoBean, commonInfoBean };

		// 現顧客契約情報の最新化
		JFUWebCommon.refreshGenCustKei(this);

		// ●検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0306);

		FUSV0306_FUSV0306OPDBMapper mapper = new FUSV0306_FUSV0306OPDBMapper();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// ●上りマッピング
		mapper.setFUSV030601CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030602CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		// ●サービスの呼び出し
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●下りマッピング
		mapper.getFUSV030601CC(paramBean, outputMap);
		mapper.getFUSV030602CC(paramBean, outputMap);

		// セキュリティオプション、インターネットサギウォール、ノートンファミリープレミアが契約中の場合
		if (JFUStrConst.CD00002_1.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.SP_KEI_UM, X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.CD00002_0.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.ISW_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.CD00002_0.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.NFP_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// プレミアムパック、インターネットサギウォール、ノートンファミリープレミアが契約中の場合
		if (JFUStrConst.CD00002_1.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.PP_KEI_UM, X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.CD00002_0.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.ISW_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.CD00002_0.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.NFP_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// ウィルスバスター表示パターンが複数契約の場合
		if (VB_DSP_PTN_2.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.VB_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 有害Ｗｅｂフィルター表示パターンが複数契約の場合
		if (UWF_DSP_PTN_2.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.UWF_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// ルータ区分が複数契約の場合
		if (RT_KBN_9.equals(serviceInfoBean.sendMessageString(FUW12101SFConst.RT_KBN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 料金表の表示
		setPrcInfoArea(serviceInfoBean);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW12101);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW12101);
		
		// オンライン運用日取得＆設定
		String opeDate = JFUWebCommon.getOpeDate(this, null);
		setFuOpedate(commonInfoBean, opeDate);

		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(INIT) END★★★★★");
		return true;
	}

	/**
	 * 申込画面の確認ボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean cfm() throws Exception
	{
		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(CFM) START★★★★★");

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceInfoBean = super.getServiceFormBean();

		// 申込情報の入力チェック
		if (!chkMskmInfo())
		{
			return true;
		}

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { serviceInfoBean, commonInfoBean };

		// ●検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0307);

		FUSV0307_FUSV0307OPDBMapper mapper = new FUSV0307_FUSV0307OPDBMapper();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// ●上りマッピング
		mapper.setFUSV030701SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030702SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030701CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030702CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030703CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030704CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030705CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030706CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030707CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		// ●サービスの呼び出し
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		boolean isSpMskm = serviceInfoBean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE);
		boolean isISWMskm = serviceInfoBean.sendMessageBoolean(FUW12101SFConst.ISW_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// ■施策リストの画面表示編集処理
		String taisyoSisak = JFUStrConst.EMPTY;
		// 申込で対象となるキャンペーンのeoプレミアムクラブ施策コード
		taisyoSisak = editSisakCd(taisyoSisak, isSpMskm, JFUEoPremiumClubDsp.QUERY_SP);
		taisyoSisak = editSisakCd(taisyoSisak, isISWMskm, JFUEoPremiumClubDsp.QUERY_ISW);

		List<String> taisyoSisakList = JFUWebCommon.convList(taisyoSisak);

		String opeDate = JFUWebCommon.getOpeDate(this, null);

		// ■サービスの結果から画面表示用の施策リストを取得する
		mapper.getPremiumClubList(paramBean, outputMap, JPCModelConstant.FUNC_CD_2, taisyoSisakList, opeDate);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW12102);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW12102);

		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(CFM) END★★★★★");
		return true;
	}

	/**
	 * 申込確認画面の申し込むボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean mskm() throws Exception
	{
		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(MSKM) START★★★★★");

		// ●共通関連チェック
		JFUCommonRelationCheck.checkCommonRelation(this, USECASE_ID_FUSV0307);

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceInfoBean = super.getServiceFormBean();

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { serviceInfoBean, commonInfoBean };

		// ●検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0307);

		FUSV0307_FUSV0307OPDBMapper mapper = new FUSV0307_FUSV0307OPDBMapper();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// ●上りマッピング
		mapper.setFUSV030701SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030702SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030701CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030702CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030703CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030704CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030705CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030706CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030707CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		// ●サービスの呼び出し
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 契約状態エラーを判定する
			mapper.getFUSV030704CC(paramBean, outputMap);
			// 契約状態エラー以外はシステムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// セキュリティパック申込
		boolean isSpMskn = serviceInfoBean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE);
		// インターネットサギウォール申込
		boolean isIswMskn = serviceInfoBean.sendMessageBoolean(FUW12101SFConst.ISW_MSKM, X31CWebConst.DATABEAN_GET_VALUE);
		// ノートンファミリープレミア申込
		boolean isNfpMskm = serviceInfoBean.sendMessageBoolean(FUW12101SFConst.NFP_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// メール文言取得
		Map<String, String> dispMap = JFUWebCommon.getDispItemsAsMap(ML_MNGN_PATH, QUERY_ATTR_NAME);

		// メール可変文字リスト（セキュリティオプション）
		String[] textList =
				{ getMskmMailAddMngn(serviceInfoBean), getMskmMailConMngn(serviceInfoBean), getMskmMailCanMngn(serviceInfoBean),
						isSpMskn ? JFUStrConst.RETURN_CODE + JFUStrConst.RETURN_CODE + dispMap.get(MNGN_SP) : JFUStrConst.EMPTY, 
						isIswMskn ? JFUStrConst.RETURN_CODE + JFUStrConst.RETURN_CODE + dispMap.get(MNGN_ISW) : JFUStrConst.EMPTY,
						isNfpMskm ? JFUStrConst.RETURN_CODE + JFUStrConst.RETURN_CODE + dispMap.get(MNGN_NFP) : JFUStrConst.EMPTY };

		// 申込完了メール送信情報登録
		sendMskmFinMail(PROCID_FUW121_1, null, textList);

		// マカフィーダウンロードメール送信情報登録
		if (isSpMskn)
		{
			sendMskmFinMail(PROCID_FUW121_2, null, null);
		}
		// インターネットサギウォールダウンロードメール送信情報登録
		if (isIswMskn)
		{
			sendMskmFinMail(PROCID_FUW121_3, null, null);
		}
		// ノートンファミリープレミアダウンロードメール送信情報登録
		if (isNfpMskm)
		{
			sendMskmFinMail(PROCID_FUW121_4, null, null);
		}

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW12103);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW12103);

		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(MSKM) END★★★★★");
		return true;
	}

	/**
	 * 申込確認画面の戻るボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(BACK) START★★★★★");

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW12101);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW12101);

		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(BACK) END★★★★★");
		return true;
	}

	/**
	 * 申込完了画面の次へボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(NEXT) START★★★★★");

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// 共通フォームBean.ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfo = getWebChgInfoBean(commonInfoBean);
		// 共通フォームBean.ＷＥＢ変更情報.ＳＳＯ情報
		X31SDataBeanAccess ssoInfo = getSsoInfoBean(webChgInfo);

		// SSO情報.型番号
		ssoInfo.sendMessageString(CommonInfoCFConst.MODEL_NO_21, X31CWebConst.DATABEAN_SET_VALUE, MODEL_NO_EORT);
		// SSO情報.提供方法
		ssoInfo.sendMessageString(CommonInfoCFConst.TK_WAY_21, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00212_02);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW07101);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW07101);

		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(NEXT) END★★★★★");
		return true;
	}

	/**
	 * メールアドレス追加ボタン押下処理です。
	 * <br/>
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean mladadd() throws Exception
	{
		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(MLADADD) START★★★★★");

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW01901);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW01901);

		DEBUG_LOG.debug("★★★★★セキュリティオプション申込のビューロジック処理(MLADADD) END★★★★★");
		return true;
	}

	/**
	 * 申込メール追加文言取得
	 * 
	 * @param bean サービスフォームBean
	 * @return メール文言
	 * 
	 * @exception Exception
	 */
	private String getMskmMailAddMngn(X31SDataBeanAccess bean) throws Exception
	{
		StringBuilder mngn = new StringBuilder();

		// @申し込む（セキュリティパック）がTRUE
		boolean isJkn1 = bean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// A申し込む(インターネットサギウォール) がTRUE
		boolean isJkn2 = bean.sendMessageBoolean(FUW12101SFConst.ISW_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// B申し込む(ノートンファミリープレミア) がTRUE
		boolean isJkn3 = bean.sendMessageBoolean(FUW12101SFConst.NFP_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// CFP継続ルータ表示パターンが"2":多機能ルータ(有線またはVAのみ)かつ、申し込む(多機能ルータ)がTRUE
		boolean isJkn4 =
				FP_CON_DSP_PTN_2.equals(bean.sendMessageString(FUW12101SFConst.FP_CON_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE))
						&& !CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& bean.sendMessageBoolean(FUW12101SFConst.TKN_RT_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// D多機能ルータ選択が"1"(有線機能に変更する)
		boolean isJkn5 =
				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& TKN_CHOICE_1.equals(bean.sendMessageString(FUW12101SFConst.TKN_RT_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		if (!isJkn1 && !isJkn2 && !isJkn3 && !isJkn4 && !isJkn5)
		{
			return JFUStrConst.EMPTY;
		}

		mngn.append("　【追加】");
		mngn.append(JFUStrConst.RETURN_CODE); // 改行

		if (isJkn1)
		{
			mngn.append("　　■eoセキュリティーパック");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・マカフィーマルチアクセス");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・メールウイルスチェックサービス(5メールアドレスまで)");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・メールアドレスの追加(最大5個まで)");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・リモートサポートプラス");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		if (isJkn2)
		{
			//・上記Aに該当する場合
			mngn.append("　　■インターネットサギウォール for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		if (isJkn3)
		{
			//・上記Bに該当する場合
			mngn.append("　　■ノートンファミリープレミア for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		if (isJkn4 && isJkn1)
		{
			//・上記Cに該当する場合
			mngn.append("　　■ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・無線ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		if (isJkn5 && isJkn1)
		{
			//・上記Dに該当する場合
			mngn.append("　　■ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・有線ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・@〜Dに該当する場合
		mngn.append(JFUStrConst.RETURN_CODE); // 改行

		return mngn.toString();
	}

	/**
	 * 申込メール継続文言取得
	 * 
	 * @param bean サービスフォームBean
	 * @return メール文言
	 * 
	 * @exception Exception
	 */
	private String getMskmMailConMngn(X31SDataBeanAccess bean) throws Exception
	{
		if (!bean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
		{
			return JFUStrConst.EMPTY;
		}

		StringBuilder mngn = new StringBuilder();

		// @ファミリーパック選択が"0"(解約)、かつ多機能ルータ選択が"0"(無線機能を継続して利用する)
		boolean isJkn1 =
				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& TKN_CHOICE_0.equals(bean.sendMessageString(FUW12101SFConst.TKN_RT_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// Aファミリーパック選択が"0"(解約)、かつFP解約ルーター表示パターンが"3"(無線ルーター契約中 旧型番以外)または"4"(無線ルーター契約中 旧型番)
		boolean isJkn2 =
				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& (FP_CAN_DSP_PTN_3.equals(bean.sendMessageString(FUW12101SFConst.FP_CAN_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)) || FP_CAN_DSP_PTN_4
								.equals(bean.sendMessageString(FUW12101SFConst.FP_CAN_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)));

		// Bファミリーパック選択が"1"(解約する)もしくは""(空白)、かつウイルスバスター選択が"0"(継続して利用する)
		boolean isJkn3 =
				(CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE)) || JFUStrConst.EMPTY
						.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE)))
						&& CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.VB_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// Cファミリーパック選択が"1"(併用利用する)
		boolean isJkn4 = CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// Dファミリーパック選択が"1"(併用利用する)、かつウイルスバスター選択が"0"(併用利用する)
		boolean isJkn5 =
				CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.VB_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// Eファミリーパック選択が"0"(併用利用する)、かつFP解約ルーター表示パターンが"2"(多機能ルーター（無線))
		boolean isJkn6 =
				CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& FP_CAN_DSP_PTN_2.equals(bean.sendMessageString(FUW12101SFConst.FP_CAN_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE));

		// Fファミリーパック選択が"0"(併用利用する)、かつFP解約ルーター表示パターンが"3"(無線ルーター契約中 旧型番以外)または"4"(無線ルーター契約中 旧型番)
		boolean isJkn7 =
				CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& (FP_CAN_DSP_PTN_3.equals(bean.sendMessageString(FUW12101SFConst.FP_CAN_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)) || FP_CAN_DSP_PTN_4
								.equals(bean.sendMessageString(FUW12101SFConst.FP_CAN_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE)));

		// G有害Webフィルター選択が"0"(継続して利用する)
		boolean isJkn8 =
				bean.sendMessageBoolean(FUW12101SFConst.NFP_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
						&& CHOICE_CON.equals(bean.sendMessageString(FUW12101SFConst.UWF_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		if (!isJkn1 && !isJkn2 && !isJkn3 && !isJkn4 && !isJkn5 && !isJkn6 && !isJkn7 && !isJkn8)
		{
			return JFUStrConst.EMPTY;
		}

		mngn.append("　【継続】");
		mngn.append(JFUStrConst.RETURN_CODE); // 改行

		//・@に該当する場合
		if (isJkn1)
		{
			mngn.append("　　■ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　　・無線ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Aに該当する場合
		if (isJkn2)
		{
			mngn.append("　　■eo光無線ルーター");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Bに該当する場合
		if (isJkn3)
		{
			mngn.append("　　■ウイルスバスター マルチデバイス 月額版 for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Cに該当する場合
		if (isJkn4)
		{
			mngn.append("　　■ファミリーパック");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Dに該当する場合
		if (isJkn5)
		{
			mngn.append("　　　・ウイルスバスター マルチデバイス 月額版 for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Eに該当する場合
		if (isJkn6)
		{
			mngn.append("　　　・無線ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Fに該当する場合
		if (isJkn7)
		{
			mngn.append("　　　・eo光無線ルーター");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		if (isJkn8)
		{
			//・Gに該当する場合
			mngn.append("　　■有害Webフィルター for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		//・Cに該当する場合
		if (isJkn4)
		{
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append("　　※「メールウイルスチェックサービス」「メールアドレスの追加」は");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append(" 　　 eoセキュリティーパックとしてそのまま引き継がれます。");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

//		★★★
		// ・Eに該当する場合
//		if (isJkn6)
//		{
//			mngn.append("　　※eo光多機能ルーターは、現在お使いの機器をそのままご利用ください");
//			mngn.append(JFUStrConst.RETURN_CODE); // 改行
//		}

		mngn.append(JFUStrConst.RETURN_CODE); // 改行

		return mngn.toString();
	}

	/**
	 * 申込メール解約文言取得
	 * 
	 * @param bean サービスフォームBean
	 * @return メール文言
	 * 
	 * @exception Exception
	 */
	private String getMskmMailCanMngn(X31SDataBeanAccess bean) throws Exception
	{
		if (!bean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
		{
			return JFUStrConst.EMPTY;
		}

		StringBuilder mngn = new StringBuilder();

		// @ファミリーパック選択が"1"(解約する)	
		boolean isJkn1 = CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// Aファミリーパック選択が"1"(解約する)、かつウイルスバスター選択が"1"(解約する)
		boolean isJkn2 =
				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.VB_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// Bファミリーパック選択が"1"(解約する)、かつ多機能ルータ選択が"1"(有線機能に変更する)
		boolean isJkn3 = CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& TKN_CHOICE_1.equals(bean.sendMessageString(FUW12101SFConst.TKN_RT_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// C以下のいずれかの条件に該当する場合
		//　・ファミリーパック選択が"1"(解約する)、かつ多機能ルータ選択が"1"(有線機能に変更する)
		//　・ファミリーパック選択が"1"(解約する)、かつ多機能ルータ選択が"0"(無線機能を継続して利用する)
		//　・ファミリーパック選択が"0"(併用利用する)、かつFP解約ルーター表示パターンが"2"(多機能ルーター（無線))
		boolean isJkn4_1 =
				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& TKN_CHOICE_1.equals(bean.sendMessageString(FUW12101SFConst.TKN_RT_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));
		boolean isJkn4_2 =
				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& TKN_CHOICE_0.equals(bean.sendMessageString(FUW12101SFConst.TKN_RT_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));
//		★★★
//		boolean isJkn4_3 =
//				CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
//						&& FP_CAN_DSP_PTN_2.equals(bean.sendMessageString(FUW12101SFConst.FP_CAN_DSP_PTN, X31CWebConst.DATABEAN_GET_VALUE));
		boolean isJkn4 = isJkn4_1 || isJkn4_2 /* || isJkn4_3*/;

		// Dファミリーパック選択が""(空白)、かつウイルスバスター選択が"1"(解約する)
		boolean isJkn5 =
				JFUStrConst.EMPTY.equals(bean.sendMessageString(FUW12101SFConst.FP_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						&& CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.VB_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		// E有害Webフィルター選択が"1"(解約する)
		boolean isJkn6 =
				bean.sendMessageBoolean(FUW12101SFConst.NFP_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
						&& CHOICE_CAN.equals(bean.sendMessageString(FUW12101SFConst.UWF_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));

		if (!isJkn1 && !isJkn2 && !isJkn3 && !isJkn4 && !isJkn5 && !isJkn6)
		{
			return JFUStrConst.EMPTY;
		}

		mngn.append("　【解約】");
		mngn.append(JFUStrConst.RETURN_CODE); // 改行

		// ・上記@に該当する場合
		if (isJkn1)
		{
			mngn.append("　　■ファミリーパック");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・上記Aに該当する場合
		if (isJkn2)
		{
			mngn.append("　　　・ウイルスバスター マルチデバイス 月額版 for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・上記Bに該当する場合
		if (isJkn3)
		{
			mngn.append("　　　・無線ルーター機能");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・@〜Bに該当する場合
		if (isJkn1 || isJkn2 || isJkn3)
		{
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・@に該当する場合
		if (isJkn1)
		{
			mngn.append("　　※「メールウイルスチェックサービス」「メールアドレスの追加」は");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
			mngn.append(" 　　 eoセキュリティーパックとしてそのまま引き継がれます。");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・Cに該当する場合
//		if (isJkn4)
//		{
//			mngn.append("　　※eo光多機能ルーターは、現在お使いの機器をそのままご利用ください");
//			mngn.append(JFUStrConst.RETURN_CODE); // 改行
//		}

		// ・@、Cに該当する場合
		if (isJkn1 || isJkn4)
		{
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・Dに該当する場合
		if (isJkn5)
		{
			mngn.append("　　■ウイルスバスター マルチデバイス 月額版 for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・Eに該当する場合
		if (isJkn6)
		{
			mngn.append("　　■有害Webフィルター for eo");
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		// ・D〜Eに該当する場合
		if (isJkn5 || isJkn6)
		{
			mngn.append(JFUStrConst.RETURN_CODE); // 改行
		}

		return mngn.toString();
	}

	/**
	 * 
	 * 申込情報のチェック
	 * 
	 * @return チェック結果
	 */
	private boolean chkMskmInfo()
	{

		boolean isTanKmkChkOk = true;
		boolean isTanKrnChkOk = true;

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// セキュリティオプション契約約款同意チェック
		if (bean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
				&& !bean.sendMessageBoolean(FUW12101SFConst.SVC_KEIYAKU_YAKKAN_DOI, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// エラーメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, MSG_EKF0440_TW, REP_EKF0440_TW, ERR_SP_RIYO_KIYAKU_DOI);
			isTanKmkChkOk = false;
		}
		// インターネットサギウォール契約約款同意チェック
		if (bean.sendMessageBoolean(FUW12101SFConst.ISW_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
				&& !bean.sendMessageBoolean(FUW12101SFConst.ISW_RIYO_KIYAKU_DOI, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// エラーメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, MSG_EKF0440_TW, REP_EKF0440_TW, ERR_ISW_RIYO_KIYAKU_DOI);
			isTanKmkChkOk = false;
		}
		// ノートンファミリープレミア契約約款同意チェック
		if (bean.sendMessageBoolean(FUW12101SFConst.NFP_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
				&& !bean.sendMessageBoolean(FUW12101SFConst.NFP_RIYO_KIYAKU_DOI, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// エラーメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, MSG_EKF0440_TW, REP_EKF0440_TW, ERR_NFP_RIYO_KIYAKU_DOI);
			isTanKmkChkOk = false;
		}

		// 単項目チェックエラーの場合
		if (!isTanKmkChkOk)
		{
			return isTanKmkChkOk;
		}

		// ノートンファミリープレミア契約約款同意チェック
		if (!bean.sendMessageBoolean(FUW12101SFConst.SP_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
				&& !bean.sendMessageBoolean(FUW12101SFConst.ISW_MSKM, X31CWebConst.DATABEAN_GET_VALUE)
				&& !bean.sendMessageBoolean(FUW12101SFConst.NFP_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// エラーメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, MSG_EKF0420_TW, REP_EKF0420_TW, ERR_SPOP_MSKM);
			isTanKrnChkOk = false;
		}

		// 単関連チェックエラーの場合
		if (!isTanKrnChkOk)
		{
			return isTanKrnChkOk;
		}

		return true;
	}

	/**
	 * WEB変更情報Bean取得処理です。
	 * 
	 * <br>
	 * @param commonInfoBean 共有フォームBean
	 * @return WEB変更情報Bean
	 */
	private X31SDataBeanAccess getWebChgInfoBean(X31SDataBeanAccess commonInfoBean)
	{
		X31SDataBeanAccess webChgInfo = null;

		// 共通フォームBean.ＷＥＢ変更情報
		X31SDataBeanAccessArray webChgInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO);
		if (webChgInfoArray.getCount() == 0)
		{
			webChgInfo = webChgInfoArray.addDataBean();
		}
		else
		{
			webChgInfo = webChgInfoArray.getDataBean(0);
		}

		return webChgInfo;
	}

	/**
	 * SSO情報Bean取得処理です。
	 * 
	 * <br>
	 * @param webChgInfoBean WEB変更情報Bean
	 * @return SSO情報Bean
	 */
	private X31SDataBeanAccess getSsoInfoBean(X31SDataBeanAccess webChgInfoBean)
	{
		X31SDataBeanAccess ssoInfo = null;

		// 共通フォームBean.ＷＥＢ変更情報.ＳＳＯ情報
		X31SDataBeanAccessArray ssoInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO);
		if (ssoInfoArray.getCount() == 0)
		{
			ssoInfo = ssoInfoArray.addDataBean();
		}
		else
		{
			ssoInfo = ssoInfoArray.getDataBean(0);
		}

		return ssoInfo;
	}

	/**
	 * 料金表情報の設定
	 * <br>
	 * @param bean				サービスフォームBean
	 * @throws Exception		すべての例外
	 */
	private void setPrcInfoArea(X31SDataBeanAccess bean) throws Exception
	{

		// ----------------------------------------------
		// 画面定義情報の取得
		// ----------------------------------------------
		// 料金表プロパティ情報取得
		Map<String, String> dispDefMap = JFUWebCommon.getDispItemsAsMap(QUERY_DISPCTL_PATH, QUERY_ATTR_NAME);

		// ▼金額・単位の取得(カンマ編集込み)
		// 月額料金
		String kihonPrcNon = JFUStrConst.HALF_HAIHUN;
		String kihonPrcEsp = bean.sendMessageString(FUW12101SFConst.SP_PRC_DSP, X31CWebConst.DATABEAN_GET_VALUE);
		String kihonPrcIsw = bean.sendMessageString(FUW12101SFConst.ISW_PRC_DSP, X31CWebConst.DATABEAN_GET_VALUE);
		String kihonPrcNfp = bean.sendMessageString(FUW12101SFConst.NFP_PRC_DSP, X31CWebConst.DATABEAN_GET_VALUE);
		String kihonPrcIswWrb = bean.sendMessageString(FUW12101SFConst.ISW_SET_WRIB_PRC, X31CWebConst.DATABEAN_GET_VALUE);

		// テーブルタイトルエリア表示用リスト
		List<String> setTableTitleList = new ArrayList<String>(1);
		setTableTitleList.add(dispDefMap.get(TITLE_LABEL_0)); // 月額料金

		// テーブルスタイルクラス１リスト
		//   →テーブルヘッダのスタイルを指定
		List<String> setTableStyleClass1List = new ArrayList<String>(1);
		setTableStyleClass1List.add(dispDefMap.get(TITLE_STYLE_0)); // 月額料金

		// テーブルスタイルクラス２リスト
		//   →テーブル明細行(左値・右値)のスタイルを指定
		List<String> setTableStyleClass2List = new ArrayList<String>(1);
		setTableStyleClass2List.add(dispDefMap.get(COL_STYLE_0)); // 月額料金

		// ▼月額料金テーブルの設定
		// テーブル左値リスト0 (料金名)
		List<String> setTableLeftValueList0 = new ArrayList<String>(1);
		setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_0)); // 基本料金
		setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_1)); // ｅｏセキュリティーパック
		setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_2)); // インターネットサギウォール　ｆｏｒ　ｅｏ
		setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_3)); // インターネットサギウォール（セット割）　ｆｏｒ　ｅｏ
		setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_4)); // ノートンファミリープレミア　ｆｏｒ　ｅｏ

		// テーブル右値リスト0 (料金額)
		List<String> setTableRightValueList0 = new ArrayList<String>(1);
		setTableRightValueList0.add(kihonPrcNon); // 基本料金
		setTableRightValueList0.add(kihonPrcEsp); // ｅｏセキュリティーパック
		setTableRightValueList0.add(kihonPrcIsw); // インターネットサギウォール　ｆｏｒ　ｅｏ
		setTableRightValueList0.add(kihonPrcIswWrb); // インターネットサギウォール（セット割）　ｆｏｒ　ｅｏ
		setTableRightValueList0.add(kihonPrcNfp); // ノートンファミリープレミア　ｆｏｒ　ｅｏ

		// テーブル値識別子エリア表示用リスト0(未使用)
		List<String> setTableValueSkbtList0 = new ArrayList<String>(0);

		// ■テーブルの値、左値、右値の各リストを格納するマップ
		//   ・KEY＝「タイトル名＋タイトル番号(0から始まる連番)＋テーブル左値リスト設定キー」
		//   ・KEY＝「タイトル名＋タイトル番号(0から始まる連番)＋テーブル右値リスト設定キー」
		//   ・KEY＝「タイトル名＋タイトル番号(0から始まる連番)＋テーブル値識別リスト設定キー」
		Map<String, List<String>> tableValueMap = new LinkedHashMap<String, List<String>>(3);

		// ▼月額料金
		tableValueMap.put(dispDefMap.get(TITLE_LABEL_0) + String.valueOf(0) + JFUStrConst.KEY_TABLE_LEFT_VALUE_LIST, setTableLeftValueList0);
		tableValueMap.put(dispDefMap.get(TITLE_LABEL_0) + String.valueOf(0) + JFUStrConst.KEY_TABLE_RIGHT_VALUE_LIST, setTableRightValueList0);
		tableValueMap.put(dispDefMap.get(TITLE_LABEL_0) + String.valueOf(0) + JFUStrConst.KEY_TABLE_VALUE_SKBT_LIST, setTableValueSkbtList0);

		// ----------------------------------------------
		// 料金情報エリアリストBean設定(共通メソッド)
		// ----------------------------------------------
		X31SDataBeanAccessArray prcInfoAreaListArray = bean.getDataBeanArray(JFUStrConst.PRC_INFO_PRC_INFO_AREA_LIST);
		X31SDataBeanAccess titleListArrayAccess = prcInfoAreaListArray.addDataBean();

		// コメントエリア表示用リスト設定(未使用)
		JFUWebCommon.setCommentList(titleListArrayAccess, new ArrayList<String>(0), new ArrayList<String>(0));
		// 備考エリア表示用リスト設定(未使用)
		JFUWebCommon.setBikoList(titleListArrayAccess, new ArrayList<String>(0), new ArrayList<String>(0));
		// テーブルタイトル識別子リスト(未使用)
		List<String> setTableTitleSkbtList = new ArrayList<String>(0);

		// テーブルタイトルエリア表示用リスト設定
		JFUWebCommon.setTableTitleList(titleListArrayAccess, setTableTitleSkbtList, setTableTitleList, setTableStyleClass1List,
				setTableStyleClass2List, tableValueMap);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);
	}

	/**
	 * 申込完了メールの送信情報登録を行う。
	 * 例外が発生した場合はスキップする。
	 * <br>
	 * @param procId 機能ID
	 * @param shiteiMlad 指定メールアドレス
	 * @param textList 可変文字リスト
	 */
	private void sendMskmFinMail(String procId, String shiteiMlad, String[] textList)
	{
		try
		{
			JFUMskmFinMail.sendMskmFinMail(this, procId, shiteiMlad, textList, null);
		}
		catch (JCCBusinessException je)
		{
			String sysid =
					JFUWebCommon.getDataBeanItemByPath(getCommonInfoBean(), JFUWebCommon.SSO_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.SYSID_21);

			outputBusLog("■ FUW12101 メール送信に失敗しました。 PROC_ID:" + procId + " SYSID: " + sysid);

		}
	}

	/**
	 * ビジネスログへの出力処理
	 *
	 * @param msg ログ情報
	 */
	private void outputBusLog(String msg)
	{
		JSYwebLog.println(JSYLogBase.EXECUTION, getClass(), msg, "CS0003I", null, null);
	}

	/**
	 * プロパティファイルから施策コードを取得する。
	 * 
	 * <br>
	 * @param taisyoSisak 対象となる施策コード（カンマ区切り）
	 * @param isMskm 申し込む
	 * @param dispId 申込内容に該当する施策を取得するID
	 * @return 対象となる施策コード（カンマ区切り）
	 * @throws Exception
	 */
	private String editSisakCd(String taisyoSisak, boolean isMskm, String dispId) throws Exception
	{

		if (!isMskm)
		{
			return taisyoSisak;
		}
		String wStr = JFUWebCommon.getDispItemsAsMap(JFUEoPremiumClubDsp.QUERY_PATH_TAISYO_SP_ISW, QUERY_ATTR_NAME).get(dispId);
		if (!JFUWebCommon.isNull(wStr))
		{
			if (!JFUWebCommon.isNull(taisyoSisak))
			{
				taisyoSisak = taisyoSisak + JFUStrConst.COMMA + wStr;
			}
			else
			{
				taisyoSisak = wStr;
			}
		}
		return taisyoSisak;
	}

	/**
	 * 運用日付(OPEDATE)の設定です。
	 *
	 * 共通フォームBean.フロント共有情報.フロント運用日付に運用日付(OPEDATE)を設定。
	 *
	 * @param commonInfoBean 共通フォームBean
	 * @param opeDate 運用日付(OPEDATE)
	 */
	private void setFuOpedate(X31SDataBeanAccess commonInfoBean, String opeDate)
	{
		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		// 共通フォームBean.フロント共有情報
		X31SDataBeanAccess frontInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO).getDataBean(0);
		// フロント共有情報.フロント運用日付を設定します。
		frontInfo.sendMessageString(CommonInfoCFConst.FU_OPEDATE_05, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
	}
}