/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0613_KKSV0613OPDBMapper
*	ソースファイル名：KKSV0613_KKSV0613OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2012年08月16日
*＜機能概要＞
*	BP（eo光テレビ新コース登録／コース変更予約取消）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/08/16	Fujitsu		新規作成
*	v4.00.00	2012/11/27	FJ)磯俣		IT2-1817(対応履歴登録の置換文字列修正)
*	v4.00.01	2013/02/21	FJ)磯俣		【OT-2013-0000221】対応履歴へＴＶコース名を設定
*	v4.00.02	2013/07/09  FJ)磯俣		【IT1-2013-0001369】視聴制御対応
*  	v23.00.00   2015/10/16  FJ)松本     【ANK-2694-00-00】 ワンストップ案件（ＳＴＥＰ２）
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.commonOneStop.JCCWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0613_KKSV0613OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public KKSV0613_KKSV0613OPDBMapper(){
	}
	

	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：eo光テレビ新コース登録／コース変更予約取消
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV061301CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		
		// 最終更新年月日時分秒
		parentMap.put("upd_dtm_bf", bean[0].sendMessageString("最終更新年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
		// SYSID
		parentMap.put("sysid", bean[0].sendMessageString("ヘッダーＳＹＳＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// 申込種別コード
		parentMap.put("mskm_sbt_cd", "00007");
		// システム日付
		parentMap.put("mskm_uk_dtm", JCCWebCommon.getSysDateTimeStamp());
		// コンシューマ営業用申込状態識別コード
		parentMap.put("consmbsn_mskm_stat_skbt_cd", "04");
		// 異動区分
		parentMap.put("ido_div", bean[0].sendMessageString("異動区分", X31CWebConst.DATABEAN_GET_VALUE));
		// システム日付
		parentMap.put("ido_dtm", JCCWebCommon.getSysDateTimeStamp());
		// サービス契約番号
		parentMap.put("svkei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 運用日
		String unyoDay = bean[0].sendMessageString("運用日", X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("unyo_ymd", unyoDay);
		
		
		X31SDataBeanAccessArray svcList = bean[0].getDataBeanArray("ＳＴＢ変更申込情報リスト");
		
		X31SDataBeanAccess svcBean = null;
		int count = svcList.getCount().intValue();
		
		// 受渡し用リスト
		ArrayList<HashMap<String, Object>> svcParmList = new ArrayList<HashMap<String, Object>>();
		
		for (int i = 0; i < count; i++)
		{
			svcBean = svcList.getDataBean(i);
			HashMap<String, Object> childMap = new HashMap<String, Object>();

			String choice = svcBean.sendMessageString("選択保持", X31CWebConst.DATABEAN_GET_VALUE);
			if ("1".equals(choice))
			{
				// サービス契約内訳番号 → サービス契約内訳料金プラン変更中止.請求契約SYSID
				childMap.put("svc_kei_ucwk_no", svcBean.sendMessageString("サービス契約内訳番号", X31CWebConst.DATABEAN_GET_VALUE));
				// 進捗ステータス（コース変更予約取消）
				childMap.put("prg_stat", "1423");
				// 異動理由コード（その他）
				childMap.put("ido_rsn_cd", "56");
				// 料金コースコード
				childMap.put("pcrs_cd", svcBean.sendMessageString("ＴＶコースコード", X31CWebConst.DATABEAN_GET_VALUE));
				// 予約適用年月日
				childMap.put("rsv_aply_ymd", svcBean.sendMessageString("予約適用年月日", X31CWebConst.DATABEAN_GET_VALUE));
				// 機器製造番号
				childMap.put("key_kiki_seizo_no", svcBean.sendMessageString("機器製造番号", X31CWebConst.DATABEAN_GET_VALUE));
				// ＴＶコースコード
				childMap.put("key_pcrs_cd", svcBean.sendMessageString("ＴＶコースコード", X31CWebConst.DATABEAN_GET_VALUE));
				
				
				// ヘッダーSYSID
				childMap.put("wc0011d_sysid", bean[0].sendMessageString("ヘッダーＳＹＳＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
				// サービス契約番号
				childMap.put("wc0011d_svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
				// サービス契約内訳番号
				childMap.put("wc0011d_svc_kei_ucwk_no", svcBean.sendMessageString("サービス契約内訳番号", X31CWebConst.DATABEAN_GET_VALUE));
				// 型番号
				childMap.put("wca001_key_tk_mdl_cd", svcBean.sendMessageString("型番号", X31CWebConst.DATABEAN_GET_VALUE));
				// 機器製造番号
				childMap.put("wca001_key_kk_seizo_no", svcBean.sendMessageString("機器製造番号", X31CWebConst.DATABEAN_GET_VALUE));
				// 視聴制御依頼処理コード
				childMap.put("wc0011d_wctrl_req_trn_cd", "25");
				// C-CASカード番号
				childMap.put("wc0011d_ccas_card_no", svcBean.sendMessageString("ＣＣＡＳーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
				// B-CASカード番号
				childMap.put("wc0011d_bcas_card_no", svcBean.sendMessageString("ＢＣＡＳーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
				// C-CAS ID
				childMap.put("wc0011c1_ccas_card_no", svcBean.sendMessageString("ＣＣＡＳーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
				// B-CAS ID
				childMap.put("wc0011c1_bcas_card_no", svcBean.sendMessageString("ＢＣＡＳーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
			
				
				svcParmList.add(childMap);
			}
		}
		
		
		
		
		parentMap.put("KKSV061301CCList", svcParmList);
		
		outputMap.put("KKSV061301CC", parentMap);
		
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：eo光テレビ新コース登録／コース変更予約取消
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV061302CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		ArrayList list = null;

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// サービス契約番号 → ワンストップ対応履歴登録マップ.サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザーＩＤ → ワンストップ対応履歴登録マップ.ユーザーＩＤ
		parentMap.put("user_id", bean[1].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザー名 → ワンストップ対応履歴登録マップ.ユーザー名
		parentMap.put("user_nm", bean[1].sendMessageString("ユーザー名", X31CWebConst.DATABEAN_GET_VALUE));

		beanTemp = bean[1];
		if(beanTemp.getDataBeanArray("権限リスト").getCount() >= 2)
		{
			X31SDataBeanAccess kggrpCdListBean = beanTemp.getDataBeanArray("権限リスト").getDataBean(1);
			// 権限リスト.組織コード → ワンストップ対応履歴登録マップ.組織コード
			parentMap.put("org_cd", kggrpCdListBean.sendMessageString("組織コード", X31CWebConst.DATABEAN_GET_VALUE));
			// 権限リスト.組織名 → ワンストップ対応履歴登録マップ.組織名
			parentMap.put("org_nm", kggrpCdListBean.sendMessageString("組織名", X31CWebConst.DATABEAN_GET_VALUE));
		}
		
		// "KK_TV_CSCH_CL_TITLE" → ワンストップ対応履歴登録マップ.タイトルパラメータＩＤ
		parentMap.put("title_param_id", "KK_TV_CSCH_CL_TITLE");
		// ワンストップフラグ → ワンストップ対応履歴登録マップ.遷移フラグ
		parentMap.put("onestop_flg", bean[0].sendMessageString("遷移フラグ", X31CWebConst.DATABEAN_GET_VALUE));
		
		// ワンストップ対応履歴登録マップ.回答内容編集リストを回答内容の行数分作成する
		list = new ArrayList();
		HashMap childMap = null;
		
		// １行目「■回答内容」
		childMap = new HashMap();
		// "KK_TV_CSCH_CL_NYO_01" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
		childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_01");
		list.add(childMap);
		
		// ２行目「ワンストップによるオプションチャネル申込」
		childMap = new HashMap();
		// "KK_TV_CSCH_CL_NYO_02" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
		childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_02");
		list.add(childMap);
		
		// ３行目「・・・オプションチャンネル数分(START)・・・」
		childMap = new HashMap();
		// "KK_TV_CSCH_CL_NYO_03" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
		childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_03");
		list.add(childMap);
		
		// ４行目〜８行目は登録したオプションチャンネル数分設定する
		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray("ＳＴＢ変更申込情報リスト");
		
		
		
		for(int i = 0; i < arraybean.getCount(); i++)
		{
			X31SDataBeanAccess subbean = arraybean.getDataBean(i);
			
			String choice = subbean.sendMessageString("選択保持", X31CWebConst.DATABEAN_GET_VALUE);
			
			if ("1".equals(choice))
			{
				
				// ４行目「STB-ID：[@]」
				childMap = new HashMap();
				// "KK_TV_CSCH_CL_NYO_04" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
				childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_04");
				// "@" → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換前文字列１
				childMap.put("replace_mae1", "@");
				// ＳＴＢーＩＤ → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換後文字列１
				childMap.put("replace_ato1", subbean.sendMessageString("ＳＴＢーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
				list.add(childMap);
				
				// ５行目「C-CAS番号：[A]」
				childMap = new HashMap();
				// "KK_TV_CSCH_CL_NYO_05" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
				childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_05");
				// "A" → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換前文字列１
				childMap.put("replace_mae1", "A");
				// ＣＣＡＳーＩＤ → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換後文字列１
				String ccasId = editCasId(subbean.sendMessageString("ＣＣＡＳーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
				childMap.put("replace_ato1", editCasId(ccasId));
				list.add(childMap);
				
				// ６行目「選択コース：[B]」
				childMap = new HashMap();
				// "KK_TV_CSCH_CL_NYO_06" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
				childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_06");
				// "B" → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換前文字列１
				childMap.put("replace_mae1", "B");
				// OT-2013-000021 START
				// 変更後ＴＶコース名 → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換後文字列１
//				childMap.put("replace_ato1", subbean.sendMessageString("変更後ＴＶコースコード", X31CWebConst.DATABEAN_GET_VALUE));
				childMap.put("replace_ato1", subbean.sendMessageString("変更後ＴＶコース名", X31CWebConst.DATABEAN_GET_VALUE));
				// OT-2013-000021 END
				list.add(childMap);
				
			}
		}
		
		// ９行目「・・・オプションチャンネル数分(END)・・・」
		childMap = new HashMap();
		// "KK_TV_CSCH_CL_NYO_07" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
		childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_07");
		list.add(childMap);
		
		// １０行目「[C]:[D]」
		childMap = new HashMap();
		// "KK_TV_CSCH_CL_NYO_08" → ワンストップ対応履歴登録マップ.回答内容編集リスト.回答内容パラメータＩＤ
		childMap.put("ans_param_id", "KK_TV_CSCH_CL_NYO_08");
		// "E" → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換前文字列１
		childMap.put("replace_mae1", "C");
		// ユーザーＩＤ → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換後文字列１
		childMap.put("replace_ato1", bean[1].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// "F" → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換前文字列２
		childMap.put("replace_mae2", "D");
		// ユーザー名 → ワンストップ対応履歴登録マップ.回答内容編集リスト.置換後文字列２
		childMap.put("replace_ato2", bean[1].sendMessageString("ユーザー名", X31CWebConst.DATABEAN_GET_VALUE));
		list.add(childMap);
		
		parentMap.put("ans_list", list);

		outputMap.put("OnestopRirekiAddMap", parentMap);
						
		return outputMap;
	}

	/**
	 * ＣＡＳ−ＩＤを「9999-9999-9999-9999-9999」形式に編集します。
	 * @param casId ＣＡＳ−ＩＤ
	 * @return 編集したＣＡＳ−ＩＤ
	 */
	private String editCasId(String casId)
	{
		if(casId.length() == 20)
		{
			// 「9999-9999-9999-9999-9999」編集
			casId = casId.substring(0, 4) + "-" + 
					casId.substring(4, 8) + "-" + 
					casId.substring(8, 12) + "-" + 
					casId.substring(12, 16) + "-" + 
					casId.substring(16);
		}
		return casId;
	}


}
