/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0319_FUSV0319OPDBMapper
*	ソースファイル名：FUSV0319_FUSV0319OPDBMapper.java
*	作成者			：富士通
*	日付			：2018年06月25日
*＜機能概要＞
*	BP（mineoセット割適用可否照会・変更依頼)へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v39.0.0		2018/06/25	FJ 			【案件番号：ANK-3436-00-00】新規作成
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00116SF.FUW00116SFConst;
import eo.web.webview.FUW12201SF.FUW12201SFConst;

/**
 * DataBean-BPマッピングをします。
 *
 * <br>
 * @author 富士通
 */
public class FUSV0319_FUSV0319OPDBMapper
{
	/** mineoセット割適用可否照会・変更依頼CC */
	private static final String FUSV031901CC = "JFUMineoSetPlanRenkeiCC";

	/** ＫＥＹ＿更新区分 */
	private static final String KEY_KSN_KBN = "key_ksnKbn";
	/** ＫＥＹ＿リクエストID */
	private static final String KEY_REQUEST_ID = "key_requestID";
	/** ＫＥＹ＿運用日時 */
	private static final String KEY_OPERATE_DATETIME = "key_operateDateTime";
	/** ＫＥＹ＿処理区分 */
	private static final String KEY_PROCESSING_TYPE = "key_processingType";
	/** ＫＥＹ＿キャンペーンコード */
	private static final String KEY_DISCOUT_CODE = "key_discoutCode";
	/** ＫＥＹ＿サービス契約番号 */
	private static final String KEY_SERIVCE_NUM = "key_serivceNum";
	/** ＫＥＹ＿SYSID */
	private static final String KEY_SYSID = "key_sysid";
	/** ＫＥＹ＿請求先番号 */
	private static final String KEY_INVOICE_NUM = "key_invoiceNum";
	/** ＫＥＹ＿契約者住所コード */
	private static final String KEY_CONTRACTOR_ADDRESS_CODE = "key_contractorAddressCode";
	/** ＫＥＹ＿サービス */
	private static final String KEY_SERVICE = "key_service";
	/** ＫＥＹ＿料金グループ */
	private static final String KEY_FEE_GROUP = "key_feeGroup";
	/** ＫＥＹ＿料金コース */
	private static final String KEY_FEE_COURCE = "key_feeCource";
	/** ＫＥＹ＿料金プラン */
	private static final String KEY_FEE_PLAN = "key_feePlan";
	/** ＫＥＹ＿契約形態コード */
	private static final String KEY_CONTRACT_FORM = "key_contractForm";
	/** ＫＥＹ＿申込日 */
	private static final String KEY_SUBSCRIPTION_DATE = "key_subscriptionDate";
	/** ＫＥＹ＿照査日 */
	private static final String KEY_INSPECTION_DATE = "key_inspectionDate";
	/** ＫＥＹ＿受付番号 */
	private static final String KEY_ACCEPTANCE_NUM = "key_acceptanceNum";
	/** ＫＥＹ＿契約状態 */
	private static final String KEY_CONTRACT_CONDITION = "key_contractCondition";
	/** ＫＥＹ＿利用場所住所コード */
	private static final String KEY_USINGPLACE_ADDRESS_CODE = "key_usingPlaceAddressCode";
	/** ＫＥＹ＿回線内訳番号 */
	private static final String KEY_LINE_NUM = "key_lineNum";
	/** ＫＥＹ＿入力mineo受付番号・電話番号 */
	private static final String KEY_INPUT_MINE_NUM = "key_inputMineNum";
	/** ＫＥＹ＿入力解除メール通知有無1 */
	private static final String KEY_KEI_1_MAIL_SEND_FLAG = "key_kei_1_mail_send_flag";
	/** ＫＥＹ＿入力解除メール通知有無2 */
	private static final String KEY_KEI_2_MAIL_SEND_FLAG = "key_kei_2_mail_send_flag";


	/**
	 * 上りマッピングをする
	 * @param bean [0]：共有フォームBean
	 * @param bean [1]：サービスフォームBean
	 * @param outputMap 設定値格納マップ
	 * @param argKsnKbn 更新区分
	 * @param argProcessingType 処理区分
	 * @param argOpeDateTimeStamp 運用日時分秒ミリ秒
	 * @return HashMap 結果マップ
	 */
	public HashMap<String, Object> setFUSV031901CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String argKsnKbn, String argOpeDateTimeStamp) 
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = bean[0];
		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = bean[1];
		
		if ("1".equals(argKsnKbn)) {
			// 新規系
			// ■ＷＥＢ新規情報
			X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
			// ■契約サービス情報
			X31SDataBeanAccess keiSvcBean = webNewBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO).getDataBean(0);
			// ■eo光ネット
			X31SDataBeanAccess eoNetBean = webNewBean.getDataBeanArray(CommonInfoCFConst.EONET).getDataBean(0);
			// ■PASCO
			X31SDataBeanAccess pascoBean = webNewBean.getDataBeanArray(CommonInfoCFConst.PASCO_INFO).getDataBean(0);
			// ■マンション情報
			X31SDataBeanAccess mansionBean = webNewBean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO).getDataBean(0);
			// 申込時mineo番号を取得
			String strMineoSetPlanKbn = serviceFormBean.sendMessageString(FUW00116SFConst.MINEO_SETPLAN_KBN, X31CWebConst.DATABEAN_GET_VALUE);
			StringBuilder strMineoSetPlanNo = new StringBuilder();
			if ("1".equals(strMineoSetPlanKbn)) {
				// 受付番号で申請
				strMineoSetPlanNo.append(serviceFormBean.sendMessageString(FUW00116SFConst.MINEO_UKTK_NO, X31CWebConst.DATABEAN_GET_VALUE));
			} else if ("2".equals(strMineoSetPlanKbn)) {
				// 電話番号で申請
				strMineoSetPlanNo.append(serviceFormBean.sendMessageString(FUW00116SFConst.MINEO_TELNO_AREACD, X31CWebConst.DATABEAN_GET_VALUE))
						.append(serviceFormBean.sendMessageString(FUW00116SFConst.MINEO_TELNO_CITYCD, X31CWebConst.DATABEAN_GET_VALUE))
						.append(serviceFormBean.sendMessageString(FUW00116SFConst.MINEO_TELNO_LOCAL, X31CWebConst.DATABEAN_GET_VALUE));
			}

			// ＫＥＹ＿更新区分
			parentMap.put(KEY_KSN_KBN, argKsnKbn);
			// ＫＥＹ＿リクエストID
			StringBuilder sbRequestID = new StringBuilder();
			sbRequestID.append("1")
				.append("1")
				.append(webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE))
				.append(argOpeDateTimeStamp);
			parentMap.put(KEY_REQUEST_ID, sbRequestID.toString());
			// ＫＥＹ＿運用日時
			parentMap.put(KEY_OPERATE_DATETIME, argOpeDateTimeStamp);
			// ＫＥＹ＿処理区分
			parentMap.put(KEY_PROCESSING_TYPE, "1");
			// ＫＥＹ＿キャンペーンコード
			parentMap.put(KEY_DISCOUT_CODE, serviceFormBean.sendMessageString(FUW00116SFConst.MINEO_SETPLAN_WRIB_CD, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿サービス契約番号
			parentMap.put(KEY_SERIVCE_NUM, eoNetBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_11, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿SYSID
			parentMap.put(KEY_SYSID, webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿請求先番号
			parentMap.put(KEY_INVOICE_NUM, "");
			// ＫＥＹ＿料金グループ
			String strFeeGroup = eoNetBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_11, X31CWebConst.DATABEAN_GET_VALUE);
			parentMap.put(KEY_FEE_GROUP, strFeeGroup);
			// ＫＥＹ＿契約者住所コード
			if (JFUStrConst.CD00133_02.equals(strFeeGroup)) {
				// 料金グループコード eo光ネットホームタイプの場合は、ＰＡＳＣＯ情報 住所コード
				parentMap.put(KEY_CONTRACTOR_ADDRESS_CODE, pascoBean.sendMessageString(CommonInfoCFConst.ADDCD_07, X31CWebConst.DATABEAN_GET_VALUE));
			} else {
				// 料金グループコード eo光ネットホームタイプ以外の場合は、マンション情報 マンション物件住所コード
				parentMap.put(KEY_CONTRACTOR_ADDRESS_CODE, mansionBean.sendMessageString(CommonInfoCFConst.MANSION_BUKKEN_AD_CD_16, X31CWebConst.DATABEAN_GET_VALUE));
			}
			// ＫＥＹ＿サービス
			parentMap.put(KEY_SERVICE, JFUStrConst.CD00130_01);
			// ＫＥＹ＿料金コース
			parentMap.put(KEY_FEE_COURCE, eoNetBean.sendMessageString(CommonInfoCFConst.PCRS_CD_11, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿料金プラン
			parentMap.put(KEY_FEE_PLAN, eoNetBean.sendMessageString(CommonInfoCFConst.PPLAN_CD_11, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿契約形態コード
			parentMap.put(KEY_CONTRACT_FORM, mansionBean.sendMessageString(CommonInfoCFConst.PAYWAY_CD_16, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿申込日
			parentMap.put(KEY_SUBSCRIPTION_DATE, argOpeDateTimeStamp.substring(0, 8));
			// ＫＥＹ＿照査日
			parentMap.put(KEY_INSPECTION_DATE, argOpeDateTimeStamp.substring(0, 8));
			// ＫＥＹ＿受付番号
			parentMap.put(KEY_ACCEPTANCE_NUM, keiSvcBean.sendMessageString(CommonInfoCFConst.MSKMSHO_NO_10, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿契約状態
			parentMap.put(KEY_CONTRACT_CONDITION, JFUStrConst.CD00037_020);
			// ＫＥＹ＿利用場所住所コード
			parentMap.put(KEY_USINGPLACE_ADDRESS_CODE, "");
			// ＫＥＹ＿回線内訳番号
			parentMap.put(KEY_LINE_NUM, keiSvcBean.sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_10, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿入力mineo受付番号・電話番号 */
			parentMap.put(KEY_INPUT_MINE_NUM, strMineoSetPlanNo.toString());
			// ＫＥＹ＿入力解除メール通知有無1
			parentMap.put(KEY_KEI_1_MAIL_SEND_FLAG, JFUStrConst.EMPTY);
			// ＫＥＹ＿入力解除メール通知有無2
			parentMap.put(KEY_KEI_2_MAIL_SEND_FLAG, JFUStrConst.EMPTY);
			
		} else if ("2".equals(argKsnKbn)) {
			// 変更系
			// ■ＷＥＢ変更系情報
			X31SDataBeanAccess webChgBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
			// ■SSO情報
			X31SDataBeanAccess ssoInfoBean = webChgBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO).getDataBean(0);
			// ■現顧客契約情報
			X31SDataBeanAccess custKeiInfoBean = webChgBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
			// ■サービス契約情報
			X31SDataBeanAccess svcKeiInfoBean = custKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);
			// ■サービス契約内訳情報
			X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_INFO).getDataBean(0);
			// ■請求契約情報
			X31SDataBeanAccess seikyKeiInfoBean = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO).getDataBean(0);

			// 申込時mineo番号を取得
			String strMineoSetPlanKbn = serviceFormBean.sendMessageString(FUW12201SFConst.MINEO_SETPLAN_KBN, X31CWebConst.DATABEAN_GET_VALUE);
			StringBuilder strMineoSetPlanNo = new StringBuilder();
			if ("1".equals(strMineoSetPlanKbn)) {
				// 受付番号で申請
				strMineoSetPlanNo.append(serviceFormBean.sendMessageString(FUW12201SFConst.MINEO_UKTK_NO, X31CWebConst.DATABEAN_GET_VALUE));
			} else if ("2".equals(strMineoSetPlanKbn)) {
				// 電話番号で申請
				strMineoSetPlanNo.append(serviceFormBean.sendMessageString(FUW12201SFConst.MINEO_TELNO_AREACD, X31CWebConst.DATABEAN_GET_VALUE))
						.append(serviceFormBean.sendMessageString(FUW12201SFConst.MINEO_TELNO_CITYCD, X31CWebConst.DATABEAN_GET_VALUE))
						.append(serviceFormBean.sendMessageString(FUW12201SFConst.MINEO_TELNO_LOCAL, X31CWebConst.DATABEAN_GET_VALUE));
			}

			// ＫＥＹ＿更新区分
			parentMap.put(KEY_KSN_KBN, argKsnKbn);
			// ＫＥＹ＿リクエストID
			StringBuilder sbRequestID = new StringBuilder();
			sbRequestID.append("1")
				.append("1")
				.append(ssoInfoBean.sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE))
				.append(argOpeDateTimeStamp);
			parentMap.put(KEY_REQUEST_ID, sbRequestID.toString());
			// ＫＥＹ＿運用日時
			parentMap.put(KEY_OPERATE_DATETIME, argOpeDateTimeStamp);
			// ＫＥＹ＿処理区分
			parentMap.put(KEY_PROCESSING_TYPE, "1");
			// ＫＥＹ＿キャンペーンコード
			parentMap.put(KEY_DISCOUT_CODE, serviceFormBean.sendMessageString(FUW12201SFConst.MINEO_SETPLAN_DSP_CAMPAIGN_CD, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿サービス契約番号
			parentMap.put(KEY_SERIVCE_NUM, ssoInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿SYSID
			parentMap.put(KEY_SYSID, ssoInfoBean.sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿請求先番号
			parentMap.put(KEY_INVOICE_NUM, seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.SEIKY_KEI_NO_32, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿契約者住所コード
			parentMap.put(KEY_CONTRACTOR_ADDRESS_CODE, custKeiInfoBean.sendMessageString(CommonInfoCFConst.KEISHA_AD_CD_22, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿サービス
			parentMap.put(KEY_SERVICE, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_CD_23, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿料金グループ
			parentMap.put(KEY_FEE_GROUP, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿料金コース
			parentMap.put(KEY_FEE_COURCE, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PCRS_CD_23, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿料金プラン
			parentMap.put(KEY_FEE_PLAN, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PPLAN_CD_23, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿契約形態コード
			parentMap.put(KEY_CONTRACT_FORM, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.KANYU_KEI_PAY_HOSHIKI_CD_23, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿申込日
			parentMap.put(KEY_SUBSCRIPTION_DATE, argOpeDateTimeStamp.substring(0, 8));
			// ＫＥＹ＿照査日
			parentMap.put(KEY_INSPECTION_DATE, "");
			// ＫＥＹ＿受付番号
			parentMap.put(KEY_ACCEPTANCE_NUM, "");
			// ＫＥＹ＿契約状態
			parentMap.put(KEY_CONTRACT_CONDITION, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_STAT_23, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿利用場所住所コード
			parentMap.put(KEY_USINGPLACE_ADDRESS_CODE, svcKeiUcwkInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_PLACE_AD_CD_26, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿回線内訳番号
			parentMap.put(KEY_LINE_NUM, svcKeiUcwkInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_26, X31CWebConst.DATABEAN_GET_VALUE));
			// ＫＥＹ＿入力mineo受付番号・電話番号 */
			parentMap.put(KEY_INPUT_MINE_NUM, strMineoSetPlanNo.toString());
			// ＫＥＹ＿入力解除メール通知有無1
			parentMap.put(KEY_KEI_1_MAIL_SEND_FLAG, JFUStrConst.EMPTY);
			// ＫＥＹ＿入力解除メール通知有無2
			parentMap.put(KEY_KEI_2_MAIL_SEND_FLAG, JFUStrConst.EMPTY);
		}
		
		outputMap.put(FUSV031901CC, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピングをする
	 * @param bean [0]：サービスフォームBean
	 * @param outputMap 設定値格納マップ
	 * @return X31SDataBeanAccess[] サービスフォームBean
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV031901CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		return bean;
	}
}
