/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSV032512MappingCC
*	ソースファイル名：JKKSV032512MappingCC.java
*	作成者			：富士通
*	日付			：2014年08月15日
*＜機能概要＞
*	マッピングCCです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00.00	2014/08/15	FJ)北谷		新規作成 ANK-2199-00-00
*	v10.01.00	2014/09/10	FJ)北谷		OM-2014-0002982対応
**********************************************************************/
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 com.sun.enterprise.tools.common.util.StringUtils;

import eo.ejb.cbs.cbsmsg.ECH0501B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;

public class JKKSV032512MappingCC extends AbstractCommonComponent
{

	/**
	 * CCへのマッピング処理を行います
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		//解約実行ＣＣ（eo光テレビ解約）
		HashMap<String, Object> KKSV032512CC = (HashMap<String, Object>) param.getData("KKSV032512CC");
		
		// OM-2014-0002982 2014/09/10 add start
		// 料金月初日を取得
		String ryokinGessyobi = selectRyokinGessyobi(handle, param, fixedText);
		// OM-2014-0002982 2014/09/10 add end
		
		// 解約実行CC（eoテレビ解約）.サービス解約起算年月日
		// OM-2014-0002982 2014/09/10 mod start
		// 撤去工事の完了日と運用日を比べて早いほうの日付
		// ※撤去工事の完了日が料金月初日より古い日付の場合は、料金月初日
		String opeDate = JCCBPCommon.getOpeDate(null);
		String tekkyoKojiakNoTv = (String)KKSV032512CC.get("tekkyo_kojiak_no_tv");
		HashMap<String, Object> kojiMap = selectKojiAkInf(handle, param, fixedText, tekkyoKojiakNoTv);
		String tekkyoKojiKanyoBi = (String)kojiMap.get(EKU0011A010CBSMsg1List.KOJIAK_JSSI_YMD);
		String svcDslKisanYmd = "";
		if(!StringUtils.isEmpty(tekkyoKojiKanyoBi) && tekkyoKojiKanyoBi.compareTo(opeDate) < 0){
//			svcDslKisanYmd = tekkyoKojiKanyoBi.substring(0, 8);
			if(tekkyoKojiKanyoBi.compareTo(ryokinGessyobi) < 0){
				svcDslKisanYmd = ryokinGessyobi;
			}else{
				svcDslKisanYmd = tekkyoKojiKanyoBi;
			}
		}else{
			svcDslKisanYmd = opeDate;
		}
		// OM-2014-0002982 2014/09/10 mod end
		//(※解約CCのsvc_chrg_endymdはサービス解約起算年月日に設定され、-1した日がサービス課金終了年月日に入る)
		KKSV032512CC.put("svc_chrg_endymd", svcDslKisanYmd);
		
		// 解約実行ＣＣ内で設定する、指示書ＣＣのための情報域を空マップで初期化
		param.setData("KKSV019502CC", new HashMap<String, Object>());
		
		return param;
	}
	
	/**
	 * 工事案件情報を取得します.
	 * @param param
	 * @param fixedText
	 * @param kojiAkNo
	 * @return
	 * @throws Exception
	 */
	private HashMap<String, Object> selectKojiAkInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String kojiAkNo) throws Exception {
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		if (StringUtils.isEmpty(kojiAkNo))
		{
			return null;
		}
		
		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		condMap.put(JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, kojiAkNo);
		// 工事案件一意照会を実施
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
		reqMap = mapper.setEKU0011A010(param, fixedText, condMap);
		resMap = scCall.run( reqMap, handle );
		HashMap<String, Object> ku0011_a010_map = mapper.getEKU0011A010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// 一意照会結果が取得できなかった場合はnull返却
		if(StringUtils.isEmpty( (String)ku0011_a010_map.get(EKU0011A010CBSMsg1List.KOJIAK_NO) ) ){
			return null;
		}
		
		return ku0011_a010_map;
	}
	
	// OM-2014-0002982 2014/09/10 add start
	/**
	 * 料金スケジュール定義から料金月初日を取得します.
	 * @param param
	 * @param fixedText
	 * @return 料金月初日
	 * @throws Exception
	 */
	private String selectRyokinGessyobi(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception {
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// 料金スケジュール定義一覧照会を実施
		reqMap = mapper.setECH0501B010(param, fixedText);
		resMap = scCall.run( reqMap, handle );
		ArrayList<HashMap<String, Object>> ch0501_b010_list = mapper.getECH0501B010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// 照会結果が取得できなかった場合は空文字列返却
		if(ch0501_b010_list == null || ch0501_b010_list.size() == 0){
			return "";
		}
		
		String seikyYm = (String)ch0501_b010_list.get(0).get(ECH0501B010CBSMsg1List.SEIKY_YM);
		if(StringUtils.isEmpty(seikyYm)){
			return "";
		}
		
		return seikyYm + "01";
	}
	// OM-2014-0002982 2014/09/10 add end
}
