/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSV0674068MappingCC
*	ソースファイル名：JKKSV0674068MappingCC.java
*	作成者			：富士通
*	日付			：2012年09月05日
*＜機能概要＞
*	マッピングCCです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/09/05	FJ)松枝		新規作成
*	v8.00.00	2014/04/07	FJ)星野		OM-2014-0001371 対応
*	v14.00.00	2015/06/09	FJ)森脇		OM-2015-0001144 対応
*
**********************************************************************/
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.custom.constant.JKKAdchgHakkoSODConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
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.EKK0341B019CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg1List;

public class JKKSV0674068MappingCC extends AbstractCommonComponent
{
	
	/**
	 * CCへのマッピング処理を行います
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		/** 前準備 **/
		HashMap<String, String> condMap;
		HashMap<String, Object> paramMap = (HashMap<String, Object>) param.getData(fixedText);
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		JKKAdchgCmnLogicCC lclCmnLogic = new JKKAdchgCmnLogicCC(handle);
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		String saki_svc_kei_no =null;
		ArrayList<HashMap<String, Object>> opSvcKeiList = null;
		HashMap<String, Object> opMap = null;
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD START
		ArrayList<HashMap<String, Object>> kikiSvcKeiList = null;
		HashMap<String, Object> kikiMap = null;
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD END
// OM-2014-0001371対応 20140407 星野 ADD START
		HashMap<String, Object> kikiMapR0 = null;
// OM-2014-0001371対応 20140407 星野 ADD END
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
		HashMap<String, Object> opMap2 = null;
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
		
		// サービスオーダ発行ＣＣ（eo光ネット）のMapを取得
		HashMap<String, Object> kksv0674068ccMap = (HashMap<String, Object>) param.getData("KKSV0674068CC");
		if(kksv0674068ccMap==null){
			return param;
		}
		
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
		// 判定後変更区分<ネット>を取得する
		HashMap<String, Object> jdgChgDivNetMap = null;
		String jdgChgDivNet = null;
		
		jdgChgDivNetMap = (HashMap<String, Object>)param.getData("KKSV0674005CC");
		
		jdgChgDivNet = (String)jdgChgDivNetMap.get("jdg_chg_div_net");
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
		
		// サービス契約一意照会<ネット>のワーク領域
		HashMap<String, Object> workMapNet = (HashMap<String, Object>) param.getData("KKSV0674008SC");
		if(workMapNet!=null && !StringUtils.isEmpty( (String) workMapNet.get("svc_kei_no") ) ){
			saki_svc_kei_no = (String) workMapNet.get("svc_kei_no");
			
			// ・EKK0351B002 オプションサービス契約一覧照会（サービス契約番号）
			condMap = new HashMap<String, String>();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, saki_svc_kei_no);
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
//			condMap.put(JKKAdchgMapperCC.COND_KEY_OP_SVC_CD, "B020");
			if ("4".equals(jdgChgDivNet))
			{
				//光ネット解約／新規の場合、ダイヤルアップ接続を取得
				condMap.put(JKKAdchgMapperCC.COND_KEY_OP_SVC_CD, "B020");
			}
			else
			{
				//マルチセッションを取得
				condMap.put(JKKAdchgMapperCC.COND_KEY_OP_SVC_CD, "B015");
			}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
			reqMap = mapper.setEKK0351B002(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			opSvcKeiList = mapper.getEKK0351B002( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			if (opSvcKeiList.size() == 0) {
				opSvcKeiList = null;
			}
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD START
			// ・EKK0341B002 機器提供サービス契約一覧照会（サービス契約番号）
			reqMap = mapper.setEKK0341B002(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			kikiSvcKeiList = mapper.getEKK0341B002( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			if (kikiSvcKeiList.size() == 0) {
				kikiSvcKeiList = null;
			}
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD END
		}
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD START
		if (kikiSvcKeiList != null){
// OM-2014-0001371対応 20140407 星野 MOD START
//			kikiMap = kikiSvcKeiList.get(0);
			for(HashMap<String, Object> kikiSvcKeiMap : kikiSvcKeiList){
				String kktkSvcCd = (String)kikiSvcKeiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
				// BBRのみを対象とする
				if("C014".equals(kktkSvcCd)){
					kikiMap = kikiSvcKeiMap;
				}
			}
// OM-2014-0001371対応 20140407 星野 MOD END
		}
// ANK-1578-00-00 2013.12.10 Y.Kanata ADD START
		if (!StringUtils.isEmpty((String) workMapNet.get("svc_kei_no"))) {
			condMap = new HashMap<String, String>();
			condMap.put("svc_kei_no", (String) workMapNet.get("svc_kei_no"));
// IT1-2013-0001749 (ANK-1578-00-00) 2013.12.25 Y.Kanata MOD START
//			condMap.put("base_ymd", JCCBPCommon.getOpeDate(null));
			condMap.put("base_ymd", JKKAdchgConstCC.MAX_DATE);
// IT1-2013-0001749 (ANK-1578-00-00) 2013.12.25 Y.Kanata MOD END

// OM-2014-0001371対応 20140407 星野 MOD START
//			kikiMap = getTakinouRouterInfo( handle, param, fixedText, condMap );
			kikiMapR0 = getTakinouRouterInfo( handle, param, fixedText, condMap );
// OM-2014-0001371対応 20140407 星野 MOD END
		}
// ANK-1578-00-00 2013.12.10 Y.Kanata ADD END
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD END

// OM-2015-0001144 2015/06/22 ADD START
		// マルチセッション固定リスト
		ArrayList<HashMap<String, Object>> maruOpSvcKeiList = new ArrayList<HashMap<String, Object>>();
		// マルチセッション固定リスト２
		ArrayList<HashMap<String, Object>> maruOpSvcKeiList2 = new ArrayList<HashMap<String, Object>>();
// OM-2015-0001144 2015/06/22 ADD END
		if (opSvcKeiList != null){
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
//			int i = opSvcKeiList.size();
//			i--;
//			opMap = opSvcKeiList.get(i);
// OM-2015-0001144 2015/06/22 MOD START
//			opMap = opSvcKeiList.get(0);
			for (int i = 0; i < opSvcKeiList.size(); i++)
			{
				if("030".compareTo((String) opSvcKeiList.get(i).get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) <= 0
						&& JKKStrConst.CD00037_DSL_ZM.compareTo((String) opSvcKeiList.get(i).get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) > 0)
				{
					opMap = opSvcKeiList.get(i);
					maruOpSvcKeiList = opSvcKeiList;
					break;
				}
			}
// OM-2015-0001144 2015/06/22 MOD END
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
		}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
		if (!"4".equals(jdgChgDivNet))
		{
			opSvcKeiList = null;
			// サービス契約一意照会<ネット>のワーク領域
			if(workMapNet!=null && !StringUtils.isEmpty( (String) workMapNet.get("svc_kei_no") ) ){
				saki_svc_kei_no = (String) workMapNet.get("svc_kei_no");
				
				// ・EKK0351B002 オプションサービス契約一覧照会（サービス契約番号）
				condMap = new HashMap<String, String>();
				condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, saki_svc_kei_no);
				//固定グローバルIPを取得
				condMap.put(JKKAdchgMapperCC.COND_KEY_OP_SVC_CD, "B004");
				reqMap = mapper.setEKK0351B002(param, fixedText, condMap);
				resMap = scCall.run(reqMap, handle);
				opSvcKeiList = mapper.getEKK0351B002( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				if (opSvcKeiList.size() == 0) {
					opSvcKeiList = null;
				}
			}
			if (opSvcKeiList != null){
//				int i = opSvcKeiList.size();
//				i--;
//				opMap2 = opSvcKeiList.get(i);
// OM-2015-0001144 2015/06/22 MOD START
//				opMap2 = opSvcKeiList.get(0);
				for (int i = 0; i < opSvcKeiList.size(); i++)
				{
					if("030".compareTo((String) opSvcKeiList.get(i).get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) <= 0
							&& JKKStrConst.CD00037_DSL_ZM.compareTo((String) opSvcKeiList.get(i).get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) > 0)
					{
						opMap2 = opSvcKeiList.get(i);
						maruOpSvcKeiList2 = opSvcKeiList;
						break;
					}
				}
// OM-2015-0001144 2015/06/22 MOD END
			}
		}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
		
		// 登録のワーク
		HashMap<String, Object> work = (HashMap<String, Object>) param.getMappingWorkArea().get("JKKAddSvcKeiNetCCWork");
		
		
// UI課題対応 SOD発行 Y.MORIMOTO 2012.10.19 START
//		ArrayList<HashMap<String, Object>> trgt_data_list = (ArrayList<HashMap<String, Object>>) kksv0674068ccMap.get("trgt_data_list");
//		if(trgt_data_list==null || trgt_data_list.isEmpty()){
//			return param;
//		}
//		
//		
//		for(HashMap<String, Object> trgt_data_map : trgt_data_list){
//			// サービス契約情報が設定されている場合
//			if( trgt_data_map.containsKey("svc_kei_info") ){
//				HashMap<String, Object> svc_kei_info = (HashMap<String, Object>) trgt_data_map.get("svc_kei_info");
//				 
//				// ネットのワーク領域
//				HashMap<String, Object> workMapNet = (HashMap<String, Object>) param.getMappingWorkArea().get("JKKAddSvcKeiNetCCWork");
//				if(workMapNet!=null && !StringUtils.isEmpty( (String) workMapNet.get("svc_kei_no") ) ){
//					 // サービス契約情報.先サービス契約番号を上書き
//					svc_kei_info.put( "saki_svc_kei_no", (String) workMapNet.get("svc_kei_no") );
//				}
//			}
//			
//			// サービス契約内訳情報が設定されている場合
//			if( trgt_data_map.containsKey("svc_kei_ucwk_info") ){
//				HashMap<String, Object> svc_kei_ucwk_info = (HashMap<String, Object>) trgt_data_map.get("svc_kei_ucwk_info");
//				String svc_kei_ucwk_no = (String) svc_kei_ucwk_info.get("svc_kei_ucwk_no");
//				
//				// ■ EKK0161A010 サービス契約内訳一意照会
//				HashMap<String, Object> kk0161_a010_map =lclCmnLogic.getEKK0161A010(param, mapper, fixedText, scCall, svc_kei_ucwk_no, JCCBPCommon.getOpeDate(null));
//				
//				// サービス契約内訳情報.変更後サービス契約内訳世代登録年月日時分秒
//				svc_kei_ucwk_info.put( "chaf_svc_kei_ucwk_gene_add_dtm", kk0161_a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM) );
//			}
//		}
		ArrayList<HashMap<String, Object>> odr_hakko_svc_kei_list = (ArrayList<HashMap<String, Object>>) kksv0674068ccMap.get("odr_hakko_svc_kei_list");
		if(odr_hakko_svc_kei_list==null || odr_hakko_svc_kei_list.isEmpty()){
			return param;
		}
		
		HashMap<String, Object> trgt_data_map = (HashMap<String, Object>)odr_hakko_svc_kei_list.get(0);
		if(trgt_data_map==null || trgt_data_map.isEmpty()){
			return param;
		}
		
		ArrayList<HashMap<String, Object>> hakko_trgr_trgt_list = (ArrayList<HashMap<String, Object>>) trgt_data_map.get("hakko_trgr_trgt_list");
		if(hakko_trgr_trgt_list==null || hakko_trgr_trgt_list.isEmpty()){
			return param;
		}
		
		HashMap<String, Object> hakko_trgt_trgt_data_map = (HashMap<String, Object>)hakko_trgr_trgt_list.get(0);
		if(hakko_trgt_trgt_data_map==null || hakko_trgt_trgt_data_map.isEmpty()){
			return param;
		}
		
		ArrayList<HashMap<String, Object>> kiki_trgt_data_list = (ArrayList<HashMap<String, Object>>) hakko_trgt_trgt_data_map.get("kiki_trgt_data_list");
		if(kiki_trgt_data_list==null || kiki_trgt_data_list.isEmpty()){
			
		} else{
		
			for(HashMap<String, Object> kiki_trgt_data_map : kiki_trgt_data_list){
				// サービス契約情報が設定されている場合
				if( kiki_trgt_data_map.containsKey("svc_kei_info") ){
					HashMap<String, Object> svc_kei_info = (HashMap<String, Object>) kiki_trgt_data_map.get("svc_kei_info");
					 
					if(workMapNet!=null && !StringUtils.isEmpty( (String) workMapNet.get("svc_kei_no") ) ){
//故障対応 2012.11.21 ADD START
						if ("0".equals(jdgChgDivNet))
						{
							// 追加の場合、サービス契約情報.サービス契約番号を上書き
							svc_kei_info.put( "svc_kei_no", saki_svc_kei_no );
							svc_kei_info.put( "chbf_svc_kei_gene_add_dtm", (String) workMapNet.get("gene_add_dtm") );
						}
//故障対応 2012.11.21 ADD END
						 // サービス契約情報.先サービス契約番号を上書き
						svc_kei_info.put( "saki_svc_kei_no", saki_svc_kei_no );
						svc_kei_info.put( "chaf_svc_kei_gene_add_dtm", (String) workMapNet.get("gene_add_dtm") );
					}
				}
				
				// 前サービス契約内訳情報が設定されている場合
				if( kiki_trgt_data_map.containsKey("svc_kei_ucwk_info") ){
					HashMap<String, Object> svc_kei_ucwk_info = (HashMap<String, Object>) kiki_trgt_data_map.get("svc_kei_ucwk_info");
					String svc_kei_ucwk_no = (String) svc_kei_ucwk_info.get("svc_kei_ucwk_no");
					
					// ■ EKK0161A010 サービス契約内訳一意照会
					HashMap<String, Object> kk0161_a010_map =lclCmnLogic.getEKK0161A010(param, mapper, fixedText, scCall, svc_kei_ucwk_no, JCCBPCommon.getOpeDate(null));
					
					// サービス契約内訳情報.変更前サービス契約内訳世代登録年月日時分秒
					svc_kei_ucwk_info.put( "chbf_svc_kei_ucwk_gene_add_dtm", kk0161_a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM) );
				}
			
				// 先サービス契約内訳情報が設定されている場合
				if(work != null){
					HashMap<String, Object> svc_kei_ucwk_info = (HashMap<String, Object>) kiki_trgt_data_map.get("svc_kei_ucwk_info");
					String af_svc_kei_ucwk_no = (String) work.get("svc_kei_ucwk_no");
					
					// ■ EKK0161A010 サービス契約内訳一意照会
					HashMap<String, Object> kk0161_a010_map =lclCmnLogic.getEKK0161A010(param, mapper, fixedText, scCall, af_svc_kei_ucwk_no, JCCBPCommon.getOpeDate(null));
					
					// サービス契約内訳情報.変更後サービス契約内訳世代登録年月日時分秒
					svc_kei_ucwk_info.put( "saki_svc_kei_ucwk_no", af_svc_kei_ucwk_no );
					svc_kei_ucwk_info.put( "chaf_svc_kei_ucwk_gene_add_dtm", kk0161_a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM) );
					
				}
// ST1-2013-0000234対応 20130126 星野 ADD START
				// ネット変更の場合
				if ("2".equals(jdgChgDivNet)){
					// コース変更時の内訳情報設定で上書き
					setCrsChgUcwkInfo(param, handle, fixedText, kiki_trgt_data_map, saki_svc_kei_no);					
				}
// ST1-2013-0000234対応 20130126 星野 ADD END
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD START
// OM-2014-0001371対応 20140407 星野 ADD START
				String kktkSvcCd = "";
// OM-2014-0001371対応 20140407 星野 ADD END
				// 前機器提供サービスの情報を設定
				if (kiki_trgt_data_map.containsKey("kktsvkei_info")) {
					HashMap<String, Object> kktsvkei_info = (HashMap<String, Object>) kiki_trgt_data_map.get("kktsvkei_info");
					String chbf_kktsvkei_no = (String) kktsvkei_info.get("chbf_kktsvkei_no");
					if(!StringUtils.isEmpty( chbf_kktsvkei_no ) )
					{
						// EKK0341A010 機器提供サービス契約一意照会
						condMap = new HashMap<String, String>();
						condMap.put( JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, chbf_kktsvkei_no);
						condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
						reqMap = mapper.setEKK0341A010( param, fixedText, condMap );
						resMap = scCall.run( reqMap, handle );
						HashMap<String, Object> kk0341_a010_map = mapper.getEKK0341A010( param, fixedText, resMap );
						mapper.scResultCheck( param );
						
						kktsvkei_info.put( "chbf_kktsvkei_gene_add_dtm", (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
// OM-2014-0001371対応 20140407 星野 ADD START
						kktkSvcCd = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
// OM-2014-0001371対応 20140407 星野 ADD END
					}
				}
				// 新しく払い出された機器情報を設定
// OM-2014-0001371対応 20140407 星野 MOD START
//				if (kikiMap != null) {
				// BBRの機器情報を設定
				if (kikiMap != null && "C014".equals(kktkSvcCd)) {
// OM-2014-0001371対応 20140407 星野 MOD END
					HashMap<String, Object> kikisvkei_info = (HashMap<String, Object>) kiki_trgt_data_map.get("kktsvkei_info");
					
					kikisvkei_info.put( "chaf_kktsvkei_no", (String)kikiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));
					kikisvkei_info.put( "chaf_kktsvkei_gene_add_dtm", (String)kikiMap.get(EKK0341B002CBSMsg1List.GENE_ADD_DTM));
// OM-2014-0001371対応 20140407 星野 ADD START
				// 多機能ルータの機器情報を設定
				}else if(kikiMapR0 != null && "C024".equals(kktkSvcCd)){
					HashMap<String, Object> kikisvkei_info = (HashMap<String, Object>) kiki_trgt_data_map.get("kktsvkei_info");
					
					kikisvkei_info.put( "chaf_kktsvkei_no", (String)kikiMapR0.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));
					kikisvkei_info.put( "chaf_kktsvkei_gene_add_dtm", (String)kikiMapR0.get(EKK0341B002CBSMsg1List.GENE_ADD_DTM));
					
// OM-2014-0001371対応 20140407 星野 ADD END
				}
// 品質強化対応 2012.12.26 Y.MORIMOTO ADD END
			}
		}
		
		ArrayList<HashMap<String, Object>> opt_trgt_data_list = (ArrayList<HashMap<String, Object>>) hakko_trgt_trgt_data_map.get("opt_trgt_data_list");
		if(opt_trgt_data_list==null || opt_trgt_data_list.isEmpty()){
			
		} else {
			
			for(HashMap<String, Object> opt_trgt_data_map: opt_trgt_data_list){
				// サービス契約情報が設定されている場合
				if( opt_trgt_data_map.containsKey("svc_kei_info") ){
					HashMap<String, Object> svc_kei_info = (HashMap<String, Object>) opt_trgt_data_map.get("svc_kei_info");
					
					if(workMapNet!=null && !StringUtils.isEmpty( (String) workMapNet.get("svc_kei_no") ) ){
//故障対応 2012.11.21 ADD START
						if ("0".equals(jdgChgDivNet))
						{
							// 追加の場合、サービス契約情報.サービス契約番号を上書き
							svc_kei_info.put( "svc_kei_no", saki_svc_kei_no );
							svc_kei_info.put( "chbf_svc_kei_gene_add_dtm", (String) workMapNet.get("gene_add_dtm") );
						}
//故障対応 2012.11.21 ADD END
						 // サービス契約情報.先サービス契約番号を上書き
						svc_kei_info.put( "saki_svc_kei_no", saki_svc_kei_no );
						svc_kei_info.put( "chaf_svc_kei_gene_add_dtm", (String) workMapNet.get("gene_add_dtm") );
					}
				}
				
				// サービス契約内訳情報が設定されている場合
				if( opt_trgt_data_map.containsKey("svc_kei_ucwk_info") ){
					HashMap<String, Object> svc_kei_ucwk_info = (HashMap<String, Object>) opt_trgt_data_map.get("svc_kei_ucwk_info");
					String svc_kei_ucwk_no = (String) svc_kei_ucwk_info.get("svc_kei_ucwk_no");
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
					if(!StringUtils.isEmpty( svc_kei_ucwk_no ) )
					{
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
						// ■ EKK0161A010 サービス契約内訳一意照会
						HashMap<String, Object> kk0161_a010_map =lclCmnLogic.getEKK0161A010(param, mapper, fixedText, scCall, svc_kei_ucwk_no, JCCBPCommon.getOpeDate(null));
						
						// サービス契約内訳情報.変更前サービス契約内訳世代登録年月日時分秒
						svc_kei_ucwk_info.put( "chbf_svc_kei_ucwk_gene_add_dtm", kk0161_a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM) );
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
					}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
				}
				
				// 先サービス契約内訳情報が設定されている場合
				if(work != null){
					HashMap<String, Object> svc_kei_ucwk_info = (HashMap<String, Object>) opt_trgt_data_map.get("svc_kei_ucwk_info");
					String af_svc_kei_ucwk_no = (String) work.get("svc_kei_ucwk_no");
					
					// ■ EKK0161A010 サービス契約内訳一意照会
					HashMap<String, Object> kk0161_a010_map =lclCmnLogic.getEKK0161A010(param, mapper, fixedText, scCall, af_svc_kei_ucwk_no, JCCBPCommon.getOpeDate(null));
					
					// サービス契約内訳情報.変更後サービス契約内訳世代登録年月日時分秒
					svc_kei_ucwk_info.put( "saki_svc_kei_ucwk_no", af_svc_kei_ucwk_no );
					svc_kei_ucwk_info.put( "chaf_svc_kei_ucwk_gene_add_dtm", kk0161_a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM) );
				}
// ST1-2013-0000234対応 20130126 星野 ADD START
				// ネット変更の場合
				if ("2".equals(jdgChgDivNet)){
					// コース変更時の内訳情報設定で上書き
					setCrsChgUcwkInfo(param, handle, fixedText, opt_trgt_data_map, saki_svc_kei_no);					
				}
// ST1-2013-0000234対応 20130126 星野 ADD END
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
				String opsvkeiCd = "";
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
				// 前オプションサービスの情報を設定
				if (opt_trgt_data_map.containsKey("opsvkei_info")) {
					HashMap<String, Object> opsvkei_info = (HashMap<String, Object>) opt_trgt_data_map.get("opsvkei_info");
					String chbf_opsvkei_no = (String) opsvkei_info.get("chbf_opsvkei_no");
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
					if(!StringUtils.isEmpty( chbf_opsvkei_no ) )
					{
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
						// EKK0351A010  オプションサービス契約一意照会
						condMap = new HashMap<String, String>();
						condMap.put( JKKAdchgMapperCC.COND_KEY_OP_SVC_KEI_NO, chbf_opsvkei_no);
						condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
						reqMap = mapper.setEKK0351A010( param, fixedText, condMap );
						resMap = scCall.run( reqMap, handle );
						HashMap<String, Object> kk0351_a010_map = mapper.getEKK0351A010( param, fixedText, resMap );
						mapper.scResultCheck( param );
						
						opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)kk0351_a010_map.get(EKK0351A010CBSMsg1List.GENE_ADD_DTM));
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
						opsvkeiCd = (String) opsvkei_info.get("opsvkei_cd");
					}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
				}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO START
				// 固定グローバルIP以外
				if (!opsvkeiCd.equals("B004"))
				{
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
					// 新しく払い出されたオプション情報を設定
// OM-2015-0001144 2015/06/22 ADD START
					int CountChbf = 0;
					int CountLin = 0;
// OM-2015-0001144 2015/06/22 ADD END
					if (opMap != null) {
						HashMap<String, Object> opsvkei_info = (HashMap<String, Object>) opt_trgt_data_map.get("opsvkei_info");
// OM-2015-0001144 2015/06/22 MOD START														
//						opsvkei_info.put( "chaf_opsvkei_no", (String)opMap.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
//						opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)opMap.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM));
						// 変更前オプションサービス契約番号の保持
						String chbf_opsvkei_no = (String) opsvkei_info.get("chbf_opsvkei_no");
						if (opMap != null && maruOpSvcKeiList != null) {
							for (int i = 0; i < maruOpSvcKeiList.size(); i++) {
								HashMap<String, Object> maruOpInfo = maruOpSvcKeiList.get(i);
								if("030".compareTo((String)maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) <= 0
										&& JKKStrConst.CD00037_DSL_ZM.compareTo((String) maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) > 0)
								{
									CountLin ++;
									if (maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO) != null && !"".equals(maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO))
											&& !maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO).equals(chbf_opsvkei_no)) {
										// 有効な変更後オプションサービス契約情報
										opMap = maruOpInfo;
										opsvkei_info.put( "chaf_opsvkei_no", (String)opMap.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
										opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)opMap.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM));
									}
									else {
										CountChbf ++;
									}
								}
							}
							// 変更前オプション以外に有効なオプションが存在しない場合は
							if (CountLin == CountChbf) {
								opsvkei_info.put( "chaf_opsvkei_no", (String)opMap.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
								opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)opMap.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM));
							}
						}
// OM-2015-0001144 2015/06/22 MOD END
					}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
				} else {
					// 新しく払い出されたオプション情報を設定
// OM-2015-0001144 2015/06/22 ADD START
					int CountChbf = 0;
					int CountLin = 0;
// OM-2015-0001144 2015/06/22 ADD END
					if (opMap2 != null) {
						HashMap<String, Object> opsvkei_info = (HashMap<String, Object>) opt_trgt_data_map.get("opsvkei_info");
// OM-2015-0001144 2015/06/22 MOD START						
//						opsvkei_info.put( "chaf_opsvkei_no", (String)opMap2.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
//						opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)opMap2.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM));
						// 変更前オプションサービス契約番号の保持
						String chbf_opsvkei_no = (String) opsvkei_info.get("chbf_opsvkei_no");
						if (opMap2 != null && maruOpSvcKeiList2 != null) {
							for (int i = 0; i < maruOpSvcKeiList2.size(); i++) {
								HashMap<String, Object> maruOpInfo = maruOpSvcKeiList2.get(i);
								if("030".compareTo((String)maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) <= 0
										&& JKKStrConst.CD00037_DSL_ZM.compareTo((String) maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT)) > 0)
								{
									CountLin ++;
									if (maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO) != null && !"".equals(maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO))
											&& !maruOpInfo.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO).equals(chbf_opsvkei_no)) {
										// 有効な変更後オプションサービス契約情報
										opMap2 = maruOpInfo;
										opsvkei_info.put( "chaf_opsvkei_no", (String)opMap2.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
										opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)opMap2.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM));
									}
									else {
										CountChbf ++;
									}
								}
							}
							// 変更前オプション以外に有効なオプションが存在しない場合は
							if (CountLin == CountChbf) {
								opsvkei_info.put( "chaf_opsvkei_no", (String)opMap2.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO));
								opsvkei_info.put( "chaf_opsvkei_gene_add_dtm", (String)opMap2.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM));
							}
						}
// OM-2015-0001144 2015/06/22 MOD END	
					}
				}
//巻A 故障対応(通番:100160) 2012.11.16 Y.MORIMOTO END
			}
		}
// UI課題対応 SOD発行 Y.MORIMOTO 2012.10.19 END
		
		return param;
	}

// ST1-2013-0000234対応 20130126 星野 ADD START
	private void setCrsChgUcwkInfo(
		IRequestParameterReadWrite param, 
		SessionHandle handle, 
		String fixedText,
		HashMap<String, Object> trgt_data_map, 
		String saki_svc_kei_no
	) throws RequestParameterException, SCException, Exception, CCException 
	{
		
		JKKAdchgCmnLogicCC lclCmnLogic = new JKKAdchgCmnLogicCC(handle);
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		HashMap<String, String> condMap;
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
// SOD品向対応 No.77 START
		boolean ucwk_chg_flg = false;
// SOD品向対応 No.77 END
		
		if( trgt_data_map.containsKey("svc_kei_ucwk_info") ){
			HashMap<String, Object> svc_kei_ucwk_info = (HashMap<String, Object>) trgt_data_map.get("svc_kei_ucwk_info");
			// サービス契約内訳番号取得
			String svc_kei_ucwk_no = (String) svc_kei_ucwk_info.get("svc_kei_ucwk_no");
			
			// EKK0161B004 サービス契約内訳一覧照会
			condMap = new HashMap<String, String>();
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, saki_svc_kei_no);
			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);
			
			if( kk0161_b004 != null ){
				for(HashMap<String, Object> kk0161_b004_map : kk0161_b004){
					// サービス提供中未満のものが新規払い出しの内訳
					if(	"010".equals( kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT) ) ||
						"020".equals( kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT) ) ||
						"030".equals( kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT) )
					){
						// 新しいほうの内訳番号に差し替える
						svc_kei_ucwk_no = (String) kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
// SOD品向対応 No.77 START
						ucwk_chg_flg = true;
// SOD品向対応 No.77 END
						break;
					}

				}
			}
			
			// ■ EKK0161A010 サービス契約内訳一意照会
			HashMap<String, Object> kk0161_a010_map =lclCmnLogic.getEKK0161A010(param, mapper, fixedText, scCall, svc_kei_ucwk_no, JCCBPCommon.getOpeDate(null));
			
			// コース変更のSODのため設定を上書き
			
// SOD品向対応 No.77 START
			// サービス契約内訳情報.サービス契約内訳番号　←コース変更の場合はここに変更後を入れる
			if (ucwk_chg_flg) {
				svc_kei_ucwk_info.put( "svc_kei_ucwk_no", svc_kei_ucwk_no );
			} else {
				svc_kei_ucwk_info.put( "svc_kei_ucwk_no", "" );
			}
// SOD品向対応 No.77 END
			
			// サービス契約内訳情報.変更前サービス契約内訳世代登録年月日時分秒
			svc_kei_ucwk_info.put( "chbf_svc_kei_ucwk_gene_add_dtm", "" );
			// サービス契約内訳情報.変更後サービス契約内訳番号
			svc_kei_ucwk_info.put( "saki_svc_kei_ucwk_no", "" );
			
// SOD品向対応 No.77 START
			// サービス契約内訳情報.変更後サービス契約内訳世代登録年月日時分秒
			if (ucwk_chg_flg) {
				svc_kei_ucwk_info.put( "chaf_svc_kei_ucwk_gene_add_dtm", kk0161_a010_map.get(EKK0161A010CBSMsg1List.GENE_ADD_DTM) );
			} else {
				svc_kei_ucwk_info.put( "chaf_svc_kei_ucwk_gene_add_dtm", "");
			}
// SOD品向対応 No.77 END
		
			
// SOD品向対応 No.77 START
			// SOD基本情報へルータ向け接続情報・変更ＳＯＤ発行の処理フラグを設定
			if( trgt_data_map.containsKey("sod_kihon_info") ){
				
				HashMap<String, Object> sod_kihon_info = (HashMap<String, Object>) trgt_data_map.get("sod_kihon_info");
				
				// 内訳が払い出されてた場合はtrue
				if (ucwk_chg_flg) {
					sod_kihon_info.put(JKKAdchgHakkoSODConstCC.INFO_KKSV0202_SYORI_DIV, JKKAdchgHakkoSODConstCC.SYORI_DIV_ODR_163);
				} else {
					sod_kihon_info.put(JKKAdchgHakkoSODConstCC.INFO_KKSV0202_SYORI_DIV, JKKAdchgHakkoSODConstCC.SYORI_DIV_NO_BBR_ODR);
				}
				
			}
// SOD品向対応 No.77 END
		}
	}
// ST1-2013-0000234対応 20130126 星野 ADD END
// ANK-1578-00-00 2013.12.10 Y.Kanata ADD START
	private HashMap<String, Object> getTakinouRouterInfo(
			SessionHandle handle
			, IRequestParameterReadWrite param
			, String fixedText
			, HashMap<String, String> condMap
			) throws Throwable {
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		HashMap<String, Object> outMap = null;
// IT1-2013-0001749 (ANK-1578-00-00) 2013.12.25 Y.Kanata MOD START
//				reqMap = mapper.setEKK0341B019(param, fixedText, condMap);
				reqMap = mapper.setEKK0341B019(param, fixedText, condMap, "3");
// IT1-2013-0001749 (ANK-1578-00-00) 2013.12.25 Y.Kanata MOD END
		resMap = scCall.run(reqMap, handle);
		ArrayList<HashMap<String, Object>> ekk0341_b019_list = mapper.getEKK0341B019(param, fixedText, resMap);
		mapper.scResultCheck(param);
		String mfrKktkSvcKeiNo = null;
		for (HashMap<String, Object> ekk0341_b019_map : ekk0341_b019_list) {
			String kktkSvcKeiNo = (String)ekk0341_b019_map.get(EKK0341B019CBSMsg1List.KKTK_SVC_KEI_NO);
			String kktkSvcCd = (String)ekk0341_b019_map.get(EKK0341B019CBSMsg1List.KKTK_SVC_CD);
			if ("C024".equals(kktkSvcCd)) {
				mfrKktkSvcKeiNo = kktkSvcKeiNo;
			}
		}
		if (!StringUtils.isEmpty(mfrKktkSvcKeiNo)) {
			condMap.clear();
			condMap.put("cond_key_kktk_svc_kei_no", mfrKktkSvcKeiNo);
			condMap.put("cond_key_opedate", JCCBPCommon.getOpeDate(null));
			reqMap = mapper.setEKK0341A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			HashMap<String, Object> ekk0341_a010 = mapper.getEKK0341A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			// 取得結果を
			outMap = new HashMap<String, Object>();
			outMap.put(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO, (String)ekk0341_a010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
			outMap.put(EKK0341B002CBSMsg1List.GENE_ADD_DTM, (String)ekk0341_a010.get(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
		}
		return outMap;
	}
// ANK-1578-00-00 2013.12.10 Y.Kanata ADD END
}
