/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0061_FUSV0061OPDBMapper
*	ソースファイル名：FUSV0061_FUSV0061OPDBMapper.java
*	作成者			：富士通
*	日付			：2011年07月14日
*＜機能概要＞
*	BP（メーリングリスト追加申込(確認)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/14	FJ）西川	新規作成
*	v3.00   	2012/04/22	FJ）山名	「ST2-2012-0000664」SOD入力パラメータ修正
*   v4.00 	    2012/07/05  FJ) 西村    【ANK-1163-00-00】 変更系申込が可能となるタイミングについて
*	v4.00		2012/10/02	FJ) 岡井	【ANK-1223-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 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.FUW02601SF.FUW02601SFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングを行います
 *
 * <br>
 * @author 富士通
 */
public class FUSV0061_FUSV0061OPDBMapper
{

	/** 申込内容承認登録(EKK0011D020) */
	private static final String SC_TITLE_FUSV006101 = "FUSV006101SC";
	/** オプションサービス契約<ISP>登録(EKK0361D010) */
	private static final String SC_TITLE_FUSV006102 = "FUSV006102SC";
	/** オプションサービス契約<ISP>照査SC */
	private static final String SC_TITLE_FUSV006108 = "FUSV006108SC";
	/** オプションサービス契約<ISP>照査締結(EKK0361C030) */
	private static final String SC_TITLE_FUSV006103 = "FUSV006103SC";
	/** オプションサービス契約<ISP>開始(EKK0361C040) */
	private static final String SC_TITLE_FUSV006104 = "FUSV006104SC";
	/** エイジング対象登録(EZM0111D010) */
	private static final String SC_TITLE_FUSV006105 = "FUSV006105SC";
	/** 進捗登録(EKK1091D010) */
	private static final String SC_TITLE_FUSV006106 = "FUSV006106SC";
	/** 申込明細照査・後続業務依頼(EKK0021C060) */
	private static final String SC_TITLE_FUSV006107 = "FUSV006107SC";
	/** サービスIF結果移送コモンコンポーネント部品 */
	private static final String CC_TITLE_FUSV006101 = "FUSV006101CC";
	/** サービスオーダ発行コモンコンポーネント部品 */
	private static final String CC_TITLE_FUSV006102 = "FUSV006102CC";

	/** 進捗登録.異動理由明細 */
	private static final String EKK1091D010_LIST = "EKK1091D010CBSMsg1List";
	/** 申込内容承認登録.申込内容承認登録明細 */
	private static final String EKK0011D020_LIST = "EKK0011D020CBSMsg1List";

	/** マップキー キーカウント */
	private static final String KEY_KEY_CNT = "key_cnt";
	/** マップキー キーカウント */
	private static final String KEY_CNT = "2";
	/** マップキー 移送先名取得 */
	private static final String KEY_TRAN_NAME = "tranNm";
	/** 変更後オプションサービス契約番号 */
	private static final String TRANS_KEY_1 = "key_1";
	/** 変更後オプションサービス契約番号 */
	private static final String TRANS_KEY_1_VALUE = "FUSV006102SC::op_svc_kei_no,trgt_data_list:opsvkei_info:chaf_opsvkei_no";
	/** 変更後オプションサービス契約世代登録年月日時分秒 */
	private static final String TRANS_KEY_2 = "key_2";
	/** 変更後オプションサービス契約世代登録年月日時分秒 */
	private static final String TRANS_KEY_2_VALUE = "::kk0351_gene_add_dtm,trgt_data_list:opsvkei_info:chaf_opsvkei_gene_add_dtm";
	/** SCタイトル格納用 */
	private static final HashMap<String, String> SC_MAPPING = new HashMap<String, String>();
	static
	{
		SC_MAPPING.put(JFUStrConst.CD00037_020, SC_TITLE_FUSV006108);
		SC_MAPPING.put(JFUStrConst.CD00037_030, SC_TITLE_FUSV006103);
		SC_MAPPING.put(JFUStrConst.CD00037_100, SC_TITLE_FUSV006104);
	}
	/** SYSID */
	private static final String SYSID = "sysid";
	/** 請求契約番号 */
	private static final String SEIKY_KEI_NO = "seiky_kei_no";
	/** メーリングリスト名 */
	private static final String MLLIST_NM = "mllist_nm";
	/** メーリングリスト呼称 */
	private static final String MLLIST_KOSHO = "mllist_kosho";
	/** メーリングリスト公開要否 */
	private static final String MLLIST_KOKAI_YH = "mllist_kokai_yh";
	/** メーリングリスト最大ユーザー数 */
	private static final String MLLIST_MAX_USER_CNT = "mllist_max_user_cnt";
	/** メーリングリスト管理者メールアドレス */
	private static final String MLLIST_KRISHA_MLAD = "mllist_krisha_mlad";
	/** エイジング対象値 */
	private static final String AGING_TG_VALUE = "aging_tg_value";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** 更新年月日時分秒（更新前） */
	private static final String UPD_DTM_DF = "upd_dtm_bf";
	/** 進捗特記事項1 */
	private static final String PRG_TKJK_1 = "prg_tkjk_1";

	/** マップキー 異動区分 */
	private static final String MAPKEY_IDO_DIV = "ido_div";
	/** マップキー オーダ発行 SOD基本情報 */
	private static final String MAPKEY_SOD_KIHON_INFO = "sod_kihon_info";
	/** SOD基本情報 */
	private static final String SOD_KIHON_INFO = "sod_kihon_info";
	/** サービス契約情報 */
	private static final String SVC_KEI_INFO = "svc_kei_info";
	/** サービスオーダ発行 対象データリスト */
	private static final String REQ_TRGT_DATA_LIST = "trgt_data_list";
	/** オプションサービス契約情報 */
	private static final String OPSVKEI_INFO = "opsvkei_info";
	/** オーダ発行 サービス契約内訳情報 */
	private static final String SVC_KEI_UCWK_INFO = "svc_kei_ucwk_info";

	/** マップキー オーダ発行 変更前オプションサービス契約番号 */
	private static final String MAPKEY_CHBF_OPSVKEI_NO = "chbf_opsvkei_no";
	/** マップキー オーダ発行 変更前オプションサービス契約 世代登録年月日時分秒 */
	private static final String MAPKEY_CHBF_GENE_ADD_DTM = "chbf_opsvkei_gene_add_dtm";

	/** 空文字 */
	private static final String STRING_EMPTY = JFUStrConst.EMPTY;

	/** 特記事項１要素を取得する際のid */
	private static final String PRGADD_ID = "0";

	/**
	 * コンストラクタ
	 */
	public FUSV0061_FUSV0061OPDBMapper()
	{
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006101SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 共有フォームBean.現顧客情報.SYSID → SYSID
		parentMap.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE));

		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();

		arrayList.add(detailMap);
		parentMap.put(EKK0011D020_LIST, arrayList);

		outputMap.put(SC_TITLE_FUSV006101, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006102SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// メーリングリスト追加申込.メーリングリスト名 → メーリングリスト名
		parentMap.put(MLLIST_NM, bean[0].sendMessageString(FUW02601SFConst.MLLIST_MEI, X31CWebConst.DATABEAN_GET_VALUE));

		// メーリングリスト追加申込.メーリングリスト呼称 → メーリングリスト呼称
		parentMap.put(MLLIST_KOSHO, bean[0].sendMessageString(FUW02601SFConst.MLLIST_KOSHO, X31CWebConst.DATABEAN_GET_VALUE));

		// メーリングリスト追加申込.選択された公開設定（値） → メーリングリスト公開要否
		parentMap.put(MLLIST_KOKAI_YH, bean[0].sendMessageString(FUW02601SFConst.CHOICE_KOKAI_SET_VALUE, X31CWebConst.DATABEAN_GET_VALUE));

		// メーリングリスト追加申込.メーリングリスト最大ユーザー数 → メーリングリスト最大ユーザー数
		parentMap.put(MLLIST_MAX_USER_CNT, bean[0].sendMessageString(FUW02601SFConst.MLLIST_MAX_USER_CNT, X31CWebConst.DATABEAN_GET_VALUE));

		// メーリングリスト追加申込.管理者アドレス → メーリングリスト管理者メールアドレス
		parentMap.put(MLLIST_KRISHA_MLAD, bean[0].sendMessageString(FUW02601SFConst.MLKRSHA_MLAD, X31CWebConst.DATABEAN_GET_VALUE));

		// 共有フォームBean.現顧客契約情報 ＳＹＳＩＤ → ＳＹＳＩＤ
		parentMap.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE));

		// 共有フォームBean.サービス契約情報.サービス契約番号 → サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[2].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		// 共有フォームBean.請求契約情報.請求契約番号 → 請求契約番号
		parentMap.put(SEIKY_KEI_NO, bean[3].sendMessageString(CommonInfoCFConst.SEIKY_KEI_NO_32, X31CWebConst.DATABEAN_GET_VALUE));
		// 共有フォームBean.サービス契約情報.最終更新年月日時分秒 → 更新年月日時分秒(更新前)
		parentMap.put(UPD_DTM_DF, bean[2].sendMessageString(CommonInfoCFConst.LAST_UPD_DTM_23, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(SC_TITLE_FUSV006102, parentMap);

		return outputMap;
	}

	/**
	 * SCの上りマッピングの処理です。
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込、[1]:共有フォームBean.オプションサービス契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006108SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(SC_TITLE_FUSV006108, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006103SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) throws Exception
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(SC_TITLE_FUSV006103, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006104SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(SC_TITLE_FUSV006104, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006105SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// メーリングリスト追加申込.メーリングリスト名 → エイジング対象値
		parentMap.put(AGING_TG_VALUE, bean[0].sendMessageString(FUW02601SFConst.MLLIST_MEI, X31CWebConst.DATABEAN_GET_VALUE)
				+ bean[0].sendMessageString(FUW02601SFConst.MLLIST_SUB_DOMAIN, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(SC_TITLE_FUSV006105, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006106SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 共有フォームBean.サービス契約情報.サービス契約番号 → サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[2].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		// 進捗特記事項1
		try
		{
			String prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW02602, 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から正常に取得できませんでした。処理は続行します。");
		}

		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();

		arrayList.add(detailMap);
		parentMap.put(EKK1091D010_LIST, arrayList);

		outputMap.put(SC_TITLE_FUSV006106, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV006107SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(SC_TITLE_FUSV006107, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います(データ移送)
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param bl
	 * @return
	 */
	public HashMap<String, Object> setFUSV006101CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, X31BWebBusinessLogic bl)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// データ移送数
		parentMap.put(KEY_KEY_CNT, KEY_CNT);

		// データ移送先
		parentMap.put(KEY_TRAN_NAME, CC_TITLE_FUSV006102);

		// 変更後オプションサービス契約番号
		parentMap.put(TRANS_KEY_1, TRANS_KEY_1_VALUE);
		// 変更後サブオプションサービス契約 世代登録年月日時分秒
		parentMap.put(TRANS_KEY_2, SC_MAPPING.get(JFUWebCommon.getSvcKeiStat(bl)) + TRANS_KEY_2_VALUE);

		// 共通情報のマッピング
		outputMap.put(CC_TITLE_FUSV006101, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングを行います
	 * <br>
	 * @param bean [0]:メーリングリスト追加申込
	 *              [1]:共有フォームBean.現顧客情報
	 *              [2]:共有フォームBean.サービス契約情報
	 *              [3]:共有フォームBean.請求契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	public HashMap<String, Object> setFUSV006102CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// SODマップ
		HashMap<String, Object> childMap = new HashMap<String, Object>();

		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		// SYSID
		sodKihonInfo.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE));
		// 異動区分
		sodKihonInfo.put(MAPKEY_IDO_DIV, JFUStrConst.CD00576_00031);
		childMap.put(MAPKEY_SOD_KIHON_INFO, sodKihonInfo);

		// SODマップに追加
		childMap.put(SOD_KIHON_INFO, sodKihonInfo);

		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		// サービス契約番号
		svcKeiInfo.put(SVC_KEI_NO, bean[2].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));

		// SODマップに追加
		childMap.put(SVC_KEI_INFO, svcKeiInfo);

		// サービス契約内訳情報
		HashMap<String, Object> svcKeiucwkInfo = new HashMap<String, Object>();
		childMap.put(SVC_KEI_UCWK_INFO, svcKeiucwkInfo);

		// オプションサービス契約情報
		HashMap<String, Object> opsvkeiInfo = new HashMap<String, Object>();

		// 空設定(変更前オプションサービス契約番号)
		opsvkeiInfo.put(MAPKEY_CHBF_OPSVKEI_NO, STRING_EMPTY);
		// 空設定(変更前オプションサービス契約 世代登録年月日時分秒)
		opsvkeiInfo.put(MAPKEY_CHBF_GENE_ADD_DTM, STRING_EMPTY);

		// SODマップに追加
		childMap.put(OPSVKEI_INFO, opsvkeiInfo);

		// 対象データリスト
		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
		// SODマップを対象データリストに追加
		arrayList.add(childMap);

		// 対象データリストをマップに追加
		parentMap.put(REQ_TRGT_DATA_LIST, arrayList);

		// 共通情報のマッピング
		outputMap.put(CC_TITLE_FUSV006102, parentMap);

		return outputMap;
	}

}