/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：マンション検索1(府県)(量販・訪販)
*   ソースファイル名：FUW00907SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年01月11日
*＜機能概要＞
*  マンション検索１（府県）のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/20   FJ）大塚    新規作成
*   v73.00.00   2024/09/05   FJ）余野木  【ANK-4427-00-00】NTT卸対応
*
**********************************************************************/
package eo.web.webview.FUW00907SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;

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.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0140_FUSV0140OPDBMapper;
import eo.web.webview.mapping.FUSV0178_FUSV0178OPDBMapper;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00907SF.FUW00907SFConst;

/**
 * エリア検索のビューロジッククラスです。<p>
 * <BR>
 * @ author 富士通
 */
@SuppressWarnings("serial")
public class FUW00907SFLogic extends JCCWebBusinessLogic
{
	/** ユースケースID（FUSV0140） */
	private static final String USECASE_ID_FUSV0140 = "FUSV0140";

	/** マンション情報.検索パターン：1 */
	private static final String MANSION_SEARCH_PCD = "1";

	/** マンション情報.検索パターン：2 */
	private static final String MANSION_SEARCH_NOT_PCD = "2";

	/**
	 * 初期表示処理
	 * 
	 * @ return
	 */
	public boolean init() throws Exception
	{
		// 共通クリア処理
		JFUWebCommon.comClear(this);

		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// コード種別をセット
		serviceInfoBean.sendMessageString(FUW00907SFConst.CODE_SBT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD_SBT_CD00691);
		// 基準日をセット
		serviceInfoBean.sendMessageString(FUW00907SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0140);

		// DataBean-BPマッピング
		FUSV0140_FUSV0140OPDBMapper mapper = new FUSV0140_FUSV0140OPDBMapper();

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { serviceInfoBean };

		// 機能コード「1」を設定
		mapper.setMskmUcwkMap(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		X31SDataBeanAccess[] paramBeanOut = { serviceInfoBean };

		// サービスからの戻りデータをBeanにセット(下りマッピング)
		mapper.getMskmUcwkMap(paramBeanOut, outputMap);

		// ANK-4427-00-00 ADD START
		// 府県リストの再設定
		if (JFUWebCommon.isTypen(getCommonInfoBean())) {
	        X31SDataBeanAccess prefecture_list = serviceInfoBean.getDataBeanArray(FUW00907SFConst.FUKEN_LIST).getDataBean(0);
			int selectCount = (Integer)prefecture_list.sendMessage(FUW00907SFConst.FUKEN_NAME_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);

			for (int i=0; i < selectCount; i++) {
				String selectNm = prefecture_list.sendMessageString(FUW00907SFConst.FUKEN_NAME_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
				if (selectNm.equals("福井県")) {
			        prefecture_list.sendMessage(FUW00907SFConst.FUKEN_NAME_LIST_01, X31CWebConst.DATABEAN_REMOVE, i);
			        prefecture_list.sendMessage(FUW00907SFConst.FUKEN_CODE_LIST_01, X31CWebConst.DATABEAN_REMOVE, i);
				}
			}
		}
		// ANK-4427-00-00 ADD END

		return true;
	}

	/**
	 * 次へボタン押下時（郵便番号から検索）
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean postNext() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceformBean = getServiceFormBean();

		// 郵便番号を取得
		String zipFront = serviceformBean.sendMessageString(FUW00907SFConst.ZIPFRONT, X31CWebConst.DATABEAN_GET_VALUE);
		String zipRear = serviceformBean.sendMessageString(FUW00907SFConst.ZIPREAR, X31CWebConst.DATABEAN_GET_VALUE);

		// 共有フォームBean取得
		X31SDataBeanAccess bean = getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccessArray web_new_info = bean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		// WEB新規情報>マンション情報
		X31SDataBeanAccessArray mansionInfo = web_new_infobean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO);
		X31SDataBeanAccess mansionInfoBean = mansionInfo.getDataBean(0);

		// 共有フォームBeanへ設定
		mansionInfoBean.sendMessageString(CommonInfoCFConst.SEARCH_PCD1_16, X31CWebConst.DATABEAN_SET_VALUE, zipFront);
		mansionInfoBean.sendMessageString(CommonInfoCFConst.SEARCH_PCD2_16, X31CWebConst.DATABEAN_SET_VALUE, zipRear);

		// ----次画面IDの設定----
		// マンション検索パターンを設定(1:郵便番号検索)
		mansionInfoBean.sendMessageString(CommonInfoCFConst.SEARCH_PTN_16, X31CWebConst.DATABEAN_SET_VALUE, MANSION_SEARCH_PCD);

		// ANK-4427-00-00 ADD START
		if (JFUWebCommon.isTypen(bean)) {
			String stateNm = "";
			String cityNm = "";
			String oaztsuNm = "";
			String azchoNm = "";

			// リダイレクト情報に値を設定
			X31SDataBeanAccessArray redirect_bean_array = web_new_infobean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
			X31SDataBeanAccess redirect_bean = redirect_bean_array.getDataBean(0);

			redirect_bean.sendMessageString("リダイレクト・郵便番号（上）", X31CWebConst.DATABEAN_SET_VALUE, zipFront);
			redirect_bean.sendMessageString("リダイレクト・郵便番号（下）", X31CWebConst.DATABEAN_SET_VALUE, zipRear);
			serviceformBean.sendMessageString("基準日", X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));

			// サービスIDをparamにセット
			Map<String, String> paramMap = new HashMap<String, String>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "FUSV0178");

			// DataBean-BPマッピング
			FUSV0178_FUSV0178OPDBMapper mapper = new FUSV0178_FUSV0178OPDBMapper();

			HashMap<String, Object> inputMap = new HashMap<String, Object>();
			HashMap<String, Object> outputMap = new HashMap<String, Object>();

			X31SDataBeanAccess[] paramBean = { serviceformBean, bean };

			// 機能コード「1」を設定
			mapper.setFUSV017808SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
			mapper.setFUSV0178TypeNSC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

			try
			{
				// サービス呼び出し
				invokeService(paramMap, inputMap, outputMap);
			}
			catch (JCCWebServiceException se)
			{
				// システムエラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			X31SDataBeanAccess[] paramBeanOut = { serviceformBean };

			// サービスからの戻りデータをBeanにセット(下りマッピング)
			mapper.getFUSV017808SC(paramBeanOut, outputMap);

			HashMap<String, Object> parentMap = null;

			ArrayList<Object> childList = null;

			if (outputMap.containsKey("FUSV017808SC"))
			{
				parentMap = (HashMap)outputMap.get("FUSV017808SC");
			}

			if (!((HashMap)parentMap).isEmpty() && parentMap.containsKey("EZM0081B012CBSMsg1List"))
			{
				childList = (ArrayList)parentMap.get("EZM0081B012CBSMsg1List");
			}

			if (!((ArrayList)childList).isEmpty() && childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);
				stateNm = (String)childMap.get("state_nm");
				cityNm = (String)childMap.get("city_nm");
				oaztsuNm = (String)childMap.get("oaztsu_nm");
				azchoNm = (String)childMap.get("azcho_nm");
			}

			// 2府4県のみ対象
			if (!(stateNm.equals("大阪府") || stateNm.equals("京都府") || stateNm.equals("兵庫県") || 
					stateNm.equals("奈良県") || stateNm.equals("和歌山県") || stateNm.equals("滋賀県"))) {
				// エラーメッセージを表示する。
				JCCWebCommon.setMessageInfo(this, "EKF1770-NW", new String[] { "typeN提供範囲内", "郵便番号" }, "zip");
				return true;
			}

			//共有フォームBeanのＰＡＳＣＯ情報データタイプBean定義
			X31SDataBeanAccessArray pascoInfoBeanArray = web_new_infobean.getDataBeanArray(CommonInfoCFConst.PASCO_INFO);
			if (pascoInfoBeanArray.getCount() == 0)
			{
				pascoInfoBeanArray.addDataBean();
			}
			X31SDataBeanAccess pascoInfoBean = pascoInfoBeanArray.getDataBean(0);

			//共有フォームBeanのＰＡＳＣＯ情報データタイプBean定義に取得した値を設定
			pascoInfoBean.sendMessageString(CommonInfoCFConst.PCD_07, X31CWebConst.DATABEAN_SET_VALUE, zipFront + zipRear);
			pascoInfoBean.sendMessageString(CommonInfoCFConst.STATE_07, X31CWebConst.DATABEAN_SET_VALUE, stateNm + cityNm);
			pascoInfoBean.sendMessageString(CommonInfoCFConst.BNCHI_07, X31CWebConst.DATABEAN_SET_VALUE, oaztsuNm);
			pascoInfoBean.sendMessageString(CommonInfoCFConst.CHO_AZA_07, X31CWebConst.DATABEAN_SET_VALUE, azchoNm);
		}
		// ANK-4427-00-00 ADD END

		// ANK-4427-00-00 MOD START
		// typeNの場合はFUW00911に遷移
		if (JFUWebCommon.isTypen(bean)) {
			JFUWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00911, JFUScreenConst.SCREEN_ID_FUW00907);
			// 遷移先画面ＩＤ
			bean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00911);
			// 遷移先画面名称
			bean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00911);
		} else {
			JFUWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00910, JFUScreenConst.SCREEN_ID_FUW00907);
			// 遷移先画面ＩＤ
			bean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00910);
			// 遷移先画面名称
			bean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00910);
		}
		// ANK-4427-00-00 MOD END

		return true;
	}

	/**
	 * 次へボタン押下時（リストから検索）
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean fukenNext() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceformBean = getServiceFormBean();

		// 府県リストを取得
		X31SDataBeanAccessArray fukenDataBeanAccessArray = serviceformBean.getDataBeanArray(FUW00907SFConst.FUKEN_LIST);
		X31SDataBeanAccess fukenBean = fukenDataBeanAccessArray.getDataBean(0);

		// プルダウンの選択値を取得
		String fukenNumber = fukenBean.sendMessageString(FUW00907SFConst.FUKEN_NUMBER_01, X31CWebConst.DATABEAN_GET_VALUE);

		// 選択値より配列番号を取得
		int selectIndex1 = Integer.valueOf(fukenNumber).intValue();

		// 配列番号より府県名称リスト値を取得
		String fukenName = fukenBean.sendMessageString(FUW00907SFConst.FUKEN_NAME_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, selectIndex1);

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// WEB新規情報
		X31SDataBeanAccessArray web_new_info = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		// WEB新規情報 >マンション情報
		X31SDataBeanAccessArray mansionInfo = web_new_infobean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO);
		X31SDataBeanAccess mansionInfoBean = mansionInfo.getDataBean(0);

		// 共有フォームBeanへ設定
		mansionInfoBean.sendMessageString(CommonInfoCFConst.SEARCH_STATE_16, X31CWebConst.DATABEAN_SET_VALUE, fukenName);

		// ANK-4427-00-00 MOD START
		// typeNの場合はFUW00911に遷移
		if (JFUWebCommon.isTypen(commonInfoBean)) {
			JFUWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00911, JFUScreenConst.SCREEN_ID_FUW00907);
		} else {
			JFUWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00908, JFUScreenConst.SCREEN_ID_FUW00907);
		}
		// ANK-4427-00-00 MOD END
		// ------次画面IDの設定-------
		// マンション検索パターンを設定(2:郵便番号検索でない)
		mansionInfoBean.sendMessageString(CommonInfoCFConst.SEARCH_PTN_16, X31CWebConst.DATABEAN_SET_VALUE, MANSION_SEARCH_NOT_PCD);

		// ANK-4427-00-00 MOD START
		// typeNの場合はFUW00911に遷移
		if (JFUWebCommon.isTypen(commonInfoBean)) {
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00911);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00911);
		} else {
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00908);

			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00908);
		}
		// ANK-4427-00-00 MOD END

		return true;
	}

}
