/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0238_FUSV0238OPDBMapper
*	ソースファイル名：FUSV0238_FUSV0238OPDBMapper.java
*	作成者			：FJ
*	日付			：2012年06月06日
*＜機能概要＞
*	BP（eo光ネット長割申込(申込)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/06/06  FJ)南岡	    【ANK-0392-00-00】長期割引契約制度対応
*	v4.00		2012/10/09  FJ)岡井	    【ANK-1223-00-00】進捗補足事項編集対応
*   v4.00       2012/11/21  FJ)中谷	    【IT1-2012-0001900】割引サービス契約の開始対応
*   v4.00       2012/11/23  FJ)岡井	    【IT2-2012-0001761】課金先スキーマにレコード作成しない対応
*   v4.00       2012/12/14  FJ)岡井	    【IT2-2012-0002075】長割適用開始年月日不正対応
*   v4.00       2012/12/18  FJ)岡井	    【TAI-2012-0000136】不要な呼び出しを削除
*	v26.00      2016/08/03  FJ)横山	    【ANK-2894-00-00】消費者保護ルール見直し追加対応（長割／即割の契約内容通知書）
*   
**********************************************************************/
package eo.web.webview.mapping;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
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.FUW10501SF.FUW10501SFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 *
 * @author 富士通
 */
public class FUSV0238_FUSV0238OPDBMapper
{
	// ■DataBean操作種別
	/** DataBean操作種別：項目値取得 */
	private static final String GET = X31CWebConst.DATABEAN_GET_VALUE;

	// ■SC名
	/** 申込内容承認登録SC */
	private static final String FUSV023801SC = "FUSV023801SC";
	/** 割引サービス対象サービス一覧照会SC */
	private static final String FUSV023802SC = "FUSV023802SC";
	/** 割引サービス契約登録SC */
	private static final String FUSV023803SC = "FUSV023803SC";
	/** 割引サービス契約課金開始日変更SC */
	private static final String FUSV023804SC = "FUSV023804SC";
	/** 進捗登録SC */
	private static final String FUSV023806SC = "FUSV023806SC";
	/** 申込明細照査・後続業務依頼SC */
	private static final String FUSV023807SC = "FUSV023807SC";
	/** ANK-2894-00-00 add start */
	/** サービスIF結果データ移送CC */
	private static final String FUSV023801CC = "FUSV023801CC";
	/** 契約内容通知書登録CC */
	private static final String FUSV023802CC = "FUSV023802CC";
	/** ANK-2894-00-00 add end */

	// ■SCリスト名
	/** 申込内容承認登録明細 */
	private static final String EKK0011D020CBSMSG1LIST = "EKK0011D020CBSMsg1List";
	/** 割引サービス対象サービス一覧照会明細 */
	private static final String EKK0851B001CBSMSG1LIST = "EKK0851B001CBSMsg1List";
	/** 割引サービス対象契約明細 */
	private static final String EKK0451D010CBSMSG1LIST = "EKK0451D010CBSMsg1List";
	/** 割引サービス対象契約明細 */
	private static final String EKK0451D010CBSMSG3LIST = "EKK0451D010CBSMsg3List";
	/** 異動理由明細 */
	private static final String EKK1091D010CBSMSG1LIST = "EKK1091D010CBSMsg1List";

	// ■項目ID
	/** sysid */
	private static final String SYSID = "sysid";
	/** ＫＥＹ＿料金グループコード */
	private static final String KEY_PRC_GRP_CD = "key_prc_grp_cd";
	/** ＫＥＹ＿料金コースコード */
	private static final String KEY_PCRS_CD = "key_pcrs_cd";
	/** ＫＥＹ＿料金プランコード */
	private static final String KEY_PPLAN_CD = "key_pplan_cd";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** 割引サービス対象契約適用終了年月日 */
	private static final String WRISVC_TG_KEI_TENDYMD = "wrisvc_tg_kei_tendymd";
	/** 更新年月日時分秒(更新前) */
	private static final String UPD_DTM_BF = "upd_dtm_bf";
	/** 請求契約番号 */
	private static final String SEIKY_KEI_NO = "seiky_kei_no";
	/** 割引サービス契約自動継続識別コード */
	private static final String WRIB_SVC_KEI_AT_KEIZK_SKCD = "wrib_svc_kei_at_keizk_skcd";
	/** 進捗特記事項1 */
	private static final String PRG_TKJK_1 = "prg_tkjk_1";
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** ANK-2894-00-00 add start */
	/** 移送キー１ */
	private static final String TRANS_KEY_1 = "key_1";
	/** マップキー 移送先名取得 */
	private static final String KEY_TRAN_NAME = "tranNm";
	/** マップキー キーカウント */
	private static final String KEY_KEY_CNT = "key_cnt";
	/** 契約内容通知書(契約内容通知書オンラインフラグ) */
	private static final String KNYTCS_KNYTCS_ON_FLG = "knytcs_on_flg";
	/** 契約内容通知書(異動区分) */
	private static final String KNYTCS_IDO_DIV = "ido_div";
	/** 契約内容通知書(SYSID) */
	private static final String KNYTCS_SYSID = "sysid";
	/** 契約内容通知書(サービス契約回線内訳番号) */
	private static final String KNYTCS_SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no";
	/** 契約内容通知書(申込番号) */
	private static final String KNYTCS_MSKM_NO = "mskm_no";
	/** 契約内容通知書(運用日) */
	private static final String KNYTCS_UNYO_YMD = "unyo_ymd";
	/** 契約内容通知書(サービス契約番号(ネット用)) */
	private static final String KNYTCS_SVC_KEI_NO_NET = "svc_kei_no_net";
	/** 契約内容通知書(異動区分(ネット用)) */
	private static final String KNYTCS_IDO_DIV_NET = "ido_div_net";
	/** ANK-2894-00-00 add end */

	// ■その他
	/** 特記事項１要素を取得する際のid */
	private static final String PRGADD_ID = "0";
	/** 定義取得パス 進捗特記事項1 */
	private static final String PATH_SHINCHOKU = "DISPSETTING/SETTING[@screenId='FUW10502']/DISPTEXT[@groupid='SHINCHOKU']";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";
	/** 置換文字列：%0% */
	private static final String REPLACE_STR_0 = "%0%";
	/** 置換文字列：%1% */
	private static final String REPLACE_STR_1 = "%1%";
	/** 定義XML項目取得ID：申込 */
	private static final String XML_ID_MSKM = "mskm";
	/** 定義XML項目取得ID：自動継続する */
	private static final String JDKEI_SURU = "jdkei_suru";
	/** 定義XML項目取得ID：自動継続しない */
	private static final String JDKEI_SHINAI = "jdkei_shinai";
	/** ANK-2894-00-00 add start */
	/** copyHakkoSodArray 申込番号 */
	private static final String TRANS_KEY_1_VALUE = FUSV023801SC + "::mskm_no,:::" + KNYTCS_MSKM_NO;
	/** データ移送数 */
	private static final String DATA_TRANS_CNT = "1";
	/** 契約内容通知書オンラインフラグ 1:コース変更(ネット) */
	private static final String KNYTCS_ON_FLG_ARI = "1";
	/** ANK-2894-00-00 add end */

	/**
	 * コンストラクタ
	 */
	public FUSV0238_FUSV0238OPDBMapper()
	{
	}

	/**
	 * 申込内容承認登録SCの上りマッピング処理です。
	 *
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023801SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);
		// SYSID
		parentMap.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, GET));

		// 申込内容承認登録明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		arrayList.add(detailMap);
		parentMap.put(EKK0011D020CBSMSG1LIST, arrayList);

		outputMap.put(FUSV023801SC, parentMap);

		return outputMap;
	}

	/**
	 * 割引サービス対象サービス一覧照会SCの上りマッピング処理です。
	 *
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023802SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);
		// ＫＥＹ＿料金グループコード
		parentMap.put(KEY_PRC_GRP_CD, bean[2].sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, GET));
		// ＫＥＹ＿料金コースコード
		parentMap.put(KEY_PCRS_CD, bean[2].sendMessageString(CommonInfoCFConst.PCRS_CD_23, GET));
		// ＫＥＹ＿料金プランコード
		parentMap.put(KEY_PPLAN_CD, bean[2].sendMessageString(CommonInfoCFConst.PPLAN_CD_23, GET));

		// 割引サービス対象サービス一覧照会明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		arrayList.add(detailMap);
		parentMap.put(EKK0851B001CBSMSG1LIST, arrayList);

		outputMap.put(FUSV023802SC, parentMap);

		return outputMap;
	}

	/**
	 * 割引サービス契約登録SCの上りマッピングを処理です。
	 *
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023803SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) throws Exception
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);
		// SYSID
		parentMap.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, GET));
		// 更新年月日時分秒(更新前)
		parentMap.put(UPD_DTM_BF, bean[2].sendMessageString(CommonInfoCFConst.LAST_UPD_DTM_23, GET));

		// 割引サービス対象契約明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		// サービス契約番号
		detailMap.put(SVC_KEI_NO, bean[2].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, GET));
		// 割引サービス対象契約適用終了年月日
		detailMap.put(WRISVC_TG_KEI_TENDYMD, JFUStrConst.DEFAULT_YYYYMMDD);

		arrayList.add(detailMap);
		parentMap.put(EKK0451D010CBSMSG1LIST, arrayList);

		ArrayList arrayList3 = new ArrayList<HashMap>();
		HashMap detailMap3 = new HashMap();

		arrayList3.add(detailMap3);
		parentMap.put(EKK0451D010CBSMSG3LIST, arrayList3);

		outputMap.put(FUSV023803SC, parentMap);

		return outputMap;
	}

	/**
	 * 割引サービス契約課金開始日変更SCの上りマッピング処理です。
	 *
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023804SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);
		// 割引サービス契約自動継続識別コード
		parentMap.put(WRIB_SVC_KEI_AT_KEIZK_SKCD, bean[0].sendMessageString(FUW10501SFConst.AFTER_WRIB_SVC_KEI_AT_KEIZK_SKCD, GET));

		outputMap.put(FUSV023804SC, parentMap);

		return outputMap;
	}

	/**
	 * 進捗登録SCの上りマッピング処理です。
	 *
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023806SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);
		// 請求契約番号
		parentMap.put(SEIKY_KEI_NO, bean[3].sendMessageString(CommonInfoCFConst.SEIKY_KEI_NO_32, GET));
		// サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, GET));

		// 進捗特記事項1
		try
		{
			// クラス名を取得
			Map<String, String> shinchokuMap = JFUWebCommon.getDispItemsAsMap(PATH_SHINCHOKU, QUERY_ATTR_NAME);
			// 自動継続フラグ
			boolean autoKeiFlg = bean[0].sendMessageBoolean(FUW10501SFConst.MSKM_AUTO_KEIZK, GET);
			// 文言格納用変数
			String mongon1 = JFUStrConst.EMPTY;
			String mongon2 = JFUStrConst.EMPTY;
			// 項目値設定用変数
			String prgTkjk1 = JFUStrConst.EMPTY;

			if (shinchokuMap != null && shinchokuMap.size() > 0)
			{
				// 申込種別文言取得
				mongon1 = shinchokuMap.get(XML_ID_MSKM);

				// 自動継続文言取得
				if (autoKeiFlg)
				{
					// 自動継続する場合
					mongon2 = shinchokuMap.get(JDKEI_SURU);
				}
				else
				{
					// 自動継続しない場合
					mongon2 = shinchokuMap.get(JDKEI_SHINAI);
				}
			}

			// 文字列
			if (mongon1 != null && mongon1.length() > 0 && mongon2 != null && mongon2.length() > 0)
			{
				prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW10502, PRGADD_ID);
				prgTkjk1 = prgTkjk1.replace(REPLACE_STR_0, mongon1);
				prgTkjk1 = prgTkjk1.replace(REPLACE_STR_1, mongon2);
			}

			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から正常に取得できませんでした。処理は続行します。");
		}

		// 異動理由明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		arrayList.add(detailMap);
		parentMap.put(EKK1091D010CBSMSG1LIST, arrayList);

		outputMap.put(FUSV023806SC, parentMap);

		return outputMap;
	}

	/**
	 * 申込明細照査・後続業務依頼SCの上りマッピング処理です。
	 *
	 * <br>
	 * @param bean データBean配列
	 * @param outputMap アウトマップ
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023807SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(FUSV023807SC, parentMap);

		return outputMap;
	}

	/** ANK-2894-00-00 add start */

	/**
	 * サービスIF結果データ移送(JFUTransferCC)の上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV023801CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// データ移送数
		parentMap.put(KEY_KEY_CNT, DATA_TRANS_CNT);

		// データ移送先
		parentMap.put(KEY_TRAN_NAME, FUSV023802CC);

		// ●申込番号
		// 申込内容承認登録SC(FUSV023801SC).申込番号を
		// 契約内容通知書登録CC(FUSV023802CC).申込番号に設定する。
		parentMap.put(TRANS_KEY_1, TRANS_KEY_1_VALUE);

		outputMap.put(FUSV023801CC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピング項目設定(契約内容通知書登録CC)
	 * 
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code
	 * @param bl
	 * @return outputMap（上りマッピング）
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV023802CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, X31BWebBusinessLogic bl)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 契約内容通知書オンラインフラグ
		parentMap.put(KNYTCS_KNYTCS_ON_FLG, KNYTCS_ON_FLG_ARI);
		// 異動区分
		parentMap.put(KNYTCS_IDO_DIV, JFUStrConst.CD00576_00049);
		// SYSID
		parentMap.put(KNYTCS_SYSID, (String)bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, GET));
		// サービス契約回線内訳番号
		parentMap.put(KNYTCS_SVC_KEI_KAISEN_UCWK_NO,
				(String)bean[6].sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_25, GET));
		// 運用日
		parentMap.put(KNYTCS_UNYO_YMD, JFUWebCommon.getOpeDate(bl, null));
		// サービス契約番号(ネット用)
		parentMap.put(KNYTCS_SVC_KEI_NO_NET,
				(String)bean[2].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, GET));
		// 異動区分(ネット用)
		parentMap.put(KNYTCS_IDO_DIV_NET, JFUStrConst.CD00576_00049);

		outputMap.put(FUSV023802CC, parentMap);

		return outputMap;
	}
	/** ANK-2894-00-00 add end */
}
