/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0674051MappingCC
*	ソースファイル名：KKSV0674051MappingCC.java
*	作成者			：富士通
*	日付			：2012年09月05日
*＜機能概要＞
*	マッピングCCです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/09/05	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 JKKSV0674051MappingCC 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> KKSV0674051CC = (HashMap<String, Object>) param.getData("KKSV0674051CC");
		
		//サービス契約回線内訳登録
		HashMap<String, Object> KKSV0674001SC = (HashMap<String, Object>) param.getData("KKSV0674001SC"); 
		
		if (KKSV0674001SC != null)
		{
			//サービス契約回線内訳番号（回線対象サービス契約）
			KKSV0674051CC.put("kk0241_svc_kei_kaisen_ucwk_no", KKSV0674001SC.get("svc_kei_kaisen_ucwk_no"));
		}

		//住所変更請求契約番号取得コンポーネント部品
		HashMap<String, Object> KKSV0674080CC = (HashMap<String, Object>) param.getData("KKSV0674080CC"); 
// OM-2013-0002021対応 20130913 星野 ADD START
		HashMap<String,Object> KKSV0674048CC = (HashMap<String, Object>)param.getData("KKSV0674048CC");
		String jdgChgDivTv = (String)KKSV0674048CC.get("jdg_chg_div_tv");
// OM-2013-0002021対応 20130913 星野 ADD END
		
		if (KKSV0674080CC != null)
		{
// OM-2013-0002021対応 20130913 星野 ADD START
			String seikyKeiNo = null;
			// ネットが解約/新規の場合
			if ( "4".equals(jdgChgDivTv) ){
				// 変更前サービス契約番号より請求契約番号を取得
				String svcKeiNo = (String)KKSV0674048CC.get("svc_kei_no");
				seikyKeiNo = getSeikyKeiNo(handle, param, fixedText, svcKeiNo);
			}
			
			if(!StringUtils.isEmpty(seikyKeiNo)){
				//請求契約番号(サービス契約＜eo光TV＞登録)
				KKSV0674051CC.put("kk0101_seiky_kei_no", seikyKeiNo);
				//請求契約番号(オプションサービス契約＜TV＞登録)
				KKSV0674051CC.put("kk0381_seiky_kei_no", seikyKeiNo);
				//請求契約番号(サービス契約内訳＜eo光TV＞登録)
				KKSV0674051CC.put("kk0181_seiky_kei_no", seikyKeiNo);
			} else {
// OM-2013-0002021対応 20130913 星野 ADD END
				//請求契約番号(サービス契約＜eo光TV＞登録)
				KKSV0674051CC.put("kk0101_seiky_kei_no", KKSV0674080CC.get("seiky_kei_no"));
				//請求契約番号(オプションサービス契約＜TV＞登録)
				KKSV0674051CC.put("kk0381_seiky_kei_no", KKSV0674080CC.get("seiky_kei_no"));
				//請求契約番号(サービス契約内訳＜eo光TV＞登録)
				KKSV0674051CC.put("kk0181_seiky_kei_no", KKSV0674080CC.get("seiky_kei_no"));
// OM-2013-0002021対応 20130913 星野 ADD START
			}
// OM-2013-0002021対応 20130913 星野 ADD END
			
			ArrayList<HashMap<String, Object>> svc_kei_ucwk_list = (ArrayList<HashMap<String, Object>>)KKSV0674051CC.get("svc_kei_ucwk_list");
			for (HashMap<String, Object> svcKeiUcwkMap : svc_kei_ucwk_list)
			{
// OM-2013-0002021対応 20130913 星野 ADD START
				if(!StringUtils.isEmpty(seikyKeiNo)){
					//請求契約番号(サービス契約内訳＜eo光TV＞登録)
					svcKeiUcwkMap.put("kk0181_seiky_kei_no", seikyKeiNo);
				} else {
// OM-2013-0002021対応 20130913 星野 ADD END
					//請求契約番号(サービス契約内訳＜eo光TV＞登録)
					svcKeiUcwkMap.put("kk0181_seiky_kei_no", KKSV0674080CC.get("seiky_kei_no"));
// OM-2013-0002021対応 20130913 星野 ADD START
				}
// OM-2013-0002021対応 20130913 星野 ADD END
				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)
				{
// OM-2013-0002021対応 20130913 星野 ADD START
					if(!StringUtils.isEmpty(seikyKeiNo)){
						//請求契約番号(機器提供サービス契約登録)
						kktkSvcKeiMap.put("kk0341_seiky_kei_no", seikyKeiNo);
					} else {
// OM-2013-0002021対応 20130913 星野 ADD END
						//請求契約番号(機器提供サービス契約登録)
						kktkSvcKeiMap.put("kk0341_seiky_kei_no", KKSV0674080CC.get("seiky_kei_no"));
// OM-2013-0002021対応 20130913 星野 ADD START
					}
// OM-2013-0002021対応 20130913 星野 ADD END
				}
			}
			
// OM-2013-0002021対応 20130913 星野 ADD START
			if(!StringUtils.isEmpty(seikyKeiNo)){
				//請求契約番号(機器提供サービス契約登録)
				KKSV0674051CC.put("kk0341_seiky_kei_no", seikyKeiNo);
			} else {
// OM-2013-0002021対応 20130913 星野 ADD END
				//請求契約番号(機器提供サービス契約登録)
				KKSV0674051CC.put("kk0341_seiky_kei_no", KKSV0674080CC.get("seiky_kei_no"));
// OM-2013-0002021対応 20130913 星野 ADD START
			}
//OM-2013-0002021対応 20130913 星野 ADD END
		}
		
		//お客様一意照会
		HashMap<String, Object> KKSV0674005SC = (HashMap<String, Object>) param.getData("KKSV0674005SC");
		
		if (KKSV0674005SC != null)
		{
			//お客様名 → ガイド誌送付先名(オプションサービス契約＜TV＞登録)
			KKSV0674051CC.put("kk0381_guidemg_sohus_nm", KKSV0674005SC.get("cust_nm"));
			//お客様カナ名 → ガイド誌送付先カナ名(オプションサービス契約＜TV＞登録)
			KKSV0674051CC.put("kk0381_guidemg_sohus_kana", KKSV0674005SC.get("cust_kana"));
			
// IT1-2013-0000114対応 20130122 星野 ADD START
			ArrayList<HashMap<String, Object>> svcKeiUcwkList = (ArrayList<HashMap<String, Object>>) KKSV0674051CC.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){
// OM-2013-0001914対応 20130912 星野 ADD START
							if( 
								StringUtils.isEmpty( (String)kktkSvcKeiMap.get("kk0341_kiki_sohus_nm") ) 
								|| StringUtils.isEmpty( (String)kktkSvcKeiMap.get("kk0341_kiki_sohus_kana") ) 
							){
//OM-2013-0001914対応 20130912 星野 ADD END
								kktkSvcKeiMap.put("kk0341_kiki_sohus_nm", (String)KKSV0674005SC.get("cust_nm"));
								kktkSvcKeiMap.put("kk0341_kiki_sohus_kana", (String)KKSV0674005SC.get("cust_kana"));
// OM-2013-0001914対応 20130912 星野 ADD START
							}
// OM-2013-0001914対応 20130912 星野 ADD END
						}
					}
				}
			}
// IT1-2013-0000114対応 20130122 星野 ADD END
		}
		
		//保留あり


		return param;
	}
	
// OM-2013-0002021対応 20130913 星野 ADD START
	/**
	 * 課金先一覧照会（請求契約番号/サービス契約番号）サービス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;
		}
	}
// OM-2013-0002021対応 20130913 星野 ADD END
}
