/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：機器提供サービス送付先・設置場所住所変更コンポーネント部品クラス
 *  ソースファイル名：JKKKktkSvcSendAdchgCC.java
 *  作成者          ：FJ
 *  日付            ：2012年8月20日
 *＜機能概要＞
 *  住所変更に伴うeo光ネットの
 *  変更区分の判定を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2012/8/20   FJ          新規作成
 *  v8.02.00    2014/03/28  星野        OM-2014-0001235対応 
 *  v8.03.00    2014/04/28  星野        OM-2014-0001642対応 
 *  									OM-2014-0001680対応
 *  v8.04.00    2014/06/11  星野        IT2-2014-0000238対応 
 * v19.00.00    2015/08/20  真崎		ANK-2062-00-00対応
 * v20.00.00    2015/12/04  丹羽		ANK-2641-00-00対応
 * v20.01.00    2016/01/07  星野		ANK-2651-00-00対応
 * v23.00.00    2016/01/07  星野		OM-2016-0000451対応
 * v61.00.00	2023/06/19  新井	   【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
 ********************************************************************/
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.KKSV0098_KKSV0098OP;
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.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B504CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C191CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C290CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C320CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg2List;

/**
 * 機器提供サービス送付先・設置場所住所変更コンポーネント部品クラス.
 * <br>
 * @author FJ
 */
public class JKKKktkSvcSendAdchgCC extends AbstractCommonComponent {

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKKktkSvcSendAdchgCC() {
	}

	/**
	 * 機器提供サービス送付先・設置場所住所変更
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite kktkSvcSendAdchg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

		try {

			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			HashMap<String, String> condMap;
			HashMap<String, Object> reqMap;
			Map<?, ?> resMap;
			
			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
			
			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			

			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);


			/* ++++++++++ v20.01.00 DEL START ++++++++++ */
//			// ・EKK0081A010  サービス契約一意照会
//			condMap = new HashMap<String, String>();
//			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO));
//			condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
//			reqMap = mapper.setEKK0081A010(param, fixedText, condMap);
//			resMap = scCall.run(reqMap, keepSesHandle.get());
//			HashMap<String, Object> kk0081_a010_map = mapper.getEKK0081A010(param, fixedText, resMap);
//			mapper.scResultCheck(param);
			/* ++++++++++ v20.01.00 DEL END ++++++++++ */
			
			// 変更対象リストを取得
			ArrayList<HashMap<String, Object>> adchg_dtl_list_kktk_svc_kei = (ArrayList<HashMap<String, Object>>)(paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_KKTK_SVC_KEI));
			for (HashMap<String, Object> change_map : adchg_dtl_list_kktk_svc_kei) {
				
				// ■ EKK0341A010 機器提供サービス契約一意照会
				condMap = new HashMap<String, String>();
				condMap.put( JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String) change_map.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO));
				condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
				reqMap = mapper.setEKK0341A010( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get());
				HashMap<String, Object> kk0341_a010_map = mapper.getEKK0341A010( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				if (kk0341_a010_map == null || change_map == null){
					continue;
				} else {
					
// IT1-2013-000XXXX対応 20130509 星野 ADD START
					String taknkikiSbtCd = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
					// STB/B-CAS/C-CAS
					if( "A0".equals(taknkikiSbtCd) || "B0".equals(taknkikiSbtCd) || "C0".equals(taknkikiSbtCd) ){
						// ＳＴＢ異動区分が「移動」の場合
						if( "04".equals(change_map.get("adchg_dtl_stb_ido_div") ) ){
							// 機器提供サービス契約 宅内機器移動コードを「移動」に差し替え
							kk0341_a010_map.put(EKK0341A010CBSMsg1List.TAKNKIKI_IDO_CD, "04");
// OM-2014-0001235対応 201400328 星野 ADD START
							kk0341_a010_map.put("kkst_snn_stat_init_yh", "1");
// OM-2014-0001235対応 201400328 星野 ADD END
						}
// ANK-2641-00-00対応 20151204 丹羽 DEL START
//// OM-2014-0001235対応 201400328 星野 ADD START
//						if( "B0".equals(taknkikiSbtCd) ){
//							// B-CASは交換しないので移動以外でも機器設置承認コードを初期化
//							kk0341_a010_map.put("kkst_snn_stat_init_yh", "1");
//						}
//// OM-2014-0001235対応 201400328 星野 ADD END
// ANK-2641-00-00対応 20151204 丹羽 DEL END
					}
// IT1-2013-000XXXX対応 20130509 星野 ADD END
					
					/** 移転先住所設置場所番号取得 */
					String itensPlaceNo = getItensPlace(param, fixedText, paramMap);
					
					/** EKK0341C232_機器提供サービス契約情報変更（予約） */
					/* ++++++++++ v20.01.00 MOD START ++++++++++ */
//					executeEKK0341C232(param, fixedText, paramMap, kk0341_a010_map, kk0081_a010_map);
					executeEKK0341C232(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>());
					/* ++++++++++ v20.01.00 MOD END   ++++++++++ */

					/** EKK0341C200_機器提供サービス契約場所変更 */
					/* ++++++++++ v20.01.00 MOD START ++++++++++ */
//					HashMap<String, Object> kk0341_c200_map = executeEKK0341C200(param, fixedText, paramMap, kk0341_a010_map, kk0081_a010_map, itensPlaceNo);
					HashMap<String, Object> kk0341_c200_map = executeEKK0341C200(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>(), itensPlaceNo);
					/* ++++++++++ v20.01.00 MOD END   ++++++++++ */

// ANK-1578-00-00 2013.12.26 T.TORIKAI DEL START（IT1-2013-0001749）
//// ANK-1578-00-00 2013.12.22 T.TORIKAI ADD START
//					// 回線に紐付く機器の場合は回線内訳を更新する
//					if (JKKAdchgConstCC.OYA_KEI_SKBT_CD.SVC_KEI_KAISEN_UCWK.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD))) {
//						// EKK0341C320_機器提供サービス契約サービス契約回線内訳変更
//						HashMap<String, Object> kk0341_c320_map = executeEKK0341C320(param, fixedText, paramMap, kk0341_a010_map, kk0081_a010_map);
//						// 更新結果を次の更新パラメータへ引き継ぐ
//						kk0341_c200_map.put(EKK0341C200CBSMsg.GENE_ADD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.GENE_ADD_DTM));
//						kk0341_a010_map.put(EKK0341A010CBSMsg1List.LAST_UPD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.UPD_DTM));
//					}
//// ANK-1578-00-00 2013.12.22 T.TORIKAI ADD END
// ANK-1578-00-00 2013.12.26 T.TORIKAI DEL END  （IT1-2013-0001749）

					/** EKK0341C220_機器提供サービス契約場所変更確定 */
					executeEKK0341C220(param, fixedText, paramMap, kk0341_a010_map, kk0341_c200_map);

// ANK-1578-00-00 2013.12.26 T.TORIKAI ADD START（IT1-2013-0001749）
					// 回線に紐付く機器の場合は回線内訳を更新する
					if (JKKAdchgConstCC.OYA_KEI_SKBT_CD.SVC_KEI_KAISEN_UCWK.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD))) {
						// EKK0341C320_機器提供サービス契約サービス契約回線内訳変更
						/* ++++++++++ v20.01.00 MOD START ++++++++++ */
//						HashMap<String, Object> kk0341_c320_map = executeEKK0341C320(param, fixedText, paramMap, kk0341_a010_map, kk0081_a010_map);
						HashMap<String, Object> kk0341_c320_map = executeEKK0341C320(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>());
						/* ++++++++++ v20.01.00 MOD END   ++++++++++ */
						// 更新結果を次の更新パラメータへ引き継ぐ
						kk0341_c200_map.put(EKK0341C200CBSMsg.GENE_ADD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.GENE_ADD_DTM));
						kk0341_a010_map.put(EKK0341A010CBSMsg1List.LAST_UPD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.UPD_DTM));
					}
// ANK-1578-00-00 2013.12.26 T.TORIKAI ADD END  （IT1-2013-0001749）

					// 更新年月日時分秒の更新
					paramMap.put(JKKAdchgConstCC.PARAM_KEY_KKTK_SVC_KEI_UPD_DTM_AFT, getMapString(kk0341_a010_map, EKK0341A010CBSMsg1List.LAST_UPD_DTM));
					
				}
				
			}
			
			} finally {
				
			// ・セッションハンドル保持域
			if( keepSesHandle.get() != null ){
				keepSesHandle.remove();
			}
		}

		return param;
	}
	
// OM-2013-0005170対応 20140114 星野 ADD START
	/**
	 * 機器提供サービス送付先・設置場所住所変更
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite kktkSvcSendAdchgReUpd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

		try {

			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			if(paramMap==null || paramMap.isEmpty()){
				return param;
			}
			
			HashMap<String, String> condMap;
			HashMap<String, Object> reqMap;
			Map<?, ?> resMap;
			
			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
			
			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			

			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
			
			// EKK0251A010 サービス契約回線内訳一意照会（カレント取得）
			condMap = new HashMap<String, String>();
			// サービス契約回線内訳番号（転居先）
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_KAIS_UCWK_NO, (String)paramMap.get("svc_kei_kaisen_ucwk_no"));

			// S-IF 呼出
			reqMap = mapper.setEKK0251A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> kk0251Map = mapper.getEKK0251A010( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			if(kk0251Map==null){
				return param;
			}
			
			String kaisenPlaceNo = (String)kk0251Map.get(EKK0251A010CBSMsg1List.KAISEN_PLACE_NO);
			if(StringUtils.isEmpty(kaisenPlaceNo)){
				return param;
			}
			
			// ・ECK0011A010  お客様一意照会
			condMap = new HashMap<String, String>();
			condMap.put( JKKAdchgMapperCC.COND_KEY_SYSID, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));	
			condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
			reqMap = mapper.setECK0011A010(param, fixedText, condMap);
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> ck0011_a010_map = mapper.getECK0011A010( param, fixedText, resMap );
			mapper.scResultCheck(param);
			
			if(ck0011_a010_map==null){
				return param;
			}
			
			//お客様名
			paramMap.put("cust_nm", ck0011_a010_map.get(ECK0011A010CBSMsg1List.CUST_NM));
			//お客様カナ名
			paramMap.put("cust_kana", ck0011_a010_map.get(ECK0011A010CBSMsg1List.CUST_KANA));


			// 変更対象リストを取得
			ArrayList<HashMap<String, Object>> adchg_dtl_list_kktk_svc_kei = (ArrayList<HashMap<String, Object>>)(paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_KKTK_SVC_KEI));

			for (HashMap<String, Object> change_map : adchg_dtl_list_kktk_svc_kei) {
				
				// ■ EKK0341A010 機器提供サービス契約一意照会
				condMap = new HashMap<String, String>();
				condMap.put( JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String) change_map.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO));
				condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
				reqMap = mapper.setEKK0341A010( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get());
				HashMap<String, Object> kk0341_a010_map = mapper.getEKK0341A010( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				if (kk0341_a010_map == null || change_map == null){
					continue;
					
// IT2-2014-0000238対応 20140611 星野 MOD START
//				// 場所番号が移転先と一致しているものは処理不要
//				}else if( kaisenPlaceNo.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO)) ){
//					continue;
//					
//// OM-2014-0001680対応 20140429 星野 ADD START
//				}else if("910".equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))
//							|| "920".equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))
//				){
//					continue;
//// OM-2014-0001680対応 20140429 星野 ADD END
//				} else {
//					
//					paramMap.put("mskm_dtl_no", change_map.get("mskm_dtl_no"));
//					
//					String taknkikiSbtCd = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
					
				}
				if("910".equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))
					|| "920".equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))
				){
					continue;
				}
						
				paramMap.put("mskm_dtl_no", change_map.get("mskm_dtl_no"));
				String taknkikiSbtCd = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
				
				// 場所番号が移転先と一致しているものは処理不要
				if( kaisenPlaceNo.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO)) 
					/* ++++++++++ v23.00.00 ADD START ++++++++++ */
					// 回線に紐づく機器の場合は回線内訳番号の一致もチェック 回線に紐づく機器以外はチェック不要
					&& 
					(
						!JKKAdchgConstCC.OYA_KEI_SKBT_CD.SVC_KEI_KAISEN_UCWK.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD)) 
						|| paramMap.get("svc_kei_kaisen_ucwk_no").equals( kk0341_a010_map.get(EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO) )
					)
					/* ++++++++++ v23.00.00 ADD END   ++++++++++ */
				){
					// 何もしない
					
				}else{
					
// IT2-2014-0000238対応 20140611 星野 MOD END
					// STB/B-CAS/C-CAS
					if( "A0".equals(taknkikiSbtCd) || "B0".equals(taknkikiSbtCd) || "C0".equals(taknkikiSbtCd) ){
						// ＳＴＢ異動区分が「移動」の場合
						if( "04".equals(change_map.get("adchg_dtl_stb_ido_div") ) ){
							// 機器提供サービス契約 宅内機器移動コードを「移動」に差し替え
							kk0341_a010_map.put(EKK0341A010CBSMsg1List.TAKNKIKI_IDO_CD, "04");
						}
					}
					
//					// ・EKK0081A010  サービス契約一意照会
//					condMap = new HashMap<String, String>();
//					condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO));
//					condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
//					reqMap = mapper.setEKK0081A010(param, fixedText, condMap);
//					resMap = scCall.run(reqMap, keepSesHandle.get());
//					HashMap<String, Object> kk0081_a010_map = mapper.getEKK0081A010(param, fixedText, resMap);
//					mapper.scResultCheck(param);

					
					/** 移転先住所設置場所番号取得 */
					String itensPlaceNo = getItensPlace(param, fixedText, paramMap);
					
					/** EKK0341C232_機器提供サービス契約情報変更（予約） */
					executeEKK0341C232(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>());

					/** EKK0341C200_機器提供サービス契約場所変更 */
					HashMap<String, Object> kk0341_c200_map = executeEKK0341C200(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>(), itensPlaceNo);

					/** EKK0341C220_機器提供サービス契約場所変更確定 */
					executeEKK0341C220(param, fixedText, paramMap, kk0341_a010_map, kk0341_c200_map);
					
// OM-2014-0001642対応 20140428 星野 ADD START
					// 回線に紐付く機器の場合は回線内訳を更新する
					if (JKKAdchgConstCC.OYA_KEI_SKBT_CD.SVC_KEI_KAISEN_UCWK.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD))) {
						// EKK0341C320_機器提供サービス契約サービス契約回線内訳変更
						HashMap<String, Object> kk0341_c320_map = executeEKK0341C320(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>());
						// 更新結果を次の更新パラメータへ引き継ぐ
						kk0341_c200_map.put(EKK0341C200CBSMsg.GENE_ADD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.GENE_ADD_DTM));
						kk0341_a010_map.put(EKK0341A010CBSMsg1List.LAST_UPD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.UPD_DTM));
						
					}
// OM-2014-0001642対応 20140428 星野 ADD END
// IT2-2014-0000238対応 20140611 星野 ADD START
				}
				// サービス契約にひもづく機器の場合は解約/新規のサービス契約番号を更新する
				if(JKKAdchgConstCC.OYA_KEI_SKBT_CD.SVC_KEI.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD))){
					
					String netSvcChgDiv = (String)paramMap.get("eoh_net_use_svc_chg_div");
					String svcKeiNoBf = (String)paramMap.get("svc_kei_no_net_bf");
					String svcKeiNoAf = (String)paramMap.get("svc_kei_no_net_af");
					
					// ネットの解約/新規を判定
					if( "1".equals(netSvcChgDiv) && !StringUtils.isEmpty(svcKeiNoBf) && !StringUtils.isEmpty(svcKeiNoAf) && !svcKeiNoBf.equals(svcKeiNoAf)){
						
						// 対象機器が変更前サービスに紐づいていたら、紐付け変更
						if(svcKeiNoBf.equals(kk0341_a010_map.get(EKK0341A010CBSMsg1List.SVC_KEI_NO))){
							
							HashMap<String, Object> cond_kk0341c290_map = new HashMap<String, Object>();
							// 機器提供サービス契約番号
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.KKTK_SVC_KEI_NO, kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
							// サービス契約番号
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.SVC_KEI_NO, svcKeiNoAf);
							// 申込明細番号
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.MSKM_DTL_NO, change_map.get("mskm_dtl_no"));
							// 機器提供サービス契約引継発生年月日
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.KKTK_SVC_KEI_HKHASYMD, getMapString( paramMap, "rsv_aply_ymd" ));
							// 予約適用年月日
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.RSV_APLY_YMD, getMapString( paramMap, "rsv_aply_ymd" ));
							// 異動区分
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.IDO_DIV, getMapString( paramMap, KKSV0098_KKSV0098OP.IDO_DIV ));
							// 更新年月日時分秒(更新前)
							cond_kk0341c290_map.put(EKK0341C290CBSMsg.UPD_DTM_BF, kk0341_a010_map.get(EKK0341A010CBSMsg1List.LAST_UPD_DTM));
							
							// EKK0341C290_機器提供サービス契約サービス契約変更
							reqMap = mapper.setEKK0341C290(param, fixedText, cond_kk0341c290_map);
							resMap = scCall.run(reqMap, keepSesHandle.get());
							HashMap<String, Object> kk0341_c290_map = mapper.getEKK0341C290(param, fixedText, resMap);
							mapper.scResultCheck(param);
							
							// 排他情報の引継
							kk0341_a010_map.put(EKK0341A010CBSMsg1List.LAST_UPD_DTM, getMapString(kk0341_c290_map, EKK0341C290CBSMsg.UPD_DTM));

						}
					}
				}
// IT2-2014-0000238対応 20140611 星野 ADD END
				
				// 更新年月日時分秒の更新
				paramMap.put(JKKAdchgConstCC.PARAM_KEY_KKTK_SVC_KEI_UPD_DTM_AFT, getMapString(kk0341_a010_map, EKK0341A010CBSMsg1List.LAST_UPD_DTM));
				
				
// OM-2014-0001642対応 20140428 星野 ADD START
				// 更新対象機器がＶＡまたは多機能ルータまたはHGWの場合
				// ANK-4315-00-00 MOD START
				//if( "50".equals(taknkikiSbtCd) || "R0".equals(taknkikiSbtCd) ){
				if( "50".equals(taknkikiSbtCd) || "R0".equals(taknkikiSbtCd) || "S0".equals(taknkikiSbtCd) ){
				// ANK-4315-00-00 MOD END
					String telSvcKeiNo = (String)paramMap.get("tel_svc_kei_no");
					if(!StringUtils.isEmpty(telSvcKeiNo)){
						/** 電話の内訳の紐付けも変更する */
						HashMap<String, Object> vaChgMap = new HashMap<String, Object>();
						vaChgMap.put("svc_kei_no", telSvcKeiNo);
						vaChgMap.put("kktk_svc_kei_no", kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
						vaChgMap.put("mskm_dtl_no", getMapString( paramMap, "mskm_dtl_no" ));
						
						// パラメータにセット
						param.setData("va_chg", vaChgMap);

						JKKAdchgVaChgCC vaChgCC = new JKKAdchgVaChgCC();
						vaChgCC.updateSvcKeiUcwkVaHimoduke(keepSesHandle.get(), param, "va_chg");
					}
				}
// OM-2014-0001642対応 20140428 星野 ADD END

// IT2-2014-0000238対応 20140611 星野 DEL START
//				}
// IT2-2014-0000238対応 20140611 星野 DEL END
				
			}
			
// ANK-2062-00-00 ADD START
			
			// 多機能ルータ切替要・不要チェックの実施
			isNeedTakinoRtKirikae(handle, param, fixedText, paramMap);
			
			// ルータ切替有無判定結果の取得 1:切替必要
			if ("1".equals(paramMap.get("check_kirikae")))
			{
				// EKK0341A010 機器提供サービス契約一意照会**********************************************************************
				condMap = new HashMap<String, String>();
				// 多機能ルータ切替要・不要チェック時に取得した機器提供サービス契約番号をセット
				condMap.put( JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String) paramMap.get("kirikae_target_kktk_svc_kei_no")  );
				condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE,         (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
				reqMap = mapper.setEKK0341A010( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get());
				HashMap<String, Object> kk0341_a010_map = mapper.getEKK0341A010( param, fixedText, resMap );
				mapper.scResultCheck( param );
				// **************************************************************************************************************
				
				// 多機能ルータの引継ぎ処理**************************************************************************************
				// 電話の変更後申込明細番号を取得して上書き
				if (!"".equals((String)paramMap.get("tel_mskm_dtl_no")))
				{
					paramMap.put("mskm_dtl_no", (String)paramMap.get("tel_mskm_dtl_no"));
				}
				// ネットの変更後申込明細番号を取得して上書き（ネット優先）
				if (!"".equals((String)paramMap.get("net_mskm_dtl_no")))
				{
					paramMap.put("mskm_dtl_no", (String)paramMap.get("net_mskm_dtl_no"));
				}
				
				/** 移転先住所設置場所番号取得 */
				String itensPlaceNo = getItensPlace(param, fixedText, paramMap);
				
				/** EKK0341C232_機器提供サービス契約情報変更（予約） */
				executeEKK0341C232(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>());

				/** EKK0341C200_機器提供サービス契約場所変更 */
				HashMap<String, Object> kk0341_c200_map = executeEKK0341C200(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>(), itensPlaceNo);

				/** EKK0341C220_機器提供サービス契約場所変更確定 */
				executeEKK0341C220(param, fixedText, paramMap, kk0341_a010_map, kk0341_c200_map);
				
				/** EKK0341C320_機器提供サービス契約サービス契約回線内訳変更 */
				HashMap<String, Object> kk0341_c320_map = executeEKK0341C320(param, fixedText, paramMap, kk0341_a010_map, new HashMap<String, Object>());
				// 更新結果を次の更新パラメータへ引き継ぐ
				kk0341_c200_map.put(EKK0341C200CBSMsg.GENE_ADD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.GENE_ADD_DTM));
				kk0341_a010_map.put(EKK0341A010CBSMsg1List.LAST_UPD_DTM, kk0341_c320_map.get(EKK0341C320CBSMsg.UPD_DTM));
				// ***************************************************************************************************************
				
				// 宅内機器管理システム連携***************************************************************************************
				ArrayList<HashMap<String, Object>> placeNoChgRnkiList = new ArrayList<HashMap<String, Object>>();
				HashMap<String, Object> placeNoChgRnkiMap = new HashMap<String, Object>();
				
				String svc_kei_no = "";
				// 電話の移転先サービス契約番号を取得
				if (!"".equals((String)paramMap.get("svc_kei_no_tel_af")))
				{
					svc_kei_no = (String)paramMap.get("svc_kei_no_tel_af");
				}
				// ネットの移転先サービス契約番号を取得して上書き（ネット優先）
				if (!"".equals((String)paramMap.get("svc_kei_no_net_af")))
				{
					svc_kei_no = (String)paramMap.get("svc_kei_no_net_af");
				}
				if (!"".equals(svc_kei_no))
				{
					// 宅内機器型式コード
					placeNoChgRnkiMap.put("taknkiki_model_cd", (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD     ));
					// 機器製造番号
					placeNoChgRnkiMap.put("kiki_seizo_no"    , (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO         ));
					// 機器変更理由コード
					placeNoChgRnkiMap.put("kiki_chg_rsn_cd"  , "1");
					// 設置場所番号
					placeNoChgRnkiMap.put("setplace_no"      , itensPlaceNo);
					// サービス契約番号
					placeNoChgRnkiMap.put("svc_kei_no"       , svc_kei_no  );
					
					placeNoChgRnkiList.add(placeNoChgRnkiMap);
					param.setData("place_chg", placeNoChgRnkiList);
					
					JKKAdChgPlaceNoChgRnkiCC placeNoChgRnkiCC = new JKKAdChgPlaceNoChgRnkiCC();
					placeNoChgRnkiCC.addChgPlaceNo(keepSesHandle.get(), param, "place_chg");
				}
				// ***************************************************************************************************************
				
				// 転居先電話番号と多機能ルータの紐付け処理***********************************************************************
				String telSvcKeiNo = (String)paramMap.get("svc_kei_no_tel_af");
				
				// 移転先のサービス契約番号が空でなく、電話オプションあり（チェック処理で取得）のとき紐付け切替対象
				if(!StringUtils.isEmpty(telSvcKeiNo) && "1".equals((String)paramMap.get("va_option"))){
					// 電話の変更後申込明細番号を取得して上書き
					if ((String)paramMap.get("tel_mskm_dtl_no") != null && !"".equals((String)paramMap.get("tel_mskm_dtl_no")))
					{
						paramMap.put("mskm_dtl_no", (String)paramMap.get("tel_mskm_dtl_no"));
					}
					else
					{
						// もしも電話の申込明細番号が取得できなかった場合はシステムエラーとする
						throw new Exception();
					}
					/** 電話の内訳の紐付けも変更する */
					HashMap<String, Object> vaChgMap = new HashMap<String, Object>();
					vaChgMap.put("svc_kei_no", telSvcKeiNo);
					vaChgMap.put("kktk_svc_kei_no", kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
					vaChgMap.put("mskm_dtl_no", getMapString( paramMap, "mskm_dtl_no" ));
					
					// パラメータにセット
					param.setData("va_chg", vaChgMap);

					JKKAdchgVaChgCC vaChgCC = new JKKAdchgVaChgCC();
					vaChgCC.updateSvcKeiUcwkVaHimoduke(keepSesHandle.get(), param, "va_chg");
				}
				// ***************************************************************************************************************
			}
			
//ANK-2062-00-00 ADD END
			
			
			
		} finally {
				
			// ・セッションハンドル保持域
			if( keepSesHandle.get() != null ){
				keepSesHandle.remove();
			}
		}

		return param;
	}
	
// OM-2013-0005170対応 20140114 星野 ADD END
	
	/**
	 * EKK0341C232 機器提供サービス契約情報変更（予約）実行処理
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param pararmMap         入力マップ
	 * @param  kk0341_a010_map  機器提供サービス契約一意照会マップ
	 * @param  kk0081_a010_map  サービス契約一意照会マップ
	 * @return
	 * @throws Exception
	 */
	private HashMap<String, Object> executeEKK0341C232( IRequestParameterReadWrite param, String fixedText, 
			HashMap<String, Object> paramMap, HashMap<String, Object> kk0341_a010_map, HashMap<String, Object> kk0081_a010_map ) throws Exception
	{
		/** 前準備 **/
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンス
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvoker
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();


		HashMap<String, Object> kksv_work_map = itenmSvcKei( param, fixedText, kk0341_a010_map );
		kksv_work_map.put( JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO, getMapString( kksv_work_map, EKK0081A010CBSMsg1List.SVC_KEI_NO ) );
		kksv_work_map.put( JKKAdchgConstCC.PARAM_KEY_NEW_KEI_KAIS_UCWK_NO, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO ) );

		
		// 異動区分
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.IDO_DIV, getMapString( paramMap, KKSV0098_KKSV0098OP.IDO_DIV ) );
		// 申込明細番号
// IT1-2013-000ZZZZ対応 20130530 星野 MOD START
//		kk0341_a010_map.put( EKK0341A010CBSMsg1List.MSKM_DTL_NO, (String)kk0081_a010_map.get( EKK0081A010CBSMsg1List.MSKM_DTL_NO ) );
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.MSKM_DTL_NO, getMapString( paramMap, "mskm_dtl_no" ) );
// IT1-2013-000ZZZZ対応 20130530 星野 MOD END
// ST3-2013-0000303対応 2013.02.07 松本 ADD START
		/* 機器引当指定倉庫コード、機器引当指定倉庫棚コードが設定されていない場合、契約新規と同じ値を設定する */
		// 機器引当指定倉庫コード
		if( JKKStringUtil.isNullEmpty(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SOKO_CD))) {
			kk0341_a010_map.put(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SOKO_CD, "000001");
		}
		// 機器引当指定倉庫棚コード
		if( JKKStringUtil.isNullEmpty(kk0341_a010_map.get(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SKDN_CD))) {
			kk0341_a010_map.put(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SKDN_CD, "000");
		}
// ST3-2013-0000303対応 2013.02.07 松本 ADD END
		
// OM-2013-0001914対応 20130912 星野 ADD START
		// 送付先住所入力ありの場合
		if( !StringUtils.isEmpty( getMapString( paramMap, "kiki_sohus_pcd" ) ) ){
			// 機器送付先住所手動入力フラグ
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SHS_AD_MAN_INPUT_FLG, getMapString( paramMap, "kiki_sohus_man_input_flg" ) );
			// 機器送付先住所コード
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_AD_CD, getMapString( paramMap, "kiki_sohus_ad_cd" ) );
			// 機器送付先郵便番号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_PCD, getMapString( paramMap, "kiki_sohus_pcd" ) );
			// 機器送付先都道府県名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_STATE_NM, getMapString( paramMap, "kiki_sohus_state_nm" ) );
			// 機器送付先市区町村名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_CITY_NM, getMapString( paramMap, "kiki_sohus_city_nm" ) );
			// 機器送付先大字通称名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_OAZTSU_NM, getMapString( paramMap, "kiki_sohus_oaztsu_nm" ) );
			// 機器送付先字丁目名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_AZCHO_NM, getMapString( paramMap, "kiki_sohus_azcho_nm" ) );
			// 機器送付先番地号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_BNCHIGO, getMapString( paramMap, "kiki_sohus_bnchigo" ) );
			// 機器送付先住所補記・建物名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRTTM, getMapString( paramMap, "kiki_sohus_adrttm" ) );
			// 機器送付先住所補記・部屋番号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRRM, getMapString( paramMap, "kiki_sohus_adrrm" ) );
			// 機器送付先名
			kk0341_a010_map.put(EKK0341A010CBSMsg1List.KIKI_SOHUS_NM, getMapString(paramMap, "kiki_sohus_nm"));
			// 機器送付先カナ名
			kk0341_a010_map.put(EKK0341A010CBSMsg1List.KIKI_SOHUS_KANA, getMapString(paramMap, "kiki_sohus_kana"));
			// 機器送付先電話番号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_TELNO, getMapString( paramMap, "kiki_shs_tln" ) );
		} else {
			// 機器送付先住所手動入力フラグ（移転先住所は手動入力不可のため0固定）
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SHS_AD_MAN_INPUT_FLG, "0" );
// OM-2013-0001914対応 20130912 星野 ADD END
	
	// IT1-2013-000ZZZZ対応 20130530 星野 ADD START
			kk0341_a010_map.put(EKK0341A010CBSMsg1List.KIKI_SOHUS_NM, getMapString(paramMap, "cust_nm"));
			kk0341_a010_map.put(EKK0341A010CBSMsg1List.KIKI_SOHUS_KANA, getMapString(paramMap, "cust_kana"));
	// IT1-2013-000ZZZZ対応 20130530 星野 ADD END
			// 機器送付先住所コード
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_AD_CD, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_CD ) );
			// 機器送付先郵便番号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_PCD, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_PCD ) );
			// 機器送付先都道府県名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_STATE_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_STATE ) );
			// 機器送付先市区町村名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_CITY_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_CITY ) );
			// 機器送付先大字通称名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_OAZTSU_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_OAZTSU ) );
			// 機器送付先字丁目名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_AZCHO_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_AZCHO ) );
			// 機器送付先番地号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_BNCHIGO, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_BNCHIGO ) );
			// 機器送付先住所補記・建物名
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRTTM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_ADRTTM ) );
			// 機器送付先住所補記・部屋番号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRRM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_ADRRM ) );
			// 機器送付先電話番号
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_TELNO, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_TLN ) );
	// IT1-2013-000ZZZZ対応 20130530 星野 ADD START
// OM-2013-0001914対応 20130912 星野 ADD START
		}
// OM-2013-0001914対応 20130912 星野 ADD END
		
		// 機器送付先_契約者住所差異フラグ
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SOHUS_KSH_AD_SAI_FLG, getMapString( paramMap, "kiki_sohus_ksh_ad_sai_flg" ) );
// IT1-2013-000ZZZZ対応 20130530 星野 ADD END
		// 機器設置先住所コード
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_AD_CD, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_CD ));
		// 機器設置先郵便番号
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PCD, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_PCD ));
		// 機器設置先都道府県名
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_STATE_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_STATE ));
		// 機器設置先市区町村名
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_CITY_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_CITY ));
		// 機器設置先大字通称名
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_OAZTSU_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_OAZTSU ));
		// 機器設置先字丁目名
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_AZCHO_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_AZCHO ));
		// 機器設置先番地号
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_BNCHIGO, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_BNCHIGO ));
		// 機器設置先住所補記・建物名
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_ADRTTM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_ADRTTM ) );
		// 機器設置先住所補記・部屋番号
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_ADRRM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_ADRRM ) );
		// 機器設置先_契約者住所差異フラグ
// IT1-2013-000ZZZZ対応 20130530 星野 MOD START
//		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SK_KSH_AD_SAI_FLG, (String)kk0341_a010_map.get( EKK0341A010CBSMsg1List.KIKI_STC_SK_KSH_AD_SAI_FLG ) );
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SK_KSH_AD_SAI_FLG, getMapString( paramMap, "kiki_stc_sk_ksh_ad_sai_flg" ) );
// IT1-2013-000ZZZZ対応 20130530 星野 MOD END
		// 機器設置先電話番号
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_STC_SK_TELNO, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_TLN ) );
		// 更新年月日時分秒(更新前)
		kk0341_a010_map.put( JKKAdchgMapperCC.UPD_DT_KKTK_SVC_KEI_UPD_DTM_BEF, kk0341_a010_map.get( EKK0341A010CBSMsg1List.LAST_UPD_DTM ) );
		// 対象機器が ONU・V-ONU の場合は機器製造番号と宅内機器型式コードをクリアする
		String kiki_sbt_cd = getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD );
		// ANK-4315-00-00 MOD START
		//if ( "D0".equals( kiki_sbt_cd ) || "E0".equals( kiki_sbt_cd ) ) {
		if ( "D0".equals( kiki_sbt_cd ) || "E0".equals( kiki_sbt_cd ) || "S0".equals( kiki_sbt_cd ) ) {
		// ANK-4315-00-00 MOD END
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD, "" );
			kk0341_a010_map.put( EKK0341A010CBSMsg1List.KIKI_SEIZO_NO, "" );
		}
		// 予約適用年月日
// 品質強化試験追加分 故障No.100023対応 20121230 星野 MOD START
//		kk0341_a010_map.put( EKK0341A010CBSMsg1List.RSV_APLY_YMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.RSV_APLY_YMD, getMapString( paramMap, "rsv_aply_ymd" ) );
// 品質強化試験追加分 故障No.100023対応 20121230 星野 MOD START
// IT2-2013-0000174対応 20130215 星野 ADD START
		// マンション物件番号
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.MANSION_BUKKEN_NO, getMapString( paramMap, "itens_mansion_bukken_no" ) );
// IT2-2013-0000174対応 20130215 星野 ADD END


		// EKK0341C232 機器提供サービス契約情報変更（予約）
		reqMap = mapper.setEKK0341C232( param, fixedText, kk0341_a010_map );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> kk0341_c230_map = mapper.getEKK0341C232( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// 排他情報の引継
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.LAST_UPD_DTM, getMapString( kk0341_c230_map, EKK0341C191CBSMsg.UPD_DTM ) );
		return kk0341_c230_map;
	}
	
	/**
	 * EKK0341C200_機器提供サービス契約場所変更実行処理
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  kk0341_a010_map  機器提供サービス契約一意照会マップ
	 * @param kk0081_a010_map   サービス契約一意照会マップ
	 * @param itensPlaceNo      移転先住所設置場所番号
	 * @param pararmMap         入力マップ
	 * @return
	 */
	private HashMap<String, Object> executeEKK0341C200( IRequestParameterReadWrite param, String fixedText, 
			HashMap<String, Object> paramMap, HashMap<String, Object> kk0341_a010_map, HashMap<String, Object> kk0081_a010_map, String itensPlaceNo ) throws Exception
	{
		/** 前準備 **/
		HashMap<String, Object> condMap;
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンス
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvoker
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();


		condMap = new HashMap<String, Object>();
		// 機器提供サービス契約番号
		condMap.put( EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO ) );
		// 機器設置先場所番号
		condMap.put( EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO, itensPlaceNo );
		// 申込明細番号
// IT1-2013-000ZZZZ対応 20130530 星野 MOD START
//		condMap.put( EKK0341A010CBSMsg1List.MSKM_DTL_NO, getMapString( kk0081_a010_map, EKK0081A010CBSMsg1List.MSKM_DTL_NO ) );
		condMap.put( EKK0341A010CBSMsg1List.MSKM_DTL_NO, getMapString( paramMap, "mskm_dtl_no" ) );
// IT1-2013-000ZZZZ対応 20130530 星野 MOD END
		// 予約適用年月日
// 品質強化試験追加分 故障No.100023対応 20121230 星野 MOD START
//		condMap.put( EKK0341A010CBSMsg1List.RSV_APLY_YMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
		condMap.put( EKK0341A010CBSMsg1List.RSV_APLY_YMD, getMapString( paramMap, "rsv_aply_ymd" ) );
// 品質強化試験追加分 故障No.100023対応 20121230 星野 MOD END
		// 異動区分
		condMap.put( EKK0341A010CBSMsg1List.IDO_DIV, getMapString( paramMap, KKSV0098_KKSV0098OP.IDO_DIV ) );
		// 宅内機器異動コード
		condMap.put(EKK0341A010CBSMsg1List.TAKNKIKI_IDO_CD, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.TAKNKIKI_IDO_CD ));

		HashMap<String, Object> kksv_work_map = itenmSvcKei( param, fixedText, kk0341_a010_map );
		kksv_work_map.put( JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO, getMapString( kksv_work_map, EKK0081A010CBSMsg1List.SVC_KEI_NO ) );
		kksv_work_map.put( JKKAdchgConstCC.PARAM_KEY_NEW_KEI_KAIS_UCWK_NO, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO ) );
		condMap.put( JKKAdchgMapperCC.UPD_DT_KKTK_SVC_KEI_UPD_DTM_BEF, kk0341_a010_map.get( EKK0341A010CBSMsg1List.LAST_UPD_DTM ) );
// OM-2014-0001235対応 20140328 星野 ADD START
		condMap.put( "kkst_snn_stat_init_yh", kk0341_a010_map.get( "kkst_snn_stat_init_yh" ) );
// OM-2014-0001235対応 20140328 星野 ADD START

		// EKK0341C200_機器提供サービス契約場所変更
		reqMap = mapper.setEKK0341C200( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> kk0341_c200_map = mapper.getEKK0341C200( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// 排他情報の引継
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.LAST_UPD_DTM, getMapString( kk0341_c200_map, EKK0341C191CBSMsg.UPD_DTM ) );
		return kk0341_c200_map;
	}
	
	/**
	 * EKK0341C220 機器提供サービス契約場所変更確定実行処理
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  pararmMap         入力マップ
	 * @param  kk0341_a010_map  機器提供サービス契約一意照会マップ
	 * @param  kk0341_c200_map
	 * @return
	 */
	private HashMap<String, Object> executeEKK0341C220( IRequestParameterReadWrite param, String fixedText, 
			HashMap<String, Object> paramMap, HashMap<String, Object> kk0341_a010_map, HashMap<String, Object> kk0341_c200_map ) throws Exception
	{
		/** 前準備 **/
		HashMap<String, Object> condMap;
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンス
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvoker
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();


		condMap = new HashMap<String, Object>();
		// 機器提供サービス契約番号
		condMap.put( EKK0341C220CBSMsg.KKTK_SVC_KEI_NO, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO ) );
		// 世代登録年月日時分秒
		condMap.put( EKK0341C220CBSMsg.GENE_ADD_DTM, getMapString( kk0341_c200_map, EKK0341C200CBSMsg.GENE_ADD_DTM ) );
		// 予約適用年月日
// 品質強化試験追加分 故障No.100023対応 20121230 星野 MOD START
//		condMap.put( EKK0341C220CBSMsg.RSV_APLY_YMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
		condMap.put( EKK0341C220CBSMsg.RSV_APLY_YMD, getMapString( paramMap, "rsv_aply_ymd" ) );
// 品質強化試験追加分 故障No.100023対応 20121230 星野 MOD END
		// 異動区分
		condMap.put( EKK0341C220CBSMsg.IDO_DIV, getMapString( paramMap, KKSV0098_KKSV0098OP.IDO_DIV ) );
		// 更新年月日時分秒(更新前)
		condMap.put( EKK0341C220CBSMsg.UPD_DTM_BF, kk0341_a010_map.get( EKK0341A010CBSMsg1List.LAST_UPD_DTM ) );

		// EKK0341C220 機器提供サービス契約場所変更確定
		reqMap = mapper.setEKK0341C220( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> kk0341_c220_map = mapper.getEKK0341C220( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// 排他情報の引継
		kk0341_a010_map.put( EKK0341A010CBSMsg1List.LAST_UPD_DTM, getMapString( kk0341_c220_map, EKK0341C191CBSMsg.UPD_DTM ) );
		return kk0341_c220_map;
	}
	
	/**
	 * 親契約識別コードより転居元のサービス契約を取得する.
	 * <br>
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  kk0341_a010_map  機器提供サービス契約一意照会マップ
	 * @return 転居元のサービス契約情報
	 * @throws 例外が発生した場合
	 */
	private HashMap<String, Object> itenmSvcKei( IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> kk0341_a010_map ) throws Exception {

		/** 前準備 **/
		HashMap<String, String> condMap;
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンス
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvoker
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		String svc_kei_no = "";

		// 親契約識別コード
		String oya_kei_skbt_cd = getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD );
		if ( "01".equals( oya_kei_skbt_cd ) ) {
			// サービス契約番号
			svc_kei_no = getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.SVC_KEI_NO );

		} else if ( "02".equals( oya_kei_skbt_cd ) ) {

			// ONU, V-ONUの場合
			// サービス契約内訳番号
			// EKK0251A010_サービス契約回線内訳一意照会
			condMap = new HashMap<String, String>();
			condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_KAIS_UCWK_NO, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO ) );
			condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, paramMap.get( JKKAdchgConstCC.PARAM_KEY_OPE_DATE ).toString() );
			reqMap = mapper.setEKK0251A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> kk0251_a010_map = mapper.getEKK0251A010( param, fixedText, resMap );
			mapper.scResultCheck( param );

			HashMap<String, Object> kk0081_a010_map = new HashMap<String, Object>();
			kk0081_a010_map.put("svc_div", "1");
			// 場所変更で利用する申込明細番号を設定
			kk0081_a010_map.put(EKK0081A010CBSMsg1List.MSKM_DTL_NO, (String)kk0251_a010_map.get(EKK0251A010CBSMsg1List.MSKM_DTL_NO));
			return kk0081_a010_map;

	
		} else if ( "03".equals( oya_kei_skbt_cd ) ) {
			// サービス契約内訳番号
			// EKK0161A010_サービス契約内訳一意照会
			condMap = new HashMap<String, String>();
			condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, getMapString( kk0341_a010_map, EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO ) );
			condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, paramMap.get( JKKAdchgConstCC.PARAM_KEY_OPE_DATE ).toString() );
			reqMap = mapper.setEKK0161A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> kk0161_a010_map = mapper.getEKK0161A010( param, fixedText, resMap );
			mapper.scResultCheck( param );

			svc_kei_no = getMapString( kk0161_a010_map, EKK0161A010CBSMsg1List.SVC_KEI_NO );
		} else {
			// 上記以外は対象外とする
			return new HashMap<String, Object>();
		}

		// EKK0081A010_サービス契約一意照会
		condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svc_kei_no);
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, getMapString(paramMap, JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
		reqMap = mapper.setEKK0081A010(param, fixedText, condMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk0081_a010_map = mapper.getEKK0081A010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		return kk0081_a010_map;
	}
	
	/**
	 * 設置場所番号の取得.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   pararmMap  入力マップ
	 * @throws  Exception  例外が発生した場合
	 */
	private String getItensPlace( IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap ) throws Exception {

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// ■ EKKA0020002 設置場所番号取得
		// place_map生成
		HashMap<String, Object> place_map = new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> place_map_list = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> place_meisai_map = new HashMap<String, Object>();

		// 場所住所コード
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_CD ) );
		// 場所郵便番号
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_PCD ) );
		// 場所都道府県名
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_STATE ) );
		// 場所市区町村名
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_CITY ) );
		// 場所大字通称名
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_OAZTSU ) );
		// 場所字丁目名
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_AZCHO ) );
		// 場所番地号
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_BNCHIGO ) );
		// 場所住所補記・建物名
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_ADRTTM ) );
		// 場所住所補記・部屋番号
		place_meisai_map.put( EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM, getMapString( paramMap, KKSV0098_KKSV0098OP.ITENS_AD_ADRRM ) );
		place_map_list.add(place_meisai_map);
		place_map.put(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST, new ArrayList<HashMap<String, Object>>());

		reqMap = mapper.setEKKA0020002( param, fixedText, place_map, place_map_list );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		ArrayList<HashMap<String, Object>> ekka002_0002_map_list = mapper.getEKKA0020002( param, fixedText, resMap );
		mapper.scResultCheck( param );

		// 場所番号の引継
		if (ekka002_0002_map_list.isEmpty()) {
			// ■取得件数が0件の場合
			//   引継情報無しの為、以下の処理は行わない。
			return null;
		}

		// ■取得件数が1件以上の場合
		//   EKKA0020002 設置場所番号取得にて取得した場所番号を引継情報として設定
		HashMap<String, Object> place_ret_map = ekka002_0002_map_list.get(0);
		return place_ret_map.get( EKKA0020002CBSMsg2List.SETPLACE_NO ).toString();
	}

	
	/**
	 * パラメータ取得(HashMap).
	 * <br>
	 * @param  targetMap  取得元マップ
	 * @param  targetKey  取得元キー項目
	 * @return 取得文字列
	 */
	private String getMapString( HashMap targetMap, String targetKey ) {
		String resultStr = new String();

		if ( targetMap != null ) {
			if ( ( targetKey != null ) && ( !"".equals( targetKey ) ) ) {
				if ( targetMap.containsKey( targetKey ) ) {
					resultStr = (String) targetMap.get(targetKey);
				}
			}
		}

		return resultStr;
	}

// ANK-1578-00-00 2013.12.22 T.TORIKAI メソッド追加
	/**
	 * EKK0341C320_機器提供サービス契約サービス契約回線内訳変更.
	 * <br>
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  paramMap         当該CCのパラメータマップ
	 * @param  kk0341_a010_map  機器提供サービス契約一意照会マップ
	 * @param  kk0081_a010_map  サービス契約一意照会マップ
	 * @throws 例外が発生した場合
	 */
	private HashMap<String, Object> executeEKK0341C320(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap, HashMap<String, Object> kk0341_a010_map, HashMap<String, Object> kk0081_a010_map) throws Exception {

		/** 前準備 **/
		HashMap<String, Object> condMap;
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンス
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvoker
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		/** EKK0341C320_機器提供サービス契約サービス契約回線内訳変更 */
		condMap = new HashMap<String, Object>();
		// 機器提供サービス契約番号
		condMap.put(EKK0341C320CBSMsg.KKTK_SVC_KEI_NO, getMapString(kk0341_a010_map, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// サービス契約回線内訳番号
		condMap.put(EKK0341C320CBSMsg.SVC_KEI_KAISEN_UCWK_NO, getMapString(paramMap, JKKAdchgConstCC.PARAM_KEY_NEW_KEI_KAIS_UCWK_NO));
		// 申込明細番号
// OM-2014-0001642対応 20140428 星野 MOD START
//		condMap.put(EKK0341C320CBSMsg.MSKM_DTL_NO, getMapString(kk0081_a010_map, EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		condMap.put( EKK0341A010CBSMsg1List.MSKM_DTL_NO, getMapString( paramMap, "mskm_dtl_no" ) );
// OM-2014-0001642対応 20140428 星野 MOD END
		// 機器提供サービス契約引継発生年月日
		condMap.put(EKK0341C320CBSMsg.KKTK_SVC_KEI_HKHASYMD, JCCBPCommon.getOpeDate(null));
		// 予約適用年月日
		condMap.put(EKK0341C320CBSMsg.RSV_APLY_YMD, getMapString(paramMap, "rsv_aply_ymd"));
		// 異動区分
		condMap.put(EKK0341C320CBSMsg.IDO_DIV, getMapString(paramMap, KKSV0098_KKSV0098OP.IDO_DIV ));
		// 更新年月日時分秒 (更新前)
		condMap.put(EKK0341C320CBSMsg.UPD_DTM_BF, getMapString(kk0341_a010_map, EKK0341A010CBSMsg1List.LAST_UPD_DTM));

		// EKK0341C320_機器提供サービス契約サービス契約回線内訳変更
		reqMap = mapper.setEKK0341C320(param, fixedText, condMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk0341_c320_map = mapper.getEKK0341C320(param, fixedText, resMap);
		mapper.scResultCheck(param);

		return kk0341_c320_map;
	}
	
// ANK-2062-00-00 ADD START
	/**
	 * 多機能ルータの登録住所切替（要・不要）判定処理
	 * <br>
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  paramMap         当該CCのパラメータマップ
	 * @throws 例外が発生した場合
	 */
	public IRequestParameterReadWrite isNeedTakinoRtKirikae(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception {
		
		try {
		
			/** 事前準備 */
			// paramが空のときはなにもせずに戻す
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			if(paramMap==null || paramMap.isEmpty()){
				return param;
			}
			
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
			
			return isNeedTakinoRtKirikae(handle, param, fixedText, paramMap);
		} finally {
			
			// ・セッションハンドル保持域
			if( keepSesHandle.get() != null ){
				keepSesHandle.remove();
			}
		}
		
	}
	
	/**
	 * 多機能ルータの登録住所切替（要・不要）判定実質処理メソッド
	 * <br>
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  paramMap         当該CCのパラメータマップ
	 * @throws 例外が発生した場合
	 */
	private IRequestParameterReadWrite isNeedTakinoRtKirikae(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap) throws Exception {
			HashMap<String, String> condMap;
			HashMap<String, Object> reqMap;
			Map<?, ?> resMap;
			
		
			// チェック結果 1:OK で初期化
			paramMap.put("check_result", "1");
			// 多機能ルータ切替要・不要 1:必要 で初期化
			paramMap.put("check_kirikae", "1");
			
			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			
			
			// 移転【先】回線に多機能ルータが存在しているかをチェック
			// 機器提供サービス契約一覧照会（移転先回線）**********************************************************************
			condMap = new HashMap<String, String>();
			// （移転先）サービス契約回線内訳番号のセット
			condMap.put("key_svc_kei_kaisen_ucwk_no", (String)paramMap.get("itns_svkei_kisuw_no"));
	
			reqMap = mapper.setEKK0341B504(param, fixedText, condMap);
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> ekk0341_b504_map_list_saki = mapper.getEKK0341B504( param, fixedText, resMap );
			mapper.scResultCheck( param );
			// ****************************************************************************************************************
			
			// 移転【先】回線に紐付いている多機能ルータが存在しているかをチェック
			boolean sakiTakinoRtAri = false;
			for (HashMap<String, Object>kktk_svc_kei : ekk0341_b504_map_list_saki)
			{
				String kktk_svc_kei_stat = (String)kktk_svc_kei.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_STAT); // 機器提供サービス契約ステータス
				String taknkiki_sbt_cd   = (String)kktk_svc_kei.get(EKK0341B504CBSMsg1List.TAKNKIKI_SBT_CD  ); // 宅内機器種別コード
				
				// ANK-4315-00-00 MOD START
				// 機器提供サービス契約ステータスが[910:解約済], [920:キャンセル済]でない、かつ宅内機器種別コードが[R0:多機能ルータ]または[S0:HGW]のとき
				//if (!"910".equals(kktk_svc_kei_stat) && !"920".equals(kktk_svc_kei_stat) && "R0".equals(taknkiki_sbt_cd))
				if (!"910".equals(kktk_svc_kei_stat) && !"920".equals(kktk_svc_kei_stat) && ("R0".equals(taknkiki_sbt_cd) || "S0".equals(taknkiki_sbt_cd)))
				// ANK-4315-00-00 MOD END
				{
					sakiTakinoRtAri = true;
					break;
				}
			}
			// 移転【先】回線に多機能ルータが存在している場合
			if (sakiTakinoRtAri == true) 
			{
				// 切替不要で処理終了
				paramMap.put("check_kirikae", "0");
				return param;
			}
			
			// 移転【元】回線に【新規（直送）で追加された】多機能ルータを取得する
			// 機器提供サービス契約一覧照会（移転元回線）**********************************************************************
			condMap = new HashMap<String, String>();
			// （移転元）サービス契約回線内訳番号のセット
			condMap.put("key_svc_kei_kaisen_ucwk_no", (String)paramMap.get("itnm_svkei_kisuw_no"));
	
			reqMap = mapper.setEKK0341B504(param, fixedText, condMap);
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> ekk0341_b504_map_list_moto = mapper.getEKK0341B504( param, fixedText, resMap );
			mapper.scResultCheck( param );
			// ****************************************************************************************************************
			
			// 移転【元】回線に紐付いている多機能ルータの機器提供サービス契約レコードを取得する
			HashMap<String, Object> itenMoto_kktk_svc_kei = new HashMap<String, Object>();
			boolean motoTakinoRtAri = false;
			for (HashMap<String, Object>kktk_svc_kei : ekk0341_b504_map_list_moto)
			{
				String kktk_svc_kei_no   = (String)kktk_svc_kei.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_NO  ); // 機器提供サービス契約番号
				String kktk_svc_kei_stat = (String)kktk_svc_kei.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_STAT); // 機器提供サービス契約ステータス
				String taknkiki_sbt_cd   = (String)kktk_svc_kei.get(EKK0341B504CBSMsg1List.TAKNKIKI_SBT_CD  ); // 宅内機器種別コード
				
				// ANK-4315-00-00 MOD START
				// 機器提供サービス契約ステータスが[910:解約済]でない、かつ[920:キャンセル済]でない、かつ宅内機器種別コードが[R0:多機能ルータ]または[S0:HGW]のとき
				//if (!"910".equals(kktk_svc_kei_stat) && !"920".equals(kktk_svc_kei_stat) && "R0".equals(taknkiki_sbt_cd))
				if (!"910".equals(kktk_svc_kei_stat) && !"920".equals(kktk_svc_kei_stat) && ("R0".equals(taknkiki_sbt_cd) || "S0".equals(taknkiki_sbt_cd)))
				// ANK-4315-00-00 MOD END
				{
					motoTakinoRtAri = true;
					itenMoto_kktk_svc_kei = kktk_svc_kei;
					// 切替処理に使用するためパラメータマップに切替対象の機器提供サービス契約番号を保持しておく
					paramMap.put("kirikae_target_kktk_svc_kei_no", kktk_svc_kei_no);
					break;
				}
			}
			
			// 移転【元】回線に多機能ルータが存在していない場合
			if (motoTakinoRtAri == false)
			{
				// 切替不要で処理終了
				paramMap.put("check_kirikae", "0");
				return param;
			}
			
			// 住所変更明細一覧照会********************************************************************************************
			condMap = new HashMap<String, String>();
			// 住所変更番号のセット
			condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String)paramMap.get("adchg_no"));
			condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, "03"); // 03:機器提供サービス契約
	
			reqMap = mapper.setEKK2101B001(param, fixedText, condMap);
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> ekk2101_b001_map_list = mapper.getEKK2101B001( param, fixedText, resMap );
			mapper.scResultCheck( param );
			// ****************************************************************************************************************
			
			// 住所変更明細に移転【元】回線に紐付いている多機能ルータが登録されているかを調べる
			boolean shinkiTakinoRtAri = true;
			for (HashMap<String, Object>adchg_dtl : ekk2101_b001_map_list)
			{
				String chbf_skbt_no = (String)adchg_dtl            .get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO); // 変更前識別番号
				String kiki_chg_no  = (String)itenMoto_kktk_svc_kei.get(EKK0341B504CBSMsg1List.KIKI_CHG_NO ); // 機器変更番号
				
				// 住変明細.変更前識別番号 が 移転【元】機器提供サービス契約.機器変更番号と等しいとき
				if (kiki_chg_no.equals(chbf_skbt_no))
				{
					shinkiTakinoRtAri = false;
					break;
				}
			}
			
			// 住変後に新規登録されたルータが存在しない場合
			if (shinkiTakinoRtAri == false)
			{
				// 切替不要で処理終了
				paramMap.put("check_kirikae", "0");
				return param;
			}
			
					
			// 機器提供オプションサービス契約一覧照会明細（機器提供ＳＶ）******************************************************
			condMap = new HashMap<String, String>();
			// 機器提供番号のセット
			condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String)itenMoto_kktk_svc_kei.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_NO));
	
			reqMap = mapper.setEKK2811B010(param, fixedText, condMap);
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> ekk2811_b010_map_list = mapper.getEKK2811B010( param, fixedText, resMap );
			mapper.scResultCheck( param );
			// ****************************************************************************************************************
			
			// 移転【元】の機器提供サービス契約にＶＡ、ルータ機能のオプションが契約されているかを調べる
			boolean vaOption = false;
			boolean rtOption = false;
			for (HashMap<String, Object>kkop_svc_kei : ekk2811_b010_map_list)
			{
				String kkop_svc_kei_stat = (String)kkop_svc_kei.get(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT); // 機器提供オプションサービス契約ステータス
				String kkop_svc_cd       = (String)kkop_svc_kei.get(EKK2811B010CBSMsg1List.KKOP_SVC_CD      ); // 機器提供オプションサービスコード
				
				// 機器提供オプションサービス契約ステータスが[910:解約済][920:キャンセル済]のものは無視
				if("910".equals(kkop_svc_kei_stat) || "920".equals(kkop_svc_kei_stat))
				{
					continue;
				}
				
				// 機器提供オプションサービスコードが[G02:電話アダプタ（ＶＡ）機能]のときＶＡあり
				if ("G02".equals(kkop_svc_cd))
				{
					vaOption = true;
					// 電話番号の紐付け切替処理判定で使用するため、オプションありを保持しておく
					paramMap.put("va_option", "1");
				}
				// 機器提供オプションサービスコードが[G01:ルータ機能]のときルータ機能あり
				if ("G01".equals(kkop_svc_cd))
				{
					rtOption = true;
				}
			}
	
			
			// インプットパラメータよりサービス契約の引越し予定を調べる
			boolean telHikkoshi = false;
			boolean netHikkoshi = false;
			// eo光電話
			if ("0".equals((String)paramMap.get("eoh_tel_use_svc_chg_div")) || "1".equals((String)paramMap.get("eoh_tel_use_svc_chg_div")))
			{
				// 電話サービスが解約・キャンセルされていなければ引越し予定
				String tel_svc_kei_no = (String)paramMap.get("svc_kei_no_tel_af");
				if (!StringUtils.isEmpty(tel_svc_kei_no) && !isSvcKeiStatKaiyakuOrCancel(param, fixedText, tel_svc_kei_no))
				{
					telHikkoshi = true;
				}
			}
			// eo光ネット
			if ("0".equals((String)paramMap.get("eoh_net_use_svc_chg_div")) || "1".equals((String)paramMap.get("eoh_net_use_svc_chg_div")))
			{
				// ネットサービスが解約・キャンセルされていなければ引越し予定
				String net_svc_kei_no = (String)paramMap.get("svc_kei_no_net_af");
				if (!StringUtils.isEmpty(net_svc_kei_no) && !isSvcKeiStatKaiyakuOrCancel(param, fixedText, net_svc_kei_no))
				{
					netHikkoshi = true;
				}
			}
			
			// 多機能ルータに紐付いているオプションと電話、ネットの引越し予定をチェックする
			if (vaOption == true && telHikkoshi == true)
			{
				if (rtOption == true && netHikkoshi == false)
				{
					// ルータ切替不可 チェックエラー
					paramMap.put("check_result",  "0");
					paramMap.put("chk_rt_option", "0");
					paramMap.put("check_kirikae", "0");
					return param;
				}
				else
				{
					// ルータ切替必要（なにもせず後続処理へ）
				}
			}
			else if (rtOption == true && netHikkoshi == true)
			{
				if (vaOption == true && telHikkoshi == false)
				{
					// ルータ切替不可 チェックエラー
					paramMap.put("check_result",  "0");
					paramMap.put("chk_rt_option", "0");
					paramMap.put("check_kirikae", "0");
					return param;
				}
				else
				{
					// ルータ切替必要（なにもせず後続処理へ）
				}
			}
			else
			{
				// ルータ切替不要で処理終了
				paramMap.put("check_kirikae", "0");
				return param;
			}
			
		
			
			// 契約機器配送対象物品一覧照会************************************************************************************
			condMap = new HashMap<String, String>();
			// 機器提供番号のセット
			condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String)itenMoto_kktk_svc_kei.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_NO));
	
			reqMap = mapper.setEDK0011B090(param, fixedText, condMap);
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> edk0011_b090_map_list = mapper.getEDK0011B090( param, fixedText, resMap );
			mapper.scResultCheck( param );
			// ****************************************************************************************************************
			boolean rtShukkaZumi = false;
			
			for (HashMap<String, Object>haiso_tg_bpin : edk0011_b090_map_list)
			{
				String haiso_stat  = (String)haiso_tg_bpin.get(EDK0011B090CBSMsg1List.HAISO_STAT ); // 配送ステータス
				String kiki_chg_no = (String)haiso_tg_bpin.get(EDK0011B090CBSMsg1List.KIKI_CHG_NO); // 機器変更番号
				
				// 配送ステータスが003:出荷済,004:完了済のものを探す
				if ("003".equals(haiso_stat) || "004".equals(haiso_stat))
				{
					// 機器変更番号が、該当の多機能ルータのものと一致しているとき出荷済とみなす
					if (kiki_chg_no.equals((String)itenMoto_kktk_svc_kei.get(EKK0341B504CBSMsg1List.KIKI_CHG_NO)))
					{
						rtShukkaZumi = true;
						break;
					}
				}
			}
			
			if (rtShukkaZumi == false)
			{
				// 切り替えが必要なのに多機能ルータの出荷が完了していないときはエラーを返す
				paramMap.put("check_result",  "0");
				paramMap.put("chk_rt_shukka", "0");
				// 切替不要にしておく
				paramMap.put("check_kirikae", "0");
				return param; 
			}
		return param;
	}

	/**
	 * サービス契約ステータス 解約・キャンセルチェック
	 * <br>
	 * @param  param            モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  fixedText        ユーザ任意文字列
	 * @param  paramMap         当該CCのパラメータマップ
	 * @throws 例外が発生した場合
	 */
	private boolean isSvcKeiStatKaiyakuOrCancel(IRequestParameterReadWrite param, String fixedText, String key_svc_kei_no) throws Exception {
	
		/** 前準備 **/
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
		HashMap<String, String> condMap;
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンス
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvoker
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		condMap = new HashMap<String, String>();
		// サービス契約番号のセット
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, key_svc_kei_no);
		// 予約適用年月日（運用日付）のセット
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));

		reqMap = mapper.setEKK0081A010(param, fixedText, condMap);
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> ekk0081_a010_map = mapper.getEKK0081A010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// 一意照会結果0件のときは解約・キャンセルと同じ扱いとする
		if(ekk0081_a010_map == null || ekk0081_a010_map.isEmpty() == true)
		{
			return true;
		}
		
		String svc_kei_stat = (String)ekk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		if("910".equals(svc_kei_stat) || "920".equals(svc_kei_stat))
		{
			return true;
		}
		
		return false;
	}
// ANK-2062-00-00 ADD END
}