/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：面開発案件設定コンポーネント部品クラス
 *  ソースファイル名：JKKAdchgMkhtAddCC.java
 *  作成者          ：FJ
 *  日付            ：2012年9月18日
 *＜機能概要＞
 *  住所変更に伴う面開発案件に紐づく割引の
 *	設定を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2012/10/26  FJ          新規作成
 *
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;

import eo.ejb.cbs.cbsmsg.EKK0271A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0851B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0851B001CBSMsg1List;

public class JKKAdchgMkhtAddCC extends AbstractCommonComponent {

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKAdchgMkhtAddCC() {
	}
	
	/**
	 * 住所変更時面開発案件割引登録.
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite adchgMkhtAdd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			HashMap<String, String> condMap = new HashMap<String, String>();
			HashMap<String, Object> reqMap;
			Map<?, ?> resMap;
			
			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
	
			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
	
			// 割引登録用マップ
			HashMap<String, Object> kk0451_d010_map = new HashMap<String, Object>();
	
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 一意照会 */
			// ・EKK0271A010  面開発案件一意照会
			condMap.clear();
			condMap.put(EKK0271A010CBSMsg.KEY_MENKAIHAT_ANKEN_NO, (String)paramMap.get("key_menkaihat_anken_no"));
			reqMap = mapper.setEKK0271A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk0271_a010_map = mapper.getEKK0271A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			String wrib_svc_cd = null;
			if (kk0271_a010_map.containsKey("wrib_svc_cd")){
				wrib_svc_cd = (String)kk0271_a010_map.get("wrib_svc_cd");
			}
			
			// ・EKK0851B001  割引サービス対象サービス一覧照会
			condMap.clear();
			condMap.put(EKK0851B001CBSMsg.KEY_WRIB_SVC_CD, wrib_svc_cd);
	//		condMap.put(EKK0851B001CBSMsg.KEY_KJNYMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
			reqMap = mapper.setEKK0851B001(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			ArrayList<HashMap<String, Object>> kk0851_b001_map_list = mapper.getEKK0851B001(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			if (kk0851_b001_map_list.size() < 1){
				return param;
			}
			
			/** 割引サービス契約登録 */
			kk0451_d010_map.put(EKK0451D010CBSMsg.SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
			kk0451_d010_map.put(EKK0451D010CBSMsg.WRIB_SVC_CD, wrib_svc_cd);
			kk0451_d010_map.put(EKK0451D010CBSMsg.PCRS_CD, null);
			kk0451_d010_map.put(EKK0451D010CBSMsg.PPLAN_CD, null);
			kk0451_d010_map.put(EKK0451D010CBSMsg.SVC_USE_STA_KIBO_YMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_USE_STA_KIBO_YMD));
			kk0451_d010_map.put(EKK0451D010CBSMsg.RSV_TSTA_KIBO_YMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_CHG_RSV_YMD));
			kk0451_d010_map.put(EKK0451D010CBSMsg.MSKM_DTL_NO, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_MSKM_DTL_NO));
			kk0451_d010_map.put(EKK0451D010CBSMsg.APLY_JUN, JKKAdchgConstCC.APLY_JUN_OFF);
			kk0451_d010_map.put(EKK0451D010CBSMsg.PNLTY_HASSEI_CD, null);
			kk0451_d010_map.put(EKK0451D010CBSMsg.IDO_DIV, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_IDO_DIV));
			kk0451_d010_map.put(EKK0451D010CBSMsg.WRIB_ADD_OPTY_CD, JKKAdchgConstCC.ADD_OPTY_CD_MAN_APLY);
			kk0451_d010_map.put(EKK0451D010CBSMsg.MSKM_KISAN_YMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_MSKM_YMD));
			kk0451_d010_map.put(EKK0451D010CBSMsg.UPD_DTM_BF, paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_UPD_DTM_AFT));
	
			// .割引サービス対象契約明細
			ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
			HashMap<String, Object> netMap = (HashMap<String, Object>) param.getData("KKSV0674236CCnet");
			HashMap<String, Object> telMap = (HashMap<String, Object>) param.getData("KKSV0674236CCtel");
			HashMap<String, Object> tvMap = (HashMap<String, Object>) param.getData("KKSV0674236CCtv");
			HashMap<String, Object> kk0851_b001_item_map = (HashMap<String, Object>) kk0851_b001_map_list.get(0);
			HashMap<String, Object> inMapWrisvcTgKeinet = new HashMap<String, Object>();
			HashMap<String, Object> inMapWrisvcTgKeitel = new HashMap<String, Object>();
			HashMap<String, Object> inMapWrisvcTgKeitv = new HashMap<String, Object>();
			
			if (netMap.containsKey("new_svc_kei_no")) {
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD, JKKAdchgConstCC.TG_KEI_SKBT_CD_SVC_KEI);
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.SVC_KEI_NO, (String) netMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO));
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.SVC_KEI_UCWK_NO, (String) netMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_UCWK_NO));
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.WRIB_SVC_TRGT_SVC_CD, kk0851_b001_item_map.get(EKK0851B001CBSMsg1List.WRIB_SVC_TRGT_SVC_CD));
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.SET_ADD_YMD, (String) netMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE) );
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TSTAYMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_USE_STA_KIBO_YMD));
				inMapWrisvcTgKeinet.put(EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TENDYMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				list.add(inMapWrisvcTgKeinet);
			}
			
			if (telMap.containsKey("new_svc_kei_no")) {
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD, JKKAdchgConstCC.TG_KEI_SKBT_CD_SVC_KEI);
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.SVC_KEI_NO, (String) telMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO));
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.SVC_KEI_UCWK_NO, (String) telMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_UCWK_NO));
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.WRIB_SVC_TRGT_SVC_CD, kk0851_b001_item_map.get(EKK0851B001CBSMsg1List.WRIB_SVC_TRGT_SVC_CD));
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.SET_ADD_YMD, (String) telMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE) );
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TSTAYMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_USE_STA_KIBO_YMD));
				inMapWrisvcTgKeitel.put(EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TENDYMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				list.add(inMapWrisvcTgKeitel);
			}
			
			if (tvMap.containsKey("new_svc_kei_no")) {
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD, JKKAdchgConstCC.TG_KEI_SKBT_CD_SVC_KEI);
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.SVC_KEI_NO, (String) tvMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO));
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.SVC_KEI_UCWK_NO, (String) tvMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_UCWK_NO));
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.WRIB_SVC_TRGT_SVC_CD, kk0851_b001_item_map.get(EKK0851B001CBSMsg1List.WRIB_SVC_TRGT_SVC_CD));
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.SET_ADD_YMD, (String) tvMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE) );
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TSTAYMD, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_USE_STA_KIBO_YMD));
				inMapWrisvcTgKeitv.put(EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TENDYMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				list.add(inMapWrisvcTgKeitv);
			}
			
	
			/** 割引サービス契約登録 */
			// ・EKK0451D010 割引サービス契約登録
			reqMap = mapper.setEKK0471D010(param, fixedText, kk0451_d010_map, list);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			kk0451_d010_map = mapper.getEKK0471D010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			return param;
		
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}
	
	
}