/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0318_FUSV0318OPDBMapper
*	ソースファイル名：FUSV0318_FUSV0318OPDBMapper.java
*	作成者			：FJ
*	日付			：2018年06月15日
*＜機能概要＞
*	BP（mineoセット割申込）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v38.00      2018/06/15  FJ) 美濃原    【ANK-3436-00-00】eo光×eo電気×mineoセット割対応
**********************************************************************/
package eo.web.webview.mapping;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCMConstants;
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.FUW00701SF.FUW00701SFConst;
import eo.web.webview.FUW09905SF.FUW09905SFConst;
import eo.web.webview.FUW12201SF.FUW12201SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 * @author FJ
 *
 */
public class FUSV0318_FUSV0318OPDBMapper
{

	/** mineoセット割適用可否照会・変更依頼CC */
	private static final String JFUMINEO_SETPLANR_RENKEI_CC = "JFUMineoSetPlanRenkeiCC";
	/** 進捗登録SC */
	private static final String FUSV031801SC = "FUSV031801SC";

	/** 進捗登録明細 */
	private static final String EKK1091D010CBSMSG1LIST = "EKK1091D010CBSMsg1List";

	/** 異動区分 */
	private static final String IDO_DIV = "ido_div";
	/** 異動理由 */
	private static final String IDO_DTM = "ido_dtm";
	/** 異動理由コード */
	private static final String IDO_RSN_CD = "ido_rsn_cd";
	/** 進捗年月日時分秒 */
	private static final String PRG_DTM = "prg_dtm";
	/** 進捗ステータス */
	private static final String PRG_STAT = "prg_stat";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";

	/** 進捗特記事項1 */
	private static final String PRG_TKJK_1 = "prg_tkjk_1";
	/** 特記事項１要素を取得する際のid */
	private static final String PRGADD_ID = "0";

	/** 更新区分 */
	private static final String KSN_KBN = "2";
	/** 処理区分 */
	private static final String PROCESSING_TYPE = "2";
	
	/** ＫＥＹ＿更新区分 */
	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";

	/**
	 * コンストラクタ
	 */
	public FUSV0318_FUSV0318OPDBMapper()
	{
	}

	/**
	 * mineoセット割適用可否照会・変更依頼CCの上りマッピングをします。
	 * <br>
	 * @param bean　[0]：共有フォームビーン　[1]：mineoセット割申込
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap
	 */
	public HashMap<String, Object> setFUSV031801CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String argOpeDateTimeStamp)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = bean[0];
		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = bean[1];
		
		// ■ＷＥＢ変更系情報
		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, KSN_KBN);
		// ＫＥＹ＿リクエストID
		StringBuilder sbRequestID = new StringBuilder();
		sbRequestID.append("1")
			.append(PROCESSING_TYPE)
			.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, PROCESSING_TYPE);
		// ＫＥＹ＿キャンペーンコード
		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, "1");
		// ＫＥＹ＿入力解除メール通知有無2
		parentMap.put(KEY_KEI_2_MAIL_SEND_FLAG, "1");
		
		outputMap.put(JFUMINEO_SETPLANR_RENKEI_CC, parentMap);

		return outputMap;
	}

	/**
	 * 進捗登録SCの上りマッピングをします。
	 * <br>
	 * @param bean　[0]：共有フォームビーン　[1]：mineoセット割申込
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param opeDateTimeStamp 運用日付タイムスタンプ
	 * @return HashMap
	 */
	public HashMap<String, Object> setFUSV031801SC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code, String opeDateTimeStamp)
	{
		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);

		// 部品呼び出し → 進捗登録.異動区分　「割引情報登録」
		parentMap.put(IDO_DIV, JFUStrConst.CD00576_00049);

		// 進捗特記事項1
		// 電場番号で申請時、受付番号で申請時の編集を変更する
		try
		{
			String prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW12202, PRGADD_ID);

			if (prgTkjk1 != null && prgTkjk1.length() > 0)
			{
				parentMap.put(PRG_TKJK_1, prgTkjk1);
			}
			else
			{
				DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
			}
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
		}

		// 運用日付 + 運用日付（時間） → 進捗登録マップ.異動年月日時分秒
		parentMap.put(IDO_DTM, JFUWebCommon.getSysDateTimeStamp());

		// 進捗ステータス「割引・キャンペーン登録完了」
		parentMap.put(PRG_STAT, JFUStrConst.CD00647_F050);

		// ■共有フォームBean
		X31SDataBeanAccess commonInfoBean = bean[0];
		// ■WEB変更
		X31SDataBeanAccess webchgBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// ■WEB変更 - 現顧客契約情報
		X31SDataBeanAccess genCustKei = webchgBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
		// ■現顧客契約情報 - サービス契約情報
		X31SDataBeanAccess svcKei = genCustKei.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);

		// サービス契約情報.サービス契約番号 → 進捗登録マップ.サービス契約番号
		parentMap.put(SVC_KEI_NO, svcKei.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		// 運用日付 + 運用日付（時間） → 進捗登録マップ.進捗年月日時分秒
		parentMap.put(PRG_DTM, opeDateTimeStamp);

		// 異動理由明細
		ArrayList<HashMap<String, String>> childList = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> childMap = new HashMap<String, String>();
		// 異動理由コード お客様理由
		childMap.put(IDO_RSN_CD, JFUStrConst.CD00846_F3);

		childList.add(childMap);
		parentMap.put(EKK1091D010CBSMSG1LIST, childList);
		outputMap.put(FUSV031801SC, parentMap);

		return outputMap;
	}

	/**
	 * mineoセット割適用可否照会・変更依頼CCの下りマッピング
	 * @param bean　[0]：共有フォームビーン　[1]：mineoセット割申込
	 * @param outputMap
	 * @return bean　[0]：共有フォームビーン　[1]：mineoセット割申込
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV031801CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		return bean;
	}

	/**
	 * 進捗登録SCの下りマッピング
	 * @param bean　[0]：共有フォームビーン　[1]：mineoセット割申込
	 * @param outputMap
	 * @return bean　[0]：共有フォームビーン　[1]：mineoセット割申込
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV031801SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV031801SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV031801SC);
		}

		ArrayList childList = null;

		return bean;
	}

}
