/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW00103SFLogic
*   ソースファイル名：FUW00103SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年06月13日
*＜機能概要＞
*   手続内容確認画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/06/13   FJ）北島    新規作成
*   v4.00       2012/06/18   FJ）池田    障害対応（ST2-2012-0000293）
*   v4.01       2012/11/19   FJ）馬場    障害対応（ST1-2012-0000655）
*   v5.00.00    2013/04/08   FJ）大村    障害No.204 AxM連携でのPMP画像読み込み対応(シングルサインオン)
*   v5.01.00    2013/05/24   FJ）岡井    【内部障害】新しい場所追加押下時に共有フォームBean初期化処理を追加
*   v15.00      2015/05/20   FJ）中西    【ANK-2480-00-00】新電力対応
*   v26.00.00   2016/09/25   FJ) 張本    【ANK-2914-00-00】(客A)サービス追加申込時の仮申込機能削除
*   v28.00.00   2016/10/13   FJ) 横山    【ANK-3032-00-00】AxM再構築対応
*   v34.00      2017/09/12   FJ) 張本    【ANK-3210-00-00】電気単独対応
*   v40.00      2019/02/04   FJ) 岡井    【ANK-3531-00-00】【eoフロント】ログイン画面のiDA対応
*   v49.00.00   2020/05/08   FJ) 吉田    【OM-2020-0000450】WEBで同一場所にサービス追加を行うと標準工事費の聴き取りエリアが表示されない
*   v54.00      2021/07/08   FJ) 大島    【ANK-4092-00-00】CX戦略WG方針対応STEP2
*   v62.00      2022/10/25   FJ）西川    【ANK-4141-00-00】eo：フロントOpenID化対応
*   v73.0.0     2025/01/23   FJ）浅井    【ANK-4427-43-00】NTT卸対応【仕変43】【フロント】NTT卸のサービス追加について
**********************************************************************/
package eo.web.webview.FUW00103SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

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 com.fujitsu.futurity.web.x31.X31SRuntimeException;
import com.fujitsu.futurity.web.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JFUCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUKariMskmDelUtil;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0023_FUSV0023OPDBMapper;
import eo.web.webview.mapping.FUSV0227_FUSV0227OPDBMapper;
import eo.web.webview.mapping.FUSV0313_FUSV0313OPDBMapper;

/**
 * 手続内容確認画面(FUW00103)のビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00103SFLogic extends JCCWebBusinessLogic
{

	/** サービスユースケースID：サービス契約番号一覧 */
	private static final String SVC_USECASE_ID_FUSV0023 = "FUSV0023";
	/** サービスユースケースID：手続内容確認（初期表示） */
	private static final String SVC_USECASE_ID_FUSV0313 = "FUSV0313";
	/** サービスユースケースID：会員情報チェック */
	private static final String USECASE_ID_FUSV0227 = "FUSV0227";

	/** アプリケーションプロパティから共通暗号化キーを取得するキー (外部リンク（電気）用) */
	private static final String ELEC_MSKM_ENCRYPTION_KEY = "ELEC_MSKM_ENCRYPTION_KEY";
	/** 申込書番号 */
	private static final String MSKMSHO_NO = "0000000000";

	/** FUSV031301SC 現顧客情報一覧照会SC */
	private static final String FUSV031301SC = "FUSV031301SC";
	/** ECK0011B504CBSMsg1List 現顧客情報一覧照会明細 */
	private static final String ECK0011B504CBSMSG1LIST = "ECK0011B504CBSMsg1List";

	/** FUSV022701CC */
	private static final String FUSV022701CC = "FUSV022701CC";
	/** FUSV022702SC */
	private static final String FUSV022702SC = "FUSV022702SC";
	/** FUSV022705SC */
	private static final String FUSV022705SC = "FUSV022705SC";
	/** JFUGetTokusokuInfoCCList */
	private static final String JFUGETTOKUSOKUINFOCCLIST = "JFUGetTokusokuInfoCCList";
	/** EKK0081B519CBSMsg1List */
	private static final String EKK0081B519CBSMSG1LIST = "EKK0081B519CBSMsg1List";
	/** ECK0011A010CBSMsg1List */
	private static final String ECK0011A010CBSG1LIST = "ECK0011A010CBSMsg1List";

	/** SYSID(Header情報からSYSIDを取得するKEYを取得するKEY) */
	private static final String HEADER_SYSID_KEY = "HEADER_SYSID_KEY";
	/** 会員種別コード */
	private static final String MEMBER_SBT_CD = "member_sbt_cd";
	/** eoID */
	private static final String EOID = "eoid";
	/** サービスコード */
	private static final String SVC_CD = "svc_cd";
	/** 督促ステータス */
	private static final String TOKUSOKU_STAT = "tokusoku_stat";
	/** 料金グループコード */
	private static final String PRC_GRP_CD = "prc_grp_cd";
	/** サービス契約ステータス */
	private static final String SVC_KEI_STAT = "svc_kei_stat";
	/** 会員種別特定フラグ */
	private static final String MMB_SBT_TOKUT_FLG = "mmb_sbt_tokut_flg";
	/** eonetID未移行フラグ */
	private static final String EONETID_MI_IKO_FLG = "eonetid_mi_iko_flg";

	/** iDAテストモード */
	private static final String IDA_TEST_MODE = "IDA_TEST_MODE";
	/** パラメータ：アクション */
	private static final String POST_ID_ACTION = "action";
	/** アクション（iDAログイン画面） */
	private static final String ACTION_SERVICE_ADD = "service_add";

	/** マスター会員(内部処理用会員種別) */
	private static final String KIIN_SBT_MASTER = "1";
	/** ファミリー会員(内部処理用会員種別) */
	private static final String KIIN_SBT_FAMILY = "2";
	/** オープン会員(内部処理用会員種別) */
	private static final String KIIN_SBT_OPEN = "3";

	/** mineoのみフラグ（追加可能サービス契約なし） */
	private static final String MINEO_ONLY_FLG_VALID_NOT_EXISTS = "0";
	/** mineoのみフラグ（mineoサービスのみ存在） */
	private static final String MINEO_ONLY_FLG_MINEO_ONLY = "1";
	/** mineoのみフラグ（mineoサービス、eoサービス共に存在） */
	private static final String MINEO_ONLY_FLG_MINEO_EO = "2";
	/** mineoのみフラグ（eoサービスのみ存在） */
	private static final String MINEO_ONLY_FLG_EO_ONLY = "3";
	/** mineoのみフラグ（電気サービスのみ存在） */
	private static final String MINEO_ONLY_FLG_ELEC_ONLY = "4";
	/** mineoのみフラグ（サービス契約なし） */
	private static final String MINEO_ONLY_FLG_ALL_NOT_EXISTS = "5";
	/** mineoのみフラグ（モバイルサービスのみ存在） */
	private static final String MINEO_ONLY_FLG_MB_ONLY = "6";

	/** eo電気サービス契約状態（サービス契約なし） */
	private static final String EO_ELECTRIC_STA_VALID_NOT_EXISTS = "0";
	/** eo電気サービス契約状態（eo電気サービス単独） */
	private static final String EO_ELECTRIC_STA_ELECTRIC_ONLY = "1";

	/** 追加申込(申込区分) */
	private static final String MSKM_KBN_ADD = "2";

	/** 画面ID名修飾子 */
	private static final String NEED_0PJP = "0PJP";

	/**
	 * サービスフォームBeanの初期化処理を行います。
	 * <br>
	 * @return true固定
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 2012.11.19 baba ST1-2012-0000655対応 START
		// 画像パス設定処理
		//障害No.204 AxM連携でのPMP画像読み込み対応(シングルサインオン) >>>
		//共通処理へ移動	this.setImgPath();
		//障害No.204 AxM連携でのPMP画像読み込み対応(シングルサインオン) <<<E
		// 2012.11.19 baba ST1-2012-0000655対応 END
		
		// 申込受付実績登録部品実行
		JFUWebCommon.executeWebMskmUkJskAdd(this);

		// 共有フォームBeanを取得する。
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanを取得する。
		X31SDataBeanAccess serviceBean = getServiceFormBean();

		// 共有フォームBeanから回線申込みサービスを取得する。
		X31SDataBeanAccessArray webNewInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = webNewInfo.getDataBean(0);

		// --------------------------------------
		//  iDA認証情報からSYSID取得
		// --------------------------------------
		// Requestオブジェクト取得
		X33WSessionController sc = X33CUtil.getSession(this.getSessionId());
		HttpServletRequest req = sc.getServletRequest();

		// アクション取得
		String action = req.getParameter(POST_ID_ACTION);

		if (ACTION_SERVICE_ADD.equals(action))
		{
			
			// Header情報からSYSIDを取得するKEYを取得
			String headerSysIdKey = JCCWebCommon.getApplicationConst(HEADER_SYSID_KEY);
			if (null == headerSysIdKey || "".equals(headerSysIdKey))
			{
				throw new JCCFrameworkException("Header情報のSYSID取得用KEYが、アプリケーションプロパティファイルに設定されていません。");
			}

			// Header情報からのSYSID情報
			String headerSysId = req.getHeader(headerSysIdKey);

			// iDAテストモードをAPLConstから取得する
			String iDATestMode = JCCWebCommon.getApplicationConst(IDA_TEST_MODE);

			// iDAテストモードがONの場合、SYSIDをリクエストから取得する
			if(JFUStrConst.ON.equals(iDATestMode))
			{
				// SYSIDの取得
				headerSysId = req.getParameter(headerSysIdKey);
			}

			if (JFUWebCommon.isNull(headerSysId))
			{
				// SYSIDが設定されていない場合、戸建て・マンション選択画面を設定する。
				outputBusLog("※※※※※ FUW00103SFLogic：SYSID未設定の為、戸建て・マンション選択画面へ遷移 ※※※※※");
				setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00147, JFUScreenConst.SCREEN_NAME_FUW00147, JFUStrConst.EMPTY);
				this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00147 + NEED_0PJP);

				return true;
			}

			// SYSIDを設定
			webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_SET_VALUE, headerSysId);
		}

		// SYSIDを取得
		String sysid = webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);

		try
		{
			// 仮申込破棄部品実行
			JFUKariMskmDelUtil.executeKariMskmDel(sysid, this);
		}
		catch (Exception e)
		{
			// 仮申込破棄で失敗してもエラーとしない
			DEBUG_LOG.debug("※仮申込破棄処理でエラー");
			DEBUG_LOG.debug(e.toString());
		}

		// -------------------------------------------------
		// 手続内容確認（初期表示）サービスの呼び出し
		// -------------------------------------------------
		// サービス検索条件格納用マップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービス処理結果格納用マップ
		HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
				new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();

		// サービスパラメータ生成
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_FUSV0313);

		// DataBean-BPマッピングクラス生成
		FUSV0313_FUSV0313OPDBMapper mapper = new FUSV0313_FUSV0313OPDBMapper();
		// 上り/下りマッピング用パラメータ生成
		X31SDataBeanAccess[] beanArray = new X31SDataBeanAccess[] { serviceBean, commonInfoBean };

		// 現顧客一覧照会SC上りマッピング
		mapper.setFUSV031301SC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// 手続内容確認（初期表示）サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務共通例外クラス："0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 現顧客一覧照会SC下りマッピング
		mapper.getFUSV031301SC(beanArray, outputMap, this);

		// --------------------------------------
		//  会員情報チェック＆設定処理
		// --------------------------------------
		chkAndSetKiinInfo(outputMap);

// ANK-4427-43-00 ADD START
		// NTT卸区分設定処理
		setNttOrs(sysid);
// ANK-4427-43-00 ADD END

		// --------------------------------------
		//  eo電気外部リンク用
		// --------------------------------------
		// その他情報を取得
		X31SDataBeanAccess elseInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO).getDataBean(0);

		// 暗号化前の値
		// sysid
		String outlink_elec_sysid = webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);
		// eoid
		String outlink_elec_eoid = webNewInfoBean.sendMessageString(CommonInfoCFConst.EOID_06, X31CWebConst.DATABEAN_GET_VALUE);
		// 申込書番号
		String outlink_elec_mskmsho_no = MSKMSHO_NO;
		// 共通暗号化キーをAPLConstから取得
		String outlink_elec_cck = JCCWebCommon.getApplicationConst(ELEC_MSKM_ENCRYPTION_KEY);
		// 取扱コード1-1
		String outlink_trat_cd_1_1 = elseInfoBean.sendMessageString(CommonInfoCFConst.TORITEN_TORIATSUKAI_CD_18, X31CWebConst.DATABEAN_GET_VALUE);
		// 取扱コード2-1
		String outlink_trat_cd_2_1 = elseInfoBean.sendMessageString(CommonInfoCFConst.TORITEN_TORIATSUKAI_CD2_18, X31CWebConst.DATABEAN_GET_VALUE);

		// 外部リンク用パラメータ暗号化処理
		// 暗号化用ランダムキー取得
		String randomKey = JFUCommonUtil.createRondomKey();
		// 外部リンク（電気）用SYSID (共有フォームBean.ＷＥＢ新規情報.ｓｙｓＩＤをランダムキーにて暗号化した値)
		String criptElecSysid = JFUCommonUtil.encrypt(randomKey, outlink_elec_sysid);
		serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_ELEC_SYSID, X31CWebConst.DATABEAN_SET_VALUE, criptElecSysid);
		// 外部リンク（電気）用eoID (共有フォームBean.ＷＥＢ新規情報.ｅｏＩＤをランダムキーにて暗号化した値)
		String criptElecEoid = JFUCommonUtil.encrypt(randomKey, outlink_elec_eoid);
		serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_ELEC_EOID, X31CWebConst.DATABEAN_SET_VALUE, criptElecEoid);
		// 外部リンク（電気）用申込書番号
		String criptElecMskmshoNo = JFUCommonUtil.encrypt(randomKey, outlink_elec_mskmsho_no);
		serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_ELEC_MSKMSHO_NO, X31CWebConst.DATABEAN_SET_VALUE, criptElecMskmshoNo);
		// 外部リンク（電気）用暗号キー（ランダムキーを共通暗号化キーで暗号化した値）
		String criptOutlinkElecCk =  JFUCommonUtil.encryptBeforeDecryptKey(outlink_elec_cck, randomKey);
		serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_ELEC_CK, X31CWebConst.DATABEAN_SET_VALUE, criptOutlinkElecCk);
		// 外部リンク（電気）用取扱コード1-1
		String criptTratCd_1_1 = JFUCommonUtil.encrypt(randomKey, outlink_trat_cd_1_1);
		serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_TRAT_CD_1_1, X31CWebConst.DATABEAN_SET_VALUE, criptTratCd_1_1);
		// 外部リンク（電気）用取扱コード2-1
		if (!JFUWebCommon.isNull(outlink_trat_cd_2_1))
		{
			String criptTratCd_2_1 = JFUCommonUtil.encrypt(randomKey, outlink_trat_cd_2_1);
			serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_TRAT_CD_2_1, X31CWebConst.DATABEAN_SET_VALUE, criptTratCd_2_1);
		}
		// 外部リンク（電気）申込形態
		String criptMskmFormCd = JFUCommonUtil.encrypt(randomKey, JFUStrConst.CD00591_01);
		serviceBean.sendMessageString(FUW00103SFConst.OUTLINK_MSKM_FORM_CD, X31CWebConst.DATABEAN_SET_VALUE, criptMskmFormCd);

		return true;
	}

	/**
	 * 「ご契約中のサービスへ回線サービスを追加する」ボタン押下処理
	 * @return true固定
	 * @throws Exception
	 */
	public boolean addService() throws Exception
	{
		// 遷移先の画面ID・画面名に"サービス契約番号一覧"画面を設定する。
		// 回線場所選択に"1"（契約中の回線に追加）を設定する。
		setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00129, JFUScreenConst.SCREEN_NAME_FUW00129, JFUStrConst.KAISEN_SELECT_ADD_KEI);

		return true;
	}

	/**
	 * 「ご契約中のサービスを変更する」ボタン押下処理
	 * @return true固定
	 * @throws Exception
	 */
	public boolean changeService() throws Exception
	{
		// 遷移先の画面ID・画面名に"サービス契約番号一覧"画面を設定する。
		// OM-2020-0000450 MOD START
//		setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00129, JFUScreenConst.SCREEN_NAME_FUW00129, "");
		// 回線場所選択に"1"（契約中の回線に追加）を設定する。
		setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00129, JFUScreenConst.SCREEN_NAME_FUW00129, JFUStrConst.KAISEN_SELECT_ADD_KEI);
		// OM-2020-0000450 MOD END

		return true;
	}

	/**
	 * 「新しい場所に回線を追加する」ボタン押下処理
	 * @return true固定
	 * @throws Exception
	 */
	public boolean addLine() throws Exception
	{
		// 共有フォームBeanを取得する。
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 共有フォームBeanから回線申込みサービスを取得する。
		X31SDataBeanAccessArray webNewInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = webNewInfo.getDataBean(0);
		String mskmKsnSvc = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE);

		// 契約サービス情報
		X31SDataBeanAccessArray keiyakuSvcInfoBeanArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfoBean = keiyakuSvcInfoBeanArray.getDataBean(0);

		// 契約サービス情報 - 契約サービス（ネット）(1:契約中、0:未契約)
		keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_NET_10, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約サービス情報 - 契約サービス（電話）(1:契約中、0:未契約)
		keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_TEL_10, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約サービス情報 - 契約サービス（テレビ）(1:契約中、0:未契約)
		keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_TV_10,  X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約サービス情報 - 契約サービス（モバイル）(1:契約中、0:未契約)
		keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_MOBILE_10,  X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約サービス情報 - サービス契約回線内訳番号
		keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_10,  X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// 申込回線サービスが"1"(ホームタイプ)の場合
		if (JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskmKsnSvc))
		{
			// 遷移先の画面ID・画面名に"エリア検索"画面を
			// 回線場所選択に"2"（新しい場所に回線追加）を設定する。
			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00101, JFUScreenConst.SCREEN_NAME_FUW00101, JFUStrConst.KAISEN_SELECT_ADD_NEW_PLACE);
		}
		// 申込回線サービスが"2"(マンションタイプ)の場合
		else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskmKsnSvc))
		{
			// 遷移先の画面ID・画面名に"マンション検索1(府県)"画面を
			// 回線場所選択に"2"（新しい場所に回線追加）を設定する。
			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00131, JFUScreenConst.SCREEN_NAME_FUW00131, JFUStrConst.KAISEN_SELECT_ADD_NEW_PLACE);
		}
		// ANK-2480-00-00_新電力対応 2015/05/20 add start
		// 申込回線サービスが"4"(eo電気)の場合
		else if (JFUStrConst.MSKM_KSN_SVC_ELECTRIC.equals(mskmKsnSvc))
		{
			// 遷移先の画面ID・画面名に"戸建て・マンション選択"画面を
			// 回線場所選択に"2"（新しい場所に回線追加）を設定する。
			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00147, JFUScreenConst.SCREEN_NAME_FUW00147, JFUStrConst.KAISEN_SELECT_ADD_NEW_PLACE);
		}
		// ANK-2480-00-00_新電力対応 2015/05/20 add end
		else
		{
			// 上記以外の場合、戸建て・マンション選択画面を設定する。
			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00147, JFUScreenConst.SCREEN_NAME_FUW00147, JFUStrConst.KAISEN_SELECT_ADD_NEW_PLACE);
		}

		// WEB新規情報.SYSID
		String sysid = webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);

		// SYSID(既契約)が存在する場合、既契約情報を共有フォームBeanに設定する
		if (!JFUWebCommon.isNull(sysid))
		{
			// サービス検索条件格納用マップ
			HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();
			// サービス処理結果格納用マップ
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
					new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();

			// サービスパラメータ生成
			Map<String, String> paramMap = new HashMap<String, String>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_FUSV0023);

			// DataBean-BPマッピングクラス生成
			FUSV0023_FUSV0023OPDBMapper mapper = new FUSV0023_FUSV0023OPDBMapper();
			// 上り/下りマッピング用パラメータ生成
			X31SDataBeanAccess[] beanArray = new X31SDataBeanAccess[] { commonInfoBean };

			// サービス契約一覧照会CC上りマッピング
			mapper.setJFUSearchSvkeiList01CC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1, sysid);

			try
			{
				// 回線利用場所毎サービス契約番号一覧サービス呼び出し
				invokeService(paramMap, inputMap, outputMap);
			}
			catch (JCCWebServiceException se)
			{
				// 業務共通例外クラス："0002"（システムエラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// モバイル回線の情報を下りマッピング
			mapper.getMobileKaisen01(beanArray, outputMap);
		}

		return true;
	}

	/**
	 * 遷移先の画面ID・画面名・回線場所選択を共有フォームBeanの項目に設定する。
	 * <br>
	 * @param screenId     画面ＩＤ
	 * @param screenName   画面名
	 * @param kaisenSelect 回線場所選択
	 * @throws Exception
	 */
	private void setScreenInfo(String screenId, String screenName, String kaisenSelect) throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 共有フォームBeanから回線申込みサービスを取得する。
		X31SDataBeanAccessArray webNewInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (webNewInfo.getCount() == 0)
		{
			webNewInfo.addDataBean();
		}
		X31SDataBeanAccess webNewInfoBean = webNewInfo.getDataBean(0);

		// 回線申込みサービスからその他情報を取得する。
		X31SDataBeanAccessArray elseInfo = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		if (elseInfo.getCount() == 0)
		{
			elseInfo.addDataBean();
		}
		X31SDataBeanAccess elseInfoBean = elseInfo.getDataBean(0);

		// 回線場所選択を設定する。
		elseInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_SET_VALUE, kaisenSelect);
		//@@@ 2012/10/27 Yamano Add Start IT1-2012-0001560
		webNewInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_SET_VALUE, kaisenSelect);
		//@@@ 2012/10/27 Yamano Add end   IT1-2012-0001560

		// 画面遷移モードに"0"(通常遷移)を設定する。
		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, screenId);

		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, screenName);
	}

	/**
	 * 会員情報チェック＆設定処理です。
	 * 
	 * <br>
	 * @param resultMap
	 */
	@SuppressWarnings("unchecked")
	private void chkAndSetKiinInfo(HashMap resultMap)
	{
		// 共有フォームBeanのアクセッサーを取得します。
		X31SDataBeanAccess cfBean = getCommonInfoBean();

		// ＷＥＢ新規情報
		X31SDataBeanAccessArray beanNewArr = cfBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (beanNewArr.getCount() == 0)
		{
			beanNewArr.addDataBean();
		}
		X31SDataBeanAccess beanNew = beanNewArr.getDataBean(0);

		// ＷＥＢ新規情報.契約者情報
		X31SDataBeanAccessArray beanContractArr = beanNew.getDataBeanArray(CommonInfoCFConst.KEIYAKUSHA_INFO);
		if (beanContractArr.getCount() == 0)
		{
			beanContractArr.addDataBean();
		}
		X31SDataBeanAccess beanContract = beanContractArr.getDataBean(0);

		// ＷＥＢ新規情報.リダイレクト情報
		X31SDataBeanAccessArray beanRedirectArr = beanNew.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
		if (beanRedirectArr.getCount() == 0)
		{
			beanRedirectArr.addDataBean();
		}
		X31SDataBeanAccess beanRedirect = beanRedirectArr.getDataBean(0);

		// ＷＥＢ新規情報.ｅｏモバイル情報取得
		X31SDataBeanAccessArray eoMobileInfoArr = beanNew.getDataBeanArray(CommonInfoCFConst.EOMOBILE);
		if (eoMobileInfoArr.getCount() == 0)
		{
			eoMobileInfoArr.addDataBean();
		}
		X31SDataBeanAccess eoMobileInfoBean = eoMobileInfoArr.getDataBean(0);

		// ●その他情報を取得
		X31SDataBeanAccessArray beanArray3 = beanNew.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		if (beanArray3.getCount() == 0)
		{
			beanArray3.addDataBean();
		}
		X31SDataBeanAccess elseInfoBean = beanArray3.getDataBean(0);

		// ●契約サービス情報を取得
		X31SDataBeanAccessArray beanArray4 = beanNew.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		if (beanArray4.getCount() == 0)
		{
			beanArray4.addDataBean();
		}
		X31SDataBeanAccess keiyakuSvcInfoBean = beanArray4.getDataBean(0);

		// 連携情報取得
		String kiinSbt = null;
		String dummyKiinSbt = null;
		String eoid = null;
		String mmbSbtTokutFlg = null;
		String eonetidMiIkoFlg = null;

		// ●認証後値設定処理
		// 現顧客情報一覧照会マップ
		HashMap custMap = null;
		HashMap custChildMap = null;
		if (resultMap.containsKey(FUSV031301SC))
		{
			custMap = (HashMap)resultMap.get(FUSV031301SC);
		}
		if (custMap != null && custMap.containsKey(ECK0011B504CBSMSG1LIST))
		{
			ArrayList custList = (ArrayList)custMap.get(ECK0011B504CBSMSG1LIST);
			if (custList != null && !custList.isEmpty())
			{
				custChildMap = (HashMap)custList.get(0);
			}
		}

		// 会員種別コード
		kiinSbt = (String)custChildMap.get(MEMBER_SBT_CD);
		// EOID
		eoid = (String)custChildMap.get(EOID);
		// 会員種別特定フラグ
		mmbSbtTokutFlg = (String)custChildMap.get(MMB_SBT_TOKUT_FLG);
		// eonetID未移行フラグ
		eonetidMiIkoFlg = (String)custChildMap.get(EONETID_MI_IKO_FLG);

		// ●会員種別を内部パラメータに置き換え
		if (JFUStrConst.CD00039_30.equals(kiinSbt))
		{
			// オープン会員
			dummyKiinSbt = KIIN_SBT_OPEN;
		}
		else if (JFUStrConst.CD00039_21.equals(kiinSbt) || JFUStrConst.CD00039_11.equals(kiinSbt))
		{
			// ファミリー会員
			dummyKiinSbt = KIIN_SBT_FAMILY;
		}
		else if (JFUStrConst.CD00039_20.equals(kiinSbt) || JFUStrConst.CD00039_10.equals(kiinSbt))
		{
			// マスター会員
			dummyKiinSbt = KIIN_SBT_MASTER;
		}

		// ●会員種別判別(個人/法人)
		if (JFUStrConst.CD00039_30.equals(kiinSbt))
		{
			// オープン会員
			DEBUG_LOG.debug("DEBUG： ■ 会員種別：オープン会員 ■");
		}
		else if (JFUStrConst.CD00039_11.equals(kiinSbt) || JFUStrConst.CD00039_10.equals(kiinSbt))
		{
			// ファミリー会員（個人） or マスター会員（個人）
			DEBUG_LOG.debug("DEBUG： ■ 会員種別：ファミリー会員（個人） or マスター会員（個人） ■");
			beanNew.sendMessageString(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00036_1);
		}
		else if (JFUStrConst.CD00039_21.equals(kiinSbt) || JFUStrConst.CD00039_20.equals(kiinSbt))
		{
			// ファミリー会員（法人）or マスター会員（法人）
			DEBUG_LOG.debug("DEBUG： ■ 会員種別：ファミリー会員（法人）or マスター会員（法人） ■");
			beanNew.sendMessageString(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00036_2);
		}

		// 共有フォームBeanに値を設定(※SYSIDはリクエスト情報から事前に取得)
		// 契約者情報.会員種別
		beanContract.sendMessageString(CommonInfoCFConst.KIIN_SBT_09, X31CWebConst.DATABEAN_SET_VALUE, dummyKiinSbt);
		// ｅｏＩＤ
		beanNew.sendMessageString(CommonInfoCFConst.EOID_06, X31CWebConst.DATABEAN_SET_VALUE, eoid);

		// ●サービス呼出処理
		// マッパークラス作成
		FUSV0227_FUSV0227OPDBMapper mapper = new FUSV0227_FUSV0227OPDBMapper();
		// ユースケースIDマップ
		HashMap paramMap = new HashMap();
		// 入力データマップ
		HashMap inputMap = new HashMap();
		// 結果データマップ
		HashMap outputMap = new HashMap();
		// ユースケースIDをセット
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0227);

		// 豆缶（IMRC定義の順序に合わせる事）
		X31SDataBeanAccess[] beans_can = { getCommonInfoBean() };

		// ●上りマッピング
		// マッパを使って豆の缶詰を個別の部品へ渡す手続き
		mapper.setFUSV022701CC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
		// お客様一意照会
		mapper.setFUSV022702SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_2, this);
		// 連絡先(コンテンツ用メールアドレス)一覧照会
		mapper.setFUSV022703SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
		// オプションサービス既契約情報一覧照会
		mapper.setFUSV022704SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
		// サービス契約一覧照会（SYSID）3
		mapper.setFUSV022705SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);

		// ●サービス呼出
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (X31SRuntimeException ex)
		{
			// システムエラー
			DEBUG_LOG.debug("※※※※※ FUW00103：FUSV0227呼び出しでエラー ※※※※※");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 共有フォームBeanから値を取得
		// ＷＥＢ新規情報.申込回線サービス
		String mskmKsnSvc = beanNew.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE);
		// モバイルコース取得
		String mobileCourse = eoMobileInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE);
		// 申込区分
		String mskmKbn = beanNew.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);
		// ＷｉＭＡＸＲＯＭ取得　ANK-1467-00-00_UQWiMAX白ロム申込における画面容量制限への対応
		String redWimaxrom = beanRedirect.sendMessageString(CommonInfoCFConst.RED_WIMAXROM_17, X31CWebConst.DATABEAN_GET_VALUE);

		// SCマップ情報取得
		HashMap parentMap = (HashMap)outputMap.get(FUSV022705SC);

		// 明細取得
		ArrayList childList = (ArrayList)parentMap.get(EKK0081B519CBSMSG1LIST);

		// mineoのみフラグ(会員種別処理に引数として渡す)
		// 初期値："5"(サービス契約なし)を設定
		String mineoOnlyFlg = MINEO_ONLY_FLG_ALL_NOT_EXISTS;
		// eo電気サービス契約状態("0"(サービス契約なし)で初期化)
		String eoElectricSta = EO_ELECTRIC_STA_VALID_NOT_EXISTS;
		// その他単独フラグ
		String otherOnlyFlg = JFUStrConst.EMPTY;
		// サービス追加、回線追加可能判定(true:可・false:不可)
		boolean addSvcFlg = true;

		// mineoのみフラグの初期化
		if (childList != null && !childList.isEmpty())
		{
			// 有効なサービス契約の料金グループコードのSetを作成
			Set<String> validPrcGrpCdSet = new LinkedHashSet<String>();
			// 有効なサービス契約のサービスコードのSetを作成
			Set<String> validSvcCdSet = new LinkedHashSet<String>();
			// 有効なサービス契約ステータスのリストを作成
			ArrayList<String> listSvcStat = new ArrayList<String>();
			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				// 料金グループコード
				String prcGrpCd = (String)childMap.get(PRC_GRP_CD);
				// サービスコード
				String svcCd = (String)childMap.get(SVC_CD);
				// サービス契約ステータス
				String svcKeiStat = (String)childMap.get(SVC_KEI_STAT);

				// サービス契約ステータスにより分岐
				if (!(JFUStrConst.CD00037_910.equals(svcKeiStat)) && !(JFUStrConst.CD00037_920.equals(svcKeiStat)))
				{
					// サービス契約ステータスが"910"(解約済)、"920"(キャンセル済)以外の場合、有効な料金グループコードとして保持
					validPrcGrpCdSet.add(prcGrpCd);
					// サービス契約ステータスが"910"(解約済)、"920"(キャンセル済)以外の場合、有効なサービスコードとして保持
					validSvcCdSet.add(svcCd);
					// ネット・電話・テレビのうち、
					if (JFUStrConst.CD00130_01.equals(svcCd) || JFUStrConst.CD00130_02.equals(svcCd) || JFUStrConst.CD00130_03.equals(svcCd))
					{
						listSvcStat.add(svcKeiStat);
					}
				}
			}
			if (listSvcStat.size() > 0)
			{
				java.util.Collections.sort(listSvcStat);
				// 最大のサービス契約ステータスが受付済、締結済の場合はサービス追加不可
				if(JFUStrConst.CD00037_010.compareTo((listSvcStat.get(listSvcStat.size() - 1))) == 0)
				{
					addSvcFlg = false;
				}
				if(JFUStrConst.CD00037_030.compareTo((listSvcStat.get(listSvcStat.size() - 1))) == 0)
				{
					addSvcFlg = false;
				}
			} else {
				addSvcFlg = false;
			}

			if (validSvcCdSet.size() == 1 && validSvcCdSet.contains(JFUStrConst.CD00130_04))
			{
				// サービスコードが"04"(ホスティングサービス)のみの場合、"5"(サービス契約なし)を設定
				mineoOnlyFlg = MINEO_ONLY_FLG_ALL_NOT_EXISTS;
			}
			else
			{
				// その他の場合、"0"(追加可能サービス契約なし)を設定
				mineoOnlyFlg = MINEO_ONLY_FLG_VALID_NOT_EXISTS;
			}

			// mineoサービス契約存在判定
			if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_51))
			{
				// mineoサービス契約が存在する場合、"1"(mineoサービスのみ存在)を設定
				mineoOnlyFlg = MINEO_ONLY_FLG_MINEO_ONLY;
			}

			// mineoサービス契約以外存在判定
			if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_02) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_03)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_04) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_07)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_08) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_09)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_10) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_11)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_12) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_13))
			{
				// 下記の料金グループコードが存在する場合
				// "02"(eo光ネットホームタイプ)、"03"(eo光ネットメゾンタイプ)、"04"(eo光ネットマンションタイプ)
				// "07"(eoモバイル(Wi-Fi))、"08"(eoモバイル(EM))、"09"(eoモバイル(UQ-WiMAX))、"10"(eo光電話)
				// "11"(eo光テレビ(K-CAT))、"12"(eo光テレビ(KCN))、"13"(eo光テレビ(再送信))

				// mineoサービス契約存在状態で分岐
				if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_51))
				{
					// mineoサービス契約が存在する場合、"2"(mineoサービス、eoサービス共に存在)を設定
					mineoOnlyFlg = MINEO_ONLY_FLG_MINEO_EO;
				}
				else
				{
					// mineoサービス契約が存在しない場合、"3"(eoサービスのみ存在)を設定
					mineoOnlyFlg = MINEO_ONLY_FLG_EO_ONLY;
				}
			}

			// eo電気サービス契約のみ存在判定 電気用のコードに変更
			if (validPrcGrpCdSet.size() == 1 && validPrcGrpCdSet.contains(JFUStrConst.CD00133_17))
			{
				eoElectricSta = EO_ELECTRIC_STA_ELECTRIC_ONLY;
			}
			// eo電気サービス、ホスティング契約のみ存在判定 電気用のコードに変更
			if (validPrcGrpCdSet.size() == 2 && validPrcGrpCdSet.contains(JFUStrConst.CD00133_17)
					&& validPrcGrpCdSet.contains(JFUStrConst.CD00133_14))
			{
				eoElectricSta = EO_ELECTRIC_STA_ELECTRIC_ONLY;
			}
			// eo電気サービス契約がある場合
			if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_17))
			{
				keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.ELEC_MSKM_UM_10, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
			}

			// 電気サービス存在判定
			if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_17))
			{
				// "4"(電気サービスのみ存在)を設定
				otherOnlyFlg = MINEO_ONLY_FLG_ELEC_ONLY;
			}
			// モバイルサービス存在判定
			if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_07) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_08)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_09))
			{
				// "6"(モバイルサービスのみ存在)を設定
				otherOnlyFlg = MINEO_ONLY_FLG_MB_ONLY;
			}
			// eo光サービス存在判定
			if (validPrcGrpCdSet.contains(JFUStrConst.CD00133_02) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_03)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_04) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_10)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_11) || validPrcGrpCdSet.contains(JFUStrConst.CD00133_12)
					|| validPrcGrpCdSet.contains(JFUStrConst.CD00133_13))
			{
				otherOnlyFlg = JFUStrConst.EMPTY;
			}
		}

		DEBUG_LOG.debug("※※※※※ FUW00103：mineoのみフラグ　　　 ：" + mineoOnlyFlg + " ※※※※※");
		DEBUG_LOG.debug("※※※※※ FUW00103：eo電気サービス契約状態：" + eoElectricSta + " ※※※※※");
		DEBUG_LOG.debug("※※※※※ FUW00103：その他単独フラグ　　　：" + otherOnlyFlg + " ※※※※※");

		// ●会員種別処理
//		if (JFUStrConst.CD00039_10.equals(kiinSbt) || JFUStrConst.CD00039_20.equals(kiinSbt))
		if (addSvcFlg
				|| ((MINEO_ONLY_FLG_MINEO_ONLY.equals(mineoOnlyFlg) || EO_ELECTRIC_STA_ELECTRIC_ONLY.equals(eoElectricSta)) 
						&& (JFUStrConst.CD00039_10.equals(kiinSbt) || JFUStrConst.CD00039_20.equals(kiinSbt))))
		{
			// 会員種別特定フラグチェック
			if (!JFUStrConst.MMB_SBT_TOKUT_FLG_ZM.equals(mmbSbtTokutFlg))
			{
				// 会員種別特定フラグが「1：特定済」以外の場合、『FUW09901:共通エラー画面(契約状態の確認(0114))』に遷移する。
				outputBusLog("※※※※※ 会員種別特定フラグが「1：特定済」以外でエラー ※※※※※");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0114);
			}

			// eonetID未移行フラグチェック
			if (JFUStrConst.CD00602_1.equals(eonetidMiIkoFlg))
			{
				// eonetID未移行フラグが「1：未移行」の場合、『FUW09901:共通エラー画面(契約状態の確認(0115))』に遷移する。
				outputBusLog("※※※※※ eonetID未移行フラグが「1：未移行」でエラー ※※※※※");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0115);
			}

			// マスター会員(個人・法人)
			runMasterMember(outputMap, cfBean, mobileCourse, mskmKbn, mskmKsnSvc, redWimaxrom,
					mineoOnlyFlg, elseInfoBean, beanNew, eoElectricSta, otherOnlyFlg);
		}
		else
		{
			// 上記以外の場合、回線無しエラー画面に遷移
			cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00160);
			cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00160);
			this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00160 + NEED_0PJP);
		}

		// ●オプションサービス既契約情報一覧照会下りマッピング
		mapper.getFUSV022704SC(beans_can, outputMap);

		// SCマップ情報取得
		HashMap pMap = (HashMap)outputMap.get(FUSV022702SC);
		if (isNullForList((ArrayList)pMap.get(ECK0011A010CBSG1LIST)))
		{
			// お客様情報が取得できない場合、戸建て・マンション選択へ遷移させる
			cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00147);
			cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00147);
			this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00147 + NEED_0PJP);
		}

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// 追加
		beanNew.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_SET_VALUE, MSKM_KBN_ADD);
	}

	/**
	 * マスター会員処理です。
	 *
	 * <br>
	 * @param outputMap サービス返却マップ
	 * @param cfBean 共有フォームBean
	 * @param mobileCourse モバイルコース
	 * @param mskmKbn 申込区分
	 * @param mskmKsnSvc 申込サービス
	 * @param redWimaxrom WiMAXROM
	 * @param mineoOnlyFlg mineoフラグ
	 * @param elseInfoBean その他情報Bean
	 * @param beanNew WEB新規情報Bean
	 * @param eoElectricSta 電気契約状態
	 * @param otherOnlyFlg その他単独フラグ
	 */
	@SuppressWarnings("unchecked")
	private void runMasterMember(HashMap outputMap, X31SDataBeanAccess cfBean, String mobileCourse, String mskmKbn, String mskmKsnSvc,
			String redWimaxrom, String mineoOnlyFlg, X31SDataBeanAccess elseInfoBean, X31SDataBeanAccess beanNew,
			String eoElectricSta, String otherOnlyFlg)
	{
		// ●督促状態チェック
		if (!chkTokusoku(outputMap))
		{
			// 督促状態エラー
			outputBusLog("※※※※※ マスター会員：督促状態エラー ※※※※※");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0104);
		}

		// ●遷移先設定
		// mineo契約判断処理
		// サービス契約無し
		if (MINEO_ONLY_FLG_ALL_NOT_EXISTS.equals(mineoOnlyFlg))
		{
			// サービス契約なし
			// システムエラー
			outputBusLog("※※※※※ サービス契約なしエラー ※※※※※");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		else if (MINEO_ONLY_FLG_VALID_NOT_EXISTS.equals(mineoOnlyFlg) && EO_ELECTRIC_STA_VALID_NOT_EXISTS.equals(eoElectricSta))
		{
			// システムエラー "0113"(追加不可エラー)を設定
			outputBusLog("※※※※※ 追加不可エラー ※※※※※");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0113);
		}
		else if (!JFUStrConst.EMPTY.equals(otherOnlyFlg))
		{
			// モバイル単独または電気単独の場合
			// 共有フォームBean.新規情報.mineo単独フラグにその他単独フラグを設定
			beanNew.sendMessageString(CommonInfoCFConst.MINEO_ONLY_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, otherOnlyFlg);
		}
		else if (MINEO_ONLY_FLG_MINEO_ONLY.equals(mineoOnlyFlg))
		{
			// mineoサービスのみ存在
			if (JFUStrConst.MOBILE_COURSE_WIFI.equals(mobileCourse))
			{
				// 共有フォームBean.eoモバイル.モバイルコースが"1"(WiFi)の場合
				if (JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn))
				{
					// 共有フォームBean.ＷＥＢ新規情報.申込区分が"2"(追加)の場合
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00123);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00123);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00123 + NEED_0PJP);
				}
				else
				{
					// 共有フォームBean.ＷＥＢ新規情報.申込区分が"2"(追加)以外の場合
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00159);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00159);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00159 + NEED_0PJP);
				}
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MOBILE.equals(mskmKsnSvc))
			{
				if (JFUStrConst.WIMAXROM_WHITE.equals(redWimaxrom))
				{
					// ANK-1467-00-00_UQWiMAX白ロム申込における画面容量制限への対応
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00161);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00161);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00161 + NEED_0PJP);
				}
				else
				{
					// 白ロム遷移以外の場合
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00123);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00123);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00123 + NEED_0PJP);
				}
			}
			else
			{
				// 手続内容確認画面へ遷移
				cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00103);
				cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00103);

				// 共有フォームBean.新規情報.mineo単独フラグにmineo単独フラグを設定
				beanNew.sendMessageString(CommonInfoCFConst.MINEO_ONLY_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, MINEO_ONLY_FLG_MINEO_ONLY);
			}
		}
		else if (MINEO_ONLY_FLG_MINEO_EO.equals(mineoOnlyFlg) || MINEO_ONLY_FLG_EO_ONLY.equals(mineoOnlyFlg))
		{
			// mineoサービスが存在し、かつeoサービスも存在する。もしくは、eoサービスのみ存在
			if (JFUStrConst.MOBILE_COURSE_WIFI.equals(mobileCourse))
			{
				// 共有フォームBean.eoモバイル.モバイルコースが"1"(WiFi)の場合
				if (JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn))
				{
					// 共有フォームBean.ＷＥＢ新規情報.申込区分が"2"(追加)の場合
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00103);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00103);
				}
				else
				{
					// 共有フォームBean.ＷＥＢ新規情報.申込区分が"2"(追加)以外の場合
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00159);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00159);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00159 + NEED_0PJP);
				}
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MOBILE.equals(mskmKsnSvc))
			{
				if (JFUStrConst.WIMAXROM_WHITE.equals(redWimaxrom))
				{
					// ANK-1467-00-00_UQWiMAX白ロム申込における画面容量制限への対応
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00161);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00161);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00161 + NEED_0PJP);
				}
				else
				{
					// 白ロム遷移以外の場合
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00123);
					cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00123);
					this.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00123 + NEED_0PJP);
				}
			}
			else
			{
				// 上記以外は手続内容確認画面に遷移
				cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00103);
				cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00103);
			}
		}
	}

	/**
	 * マスター会員時の督促状態チェックを実施します。
	 *
	 * <br>
	 * @param outputMap アウトマップ
	 * @return OK:true / NG:false
	 */
	@SuppressWarnings("unchecked")
	private boolean chkTokusoku(HashMap outputMap)
	{
		// ■共有フォームBean.ＷＥＢ新規情報.ｅｏ電気申込可能督促フラグの設定
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccess webNewInfo = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		// 督促フラグ(可)
		webNewInfo.sendMessageString(CommonInfoCFConst.ELEC_MSKM_TKSK_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.ELEC_TKSK_KA);

		if (isNullForMap(outputMap))
		{
			// 督促情報が存在しない場合、チェックを実施せず、OKとする
			DEBUG_LOG.debug("DEBUG： ■督促情報無し　結果：OK");
			return true;
		}
		if (isNullForMap((HashMap)outputMap.get(FUSV022701CC)))
		{
			// 督促情報が存在しない場合、チェックを実施せず、OKとする
			DEBUG_LOG.debug("DEBUG： ■督促情報無し　結果：OK");
			return true;
		}

		// SCマップ取得
		HashMap parentMap = (HashMap)outputMap.get(FUSV022701CC);

		if (isNullForList((ArrayList)parentMap.get(JFUGETTOKUSOKUINFOCCLIST)))
		{
			// 督促情報が存在しない場合、チェックを実施せず、OKとする
			DEBUG_LOG.debug("DEBUG： ■督促情報無し　結果：OK");
			return true;
		}

		// 明細取得
		ArrayList childList = (ArrayList)parentMap.get(JFUGETTOKUSOKUINFOCCLIST);
		// 督促ステータス閾値
		int threshold = Integer.parseInt(JCCWebCommon.getApplicationConst(JFUStrConst.THRESHOLD_TOKUSOKU_STAT));

		// ｅｏ電気申込不可督促ステータス閾値
		int elecTkskValue = Integer.parseInt(JCCWebCommon.getApplicationConst(JFUStrConst.EOELEC_TOKUSOKU_STAT));
		// 電気督促最大値
		int elecTkskMaxValue = 0;

		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			String tokusokuStat = (String)childMap.get(TOKUSOKU_STAT);

			if (JFUWebCommon.isNull(tokusokuStat))
			{
				// 空の場合、次の繰り返し処理へ
				DEBUG_LOG.debug("DEBUG： ■" + String.valueOf(i + 1) + "件目データ：督促ステータスNULL　正常");
				continue;
			}

			// 数値に変換
			int intTokusokuStat = Integer.parseInt(tokusokuStat);

			if (intTokusokuStat >= threshold)
			{
				// SYSID配下の全請求先の督促スタータスに閾値以上の督促ステータスが一つでも含まれる場合

				DEBUG_LOG.debug("DEBUG： ■SYSID配下の請求先の督促スタータスに閾値以上の督促ステータス含まれるため、NG");
				return false;
			}

			if (intTokusokuStat >= elecTkskMaxValue)
			{
				elecTkskMaxValue = intTokusokuStat;
			}
		}

		if (elecTkskMaxValue >= elecTkskValue)
		{
			// 督促フラグ(不可)
			webNewInfo.sendMessageString(CommonInfoCFConst.ELEC_MSKM_TKSK_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.ELEC_TKSK_FUKA);

		}

		return true;
	}

	/**
	 * マップがNULLであるか判定します。
	 *
	 * <br>
	 * @param map マップ
	 * @return 結果
	 */
	@SuppressWarnings("unchecked")
	private boolean isNullForMap(Map map)
	{
		return map == null || map.size() == 0;
	}

	/**
	 * リストがNULLであるか判定します。
	 *
	 * <br>
	 * @param map マップ
	 * @return 結果
	 */
	@SuppressWarnings("unchecked")
	private boolean isNullForList(ArrayList list)
	{
		return list == null || list.size() == 0;
	}

	/**
	 * ビジネスログへの出力処理
	 *
	 * @param msg ログ情報
	 */
	private void outputBusLog(String msg)
	{
		JSYwebLog.println(JSYLogBase.EXECUTION, getClass(), msg, "CS0003I", null, null);
	}

// ANK-4427-43-00 ADD START
	/**
	 * NTT卸区分設定処理
	 *
	 * @param sysid SYSID
	 */
	private void setNttOrs(String sysid) throws Exception
	{
		// 共有フォームBeanを取得する。
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// SYSID(既契約)が存在する場合、NTT卸区分をサービスフォームBeanに設定する
		if (!JFUWebCommon.isNull(sysid))
		{
			// サービス検索条件格納用マップ
			HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();
			// サービス処理結果格納用マップ
			HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
					new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();

			// サービスパラメータ生成
			Map<String, String> paramMap = new HashMap<String, String>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_FUSV0023);

			// DataBean-BPマッピングクラス生成
			FUSV0023_FUSV0023OPDBMapper mapper = new FUSV0023_FUSV0023OPDBMapper();
			// 上りマッピング用パラメータ生成
			X31SDataBeanAccess[] beanArray = new X31SDataBeanAccess[] { commonInfoBean };

			// サービス契約一覧照会CC上りマッピング
			mapper.setJFUSearchSvkeiList01CC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1, sysid);

			try
			{
				// サービス契約一覧照会CC呼び出し
				invokeService(paramMap, inputMap, outputMap);
			}
			catch (JCCWebServiceException se)
			{
				// 業務共通例外クラス："0002"（システムエラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// サービスフォームBeanを取得する。
			X31SDataBeanAccess serviceBean = getServiceFormBean();
			// 下りマッピング用パラメータ生成
			X31SDataBeanAccess[] beanArray2 = new X31SDataBeanAccess[] { serviceBean, commonInfoBean };
			// 下りマッピング
			mapper.getNttOrsDiv(beanArray2, outputMap);
		}
	}
// ANK-4427-43-00 ADD END
}
