/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：住所変更情報本登録コンポーネント部品クラス
 *  ソースファイル名：JKKAdchgHonCmtCC.java
 *  作成者          ：FJ
 *  日付            ：2012年8月21日
 *＜機能概要＞
 *  住所変更に伴う住所変更情報の登録処理を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2012/8/21   FJ          新規作成
 *  v7.00.00    2014/03/18  星野        OM-2014-0001071対応
 *  v8.00.00    2014/06/03  星野        OM-2014-0001576対応
 *  v9.00.00	2014/04/30  FJ)北谷     ANK-2056-00-00対応
 * v10.00.00    2014/10/17  FJ)北谷     ANK-2286-00-00対応
 * v32.00.00    2017/06/14  FJ)澤田    【ANK-3149-04-00】セキュリティーパック導入
 * v46.00.00	2019/09/16  FJ)澤田	    ANK-3731-00-00 マンション光配線切替対応
 * v59.00.00	2022/04/05  FJ)平野	    【ANK-4245-00-00】【eo】ローゼット化対応フォロー案件
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
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.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B032CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2091A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2091C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101D010CBSMsg;

/**
 * 住所変更情報本登録コンポーネント部品クラス.
 * <br>
 * @author FJ
 */
public class JKKAdchgHonCmtCC extends AbstractCommonComponent {

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKAdchgHonCmtCC() {
	}

	/**
	 * 本登録処理.
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite adchgInfoCmt(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

		try {

			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
			
			// 本登録処理
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);

			/** 登録更新判定 */
			// 住所変更情報マップの取得
			HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);

			// 住所変更番号の取得
			String adchgNo = adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO).toString();
			
			// 住所変更番号入力判定
			if(StringUtils.isEmpty(adchgNo)) {
				
				// 登録処理の呼出
				addCmt(param, fixedText);
				
			} else {
				
				// 更新処理の呼出
				updCmt(param, fixedText);
			}

			/** 仮登録削除判定 */
			// 住所変更申込一時保存番号の取得
			String adchtppvNo = adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO).toString();
			
			// 住所変更申込一時保存番号入力判定
			if(!StringUtils.isEmpty(adchtppvNo)) {
				
				// 仮登録削除処理の呼出
				delKrInf(param, fixedText);
			}
						
		} finally {

			if(keepSesHandle.get() != null) {
				keepSesHandle.remove();
			}
		}

		return param;
	}
	
	
	/**
	 * 住所変更申込登録処理.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void addCmt(IRequestParameterReadWrite param, String fixedText) throws Exception {

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
		HashMap<String, Object> addMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		/** 住所変更登録情報 生成 */
		// 住所変更情報マップの取得
		HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);
		// サービス契約回線内訳情報の取得
		ArrayList<HashMap<String, Object>> keiKaisUcwkList = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_KEI_KAIS_UCWK_LIST);
		HashMap<String, Object> keiKaisUcwkMap = keiKaisUcwkList.get(0);

		// 住所変更
		addMap = new HashMap<String, Object>();
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_MSKM_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MSKM_NO).toString());
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITNM_SYKEI_KISUW_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITNM_SYKEI_KISUW_NO).toString());
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITENS_SVKEI_KISUW_NO, keiKaisUcwkMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_KEI_KAIS_UCWK_NO).toString());
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_IDO_DIV, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_IDO_DIV).toString());
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_AD_SWITCH_WAY_CD, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_AD_SWITCH_WAY_CD).toString());
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_KSNAD_CHG_UM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_KSNAD_CHG_UM).toString());
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_GUIDEMG_SHS_CHG_UM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_GUIDEMG_SHS_CHG_UM).toString());
		//ANK-3731-00-00 ADD START
		addMap.put(JKKAdchgConstCC.PARAM_KEY_MANS_HHS_SWCH_FLG, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_MANS_HHS_SWCH_FLG).toString());
		//ANK-3731-00-00 ADD END
		//ANK-4245-00-00 ADD START
		// 利用停止開始年月日
		addMap.put(JKKAdchgConstCC.USE_STP_STA_YMD, adchgMap.get(JKKAdchgConstCC.USE_STP_STA_YMD).toString());
		//ANK-4245-00-00 ADD END
		/** 住所変更登録 */
		// ・EKK2091D010  住所変更登録
		reqMap = mapper.setEKK2091D010(param, fixedText, addMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk2091_d010_map = mapper.getEKK2091D010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		// 払い出された住所変更番号をparamへ設定
		adchgMap.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO, (String)kk2091_d010_map.get(EKK2091D010CBSMsg.ADCHG_NO));

		// 登録後の更新年月日時分秒をparamへ設定
		adchgMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM, (String)kk2091_d010_map.get(EKK2091D010CBSMsg.UPD_DTM));


		/** 住所変更明細登録情報（サービス契約） 生成 */
		// サービス契約番号リスト
		ArrayList<HashMap<String, Object>> svcKeiInfo = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_INFO);
		// 住所変更明細情報（サービス契約）マップの取得
		ArrayList<HashMap<String, Object>> adchgDtlListSvcKei = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_MAP_SVC_KEI);
		for(int i = 0; i < adchgDtlListSvcKei.size() ; i++ ) {
			
			HashMap<String, Object> adchgDtlMapSvcKei = adchgDtlListSvcKei.get(i);
			
			// 契約なしの場合、レコードを作成しない
			if(JKKAdchgConstCC.CD00849_NON.equals(adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD))) {
				
				continue;
			}
			
			// サービス契約番号
			String svcKeiNo = "";
			String svcCd = (String)adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_CD);
			
			// サービスコードがネットの場合
			if(JKKAdchgConstCC.CD00130_INET_SVC.equals(svcCd)){
				
				svcKeiNo = (String)svcKeiInfo.get(0).get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO);
				
			// サービスコードが電話の場合
			} else if(JKKAdchgConstCC.CD00130_TEL_SVC.equals(svcCd)){
				
				svcKeiNo = (String)svcKeiInfo.get(1).get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO);
				
			// サービスコードがテレビの場合
			} else if(JKKAdchgConstCC.CD00130_TV_SVC.equals(svcCd)){
				
				svcKeiNo = (String)svcKeiInfo.get(2).get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO);
			}
			
			// 住所変更明細
			addMap = new HashMap<String, Object>();
			addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_NO);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, svcKeiNo);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, (String) adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, (String) adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO));			
			addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM ));

			/** 住所変更明細登録（サービス契約） */
			// ・EKK2101D010  住所変更明細登録
			reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk2101_d010_map_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号をparamへ設定
			adchgDtlMapSvcKei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
		}


		/** 住所変更明細登録情報（サービス契約内訳） 生成 */
		// 住所変更明細情報リスト（サービス契約内訳）を抽出
		ArrayList<HashMap<String, Object>> svc_kei_ucwk_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK);

		/** 住所変更明細情報リスト（サービス契約内訳）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> svc_kei_ucwk_list_ite = svc_kei_ucwk_list.iterator();
		while(svc_kei_ucwk_list_ite.hasNext()) {

			HashMap<String, Object> cur_svc_kei_ucwk = svc_kei_ucwk_list_ite.next();

			/** 住所変更明細登録情報（サービス契約内訳） 生成 */
			// 住所変更明細登録情報（サービス契約内訳）
			addMap = new HashMap<String, Object>();
			addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_UCWK_NO);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

			// サービス契約内訳番号が設定されていない場合は読み飛ばす
			if (StringUtils.isEmpty((String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO))
					&& StringUtils.isEmpty((String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO))) {
				
				continue;
			}


			/** 住所変更明細登録情報（サービス契約内訳） */
			// ・EKK2101D010 住所変更明細登録
			reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk2101_d010_map_svc_kei_ucwk = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号をparamへ設定
			cur_svc_kei_ucwk.put( JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_svc_kei_ucwk.get(EKK2101D010CBSMsg.ADCHG_DTL_NO ));
		}

		
		/** 住所変更明細登録情報（機器提供サービス契約） 生成 */
		// 住所変更明細情報リスト（機器提供サービス契約）を抽出
		ArrayList<HashMap<String, Object>> kktk_svc_kei_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_KKTK_SVC_KEI);

		/** 住所変更明細情報リスト（機器提供サービス契約）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> kktk_svc_kei_list_ite = kktk_svc_kei_list.iterator();
		while(kktk_svc_kei_list_ite.hasNext()){

			HashMap<String, Object> cur_kktk_svc_kei = kktk_svc_kei_list_ite.next();
			
			// 機器提供サービス契約番号がない場合、処理対象外
			if (StringUtils.isEmpty((String)cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO))) {
				
				continue;
			}

			/** 住所変更明細登録情報（機器提供サービス契約） 生成 */
			// 住所変更明細登録情報（機器提供サービス契約）
			addMap = new HashMap<String, Object>();
			addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KKTK_SVC_KEI_NO );
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, (String) cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

			/** 住所変更明細登録情報（機器提供サービス契約） */
			// ・EKK2101D010 住所変更明細登録
			reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk2101_d010_map_kktk_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号をparamへ設定
			cur_kktk_svc_kei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_kktk_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO ));
		}

		
		/** 住所変更明細登録情報（オプションサービス契約） 生成 */
		// 住所変更明細情報リスト（オプションサービス契約）を抽出
		ArrayList<HashMap<String, Object>> op_svc_kei_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_OP_SVC_KEI);

		/** 住所変更明細情報リスト（オプションサービス契約）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> op_svc_kei_list_ite = op_svc_kei_list.iterator();
		while(op_svc_kei_list_ite.hasNext()) {

			HashMap<String, Object> cur_op_svc_kei = op_svc_kei_list_ite.next();

			/** 住所変更明細登録情報（オプションサービス契約） 生成 */
			// 住所変更明細登録情報（オプションサービス契約）
			addMap = new HashMap<String, Object>();
			addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_OP_SVC_KEI_NO);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			
			// ANK-2286-00-00 2014/10/16 mod start
			String fmtclDslYksFlg = (String)paramMap.get("fmtcl_dsl_yks_flg");
			if(JKKHakkoSODConstCC.OP_SVC_CD_FMTCEL.equals(cur_op_svc_kei.get("op_hktgi_op_svc_cd"))
				&& !"1".equals(fmtclDslYksFlg)){
				//フェムトセルの解約
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, "");
			}else if(JKKHakkoSODConstCC.OP_SVC_CD_FMTCEL.equals(cur_op_svc_kei.get("op_hktgi_op_svc_cd"))
				&& "1".equals(fmtclDslYksFlg)){
				//フェムトセルの解約抑止
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			}else{
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			}
			// ANK-2286-00-00 2014/10/16 mod end
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

			/** 住所変更明細登録情報（オプションサービス契約） */
			// ・EKK2101D010 住所変更明細登録
			reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk2101_d010_map_op_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号をparamへ設定
			cur_op_svc_kei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_op_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
		}

		// ANK-2056-00-00 2014/04/28 start
		// 住所変更明細情報リスト（電話オプションパック）を抽出
		ArrayList<HashMap<String, Object>> op_pac_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_OP_PAC);

		/** 住所変更明細情報リスト（電話オプションパック）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> op_pac_list_ite = op_pac_list.iterator();
		while(op_pac_list_ite.hasNext()) {
			HashMap<String, Object> cur_op_pac = op_pac_list_ite.next();
			/** 住所変更明細登録情報（電話オプションパック） 生成 */
			addMap = new HashMap<String, Object>();
			addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_TEL_OP_PACK);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

			reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk2101_d010_map_op_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号をparamへ設定
			cur_op_pac.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_op_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
		}
		// ANK-2056-00-00 2014/04/28 end

		/** 住所変更明細登録情報（請求契約） 生成 */
// OM-2013-0005404対応 20140103 星野 ADD START
		ArrayList<HashMap<String, Object>> adchgDtlListSeiKei = (ArrayList<HashMap<String, Object>>)paramMap.get("adchg_dtl_list_sei_kei");
		if(adchgDtlListSeiKei != null && !adchgDtlListSeiKei.isEmpty()){
			for(HashMap<String, Object> adchgDtlMapSeiKei : adchgDtlListSeiKei){
				
				// 住所変更明細
				addMap = new HashMap<String, Object>();
				addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SEI_KEI_NO);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, (String) adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));
				
				/** 住所変更明細登録（サービス契約） */
				// ・EKK2101D010  住所変更明細登録
				reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				HashMap<String, Object> kk2101_d010_map_sei_kei = mapper.getEKK2101D010(param, fixedText, resMap);
				mapper.scResultCheck(param);
		
				// 払い出された住所変更明細番号をparamへ設定
				adchgDtlMapSeiKei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_sei_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
			}
		}else{
		// 以下は本来不要となるロジックであるが、デグレのリスクを回避するため一応残しておく
// OM-2013-0005404対応 20140103 星野 ADD END
		// 住所変更明細情報（請求契約）マップの取得
		HashMap<String, Object> adchgDtlMapSeiKei = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_MAP_SEI_KEI);
		
		// 住所変更明細
		addMap = new HashMap<String, Object>();
		addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SEI_KEI_NO);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, (String) adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
		addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

		/** 住所変更明細登録（サービス契約） */
		// ・EKK2101D010  住所変更明細登録
		reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk2101_d010_map_sei_kei = mapper.getEKK2101D010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		// 払い出された住所変更明細番号をparamへ設定
		adchgDtlMapSeiKei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_sei_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
// OM-2013-0005404対応 20140103 星野 ADD START
		}
// OM-2013-0005404対応 20140103 星野 ADD END
		
		
		/** 住所変更明細登録情報（工事案件番号） 生成 */
		// 住所変更明細情報（工事案件番号）マップの取得
		ArrayList<HashMap<String, Object>> kojiak_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_KOJIAK);

		/** 住所変更明細情報リスト（工事案件番号）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> kojiak_list_ite = kojiak_list.iterator();
		while(kojiak_list_ite.hasNext()) {

			HashMap<String, Object> cur_kojiak = kojiak_list_ite.next();

			// 住所変更明細
			addMap = new HashMap<String, Object>();
			addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KOJI_ANKN_NO);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_TKKJ_KOJIAK_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_SINSETSU_KOJIAK_NO));
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM).toString());

			/** 住所変更明細登録（工事案件） */
			// ・EKK2101D010  住所変更明細登録
			reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> kk2101_d010_map_kojiak = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号をparamへ設定
			cur_kojiak.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_kojiak.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
		}
		
// IT1-2012-0002247対応 20121202 星野 ADD START
		/** 住所変更明細登録情報（解約/入居予定日） 生成 */
		addMap = new HashMap<String, Object>();
		addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_DSL_NYUKYO_YMD);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) paramMap.get("dsl_kibo_ymd"));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) paramMap.get("nyukyo_rsv_ymd"));
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
		addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
		addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM).toString());

		/** 住所変更明細登録（工事案件） */
		// ・EKK2101D010  住所変更明細登録
		reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk2101_d010_map_kojiak = mapper.getEKK2101D010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		// 払い出された住所変更明細番号をparamへ設定
		paramMap.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_kojiak.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
// IT1-2012-0002247対応 20121202 星野 ADD END

// ANK-1578-00-00 2013.12.06 T.TORIKAI ADD START
		/** 住所変更明細登録（機器オプションサービス契約） */
		// 住所変更明細へ機器オプションの情報を登録する
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD START（IT1-2014-0000040）
//		appendAdchgDtlKkopSvcKei(param, fixedText, paramMap);
		appendAdchgDtlKkopSvcKei(param, fixedText, paramMap, true);
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD END  （IT1-2014-0000040）
// ANK-1578-00-00 2013.12.06 T.TORIKAI ADD END
		// ANK-3149-04-00 ADD START
		appendAdchgDtlNetPack(param, fixedText, paramMap, true);
		// ANK-3149-04-00 ADD END
	}

	/**
	 * 住所変更申込更新処理.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void updCmt(IRequestParameterReadWrite param, String fixedText) throws Exception {

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
		HashMap<String, Object> updMap;
		HashMap<String, Object> addMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		/** 住所変更更新情報 生成 */
		// 住所変更情報マップの取得
		HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);

		// 住所変更
		updMap = new HashMap<String, Object>();
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_MSKM_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MSKM_NO));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITNM_SYKEI_KISUW_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITNM_SYKEI_KISUW_NO));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITENS_SVKEI_KISUW_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITENS_SVKEI_KISUW_NO));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_IDO_DIV, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_IDO_DIV));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_AD_SWITCH_WAY_CD, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_AD_SWITCH_WAY_CD));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_KSNAD_CHG_UM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_KSNAD_CHG_UM));
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_GUIDEMG_SHS_CHG_UM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_GUIDEMG_SHS_CHG_UM));
		//ANK-3731-00-00 ADD START
		updMap.put(JKKAdchgConstCC.PARAM_KEY_MANS_HHS_SWCH_FLG, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_MANS_HHS_SWCH_FLG).toString());
		//ANK-3731-00-00 ADD END
		updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM_BEF, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM_BEF));
		// ANK-4245-00-00 ADD START
		updMap.put(JKKAdchgConstCC.USE_STP_STA_YMD, adchgMap.get(JKKAdchgConstCC.USE_STP_STA_YMD));
		// ANK-4245-00-00 ADD END
		/** 住所変更更新 */
		// ・EKK2091C010  住所変更更新
		reqMap = mapper.setEKK2091C010(param, fixedText, updMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk2091_c010_map = mapper.getEKK2091C010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		// 更新後の更新年月日時分秒をparamへ設定
		adchgMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM, (String)kk2091_c010_map.get(EKK2091C010CBSMsg.UPD_DTM));

		// 異動区分が「住所変更・確定」の場合
		if(JKKAdchgConstCC.IDO_DIV_ADCHG_FIX.equals(adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_IDO_DIV))) {
			return;
		}

		/** 住所変更明細更新情報（サービス契約） 生成 */
		// 住所変更明細情報（サービス契約）マップの取得
		ArrayList<HashMap<String, Object>> adchgDtlListSvcKei = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_MAP_SVC_KEI);
		for(int i = 0; i < adchgDtlListSvcKei.size() ; i++) {
			HashMap<String, Object> adchgDtlMapSvcKei = adchgDtlListSvcKei.get(i);

			String adchgDtlNo = (String)adchgDtlMapSvcKei.get( JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO );
			if(adchgDtlNo == null || "".equals(adchgDtlNo)) {
				
				// サービス契約番号リスト
				ArrayList<HashMap<String, Object>> svcKeiInfo = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_INFO);
				
				// 契約なしの場合、レコードを作成しない
				if(JKKAdchgConstCC.CD00849_NON.equals(adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD))) {
					
					continue;
				}
				
				// サービス契約番号
				String svcKeiNo = "";
				String svcCd = (String)adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_CD);
				
				// サービスコードがネットの場合
				if(JKKAdchgConstCC.CD00130_INET_SVC.equals(svcCd)){
					
					svcKeiNo = (String)svcKeiInfo.get(0).get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO);
					
				// サービスコードが電話の場合
				} else if(JKKAdchgConstCC.CD00130_TEL_SVC.equals(svcCd)){
					
					svcKeiNo = (String)svcKeiInfo.get(1).get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO);
					
				// サービスコードがテレビの場合
				} else if(JKKAdchgConstCC.CD00130_TV_SVC.equals(svcCd)){
					
					svcKeiNo = (String)svcKeiInfo.get(2).get(JKKAdchgConstCC.PARAM_KEY_NEW_SVC_KEI_NO);
				}
				
				if (StringUtils.isEmpty(svcKeiNo)) {
					continue;
				}
				
				// 住所変更明細
				addMap = new HashMap<String, Object>();
				addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_NO);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, svcKeiNo);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, (String) adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, (String) adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO));			
				addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM ));

				/** 住所変更明細登録（サービス契約） */
				// ・EKK2101D010  住所変更明細登録
				reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				HashMap<String, Object> kk2101_d010_map_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
				mapper.scResultCheck(param);

				// 払い出された住所変更明細番号をparamへ設定
				adchgDtlMapSvcKei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
				continue;
			}
			
			
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO) );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_NO );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_NO, (String)adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
			reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001( param, fixedText, resMap );
			mapper.scResultCheck( param );
			if(kk2101_b001_list != null && !kk2101_b001_list.isEmpty()){
				HashMap<String, Object> kk2101_b001_map = kk2101_b001_list.get(0);
				
				// 住所変更明細
				updMap = new HashMap<String, Object>();
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_NO);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, adchgDtlMapSvcKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO));
				updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, kk2101_b001_map.get(EKK2101B001CBSMsg1List.LAST_UPD_DTM));

				/** 住所変更明細更新（サービス契約） */
				// ・EKK2101C010  住所変更明細更新
				reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				mapper.getEKK2101C010(param, fixedText, resMap);
				mapper.scResultCheck(param);
			}
			
		}


		/** 住所変更明細更新情報（サービス契約内訳） 生成 */
		// 住所変更明細情報リスト（サービス契約内訳）を抽出
		ArrayList<HashMap<String, Object>> svc_kei_ucwk_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK);

		/** 住所変更明細情報リスト（サービス契約内訳）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> svc_kei_ucwk_list_ite = svc_kei_ucwk_list.iterator();
		while(svc_kei_ucwk_list_ite.hasNext()) {

			HashMap<String, Object> cur_svc_kei_ucwk = svc_kei_ucwk_list_ite.next();

			// 住所変更明細番号が設定されていない場合は読み飛ばす
			if(StringUtils.isEmpty((String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO))) {
				
				/** 住所変更明細登録情報（サービス契約内訳） 生成 */
				// 住所変更明細登録情報（サービス契約内訳）
				addMap = new HashMap<String, Object>();
				addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_UCWK_NO);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

				// サービス契約内訳番号が設定されていない場合は読み飛ばす
				if (StringUtils.isEmpty((String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO))
						&& StringUtils.isEmpty((String) cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO))) {
					
					continue;
				}


				/** 住所変更明細登録情報（サービス契約内訳） */
				// ・EKK2101D010 住所変更明細登録
				reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				HashMap<String, Object> kk2101_d010_map_svc_kei_ucwk = mapper.getEKK2101D010(param, fixedText, resMap);
				mapper.scResultCheck(param);

				// 払い出された住所変更明細番号をparamへ設定
				cur_svc_kei_ucwk.put( JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_svc_kei_ucwk.get(EKK2101D010CBSMsg.ADCHG_DTL_NO ));
				
				continue;
			}

			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO) );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_UCWK_NO );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_NO, (String)cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
			reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001( param, fixedText, resMap );
			mapper.scResultCheck( param );
			if(kk2101_b001_list != null && !kk2101_b001_list.isEmpty()){
				HashMap<String, Object> kk2101_b001_map = kk2101_b001_list.get(0);
				
				/** 住所変更明細更新情報（サービス契約内訳） 生成 */
				// 住所変更明細更新情報（サービス契約内訳）
				updMap = new HashMap<String, Object>();
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SVC_KEI_UCWK_NO);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_svc_kei_ucwk.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, kk2101_b001_map.get(EKK2101B001CBSMsg1List.LAST_UPD_DTM));

				/** 住所変更明細更新情報（サービス契約内訳） */
				// ・EKK2101C010 住所変更明細更新
				reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
				resMap = scCall.run( reqMap, keepSesHandle.get());
				mapper.getEKK2101C010(param, fixedText, resMap);
				mapper.scResultCheck(param);
			}
			
		}

		
		/** 住所変更明細更新情報（機器提供サービス契約） 生成 */
		// 住所変更明細情報リスト（機器提供サービス契約）を抽出
		ArrayList<HashMap<String, Object>> kktk_svc_kei_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_KKTK_SVC_KEI);

		/** 住所変更明細情報リスト（機器提供サービス契約）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> kktk_svc_kei_list_ite = kktk_svc_kei_list.iterator();
		while( kktk_svc_kei_list_ite.hasNext()) {

			HashMap<String, Object> cur_kktk_svc_kei = kktk_svc_kei_list_ite.next();

			// 住所変更明細番号がない場合、処理対象外
			if (StringUtils.isEmpty((String)cur_kktk_svc_kei.get( JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO ))) {
				
				// 機器提供サービス契約番号がない場合、処理対象外
				if (!StringUtils.isEmpty((String)cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO))) {
					
					/** 住所変更明細登録情報（機器提供サービス契約） 生成 */
					// 住所変更明細登録情報（機器提供サービス契約）
					addMap = new HashMap<String, Object>();
					addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KKTK_SVC_KEI_NO );
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, (String) cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO));
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
					addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
					addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

					/** 住所変更明細登録情報（機器提供サービス契約） */
					// ・EKK2101D010 住所変更明細登録
					reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
					resMap = scCall.run(reqMap, keepSesHandle.get());
					HashMap<String, Object> kk2101_d010_map_kktk_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
					mapper.scResultCheck(param);

					// 払い出された住所変更明細番号をparamへ設定
					cur_kktk_svc_kei.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_kktk_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO ));
				}
				
				continue;
			}

			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO) );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KKTK_SVC_KEI_NO );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_NO, (String)cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
			reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001( param, fixedText, resMap );
			mapper.scResultCheck( param );
			if(kk2101_b001_list != null && !kk2101_b001_list.isEmpty()){
				HashMap<String, Object> kk2101_b001_map = kk2101_b001_list.get(0);
				
				/** 住所変更明細更新情報（機器提供サービス契約） 生成 */
				// 住所変更明細更新情報（機器提供サービス契約）
				updMap = new HashMap<String, Object>();
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KKTK_SVC_KEI_NO);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_kktk_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, kk2101_b001_map.get(EKK2101B001CBSMsg1List.LAST_UPD_DTM));

				/** 住所変更明細更新情報（機器提供サービス契約） */
				// ・EKK2101C010 住所変更明細更新
				reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				mapper.getEKK2101C010(param, fixedText, resMap);
				mapper.scResultCheck(param);
			}
			
		}

		
		/** 住所変更明細更新情報（オプションサービス契約） 生成 */
		// 住所変更明細情報リスト（オプションサービス契約）を抽出
		ArrayList<HashMap<String, Object>> op_svc_kei_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_OP_SVC_KEI);

		/** 住所変更明細情報リスト（オプションサービス契約）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> op_svc_kei_list_ite = op_svc_kei_list.iterator();
		while(op_svc_kei_list_ite.hasNext()) {

			HashMap<String, Object> cur_op_svc_kei = op_svc_kei_list_ite.next();

			/** 住所変更明細更新情報（オプションサービス契約） 生成 */
			// 住所変更明細更新情報（オプションサービス契約）
			updMap = new HashMap<String, Object>();
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_OP_SVC_KEI_NO);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			// ANK-2286-00-00 2014/10/16 mod start
			String fmtclDslYksFlg = (String)paramMap.get("fmtcl_dsl_yks_flg");
			if(JKKHakkoSODConstCC.OP_SVC_CD_FMTCEL.equals(cur_op_svc_kei.get("op_hktgi_op_svc_cd"))
				&& !"1".equals(fmtclDslYksFlg)){
				//フェムトセルの解約
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, "");
			}else if(JKKHakkoSODConstCC.OP_SVC_CD_FMTCEL.equals(cur_op_svc_kei.get("op_hktgi_op_svc_cd"))
					&& "1".equals(fmtclDslYksFlg)){
				//フェムトセルの解約抑止
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			}else{
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_op_svc_kei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			}
			// ANK-2286-00-00 2014/10/16 mod end
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

			/** 住所変更明細更新情報（オプションサービス契約） */
			// ・EKK2101C010 住所変更明細更新
			reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			mapper.getEKK2101C010(param, fixedText, resMap);
			mapper.scResultCheck(param);
		}

		// ANK-2056-00-00 2014/04/28 start
		/** 住所変更明細更新情報（電話オプションパック） 生成 */
		// 住所変更明細情報リスト（電話オプションパック）を抽出
		ArrayList<HashMap<String, Object>> op_pac_list = (ArrayList<HashMap<String, Object>>)paramMap.get("adchg_dtl_list_op_pac");

		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO) );
		condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_TEL_OP_PACK );
		reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		ArrayList<HashMap<String, Object>> kk2101_b001_listP = mapper.getEKK2101B001( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		/** 住所変更明細情報リスト（電話オプションパック）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> op_pac_list_ite = op_pac_list.iterator();
		while(op_pac_list_ite.hasNext()) {
			HashMap<String, Object> cur_op_pac = op_pac_list_ite.next();
			
			String chbf_skbt_no = (String)cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO);
			String chaf_skbt_no = (String) cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO);
			boolean regFlg = true;
			for(int i=0; i<kk2101_b001_listP.size(); i++){
				HashMap<String, Object> kk2101_b001_map = kk2101_b001_listP.get(0);
				if((!StringUtils.isEmpty(chbf_skbt_no) && chbf_skbt_no.equals(kk2101_b001_map.get("chbf_skbt_no")))
					||(!StringUtils.isEmpty(chaf_skbt_no) && chaf_skbt_no.equals(kk2101_b001_map.get("chaf_skbt_no")))){
					regFlg = false; //住所変更明細にあるので登録しない（更新する）
				}
			}
			
			// 住所変更明細が設定されていない場合は登録
			if(regFlg) {
				
				/** 住所変更明細登録情報（電話オプションパック） 生成 */
				addMap = new HashMap<String, Object>();
				addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_TEL_OP_PACK);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, chbf_skbt_no);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, chaf_skbt_no);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

				reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				HashMap<String, Object> kk2101_d010_map_op_svc_kei = mapper.getEKK2101D010(param, fixedText, resMap);
				mapper.scResultCheck(param);

				// 払い出された住所変更明細番号をparamへ設定
				cur_op_pac.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_op_svc_kei.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
				
				continue;
			}
			
//更新は無い想定
//			/** 住所変更明細登録情報（電話オプションパック） 生成 */
//			updMap = new HashMap<String, Object>();
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_OP_SVC_KEI_NO);
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_op_pac.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
//			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
//			updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));
//			
//			/** 住所変更明細更新情報（電話オプションパック） */
//			// ・EKK2101C010 住所変更明細更新
//			reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
//			resMap = scCall.run(reqMap, keepSesHandle.get());
//			mapper.getEKK2101C010(param, fixedText, resMap);
//			mapper.scResultCheck(param);
		}
		// ANK-2056-00-00 2014/04/28 end

// OM-2013-0005404対応 20140103 星野 ADD START
		ArrayList<HashMap<String, Object>> adchgDtlListSeiKei = (ArrayList<HashMap<String, Object>>)paramMap.get("adchg_dtl_list_sei_kei");
		if(adchgDtlListSeiKei != null && !adchgDtlListSeiKei.isEmpty()){
			for(HashMap<String, Object> adchgDtlMapSeiKei : adchgDtlListSeiKei){
				// 住所変更明細
				updMap = new HashMap<String, Object>();
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SEI_KEI_NO);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM));
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));
		
				/** 住所変更明細更新（請求契約） */
				// ・EKK2101C010  住所変更明細更新
				reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				mapper.getEKK2101C010(param, fixedText, resMap);
				mapper.scResultCheck(param);
			}
		}else{
// OM-2013-0005404対応 20140103 星野 ADD END
			
			/** 住所変更明細更新情報（請求契約） 生成 */
			// 住所変更明細情報（請求契約）マップの取得
			HashMap<String, Object> adchgDtlMapSeiKei = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_MAP_SEI_KEI);
			
			// 住所変更明細
			updMap = new HashMap<String, Object>();
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_SEI_KEI_NO);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, adchgDtlMapSeiKei.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
			updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));
	
			/** 住所変更明細更新（請求契約） */
			// ・EKK2101C010  住所変更明細更新
			reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			mapper.getEKK2101C010(param, fixedText, resMap);
			mapper.scResultCheck(param);
		
// OM-2013-0005404対応 20140103 星野 ADD START
		}
// OM-2013-0005404対応 20140103 星野 ADD END


		/** 住所変更明細登録情報（工事案件番号） 生成 */
		// 住所変更明細情報（工事案件番号）マップの取得
		ArrayList<HashMap<String, Object>> kojiak_list = (ArrayList<HashMap<String, Object>>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_KOJIAK);

		/** 住所変更明細情報リスト（工事案件番号）の件数分、住所変更明細情報を作成 */
		Iterator<HashMap<String, Object>> kojiak_list_ite = kojiak_list.iterator();
		while( kojiak_list_ite.hasNext() ){

			HashMap<String, Object> cur_kojiak = kojiak_list_ite.next();

			// 住所変更明細番号がない場合、新規作成
			if (StringUtils.isEmpty((String)cur_kojiak.get( JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO ))) {
				
				// 住所変更明細
				addMap = new HashMap<String, Object>();
				addMap.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KOJI_ANKN_NO);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_TKKJ_KOJIAK_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_SINSETSU_KOJIAK_NO));
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				addMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);
				addMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM).toString());

				/** 住所変更明細登録（工事案件） */
				// ・EKK2101D010  住所変更明細登録
				reqMap = mapper.setEKK2101D010(param, fixedText, addMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				HashMap<String, Object> kk2101_d010_map_kojiak = mapper.getEKK2101D010(param, fixedText, resMap);
				mapper.scResultCheck(param);

				// 払い出された住所変更明細番号をparamへ設定
				cur_kojiak.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_d010_map_kojiak.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
				continue;
			}
			
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO) );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KOJI_ANKN_NO );
			condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_NO, (String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
			reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001( param, fixedText, resMap );
			mapper.scResultCheck( param );
			if(kk2101_b001_list != null && !kk2101_b001_list.isEmpty()){
				HashMap<String, Object> kk2101_b001_map = kk2101_b001_list.get(0);
				
				// 住所変更明細
				updMap = new HashMap<String, Object>();
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
// IT2-2013-0000582 2013/07/03 START
				if (StringUtils.isEmpty((String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO))) {
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_NO));
				} else {
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, (String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO));
				}
// IT2-2013-0000582 2013/07/03 END
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KOJI_ANKN_NO);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
// IT2-2013-0000582 2013/07/03 START
				if (StringUtils.isEmpty((String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_TKKJ_KOJIAK_NO))) {
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO));
				} else {
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_TKKJ_KOJIAK_NO));
				}
				
				if (StringUtils.isEmpty((String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_SINSETSU_KOJIAK_NO))) {
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO));
				} else {
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String)cur_kojiak.get(JKKAdchgConstCC.PARAM_KEY_SINSETSU_KOJIAK_NO));
				}
// IT2-2013-0000582 2013/07/03 END
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
				updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);			
				updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));
		
				/** 住所変更明細更新（工事案件） */
				// ・EKK2101C010  住所変更明細更新
				reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
				resMap = scCall.run(reqMap, keepSesHandle.get());
				mapper.getEKK2101C010(param, fixedText, resMap);
				mapper.scResultCheck(param);
			}
		}
		
		
// IT1-2012-0002477対応 星野 ADD START
		/** 住所変更明細スキーマデータの取得（解約/入居予定日） */
		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO) );
		condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_DSL_NYUKYO_YMD );
		reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001( param, fixedText, resMap );
		mapper.scResultCheck( param );
		if(kk2101_b001_list != null && !kk2101_b001_list.isEmpty()){
			HashMap<String, Object> kk2101_b001_map = kk2101_b001_list.get(0);
			// 住所変更明細
			updMap = new HashMap<String, Object>();
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_NO));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_DSL_NYUKYO_YMD);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, (String) paramMap.get("dsl_kibo_ymd"));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, (String) paramMap.get("nyukyo_rsv_ymd"));
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);			
			updMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, kk2101_b001_map.get(EKK2101B001CBSMsg1List.LAST_UPD_DTM));
	
			/** 住所変更明細更新（解約/入居予定日） */
			// ・EKK2101C010  住所変更明細更新
			reqMap = mapper.setEKK2101C010(param, fixedText, updMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			mapper.getEKK2101C010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
		}
// IT1-2012-0002477対応 星野 ADD END

// ANK-1578-00-00 2014.01.21 T.TORIKAI ADD START（IT1-2014-0000040）
		// 住所変更明細（機器オプション）更新
		modifyAdchgDtlKkopSvcKei(param, fixedText, paramMap);
// ANK-1578-00-00 2014.01.21 T.TORIKAI ADD END  （IT1-2014-0000040）
	}
	
	/**
	 * 仮登録情報削除処理.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void delKrInf(IRequestParameterReadWrite param, String fixedText) throws Exception {

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
		HashMap<String, Object> delMap;
		Map<?, ?> resMap;

		// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
	
		// 住所変更情報マップの取得
		HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);

		/** 住所変更申込STB一時保存論理削除情報 生成 */
		// 住所変更申込STB一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込STB一時保存 */
		// ・EKK1931E010  住所変更申込STB一時保存論理削除
		reqMap = mapper.setEKK1931E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK1931E010(param, fixedText, resMap);		
		mapper.scResultCheck(param);


		/** 住所変更申込VA一時保存論理削除 生成 */
		// 住所変更申込VA一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込VA一時保存 */
		// ・EKK1941E010  住所変更申込VA一時保存論理削除
		reqMap = mapper.setEKK1941E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK1941E010(param, fixedText, resMap);
		mapper.scResultCheck(param);


		/** 住所変更申込電話番号一時保存論理削除 生成 */
		// 住所変更申込電話番号一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID ));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込電話番号一時保存 */
		// ・EKK1951E010 住所変更申込電話番号一時保存論理削除
		reqMap = mapper.setEKK1951E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK1951E010(param, fixedText, resMap);
		mapper.scResultCheck(param);


		/** 住所変更申込送付先一時保存論理削除 生成 */
		// 住所変更申込送付先一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込送付先一時保存 */
		// ・EKK1961E010 住所変更申込送付先一時保存論理削除
		reqMap = mapper.setEKK1961E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK1961E010(param, fixedText, resMap);
		mapper.scResultCheck(param);


		/** 住所変更申込利用機器一時保存論理削除 生成 */
		// 住所変更申込利用機器一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込利用機器一時保存 */
		// ・EKK2021E010 住所変更申込利用機器一時保存論理削除
		reqMap = mapper.setEKK2021E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK2021E010(param, fixedText, resMap);
		mapper.scResultCheck(param);


		/** 住所変更申込オプション一時保存論理削除 生成 */
		// 住所変更申込オプション一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込オプション一時保存 */
		// ・EKK2031E010 住所変更申込オプション一時保存論理削除
		reqMap = mapper.setEKK2031E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK2031E010(param, fixedText, resMap);
		mapper.scResultCheck(param);


		/** 住所変更申込一時保存論理削除 生成 */
		// 住所変更申込一時保存
		delMap = new HashMap<String, Object>();
		delMap.put(JKKAdchgConstCC.PARAM_KEY_SYSID, (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_SYSID));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHTPPV_NO));
		delMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF, (String) adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_TPPV_UPD_DTM_BEF));

		/** 住所変更申込一時保存 */
		// ・EKK2011E010 住所変更申込一時保存論理削除
		reqMap = mapper.setEKK2011E010(param, fixedText, delMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK2011E010(param, fixedText, resMap);
		mapper.scResultCheck(param);

	}

// ANK-1668-00-00 2013.11.12 Y.Kanata ADD START
	/**
	 * 本登録情報の修正時サービスの解約を行った場合の住所変更明細レコード削除
	 * <br>
	 * @param   handle
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	public IRequestParameterReadWrite adchgHonCmtAfterFix( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
		try {
			/** リソース保持 */
			keepSesHandle.set(handle);

			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
			if (paramMap == null || paramMap.isEmpty()) {
				return param;
			}

			// 住所変更明細取得
			String adchgNo = (String) paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO);
			ArrayList<HashMap<String, Object>> listEKK2101B001 = getEKK2101B001(param, fixedText, adchgNo);
			if (listEKK2101B001 == null || listEKK2101B001.isEmpty()) {
				return param;
			}
			
// ANK-1665-00-00 2014.01.07 Y.Kanata ADD START
// 番号解約の場合の住変明細論理削除処理
			String netSvcKeiNo = (String)paramMap.get("net_svc_kei_no");
			String telSvcKeiNo = (String)paramMap.get("tel_svc_kei_no");
			String tvSvcKeiNo = (String)paramMap.get("tv_svc_kei_no");
			String dslFlgTelNo1 = (String)paramMap.get("dsl_flg_tel_no_1");
			String dslFlgTelNo2 = (String)paramMap.get("dsl_flg_tel_no_2");
			if (telSvcKeiNo == null &&
					( "1".equals(dslFlgTelNo1)
						|| "1".equals(dslFlgTelNo2) )) {
				// 住所変更明細論理削除（サービス契約内訳）番号解約用
				delTelNoSvcKeiUcwkOfAdchgDtl(param, fixedText, listEKK2101B001);
			}
// OM-2014-0001071対応 20140320 星野 ADD START
// 機器はサービス追加キャンセル以外でも消えることがあるので下から移動
			// 住所変更明細論理削除（機器提供サービス契約）
			delKktkSvcKeiOfAdchgDtl(param, fixedText, listEKK2101B001);
// OM-2014-0001071対応 20140320 星野 ADD END
			// ANK-2056-00-00 2014/04/28 start
			// 住所変更明細論理削除（電話オプションパック）
			delTelOpPackOfAdchgDtl(param, fixedText, listEKK2101B001);
			// ANK-2056-00-00 2014/04/28 end
			
			// サービス追加の取消ではない場合は終了
			if (netSvcKeiNo == null 
					&& telSvcKeiNo == null 
					&& tvSvcKeiNo == null) {
				return param;
			}
// ANK-1665-00-00 2014.01.07 Y.Kanata ADD END

			// 住所変更明細論理削除（サービス契約）
			delSvcKeiOfAdchgDtl(param, fixedText, listEKK2101B001);
			// 住所変更明細論理削除（サービス契約内訳）
			delSvcKeiUcwkOfAdchgDtl(param, fixedText, listEKK2101B001);
// OM-2014-0001071対応 20140320 星野 DEL START
// 機器はサービス追加キャンセル以外でも消えることがあるので上に移動
//			// 住所変更明細論理削除（機器提供サービス契約）
//			delKktkSvcKeiOfAdchgDtl(param, fixedText, listEKK2101B001);
// OM-2014-0001071対応 20140320 星野 DEL END
			// 住所変更明細論理削除（工事案件）
			delKojiAnkenOfAdchgDtl(param, fixedText, listEKK2101B001);
			
			return param;

		} finally {
			if(keepSesHandle.get() != null) {
				keepSesHandle.remove();
			}
		}
	}
	
	/**
	 * 住所変更明細論理削除（サービス契約）.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void delSvcKeiOfAdchgDtl(IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap<String, Object>> kk2101_b001_list) throws Exception
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		String netSvcKeiNo = (String)paramMap.get("net_svc_kei_no");
		String telSvcKeiNo = (String)paramMap.get("tel_svc_kei_no");
		String tvSvcKeiNo = (String)paramMap.get("tv_svc_kei_no");

		for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
			// 住所変更明細種別コード
			String sbtCd = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
			if (!JKKAdchgConstCC.CD01241_SVC_KEI_NO.equals(sbtCd)) {
				continue;		// 対象外（サービス契約ではない）
			}
			// 変更前後の識別番号
			String before = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
			String after = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
			if (!StringUtils.isEmpty(before) || StringUtils.isEmpty(after)) {
				continue;		// 対象外（サービス追加の取消ではない）
			}
			// 転居先
			if (!after.equals(netSvcKeiNo) && !after.equals(telSvcKeiNo) && !after.equals(tvSvcKeiNo)) {
				continue;		// 対象外（取消されたサービス契約ではない）
			}
			// 住所変更明細論理削除
			delEKK2101E010(param, fixedText, kk2101_b001_map);
		}
	}

	/**
	 * 住所変更明細論理削除（サービス契約内訳）.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void delSvcKeiUcwkOfAdchgDtl(IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap<String, Object>> kk2101_b001_list) throws Exception
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		String netSvcKeiNo = (String)paramMap.get("net_svc_kei_no");
		String telSvcKeiNo = (String)paramMap.get("tel_svc_kei_no");
		String tvSvcKeiNo = (String)paramMap.get("tv_svc_kei_no");

		// 削除対象のサービス契約内訳を取得
		ArrayList<String> listSvcKeiUcwk = new ArrayList<String>();
		// ネット
		getSvcKeiUcwkNo(listSvcKeiUcwk, param, fixedText, netSvcKeiNo);
		// 電話
		getSvcKeiUcwkNo(listSvcKeiUcwk, param, fixedText, telSvcKeiNo);
		// テレビ
		getSvcKeiUcwkNo(listSvcKeiUcwk, param, fixedText, tvSvcKeiNo);

		if (listSvcKeiUcwk.isEmpty()) {
			return;		// 削除対象なし
		}

		for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
			// 住所変更明細種別コード
			String sbtCd = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
			if (!JKKAdchgConstCC.CD01241_SVC_KEI_UCWK_NO.equals(sbtCd)) {
				continue;		// 対象外（サービス契約内訳ではない）
			}
			// 変更前後の識別番号
			String before = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
			String after = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
			if (!StringUtils.isEmpty(before) || StringUtils.isEmpty(after)) {
				continue;		// 対象外（サービス追加の取消ではない）
			}
			// サービス契約内訳番号
			if (listSvcKeiUcwk.indexOf(after) == -1) {
				continue;		// 対象外（取消されたサービス契約の内訳ではない）
			}
			// 住所変更明細論理削除
			delEKK2101E010(param, fixedText, kk2101_b001_map);
		}
	}

	/**
	 * サービス契約内訳番号を取得する
	 * @param listSvcKeiUcwk
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @throws Exception 
	 */
	private void getSvcKeiUcwkNo(ArrayList<String> listSvcKeiUcwk, IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws Exception
	{
		if (StringUtils.isEmpty(svcKeiNo)) {
			return;
		}

		ArrayList<HashMap<String, Object>> listEKK0161B004 = getEKK0161B004(param, fixedText, svcKeiNo);
		if (listEKK0161B004 == null || listEKK0161B004.isEmpty()) {
			return;
		}

		for (HashMap<String, Object> mapEKK0161B004 : listEKK0161B004) {
			String svcKeiUcwk = (String)mapEKK0161B004.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			listSvcKeiUcwk.add(svcKeiUcwk);
		}
	}

	/**
	 * 住所変更明細論理削除（機器提供サービス契約）.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void delKktkSvcKeiOfAdchgDtl( IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap<String, Object>> kk2101_b001_list ) throws Exception
	{
		for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
			// 住所変更明細種別コード
			String sbtCd = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
			if (!JKKAdchgConstCC.CD01241_KKTK_SVC_KEI_NO.equals(sbtCd)) {
				continue;		// 対象外（機器提供サービス契約ではない）
			}

			// 変更前後の識別番号
			String before = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
			String after = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
			if (!StringUtils.isEmpty(before) || StringUtils.isEmpty(after)) {
				continue;		// 対象外（サービス追加の取消ではない）
			}

			// 機器提供サービス契約
			String kktkSvcKeiNo = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO);
			ArrayList<HashMap<String, Object>> listEKK0341B032 = getEKK0341B032(param, fixedText, kktkSvcKeiNo);
			if (listEKK0341B032 != null && !listEKK0341B032.isEmpty()) {
				// 予約を含めた最新レコードのステータスをチェック
				HashMap<String, Object> mapEKK0341B032 = listEKK0341B032.get(0);
				String stat = (String)mapEKK0341B032.get(EKK0341B032CBSMsg1List.KKTK_SVC_KEI_STAT);
				if (stat.compareTo("900") < 0) {
					continue;	// 対象外（解約、キャンセルされていない）
				}
			}

			// 住所変更明細論理削除
			delEKK2101E010(param, fixedText, kk2101_b001_map);
		}
	}

	/**
	 * 住所変更明細論理削除（工事案件）.
	 * <br>
	 * @param   handle
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void delKojiAnkenOfAdchgDtl(IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap<String, Object>> kk2101_b001_list ) throws Exception
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		String ipKojiAkNo = (String)paramMap.get("ip_kojiak_no");
		String tvKojiAkNo = (String)paramMap.get("tv_kojiak_no");
		String netSvcUm =  (String)paramMap.get("net_svc_um");
		String telSvcUm =  (String)paramMap.get("tel_svc_um");
		String tvSvcUm =  (String)paramMap.get("tv_svc_um");

		for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
			// 住所変更明細種別コード
			String sbtCd = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
			if (!JKKAdchgConstCC.CD01241_KOJI_ANKN_NO.equals(sbtCd)) {
				continue;		// 対象外（工事案件ではない）
			}

			// 変更前後の識別番号
			String before = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
			String after = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);

			// 撤去、新設とも工事案件がない場合は論理削除
			if (StringUtils.isEmpty(before) && StringUtils.isEmpty(after)) {
				delEKK2101E010(param, fixedText, kk2101_b001_map);
				continue;
			}

			// 新設工事
			if (StringUtils.isEmpty(after)) {
				continue;		// 対象外（新設工事なし）
			}
			// ネット・電話
			if (after.equals(ipKojiAkNo)) {
				if ("1".equals(netSvcUm) || "1".equals(telSvcUm)) {
					continue;	// 転居先に ネット or 電話 あり
				}
			}
			// テレビ
			if (after.equals(tvKojiAkNo)) {
				if ("1".equals(tvSvcUm)) {
					continue;	// 転居先に テレビ あり
				}
			}

			if (StringUtils.isEmpty(before)) {
				// 撤去工事はないので論理削除
				delEKK2101E010(param, fixedText, kk2101_b001_map);
			} else {
				// 撤去工事が存在するので、新設工事のみクリア更新
				kk2101_b001_map.put(EKK2101B001CBSMsg1List.CHAF_SKBT_NO, null);
				updEKK2101C010(param, fixedText, kk2101_b001_map);
			}
		}
	}

	// ANK-2056-00-00 2014/04/28 start
	/**
	 * 住所変更明細論理削除（電話オプションパック）.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	private void delTelOpPackOfAdchgDtl( IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap<String, Object>> kk2101_b001_list ) throws Exception
	{
		for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
			// 住所変更明細種別コード
			String sbtCd = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
			if (!JKKAdchgConstCC.CD01241_TEL_OP_PACK.equals(sbtCd)) {
				continue;		// 対象外（電話オプションパックではない）
			}

			// 変更前後の識別番号
			String before = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);
			String after = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
			if (!StringUtils.isEmpty(before) || StringUtils.isEmpty(after)) {
				continue;		// 対象外（サービス追加の取消ではない）
			}

			// 電話オプションパック
//			String kktkSvcKeiNo = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO);
			 HashMap<String, Object> mapEKK0451A010 = getEKK0451A010(param, fixedText, after);
			if (mapEKK0451A010 != null) {
				// 予約を含めた最新レコードのステータスをチェック
				String stat = (String)mapEKK0451A010.get(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT);
				if (stat.compareTo("900") < 0) {
					continue;	// 対象外（解約、キャンセルされていない）
				}
			}

			// 住所変更明細論理削除
			delEKK2101E010(param, fixedText, kk2101_b001_map);
		}
	}
	// ANK-2056-00-00 2014/04/28 end
	
	/**
	 * 住所変更明細一覧照会
	 * 
	 * @param param
	 * @param fixedText
	 * @param adchgNo
	 * @return
	 * @throws Exception
	 */
	private ArrayList<HashMap<String, Object>> getEKK2101B001(IRequestParameterReadWrite param, String fixedText, String adchgNo) throws Exception
	{
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// EKK2101B001 住所変更明細一覧照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_ADCHG_NO, adchgNo);
		HashMap<String, Object> reqMap = mapper.setEKK2101B001(param, fixedText, condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> listEKK2101B001 = mapper.getEKK2101B001(param, fixedText, resMap);
		mapper.scResultCheck(param);

		return listEKK2101B001;
	}

	/**
	 * 機器提供サービス契約一覧照会<br>
	 * 予約を含めた一覧を取得
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @return
	 * @throws Exception
	 */
	private ArrayList<HashMap<String, Object>> getEKK0341B032(IRequestParameterReadWrite param, String fixedText, String kktkSvcKeiNo) throws Exception
	{
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// EKK0341B032 機器提供サービス契約一覧照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKStrConst.END_YMD_DEFAULT);
		HashMap<String, Object> reqMap = mapper.setEKK0341B032(param, fixedText, condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> listEKK0341B032 = mapper.getEKK0341B032(param, fixedText, resMap);
		mapper.scResultCheck(param);

		return listEKK0341B032;
	}

	/**
	 * サービス契約内訳一覧照会
	 * 
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @return
	 * @throws Exception
	 */
	private ArrayList<HashMap<String, Object>> getEKK0161B004(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws Exception
	{
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// EKK0161B004 サービス契約内訳一覧照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo);
		HashMap<String, Object> reqMap = mapper.setEKK0161B004(param, fixedText, condMap, JPCModelConstant.FUNC_CD_3);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> listEKK0161B004 = mapper.getEKK0161B004(param, fixedText, resMap);
		mapper.scResultCheck(param);

		return listEKK0161B004;
	}

	/**
	 * 住所変更明細論理削除
	 * 
	 * @param param
	 * @param fixedText
	 * @param kk2101_b001_map
	 * @throws Exception
	 */
	private void delEKK2101E010(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> kk2101_b001_map) throws Exception
	{
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 住所変更明細
		HashMap<String, Object> condMap = new HashMap<String, Object>();
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_NO));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_NO));
		condMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, kk2101_b001_map.get(EKK2101B001CBSMsg1List.UPD_DTM));
		HashMap<String, Object> reqMap = mapper.setEKK2101E010(param, fixedText, condMap);
	
		// EKK2101E010  住所変更明細論理削除
		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK2101E010(param, fixedText, resMap);
		mapper.scResultCheck(param);
	}

	/**
	 * 住所変更明細更新
	 * 
	 * @param param
	 * @param fixedText
	 * @param kk2101_b001_map
	 * @throws Exception
	 */
	private void updEKK2101C010(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> kk2101_b001_map) throws Exception
	{
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// 住所変更明細
		HashMap<String, Object> condMap = new HashMap<String, Object>();
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO				, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_NO));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_DTL_NO		, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_NO));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD				, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO		, kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO		, kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO		, kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD	, kk2101_b001_map.get(EKK2101B001CBSMsg1List.SVC_KEI_IDO_SBT_CD));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM		, kk2101_b001_map.get(EKK2101B001CBSMsg1List.SKS_SHS_CHG_UM));
		condMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO	, kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_WORK_RRK_BIKO));
		condMap.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM					, kk2101_b001_map.get(EKK2101B001CBSMsg1List.UPD_DTM));
		HashMap<String, Object> reqMap = mapper.setEKK2101C010(param, fixedText, condMap);

		// EKK2101C010  住所変更明細更新
		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK2101C010(param, fixedText, resMap);
		mapper.scResultCheck(param);
	}

// ANK-1668-00-00 2013.11.12 Y.Kanata ADD END

// ANK-1578-00-00 2013.12.06 T.TORIKAI メソッド追加
	/**
	 * 住所変更明細へ機器オプションの情報を登録する
	 * 
	 * @param param
	 * @param fixedText
	 * @param paramMap
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD START（IT1-2014-0000040）
//	private void appendAdchgDtlKkopSvcKei(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap) throws Exception {
	private void appendAdchgDtlKkopSvcKei(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap, boolean modeIsAddCmt) throws Exception {
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD END  （IT1-2014-0000040）

		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);
// ANK-1578-00-00 2014.01.24 T.TORIKAI ADD START（IT1-2014-0000040）
		String adchgNo = (String)adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO);
		if (modeIsAddCmt) {
			adchgNo = (String)adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO);
		}
// ANK-1578-00-00 2014.01.24 T.TORIKAI ADD END  （IT1-2014-0000040）
		
		// 機器オプションの一覧取得
		ArrayList<HashMap<String, Object>> kkopList = (ArrayList<HashMap<String, Object>>)paramMap.get("adchg_dtl_list_kkop_svc_kei");
// ANK-1578-00-00 2014.01.24 T.TORIKAI ADD START（IT1-2014-0000040）
		if (kkopList == null) {
			return;
		}
// ANK-1578-00-00 2014.01.24 T.TORIKAI ADD END  （IT1-2014-0000040）
		for (HashMap<String, Object> kkopMap : kkopList) {
			
			HashMap<String, Object> adchgDtl = new HashMap<String, Object>();

// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD START（IT1-2014-0000040）
//			adchgDtl.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO));
			adchgDtl.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, adchgNo);
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD END  （IT1-2014-0000040）
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_KKOP_SVC_KEI);
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, kkopMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO));
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, kkopMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO));
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, kkopMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO));
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);			
			adchgDtl.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));

			HashMap<String, Object> reqMap = mapper.setEKK2101D010(param, fixedText, adchgDtl);

			// EKK2101D010  住所変更明細登録
			Map<?, ? >resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> mapEKK2101D010 = mapper.getEKK2101D010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			// 払い出された住所変更明細番号を上書き（過去の名残で現状は未使用）
			paramMap.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, mapEKK2101D010.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
		}
	}
	
// ANK-1665-00-00 2014.01.07 Y.Kanata ADD START
	/**
	 * 住所変更明細論理削除（サービス契約内訳）番号解約用.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private void delTelNoSvcKeiUcwkOfAdchgDtl(IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap<String, Object>> kk2101_b001_list) throws Exception
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		// 解約のチェックが入っている電話の変更後サービス契約内訳番号を取得
		String dslFlgTelNo1 = (String)paramMap.get("dsl_flg_tel_no_1");
		String dslFlgTelNo2 = (String)paramMap.get("dsl_flg_tel_no_2");
		String tgtSvcKeiUcwkNo = null;
		if ("1".equals(dslFlgTelNo1)) {
			tgtSvcKeiUcwkNo = (String)paramMap.get("svc_kei_ucwk_no_1");
		} else if ("1".equals(dslFlgTelNo2)) {
			tgtSvcKeiUcwkNo = (String)paramMap.get("svc_kei_ucwk_no_2");
		}
		if (StringUtils.isEmpty(tgtSvcKeiUcwkNo)) {
			return;
		}

		// 番号解約対象の変更後サービス契約内訳番号を変更後識別番号に持つ住所変更明細を論理削除
		for (HashMap<String, Object> kk2101_b001_map : kk2101_b001_list) {
			// 住所変更明細種別コード
			String sbtCd = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
			if (!JKKAdchgConstCC.CD01241_SVC_KEI_UCWK_NO.equals(sbtCd)) {
				continue;		// 対象外（サービス契約内訳ではない）
			}
			// 変更後の識別番号
			String after = (String)kk2101_b001_map.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);
			if (!tgtSvcKeiUcwkNo.equals(after)) {
				continue;		// 対象外（対象の内訳番号が変更後識別番号に一致しない）
			}
			// 住所変更明細論理削除
			delEKK2101E010(param, fixedText, kk2101_b001_map);
		}
	}
// ANK-1665-00-00 2014.01.07 Y.Kanata ADD END

// ANK-1578-00-00 2014.01.24 T.TORIKAI メソッド追加（IT1-2014-0000040）
	/**
	 * 住所変更明細（機器オプションサービス契約）更新
	 * 
	 * @param param
	 * @param fixedText
	 * @param paramMap
	 * @throws Exception
	 */
	private void modifyAdchgDtlKkopSvcKei(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap) throws Exception {

		// 住所変更番号
		HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);
		String adchgNo = (String)adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO);

		// 住所変更明細より機器オプションレコードを論理削除
		ArrayList<HashMap<String, Object>> listEKK2101B001 = getEKK2101B001(param, fixedText, adchgNo);
		if (listEKK2101B001 != null) {
			for (HashMap<String, Object> mapEKK2101B001 : listEKK2101B001) {
				String adchgDtlSbtCd = (String)mapEKK2101B001.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD);
				if (!JKKAdchgConstCC.CD01241_KKOP_SVC_KEI.equals(adchgDtlSbtCd)) {
					continue;
				}
				// 住所変更明細論理削除
				delEKK2101E010(param, fixedText, mapEKK2101B001);
			}
		}

		// 住所変更明細へ機器オプション情報を追加
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD START（IT1-2014-0000040）
//		appendAdchgDtlKkopSvcKei(param, fixedText, paramMap);
		appendAdchgDtlKkopSvcKei(param, fixedText, paramMap, false);
// ANK-1578-00-00 2014.01.24 T.TORIKAI MOD END  （IT1-2014-0000040）
	}
	
	
	// ANK-2056-00-00 2014/04/28 start
	/**
	 * 割引サービス契約一意照会
	 * 
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @return
	 * @throws Exception
	 */
	private HashMap<String, Object> getEKK0451A010(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws Exception
	{
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// EKK0451A010 サービス契約内訳一覧照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_WRIB_SVC_KEI_NO, svcKeiNo);
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
		HashMap<String, Object> reqMap = mapper.setEKK0451A010(param, fixedText, condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> mapEKK0451A010 = mapper.getEKK0451A010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		return mapEKK0451A010;
	}
	// ANK-2056-00-00 2014/04/28 end
// OM-2014-0001576対応 20140603 星野 ADD START
	/**
	 * 住所変更確定処理.
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite adchgInfoFix(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

		try {

			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
			
			// 本登録処理
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			HashMap<String, Object> reqMap;
			HashMap<String, String> condMap = new HashMap<String, String>();
			Map<?, ?> resMap;

			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			
			if(paramMap==null){
				return param;
			}

			// 住所変更番号の取得
			String adchgNo = (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO);
			// 住所変更番号入力判定
			if(!StringUtils.isEmpty(adchgNo)) {
				
				HashMap kk2091a010Map = callEKK2091A010SC(param, adchgNo, "1");
				if(kk2091a010Map!=null && !kk2091a010Map.isEmpty() && "001".equals(kk2091a010Map.get(EKK2091A010CBSMsg1List.ADCHG_STAT))){
					
					// 住所変更
					HashMap<String, Object> updMap = new HashMap<String, Object>();
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO, adchgNo);
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_MSKM_NO, kk2091a010Map.get(EKK2091A010CBSMsg1List.MSKM_NO));
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITNM_SYKEI_KISUW_NO, kk2091a010Map.get(EKK2091A010CBSMsg1List.ITNM_SVKEI_KISUW_NO));
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_ITENS_SVKEI_KISUW_NO, kk2091a010Map.get(EKK2091A010CBSMsg1List.ITENS_SVKEI_KISUW_NO));
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_IDO_DIV, "00020");
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_AD_SWITCH_WAY_CD, kk2091a010Map.get(EKK2091A010CBSMsg1List.AD_SWITCH_WAY_CD));
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_KSNAD_CHG_UM, kk2091a010Map.get(EKK2091A010CBSMsg1List.KSHAD_CHG_UM));
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_GUIDEMG_SHS_CHG_UM, kk2091a010Map.get(EKK2091A010CBSMsg1List.GUIDEMG_SHS_CHG_UM));
					updMap.put(EKK2091C010CBSMsg.ADCHG_STAT, "003");
					updMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM_BEF, kk2091a010Map.get(EKK2091A010CBSMsg1List.UPD_DTM));
					//ANK-3731-00-00 ADD START
					updMap.put(JKKAdchgConstCC.PARAM_KEY_MANS_HHS_SWCH_FLG, kk2091a010Map.get(EKK2091A010CBSMsg1List.MANS_HHS_SWCH_FLG));
					//ANK-3731-00-00 ADD END
					//ANK-4245-00-00 ADD START
					updMap.put(JKKAdchgConstCC.USE_STP_STA_YMD, kk2091a010Map.get(EKK2091A010CBSMsg1List.USE_STP_STA_YMD));
					//ANK-4245-00-00 ADD END
	
					/** 住所変更更新 */
					// ・EKK2091C010  住所変更更新
					reqMap = mapper.setEKK2091C010(param, fixedText, updMap);
					resMap = scCall.run(reqMap, keepSesHandle.get());
					HashMap<String, Object> kk2091_c010_map = mapper.getEKK2091C010(param, fixedText, resMap);
					mapper.scResultCheck(param);
				}

			}

			
		} finally {

			if(keepSesHandle.get() != null) {
				keepSesHandle.remove();
			}
		}

		return param;
	}
	
	/**
	 * 住所変更一意照会SIFを呼び出し
	 * @param param			リクエストパラメータ
	 * @param adchgNo		住所変更番号
	 * @param resultMap		結果格納先
	 * @return サービスインターフェースのリターンコード
	 * @throws Exception
	 */
	private HashMap callEKK2091A010SC(IRequestParameterReadWrite param, String adchgNo, String funcCode) throws Exception
	{
		// EKK2091A010への呼び出しパラメータ設定
		CAANMsg template = new CAANMsg(EKK2091A010CBSMsg.class.getName());
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2091A010CBSMsg().getContents());
		// テンプレートID(SIFのID)
		template.set(EKK2091A010CBSMsg.TEMPLATEID, JKKHakkoSODConstCC.TEMPLATE_ID_EKK2091A010);
		// 機能コード
		template.set(EKK2091A010CBSMsg.FUNC_CODE, funcCode);
		// ＫＥＹ＿住所変更番号
		template.set(EKK2091A010CBSMsg.KEY_ADCHG_NO, adchgNo);
		
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		HashMap<String, Object> sIFRequest = editInMsgCmn(param);
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
		
		// SC呼び出しクラスの生成
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = scCall.run(sIFRequest, keepSesHandle.get());
		
		// 結果の取得
		CAANMsg[] resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// ステータスコードの取得
		int status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		// ステータスが0以外はエラーとなっている
		if (status == 0) {
			if (resultMsgs != null && resultMsgs.length != 0) {
				//結果の取得
				CAANMsg[] msgList = (CAANMsg[])resultMsgs[0].getMsgData().get(EKK2091A010CBSMsg.EKK2091A010CBSMSG1LIST);
				if (msgList != null && msgList.length != 0) {
					return msgList[0].getMsgData();
				}
			}
		}
		
		return null;
	}

	/**
	 * 持ちうるフィールドにNullマッピングで埋める
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		
		//要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			
			Object element = null;
			
			//キーに該当する箇所の取得
			element = contents[i][0];

			//Nullでマッピング
			msg.setNull((String)element);
			
		}
		
	}
	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	private void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		//電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		
		//ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		
		//オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		
		//サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		//依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		
		//依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		
		//依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		
		//オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
				
		return paramMap;
	}
// OM-2014-0001576対応 20140603 星野 ADD END
	// ANK-3149-04-00 ADD START
	/**
	 * 住所変更明細へネットパックの情報を登録する
	 * 
	 * @param param
	 * @param fixedText
	 * @param paramMap
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void appendAdchgDtlNetPack(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> paramMap, boolean modeIsAddCmt) throws Exception {

		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		HashMap<String, Object> adchgMap = (HashMap<String, Object>)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_MAP);
		String adchgNo = (String)adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_ADCHG_NO);
		if (modeIsAddCmt) {
			adchgNo = (String)adchgMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_ADCHG_NO);
		}

		// ネットパック引継フラグが存在しない場合処理終了
		String netPackFlg = (String)paramMap.get(JKKAdchgConstCC.NET_PACK_FLG);
		if (netPackFlg == null) {
			return;
		}
		
		String netPackTrnDiv = JKKStringUtil.nullToBlank((String)paramMap.get(JKKAdchgConstCC.NET_PACK_TRN_DIV));

		HashMap<String, Object> adchgDtl = new HashMap<String, Object>();

		adchgDtl.put(JKKAdchgMapperCC.UPD_DT_NEW_ADCHG_ADCHG_NO, adchgNo);
		adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SBT_CD, JKKAdchgConstCC.CD01241_NET_OP_PACK);
		adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHG_TG_KEI_NO, null);
		adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO, paramMap.get(JKKAdchgConstCC.NET_PACK_WRIB_SVC_KEI_NO));
		//// ｅｏ光ネット＿パック名称＿選択区分が解約の場合 移転先に登録しない
		if (netPackTrnDiv.equals("0")) {
			adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, paramMap.get(JKKAdchgConstCC.NET_PACK_WRIB_SVC_KEI_NO));
		}
		adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SVC_KEI_IDO_SBT_CD, null);
		adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_SKS_SHS_CHG_UM, null);
		adchgDtl.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_ADCHG_WORK_RRK_BIKO, null);			
		adchgDtl.put(JKKAdchgMapperCC.UPD_DT_ADCHG_UPD_DTM, adchgMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_UPD_DTM));
	
		HashMap<String, Object> reqMap = mapper.setEKK2101D010(param, fixedText, adchgDtl);

		// EKK2101D010  住所変更明細登録
		Map<?, ? >resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> mapEKK2101D010 = mapper.getEKK2101D010(param, fixedText, resMap);
		mapper.scResultCheck(param);

		// 払い出された住所変更明細番号を上書き（過去の名残で現状は未使用）
		paramMap.put(JKKAdchgConstCC.PARAM_KEY_NEW_ADCHG_DTL_ADCHG_DTL_NO, mapEKK2101D010.get(EKK2101D010CBSMsg.ADCHG_DTL_NO));
	
	}
	// ANK-3149-04-00 ADD END

}
