package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.List;
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 com.sun.enterprise.tools.common.util.StringUtils;

import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B011CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161C160CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg1List;

public class JKKAdchgCancelSvcKeiUcwkTvCC  extends AbstractCommonComponent {

	/**
	 * TVサービス契約内訳キャンセル（住所変更）の処理です。
	 * 
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite cancel(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// パラメータから、サービス契約番号、申込明細番号を取得
		HashMap<String , Object>paramMap = (HashMap<String , Object>)param.getData(fixedText);
		String svc_kei_no = (String)paramMap.get("svc_kei_no");
// OM-2013-0005374対応 20140103 星野 ADD START
		String mskm_dtl_no = (String)paramMap.get("mskm_dtl_no");
// OM-2013-0005374対応 20140103 星野 ADD END

		if (StringUtils.isEmpty(svc_kei_no)) {
			return param;
		}
		
		// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// 対象のサービス契約内訳番号を抽出
		List<HashMap<String, Object>> kk0161_b004_map_list = null;
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svc_kei_no);
		HashMap<String, Object> reqMap = mapper.setEKK0161B004(param, fixedText, condMap);
		Map<?, ?> resMap = scCall.run( reqMap, handle);
		kk0161_b004_map_list = mapper.getEKK0161B004( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		for (HashMap<String, Object> kk0161_b004_map : kk0161_b004_map_list ) {
			
			String svckeiUcwkNo = (String)kk0161_b004_map.get(EKK0161B011CBSMsg1List.SVC_KEI_UCWK_NO);
			
			String svcState = (String)kk0161_b004_map.get(EKK0161B011CBSMsg1List.SVC_KEI_UCWK_STAT);
			
			if (!("010".equals(svcState) || "020".equals(svcState) || "030".equals(svcState))) {
				continue;
			}
			
// OM-2013-0005374対応 20140103 星野 DEL START
//			// 抽出された内訳の履歴を取得
//			List<HashMap<String, Object>> kk0161_b011_map_list = null;
//			condMap.clear();
//			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svckeiUcwkNo);
//			reqMap = mapper.setEKK0161B011( param, fixedText, condMap);
//			resMap = scCall.run( reqMap, handle);
//			kk0161_b011_map_list = mapper.getEKK0161B011( param, fixedText, resMap );
//			mapper.scResultCheck( param );
//			
//			for (HashMap<String, Object> kk0161_b011_map : kk0161_b011_map_list ) {
//				
//				String geneAddDtm = (String)kk0161_b011_map.get(EKK0161B011CBSMsg1List.GENE_ADD_DTM);
// OM-2013-0005374対応 20140103 星野 DEL START
			
			// サービス契約内訳一意照会を実行
			HashMap<String , Object>k0161_a001_map = null;
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svckeiUcwkNo);
// OM-2013-0005374対応 20140103 星野 MOD START
//				condMap.put(JKKAdchgMapperCC.COND_KEY_GENE_ADD_DTM, geneAddDtm);
//				reqMap = mapper.setEKK0161A010_Func1( param, fixedText, condMap);
			condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
			reqMap = mapper.setEKK0161A010( param, fixedText, condMap);
// OM-2013-0005374対応 20140103 星野 MOD END
			resMap = scCall.run( reqMap, handle);
			k0161_a001_map = mapper.getEKK0161A010( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			String ucwkState = (String)k0161_a001_map.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
			String idoDiv = (String)k0161_a001_map.get(EKK0161A010CBSMsg1List.IDO_DIV);
			
// OM-2013-0005374対応 20140103 星野 MOD START
//				// 解約済みの場合は無視
//				if ("00019".equals(idoDiv) && !"910".equals(ucwkState)) {
//					
//					// サービス契約内訳の論理削除を実行する。
//					HashMap<String , Object>k0161_e011_map = null;
//					condMap.clear();
//					condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svckeiUcwkNo);
//					condMap.put(JKKAdchgMapperCC.COND_KEY_GENE_ADD_DTM, (String) k0161_a001_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM));
//					condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, (String) k0161_a001_map.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM));
//					reqMap = mapper.setEKK0161E011( param, fixedText, condMap);
//					resMap = scCall.run( reqMap, handle);
//					k0161_e011_map = mapper.getEKK0161E011( param, fixedText, resMap );
//					mapper.scResultCheck( param );
//				}
			
			String lastUpdDtm = (String)k0161_a001_map.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
			
			if("910".equals(ucwkState) || "920".equals(ucwkState)){
				continue;
			}

			if("010".equals(ucwkState) || "020".equals(ucwkState)){
				// サービス契約内訳キャンセル呼び出し
				condMap.clear();
				condMap.put(EKK0161C160CBSMsg.SVC_KEI_UCWK_NO, svckeiUcwkNo);
				condMap.put(EKK0161C160CBSMsg.MSKM_DTL_NO, mskm_dtl_no);
				condMap.put(EKK0161C160CBSMsg.SVC_CANCEL_RSN_CD, "02");
				condMap.put(EKK0161C160CBSMsg.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
				condMap.put(EKK0161C160CBSMsg.UPD_DTM_BF, lastUpdDtm);

				reqMap = mapper.setEKK0161C160( param, fixedText, condMap);
				resMap = scCall.run( reqMap, handle);
				HashMap<String , Object>kk0161_c160_map = mapper.getEKK0161C160( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				
			}else if("030".equals(ucwkState)){
				// サービス契約内訳解約呼び出し
				condMap.clear();
				condMap.put(EKK0161C180CBSMsg.SVC_KEI_UCWK_NO, svckeiUcwkNo);
				condMap.put(EKK0161C180CBSMsg.MSKM_DTL_NO, mskm_dtl_no);
				condMap.put(EKK0161C180CBSMsg.RSV_TSTA_KIBO_YMD, JCCBPCommon.getOpeDate(null));
				condMap.put(EKK0161C180CBSMsg.SVC_ENDYMD, JCCBPCommon.getOpeDate(null));
				condMap.put(EKK0161C180CBSMsg.SVC_CHRG_ENDYMD, JCCBPCommon.getOpeDate(null));
				condMap.put(EKK0161C180CBSMsg.SVC_DLRE_CD, "03");
				condMap.put(EKK0161C180CBSMsg.SVC_DLRE_MEMO, null);
				condMap.put(EKK0161C180CBSMsg.PNLTY_HASSEI_CD, null);
				condMap.put(EKK0161C180CBSMsg.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
				condMap.put(EKK0161C180CBSMsg.UPD_DTM_BF, lastUpdDtm);
				
				reqMap = mapper.setEKK0161C180( param, fixedText, condMap);
				resMap = scCall.run( reqMap, handle);
				HashMap<String , Object>kk0161_c180_map = mapper.getEKK0161C180( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				lastUpdDtm = (String)kk0161_c180_map.get(EKK0161C180CBSMsg.UPD_DTM);

				// サービス契約内訳解約確定呼び出し
				condMap.clear();
				condMap.put(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO, svckeiUcwkNo);
				condMap.put(EKK0161C190CBSMsg.SVC_ENDYMD, JCCBPCommon.getOpeDate(null));
				condMap.put(EKK0161C190CBSMsg.SVC_DSL_KISAN_YMD, JCCBPCommon.getOpeDate(null));
				condMap.put(EKK0161C190CBSMsg.SVC_DLRE_CD, "03");
				condMap.put(EKK0161C190CBSMsg.SVC_DLRE_MEMO, null);
				condMap.put(EKK0161C190CBSMsg.UPD_DTM_BF, lastUpdDtm);
				condMap.put(EKK0161C190CBSMsg.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
				condMap.put(EKK0161C190CBSMsg.KEIZK_AF_KEI_CHGECHU_FLG, null);
				condMap.put(EKK0161C190CBSMsg.ADCHG_IDO_RSV_DTL_CD, null);
				condMap.put(EKK0161C190CBSMsg.PLAN_END_SBT_CD, null);
				
				reqMap = mapper.setEKK0161C190( param, fixedText, condMap);
				resMap = scCall.run( reqMap, handle);
				HashMap<String , Object>kk0161_c190_map = mapper.getEKK0161C190( param, fixedText, resMap );
				mapper.scResultCheck( param );
			}
// OM-2013-0005374対応 20140103 星野 MOD END
				
// OM-2013-0005374対応 20140103 星野 DEL START
//			}
// OM-2013-0005374対応 20140103 星野 DEL END
		}
		
		return param;
	}
}
