/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSV0725502MappingCC
*	ソースファイル名：JKKSV0725502MappingCC.java
*	作成者			：富士通
*	日付			：2013年11月02日
*＜機能概要＞
*	マッピングCCです。
*	参考元:JKKSV0674051MappingCC
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/11/02	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.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.EKK0321B002CBSMsg1List;

public class JKKSV0725502MappingCC 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> KKSV0725502CC = (HashMap<String, Object>) param.getData("KKSV0725502CC");
		
		//サービス契約回線内訳登録
		// Logicにて設定
		
		//住所変更請求契約番号取得コンポーネント部品
		HashMap<String, Object> KKSV072523CC = (HashMap<String, Object>) param.getData("KKSV072523CC"); 
		HashMap<String,Object> KKSV072511CC = (HashMap<String, Object>)param.getData("KKSV072511CC");
		String jdgChgDivTv = (String)KKSV072511CC.get("jdg_chg_div_tv");
		
		/** JKKAdchgAddSvcKeiTvCC内でパラメータマップ名"KKSV0674048CC"が指定されているため、必要なパラメータを移植 */
		HashMap<String, Object> extraParamMap = new HashMap<String, Object>();
		extraParamMap.put("jdg_chg_div_tv", jdgChgDivTv);
		param.setData("KKSV0674048CC", extraParamMap);
		
		if (KKSV072523CC != null){
			String seikyKeiNo = null;
			// ネットが解約/新規の場合
			if ( "4".equals(jdgChgDivTv) ){
				// 変更前サービス契約番号より請求契約番号を取得
				String svcKeiNo = (String)KKSV072511CC.get("svc_kei_no");
				seikyKeiNo = getSeikyKeiNo(handle, param, fixedText, svcKeiNo);
			}
			
			if (!StringUtils.isEmpty(seikyKeiNo)){
				//請求契約番号(サービス契約＜eo光TV＞登録)
				KKSV0725502CC.put("kk0101_seiky_kei_no", seikyKeiNo);
				//請求契約番号(オプションサービス契約＜TV＞登録)
				KKSV0725502CC.put("kk0381_seiky_kei_no", seikyKeiNo);
				//請求契約番号(サービス契約内訳＜eo光TV＞登録)
				KKSV0725502CC.put("kk0181_seiky_kei_no", seikyKeiNo);
			} else {
				//請求契約番号(サービス契約＜eo光TV＞登録)
				KKSV0725502CC.put("kk0101_seiky_kei_no", KKSV072523CC.get("seiky_kei_no"));
				//請求契約番号(オプションサービス契約＜TV＞登録)
				KKSV0725502CC.put("kk0381_seiky_kei_no", KKSV072523CC.get("seiky_kei_no"));
				//請求契約番号(サービス契約内訳＜eo光TV＞登録)
				KKSV0725502CC.put("kk0181_seiky_kei_no", KKSV072523CC.get("seiky_kei_no"));
			}
			
			ArrayList<HashMap<String, Object>> svc_kei_ucwk_list = (ArrayList<HashMap<String, Object>>)KKSV0725502CC.get("svc_kei_ucwk_list");
			for (HashMap<String, Object> svcKeiUcwkMap : svc_kei_ucwk_list)
			{
				if (!StringUtils.isEmpty(seikyKeiNo)){
					//請求契約番号(サービス契約内訳＜eo光TV＞登録)
					svcKeiUcwkMap.put("kk0181_seiky_kei_no", seikyKeiNo);
				} else {
					//請求契約番号(サービス契約内訳＜eo光TV＞登録)
					svcKeiUcwkMap.put("kk0181_seiky_kei_no", KKSV072523CC.get("seiky_kei_no"));
				}
				ArrayList<HashMap<String, Object>> kktk_svc_kei_list = (ArrayList<HashMap<String, Object>>)svcKeiUcwkMap.get("kktk_svc_kei_list");
				for (HashMap<String, Object> kktkSvcKeiMap : kktk_svc_kei_list)
				{
					if (!StringUtils.isEmpty(seikyKeiNo)){
						//請求契約番号(機器提供サービス契約登録)
						kktkSvcKeiMap.put("kk0341_seiky_kei_no", seikyKeiNo);
					} else {
						//請求契約番号(機器提供サービス契約登録)
						kktkSvcKeiMap.put("kk0341_seiky_kei_no", KKSV072523CC.get("seiky_kei_no"));
					}
				}
			}
			
			if (!StringUtils.isEmpty(seikyKeiNo)){
				//請求契約番号(機器提供サービス契約登録)
				KKSV0725502CC.put("kk0341_seiky_kei_no", seikyKeiNo);
			} else {
				//請求契約番号(機器提供サービス契約登録)
				KKSV0725502CC.put("kk0341_seiky_kei_no", KKSV072523CC.get("seiky_kei_no"));
			}
		}
		
		//お客様一意照会
		HashMap<String, Object> KKSV072504SC = (HashMap<String, Object>) param.getData("KKSV072504SC");
		
		if (KKSV072504SC != null)
		{
			//お客様名 → ガイド誌送付先名(オプションサービス契約＜TV＞登録)
			KKSV0725502CC.put("kk0381_guidemg_sohus_nm", KKSV072504SC.get("cust_nm"));
			//お客様カナ名 → ガイド誌送付先カナ名(オプションサービス契約＜TV＞登録)
			KKSV0725502CC.put("kk0381_guidemg_sohus_kana", KKSV072504SC.get("cust_kana"));
			
			ArrayList<HashMap<String, Object>> svcKeiUcwkList = (ArrayList<HashMap<String, Object>>) KKSV0725502CC.get("svc_kei_ucwk_list");
			if (svcKeiUcwkList!=null){
				for (HashMap<String, Object> svcKeiUcwkMap : svcKeiUcwkList){
					ArrayList<HashMap<String, Object>> kktkSvcKeiList = (ArrayList<HashMap<String, Object>>) svcKeiUcwkMap.get("kktk_svc_kei_list");
					if (kktkSvcKeiList!=null){
						for (HashMap<String, Object> kktkSvcKeiMap : kktkSvcKeiList){
							if ( 
								StringUtils.isEmpty( (String)kktkSvcKeiMap.get("kk0341_kiki_sohus_nm") ) 
								|| StringUtils.isEmpty( (String)kktkSvcKeiMap.get("kk0341_kiki_sohus_kana") ) 
							){
								kktkSvcKeiMap.put("kk0341_kiki_sohus_nm", (String)KKSV072504SC.get("cust_nm"));
								kktkSvcKeiMap.put("kk0341_kiki_sohus_kana", (String)KKSV072504SC.get("cust_kana"));
							}
						}
					}
				}
			}
		}
		
		//保留あり


		return param;
	}
	
	/**
	 * 課金先一覧照会（請求契約番号/サービス契約番号）サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private String getSeikyKeiNo(	SessionHandle handle,
									IRequestParameterReadWrite param,
									String fixedText,
									String svcKeiNo) throws Throwable
	{
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		condMap.clear();
		// 引継データ.サービス契約番号 → ＫＥＹ＿サービス契約番号
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo );
		reqMap = mapper.setEKK0321B002( param, fixedText, condMap );
		resMap = scCall.run( reqMap, handle );
		ArrayList<HashMap<String, Object>> kk0321_b002_list = mapper.getEKK0321B002( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		if ( kk0321_b002_list != null && !kk0321_b002_list.isEmpty() ){
			return (String)kk0321_b002_list.get(0).get(EKK0321B002CBSMsg1List.SEIKY_KEI_NO);
		} else {
			return null;
		}
	}
}
