/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0354_FUSV0354OPDBMapper
*	ソースファイル名：FUSV0354_FUSV0354OPDBMapper.java
*	作成者			：富士通
*	日付			：2022年01月12日
*＜機能概要＞
*	BP(Ｗｅｂアクセス情報取得)へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v57.00      2021/12/28  FJ）張本    【ANK-4170-00-00】eフロントの改善要望に関するeo顧客基幹SのAPI・画面連携変更対応(2022年1月下旬リリース)
*   v57.01      2022/02/09  FJ) 張本    【ANK-4173-00-00】【eo顧客】解約後の契約情報表示、再申込対応
*   
**********************************************************************/
package eo.web.webview.mapping;

import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;
import eo.common.util.JKKStringUtil;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 * 
 * <br>
 * @author 富士通
 */
public class FUSV0354_FUSV0354OPDBMapper
{
	/** 量販訪販Ｗｅｂアクセス認証キー取得CC */
	private static final String FUSV035401CC = "FUSV035401CC";

	/** Ｗｅｂアクセス認証キー */
	private static final String WEB_ACCSS_NSKEY = "web_accss_nskey";
	/** ユーザID */
	private static final String USER_ID = "user_id";

	/** ＣＣ出力マップ項目(Web申込機能コード) */
	private static final String WEB_MSMK_FUNC_CD = "webMskmFuncCode";
	/** ＣＣ出力マップ項目(SYSID) */
	private static final String SYSID = "sysid";
	/** ＣＣ出力マップ項目(サービス契約回線内訳番号) */
	private static final String SVC_KEI_KAISEN_UCWK_NO = "svcKeiKaisenUcwkNo";
	/** ＣＣ出力マップ項目(申込回線サービス) */
	private static final String MSKM_KSN_SVC = "mskmKsnSvc";
	/** ＣＣ出力マップ項目(署名必須) */
	private static final String SIGN_REQ = "signReq";
	/** ＣＣ出力マップ項目(代理店コード) */
	private static final String AGNT_CD = "agnt_cd";
	/** ＣＣ出力マップ項目(代理店名) */
	private static final String AGNT_NM = "agnt_nm";
	/** ＣＣ出力マップ項目(ユーザ名) */
	private static final String USER_NM = "user_nm";
	/** ＣＣ出力マップ項目(フロントログイン制御コード) */
	private static final String FRNT_LOGIN_CTRL_CD = "frnt_login_ctrl_cd";
	/** ＣＣ出力マップ項目(認証結果フラグ) */
	private static final String NINSHO_RESULT_FLG = "ninsho_result_flg";

	/** 認証結果フラグ：正常 */
	private static final String NINSHO_RESULT_FLG_0 = "0";

	
	/**
	 * 上りマッピングをします。
	 * 
	 * <br>
	 * @param bean  サービスフォームBean
	 * @param outputMap
	 * @return HashMap
	 */
	public HashMap<String, Object> setFUSV035401CC(X31SDataBeanAccess bean, HashMap<String, Object> outputMap)
	{

		X31SDataBeanAccess redInfoBean = bean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO).getDataBean(0);
		X31SDataBeanAccess elseInfoBean = bean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO).getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// IN項目:Ｗｅｂアクセス認証キー
		parentMap.put(WEB_ACCSS_NSKEY, redInfoBean.sendMessageString(CommonInfoCFConst.WEB_ACCSS_NSKEY_17, X31CWebConst.DATABEAN_GET_VALUE));
		// IN項目:ユーザID
		parentMap.put(USER_ID, elseInfoBean.sendMessageString(CommonInfoCFConst.TANTOSHA_ID_18, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV035401CC, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピングをします。
	 *
	 * <br>
	 * @param bean サービスフォームBean
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess getFUSV035401CC(X31SDataBeanAccess bean, HashMap<String, Object> outputMap) throws Exception
	{
		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV035401CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV035401CC);
		}

		if (parentMap != null)
		{

			// 認証チェック
			if (!NINSHO_RESULT_FLG_0.equals(parentMap.get(NINSHO_RESULT_FLG)))
			{
				// 正常以外の場合、システムエラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// ●ＷＥＢアクセス情報を取得
			X31SDataBeanAccess webAccInfoBean = bean.getDataBeanArray(CommonInfoCFConst.WEB_ACCESS_INFO).getDataBean(0);

			// ＷＥＢ申込機能コード
			String webMskmFuncCd = JKKStringUtil.nullToBlank((String)parentMap.get(WEB_MSMK_FUNC_CD));
			// SYSID
			String sysid = JKKStringUtil.nullToBlank((String)parentMap.get(SYSID));
			// サービス契約回線内訳番号
			String svcKeiKaisenUcwkNo = JKKStringUtil.nullToBlank((String)parentMap.get(SVC_KEI_KAISEN_UCWK_NO));
			// 署名必須
			String signRea = JKKStringUtil.nullToBlank((String)parentMap.get(SIGN_REQ));
			// 申込回線サービス
			String mskmKsnSvc = JKKStringUtil.nullToBlank((String)parentMap.get(MSKM_KSN_SVC));

			// ＷＥＢ申込機能コード
			webAccInfoBean.sendMessageString(CommonInfoCFConst.WEB_MSKM_FUNC_CD_69, X31CWebConst.DATABEAN_SET_VALUE, webMskmFuncCd);
			// SYSID
			webAccInfoBean.sendMessageString(CommonInfoCFConst.SYSID_69, X31CWebConst.DATABEAN_SET_VALUE, sysid);
			// サービス契約回線内訳番号
			webAccInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_69, X31CWebConst.DATABEAN_SET_VALUE, svcKeiKaisenUcwkNo);
			// タブレットフラグ
			bean.sendMessageString(CommonInfoCFConst.TABLET_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, signRea);
			// SYSID
			bean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_SET_VALUE, sysid);
			// 申込回線サービス
			bean.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_SET_VALUE, mskmKsnSvc);

			// 代理店ログイン処理
			agentLogin(bean, parentMap);

		}

		return bean;
	}

	/**
	 * 代理店ログイン処理 <BR>
	 * 
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	private void agentLogin(X31SDataBeanAccess webNewBean, HashMap parentMap) throws Exception
	{
		// ●その他情報を取得
		X31SDataBeanAccess elseInfoBean = webNewBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO).getDataBean(0);

		// 代理店コード
		String agentCd = JKKStringUtil.nullToBlank((String)parentMap.get(AGNT_CD));
		// 代理店名
		String agentNm = JKKStringUtil.nullToBlank((String)parentMap.get(AGNT_NM));
		// ユーザー名
		String userNm = JKKStringUtil.nullToBlank((String)parentMap.get(USER_NM));
		// フロントログイン制御コードを取得
		String type = JKKStringUtil.nullToBlank((String)parentMap.get(FRNT_LOGIN_CTRL_CD));

		// 共有フォームBeanに設定する。

		// 担当者名
		elseInfoBean.sendMessageString(CommonInfoCFConst.TANTOSHA_NM_18, X31CWebConst.DATABEAN_SET_VALUE, userNm);
		// 取扱店用取扱コード
		elseInfoBean.sendMessageString(CommonInfoCFConst.TORITEN_TORIATSUKAI_CD_18, X31CWebConst.DATABEAN_SET_VALUE, agentCd);
		// ＠＠＠＠＠ 取扱店用取扱コード（CommonInfoCFConst.TORITEN_TORIATSUKAI_CD_18）の設定ロジックを変更する場合は、申込経路（CommonInfoCFConst.MSKM_ROUTE_06）の設定も行うこと＠＠＠＠＠ #84498 ANK-4551-00-00
		// 取扱店ID
		elseInfoBean.sendMessageString(CommonInfoCFConst.TORIATSUKAI_ID_18, X31CWebConst.DATABEAN_SET_VALUE, agentCd);
		// 取扱店名
		elseInfoBean.sendMessageString(CommonInfoCFConst.TORIATSUKAI_NM_18, X31CWebConst.DATABEAN_SET_VALUE, agentNm);
		// ａｕショップ取扱フラグ
		elseInfoBean.sendMessageString(CommonInfoCFConst.AU_SHOP_TRAT_FLG_18, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getAuShopFlg(agentCd));

		// 販売タイプを設定
		if (JFUStrConst.CD01400_3.equals(type) || JFUStrConst.CD01400_1.equals(type))
		{
			// 量販
			webNewBean.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.HNBAI_TYPE_RYOHAN);
		}
		else if (JFUStrConst.CD01400_2.equals(type) || JFUStrConst.CD01400_4.equals(type))
		{
			// 訪販
			webNewBean.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.HNBAI_TYPE_HOHAN);
		}
		else
		{
			// 以外、システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
	}

}