/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：担当者ログイン
*   ソースファイル名：FUW00950SFLogic.java
*   作成者          ：富士通
*   日付            ：2013年04月08日
*＜機能概要＞
*  担当者ログインのビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00       2012/04/08   FJ）大塚    
*   v12.00      2014/11/05   FJ）谷本    【ANK-2309-03-00】＜案件内仕変＞店頭販売支援へのメニュー画面追加
*
**********************************************************************/
package eo.web.webview.FUW00950SF;

import java.util.HashMap;

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.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00950SF.FUW00950SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0211_FUSV0211OPDBMapper;

/**
 * 担当者ログインのビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00950SFLogic extends JCCWebBusinessLogic
{
	/** ユースケースID（FUSV0211） */
	private static final String USECASE_ID_FUSV0211 = "FUSV0211";

	/** エラー用画面ID 担当者ID */
	private static final String TANTOSHA_ID = "tantoshaid";
	/** エラー用画面ID パスワード */
	private static final String PW = "pw";

	/** エラー用画面文言 入力 */
	private static final String TXT_INPUT = "入力";

	/** エラー用画面文言 入力 */
	private static final String TXT_ID = "受付担当者ID";

	/** エラー用画面文言 入力 */
	private static final String TXT_PASS = "パスワード";

	/** パスワード有効期間 */
	private static final String FU_PASS_YUKO_DAY = "FU_PASS_YUKO_DAY";

	/**
	 * 初期表示処理
	 * <BR>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		// 業務規制情報設定処理
		this.setWorkKiseiList();

		//サービスフォームBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		serviceFormBean.getDataBeanArray(FUW00950SFConst.WORK_PARAM_LIST).addDataBean();
		X31SDataBeanAccess workParamListBean = serviceFormBean.getDataBeanArray(FUW00950SFConst.WORK_PARAM_LIST).getDataBean(0);

		// APLConstより取得
		String passDay = JFUWebCommon.getApplicationConst(FU_PASS_YUKO_DAY);

		workParamListBean.sendMessageString(FUW00950SFConst.WORK_PARAM_SETTE_VALUE_04, X31CWebConst.DATABEAN_SET_VALUE, passDay);

		return true;
	}

	/**
	 * ログインボタン押下処理
	 * <BR>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean login() throws Exception
	{
		//  サービスの実行
		this.callFUSV0211Service();

		//サービスフォームBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// 画面にて入力されたパスワード
		String password = serviceFormBean.sendMessageString(FUW00950SFConst.PWD, X31CWebConst.DATABEAN_GET_VALUE);

		// パスワードのチェック
		// 検索件数をチェック
		Integer iResultCount = serviceFormBean.getDataBeanArray(FUW00950SFConst.PASSWORD_LIST).getCount();

		// 検索結果が0件
		if (iResultCount < 1)
		{
			JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0420_TW, new String[] { TXT_ID, TXT_INPUT }, TANTOSHA_ID);
			return true;
		}
		// パスワードリストを取得
		X31SDataBeanAccess passListBean = serviceFormBean.getDataBeanArray(FUW00950SFConst.PASSWORD_LIST).getDataBean(0);

		// ユーザー名
		String tantoshaNm = passListBean.sendMessageString(FUW00950SFConst.USER_NM_01, X31CWebConst.DATABEAN_GET_VALUE);

		// パスワード 複合化して格納
		String strPass =
				JFUWebCommon.getDecryptResultPassword(passListBean.sendMessageString(FUW00950SFConst.RH_VH_USER_PWD_01,
						X31CWebConst.DATABEAN_GET_VALUE));

		// パスワードを複合化する。

		// パスワードが一致しない場合
		if (!strPass.equals(password))
		{
			JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0420_TW, new String[] { TXT_PASS, TXT_INPUT }, PW);
			return true;
		}

		// 共有フォームBeanに引継ぎ情報を設定する。
		setTransferInfoByNext(tantoshaNm);

		// パスワード操作内容コード
		String pass_sosa = passListBean.sendMessageString(FUW00950SFConst.PWD_SOSA_NAIYO_CD_01, X31CWebConst.DATABEAN_GET_VALUE);

		// パスワード操作内容コードが変更の場合、パスワード有効期限チェックを行う。
		if (JFUStrConst.CD01426_2.equals(pass_sosa))
		{
			// パスワード設定年月日時分秒(前回のパスワード変更日付) yyyyMMddHHmmssに加工
			String passYmd = passListBean.sendMessageString(FUW00950SFConst.PWD_SETTE_DTM_01, X31CWebConst.DATABEAN_GET_VALUE).substring(0, 14);

			// ログイン日付(運用日付)yyyyMMddHHmmss  20110624173142
			String loginYmd = JFUWebCommon.getOpeDateTime(this, null);

			// パスワードの有効日数を取得
			// 業務パラメータリストを取得
			X31SDataBeanAccess workParamListBean = serviceFormBean.getDataBeanArray(FUW00950SFConst.WORK_PARAM_LIST).getDataBean(0);

			String yukoDay = workParamListBean.sendMessageString(FUW00950SFConst.WORK_PARAM_SETTE_VALUE_04, X31CWebConst.DATABEAN_GET_VALUE);

			// 有効期限を取得
			int deff_date = JPCDateUtil.subtractDay(loginYmd, passYmd);

			// 最終設定日が有効日数以上前の場合
			if (deff_date >= Integer.parseInt(yukoDay))
			{
				serviceFormBean.sendMessageBoolean(FUW00950SFConst.ISNEXTFLG, X31CWebConst.DATABEAN_SET_VALUE, false);

				// パスワード変更FUW00952に遷移する。
				this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00952, JFUScreenConst.SCREEN_ID_FUW00952);
			}
			// パスワードの有効期限が10日以下の場合、パスワード有効期限を設定する。
			else if ((Integer.parseInt(yukoDay) - deff_date) <= 10)
			{
				String kigen = Integer.toString((Integer.parseInt(yukoDay) - deff_date));

				serviceFormBean.sendMessageString(FUW00950SFConst.PWD_YK_KIGEN, X31CWebConst.DATABEAN_SET_VALUE, kigen);

				serviceFormBean.sendMessageBoolean(FUW00950SFConst.ISNEXTFLG, X31CWebConst.DATABEAN_SET_VALUE, true);

				// パスワードの有効期限が10日以下の場合、FUW00950を再描画し、ダイアログを出す。
				this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00950, JFUScreenConst.SCREEN_NAME_FUW00950);
			}
			else
			{
				serviceFormBean.sendMessageBoolean(FUW00950SFConst.ISNEXTFLG, X31CWebConst.DATABEAN_SET_VALUE, false);

				// 番号ポータビリティ可否確認画面FUW00954に遷移する。
				this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00954, JFUScreenConst.SCREEN_NAME_FUW00954);
			}
		}
		else
		{
			serviceFormBean.sendMessageBoolean(FUW00950SFConst.ISNEXTFLG, X31CWebConst.DATABEAN_SET_VALUE, false);

			// パスワード操作内容コードが変更以外の場合、パスワード変更FUW00952に遷移する。
			this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00952, JFUScreenConst.SCREEN_NAME_FUW00952);
		}

		return true;
	}

	/**
	 * 次へボタン押下処理
	 * <BR>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean next() throws Exception
	{
		// サービスフォームBeanを取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// 遷移先フラグ
		String transFlg = serviceFormBean.sendMessageString(FUW00950SFConst.TRANS_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUScreenConst.SCREEN_ID_FUW00952.equals(transFlg))
		{
			this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00952, JFUScreenConst.SCREEN_NAME_FUW00952);
		}
		else if (JFUScreenConst.SCREEN_ID_FUW00954.equals(transFlg))
		{
			this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00954, JFUScreenConst.SCREEN_NAME_FUW00954);
		}
		else
		{
			this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00950, JFUScreenConst.SCREEN_NAME_FUW00950);
		}

		return true;
	}

	/**
	 * 担当者ログイン実績登録サービスを呼び出す。
	 * @throws Exception 
	 */
	private void callFUSV0211Service() throws Exception
	{
		// サービスフォームBeanを取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// 予約適用年月日の設定
		serviceFormBean.sendMessageString(FUW00950SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));

		// 量販訪販ユーザーパスワード (実行判定に使用)
		String pass = serviceFormBean.sendMessageString(FUW00950SFConst.PWD, X31CWebConst.DATABEAN_GET_VALUE);

		HashMap<String, String> paramMap = new HashMap<String, String>();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0211);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { getServiceFormBean() };

		// DataBean-BPマッピング
		FUSV0211_FUSV0211OPDBMapper mapper = new FUSV0211_FUSV0211OPDBMapper();

		// 実行条件用にデータをセットする
		inputMap.put("pass", JFUWebCommon.getEncryptResultPassword(pass)); // 量販訪販ユーザーパスワード 暗号化して渡す
		inputMap.put("screenId", JFUScreenConst.SCREEN_ID_FUW00950);

		// サービスの入力値設定
		mapper.setEZM0501A010(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		try
		{
			// サービス呼出 
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException jwse)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		mapper.getEZM0501A010(paramBean, outputMap);
	}

	/**
	 * 次へボタン押下時の引継情報を共有フォームBeanに設定する。
	 * @param tantosha_nm
	 */
	private void setTransferInfoByNext(String tantosha_nm)
	{
		//サービスフォームBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// 共有フォームBeanの取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// WEB新規情報を取得
		X31SDataBeanAccess webNewInfoBean = getWebNewInfo(commonInfoBean);

		// その他情報を取得
		X31SDataBeanAccess elseInfoBean = getelseInfo(webNewInfoBean);

		// 担当者IDを取得(画面入力値)
		String tantoshaId = serviceFormBean.sendMessageString(FUW00950SFConst.TANTOSHA_ID, X31CWebConst.DATABEAN_GET_VALUE);

		elseInfoBean.sendMessageString(CommonInfoCFConst.TANTOSHA_ID_18, X31CWebConst.DATABEAN_SET_VALUE, tantoshaId);

		// ユーザー名を設定
		elseInfoBean.sendMessageString(CommonInfoCFConst.TANTOSHA_NM_18, X31CWebConst.DATABEAN_SET_VALUE, tantosha_nm);
	}

	/**
	 * 共有フォームBeanに遷移先情報を設定する。
	 * <BR>
	 * @param pstrNextScreenId 遷移先画面ID
	 * @param pstrNextScreenName 遷移先画面名
	 */
	private void setNextScreenInfo(String pstrNextScreenId, String pstrNextScreenName)
	{
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 遷移先画面ID
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, pstrNextScreenId);

		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, pstrNextScreenName);
	}

	/**
	 * フロント業務リスト
	 * @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;
	}

	/**
	 * その他情報
	 * @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;
	}

	/**
	 * 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;
	}

	/**
	 * 業務規制情報を設定する。
	 * @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);
		}
	}

}
