/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSV072521MappingCC
*	ソースファイル名：JKKSV072521MappingCC.java
*	作成者			：富士通
*	日付			：2012年09月05日
*＜機能概要＞
*	マッピングCCです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
 *  v7.00.00    2014/03/18  星野        OM-2014-0001136対応
 *  v9.00.00	2014/04/30  FJ)北谷     ANK-2056-00-00対応
 * v10.00.00    2014/09/17  FJ)北谷     ST-2014-0000153対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
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.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B032CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;

public class JKKSV072521MappingCC extends AbstractCommonComponent
{
	
	/** 作業マップ名 */
	private static final String CC_WORK_AREA_NAME_MSKM = "JKKAddMskmServiceCCWork";
	
	/**
	 * CCへのマッピング処理を行います
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		
		// 住所変更情報登録ＣＣのMapを取得
		HashMap<String, Object> KKSV072521ccMap = (HashMap<String, Object>) param.getData("KKSV072521CC");
		if(KKSV072521ccMap==null){
			return param;
		}
		
		/** 照会 事前準備 */
		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> telwork = (HashMap<String, Object>) param.getMappingWorkArea().get("JKKAddSvcKeiTelCCWork");
		String tel_svc_kei = null;
		String tel_svc_kei_ucwk = null;
		if(telwork != null){
			
			tel_svc_kei = (String)telwork.get("svc_kei_no");
			tel_svc_kei_ucwk = (String)telwork.get("svc_kei_ucwk_no");
		}
		
// ANK-1665-00-00 2014.01.07 Y.Kanata ADD START
		// 電話：料金プラン変更を行っている場合にサービス契約の住変明細番号を持っていないため取得する。
		ArrayList<HashMap<String, Object>> adchg_dtl_svc_kei_list = new ArrayList<HashMap<String, Object>>();
		adchg_dtl_svc_kei_list = (ArrayList<HashMap<String, Object>>)KKSV072521ccMap.get("adchg_dtl_map_svc_kei");
		for (HashMap<String, Object> adchg_dtl_svc_kei : adchg_dtl_svc_kei_list) {
			// 電話の情報が存在する場合、住所変更明細を見て
			if ("02".equals((String)adchg_dtl_svc_kei.get("adchg_dtl_svc_cd"))
					&& StringUtils.isEmpty((String)adchg_dtl_svc_kei.get("adchg_dtl_adchg_dtl_no"))) {
				/** 住所変更情報登録ＣＣ.住所変更情報マップ */
				HashMap<String, Object> adchg_map = new HashMap<String, Object>();
				adchg_map = (HashMap<String, Object>)KKSV072521ccMap.get("adchg_map");
				condMap.clear();
				condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String)adchg_map.get("adchg_adchg_no"));
				condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, "01");  // サービス契約
				reqMap = mapper.setEKK2101B001(param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001(param, fixedText, resMap);
				mapper.scResultCheck(param);
				
				String telSvcKeiNoBfMapped = (String)adchg_dtl_svc_kei.get("adchg_dtl_chbf_skbt_no");
				for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
					String telSvcKeiNoBfAdchgDtl = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
// OM-2014-0000551 2014.02.06 Y.Kanata ADD START
// 電話サービス追加後にテレビサービス追加を行った場合に、電話をテレビと間違えて取得してしまうためチェック条件を変更
//					if (telSvcKeiNoBfMapped != null 
					if (!StringUtils.isEmpty(telSvcKeiNoBfMapped)
// OM-2014-0000551 2014.02.06 Y.Kanata ADD END
							&& telSvcKeiNoBfMapped.equals(telSvcKeiNoBfAdchgDtl)) {
						String telSvcKeiAdchgDtlNo = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_NO);
						adchg_dtl_svc_kei.put("adchg_dtl_adchg_dtl_no", telSvcKeiAdchgDtlNo);
					}
				}
			}
		}
// ANK-1665-00-00 2014.01.07 Y.Kanata ADD END
		
		ArrayList<HashMap<String, Object>> svcKeiInfo = (ArrayList<HashMap<String, Object>>) KKSV072521ccMap.get("adchg_dtl_svc_kei_info");
		HashMap<String, Object> telMap = svcKeiInfo.get(1);
		
		if (!StringUtils.isEmpty(tel_svc_kei)) {
			telMap.put("new_svc_kei_no", tel_svc_kei);
		}
		
		/** サービス契約内訳 */
		ArrayList<HashMap<String, Object>> adchg_dtl_list_svc_kei_ucwk = (ArrayList<HashMap<String, Object>>)KKSV072521ccMap.get("adchg_dtl_list_svc_kei_ucwk");
		// ST-2014-0000153 2014/09/17 add start
		// サービス契約内訳（電話のみ）
		ArrayList<HashMap<String, Object>> adchg_dtl_list_svc_kei_ucwk_tel = new ArrayList<HashMap<String, Object>>();
		// ST-2014-0000153 2014/09/17 add end
		
		// 電話
		ArrayList<HashMap<String, Object>> telWcwkList = (ArrayList<HashMap<String, Object>>)KKSV072521ccMap.get("adchg_dtl_list_svc_kei_ucwk_tel");
		Iterator<HashMap<String, Object>> svc_kei_ucwk_list_ite = telWcwkList.iterator();
		ArrayList<String> list = new ArrayList<String>();
		// 既存サービス契約内訳リストを作成
		while(svc_kei_ucwk_list_ite.hasNext()) {

			HashMap<String, Object> cur_svc_kei_ucwk = svc_kei_ucwk_list_ite.next();
			String tel_bf_ucwk = (String)cur_svc_kei_ucwk.get("adchg_dtl_chbf_skbt_no");
			if (!StringUtils.isEmpty(tel_bf_ucwk)) {
				list.add(tel_bf_ucwk);
			}
		}
		
		// ST-2014-0000153 2014/09/17 add start
		adchg_dtl_list_svc_kei_ucwk_tel.addAll(telWcwkList);
		ArrayList<HashMap<String, Object>> adchg_dtl_list_svc_kei_ucwk_tel_new = (ArrayList<HashMap<String, Object>>)KKSV072521ccMap.get("adchg_dtl_list_svc_kei_ucwk_tel_new");
		if(adchg_dtl_list_svc_kei_ucwk_tel_new != null){
			adchg_dtl_list_svc_kei_ucwk_tel.addAll(adchg_dtl_list_svc_kei_ucwk_tel_new);
		}
		// ST-2014-0000153 2014/09/17 add end
		
		// 使用するサービス契約番号を特定。サービス追加→新番、番号追加→旧番
		HashMap<String, Object> svckeimap = (HashMap<String, Object>) param.getData("KKSV072506SC");
		String telsvckei = null;
		if (!StringUtils.isEmpty(tel_svc_kei)) {
			telsvckei = tel_svc_kei;
		} else {
			telsvckei = (String) svckeimap.get("svc_kei_no");
		}
		
		int i = 0;	// カウンタ
		boolean new_flg = true;
		
		if (!StringUtils.isEmpty(telsvckei)) {
			
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, telsvckei);
			reqMap = mapper.setEKK0161B004(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			ArrayList<HashMap<String, Object>> kk0161_b004 = mapper.getEKK0161B004(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			Iterator<HashMap<String, Object>> kk0161_b004_ite = kk0161_b004.iterator();
			while(kk0161_b004_ite.hasNext()) {

				HashMap<String, Object>teltWcwkMap = new HashMap<String, Object>();	// 格納用マップ
				HashMap<String, Object> svc_kei_ucwk_map = kk0161_b004_ite.next();
				String ucwk = (String)svc_kei_ucwk_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
				
				// EKK0161A010 サービス契約内訳一意照会
				condMap.clear();
				condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, ucwk);
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, "20991231");
				reqMap = mapper.setEKK0161A010( param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				HashMap<String, Object> kk0161_a010_map = mapper.getEKK0161A010(param, fixedText, resMap);
				mapper.scResultCheck(param);
				
				// サービス契約内訳ステータスを取得
				String ucwk_state = (String)kk0161_a010_map.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
				
				if (list.size() > 0) {
					new_flg = true;
					
					for (i = 0; i < list.size(); i ++){
						String kizon_ucwk = list.get(i);
						
						if (ucwk.equals(kizon_ucwk)) {
							new_flg = false;
						}
					}
					
				}
				
				if (new_flg && ("010".equals(ucwk_state) || "020".equals(ucwk_state)) || "030".equals(ucwk_state)) {
					teltWcwkMap.put("adchg_dtl_chaf_skbt_no", ucwk);
					adchg_dtl_list_svc_kei_ucwk.add(teltWcwkMap);
					// ST-2014-0000153 2014/09/17 add start
					adchg_dtl_list_svc_kei_ucwk_tel.add(teltWcwkMap);
					// ST-2014-0000153 2014/09/17 add end
				}
				
			}
		}
// ANK-1667-00-00 2013.11.07 Y.Kanata ADD START
		// テレビ新規のワーク
		HashMap<String, Object> tvwork = (HashMap<String, Object>) param.getMappingWorkArea().get("JKKAddSvcKeiTvCCWork");
		String tv_svc_kei = null;
		String tv_svc_kei_ucwk = null;
		if(tvwork != null){
			
			tv_svc_kei = (String)tvwork.get("svc_kei_no");
			tv_svc_kei_ucwk = (String)tvwork.get("svc_kei_ucwk_no");
		}
		
		HashMap<String, Object> tvMap = svcKeiInfo.get(2);
		
		if (!StringUtils.isEmpty(tv_svc_kei)) {
			tvMap.put("new_svc_kei_no", tv_svc_kei);
		}
		
		// テレビ
		ArrayList<HashMap<String, Object>> tvWcwkList = (ArrayList<HashMap<String, Object>>)KKSV072521ccMap.get("adchg_dtl_list_svc_kei_ucwk_tv");
		Iterator<HashMap<String, Object>> svc_kei_ucwk_listTv_ite = tvWcwkList.iterator();
		ArrayList<String> listTv = new ArrayList<String>();
		// 既存サービス契約内訳リストを作成
		while(svc_kei_ucwk_listTv_ite.hasNext()) {

			HashMap<String, Object> cur_svc_kei_ucwkTv = svc_kei_ucwk_listTv_ite.next();
			String tv_bf_ucwk = (String)cur_svc_kei_ucwkTv.get("adchg_dtl_chbf_skbt_no");
			if (!StringUtils.isEmpty(tv_bf_ucwk)) {
				listTv.add(tv_bf_ucwk);
			}
		}
		
		// 使用するサービス契約番号を特定。
// OM-2014-0001136対応 20140318 星野 DEL START
//		HashMap<String, Object> svckeimapTv = (HashMap<String, Object>) param.getData("KKSV072511CC");
// OM-2014-0001136対応 20140318 星野 DEL END
		String tvsvckei = null;
		if (!StringUtils.isEmpty(tv_svc_kei)) {
			tvsvckei = tv_svc_kei;
// OM-2014-0001136対応 20140318 星野 DEL START
// 2週目TV追加以外は内訳取得不要のため、サービス契約番号の設定を削除
//		} else {
//			tvsvckei = (String) svckeimapTv.get("svc_kei_no");
// OM-2014-0001136対応 20140318 星野 DEL END
		}
		
		new_flg = true;
		
		if (!StringUtils.isEmpty(tvsvckei)) {
			
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, tvsvckei);
			reqMap = mapper.setEKK0161B004(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			ArrayList<HashMap<String, Object>> kk0161_b004 = mapper.getEKK0161B004(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			Iterator<HashMap<String, Object>> kk0161_b004_ite = kk0161_b004.iterator();
			while(kk0161_b004_ite.hasNext()) {

				HashMap<String, Object>tvWcwkMap = new HashMap<String, Object>();	// 格納用マップ
				HashMap<String, Object> svc_kei_ucwk_map = kk0161_b004_ite.next();
				String ucwk = (String)svc_kei_ucwk_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
				
				// サービス契約内訳ステータスを取得
				String ucwk_state = (String)svc_kei_ucwk_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
				if ("010".equals(ucwk_state) || "020".equals(ucwk_state) || "030".equals(ucwk_state)) {
					
					if (listTv.size() > 0) {
						new_flg = true;
						
						for (i = 0; i < listTv.size(); i ++){
							String kizon_ucwk = listTv.get(i);
							
							if (ucwk.equals(kizon_ucwk)) {
								new_flg = false;
							}
						}
						
					}
					
					if (new_flg) {
						tvWcwkMap.put("adchg_dtl_chaf_skbt_no", ucwk);
						adchg_dtl_list_svc_kei_ucwk.add(tvWcwkMap);
					}
				}
			}
		}
// ANK-1667-00-00 2013.11.07 Y.Kanata ADD END
		
		/** 機器提供サービス契約 */
		kikiDtlSet(param, fixedText, handle);
		
		/** 工事案件 */
		
// OM-2013-0002573対応 20130926 星野 MOD START
//		String svcKeiNo = null;
//		String svcKeiNoTv = null;
//		String kojiAkSbtCd = null;
//		String kojiAkNo = null;
//		String kojiAkNoTv = null;
//		
//		// ネット・電話編
//		HashMap<String, Object> workMap = (HashMap<String, Object>) param.getData("KKSV072501SC");
//		if(workMap != null && workMap.containsKey("svc_kei_no")) {
//			svcKeiNo = (String) workMap.get("svc_kei_no");
//		}
//		
//		if (!StringUtils.isEmpty(svcKeiNo)) {
//			// ●工事案件番号の取得
//			condMap.clear();
//			condMap.put(JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
//			reqMap = mapper.setEKU0011B050(param, fixedText, condMap);
//			resMap = scCall.run(reqMap, handle);
//			ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050(param, fixedText, resMap);
//			mapper.scResultCheck(param);
//			
//			// ■工事案件番号を抽出し、対象の工事案件情報を取得する。
//			Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
//			while(ku0011_b050Ite.hasNext())
//			{
//				// カレントの工事案件情報を取得
//				HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
//				
//				// 工事案件種別コードを取得
//				kojiAkSbtCd = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_SBT_CD);
//				
//				String kojiState = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_STAT);
//				
//				if (("002".equals(kojiAkSbtCd) || "004".equals(kojiAkSbtCd)) && !"900".equals(kojiState)) {
//					// 工事案件番号の取得
//					kojiAkNo = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO);
//				}
//			}
//		}
//		
//		if (StringUtils.isEmpty(kojiAkNo)) {
//// IT1-2013-0001457 2013.07.26 K.Kurata MOD START
//			//workMap = (HashMap<String, Object>) param.getData("KKSV072506SC");
//			workMap = (HashMap<String, Object>) param.getData("KKSV072502SC");
//// IT1-2013-0001457 2013.07.26 K.Kurata MOD END
//			if(workMap != null && workMap.containsKey("svc_kei_no")) {
//				svcKeiNo = (String) workMap.get("svc_kei_no");
//			}
//			
//			if (!StringUtils.isEmpty(svcKeiNo)) {
//				// ●工事案件番号の取得
//				condMap.clear();
//				condMap.put(JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
//				reqMap = mapper.setEKU0011B050(param, fixedText, condMap);
//				resMap = scCall.run(reqMap, handle);
//				ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050(param, fixedText, resMap);
//				mapper.scResultCheck(param);
//				
//				// ■工事案件番号を抽出し、対象の工事案件情報を取得する。
//				Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
//				while(ku0011_b050Ite.hasNext())
//				{
//					// カレントの工事案件情報を取得
//					HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
//					
//					// 工事案件種別コードを取得
//					kojiAkSbtCd = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_SBT_CD);
//					
//					String kojiState = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_STAT);
//					
//					if (("002".equals(kojiAkSbtCd) || "004".equals(kojiAkSbtCd)) && !"900".equals(kojiState)) {
//						// 工事案件番号の取得
//						kojiAkNo = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO);
//					}
//				}
//			}
//		}
//		
//		// テレビ編
//		workMap = (HashMap<String, Object>) param.getData("KKSV072503SC");
//		if(workMap != null && workMap.containsKey("svc_kei_no")) {
//			svcKeiNoTv = (String) workMap.get("svc_kei_no");
//		}
//		
//		if (!StringUtils.isEmpty(svcKeiNoTv)) {
//			// ●工事案件番号の取得
//			condMap.clear();
//			condMap.put(JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNoTv);
//			reqMap = mapper.setEKU0011B050(param, fixedText, condMap);
//			resMap = scCall.run(reqMap, handle);
//			ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050(param, fixedText, resMap);
//			mapper.scResultCheck(param);
//			
//			// ■工事案件番号を抽出し、対象の工事案件情報を取得する。
//			Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
//			while(ku0011_b050Ite.hasNext())
//			{
//				// カレントの工事案件情報を取得
//				HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
//				
//				// 工事案件種別コードを取得
//				kojiAkSbtCd = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_SBT_CD);
//				
//				String kojiState = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_STAT);
//				
//				if (("002".equals(kojiAkSbtCd) || "004".equals(kojiAkSbtCd)) && !"900".equals(kojiState)) {
//					// 工事案件番号の取得
//					kojiAkNoTv = (String) curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO);
//				}
//			}
//		}
		
		// ネット撤去工事
		HashMap<String, Object> netDelKojiMap = (HashMap<String, Object>) param.getData("KKSV072503CC");
		// 電話撤去工事
		HashMap<String, Object> telDelKojiMap = (HashMap<String, Object>) param.getData("KKSV072508CC");
		// テレビ撤去工事
		HashMap<String, Object> tvDelKojiMap1 = (HashMap<String, Object>) param.getData("KKSV072513CC");
		HashMap<String, Object> tvDelKojiMap2 = (HashMap<String, Object>) param.getData("KKSV072515CC");
		
		String kojiAkNo = "";
		kojiAkNo = getDelKojiAkNo(kojiAkNo, netDelKojiMap);
		kojiAkNo = getDelKojiAkNo(kojiAkNo, telDelKojiMap);
		
		String kojiAkNoTv = "";
		kojiAkNoTv =  getDelKojiAkNo(kojiAkNoTv, tvDelKojiMap1);
		kojiAkNoTv =  getDelKojiAkNo(kojiAkNoTv, tvDelKojiMap2);
// OM-2013-0002573対応 20130926 星野 MOD END
		
		// 新設工事分 ネット・電話
		// ネット新設工事
		HashMap<String, Object> netNewKojiMap = (HashMap<String, Object>) param.getData("KKSV072505CC");
		// 電話新設工事
		HashMap<String, Object> telNewKojiMap = (HashMap<String, Object>) param.getData("KKSV072510CC");
		// テレビ新設工事
		HashMap<String, Object> tvNewKojiMap1 = (HashMap<String, Object>) param.getData("KKSV072517CC");
		HashMap<String, Object> tvNewKojiMap2 = (HashMap<String, Object>) param.getData("KKSV072519CC");
		
		String newKojiAkNoNetTel = "";
		newKojiAkNoNetTel = getNewKojiAkNo(newKojiAkNoNetTel, netNewKojiMap);
		newKojiAkNoNetTel = getNewKojiAkNo(newKojiAkNoNetTel, telNewKojiMap);
		String newKojiAkNoTv = "";
		newKojiAkNoTv =  getNewKojiAkNo(newKojiAkNoTv, tvNewKojiMap1);
		newKojiAkNoTv =  getNewKojiAkNo(newKojiAkNoTv, tvNewKojiMap2);
		
		// 設定編
		ArrayList<HashMap<String, Object>> adchg_dtl_list_kojiak = (ArrayList<HashMap<String, Object>>) KKSV072521ccMap.get("adchg_dtl_list_kojiak");
		Iterator<HashMap<String, Object>> adchg_dtl_list_kojiakIte = adchg_dtl_list_kojiak.iterator();
		while(adchg_dtl_list_kojiakIte.hasNext()) {
			
			HashMap<String, Object> adchg_dtl_list_kojiakMap = adchg_dtl_list_kojiakIte.next();
			String koji_sbt = (String)adchg_dtl_list_kojiakMap.get("adchg_dtl_koji_svc_sbt");
			
			if ("Net_Tel".equals(koji_sbt)) {
				adchg_dtl_list_kojiakMap.put("tkkj_kojiak_no", kojiAkNo);
				if(!StringUtils.isEmpty(newKojiAkNoNetTel)){
					adchg_dtl_list_kojiakMap.put("sinsetsu_kojiak_no", newKojiAkNoNetTel);
				}
			}
			if ("Tv".equals(koji_sbt)) {
				adchg_dtl_list_kojiakMap.put("tkkj_kojiak_no", kojiAkNoTv);
				if(!StringUtils.isEmpty(newKojiAkNoTv)){
					adchg_dtl_list_kojiakMap.put("sinsetsu_kojiak_no", newKojiAkNoTv);
				}
			}
		}

// ANK-1578-00-00 2014.01.24 T.TORIKAI ADD START（IT1-2014-0000040）
		/** 機器オプションサービス契約 */
		kkopDtlSet(param);
// ANK-1578-00-00 2014.01.24 T.TORIKAI ADD END  （IT1-2014-0000040）

		// ANK-2056-00-00 2014/04/28 start
		/** 電話オプションパック */
		if(StringUtils.isEmpty(telsvckei)){
			telsvckei = (String)KKSV072521ccMap.get("af_svc_kei_no");
		}
		// ST-2014-0000153 2014/09/17 mod start
		//telOpPackDtlSet(param, fixedText, handle, telsvckei, adchg_dtl_list_svc_kei_ucwk);
		telOpPackDtlSet(param, fixedText, handle, telsvckei, adchg_dtl_list_svc_kei_ucwk_tel);
		// ST-2014-0000153 2014/09/17 mod end
		// ANK-2056-00-00 2014/04/28 end
		
		return param;
	}
	
// OM-2013-0002573対応 20130926 星野 ADD START
	private String getDelKojiAkNo(String newKojiAkNo, HashMap<String, Object> delKojiMap) {
		if(delKojiMap!=null){
			if( !StringUtils.isEmpty( (String)delKojiMap.get("new_kojiak_no") ) ){
				newKojiAkNo = (String)delKojiMap.get("new_kojiak_no");
			}
		}
		return newKojiAkNo;
	}
// OM-2013-0002573対応 20130926 星野 ADD END
	private String getNewKojiAkNo(String newKojiAkNo, HashMap<String, Object> newKojiMap) {
		if(newKojiMap!=null){
			if( !StringUtils.isEmpty( (String)newKojiMap.get("new_kojiak_no") ) ){
				newKojiAkNo = (String)newKojiMap.get("new_kojiak_no");
			}else if( !StringUtils.isEmpty( (String)newKojiMap.get("haraidashi_kojiak_no") ) ){
				newKojiAkNo = (String)newKojiMap.get("haraidashi_kojiak_no");
			}
		}
		return newKojiAkNo;
	}
	
	/**
	 * 住所変更明細に設定する機器提供サービス契約の設定を行います。
	 * @param param
	 * @param fixedText
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void kikiDtlSet(IRequestParameterReadWrite param, String fixedText, SessionHandle handle) throws Exception {
		
		// 住所変更情報登録ＣＣのMapを取得
		HashMap<String, Object> KKSV072521ccMap = (HashMap<String, Object>) param.getData("KKSV072521CC");
		
		/** 照会 事前準備 */
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 機器の明細リストを取得
		ArrayList<HashMap<String, Object>> targetList = (ArrayList<HashMap<String, Object>>)KKSV072521ccMap.get("adchg_dtl_list_kktk_svc_kei");
		
		/** 住変後の機器リストを取得 */
		HashMap<String, Object> workMapTel = (HashMap<String, Object>) param.getData("KKSV072506SC");
		List<HashMap<String, Object>> kk0341_b002_map_list_tel = null;
// ANK-1667-00-00対応 20131231 星野 ADD START
		HashMap<String, Object> tvwork = (HashMap<String, Object>) param.getMappingWorkArea().get("JKKAddSvcKeiTvCCWork");
		List<HashMap<String, Object>> kk0341_b002_map_list_tv = null;
// ANK-1667-00-00対応 20131231 星野 ADD END
		List<HashMap<String, Object>> kk0341_b504_map_list = null;
		List<HashMap<String, Object>> kk0341_b504_map_list_old = null;
		
		//サービス契約回線内訳登録（新規分）
		HashMap<String, Object> adchgMap = (HashMap<String, Object>)KKSV072521ccMap.get("adchg_map");
		
		String kaisen_ucwk = null;
		if (!StringUtils.isEmpty((String)adchgMap.get("adchg_itens_svkei_kisuw_no"))) {
			kaisen_ucwk = (String)adchgMap.get("adchg_itens_svkei_kisuw_no");
		}
		
		//サービス契約回線内訳登録（継続分）
		String kaisen_ucwk_old = null;
		if (!StringUtils.isEmpty((String)adchgMap.get("adchg_itnm_svkei_kisuw_no"))) {
			kaisen_ucwk_old = (String)adchgMap.get("adchg_itnm_svkei_kisuw_no");
		}
		
// ANK-1667-00-00対応 20131231 星野 ADD START
		String adchgNo = (String)adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO);
// ANK-1667-00-00対応 20131231 星野 ADD END
		
		// 電話サービス分
		if (workMapTel.containsKey("svc_kei_no")) {
			// ・EKK0341B002 機器提供サービス契約一覧照会（サービス契約番号）
			condMap.clear();
			condMap.put("cond_key_svc_kei_no", (String)workMapTel.get("svc_kei_no"));
			reqMap = mapper.setEKK0341B002( param, fixedText, condMap);
			resMap = scCall.run( reqMap, handle);
			kk0341_b002_map_list_tel = mapper.getEKK0341B002( param, fixedText, resMap );
			mapper.scResultCheck( param );
		}
// ANK-1667-00-00対応 20131231 星野 ADD START
		// テレビサービス分
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD START 
// svc_kei_ucwk_noをsvc_kei_noに変更
//		if( tvwork != null && !StringUtils.isEmpty( (String)tvwork.get("svc_kei_ucwk_no") ) ){
//		// ・EKK0341B002 機器提供サービス契約一覧照会（サービス契約番号）
//		condMap.clear();
//		condMap.put("cond_key_svc_kei_no", (String)tvwork.get("svc_kei_ucwk_no"));
		if( tvwork != null && !StringUtils.isEmpty( (String)tvwork.get("svc_kei_no") ) ){
			// ・EKK0341B002 機器提供サービス契約一覧照会（サービス契約番号）
			condMap.clear();
			condMap.put("cond_key_svc_kei_no", (String)tvwork.get("svc_kei_no"));
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD END
			reqMap = mapper.setEKK0341B002( param, fixedText, condMap);
			resMap = scCall.run( reqMap, handle);
			kk0341_b002_map_list_tv = mapper.getEKK0341B002( param, fixedText, resMap );
			mapper.scResultCheck( param );
		}
// ANK-1667-00-00対応 20131231 星野 ADD END
		
		
		// 回線に紐づく機器(新規分)
		if (!StringUtils.isEmpty(kaisen_ucwk)) {
			// ・EKK0341B504 機器提供サービス契約一覧照会（サービス契約回線内訳番号）
			condMap.clear();
			condMap.put("key_svc_kei_kaisen_ucwk_no", kaisen_ucwk);
			reqMap = mapper.setEKK0341B504( param, fixedText, condMap);
			resMap = scCall.run( reqMap, handle);
			kk0341_b504_map_list = mapper.getEKK0341B504( param, fixedText, resMap );
			mapper.scResultCheck( param );
		}
		// 回線に紐づく機器(従来分)
		if (!StringUtils.isEmpty(kaisen_ucwk_old)) {
			// ・EKK0341B504 機器提供サービス契約一覧照会（サービス契約回線内訳番号）
			condMap.clear();
			condMap.put("key_svc_kei_kaisen_ucwk_no", kaisen_ucwk_old);
			reqMap = mapper.setEKK0341B504( param, fixedText, condMap);
			resMap = scCall.run( reqMap, handle);
			kk0341_b504_map_list_old = mapper.getEKK0341B504( param, fixedText, resMap );
			mapper.scResultCheck( param );
		}
		
		int i = 0;	//	カウンタ
		boolean newflg = true;		// 新規機器フラグ
		
		// 電話サービス分
		if (kk0341_b002_map_list_tel != null) {
			Iterator<HashMap<String, Object>> kk0341_b002_map_list_tel_ite = kk0341_b002_map_list_tel.iterator();
			while(kk0341_b002_map_list_tel_ite.hasNext()) {
				
				newflg = true;	// 	フラグリセット
	
				HashMap<String, Object> afterKikiMap = new HashMap<String, Object>();	// 	格納マップ
				HashMap<String, Object> kikiteikyo_map = kk0341_b002_map_list_tel_ite.next();
				String kikiteikyoNo = (String)kikiteikyo_map.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				
				// 機器提供サービス契約一意紹介
				condMap.clear();
				condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, kikiteikyoNo);
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				reqMap = mapper.setEKK0341B032(param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				List<HashMap<String, Object>> kk0341_b032_map_af = mapper.getEKK0341B032( param, fixedText, resMap );
				mapper.scResultCheck(param);
				
				HashMap<String, Object> kk0341_a010_map = new HashMap<String, Object>();
				if (kk0341_b032_map_af.size() > 0) {
					kk0341_a010_map = kk0341_b032_map_af.get(0);
				}
				
// OM-2014-0000455対応 20140131 星野 ADD START
				// 解約済・キャンセル済は処理対象外
				String kktkSvcKeiStat = (String)kk0341_a010_map.get(EKK0341B032CBSMsg1List.KKTK_SVC_KEI_STAT);
				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat)){
					continue;
				}
// OM-2014-0000455対応 20140131 星野 ADD END
				String kikichgNo = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
				for (i = 0; i < targetList.size(); i ++) {
					HashMap<String, Object> exsistKikiMap = targetList.get(i);
					String targetNo = (String)exsistKikiMap.get("adchg_dtl_chg_tg_kei_no");
					String dtlafNo = (String)exsistKikiMap.get("adchg_dtl_chaf_skbt_no");
					
					// 明細リストにあり、変更後識別番号があるものは引継ぎ対象
					if( kikiteikyoNo.equals(targetNo) ){
						if( !StringUtils.isEmpty(dtlafNo) ) {
							exsistKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
						}
						newflg = false;
					}
				}
				
				// リストにヒットしなかった場合は新規機器
				if (newflg) {
					afterKikiMap.put("adchg_dtl_chg_tg_kei_no", kikiteikyoNo);
					afterKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
					targetList.add(afterKikiMap);
				}
				
			}
		}
// ANK-1667-00-00対応 20131231 星野 ADD START
		// テレビサービス分
		if (kk0341_b002_map_list_tv != null) {
			Iterator<HashMap<String, Object>> kk0341_b002_map_list_tv_ite = kk0341_b002_map_list_tv.iterator();
			while(kk0341_b002_map_list_tv_ite.hasNext()) {
				
				newflg = true;	// 	フラグリセット
	
				HashMap<String, Object> afterKikiMap = new HashMap<String, Object>();	// 	格納マップ
				HashMap<String, Object> kikiteikyo_map = kk0341_b002_map_list_tv_ite.next();
				String kikiteikyoNo = (String)kikiteikyo_map.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				
				// 機器提供サービス契約一意紹介
				condMap.clear();
				condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, kikiteikyoNo);
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				reqMap = mapper.setEKK0341B032(param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				List<HashMap<String, Object>> kk0341_b032_map_af = mapper.getEKK0341B032( param, fixedText, resMap );
				mapper.scResultCheck(param);
				
				HashMap<String, Object> kk0341_a010_map = new HashMap<String, Object>();
				if (kk0341_b032_map_af.size() > 0) {
					kk0341_a010_map = kk0341_b032_map_af.get(0);
				}
				
// OM-2014-0000455対応 20140131 星野 ADD START
				// 解約済・キャンセル済は処理対象外
				String kktkSvcKeiStat = (String)kk0341_a010_map.get(EKK0341B032CBSMsg1List.KKTK_SVC_KEI_STAT);
				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat)){
					continue;
				}
// OM-2014-0000455対応 20140131 星野 ADD END
				String kikichgNo = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
				for (i = 0; i < targetList.size(); i ++) {
					HashMap<String, Object> exsistKikiMap = targetList.get(i);
					String targetNo = (String)exsistKikiMap.get("adchg_dtl_chg_tg_kei_no");
					String dtlafNo = (String)exsistKikiMap.get("adchg_dtl_chaf_skbt_no");
					
					// 明細リストにあり、変更後識別番号があるものは引継ぎ対象
					if( kikiteikyoNo.equals(targetNo) ){
						if( !StringUtils.isEmpty(dtlafNo) ) {
							exsistKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
						}
						newflg = false;
					}
				}
				
				// リストにヒットしなかった場合は新規機器
				if (newflg) {
					afterKikiMap.put("adchg_dtl_chg_tg_kei_no", kikiteikyoNo);
					afterKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
					targetList.add(afterKikiMap);
				}
				
			}
		}
// ANK-1667-00-00対応 20131231 星野 ADD END
				
		// 回線に紐づく機器（新規分）
		if (kk0341_b504_map_list != null) {
			Iterator<HashMap<String, Object>> kk0341_b504_map_list_ite = kk0341_b504_map_list.iterator();
			while(kk0341_b504_map_list_ite.hasNext()) {
				
				newflg = true;	// 	フラグリセット
	
				HashMap<String, Object> afterKikiMap = new HashMap<String, Object>();	// 	格納マップ
				HashMap<String, Object> kikiteikyo_map = kk0341_b504_map_list_ite.next();
				String kikiteikyoNo = (String)kikiteikyo_map.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				
				// 機器提供サービス契約一意紹介
				condMap.clear();
				condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, kikiteikyoNo);
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				reqMap = mapper.setEKK0341B032(param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				List<HashMap<String, Object>> kk0341_b032_map_af = mapper.getEKK0341B032(param, fixedText, resMap);
				mapper.scResultCheck(param);
				
				HashMap<String, Object> kk0341_a010_map = new HashMap<String, Object>();
				if (kk0341_b032_map_af.size() > 0) {
					kk0341_a010_map = kk0341_b032_map_af.get(0);
				}
				
// OM-2014-0000455対応 20140131 星野 ADD START
				// 解約済・キャンセル済は処理対象外
				String kktkSvcKeiStat = (String)kk0341_a010_map.get(EKK0341B032CBSMsg1List.KKTK_SVC_KEI_STAT);
				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat)){
					continue;
				}
// OM-2014-0000455対応 20140131 星野 ADD END
				String kikichgNo = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
				for (i = 0; i < targetList.size(); i ++) {
					HashMap<String, Object> exsistKikiMap = targetList.get(i);
					String targetNo = (String)exsistKikiMap.get("adchg_dtl_chg_tg_kei_no");
					String dtlafNo = (String)exsistKikiMap.get("adchg_dtl_chaf_skbt_no");
					
					// 明細リストにあり、変更後識別番号があるものは引継ぎ対象
					if( kikiteikyoNo.equals(targetNo) ){
						if( !StringUtils.isEmpty(dtlafNo) ){
							exsistKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
						}
						newflg = false;
					}
				}
				
				// リストにヒットしなかった場合は新規機器
				if (newflg) {
					afterKikiMap.put("adchg_dtl_chg_tg_kei_no", kikiteikyoNo);
					afterKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
// ANK-1667-00-00対応 20131231 星野 ADD START
					// EKK2101B001 住所変更明細一覧照会
					condMap.clear();
					condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_NO, adchgNo);
					condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, "03");
					reqMap = mapper.setEKK2101B001(param, fixedText, condMap);
					resMap = scCall.run(reqMap, handle);
					ArrayList<HashMap<String, Object>> listEKK2101B001 = mapper.getEKK2101B001(param, fixedText, resMap);
					mapper.scResultCheck(param);
					
					for(HashMap<String, Object> mapEKK2101B001 : listEKK2101B001){
						if( kikiteikyoNo.equals( mapEKK2101B001.get(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO) ) ){
							afterKikiMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, mapEKK2101B001.get(EKK2101B001CBSMsg1List.ADCHG_DTL_NO) );
						}
					}
// ANK-1667-00-00対応 20131231 星野 ADD END
					
					targetList.add(afterKikiMap);
				}
				
			}
		}
		// 回線に紐づく機器（従来分）
		if (kk0341_b504_map_list_old != null) {
			Iterator<HashMap<String, Object>> kk0341_b504_map_list_ite = kk0341_b504_map_list_old.iterator();
			while(kk0341_b504_map_list_ite.hasNext()) {
				
				newflg = true;	// 	フラグリセット
	
				HashMap<String, Object> afterKikiMap = new HashMap<String, Object>();	// 	格納マップ
				HashMap<String, Object> kikiteikyo_map = kk0341_b504_map_list_ite.next();
				String kikiteikyoNo = (String)kikiteikyo_map.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				
				// 機器提供サービス契約一意紹介
				condMap.clear();
				condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, kikiteikyoNo);
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				reqMap = mapper.setEKK0341B032(param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				List<HashMap<String, Object>> kk0341_b032_map_af = mapper.getEKK0341B032(param, fixedText, resMap);
				mapper.scResultCheck(param);
				
				HashMap<String, Object> kk0341_a010_map = new HashMap<String, Object>();
				if (kk0341_b032_map_af.size() > 0) {
					kk0341_a010_map = kk0341_b032_map_af.get(0);
				}
				
// OM-2014-0000455対応 20140131 星野 ADD START
				// 解約済・キャンセル済は処理対象外
				String kktkSvcKeiStat = (String)kk0341_a010_map.get(EKK0341B032CBSMsg1List.KKTK_SVC_KEI_STAT);
				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat)){
					continue;
				}
// OM-2014-0000455対応 20140131 星野 ADD END
				String kikichgNo = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
				for (i = 0; i < targetList.size(); i ++) {
					HashMap<String, Object> exsistKikiMap = targetList.get(i);
					String targetNo = (String)exsistKikiMap.get("adchg_dtl_chg_tg_kei_no");
					String dtlafNo = (String)exsistKikiMap.get("adchg_dtl_chaf_skbt_no");
					
					// 明細リストにあり、変更後識別番号があるものは引継ぎ対象
					if( kikiteikyoNo.equals(targetNo) ){
						if( !StringUtils.isEmpty(dtlafNo) ){
							exsistKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
						}
						newflg = false;
					}
				}
				
				// リストにヒットしなかった場合は新規機器
				if (newflg) {
					afterKikiMap.put("adchg_dtl_chg_tg_kei_no", kikiteikyoNo);
					afterKikiMap.put("adchg_dtl_chaf_skbt_no", kikichgNo);
					targetList.add(afterKikiMap);
				}
				
			}
		}
	}

// ANK-1578-00-00 2014.01.24 T.TORIKAI メソッド追加（IT1-2014-0000040）
	/**
	 * 住所変更明細：機器オプションサービス契約のパラメータを設定する
	 * @param param
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void kkopDtlSet(IRequestParameterReadWrite param) throws Throwable {

		// 作業領域を取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null) {
			return;	
		}
		// 機器オプション情報変更CCの作業領域を取得
		Map<String, Object> ccWorkMap = (Map<String, Object>)workMap.get(JKKAdchgConstCC.CC_WORK_AREA_NAME_KKOP);
		if (ccWorkMap == null) {
			return;
		}
		// 機器オプション情報変更CCの処理結果を取得
		List<Map<String, String>> ccResultList = (List<Map<String, String>>)ccWorkMap.get(JKKAdchgKkopInfoChgCC.ADCHG_DTL_KKOP_LIST);
		if (ccResultList == null) {
			return;
		}

		// 住変明細：機器オプションサービス契約を作成
		List<Map<String, String>> adchgDtlKkopList = new ArrayList<Map<String, String>>();
		for (Map<String, String> kkopInfo : ccResultList) {
			String motoMultiRouterNo = kkopInfo.get(JKKAdchgKkopInfoChgCC.MOTO_MULTI_ROUTER_KKTK_SVC_KEI_NO);
			String sakiMultiRouterNo = kkopInfo.get(JKKAdchgKkopInfoChgCC.SAKI_MULTI_ROUTER_KKTK_SVC_KEI_NO);
			String motokkopSvcKeiNo = kkopInfo.get(JKKAdchgKkopInfoChgCC.MOTO_KKOP_SVC_KEI_NO);
			String sakikkopSvcKeiNo = kkopInfo.get(JKKAdchgKkopInfoChgCC.SAKI_KKOP_SVC_KEI_NO);

			Map<String, String> adchgDtlKkop = new HashMap<String, String>();
			adchgDtlKkop.put("adchg_dtl_chbf_skbt_no", motokkopSvcKeiNo);	// 変更前識別番号
			adchgDtlKkop.put("adchg_dtl_chaf_skbt_no", sakikkopSvcKeiNo);	// 変更後識別番号
			if (StringUtils.isEmpty(sakikkopSvcKeiNo)) {
				// 転居先に機器オプション無し
				adchgDtlKkop.put("adchg_dtl_chg_tg_kei_no", motoMultiRouterNo);
			} else {
				// 転居先に機器オプション有り
				adchgDtlKkop.put("adchg_dtl_chg_tg_kei_no", sakiMultiRouterNo);
			}
			adchgDtlKkopList.add(adchgDtlKkop);
		}

		// 住所変更情報登録ＣＣのパラメータを取得
		HashMap<String, Object> paramKKSV072521CC = (HashMap<String, Object>) param.getData("KKSV072521CC");
		if (paramKKSV072521CC == null) {
			return;
		}
		paramKKSV072521CC.put("adchg_dtl_list_kkop_svc_kei", adchgDtlKkopList);
	}
	
	// ANK-2056-00-00 2014/04/28 start
	/**
	 * 住所変更明細：電話オプションパックのパラメータを設定する
	 * @param param
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void telOpPackDtlSet(IRequestParameterReadWrite param, String fixedText, SessionHandle handle, 
			String tel_svc_kei, ArrayList<HashMap<String, Object>> adchg_dtl_list_svc_kei_ucwk) throws Throwable {

		// 住所変更情報登録ＣＣのパラメータを取得
		HashMap<String, Object> paramKKSV072521CC = (HashMap<String, Object>) param.getData("KKSV072521CC");
		if (paramKKSV072521CC == null) {
			return;
		}
		// 電話オプションパック情報変更CCの作業領域を取得
		ArrayList<HashMap<String, Object>> opPackList = (ArrayList<HashMap<String, Object>>)paramKKSV072521CC.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_OP_PAC);
		if (opPackList == null || opPackList.size()==0) {
			return;
		}
		
		// 住変明細：電話オプションパックを作成
		List<Map<String, String>> adchgDtlOpPacList = new ArrayList<Map<String, String>>();

		//新しくできたサービス契約内訳について
		for(int i=0; i<adchg_dtl_list_svc_kei_ucwk.size(); i++){
			String adchg_dtl_chbf_skbt_no = (String)adchg_dtl_list_svc_kei_ucwk.get(i).get("adchg_dtl_chbf_skbt_no");
			String adchg_dtl_chaf_skbt_no = (String)adchg_dtl_list_svc_kei_ucwk.get(i).get("adchg_dtl_chaf_skbt_no");
			if(StringUtils.isEmpty(adchg_dtl_chbf_skbt_no) && !StringUtils.isEmpty(adchg_dtl_chaf_skbt_no)){
				ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,
						tel_svc_kei, adchg_dtl_chaf_skbt_no);
				if(wribSvcKeiList != null && wribSvcKeiList.size()>0){
					String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");

					Map<String, String> adchgDtlOpPac = new HashMap<String, String>();
					adchgDtlOpPac.put("adchg_dtl_chbf_skbt_no", "");	// 変更前割引サービス契約番号
					adchgDtlOpPac.put("adchg_dtl_chaf_skbt_no", wribSvcKeiNo);	// 変更後割引サービス契約番号
					adchgDtlOpPacList.add(adchgDtlOpPac);
				}
			}
		}
		
//変更は無い
//		//引継(そのまま)あるいは変更あるいは解約のサービス契約内訳について
//		for (Map<String, Object> opPacInfo : opPackList) {
//			String motoSvcKeiUcwkNo = (String)opPacInfo.get("adchg_dtl_bf_svc_kei_ucwk_no");
//			String adchg_dtl_chbf_pack_skcd = (String)opPacInfo.get("adchg_dtl_chbf_pack_skcd");
//			String adchg_dtl_chaf_pack_skcd = (String)opPacInfo.get("adchg_dtl_chaf_pack_skcd");
//			
//			Map<String, String> adchgDtlOpPac = new HashMap<String, String>();
//			if("0".equals(adchg_dtl_chbf_pack_skcd) && "0".equals(adchg_dtl_chaf_pack_skcd)){
//				//なし→なし
//				continue;
//			}
//			
//			ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,
//					tel_svc_kei, motoSvcKeiUcwkNo);
//			
//			if("0".equals(adchg_dtl_chaf_pack_skcd)){
//				//解約
//				adchgDtlOpPac.put("adchg_dtl_chbf_skbt_no", (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no"));	// 変更前割引サービス契約番号
//				adchgDtlOpPac.put("adchg_dtl_chaf_skbt_no", "");	// 変更後割引サービス契約番号
//			}else{
//				//継続あるいは変更
//				String motoWribSvcKeiNo = "";
//				String sakiWribSvcKeiNo = "";
//				for(int j=0; j<wribSvcKeiList.size(); j++){
//					if(adchg_dtl_chbf_pack_skcd.equals(wribSvcKeiList.get(j).get("pack_div"))){
//						motoWribSvcKeiNo = (String)wribSvcKeiList.get(j).get("wrib_svc_kei_no");
//					}else{
//						sakiWribSvcKeiNo = (String)wribSvcKeiList.get(j).get("wrib_svc_kei_no");
//					}
//				}
//				adchgDtlOpPac.put("adchg_dtl_chbf_skbt_no", motoWribSvcKeiNo);	// 変更前割引サービス契約番号
//				adchgDtlOpPac.put("adchg_dtl_chaf_skbt_no", sakiWribSvcKeiNo);	// 変更後割引サービス契約番号
//			}
//			
//			adchgDtlOpPacList.add(adchgDtlOpPac);
//		}

		paramKKSV072521CC.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_OP_PAC, adchgDtlOpPacList);
	}
	
	/**
	 * 電話セレクトオプションパック操作CCでパック情報を取得
	 * 
	 * @param param
	 * @param fixedText
	 * @throws Throwable 
	 */
	private ArrayList<HashMap<String, Object>> getTelSelectOpPack(SessionHandle handle, IRequestParameterReadWrite param, 
			String svc_kei_no, String svc_kei_ucwk_no) throws Throwable {
		String fixedTextPackCC = "fixedTextPackCC";
		JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
		//電話セレクトオプションパック操作CCに渡すパラメータを作成
		HashMap<String, Object> paramMapPackCC = new HashMap<String, Object>();
		paramMapPackCC.put("func_cd", "1");
		paramMapPackCC.put("trn_div","00"); //照会
		paramMapPackCC.put("svc_kei_no",svc_kei_no);
		paramMapPackCC.put("svc_kei_ucwk_no",svc_kei_ucwk_no);
		param.setData(fixedTextPackCC, paramMapPackCC);
		//照会を実行
		param = telSelectOpPackOperateCC.execute(handle, param, fixedTextPackCC);

		HashMap<String, Object> retMapPackCC = (HashMap<String, Object>)param.getData(fixedTextPackCC);
		ArrayList<HashMap<String, Object>> retList = (ArrayList<HashMap<String, Object>>)retMapPackCC.get("wrib_svc_kei_list"); 
		//無効な割引サービス契約情報は除く
		for(int i=retList.size()-1; i>=0; i--){
			if("900".compareTo((String)retList.get(i).get("wrib_svc_kei_stat")) <= 0 ){
				retList.remove(i);
			}
		}
		return retList;
	}
	// ANK-2056-00-00 2014/04/28 end
	
}
