/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：FUW03801SFLogic
 *   ソースファイル名：FUW03801SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年06月13日
 *＜機能概要＞
 *  ファミリーパック申込のビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/06/13   FJ）中谷     新規作成
 *   v3.00       2012/05/03   FJ）山本    【ANK-0024-01-00】【お客さまID非通知対応】フロント系
 *   v3.00       2012/05/03   FJ）山本    【ANK-0033-00-00】コース変更中のファミリーＰ申込受付
 *   v3.00       2012/05/03   FJ）山本    【ANK-0051-00-00】100M無線ルーター売り止め対応
 *   v3.00       2012/05/03   FJ）山本    【ANK-0116-00-00】ネット・オプションサービスの事務手数料、および機器返送費用の変更対応
 *   v4.00       2012/07/30   FJ）井口    【ANK-0361-00-00】ファミリーパック導線変更
 *   v4.00       2012/09/22   FJ）岡井    【ANK-1198-00-00】変更系申込画面の提供条件・利用規約の設置位置について
 *   v4.00       2013/01/08   FJ）岡井    【ST4-2012-0000246】性能障害対応
 *   v5.00       2013/01/11   FJ）中谷    【ANK-1337-00-00】ベーシックギガルータ枯渇対応の切戻し
 *   v5.00       2013/02/14   FJ）井口    【ANK-1399-00-00】フロントＳ文言確認修正対応
 *   v5.00       2013/03/13   FJ）井口    【IT-2013-0000424】メール文言見直し
 *   v5.00       2013/10/25   FJ）中谷    【OM-2013-0003633】メール送信先の不具合対応
 *   v8.00       2014/01/27   FJ) 文元    【ANK-1589-00-00】消費増税に伴う料金施策
 *   v8.00       2014/05/03   FJ）中谷    【OM-2014-0001761】ルーター文言不具合対応
 *   v9.00       2014/05/20   FJ）西山    【ANK-2057-00-00】eo多機能ルーターによる複数通話対応
 *   v9.00       2014/06/20   FJ）中谷    【ANK-2057-00-00】eo多機能ルーターによる複数通話対応
 *   v20.00      2016/01/04   FJ）岡井    【ANK-2612-00-00】10Gコース導入対応
 *   
 **********************************************************************/
package eo.web.webview.FUW03801SF;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SWebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

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.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0079_FUSV0079OPDBMapper;
import eo.web.webview.mapping.FUSV0080_FUSV0080OPDBMapper;

/**
 * ファミリーパック申込のビューロジッククラスです。
 *
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW03801SFLogic extends JCCWebBusinessLogic
{
	/** サービスID(初期表示) */
	private static final String USECASE_ID_FUSV0079 = "FUSV0079";
	/** サービスID(申込) */
	private static final String USECASE_ID_FUSV0080 = "FUSV0080";

	/** 最大契約数超過エラー(テンプレートID) */
	private static final String REL_TEMP_WRIBSVCKEI_CNTMAXCNT = "EKK0451B506";
	/** 最大契約数超過エラー(アイテム) */
	private static final String REL_ITEM_WRIBSVCKEI_CNTMAXCNT = "max_kei_cnt";
	/** メール予約中エラー(テンプレートID) */
	private static final String REL_TEMP_OP_SVC_RSV_CNT = "EKK0351B509";
	/** メール予約中エラー(アイテム) */
	private static final String REL_ITEM_OP_SVC_RSV_CNT = "mail_rsv";
	/** ルータ申し込み予約中エラー(テンプレートID) */
	private static final String REL_TEMP_KKTK_SVC_RSV_CNT = "EKK0341B506";
	/** ルータ申し込み予約中エラー(アイテム) */
	private static final String REL_ITEM_KKTK_SVC_RSV_CNT = "router_rsv";
	/** 自動登録可能ルーターなしエラー(テンプレートID) */
	private static final String REL_TEMP_KK_AUTO_CHG = "EKK1651B501";
	/** 自動登録可能ルーターなしエラー(アイテム) */
	private static final String REL_ITEM_KK_AUTO_CHG = "router_auto_add";
	/** 契約済エラー(テンプレートID) */
	private static final String REL_TEMP_WRIBSVCKEI_CNTKEISUMI = "EKK0451B506";
	/** 契約済エラー(アイテム) */
	private static final String REL_ITEM_WRIBSVCKEI_CNTKEISUMI = "kei_sumi";
	/** 工事未完了エラー(テンプレートID) */
	private static final String REL_TEMP_KOJIAK = "EKU0011B010";
	/** 工事未完了エラー(アイテム) */
	private static final String RELATION_CHECK_ITEM_KOJIAK = "kojiak";

	/** テンプレートID(割引サービス契約登録) */
	private static final String REL_CHK_TMP_ID_EKK0451D010 = "EKK0451D010";
	/** アイテム(SYSID) */
	private static final String REL_CHK_ITEM_SYSID = "sysid";
	/** アイテム(オプションサービス契約番号) */
	private static final String REL_CHK_ITEM_OP_SVC_KEI_NO = "op_svc_kei_no";
	/** アイテム(サービス契約番号) */
	private static final String REL_CHK_ITEM_SVC_KEI_NO = "svc_kei_no";

	/** CCID */
	private static final String CC_ID_FUSV007903CC = "FUSV007903CC";

	/** 料金プラン固定単価（オプション申込料金）明細 */
	private static final String EKK0601B001_LIST = "EKK0601B001CBSMsg1List";
	/** 料金プラン固定単価（オプション申込料金）一覧照会 */
	private static final String SC_ID_FUSV007901SC = "FUSV007901SC";
	/** 基本料金 金額 */
	private static final String PPLAN_KOTEI_AMNT = "pplan_kotei_amnt";

	/** ルーター文言項目設定キー(ルーター速度種別) */
	private static final String MSG_ROUTER_SPEED_SBT = "router_speed_sbt";
	/** ルーター文言項目設定キー(料金コースコード) */
	private static final String MSG_PCRS_CD = "pcrs_cd";
	/** ルーター文言取得タグ famipa */
	private static final String TAG_ATTR_VALUE_FAMIPA = "famipa";
	/** VA有無 */
	private static final String ROUTER_MSG_VA_UM = "va_um";

	/**
	 * 初期表示処理です。
	 * 
	 * <br>
	 * @return boolean true(固定)
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ●初期表示時のエラーチェック処理
		chkInit(commoninfoBean);

		// ●サービス呼び出し処理
		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0079);

		FUSV0079_FUSV0079OPDBMapper mapper = new FUSV0079_FUSV0079OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		X31SDataBeanAccess[] paramBean = { bean, commoninfoBean };

		// ファミリーパック関連チェックCC
		mapper.setFUSV007901CC(paramBean, dataMap);

		// 料金プラン固定単価（オプション申込料金）一覧照会SC
		mapper.setFUSV007901SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// 初期費用一覧照会CC
		mapper.setFUSV007902CC(paramBean, dataMap);

		// ファミリーパックルーター自動登録CC
		mapper.setFUSV007903CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);

		// 料金コース_オプションサービス一意照会
		mapper.setFUSV007902SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);

		// 機器提供サービス契約一覧照会(各種通信機器情報取得)
		mapper.setFUSV007903SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		// 複数電話サービス変更判定CC
		mapper.setFUSV007904CC(paramBean, dataMap);

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		try
		{
			// サービスの呼び出しを行う。
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException jwse)
		{
			X31CMessageResult msgRes = jwse.getMessageList();

			for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgRes.getMessageMoreInfoList()))
			{
				// 関連チェック
				// 最大契約数超過エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_WRIBSVCKEI_CNTMAXCNT.equals(moreInfo.getTemplateId())
						&& REL_ITEM_WRIBSVCKEI_CNTMAXCNT.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// メール予約中エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_OP_SVC_RSV_CNT.equals(moreInfo.getTemplateId()) && REL_ITEM_OP_SVC_RSV_CNT.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// ルータ申し込み予約中エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_KKTK_SVC_RSV_CNT.equals(moreInfo.getTemplateId()) && REL_ITEM_KKTK_SVC_RSV_CNT.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// 自動登録可能ルーターなしエラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_KK_AUTO_CHG.equals(moreInfo.getTemplateId()) && REL_ITEM_KK_AUTO_CHG.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}
				// 契約済エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_WRIBSVCKEI_CNTKEISUMI.equals(moreInfo.getTemplateId())
						&& REL_ITEM_WRIBSVCKEI_CNTKEISUMI.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// 工事未完了エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus()) && REL_TEMP_KOJIAK.equals(moreInfo.getTemplateId())
						&& RELATION_CHECK_ITEM_KOJIAK.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0109);
				}
			}
			// 上記以外はシステムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 契約サービス情報
		X31SDataBeanAccess svcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commoninfoBean, JFUWebCommon.SVC_KEI_INFO);

		// ルーター文言取得
		List<Map<String, String>> routerMsgList = getRouterMessage(outputMap);

		mapper.getFUSV007901CC(bean, outputMap, routerMsgList);
		mapper.getFUSV007902CC(bean, outputMap, svcKeiInfoBean);
		mapper.getFUSV007902SC(paramBean, outputMap);
		mapper.getFUSV007903SC(bean, outputMap);
		mapper.getFUSV007903CC(bean, outputMap);
		mapper.getFUSV007904CC(bean, outputMap);

		// メモリー開放
		mapper = null;
		dataMap = null;

		// 月額料金をチェックして無料であれば有料フラグをfalseにする。
		bean.sendMessageBoolean(FUW03801SFConst.PAY_FLG, X31CWebConst.DATABEAN_SET_VALUE, chkPayKoteiTanka(outputMap));
		// マンション区分を設定
		bean.sendMessageBoolean(FUW03801SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, getMansionDiv(commoninfoBean, bean));

		// ルーター文言(申込画面)
		bean.sendMessageString(FUW03801SFConst.EOH_ROUTER_DSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, bean.getDataBeanArray(
				FUW03801SFConst.EOH_ROUTER_DSP_MSG_LIST).getDataBean(JFUStrConst.ROUTER_MSG_IDX_0).sendMessageString(
				FUW03801SFConst.EOH_ROUTER_DSP_MSG, X31CWebConst.DATABEAN_GET_VALUE));

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW03801);

		return true;
	}

	/**
	 * 確認ボタン押下時処理です。 <br>
	 * @return boolean true(固定)
	 * @throws Exception
	 */
	public boolean cfm() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		// サービスフォームbean
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ルーター文言(確認画面)
		bean.sendMessageString(FUW03801SFConst.EOH_ROUTER_DSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, bean.getDataBeanArray(
				FUW03801SFConst.EOH_ROUTER_DSP_MSG_LIST).getDataBean(JFUStrConst.ROUTER_MSG_IDX_1).sendMessageString(
				FUW03801SFConst.EOH_ROUTER_DSP_MSG, X31CWebConst.DATABEAN_GET_VALUE));

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW03802);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW03802);

		return true;
	}

	/**
	 * 申し込むボタン押下時処理です。 <br>
	 * @return boolean true(固定)
	 * @throws Exception
	 */
	public boolean mskm() throws Exception
	{
		// 共通関連チェック
		JFUWebCommon.checkCommonRelation(this, USECASE_ID_FUSV0080);

		// 共有フォームBean
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		// サービスフォームBean
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ●サービス呼び出し処理
		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0080);

		FUSV0080_FUSV0080OPDBMapper mapper = new FUSV0080_FUSV0080OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		X31SDataBeanAccess[] paramBean = { bean, commoninfoBean };

		// 申込内容承認登録
		mapper.setFUSV008001SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// ファミリーパックルーター自動登録CC
		mapper.setFUSV008001CC(paramBean, dataMap);
		// 割引サービス契約自動登録CC
		mapper.setFUSV008002CC(paramBean, dataMap);
		// 申込明細照査・後続業務依頼
		mapper.setFUSV008002SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		// メモリ開放
		mapper = null;

		try
		{
			// サービスの呼び出し
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException jwse)
		{
			X31CMessageResult msgRes = jwse.getMessageList();

			for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgRes.getMessageMoreInfoList()))
			{
				// 関連チェック
				// 最大契約数超過エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_CHK_TMP_ID_EKK0451D010.equals(moreInfo.getTemplateId()) && REL_CHK_ITEM_SYSID.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ERR_EE.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// メール予約中エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_CHK_TMP_ID_EKK0451D010.equals(moreInfo.getTemplateId()) && REL_CHK_ITEM_OP_SVC_KEI_NO.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ERR_EB.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// ルータ申し込み予約中エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_KKTK_SVC_RSV_CNT.equals(moreInfo.getTemplateId()) && REL_ITEM_KKTK_SVC_RSV_CNT.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// 自動登録可能ルーターなしエラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_TEMP_KK_AUTO_CHG.equals(moreInfo.getTemplateId()) && REL_ITEM_KK_AUTO_CHG.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}
				// 契約済エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus())
						&& REL_CHK_TMP_ID_EKK0451D010.equals(moreInfo.getTemplateId()) && REL_CHK_ITEM_SVC_KEI_NO.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ERR_EC.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
				// 工事未完了エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus()) && REL_TEMP_KOJIAK.equals(moreInfo.getTemplateId())
						&& RELATION_CHECK_ITEM_KOJIAK.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0109);
				}
			}
			// 上記以外はシステムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		finally
		{
			// メモリ開放
			paramMap = null;
			dataMap = null;
			outputMap = null;
		}

		// ルーター文言(完了画面用)
		bean.sendMessageString(FUW03801SFConst.EOH_ROUTER_DSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, bean.getDataBeanArray(
				FUW03801SFConst.EOH_ROUTER_DSP_MSG_LIST).getDataBean(JFUStrConst.ROUTER_MSG_IDX_2).sendMessageString(
				FUW03801SFConst.EOH_ROUTER_DSP_MSG, X31CWebConst.DATABEAN_GET_VALUE));

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW03803);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW03803);

		return true;
	}

	/**
	 * 戻るボタン押下時処理です。 <br>
	 * @return boolean true(固定)
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW03801);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW03801);

		return true;
	}

	/**
	 * マンション区分判定処理です。 
	 * <BR>
	 * @param commoninfoBean 共有フォームBean
	 * @param bean サービスフォームBean
	 * 
	 * @return true:マンション(全戸一括)かつ支払い金有り / false:マンション(全戸一括)以外または支払い金無し
	 */
	private Boolean getMansionDiv(X31SDataBeanAccess commoninfoBean, X31SDataBeanAccess bean)
	{
		// 有料フラグ
		boolean payFlg = bean.sendMessageBoolean(FUW03801SFConst.PAY_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		// WEB変更情報
		X31SDataBeanAccess webChgInfoBean = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// 現顧客情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
		// サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);

		// 料金グループコード
		String prcGrpCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE);
		// 加入契約支払方式コード
		String kanyuKeiPayHoshikiCd =
				svcKeiInfoBean.sendMessageString(CommonInfoCFConst.KANYU_KEI_PAY_HOSHIKI_CD_23, X31CWebConst.DATABEAN_GET_VALUE);

		// 料金クループコードが"04"(ネットマンション)、かつ、加入契約支払方式コードが"003"(全戸一括)
		// かつ、有料フラグがTRUEの場合、「true」を設定
		boolean result = JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd) && payFlg;

		return result;
	}

	/**
	 * ルーター文言を取得します。
	 * <br>
	 * @param outputMap サービス実行結果
	 * @return ルーター文言
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 * @throws IOException
	 */
	@SuppressWarnings("unchecked")
	private List<Map<String, String>> getRouterMessage(HashMap outputMap) throws ParserConfigurationException, SAXException, IOException
	{
		// ルーター速度種別
		String routerSpeedSbt = (String)((HashMap)outputMap.get(CC_ID_FUSV007903CC)).get(MSG_ROUTER_SPEED_SBT);
		// 料金コースコード
		String pcrsCd = (String)((HashMap)outputMap.get(CC_ID_FUSV007903CC)).get(MSG_PCRS_CD);
		// VA有無
		String vaUm = (String)((HashMap)outputMap.get(CC_ID_FUSV007903CC)).get(ROUTER_MSG_VA_UM);

		List<Map<String, String>> routerMsgList =
				JFUWebCommon.getRouterMessage(TAG_ATTR_VALUE_FAMIPA, pcrsCd, routerSpeedSbt, JFUStrConst.CD00002_0, vaUm);

		return routerMsgList;
	}

	/**
	 * 有料フラグ判定（固定単価）処理です。
	 * @param bean
	 * @param outputMap
	 * @return true:固定単価あり / false:固定単価なし（無料）
	 */
	@SuppressWarnings("unchecked")
	private boolean chkPayKoteiTanka(HashMap outputMap)
	{
		boolean res = false;
		HashMap parentMap = null;

		if (outputMap.containsKey(SC_ID_FUSV007901SC))
		{
			parentMap = (HashMap)outputMap.get(SC_ID_FUSV007901SC);
		}

		if (null != parentMap && parentMap.containsKey(EKK0601B001_LIST))
		{
			ArrayList childList = (ArrayList)parentMap.get(EKK0601B001_LIST);

			if (childList != null && childList.size() > 0)
			{
				int chilListSize = childList.size();
				for (int i = 0; i < chilListSize; i++)
				{
					HashMap childmap = (HashMap)childList.get(i);

					if (childList != null && childList.size() > 0)
					{
						if (JFUStrConst.FREE_LABEL.equals(childmap.get(PPLAN_KOTEI_AMNT)))
						{
							// 無料の場合は単価なし
							res = false;
						}
						else
						{
							// 固定単価がある場合
							res = true;
						}
					}
					else
					{
						// 固定単価がない場合
						res = false;
					}
				}
			}
			else
			{
				// 固定単価がない場合
				res = false;
			}
		}
		return res;
	}

	/**
	 * メールアドレス追加ボタン押下処理です。
	 * <br/>
	 * @return 処理結果
	 */
	public boolean mladadd()
	{

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// メールアドレス追加画面に遷移
		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);

		return true;
	}

	/**
	 * 初期表示時のエラーチェック処理です。
	 * 
	 * <br>
	 * @param commonInfoBean 共有フォームBean
	 */
	private void chkInit(X31SDataBeanAccess commonInfoBean)
	{
		// 10ギガ契約中の申込抑止
		X31SDataBeanAccess nowSvcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);
		String nowPcrsCd = nowSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.PCRS_CD_23, X31CWebConst.DATABEAN_GET_VALUE);
		if(JFUStrConst.CD00134_A83.equals(nowPcrsCd) || JFUStrConst.CD00134_A84.equals(nowPcrsCd))
		{
			// 10ギガ契約者の場合、10ギガ契約中の申込抑止画面へ
			X31SWebLog.DEBUG_LOG.info("※10ギガ契約中の申込抑止");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0140);
		}
	}
}
