/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：エリアリクエスト入力
*   ソースファイル名：FUW00305SFLogic.java
*   作成者          ：富士通
*   日付            ：2019年2月28日
*＜機能概要＞
*   エリアリクエスト入力の画面制御を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v40.00      2019/2/28    FJ) 大島    【ANK-3603-00-00】店頭販売支援サイトのエリアリクエスト機能追加
*
**********************************************************************/

package eo.web.webview.FUW00305SF;

import java.util.ArrayList;
import java.util.HashMap;

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.X31CHashMap;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0193_FUSV0193OPDBMapper;
import eo.web.webview.mapping.FUSV0194_FUSV0194OPDBMapper;

/**
 * エリアリクエスト入力画面のVIEWロジックです。
 * <br>
 * @author 富士通
 */
@SuppressWarnings( { "serial", "unchecked" })
public class FUW00305SFLogic extends JCCWebBusinessLogic
{
	private static final String CLEAR_VALUE = "";

	/** サービスID（初期表示） */
	private static final String ID_FUSV0193 = "FUSV0193";

	/** サービスID（エリアリクエスト入力チェック） */
	private static final String ID_FUSV0194 = "FUSV0194";

	/** 100M申込可能フラグ */
	private static final String M100MSKM_FLG = "m100mskm_flg";
//	/** 100M申込可能フラグ コード値：2*/
//	private static final String M100MSKM_FLG_VALUE_2 = "2";

	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

//	/** 全角スペース */
//	private static final String ZENKAKU_SPACE = "　";

	/** インターフェイス(from PASCO)項目名:x(VI)座標 */
	private static final String POST_ID_X = "X6";

	/** インターフェイス(from PASCO)項目名:x(VI)座標 */
	private static final String POST_ID_Y = "Y6";

	/** インターフェイス(from PASCO)項目名:経度 */
	private static final String POST_ID_LGTD = "Longitude";

	/** インターフェイス(from PASCO)項目名:緯度 */
	private static final String POST_ID_LTTD = "Latitude";

	/** インターフェイス(from PASCO)項目名:住所コード */
	private static final String POST_ID_Z = "z";

	/** インターフェイス(from PASCO)項目名:住所 */
	private static final String POST_ID_ADRS = "adrs";

	/** インターフェイス(from PASCO)項目名:100M申込可能フラグ */
	private static final String POST_ID_FLAG_HF = "FLAG_HF";

	/** 100M申込可能フラグ 0:エリアリクエスト対象外 */
	private static final String PASCO_100M_AREA_OK = "0";

	/** 100M申込可能フラグ 1:エリアリクエスト可*/
	private static final String PASCO_100M_AREAREQ_OK = "1";

	/** 100M申込可能フラグ 2:エリアリクエスト不可*/
	private static final String PASCO_100M_AREAREQ_NG = "2";
	
	/**フロントログイン制御コード 1:店舗(量販店) */
	private static final String FRNT_LOGIN_CTRL_CD_SHOP_RYOHAN = "1";
	
	/**フロントログイン制御コード 3:個人(量販店) */
	private static final String FRNT_LOGIN_CTRL_CD_PERSONAL_RYOHAN = "3";

	/**
	 * 初期表示処理
	 *
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 業務規制情報を取得する
		this.setWorkKiseiList();

		X31SDataBeanAccess serviceInfoBean = getServiceFormBean(); //サービスフォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean(); // 共有フォームBean

		/////////// デバッグ用処理
		X31SDataBeanAccessArray web_new_info = commonInfoBean.getDataBeanArray("ＷＥＢ新規情報");
		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		// 2013/03/13 Fujiwara Add Start
		String keiSbt = web_new_infobean.sendMessageString(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_GET_VALUE);
		// 2013/03/13 Fujiwara Add End

		X31SDataBeanAccessArray contract_info = web_new_infobean.getDataBeanArray(CommonInfoCFConst.KEIYAKUSHA_INFO); // 契約者情報
		if (contract_info.getCount() == 0)
		{
			contract_info.addDataBean();
		}

		// --- 入力確認から戻ってきた際に利用する。 ---
		// ご利用場所の形態
		String usePlace_type = serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGPATTERN_SELECT, X31CWebConst.DATABEAN_GET_VALUE);

		// 利用場所情報.住まいの階数
		String usePlace_floor = serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR_SELECT, X31CWebConst.DATABEAN_GET_VALUE);

		// POSTされてきたパラメータを取得する
		// 20121223 fujiwara mod start
		// 遷移元画面IDの取得
		String beforeScreenId = JCCWebCommon.getScreenId(this);

		X31CHashMap posted_requests = null;

		// 遷移元画面がエリアリクエスト取消画面の場合、セッション情報を取得
		if (JFUScreenConst.SCREEN_ID_FUW00401.equals(beforeScreenId))
		{
			posted_requests = (X31CHashMap)JFUWebCommon.getScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW00305);
		}
		else
		{
			posted_requests = this.getRequestParams();
		}

		// セッション情報を格納
		JFUWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW00305, posted_requests);

		String m100mskm_flg = (String)posted_requests.get(POST_ID_FLAG_HF); // 100M申込可能フラグ

		String x = (String)posted_requests.get(POST_ID_X); // X座標

		String y = (String)posted_requests.get(POST_ID_Y); // Y座標

		String longitude = (String)posted_requests.get(POST_ID_LGTD); // 経度

		String latitude = (String)posted_requests.get(POST_ID_LTTD); // 緯度

		String ad_cd = (String)posted_requests.get(POST_ID_Z); // 住所コード

		String address = (String)posted_requests.get(POST_ID_ADRS); // 住所

		if (PASCO_100M_AREA_OK.equals(m100mskm_flg))
		{
			// 提供可能エリアの為、エリアリクエスト対象外。100M申込可能フラグが申込可能な場合、システムエラーにする。

			outputPascoParam(m100mskm_flg, x, y, longitude, latitude, ad_cd, address);

			outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
			outputBusLog("WARN： ●FUW00305_エリアリクエスト入力 リクエスト情報のパラメータ「100M申込可能フラグ：FLAG_HF」が「申込可能：0」となっている為、エラー（0150）画面に遷移。");
			outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");

			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0150);
		}

		if (!JFUScreenConst.SCREEN_ID_FUW00401.equals(beforeScreenId))
		{
			// エリア検索（pasco）からの遷移時のパラメータチェック

			boolean isExistsM100mskmFlg = JFUWebCommon.isNull(m100mskm_flg); // 100M申込可能フラグ
			boolean isExistsAdCd = JFUWebCommon.isNull(ad_cd); // 住所コード
			boolean isExistsAddress = JFUWebCommon.isNull(address); // 住所
			boolean isExistsX = JFUWebCommon.isNull(x); // X座標
			boolean isExistsY = JFUWebCommon.isNull(y); // Y座標
			boolean isExistsLongitude = JFUWebCommon.isNull(longitude); // 経度
			boolean isExistsLatitude = JFUWebCommon.isNull(latitude); // 緯度

			// 100M申込可能フラグ
			if (PASCO_100M_AREAREQ_OK.equals(m100mskm_flg))
			{
				// 1:エリアリクエスト可

				if (isExistsAdCd || isExistsX || isExistsY || isExistsLongitude || isExistsLatitude)
				{
					// 住所コード、X座標、Y座標、経度、緯度が未設定の場合

					outputPascoParam(m100mskm_flg, x, y, longitude, latitude, ad_cd, address);

					outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
					outputBusLog("WARN： ●FUW00305_エリアリクエスト入力 リクエスト情報「X座標、Y座標、経度、緯度、住所コード」のいずれかが存在しない為、エラー（0002）画面に遷移。");
					outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}
			}
			else
			{
				// 2:エリアリクエスト不可、又はそれ以外

				if (isExistsAddress || isExistsAdCd || isExistsX || isExistsY || isExistsLongitude || isExistsLatitude)
				{
					// 住所、住所コード、X座標、Y座標、経度、緯度が未設定の場合

					outputPascoParam(m100mskm_flg, x, y, longitude, latitude, ad_cd, address);

					outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
					outputBusLog("WARN： ●FUW00305_エリアリクエスト入力 リクエスト情報「X座標、Y座標、経度、緯度、住所コード、住所」のいずれかが存在しない為、エラー（0002）画面に遷移。");
					outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}
				else if (isExistsM100mskmFlg)
				{
					// 100M申込可能フラグが未設定の場合

					outputPascoParam(m100mskm_flg, x, y, longitude, latitude, ad_cd, address);
				}
				else
				{
					// それ以外は何もしない。
				}
			}
		}

		// 100M申込可能フラグが1でも2でもない場合、値を2に変更する。
		if (!PASCO_100M_AREAREQ_OK.equals(m100mskm_flg) && !PASCO_100M_AREAREQ_NG.equals(m100mskm_flg))
		{
			m100mskm_flg = PASCO_100M_AREAREQ_NG;
		}

		// 基準日（システム日付）をセット
		serviceInfoBean.sendMessageString(FUW00305SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));
		serviceInfoBean.sendMessageString(FUW00305SFConst.XZAHYO, X31CWebConst.DATABEAN_SET_VALUE, x); // X座標
		serviceInfoBean.sendMessageString(FUW00305SFConst.YZAHYO, X31CWebConst.DATABEAN_SET_VALUE, y); // Y座標
		serviceInfoBean.sendMessageString(FUW00305SFConst.LGTD, X31CWebConst.DATABEAN_SET_VALUE, longitude); // 経度
		serviceInfoBean.sendMessageString(FUW00305SFConst.LTTD, X31CWebConst.DATABEAN_SET_VALUE, latitude); // 緯度
		serviceInfoBean.sendMessageString(FUW00305SFConst.AD_CD, X31CWebConst.DATABEAN_SET_VALUE, ad_cd); // 住所コード
		serviceInfoBean.sendMessageString(FUW00305SFConst.ADDRESS, X31CWebConst.DATABEAN_SET_VALUE, address); // 住所
		serviceInfoBean.sendMessageString(FUW00305SFConst.M100MSKM_FLG, X31CWebConst.DATABEAN_SET_VALUE, m100mskm_flg); // 100M申込可能フラグ

		HashMap<Object, Object> paramMap = new HashMap<Object, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, ID_FUSV0193);

		// 設定値格納用マップを生成
		FUSV0193_FUSV0193OPDBMapper mapper = new FUSV0193_FUSV0193OPDBMapper();

		//値を設定
		HashMap<Object, Object> inputMap = new HashMap<Object, Object>();
		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		// 共有・サービスフォームBean
		X31SDataBeanAccess[] beans = { commonInfoBean, serviceInfoBean };

		// 実行条件用にデータをセットする
		inputMap.put(M100MSKM_FLG, m100mskm_flg); // 100M申込可能フラグ

		mapper.setFUSV019301SC(beans, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019302SC(beans, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019303SC(beans, inputMap, JPCModelConstant.FUNC_CD_2);

		// 2013/01/25 お客様名取得対応
		mapper.setFUSV019304SC(beans, inputMap, JPCModelConstant.FUNC_CD_2);

		// 2013/03/13 Fujiwara Add Start
		mapper.setFUSV019305SC(beans, inputMap, JPCModelConstant.FUNC_CD_2);
		// 2013/03/13 Fujiwara Add End

		// サービス呼び出し
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException jccexception)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		X31SDataBeanAccess[] paramBeanOut = { serviceInfoBean };

		// サービスからの戻りデータをBeanにセット(下りマッピング)
		mapper.getFUSV019301SC(paramBeanOut, outputMap, usePlace_type);
		mapper.getFUSV019302SC(paramBeanOut, outputMap, usePlace_floor);
		mapper.getFUSV019303SC(paramBeanOut, outputMap, m100mskm_flg);

		if (JFUStrConst.KEI_SBT_KOJINCD.equals(keiSbt))
		{
			// 2013/01/25 お客様名取得対応
			mapper.getFUSV019304SC(paramBeanOut, outputMap);
		}
		else if ((JFUStrConst.KEI_SBT_HOJINCD.equals(keiSbt)))
		{
			// 2013/03/13 Fujiwara Add Start
			mapper.getFUSV019305SC(paramBeanOut, outputMap);
			// 2013/03/13 Fujiwara Add End
		}

		// ■ベリサイン表示済フラグの設定
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccess webNewInfo = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		// ベリサイン表示済フラグ
		webNewInfo.sendMessageBoolean(CommonInfoCFConst.VERISIGN_DISP_FL_06, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);

		// 表示用に画面ＩＤを設定する。
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00305);

		return true;
	}

	/**
	 * 次へボタン押下時
	 *
	 * @return true
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		//サービスフォームBeanのアクセスクラスを取得します。
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean(); // 共有フォームBean

		// 2013/04/24 Otsuka 不要コードコメントアウト
		//		X31SDataBeanAccessArray web_new_info = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO); // WEB新規情報
		//		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		/** -----共通設定----- */

		serviceInfoBean.sendMessageString(FUW00305SFConst.DEL_TRGT_GAI_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.DEL_TRGT_GAI_FLG_0);
		serviceInfoBean.sendMessageString(FUW00305SFConst.CUST_RANK_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CUST_RANK_CD_USUAL);
		serviceInfoBean.sendMessageString(FUW00305SFConst.RRK_WAY_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.RRK_WAY_CD_OTHER);

		String m100mskm_flg = serviceInfoBean.sendMessageString(FUW00305SFConst.M100MSKM_FLG, X31CWebConst.DATABEAN_GET_VALUE); // 100M申込可能フラグ

		// エリアリクエストが可能な場合
		if (m100mskm_flg.equals("1"))
		{
			String usePlace_Floor = ""; // 利用場所の形態コード用
			String usePlace_slect = ""; // 利用場所の形態名
			String usePlace_Floor_name = ""; // 集合住宅居住階コード用
			String usePlace_select_name = ""; // 集合住宅居住階名
			int selectIndex = 0;

			//利用場所の形態に応じて階数の値をクリアします。
			if (JFUStrConst.CD00627_08.equals(usePlace_slect) || JFUStrConst.CD00627_09.equals(usePlace_slect))
			{
				serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR, X31CWebConst.DATABEAN_SET_VALUE, CLEAR_VALUE);
			}

			// 住所形態コードの設定
			X31SDataBeanAccessArray dataBeanAccessArray = serviceInfoBean.getDataBeanArray(FUW00305SFConst.SETTINGPATTERN);

			X31SDataBeanAccess adFormBean =
					getSettingPatternBean(dataBeanAccessArray, serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGPATTERN_SELECT,
							X31CWebConst.DATABEAN_GET_VALUE));

			if(adFormBean != null)
			{
				usePlace_slect = adFormBean.sendMessageString(FUW00305SFConst.SETTINGPATTERN_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE);
				usePlace_select_name = adFormBean.sendMessageString(FUW00305SFConst.SETTINGPATTERN_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE);
			}

			//利用場所の形態によって階数聞き取り有無を判断します。
			if (JFUStrConst.CD00627_03.equals(usePlace_slect) || JFUStrConst.CD00627_04.equals(usePlace_slect))
			{
				// 集合住宅居住階コードの設定
				X31SDataBeanAccessArray fRDataBeanAccessArray = serviceInfoBean.getDataBeanArray(FUW00305SFConst.SETTINGFLOOR);

				// 選択値を取得
				selectIndex =
						Integer.valueOf(serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR_SELECT, X31CWebConst.DATABEAN_GET_VALUE))
								.intValue();

				X31SDataBeanAccess frFormBean = fRDataBeanAccessArray.getDataBean(selectIndex);

				usePlace_Floor = frFormBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE);
				usePlace_Floor_name = frFormBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR_NM_LIST_02, X31CWebConst.DATABEAN_GET_VALUE);
			}
			// サービスフォームBeanに値を設定する
			serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGPATTERN_SELECT_CD, X31CWebConst.DATABEAN_SET_VALUE, usePlace_slect);
			serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGPATTERN_SELECT_NAME, X31CWebConst.DATABEAN_SET_VALUE, usePlace_select_name);
			serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR_SELECT_CD, X31CWebConst.DATABEAN_SET_VALUE, usePlace_Floor);
			serviceInfoBean.sendMessageString(FUW00305SFConst.SETTINGFLOOR_SELECT_NAME, X31CWebConst.DATABEAN_SET_VALUE, usePlace_Floor_name);

// 量販Webではメールを送信しない
//			// メール類の設定
//			// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod Start
//			// 送信元メールアドレス
//			serviceInfoBean.sendMessageString(FUW00305SFConst.SENDM_MLAD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon
//					.getApplicationConst(AREA_REQ_FROM_MLAD));
//			// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod End
//
//			// メール送信先リスト
//			X31SDataBeanAccessArray mailSendListArray = serviceInfoBean.getDataBeanArray(FUW00305SFConst.MLAD_LIST);
//			mailSendListArray.clearArray();
//
//			// 送信先メールアドレス1(問合せ客のメールアドレス)
//			String mlad = serviceInfoBean.sendMessageString(FUW00305SFConst.EMAIL, X31CWebConst.DATABEAN_GET_VALUE);
//
//			mailSendListArray.addDataBean();
//			X31SDataBeanAccess sendDatatype = mailSendListArray.getDataBean(mailSendListArray.getCount() - 1);
//
//			// メール送信先タイプ 送信先メールアドレス
//			sendDatatype.sendMessageString(FUW00305SFConst.MLAD_04, X31CWebConst.DATABEAN_SET_VALUE, mlad);
//
//			// メール送信先タイプ メールアドレス設定フィールドコード TO
//			sendDatatype.sendMessageString(FUW00305SFConst.MLAD_SET_FIELD_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00788_01);
//
//			// 送信先メールアドレス2(BCC)
//			// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod Start
//			String bccMailAd = JFUWebCommon.getApplicationConst(AREA_REQ_BCC_MLAD);
//			// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod End
//
//			mailSendListArray.addDataBean();
//			sendDatatype = mailSendListArray.getDataBean(mailSendListArray.getCount() - 1);
//
//			// メール送信先タイプ 送信先メールアドレス
//			sendDatatype.sendMessageString(FUW00305SFConst.MLAD_04, X31CWebConst.DATABEAN_SET_VALUE, bccMailAd);
//
//			// メール送信先タイプ メールアドレス設定フィールドコード BCC
//			sendDatatype.sendMessageString(FUW00305SFConst.MLAD_SET_FIELD_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00788_04);
//
//			// FUDispDefinitionからURLを取得
//			String url = JCMAPLConstMgr.getString(AREA_REQ_CANCEL_URL);
//
//			// ----メール本文非定型文字列リスト----
//			X31SDataBeanAccessArray htkMojiListArray = serviceInfoBean.getDataBeanArray(FUW00305SFConst.CUST_HTK_MOJI_LIST);
//			htkMojiListArray.clearArray();
//
//			// ■本文非定型置換文字 氏名
//			String name = "";
//			htkMojiListArray.addDataBean();
//			X31SDataBeanAccess htkMojiDatatype = htkMojiListArray.getDataBean(htkMojiListArray.getCount() - 1);
//
//			name =
//					serviceInfoBean.sendMessageString(FUW00305SFConst.P_NAME_LAST, X31CWebConst.DATABEAN_GET_VALUE) + ZENKAKU_SPACE
//							+ serviceInfoBean.sendMessageString(FUW00305SFConst.P_NAME_FIRST, X31CWebConst.DATABEAN_GET_VALUE);
//
//			htkMojiDatatype.sendMessageString(FUW00305SFConst.TEXT_HTK_CKAM_MOJI_03, X31CWebConst.DATABEAN_SET_VALUE, name);
//
//			// ■本文非定型置換文字 URL
//			htkMojiListArray.addDataBean();
//			htkMojiDatatype = htkMojiListArray.getDataBean(htkMojiListArray.getCount() - 1);
//
//			htkMojiDatatype.sendMessageString(FUW00305SFConst.TEXT_HTK_CKAM_MOJI_03, X31CWebConst.DATABEAN_SET_VALUE, url);

// ANK-3421-00-00 DEL START
//			// IT1-2013-0000254 Otsuka 2013/01/22 start
//			// ■本文非定型置換文字 メールアドレス
//			htkMojiListArray.addDataBean();
//			htkMojiDatatype = htkMojiListArray.getDataBean(htkMojiListArray.getCount() - 1);
//
//			htkMojiDatatype.sendMessageString(FUW00305SFConst.TEXT_HTK_CKAM_MOJI_03, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon
//					.getApplicationConst(AREA_REQ_FROM_MLAD));
//			// IT1-2013-0000254 Otsuka 2013/01/22 end
// ANK-3421-00-00 DEL END

		}

		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, ID_FUSV0194);

		// 設定値格納用マップを生成
		FUSV0194_FUSV0194OPDBMapper mapper = new FUSV0194_FUSV0194OPDBMapper();

		//値を設定
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		X31SDataBeanAccess[] beans = { commonInfoBean, serviceInfoBean }; // 共有・サービスフォームBean

		// 実行条件用にデータをセットする
		inputMap.put(M100MSKM_FLG, m100mskm_flg); // 100M申込可能フラグ
		inputMap.put(FUNC_CODE, JPCModelConstant.FUNC_CD_2); // 機能コード

		mapper.setFUSV019401CC(beans, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019402SC(beans, inputMap, JPCModelConstant.FUNC_CD_2, m100mskm_flg);
		mapper.setFUSV019403SC(beans, inputMap, JPCModelConstant.FUNC_CD_2, m100mskm_flg);

		// エリアリクエストが可能な場合
		if (m100mskm_flg.equals("1"))
		{
			mapper.setFUSV019404SC(beans, inputMap, JPCModelConstant.FUNC_CD_2);
		}

		// IT1-2013-0000158 同一問合せ客エリアリクエスト登録対応
		mapper.setFUSV019405SC(beans, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019406SC(beans, inputMap, JPCModelConstant.FUNC_CD_2, this);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException jccexception)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		//取扱コードの存在チェック
		if (!checkExisttratCd(outputMap))
		{
			// 「指定された取扱コードは存在しません。」
			JCCWebCommon.setMessageInfo(this, "EKF1040-TW", new String[] { "取扱コード" }, "tratCd");
			return true;
		}
		else
		{
			// フロントログイン制御コードを取得
			HashMap<?, ?> parentMap = null;
			if (outputMap.containsKey("FUSV019406SC"))
			{
				parentMap = (HashMap)outputMap.get("FUSV019406SC");
				ArrayList agentList = (ArrayList)parentMap.get("EKK0061A010CBSMsg1List");
				HashMap agentMap = (HashMap)agentList.get(0);
				
				if (agentMap != null)
				{
					serviceInfoBean.sendMessageString(FUW00305SFConst.FRNT_LOGIN_CTRL_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)agentMap.get("frnt_login_ctrl_cd"));
				}
			}
		}
		
		// ------次画面IDの設定-------

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00306)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00306);

		// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：FUW00306_エリアリクエスト完了)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00306);

		return true;
	}

	/**
	 * エリアリクエスト登録内容取り消しリンク押下時
	 *
	 * @return true
	 * @throws Exception
	 */
	public boolean trks() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccessArray web_new_info = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		web_new_infobean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		// 20130112 Fujiwara Add Start
		// ------遷移元画面IDの設定-------

		JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00401, JFUScreenConst.SCREEN_ID_FUW00305);
		// 20130112 Fujiwara Add End

		// ------次画面IDの設定-------

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00401)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00401);

		// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：FUW00401_エリアリクエスト取消)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00401);

		return true;
	}

	/**
	 * エリアリクエスト登録完了ボタン押下時
	 *
	 * @return true
	 * @throws Exception
	 */
	public boolean finAreaRequest() throws Exception
	{
		//サービスフォームBeanのアクセスクラスを取得します。
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean(); // 共有フォームBean

		X31SDataBeanAccessArray web_new_info = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO); // WEB新規情報
		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		String m100mskm_flg = serviceInfoBean.sendMessageString(FUW00305SFConst.M100MSKM_FLG, X31CWebConst.DATABEAN_GET_VALUE); // 100M申込可能フラグ

		HashMap<Object, Object> paramMap = new HashMap<Object, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, ID_FUSV0194);

		// 設定値格納用マップを生成
		FUSV0194_FUSV0194OPDBMapper mapper = new FUSV0194_FUSV0194OPDBMapper();

		//値を設定
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>(); // 結果格納用マップを生成

		X31SDataBeanAccess[] beans = { commonInfoBean, serviceInfoBean }; // 共有・サービスフォームBean

		// 実行条件用にデータをセットする
		inputMap.put(M100MSKM_FLG, m100mskm_flg); // 100M申込可能フラグ
		inputMap.put(FUNC_CODE, JPCModelConstant.FUNC_CD_1); // 機能コード
		// フロントログイン制御コード
		String frntLoginCtrlCd = serviceInfoBean.sendMessageString(FUW00305SFConst.FRNT_LOGIN_CTRL_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String areaReqMotoSkbtCd = JFUStrConst.EMPTY;
		if (FRNT_LOGIN_CTRL_CD_SHOP_RYOHAN.equals(frntLoginCtrlCd) || FRNT_LOGIN_CTRL_CD_PERSONAL_RYOHAN.equals(frntLoginCtrlCd))
		{
			areaReqMotoSkbtCd = "1";
		}
		// エリアリクエスト（店頭販売支援）
		inputMap.put("tenpoHanbaiSien", "1");
		// エリアリクエスト元識別コード
		inputMap.put("areaReqMotoSkbtCd", areaReqMotoSkbtCd);
		//  問合せ客取扱コード
		inputMap.put("tratCd", serviceInfoBean.sendMessageString(FUW00305SFConst.TRAT_CD, X31CWebConst.DATABEAN_GET_VALUE));

		mapper.setFUSV019401CC(beans, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019402SC(beans, inputMap, JPCModelConstant.FUNC_CD_1, m100mskm_flg);
		mapper.setFUSV019403SC(beans, inputMap, JPCModelConstant.FUNC_CD_1, m100mskm_flg);
		mapper.setFUSV019404SC(beans, inputMap, JPCModelConstant.FUNC_CD_1);

		// IT1-2013-0000158 同一問合せ客エリアリクエスト登録対応
		mapper.setFUSV019405SC(beans, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException jccexception)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
		}

		web_new_infobean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		// ------次画面IDの設定-------

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00307)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00307);

		// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：FUW00307_エリアリクエスト登録完了)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00307);

// 量販訪販ではメールを送信しない
//		if (!M100MSKM_FLG_VALUE_2.equals(m100mskm_flg))
//		{
//			// 申込完了メール送信部品呼出処理
//			JFUWebCommon.sendMskmFinMail(this, outputMap, ID_FUSV0194);
//		}

		return true;
	}

	/**
	 * 戻るボタン押下時
	 *
	 * @return true
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// ------次画面IDの設定-------

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。(設定値：FUW00305)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00305);

		// 遷移先の画面名を共有フォームBeanの項目に設定する。(設定値：FUW00305_エリアリクエスト入力)
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00305);

		return true;
	}

	/**
	 * フロント業務リスト
	 * @param commonInfoBean
	 * @return workKiseiListBean
	 */
	private X31SDataBeanAccess getWorkKiseiList(X31SDataBeanAccess commonInfoBean)
	{
		// フロント業務リストを取得
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_WORK_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess frontWorkListBean = array.getDataBean(0);

		return frontWorkListBean;
	}

	/**
	 * 業務規制情報を設定する。
	 * @return boolean true:規制中  false:規制中でない
	 */
	private void setWorkKiseiList()
	{
		// 業務規制情報取得
		HashMap<String, Object> workKiseiInfoMap = JCCWebCommon.getBusinessControlMap(this);

		// 業務規制情報マップから、フロント２４時間３６５日稼動対象規制情報を取得
		HashMap<?, ?> workKiseiMap = (HashMap<?, ?>)workKiseiInfoMap.get(JFUStrConst.WORK_KISEI_FUGKW0009);

		// 業務規制フラグの取得
		String kiseiFlg = (String)workKiseiMap.get(JFUStrConst.KISEI_FLG);

		// 業務規制情報設定処理

		// 共有フォームBeanの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 業務規制リスト取得
		X31SDataBeanAccess workKiseiListBean = getWorkKiseiList(commonInfoBean);

		// フロント稼動対象規制フラグを設定(フロント２４時間３６５日稼動対象規制)
		if (JFUStrConst.CD01306_1.equals(kiseiFlg))
		{
			workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
					JFUStrConst.CD01306_1);
		}
		else
		{
			workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
					JFUStrConst.CD01306_0);
		}
	}

	/**
	 * 形態の選択したコードに該当するビーンを返します。
	 * <br>該当ビーンがない場合はnullを返します。
	 * <br>
	 * @param beanArray
	 * @param cd 選択したコード値。
	 * @return
	 */
	private X31SDataBeanAccess getSettingPatternBean(X31SDataBeanAccessArray beanArray, String cd)
	{
		if (cd == null)
		{
			return null;
		}

		int len = beanArray.getCount();
		for (int i = 0; i < len; i++)
		{
			X31SDataBeanAccess target = beanArray.getDataBean(i);
			if (cd.equals(target.sendMessageString(FUW00305SFConst.SETTINGPATTERN_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				return target;
			}
		}
		return null;
	}

	/**
	 * Pascoからのエリアリクエスト情報あ不正な場合にビジネスログに出力。
	 *
	 * <br>
	 * @param m100mskm_flg 100M申込可能フラグ
	 * @param x X座標
	 * @param y Y座標
	 * @param longitude 経度
	 * @param latitude 緯度
	 * @param ad_cd 住所コード
	 * @param address 住所
	 */
	private void outputPascoParam(String m100mskm_flg, String x, String y, String longitude, String latitude, String ad_cd, String address)
	{
		outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
		outputBusLog("WARN： ●FUW00305_エリアリクエスト入力 リクエスト情報が不正です。");
		outputBusLog("WARN：   ・100M申込可能フラグ ＝【" + m100mskm_flg + "】");
		outputBusLog("WARN：   ・X座標              ＝【" + x + "】");
		outputBusLog("WARN：   ・Y座標              ＝【" + y + "】");
		outputBusLog("WARN：   ・経度               ＝【" + longitude + "】");
		outputBusLog("WARN：   ・緯度               ＝【" + latitude + "】");
		outputBusLog("WARN：   ・住所コード         ＝【" + ad_cd + "】");
		outputBusLog("WARN：   ・住所               ＝【" + address + "】");
		outputBusLog("WARN：※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
	}

	/**
	 * ビジネスログへの出力処理
	 *
	 * @param msg ログ情報
	 */
	private void outputBusLog(String msg)
	{
		JSYwebLog.println(JSYwebLog.EXECUTION, getClass(), msg, "CS0003I", null, null);
	}

	/**
	 * 画面で入力された取扱コードの存在チェックを行う。
	 * @param outputMap
	 * @return チェック結果
	 */
	@SuppressWarnings("unchecked")
	private boolean checkExisttratCd(HashMap<Object, Object> outputMap)
	{
		HashMap<?, ?> parentMap = null;
		if (outputMap.containsKey("FUSV019406SC"))
		{
			parentMap = (HashMap)outputMap.get("FUSV019406SC");
		}
		else
		{
			return false;
		}

		ArrayList childList = null;

		childList = (ArrayList)parentMap.get("EKK0061A010CBSMsg1List");

		if (childList.size() == 0)
		{
			return false;
		}
		return true;
	}
}