/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：サービス未提供マンション
*   ソースファイル名：FUW00136SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年09月26日
*＜機能概要＞
*  メゾンタイプエラーのビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/26   FJ）大塚    新規作成
*   v3.00.00    2012/03/30   FJ）楠山    ANK-0222-00-00(マンション資料請求時の棟への導入チェック追加(W10040)) ANK-0266-00-00(資料請求画面文言制御対応)
*   V4.00.00    2012/09/26   FJ）齋藤    ANK-0389-00-00(資料請求フォーム連携の改修)
*	v4.00.00    2012/09/27   FJ) 岩元    ANK-1220-00-00 マンション整合性チェックによる資料請求
*   v4.01.00    2012/11/26   FJ) 大塚    【IT2-2012-0001790】
*   v5.00.00    2013/05/29   FJ) 岡井    【内部障害】外部IF連携値不正対応
*   v5.01.00    2013/06/05   FJ) 岡井    【内部障害】アクション「mansion_search_request」の場合の申込区分設定対応
*   v5.02.00    2013/10/05   FJ) 岡井    【OM-2013-0002813】マンション商品券キャンペーン対応
*   v8.00.00    2014/04/13   FJ) 文元    【ANK-1997-00-00】【ＮＯ．１３８３】商品券CPの新設(カカクコム、関電CSフォーラム)対応
*   v14.00.00   2015/05/01   FJ) 張本    【ANK-2439-02-00】メール導線からの紹介CP対応
*   v34.00      2017/12/11   FJ) 張本    【ANK-3210-18-00】価格コム（電気）対応
*   
**********************************************************************/
package eo.web.webview.FUW00136SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import 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.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0273_FUSV0273OPDBMapper;

/**
 * サービス未提供マンションのビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00136SFLogic extends JCCWebBusinessLogic
{
	/** サービスID：FUSV0273 */
	private static final String USECASE_ID_FUSV0273 = "FUSV0273";

	/** FUSV027301CC */
	private static final String FUSV027301CC = "FUSV027301CC";
	/** データ抽出項目リスト */
	private static final String DCHSKM_LIST = "dchskm_list";
	/** 割引サービスリスト */
	private static final String WRIB_SVC_LIST = "wrib_svc_list";

	/** 画面遷移モード：0 (通常遷移) */
	private static final String SCREEN_MODE_0 = "0";

	/** 表示制御フラグ：0 (非表示) */
	private static final boolean DSP_FLG_0 = false;
	/** 表示制御フラグ：1 (表示) */
	private static final boolean DSP_FLG_1 = true;

	/** 光テレビ提供状況コード：0(サービス未提供) */
	private static final String HIKARI_TV_TK_JOKYO_CD_0 = "0";

	/** 資料請求フラグ：1(資料請求) */
	private static final String SIRYO_SEIKY_FLG_1 = "1";

	/** 加入契約申込条件コード：10(資料請求) */
	private static final String KNYKEI_MSKM_JOKEN_CD_10 = "10";
	/** 加入契約申込条件コード：11(Web可(単独)) */
	private static final String KNYKEI_MSKM_JOKEN_CD_11 = "11";
	/** 加入契約申込条件コード：12(Web可(併設)) */
	private static final String KNYKEI_MSKM_JOKEN_CD_12 = "12";
	/** 加入契約申込条件コード：13(全戸一括) */
	private static final String KNYKEI_MSKM_JOKEN_CD_13 = "13";
	/** 加入契約申込条件コード：14(導入予定) */
	private static final String KNYKEI_MSKM_JOKEN_CD_14 = "14";

	/** 支払方式コード 003：全戸一括 */
	private static final String PAYWAY_CD_003 = "003";
	/** 支払方式コード 004：居住者一括 */
	private static final String PAYWAY_CD_004 = "004";

	/** WEB割割引コード取得用ID：マンション */
	private static final String WEB_WARI_CMP_MANS = "WEB_WARI_CMP_MANS";
	/** プロパティファイル取得文字列 一般WEB既定値 */
	private static final String TRAT_USUAL = "trat_usual";
	/** プロパティファイル取得文字列 価格コム（電気） */
	private static final String TRAT_KAKAKUCOM_ELEC = "trat_kakakucom_elec";
	
	/** 増速フラグ：1 */
	private static final String ZOSOKU_FLG = "1";

	/** 表示用データ抽出項目コード */
	private static final String OUT_DSP_DCHSKM_CD = "dsp_dchskm_cd";
	
	/**
	 * 初期表示処理
	 * 
	 * @return 処理結果
	 * @throws Exception 
	 */
	public boolean init() throws Exception
	{

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = super.getServiceFormBean();

		// WEB新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// マンション情報取得
		X31SDataBeanAccess mansionInfoBean = webNewBean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO).getDataBean(0);

		// 加入契約申込条件コード取得 後に定数化
		String knykeiMskmJokenCd = mansionInfoBean.sendMessageString(CommonInfoCFConst.KNYKEI_MSKM_JOKEN_CD_16, X31CWebConst.DATABEAN_GET_VALUE);

		// 特殊配線マンションフラグ
		String tkshHaisenMansionFlg = mansionInfoBean.sendMessageString(CommonInfoCFConst.TKSH_HAISEN_16, X31CWebConst.DATABEAN_GET_VALUE);

		// １Ｇ申込可能フラグ
		String mobile1g = mansionInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_1G_16, X31CWebConst.DATABEAN_GET_VALUE);

		// ２００メガ申込可能フラグ
		String mobile200m = mansionInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_200M_16, X31CWebConst.DATABEAN_GET_VALUE);

		// １００メガ申込可能フラグ
		String mobile100m = mansionInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_100M_16, X31CWebConst.DATABEAN_GET_VALUE);

		// 光電話申込可能フラグ
		String tel = mansionInfoBean.sendMessageString(CommonInfoCFConst.TEL_16, X31CWebConst.DATABEAN_GET_VALUE);

		// 光テレビ提供状況コード 後に定数化
		String hikariTvTkJokyoCd = mansionInfoBean.sendMessageString(CommonInfoCFConst.HIKARI_TV_TK_JOKYO_CD_16, X31CWebConst.DATABEAN_GET_VALUE);

		// ANK-1220-00-00 h.iwamoto 2012/09/27 START
		// 資料請求フラグ
		String siryoSeikyFlg = mansionInfoBean.sendMessageString(CommonInfoCFConst.SIRYO_SEIKY_FLG_16, X31CWebConst.DATABEAN_GET_VALUE);
		// ANK-1220-00-00 h.iwamoto 2012/09/27 END

		// 画面表示制御を行う
		// 共有フォームBean.マンション情報.資料請求フラグが"1"(資料請求)の場合
		// または、共有フォームBean.マンション情報.加入契約申込条件コードが"13"(全戸一括) かつ 
		// 共有フォームBean.マンション情報.特殊配線マンションフラグが"1"(特殊配線のマンション)の場合
		if (SIRYO_SEIKY_FLG_1.equals(siryoSeikyFlg) // ANK-1220-00-00 2012/09/27 h.iwamoto
				|| (KNYKEI_MSKM_JOKEN_CD_13.equals(knykeiMskmJokenCd) && JFUStrConst.TKSH_HAISEN_TEIKAKAKU.equals(tkshHaisenMansionFlg)))
		{
			// WEB申込不可系　を　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.WEB_FALSE_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

			//資料請求系　は　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SIRYO_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

			//開始予定系　は　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_YOTEI_FSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

			//可能サービス系　は　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_CNT_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);
		}
		// 共有フォームBean.マンション情報.加入契約申込条件コードが"14"(導入予定)の場合
		else if (KNYKEI_MSKM_JOKEN_CD_14.equals(knykeiMskmJokenCd))
		{

			// WEB申込不可系　を　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.WEB_FALSE_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

			//資料請求系　は　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SIRYO_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

			//開始予定系　は　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_YOTEI_FSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

			//可能サービス系　は　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_CNT_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);
		}
		// 共有フォームBean.マンション情報.加入契約申込条件コードが"10"(資料請求)の場合
		else if (KNYKEI_MSKM_JOKEN_CD_10.equals(knykeiMskmJokenCd))
		{

			// WEB申込不可系　を　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.WEB_FALSE_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

			//資料請求系　は　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SIRYO_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

			//開始予定系　は　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_YOTEI_FSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

			//可能サービス系　は　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_CNT_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

		}
		// 共有フォームBean.マンション情報.加入契約申込条件コードが"11"(Web可(単独)) または 
		// 共有フォームBean.マンション情報.加入契約申込条件コードが"12"(Web可(併設)) または 
		// 共有フォームBean.マンション情報.加入契約申込条件コードが"13"(全戸一括) 
		else if (KNYKEI_MSKM_JOKEN_CD_11.equals(knykeiMskmJokenCd) || KNYKEI_MSKM_JOKEN_CD_12.equals(knykeiMskmJokenCd)
				|| KNYKEI_MSKM_JOKEN_CD_13.equals(knykeiMskmJokenCd))
		{
			// WEB申込不可系　を　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.WEB_FALSE_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

			//資料請求系　は　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SIRYO_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

			//開始予定系　は　非表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_YOTEI_FSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);

			//可能サービス系　は　表示
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.SVC_CNT_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);

		}

		// eo光ネット表示制御フラグ
		// 共有フォームBean.マンション情報.１Ｇ申込可能フラグが"0"(申込可能) または	
		// 共有フォームBean.マンション情報.２００メガ申込可能フラグが"0"(申込可能) または
		// 共有フォームBean.マンション情報.１００メガ申込可能フラグが"0"(申込可能) の場合
		if (JFUStrConst.MOBILE_1G_MSKM_PSB.equals(mobile1g) || JFUStrConst.MOBILE_100M_MSKM_PSB.equals(mobile100m)
				|| JFUStrConst.MOBILE_200M_MSKM_PSB.equals(mobile200m))
		{
			// 注記文言2光ネット表示制御フラグ
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.KANOU_NET_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);
		}
		else
		{
			// 注記文言2光ネット表示制御フラグ
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.KANOU_NET_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);
		}

		// eo光電話表示制御フラグ
		// 共有フォームBean.マンション情報.光電話申込フラグが"0"(申込可)の場合
		if (JFUStrConst.TEL_MSKM_PSB_FLG_MSKM_PSB.equals(tel))
		{
			// 注記文言2光電話表示制御フラグ
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.KANOU_TEL_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);
		}
		else
		{
			// 注記文言2光電話表示制御フラグ
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.KANOU_TEL_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);
		}

		// eo光テレビ表示制御フラグ
		// 共有フォームBean.マンション情報.光テレビ提供状況コードが"0"(サービス未提供)以外の場合
		if (!HIKARI_TV_TK_JOKYO_CD_0.equals(hikariTvTkJokyoCd) && !JFUWebCommon.isNull(hikariTvTkJokyoCd))
		{
			// 注記文言2光テレビ表示制御フラグ
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.KANOU_TV_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_1);
		}
		else
		{
			// 注記文言2光テレビ表示制御フラグ
			serviceInfoBean.sendMessageBoolean(FUW00136SFConst.KANOU_TV_FLG, X31CWebConst.DATABEAN_SET_VALUE, DSP_FLG_0);
		}

		// 資料請求用処理
		this.setOutlinkParameter();

		// 申込受付実績登録部品実行
		JFUWebCommon.executeWebMskmUkJskAdd(this);

		return true;
	}

	/**
	 * お申し込み手続きへボタン押下時
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean mskmttdki() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// WEB新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// 申込区分
		webNewBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MSKM_KBN_NEW);

		// マンション情報取得
		X31SDataBeanAccess mansionInfoBean = webNewBean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO).getDataBean(0);

		// 加入契約申込条件コード取得 後に定数化
		String knykeiMskmJokenCd = mansionInfoBean.sendMessageString(CommonInfoCFConst.KNYKEI_MSKM_JOKEN_CD_16, X31CWebConst.DATABEAN_GET_VALUE);

		// 低価格マンションフラグ取得
		String teikakakuMansionFlg = mansionInfoBean.sendMessageString(CommonInfoCFConst.TEIKAKAKU_MANSION_16, X31CWebConst.DATABEAN_GET_VALUE);

		// 共有フォームBeanへ設定
		webNewBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, SCREEN_MODE_0);

		// ------次画面IDの設定-------
		// 遷移先の判定を行う
		// 共有フォームBean.マンション情報.加入契約申込条件コードが"13"(全戸一括)の場合
		if (KNYKEI_MSKM_JOKEN_CD_13.equals(knykeiMskmJokenCd))
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00135)
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00135);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：全戸一括マンション注記)
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00135);
		}
		// 共有フォームBean.マンション情報.低価格マンションフラグが"1"(低価格マンション)の場合
		else if (JFUStrConst.TEIKAKAKU_MANSION_TEIKAKAKU.equals(teikakakuMansionFlg))
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00140)
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00140);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：低価格マンション注記)
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00140);
		}
		else
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00105)
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00105);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：サービス選択)
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00105);
		}

		return true;
	}

	/**
	 * 戻るボタン押下時
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// WEB新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// 共有フォームBeanへ設定
		webNewBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, SCREEN_MODE_0);

		// ------次画面IDの設定-------
		// 申込区分が"2"(追加申込)の場合、且つ
		// 回線場所選択が"1"(契約中の回線に追加)の場合
		if (JFUStrConst.MSKM_KBN_ADD.equals(webNewBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(webNewBean.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18,
						X31CWebConst.DATABEAN_GET_VALUE))) // IT2-2012-1790 2012/11/26 Otsuka
		{

			// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00129)
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00129);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：eo光eoモバイル契約一覧)
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00129);

		}
		else
		{

			// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00134)
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00134);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：マンション検索4(検索結果))
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00134);

		}

		return true;
	}

	/**
	 * 外部リンク用パラメータ設定（マンション資料請求）
	 * 
	 * <br>
	 * @throws Exception 
	 */
	private void setOutlinkParameter() throws Exception
	{
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ●WEB新規情報を取得
		X31SDataBeanAccess webNewInfoBean = getWebNewInfo(commonInfoBean);

		// ●リダイレクト情報を取得
		X31SDataBeanAccess redirectInfoBean = getRedirectInfo(webNewInfoBean);

		// ●マンション情報を取得
		X31SDataBeanAccess mansionInfoBean = getMansionInfo(webNewInfoBean);

		// ●その他情報
		X31SDataBeanAccess elseInfoBean = getelseInfo(webNewInfoBean);

		// 表示用キャンペーンコードを取得
		String dspCampaignCd = redirectInfoBean.sendMessageString(CommonInfoCFConst.DSP_CAMPAIGN_CD_17, X31CWebConst.DATABEAN_GET_VALUE);
		// Service3連携用 WEB割キャンペーンコードを取得
		String webWribCmpCd = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00136, WEB_WARI_CMP_MANS);
		// 取扱コード(一般WEB既定値)
		String tratUsual = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00144, TRAT_USUAL);
		// 取扱コード(価格コム(電気))
		String tratKakakucomElec = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00144, TRAT_KAKAKUCOM_ELEC);

		// 加入契約申込条件コード
		String knykeiMskmJokenCd = mansionInfoBean.sendMessageString(CommonInfoCFConst.KNYKEI_MSKM_JOKEN_CD_16, X31CWebConst.DATABEAN_GET_VALUE);
		// 支払方式コード
		String paywayCd = mansionInfoBean.sendMessageString(CommonInfoCFConst.PAYWAY_CD_16, X31CWebConst.DATABEAN_GET_VALUE);

		// キャンペーンコードをサービスフォームBeanに設定
		serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_CAMPAIGN_CD, X31CWebConst.DATABEAN_SET_VALUE, dspCampaignCd);

		// 割引キャンペーンコード４ マンションキャンペーンコード(NET)を設定
		// No356 Otsuka 2013/02/26 start
		String campaignCd4 = JFUStrConst.EMPTY;
//		int cmpCnt = (Integer)mansionInfoBean.sendMessage(CommonInfoCFConst.NET_MANS_CAMPAIGN_CD_16, X31CWebConst.DATABEAN_GET_COUNT);
//
//		if (cmpCnt > 0)
//		{
//			campaignCd4 = mansionInfoBean.sendMessageString(CommonInfoCFConst.NET_MANS_CAMPAIGN_CD_16, X31CWebConst.DATABEAN_GET_VALUE, 0);
//		}

//		// マンションキャンペーンコード(NET)が設定されていない場合
//		if (null == campaignCd4 || "".equals(campaignCd4))
//		{
//			// 割引キャンペーンコード４に、マンションキャンペーンコード(TV)を設定
//			int tvCmpCnt = (Integer)mansionInfoBean.sendMessage(CommonInfoCFConst.TV_MANS_CAMPAIGN_CD_16, X31CWebConst.DATABEAN_GET_COUNT);
//			if (tvCmpCnt > 0)
//			{
//				campaignCd4 = mansionInfoBean.sendMessageString(CommonInfoCFConst.TV_MANS_CAMPAIGN_CD_16, X31CWebConst.DATABEAN_GET_VALUE, 0);
//			}
//		}
		// No356 Otsuka 2013/02/26 end

		// 取扱コード
		String tratCd = elseInfoBean.sendMessageString(CommonInfoCFConst.TORITEN_TORIATSUKAI_CD_18, X31CWebConst.DATABEAN_GET_VALUE);

		// 全戸一括でない時
		if(!JFUStrConst.KNYKEI_MSKM_JOKEN_IKT.equals(knykeiMskmJokenCd) && !PAYWAY_CD_003.equals(paywayCd) && !PAYWAY_CD_004.equals(paywayCd))
		{
			// 取扱コードによるキャンペーンの表示用データ抽出項目コード取得
			// 存在しない場合はJFUStrConst.EMPTYを返却
			campaignCd4 =  getDchskmCd(tratCd);
		}
		
		// WEB割キャンペーン(最優先キャンペーン) OM-2013-0002813
		// 取扱コードによるキャンペーンの表示用データ抽出項目コードが存在しない場合、対象
		if (campaignCd4.replace(JFUStrConst.HALF_SPACE, JFUStrConst.EMPTY).length() == 0)
		{
			// 取扱コードが設定されている、かつ、一般WEB既定値、価格コム(電気)でない場合
			if(!JFUWebCommon.isNull(tratCd) && !tratUsual.equals(tratCd) && !tratKakakucomElec.equals(tratCd))
			{
				// 割引キャンペーンコード４を空にする
				serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_WRIB_CAMPAIGN_CD4, X31CWebConst.DATABEAN_SET_VALUE, "");
			}
			else
			{
				if(!JFUStrConst.KNYKEI_MSKM_JOKEN_IKT.equals(knykeiMskmJokenCd) && !PAYWAY_CD_003.equals(paywayCd) && !PAYWAY_CD_004.equals(paywayCd)
						&& !JFUWebCommon.isNull(webWribCmpCd) && chkWebWrib(webWribCmpCd))
				{
					// WEB割の割引サービスコードが設定されている、その割引が適用可能である場合
					campaignCd4 = webWribCmpCd;
				}
			}
		}

		// 割引キャンペーンコード４をサービスフォームBeanに設定
		serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_WRIB_CAMPAIGN_CD4, X31CWebConst.DATABEAN_SET_VALUE, campaignCd4);

		// 紹介者コード
		String introduceCd = redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_INTRODUCE_17, X31CWebConst.DATABEAN_GET_VALUE);
		if (null == introduceCd)
		{
			serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_INTRODUCE_CD, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		else
		{
			serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_INTRODUCE_CD, X31CWebConst.DATABEAN_SET_VALUE, introduceCd);
		}

		if (null == tratCd)
		{
			serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_TRAT_CD, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		else
		{
			serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_TRAT_CD, X31CWebConst.DATABEAN_SET_VALUE, tratCd);
		}

		// 取扱コードが設定されている、かつ、一般WEB既定値でない場合に割引キャンペーンコード４を空にする編集は、
		// ANK-1997-00-00の対応により削除

		// 増速フラグ
		serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_ZOUSOKU_FLG, X31CWebConst.DATABEAN_SET_VALUE, ZOSOKU_FLG);

		// サービス契約番号
		serviceInfoBean.sendMessageString(FUW00136SFConst.OUTLINK1_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, getSvcKeiNo(commonInfoBean));
	}

	/**
	 * 契約サービスのサービス契約番号を取得します。<br>
	 * 
	 * ※優先順位：ネット、TV、電話、モバイル(Wi-Fi,EM,WiMAX)<br>
	 * ※回線場所関係なく全てのサービス契約が対象<br>
	 * 
	 * @param commonInfoBean 共有フォームBean
	 * @return サービス契約番号
	 */
	private String getSvcKeiNo(X31SDataBeanAccess commonInfoBean)
	{
		// 返却値
		String resSvcKeiNo = JFUStrConst.EMPTY;

		// WEB新規情報
		X31SDataBeanAccess webNewInfoBean = getWebNewInfo(commonInfoBean);
		// 申込区分
		String mskmKbn = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);

		// 新規申込の場合は空文字を返却
		if(JFUStrConst.MSKM_KBN_NEW.equals(mskmKbn))
		{
			return JFUStrConst.EMPTY;
		}

		// ネットリスト
		List<String> netList = Arrays.asList(JFUStrConst.CD00133_02, JFUStrConst.CD00133_03, JFUStrConst.CD00133_04);
		// TVリスト
		List<String> tvList = Arrays.asList(JFUStrConst.CD00133_11, JFUStrConst.CD00133_12, JFUStrConst.CD00133_13);
		// 電話リスト
		List<String> telList = Arrays.asList(JFUStrConst.CD00133_10);
		// モバイルリスト
		List<String> mbList = Arrays.asList(JFUStrConst.CD00133_07, JFUStrConst.CD00133_08, JFUStrConst.CD00133_09);

		// 共有フォームBeanから既契約情報取得
		X31SDataBeanAccessArray kkeiSvcInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KKEI_SVC_INFO);

		// ネット、TV、電話
		for (int k = 0; k < 3; k++)
		{
			for (int i = 0; i < kkeiSvcInfoArray.getCount(); i++)
			{
				X31SDataBeanAccess kkeiSvcInfoBean = kkeiSvcInfoArray.getDataBean(i);

				String kkeiSvcKeiNo = kkeiSvcInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_54, X31CWebConst.DATABEAN_GET_VALUE);
				String kkeiPrcGrpCd = kkeiSvcInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_54, X31CWebConst.DATABEAN_GET_VALUE);

				// ネット
				if(k == 0 && netList.contains(kkeiPrcGrpCd))
				{
					resSvcKeiNo = kkeiSvcKeiNo;
					break;
				}
				// TV
				if(k == 1 && tvList.contains(kkeiPrcGrpCd))
				{
					resSvcKeiNo = kkeiSvcKeiNo;
					break;
				}
				// 電話
				if(k == 2 && telList.contains(kkeiPrcGrpCd))
				{
					resSvcKeiNo = kkeiSvcKeiNo;
					break;
				}
			}

			// 結果があれば、ループを終了
			if(!JFUWebCommon.isNull(resSvcKeiNo))
			{
				break;
			}
		}

		// 上記で対象が無い場合、モバイル
		if(JFUWebCommon.isNull(resSvcKeiNo))
		{
			for (int k = 0; k < mbList.size(); k++)
			{
				String mbPrcGrpCd = mbList.get(k);

				for (int i = 0; i < kkeiSvcInfoArray.getCount(); i++)
				{
					X31SDataBeanAccess kkeiSvcInfoBean = kkeiSvcInfoArray.getDataBean(i);

					String kkeiSvcKeiNo = kkeiSvcInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_54, X31CWebConst.DATABEAN_GET_VALUE);
					String kkeiPrcGrpCd = kkeiSvcInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_54, X31CWebConst.DATABEAN_GET_VALUE);

					if(mbPrcGrpCd.equals(kkeiPrcGrpCd))
					{
						resSvcKeiNo = kkeiSvcKeiNo;
						break;
					}
				}

				// 結果があれば、ループを終了
				if(!JFUWebCommon.isNull(resSvcKeiNo))
				{
					break;
				}
			}
		}

		return resSvcKeiNo;
	}

	/**
	 * 割引サービスのチェック処理です。
	 * 
	 * <br>
	 * @param wribCmpCd 割引サービスコード
	 * @return 結果(TRUE:OK / FALSE:NG)
	 * @throws Exception 例外
	 */
	boolean chkWebWrib(String wribCmpCd) throws Exception
	{
		boolean result = true;

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0273);

		FUSV0273_FUSV0273OPDBMapper mapper = new FUSV0273_FUSV0273OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		mapper.setFUSV027301CC(null, dataMap, wribCmpCd, null);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ●サービスの呼び出しを行う。
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			DEBUG_LOG.debug("【FUSV0273】サービス呼び出しエラー");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●データ抽出項目チェック
		boolean resDchskm = chkDchskm(outputMap);

		// ●割引サービスチェック
		boolean resWribSvc = chkWribSvc(outputMap);

		// どちらかで適用可能と判断された場合、設定された割引キャンペーンは適用可能とする
		result = resDchskm || resWribSvc;

		return result;
	}

	/**
	 * データ抽出項目適用可能チェック処理です。
	 * 
	 * <br>
	 * @param HashMap outPutMap
	 * @return データ抽出項目適用可能チェック結果
	 */
	@SuppressWarnings("unchecked")
	boolean chkDchskm(HashMap outPutMap)
	{
		boolean result = true;

		HashMap parentMap = (HashMap)outPutMap.get(FUSV027301CC);
		if(parentMap == null || parentMap.size() == 0)
		{
			return false;
		}
		ArrayList dchskmList = null;
		if(parentMap.containsKey(DCHSKM_LIST))
		{
			dchskmList = (ArrayList)parentMap.get(DCHSKM_LIST);
			if(dchskmList == null || dchskmList.size() == 0)
			{
				result = false;
			}
		}

		return result;
	}

	/**
	 * 割引サービス適用可能チェック処理です。
	 * 
	 * <br>
	 * @param HashMap outPutMap
	 * @return 割引サービス適用可能チェック結果
	 */
	@SuppressWarnings("unchecked")
	boolean chkWribSvc(HashMap outPutMap)
	{
		boolean result = true;

		HashMap parentMap = (HashMap)outPutMap.get(FUSV027301CC);
		if(parentMap == null || parentMap.size() == 0)
		{
			return false;
		}
		ArrayList wribSvcList = null;
		if(parentMap.containsKey(WRIB_SVC_LIST))
		{
			wribSvcList = (ArrayList)parentMap.get(WRIB_SVC_LIST);
			if(wribSvcList == null || wribSvcList.size() == 0)
			{
				result = false;
			}
		}

		return result;
	}
	
	/**
	 * 取扱店用取扱コードに紐づく表示用データ抽出項目コードを取得します。
	 * 
	 * <br>
	 * @param tratCd 取扱コード
	 * @return 表示用データ抽出項目コード
	 * @throws Exception 例外
	 */
	String getDchskmCd(String tratCd) throws Exception
	{
		String retCd = JFUStrConst.EMPTY;

		// 取扱コードがnullまたは未設定の場合、処理しない
		if (JFUWebCommon.isNull(tratCd) || tratCd.length() == 0)
		{
			return retCd;
		}
		
		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0273);

		FUSV0273_FUSV0273OPDBMapper mapper = new FUSV0273_FUSV0273OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		mapper.setFUSV027301CC(null, dataMap, null, tratCd);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ●サービスの呼び出しを行う。
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			DEBUG_LOG.debug("【FUSV0273】サービス呼び出しエラー");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●表示用データ抽出項目取得処理
		retCd = getDspDchskmCd(outputMap);

		return retCd;
	}
	
	/**
	 *表示用データ抽出項目取得処理です。
	 * 
	 * <br>
	 * @param HashMap outPutMap
	 * @return 表示用データ抽出項目コード
	 */
	@SuppressWarnings("unchecked")
	String getDspDchskmCd(HashMap outPutMap)
	{
		String retCd = JFUStrConst.EMPTY;

		HashMap parentMap = (HashMap)outPutMap.get(FUSV027301CC);
		if (parentMap == null || parentMap.size() == 0)
		{
			return retCd;
		}
		if (parentMap.containsKey(OUT_DSP_DCHSKM_CD))
		{
			if (!JFUWebCommon.isNull(parentMap.get(OUT_DSP_DCHSKM_CD)))
			{
				retCd = parentMap.get(OUT_DSP_DCHSKM_CD).toString();
			}
		}

		return retCd;
	}

	/**
	 * WEB新規情報
	 * @param commonInfoBean
	 * @return webNewInfoBean
	 */
	private X31SDataBeanAccess getWebNewInfo(X31SDataBeanAccess commonInfoBean)
	{
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess webNewInfoBean = array.getDataBean(0);

		return webNewInfoBean;
	}

	/**
	 * リダイレクト情報
	 * @param webNewInfoBean
	 * @return redirectInfoBean
	 */
	private X31SDataBeanAccess getRedirectInfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess redirectInfoBean = array.getDataBean(0);
		return redirectInfoBean;
	}

	/**
	 * マンション情報
	 * @param webNewInfoBean
	 * @return redirectInfoBean
	 */
	private X31SDataBeanAccess getMansionInfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess mansionInfoBean = array.getDataBean(0);
		return mansionInfoBean;
	}

	/**
	 * その他情報
	 * @param webNewInfoBean
	 * @return elseInfoBean
	 */
	private X31SDataBeanAccess getelseInfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess elseInfoBean = array.getDataBean(0);

		return elseInfoBean;
	}
}
