/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：住所情報変更 電話番号情報変更コンポーネント部品クラス
 *  ソースファイル名：JKKAdchgTelInfoChgCC.java
 *  作成者          ：FJ
 *  日付            ：2013年11月13日
 *＜機能概要＞
 *  住所変更本登録後の修正において、電話番号の情報を変更する
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2013/11/13  FJ          新規作成
 *  v7.01.00    2014/02/16  星野        OM-2014-0000680対応
 *  v8.00.00    2014/04/29  星野        OM-2014-0001716対応
 *  v9.00.00	2014/04/30  FJ)北谷     ANK-2056-00-00対応
 * v10.00.00    2014/09/17  FJ)北谷     ST-2014-0000153対応
 *  v25.00.00   2016/07/19  FJ)中山     【OM-2016-0000752】消去可否チェックのワーニング対応
 *  v28.00.00   2016/12/12  FJ)中原     【ANK-3021-00-00】電話番号M削除機能抑止対応
 *  v71.00.00	2024/08/20	FJ)舘山     IT1-2024-0000037_HGW残課題
 *  v72.00.00	2024/11/19	FJ)星野    【ANK-4494-00-00】【eo定期】 双方向番ポ対応 STEP2
********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAdInfChgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKAddBmpTaiorrkiConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKCancelBmpkjConst;
import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161C160CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B504CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0011B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0111B040CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0121C010CBSMsg;

/**
 * 住所情報変更 電話番号情報変更コンポーネント部品クラス
 * <br>
 * @author FJ
 */
public class JKKAdchgTelInfoChgCC extends AbstractCommonComponent {

	private static final String KEY_ADCHG_HAKKO_SOD = "hakko_sod_cc_trgt_data";

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>();

	/** リクエストパラメータ保持域 */
	private static ThreadLocal<IRequestParameterReadWrite> keepReqParam = new ThreadLocal<IRequestParameterReadWrite>();

	/** FixedText保持域 */
	private static ThreadLocal<String> keepFixedText = new ThreadLocal<String>();

	/** 住所変更登録コモンコンポーネントマッピングクラスインスタンス */
	private JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

	/** SCリクエストInvoker */
	private ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

// ANK-1664-00-00対応 20131231 星野 ADD START
	/** 電話番号解約ＣＣパラメータキー */
	private static final String KEY_TELNO_INFO_DSL = "telno_info_dsl";
	/** 電話番号追加ＣＣパラメータキー */
	private static final String KEY_TELNO_INFO_ADD = "telno_info_add";
	/** 番ポ工事登録ＣＣパラメータキー */
	private static final String KEY_BMPO_ADD = "bmpo_add";
// ANK-1664-00-00対応 20131231 星野 ADD END
// ANK-1664-00-00対応 20140110 星野 ADD START
	/** 同番移転登録ＣＣパラメータキー */
	private static final String KEY_DOBAN_INFO_ADD = "doban_info_add";
	/** 同番移転取消依頼ＳＣパラメータキー */
	private static final String KEY_DOBAN_INFO_DSL = "doban_info_dsl";
// ANK-1664-00-00対応 20140110 星野 ADD END
// ANK-1664-00-00対応 20140107 星野 ADD START
	/** 移転トーキ情報設定ＣＣパラメータキー */
	private static final String KEY_TELNO_INFO_TOKI = "telno_info_toki";
// ANK-1664-00-00対応 20140107 星野 ADD END
// ANK-1664-00-00対応 20140111 星野 ADD START
	/** ＶＡ紐付け変更ＣＣパラメータキー */
	private static final String KEY_VA_CHG = "va_chg";
// ANK-1664-00-00対応 20140111 星野 ADD END
// IT1-2014-0000040対応 20140124 星野 ADD START
	/** 異動予約取消ＣＣパラメータキー */
	private static final String KEY_IDO_RSV_CNCL = "ido_rsv_cncl";
// IT1-2014-0000040対応 20140124 星野 ADD END


	/** 個人法人電話番号帯コード：法人用  */
	private static final String KOJIN_HOJIN_TLN_TAI_CD_HOJIN = "2";
// ▽▽▽ IT1-2024-0000037 ADD START
	/** 機器OP親機器_宅内機器種別リスト */
	private static final List<String> KIKIOP_OYA_KIKI_TKSBT_LIST = Arrays.asList(new String[]{"R0","S0"});
// △△△ IT1-2024-0000037 ADD END
	/**
	 * 電話番号情報変更
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite telInfoChg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {
		try {
			/** リソース保持 */
			keepSesHandle.set( handle );	// セッションハンドル
			keepReqParam.set( param );		// リクエストパラメータ
			keepFixedText.set( fixedText );	// FixedText

			HashMap<String, Object> parameter = getRequestParameter();
			if (parameter == null || parameter.isEmpty()) {
				return param;
			}
			
// ANK-1664-00-00対応 20140111 星野 ADD START
			// 追加後解約フラグ
			String addAndDslFlg = (String)getRequestParameter().get("addAndDslFlg");
			
			// 追加後解約の場合
			if("1".equals(addAndDslFlg)){
				// 追加を先に処理
				appendSvcKeiUcwk();
				
				// 追加後に解約
				clearSvcKeiUcwk();
				
			// 通常の場合
			}else{
// ANK-1664-00-00対応 20140111 星野 ADD END
				// 電話のサービス契約内訳をクリアする
				clearSvcKeiUcwk();
	
				// 電話サービスの内訳を変更する（同番移転、電番追加・変更後の訂正時 ※内訳番号が変わらない更新）
				modifySvcKeiUcwk();
	
				// 電話サービスの内訳を追加する（番号追加・変更時 ※内訳番号が追加となる更新）
				appendSvcKeiUcwk();
// ANK-1664-00-00対応 20140111 星野 ADD START
			}
// ANK-1664-00-00対応 20140111 星野 ADD END
			
// ANK-1664-00-00対応 20140110 星野 ADD START
// IT1-2014-0000040 2014/01/24 阮 START
			// 同番移転登録
//			addDoban();
			
			// 同番移転取消
//			dslDoban();
// IT1-2014-0000040 2014/01/24 阮 END
// ANK-1664-00-00対応 20140110 星野 ADD END
			
// ANK-1664-00-00対応 20140111 星野 ADD START
			// 電話番号変更分のSOD発行
			sodTelnoChg();
// ANK-1664-00-00対応 20140111 星野 ADD END
			
// IT1-2014-0000040対応 20140124 星野 ADD START
			// 異動予約（コース変更）の更新
			idoRsv();
// IT1-2014-0000040対応 20140124 星野 ADD END
			

			return param;

		} finally {
			/** リソース開放 */
			if (keepSesHandle.get() != null) {
				keepSesHandle.remove();		// セッションハンドル開放
			}
			if (keepReqParam.get() != null) {
				keepReqParam.remove();		// リクエストパラメータ開放
			}
			if (keepFixedText.get() != null) {
				keepFixedText.remove();		// FixedText開放
			}
		}
	}


// ANK-1664-00-00対応 20140107 星野 ADD START
	/**
	 * 電話番号情報変更（トーキ）
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite itenTokiInfoSettei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {
		try {
			/** リソース保持 */
			keepSesHandle.set( handle );	// セッションハンドル
			keepReqParam.set( param );		// リクエストパラメータ
			keepFixedText.set( fixedText );	// FixedText

			HashMap<String, Object> parameter = getRequestParameter();
			if (parameter == null || parameter.isEmpty()) {
				return param;
			}
			
			// トーキの設定を更新する（転居元の内訳に対して）
			setTokiInfo();

			return param;

		} finally {
			/** リソース開放 */
			if (keepSesHandle.get() != null) {
				keepSesHandle.remove();		// セッションハンドル開放
			}
			if (keepReqParam.get() != null) {
				keepReqParam.remove();		// リクエストパラメータ開放
			}
			if (keepFixedText.get() != null) {
				keepFixedText.remove();		// FixedText開放
			}
		}
	}
// ANK-1664-00-00対応 20140107 星野 ADD END
	
// IT1-2014-0000040 2014/01/24 阮 ADD START
	/**
	 * 同番移転登録処理を実施
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite dobanAdd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {
		try {
			/** リソース保持 */
			keepSesHandle.set( handle );	// セッションハンドル
			keepReqParam.set( param );		// リクエストパラメータ
			keepFixedText.set( fixedText );	// FixedText

			HashMap<String, Object> parameter = getRequestParameter();
			if (parameter == null || parameter.isEmpty()) {
				return param;
			}
			
			// 同番移転登録
			addDoban();
			
			// 同番移転取消
			dslDoban();
			
			return param;

		} finally {
			/** リソース開放 */
			if (keepSesHandle.get() != null) {
				keepSesHandle.remove();		// セッションハンドル開放
			}
			if (keepReqParam.get() != null) {
				keepReqParam.remove();		// リクエストパラメータ開放
			}
			if (keepFixedText.get() != null) {
				keepFixedText.remove();		// FixedText開放
			}
		}
	}
// IT1-2014-0000040 2014/01/24 阮 ADD END
	
	public IRequestParameterReadWrite telInfoChgAfter(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {
		try {
			/** リソース保持 */
			keepSesHandle.set( handle );	// セッションハンドル
			keepReqParam.set( param );		// リクエストパラメータ
			keepFixedText.set( fixedText );	// FixedText
			
			HashMap<String, Object> parameter = getRequestParameter();
			if (parameter == null || parameter.size() == 0) {
				return param;
			}
			
			// 転居先のサービス契約内訳番号を住所変更スキーマ、住所変更仮登録スキーマ更新のパラメータへセットする
			setTelSvcKeiUcwkNo();
			
			return param;

		} finally {
			/** リソース開放 */
			if (keepSesHandle.get() != null) {
				keepSesHandle.remove();		// セッションハンドル開放
			}
			if (keepReqParam.get() != null) {
				keepReqParam.remove();		// リクエストパラメータ開放
			}
			if (keepFixedText.get() != null) {
				keepFixedText.remove();		// FixedText開放
			}
		}
	}
	
	/**
	 * カレントＣＣ用のパラメータを取得
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getRequestParameter() throws Throwable {
		return (HashMap<String, Object>)keepReqParam.get().getData(keepFixedText.get());
	}

	/**
	 * サービス契約内訳クリア処理<br>
	 * 直近の住所変更本登録の内容を削除する
	 * @throws Throwable
	 */
	private void clearSvcKeiUcwk() throws Throwable {

		HashMap<String, Object> param = getRequestParameter();
		String baseTelNo = (String)param.get("base_tel_no");		// 転居元
		String adchgTelNo = (String)param.get("adchg_tel_no");		// 直近に入力された転居先の電話番号
		String modifyTelNo = (String)param.get("modify_tel_no");	// 今回訂正した転居先の電話番号
		String dslFlg = (String)param.get("dsl_flg");				// 解約有無
// IT1-2014-0000040対応 20140124 星野 ADD START
		String regDslFlg = (String)param.get("reg_dsl_flg");		// 直近に入力された解約有無
// IT1-2014-0000040対応 20140124 星野 ADD END
// ANK-1664-00-00対応 20131231 星野 ADD START
		String useSvcChgDiv = (String)param.get("use_svc_chg_div");	// 利用サービス変更区分（電話）
		String afterSvcKeiUcwkNo = (String)param.get("after_svc_kei_ucwk_no");
// ANK-1664-00-00対応 20131231 星野 ADD END
		
// IT1-2014-0000040対応 20140124 星野 ADD START
		// 直近の住変が番号解約の場合
		if("1".equals(regDslFlg)){
			return;			// クリアする内訳なし
		}
// IT1-2014-0000040対応 20140124 星野 ADD END
		
// ANK-1664-00-00対応 20131231 星野 ADD START
		// 利用サービス変更区分「追加」の場合
		if(JKKAdchgConstCC.CD00849_ADD.equals(useSvcChgDiv)){
			// 前回の住変で電話なし
			if (StringUtils.isEmpty(adchgTelNo)) {
				return;			// クリアする内訳なし
			}

			// サービス開始前の番号解約
			if ("1".equals(dslFlg)) {
				
				dslSvcKeiUcwk();		// サービス開始前の番号解約
				
// ANK-1664-00-00対応 20140111 星野 ADD START
				HashMap<String, Object> kk0191Map = getEKK0191A010(afterSvcKeiUcwkNo);
				HashMap<String, Object> kk0341Map = 
					getRegalKiki(kk0191Map, (String)param.get("after_svc_kei_kaisen_ucwk_no"), (String)param.get("before_svc_kei_kaisen_ucwk_no"), (String)param.get("svc_kei_no"));
				
				// サービス開始前番号解約のためのＳＯＤ発行
				hakkoSODhtelNoDsl(param, kk0191Map, kk0341Map);
// ANK-1664-00-00対応 20140111 星野 ADD END

				return;
			}

			// 直近の住変と同じ番号
			if (adchgTelNo.equals(modifyTelNo)) {
				return;			// クリアする内訳なし
			}

			// サービス開始前の番号変更
			dslSvcKeiUcwk();			// 変更前の番号をサービス開始前解約
			return;
			
		}
// ANK-1664-00-00対応 20131231 星野 ADD END
		
		// 転居元に電話がない場合
		if (StringUtils.isEmpty(baseTelNo)) {
			// 前回の住変で電話なし
			if (StringUtils.isEmpty(adchgTelNo)) {
				return;			// クリアする内訳なし
			}

			// 電番追加 → 電番解約
			if ("1".equals(dslFlg)) {
				deleteSvcKeiUcwk(false);	// 転居先の内訳をクリア
				return;
			}

			// 直近の住変と同じ番号
			if (adchgTelNo.equals(modifyTelNo)) {
				return;			// クリアする内訳なし
			}

			// 前回の住変から番号変更
			deleteSvcKeiUcwk(false);	// 転居先の内訳をクリア
			return;
		}

		// 転居元に電話あり

		// 直近の住変は同番移転の場合
// OM-2014-0000680対応 20140216 星野 MOD START
//		if (baseTelNo.equals(adchgTelNo) || "1".equals(dslFlg)) {
		if (baseTelNo.equals(adchgTelNo)) {
// OM-2014-0000680対応 20140216 星野 MOD END
			deleteSvcKeiUcwk(true);		// 転居先の内訳（予約）をクリア
			return;
		}
		
// OM-2014-0000680対応 20140216 星野 ADD START
		// 直近の住変は電番変更で、今回は番号解約（番号変更 → 番号解約）
		if ("1".equals(dslFlg)) {
			deleteSvcKeiUcwk(false);		// 転居先の内訳をクリア
		}
// OM-2014-0000680対応 20140216 星野 ADD END
		
		// 直近の住変は電番変更で、今回は同じ番号（番号変更 → 内容変更）
		if (adchgTelNo.equals(modifyTelNo)) {
			return;			// クリアする内訳なし
		}
		
		// 直近の住変は電番変更で、今回は違う番号（番号変更 → 番号変更）
		deleteSvcKeiUcwk(false);		// 転居先の内訳をクリア
	}

	/**
	 * サービス契約内訳を論理削除する<br>
	 * ※同番移転後に訂正で電番変更された場合は転居先の内訳に存在する予約データを削除する<br>
	 * ※電番変更後に訂正で再度電番変更された場合は転居先の内訳を削除する<br>
	 * 
	 * @param isSameTelNo	同番移転有無
	 * @throws Throwable
	 */
	private void deleteSvcKeiUcwk(boolean isSameTelNo) throws Throwable {

		// 直近の登録が同番移転でない場合は内訳を削除する前にエイジング等をクリアしておく
		if (!isSameTelNo) {
			telNoCancel();
		}

		// サービス契約内訳番号取得
		HashMap<String, Object> param = getRequestParameter();
		String svcKeiNo = (String)param.get("svc_kei_no");							// サービス契約番号
		String beforeSvcKeiUcwkNo = (String)param.get("before_svc_kei_ucwk_no");	// 転居元
		String afterSvcKeiUcwkNo = (String)param.get("after_svc_kei_ucwk_no");		// 転居先

		String opeDate = JCCBPCommon.getOpeDate(null);
		boolean existDeleteData = true;
		while (existDeleteData) {
			// サービス契約内訳一覧取得
			List<HashMap<String, Object>> kk0161_b004_list = getEKK0161B004(svcKeiNo);

			// 転居先の内訳を削除する
			existDeleteData = false;
			for (HashMap<String, Object> kk0161_b004_map : kk0161_b004_list) {
				String svc_kei_ucwk_no = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
// ANK-1664-00-00対応 20131231 星野 ADD START
				String ucwkState = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
				// 解約済・キャンセル済の場合は無視
				if ("910".equals(ucwkState) || "920".equals(ucwkState)) {
					continue;
				}
// ANK-1664-00-00対応 20131231 星野 ADD END
				
				if (isSameTelNo) {
					// 直近の住変本登録が同番移転の場合は予約データのみ削除
					if (!beforeSvcKeiUcwkNo.equals(svc_kei_ucwk_no)) {
						continue;	// 対象外
					}
					String rsvAplyYmd = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.RSV_APLY_YMD);
					if (opeDate.compareTo(rsvAplyYmd) >= 0) {
						continue;	// 対象外（予約ではない）
					}
					
// ANK-1664-00-00対応 20131231 星野 ADD START
// 下から移動
					// サービス契約内訳を論理削除
					String geneAddDtm = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.GENE_ADD_DTM);
					logicalDeleteSvcKeiUcwk(svc_kei_ucwk_no, geneAddDtm);
					// 削除データあり
					existDeleteData = true;
// ANK-1664-00-00対応 20131231 星野 ADD END
					
				} else {
					if (!afterSvcKeiUcwkNo.equals(svc_kei_ucwk_no)) {
						continue;	// 対象外
					}
					
// ANK-1664-00-00対応 20131231 星野 ADD START
					String geneAddDtm = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.GENE_ADD_DTM);
					cancelDslSvcKeiUcwk(svc_kei_ucwk_no, geneAddDtm);
					
// IT1-2014-0000040対応 20140124 星野 ADD START
					// 内訳を殺す場合はキャンセルの進捗がないと料金IFに拾ってもらえない
					addEKK1091D010(svcKeiNo, "1201");	// 進捗登録（キャンセル完了）
// IT1-2014-0000040対応 20140124 星野 ADD END
					
// ANK-4494-00-00 Step2品質強化対応No.11 20241119 星野 ADD START
					HashMap<String, String> condMap = new HashMap<String, String>();
					
					// EKK0191A010 サービス契約内訳＜ｅｏ光電話＞一意照会
					HashMap<String, Object> kk0191_a010_map = getEKK0191A010(svc_kei_ucwk_no);
					
					// EZM0121A010 電話番号一意照会
					condMap.clear();
					condMap.put(JKKAdchgMapperCC.COND_KEY_TELNO, (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.TELNO));
					HashMap<String, Object> reqMap = mapper.setEZM0121A010(keepReqParam.get(), keepFixedText.get(), condMap);
					Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
					HashMap<String, Object> zm0121_a010_map = mapper.getEZM0121A010(keepReqParam.get(), keepFixedText.get(), resMap);
					mapper.scResultCheck(keepReqParam.get());
					
					if(zm0121_a010_map == null || zm0121_a010_map.isEmpty()){
						continue;
					}
					
					// 網内番ポ有無（初期個人法人電話番号帯が法人の場合「有」）
					String monaiBmpUm = JKKStrConst.CD00410_HOJIN.equals(zm0121_a010_map.get(EZM0121A010CBSMsg1List.SHK_KOJIN_HOJIN_TLN_TAI_CD)) ? JKKStrConst.CD00002_UMU_1 : JKKStrConst.CD00002_UMU_0;
						
				    // 網内番ポの場合、電話番号「個人法人番号帯コード」を"2"(法人)に更新
				    if(JKKStrConst.CD00002_UMU_1.equals(monaiBmpUm)) {
						zm0121_a010_map.put(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD, JKKStrConst.CD00410_HOJIN);
						zm0121_a010_map.put(EZM0121C010CBSMsg.LAST_UPD_DTM_BF, zm0121_a010_map.get(EZM0121A010CBSMsg1List.UPD_DTM));
						
						// EZM0121C010 電話番号変更
						reqMap = mapper.setEZM0121C010(keepReqParam.get(), keepFixedText.get(), zm0121_a010_map);
						resMap = scCall.run(reqMap, keepSesHandle.get());
						mapper.getEZM0121C010(keepReqParam.get(), keepFixedText.get(), resMap);
						mapper.scResultCheck(keepReqParam.get());
				    }
// ANK-4494-00-00 Step2品質強化対応No.11 20241119 星野 ADD END
					
					// 削除データあり
					existDeleteData = true;
// ANK-1664-00-00対応 20131231 星野 ADD END
				}
// ANK-1664-00-00対応 20131231 星野 DEL START
// 上に移動
//				// サービス契約内訳を論理削除
//				String geneAddDtm = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.GENE_ADD_DTM);
//				logicalDeleteSvcKeiUcwk(afterSvcKeiUcwkNo, geneAddDtm);
//				// 削除データあり
//				existDeleteData = true;
// ANK-1664-00-00対応 20131231 星野 DEL END
			}
		}
		// 最終更新年月日時分秒を後続処理のパラメータへセットする
		setUpdDtm(svcKeiNo, beforeSvcKeiUcwkNo);
	}

	/**
	 * サービス契約内訳を論理削除する（S/IFにてサブタイプも削除される）
	 * 
	 * @param svcKeiUcwkNo	サービス契約内訳番号
	 * @param geneAddDtm	世代登録年月日時分秒
	 * @throws Throwable
	 */
	private void logicalDeleteSvcKeiUcwk(String svcKeiUcwkNo, String geneAddDtm) throws Throwable {

		// サービス契約内訳一意照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		condMap.put(JKKAdchgMapperCC.COND_KEY_GENE_ADD_DTM, geneAddDtm);
		HashMap<String, Object> reqMap = mapper.setEKK0161A010_Func1(keepReqParam.get(), keepFixedText.get(), condMap);
		
		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String , Object>k0161_a001_map = mapper.getEKK0161A010(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		
		String lastUpdDtm = (String)k0161_a001_map.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
		
		// サービス契約内訳を論理削除
		condMap.clear();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		condMap.put(JKKAdchgMapperCC.COND_KEY_GENE_ADD_DTM, geneAddDtm);
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, lastUpdDtm);
		reqMap = mapper.setEKK0161E011(keepReqParam.get(), keepFixedText.get(), condMap);
		
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEKK0161E011(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
	}
	
// ANK-1664-00-00対応 20131231 星野 ADD START
	/**
	 * サービス契約内訳をキャンセル/解約する（S/IFにてサブタイプも削除される）
	 * 
	 * @param svcKeiUcwkNo	サービス契約内訳番号
	 * @param geneAddDtm	世代登録年月日時分秒
	 * @throws Throwable
	 */
	private void cancelDslSvcKeiUcwk(String svcKeiUcwkNo, String geneAddDtm) throws Throwable {
		
		HashMap<String, Object> param = getRequestParameter();
		String mskm_dtl_no = (String)param.get("mskm_dtl_no");		// 申込明細番号

		// サービス契約内訳一意照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		condMap.put(JKKAdchgMapperCC.COND_KEY_GENE_ADD_DTM, geneAddDtm);
		HashMap<String, Object> reqMap = mapper.setEKK0161A010_Func1(keepReqParam.get(), keepFixedText.get(), condMap);
		
		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String , Object>k0161_a001_map = mapper.getEKK0161A010(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		
		String ucwkState = (String)k0161_a001_map.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
		String lastUpdDtm = (String)k0161_a001_map.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
		
		// ANK-2056-00-00 2014/05/01 ADD START
		String baseTelNo = (String)param.get("base_tel_no");		// 転居元
		// baseTelNoが未設定の場合、番号追加の取り消しと判断してパック解約を行う
		if(StringUtils.isEmpty(baseTelNo)){
			// オプションサービス契約の登録及びOPパックの振舞いを行う
			String workKKAdchgOptionPackKey = "JKKAdchgOptionPackRunCC";
			JKKAdchgOptionPackRunCC adchgOptionPackRunCC = new JKKAdchgOptionPackRunCC();
			
			HashMap<String, Object> trgt_data = new HashMap<String, Object>();
			// サービス契約番号
			trgt_data.put(JKKAdchgOptionPackRunCC.SVC_KEI_NO, (String)param.get("svc_kei_no"));
			
			// サービス契約内訳番号
			trgt_data.put(JKKAdchgOptionPackRunCC.SVC_KEI_UCWK_NO_TEL1, svcKeiUcwkNo);
			
			// オプションパック登録パターンコード（電話１番号）
			trgt_data.put(JKKAdchgOptionPackRunCC.OP_PACK_ADD_PTN_NO1, (String)param.get("wri_svc_cd"));
			
//			// 変更前オプションパック登録パターンコード（電話１番号）
//			trgt_data.put(JKKAdchgOptionPackRunCC.BF_OP_PACK_ADD_PTN_NO1, (String)param.get("bf_wri_svc_cd"));
			
			// 住所変更処理パターンフラグ
			trgt_data.put(JKKAdchgOptionPackRunCC.ADDCHANG_PTN_FLG,  JKKAdchgOptionPackRunCC.ADCHG_TELNO_ADDCL);
			
			// 住所変更処理モードフラグ
			trgt_data.put(JKKAdchgOptionPackRunCC.ADDCHANG_MODE_FLG, JKKAdchgOptionPackRunCC.ADCHG_CHANGE_MOD);
			
			// 申込明細番号
			trgt_data.put(JKKAdchgOptionPackRunCC.MSKM_DTL_NO, mskm_dtl_no);
			
			// 異動区分を渡す
			trgt_data.put("ido_div", JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
			
			//解約希望年月日
			trgt_data.put("dsl_kibo_ymd", (String)param.get(JKKAdchgOptionPackRunCC.DSL_KIBO_YMD));
			
			createUserData(keepReqParam.get(), workKKAdchgOptionPackKey);
			
			adchgOptionPackRunCC.adChgOptionPackMain(keepSesHandle.get(), keepReqParam.get(), trgt_data, workKKAdchgOptionPackKey);
			
			
			JKKAdchgCmnLogicCC lclCmnLogic = new JKKAdchgCmnLogicCC(keepSesHandle.get());
			// EKK0081A010_サービス契約一意照会
			HashMap<String, Object> kk0081_a010_map_new = 
				lclCmnLogic.getEKK0081A010( keepReqParam.get(), mapper, keepFixedText.get(), scCall, (String)param.get("svc_kei_no"), JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
			// 更新年月日時分秒
			lastUpdDtm = (String)kk0081_a010_map_new.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
		}
		// ANK-2056-00-00 2014/05/01 ADD END
		
		if("010".equals(ucwkState) || "020".equals(ucwkState)){
			// サービス契約内訳キャンセル呼び出し
			condMap.clear();
			condMap.put(EKK0161C160CBSMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
			condMap.put(EKK0161C160CBSMsg.MSKM_DTL_NO, mskm_dtl_no);
			condMap.put(EKK0161C160CBSMsg.SVC_CANCEL_RSN_CD, "02");
			condMap.put(EKK0161C160CBSMsg.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
			condMap.put(EKK0161C160CBSMsg.UPD_DTM_BF, lastUpdDtm);

			reqMap = mapper.setEKK0161C160( keepReqParam.get(), keepFixedText.get(), condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get());
			HashMap<String , Object>kk0161_c160_map = mapper.getEKK0161C160( keepReqParam.get(), keepFixedText.get(), resMap );
			mapper.scResultCheck( keepReqParam.get() );
			
			
		}else if("030".equals(ucwkState)){
			// サービス契約内訳解約呼び出し
			condMap.clear();
			condMap.put(EKK0161C180CBSMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
			condMap.put(EKK0161C180CBSMsg.MSKM_DTL_NO, mskm_dtl_no);
			condMap.put(EKK0161C180CBSMsg.RSV_TSTA_KIBO_YMD, JCCBPCommon.getOpeDate(null));
			condMap.put(EKK0161C180CBSMsg.SVC_ENDYMD, JCCBPCommon.getOpeDate(null));
			condMap.put(EKK0161C180CBSMsg.SVC_CHRG_ENDYMD, JCCBPCommon.getOpeDate(null));
			condMap.put(EKK0161C180CBSMsg.SVC_DLRE_CD, "03");
			condMap.put(EKK0161C180CBSMsg.SVC_DLRE_MEMO, null);
			condMap.put(EKK0161C180CBSMsg.PNLTY_HASSEI_CD, null);
			condMap.put(EKK0161C180CBSMsg.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
			condMap.put(EKK0161C180CBSMsg.UPD_DTM_BF, lastUpdDtm);
			
			reqMap = mapper.setEKK0161C180( keepReqParam.get(), keepFixedText.get(), condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get());
			HashMap<String , Object>kk0161_c180_map = mapper.getEKK0161C180( keepReqParam.get(), keepFixedText.get(), resMap );
			mapper.scResultCheck( keepReqParam.get() );
			
			lastUpdDtm = (String)kk0161_c180_map.get(EKK0161C180CBSMsg.UPD_DTM);

			// サービス契約内訳解約確定呼び出し
			condMap.clear();
			condMap.put(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
			condMap.put(EKK0161C190CBSMsg.SVC_ENDYMD, JCCBPCommon.getOpeDate(null));
			condMap.put(EKK0161C190CBSMsg.SVC_DSL_KISAN_YMD, JCCBPCommon.getOpeDate(null));
			condMap.put(EKK0161C190CBSMsg.SVC_DLRE_CD, "03");
			condMap.put(EKK0161C190CBSMsg.SVC_DLRE_MEMO, null);
			condMap.put(EKK0161C190CBSMsg.UPD_DTM_BF, lastUpdDtm);
			condMap.put(EKK0161C190CBSMsg.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);
			if("1".equals( k0161_a001_map.get(EKK0161A010CBSMsg1List.KEIZK_AF_KEI_CHGECHU_FLG) ) ){
				condMap.put(EKK0161C190CBSMsg.KEIZK_AF_KEI_CHGECHU_FLG, "0");
			}else{
				condMap.put(EKK0161C190CBSMsg.KEIZK_AF_KEI_CHGECHU_FLG, null);
			}
			condMap.put(EKK0161C190CBSMsg.ADCHG_IDO_RSV_DTL_CD, null);
			condMap.put(EKK0161C190CBSMsg.PLAN_END_SBT_CD, null);
			
			reqMap = mapper.setEKK0161C190( keepReqParam.get(), keepFixedText.get(), condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get());
			HashMap<String , Object>kk0161_c190_map = mapper.getEKK0161C190( keepReqParam.get(), keepFixedText.get(), resMap );
			mapper.scResultCheck( keepReqParam.get() );
		}
	}
// ANK-1664-00-00対応 20131231 星野 ADD END

	/**
	 * キャンセルとなる電話番号に関連するエイジングに使用終了を更新する<br>
	 * ※対象が番ポ番号の場合はレコードを削除する
	 * 
	 * @throws Throwable
	 */
	private void telNoCancel() throws Throwable {

		// サービス契約内訳番号取得
		HashMap<String, Object> param = getRequestParameter();
		String svcKeiUcwkNo = (String)param.get("after_svc_kei_ucwk_no");
// OM-2014-0000680対応 20140216 星野 ADD START
		// サービス契約番号
		String svcKeiNo = (String)param.get("svc_kei_no");
// OM-2014-0000680対応 20140216 星野 ADD END
		
		// EKK0191A010 サービス契約内訳＜ｅｏ光電話＞一意照会
		HashMap<String, Object> kk0191_a010_map = getEKK0191A010(svcKeiUcwkNo);
		
		String telNo = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.TELNO);
		String sipId = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.SIP_USER_ID);
		String bmpUm = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.BMP_UM);

		// 電話番号
		if (JKKSvcConst.BMP_UM_ARI.equals(bmpUm)) {
// IT2-2014-0000058対応 20140121 星野 DEL START
// 案件により番ポ番号はエイジングしないこととなっているため、削除
//			// 番ポの場合はエイジングを削除
//			agingDelete(kk0191_a010_map);
// IT2-2014-0000058対応 20140121 星野 DEL END
			
// OM-2013-0002656対応 20140328 星野 ADD START
			// SYSIID
			String sysid = (String)param.get("sysid");
			// 組織コード
			String orgCd = (String)param.get("org_cd");
			// 組織名
			String orgNm = (String)param.get("org_nm");
			
			// 番ポキャンセル対応履歴
			addBmpCnclTaiorrk(sysid, svcKeiNo, svcKeiUcwkNo, telNo, orgCd, orgNm);
// OM-2013-0002656対応 20140328 星野 ADD END
			
// OM-2014-0000680対応 20140216 星野 ADD START
			// 番ポ工事取消処理
			cancelBmpkj(svcKeiNo, telNo);
// OM-2014-0000680対応 20140216 星野 ADD END
			
			// 電話番号マスタより削除 ANK-3021-00-00_電話番号M削除機能抑止対応により電話番号マスタ削除処理を削除
			telNoDelete(telNo);
		} else {
			// 番ポでない場合はエイジング使用終了
			agingUseEnd(JKKDslRun.AGING_SBT_CD_TEL, telNo);
		}

		// SIPユーザIDのエイジング使用終了
		agingUseEnd(JKKDslRun.AGING_SBT_CD_SIP_ID, sipId);
	}

// OM-2013-0002656対応 20140328 星野 ADD START
	private void addBmpCnclTaiorrk(
		String sysid,
		String svcKeiNo, 
		String svc_kei_ucwk_no, 
		String telno,
		String orgCd,
		String orgNm
	)throws Throwable {
		
		/** 事前準備 */
		HashMap<String, String> condMap = new HashMap<String, String>();

		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		// ・ETU0011B010 番ポ工事一覧照会
		condMap.clear();
		condMap.put(JKKAdInfChgConstCC.COND_KEY_SVC_KEI_NO, svcKeiNo);
		condMap.put("cond_key_telno", telno);
		reqMap = mapper.setETU0011B010(keepReqParam.get(), keepFixedText.get(), condMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> tu0011_b010_list = mapper.getETU0011B010( keepReqParam.get(), keepFixedText.get(), resMap );
		mapper.scResultCheck(keepReqParam.get());
		
		if (tu0011_b010_list == null || tu0011_b010_list.isEmpty()) {
			// 番ポ情報が取れない場合リターン
			return;
		}
		
		
		// 番ポマップ
		HashMap<String, Object> bmp_map = null;

		for(HashMap<String, Object> tu0011_b010_map : tu0011_b010_list){
			// 取消済は処理対象外
			if( "090".equals( tu0011_b010_map.get(ETU0011B010CBSMsg1List.BMP_KOJI_STAT) ) ){
				continue;
			}
			bmp_map = tu0011_b010_map;
			// // 取消済以外で内訳番号が一致すればそれで確定
			if(!StringUtils.isEmpty(svc_kei_ucwk_no) && svc_kei_ucwk_no.equals(tu0011_b010_map.get(ETU0011B010CBSMsg1List.SVC_KEI_UCWK_NO))){
				break;
			}
		}
		
		if(bmp_map == null){
			// 番ポ情報が取れない場合リターン
			return;
		}
		
		/** 番ポ工事一意照会 */
		condMap.clear();
		condMap.put( "key_bmp_koji_no", (String)bmp_map.get(ETU0011B010CBSMsg1List.BMP_KOJI_NO));
		reqMap = mapper.setETU0011A010( keepReqParam.get(), keepFixedText.get(), condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> tu0011_a010_map = mapper.getETU0011A010( keepReqParam.get(), keepFixedText.get(), resMap );
		mapper.scResultCheck( keepReqParam.get() );
		if(tu0011_a010_map==null || tu0011_a010_map.isEmpty()){
			return;
		}

		
		// 番ポ工事ステータス
		String bmpKojiSvcStat = (String)tu0011_a010_map.get(ETU0011A010CBSMsg1List.BMP_KOJI_STAT);
		
		// ＜番ポ工事ステータスが番ポ工事完了または番ポ工事取消＞以外の対応履歴に対して番ポキャンセル通知を行う。
		if (!(JKKSvcConst.BMP_KOJI_STAT_KOJIFIN.equals(bmpKojiSvcStat)
			|| JKKSvcConst.BMP_KOJI_STAT_KOJICL.equals(bmpKojiSvcStat)))
		{
			/** 番ポキャンセル通知 */
			// 登録種別            ◎
			// お客様名            ◎
			// 申込日              ◎
			// NTT受付番号         △
			// 電話番号            ×
			// 設置場所住所コード  ×
			// ユーザID            ◎
			// サービス契約番号    ◎
			// 工事日時            ×
			
			String mskmYmd = JCCBPCommon.getOpeDate(null);
			String nttUkNo = (String)tu0011_a010_map.get(ETU0011A010CBSMsg1List.NTT_UK_NO);
			
			// 対応履歴
			addTaiorrk(keepSesHandle.get(), keepReqParam.get(), keepFixedText.get(), 
					"02", 				// 登録種別（番ポキャンセル通知）
					sysid,				// SYSID
					null, 				// お客様名  <- 部品内部でsysidより取得
					mskmYmd, 			// 申込日
					nttUkNo,			// NTT受付番号
					null, 				// 電話番号
					null, 				// 回線場所住所コード
					svcKeiNo, 			// サービス契約番号
					null,				// 工事(確定)日時
					orgCd,				// 組織コード
					orgNm				// 組織名
			);
		}
	}
	
	/**
	 * 対応履歴登録
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param trkSbt 登録種別
	 * @param sysid SYSID
	 * @param custNm お客様名
	 * @param mskmYmd 申込日
	 * @param nttUkeNo NTT受付番号
	 * @param telno 電話番号
	 * @param setPlaceAdCd 回線場所住所コード
	 * @param svcKeiNo サービス契約番号
	 * @param kojiDtm 工事(確定)日時
	 * @throws Throwable 
	 */
	protected void addTaiorrk(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText, String trkSbt,
			String sysid, String custNm, String mskmYmd, String nttUkeNo,
			String telno, String setPlaceAdCd, String svcKeiNo, String kojiDtm,
			String orgCd, String orgNm)
			throws Throwable
	{
		
		HashMap<String, Object> taiorrk = new HashMap<String, Object>();
		// 登録種別
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.TRK_SBT, trkSbt);
		// SYSID
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.SYSID, sysid);
		// お客様名
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.CUST_NM, custNm);
		// 申込日
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.MSKM_YMD, mskmYmd);
		// NTT受付番号
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.NTT_UKE_NO, nttUkeNo);
		// 電話番号
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.TELNO, telno);
		// 設置場所住所コード
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.SETPLACE_AD_CD, setPlaceAdCd);
		// サービス契約番号
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.SVC_KEI_NO, svcKeiNo);
		// ユーザID
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.USER_ID, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 工事日時
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.KOJI_DTM, kojiDtm);
		// 組織コード
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.ORG_CD, orgCd);
		// 組織名
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.ORG_NM, orgNm);

		// 番ポ対応履歴登録部品呼出
		JKKBpCommon.addBmpTaiorrki(handle, param, taiorrk, fixedText);
	}
// OM-2013-0002656対応 20140328 星野 ADD END
	
// OM-2014-0000680対応 20140216 星野 ADD START
	private void cancelBmpkj(String svcKeiNo, String telno) throws Throwable {
		if(!StringUtils.isEmpty(svcKeiNo) && !StringUtils.isEmpty(telno)){
			// 番ポ工事取消処理部品マップを作成する
			HashMap<String, Object> cancelBmpkjMap = new HashMap<String, Object>();
			// 番ポ工事取消処理部品マップ.サービス契約番号を設定
			cancelBmpkjMap.put(JKKCancelBmpkjConst.SVC_KEI_NO, svcKeiNo);
			// 番ポ工事取消処理部品マップ.対象番ポ電話番号を設定
			cancelBmpkjMap.put(JKKCancelBmpkjConst.BMP_TELNO, telno);
			// 番ポ工事取消処理部品を呼び出し、番ポ取消を行う（但し、番ポ工事ステータスが「000」時のみ）
			JKKBpCommon.cancelBmpkj(keepSesHandle.get(), keepReqParam.get(), keepFixedText.get(), cancelBmpkjMap);
		}
	}
// OM-2014-0000680対応 20140216 星野 ADD END
	
	/**
	 * エイジングに使用終了を設定する
	 * 
	 * @param agingSbtCd
	 * @param value
	 * @throws Throwable
	 */
	private void agingUseEnd(String agingSbtCd, String value) throws Throwable {

		if (value == null || value.length() == 0) {
			return;		// 対象値が未設定の場合は処理しない
		}

		// EZM0111B040 エイジング一覧照会（ユニーク）
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_AGING_SBT_CD, agingSbtCd);
		condMap.put(JKKAdchgMapperCC.COND_KEY_AGING_TG_VALUE, value);
		HashMap<String, Object> reqMap = mapper.setEZM0111B040(keepReqParam.get(), keepFixedText.get(), condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> zm0111_b040_map = mapper.getEZM0111B040(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());

		if (zm0111_b040_map == null || zm0111_b040_map.size() == 0) {
			return;		// 該当なし
		}

//OM-2016-0000752 MOD START
//		String useEndDtm = (String)zm0111_b040_map.get(EZM0111B040CBSMsg1List.USE_END_DTM);
//		if (useEndDtm != null && useEndDtm.length() != 0) {
//			return;		// 使用終了設定済み
//		}
		if (!JKKStrConst.CD00063_USING.equals(zm0111_b040_map.get(EZM0111B040CBSMsg1List.AGING_STAT)))
		{
			return;		// エイジングステータスが使用中以外
		}
//OM-2016-0000752 MOD END

		// EZM0111C010 エイジング対象使用終了
		reqMap = mapper.setEZM0111C010(keepReqParam.get(), keepFixedText.get(), zm0111_b040_map);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEZM0111B040(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
	}

	/**
	 * エイジング削除処理
	 * 
	 * @param zm0111_b040_map
	 * @throws Throwable
	 */
	private void agingDelete(HashMap<String, Object> zm0111_b040_map) throws Throwable {

		// EZM0111E010 エイジング削除
		HashMap<String, Object>reqMap = mapper.setEZM0111E010(keepReqParam.get(), keepFixedText.get(), zm0111_b040_map);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.getEZM0111E010(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
	}

	/**
	 * 電話番号マスタより対象の電話番号を削除する
	 * 
	 * @param telNo
	 * @throws Throwable
	 */
	private void telNoDelete(String telNo) throws Throwable {

		// EZM0121A010 電話番号一意照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_TELNO, telNo);
		HashMap<String, Object> reqMap = mapper.setEZM0121A010(keepReqParam.get(), keepFixedText.get(), condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> zm0121_a010_map = mapper.getEZM0121A010(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		if (zm0121_a010_map == null || zm0121_a010_map.isEmpty()) {
			return;		// 該当データなし
		}

		// 個人法人電話番号帯コード
		String kojin_hojin_tln_tai_cd = (String)zm0121_a010_map.get(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD);
// OM-2014-0000680対応 20140216 星野 MOD START
//		if (!KOJIN_HOJIN_TLN_TAI_CD_HOJIN.equals(kojin_hojin_tln_tai_cd)) {
		if (KOJIN_HOJIN_TLN_TAI_CD_HOJIN.equals(kojin_hojin_tln_tai_cd)) {
// OM-2014-0000680対応 20140216 星野 MOD END
			return;		// 法人帯電話番号は処理対象外
		}

// ANK-3021-00-00 20161212 DEL START
//		// EZM0121E011 電話番号物理削除
//		condMap.clear();
//		condMap.put(EZM0121E011CBSMsg.TELNO, (String)zm0121_a010_map.get(EZM0121A010CBSMsg1List.TELNO));
//		condMap.put(EZM0121E011CBSMsg.LAST_UPD_DTM_BF, (String)zm0121_a010_map.get(EZM0121A010CBSMsg1List.UPD_DTM));
//		reqMap = mapper.setEZM0121E011(keepReqParam.get(), keepFixedText.get(), condMap);
//
//		resMap = scCall.run(reqMap, keepSesHandle.get());
//		mapper.getEZM0121E011(keepReqParam.get(), keepFixedText.get(), resMap);
//		mapper.scResultCheck(keepReqParam.get());
// ANK-3021-00-00 20161212 DEL END
	}

	/**
	 * EKK0081A010 サービス契約一意照会
	 * @param svcKeiNo
	 * @return
	 * @throws Throwable
	 */
	private HashMap<String, Object> getEKK0081A010(String svcKeiNo) throws Throwable {

		// EKK0081A010 サービス契約一意照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo);
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
		HashMap<String, Object> reqMap = mapper.setEKK0081A010(keepReqParam.get(), keepFixedText.get(), condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk0081_a010_map = mapper.getEKK0081A010(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		
		return kk0081_a010_map;
	}

	/**
	 * EKK0191A010 サービス契約内訳＜ｅｏ光電話＞取得
	 * @param svcKeiUcwkNo
	 * @return
	 * @throws Throwable
	 */
	private HashMap<String, Object> getEKK0191A010(String svcKeiUcwkNo) throws Throwable {

		// EKK0191A010 サービス契約内訳＜ｅｏ光電話＞一意照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		HashMap<String, Object> reqMap = mapper.setEKK0191A010(keepReqParam.get(), keepFixedText.get(), condMap);

		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		HashMap<String, Object> kk0191_a010_map = mapper.getEKK0191A010(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		
		return kk0191_a010_map;
	}

	/**
	 * カレントのサービス契約内訳レコードの更新年月日を後続処理のパラメータへセットする
	 * @param svcKeiUcwkNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void setUpdDtm(String svcKeiNo, String svcKeiUcwkNo) throws Throwable {

		String lastUpdDtm = null;
		if (StringUtils.isEmpty(svcKeiUcwkNo)) {
			// EKK0081A010 サービス契約一意照会
			HashMap<String, Object> map = getEKK0081A010(svcKeiNo);
			lastUpdDtm = (String)map.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
						
		} else {
			// EKK0191A010 サービス契約内訳＜ｅｏ光電話＞一意照会
			HashMap<String, Object> map = getEKK0191A010(svcKeiUcwkNo);
			lastUpdDtm = (String)map.get(EKK0191A010CBSMsg1List.LAST_UPD_DTM);
		}

		// 後続の電話番号変更ＣＣのパラメータキーを取得
//		String paramKey = (String)getRequestParameter().get("fixedText_tel_info_chg");

		HashMap<String, Object> ccParam = getRequestParameter();
		HashMap<String, Object> param = (HashMap<String, Object>)ccParam.get("telno_info_chg");

		// 更新年月日時分秒を上書きする
//		HashMap<String, Object> param = (HashMap<String, Object>)keepReqParam.get().getData(paramKey);
		if (param != null) {
			param.put("kk0081UpdDtm", lastUpdDtm);
		}
	}

	/**
	 * EKK0161B004 サービス契約内訳一覧取得
	 * @param svcKeiNo
	 * @return
	 * @throws Throwable
	 */
	private ArrayList<HashMap<String, Object>> getEKK0161B004(String svcKeiNo) throws Throwable {

		// EKK0161B004 サービス契約内訳一覧照会
		HashMap<String, String> condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo);
		HashMap<String, Object> reqMap = mapper.setEKK0161B004(keepReqParam.get(), keepFixedText.get(), condMap, JPCModelConstant.FUNC_CD_4);
		
		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> kk0161_b004_lit = mapper.getEKK0161B004(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		
		return kk0161_b004_lit;
	}

// IT1-2014-0000040対応 20140124 星野 ADD START
	/**
	 * EKK1091D010 進捗登録
	 * @return
	 * @throws Throwable
	 */
	private void addEKK1091D010(String svcKeiNo, String prgStat) throws Throwable {
		
		// EKK1091D010 進捗登録
		HashMap<String, String> inMap = new HashMap<String, String>();
		inMap.put( JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO, svcKeiNo );
		inMap.put( JKKAdchgConstCC.PARAM_KEY_IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST );
		inMap.put( JKKAdchgConstCC.PARAM_KEY_IDO_DTM, JCCBPCommon.getSysDateTimeStamp() );
		inMap.put( JKKAdchgConstCC.PARAM_KEY_PRG_STAT, prgStat );
		
		HashMap<String, Object> reqMap = mapper.setEKK1091D010(keepReqParam.get(), keepFixedText.get(), inMap, getIdoRsnList() );
		
		Map<?, ?> resMap = scCall.run(reqMap, keepSesHandle.get());
		mapper.scResultCheck(keepReqParam.get());
		
	}
	
	/**
	 * 異動理由リスト 取得処理.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @return  進捗登録用の異動理由リスト
	 * @throws Throwable 
	 */
	private ArrayList<HashMap<String, Object>> getIdoRsnList() throws Throwable {

		/** 事前準備 */
		HashMap<String, Object> paramMap = getRequestParameter();

		// 投入データ設定[異動理由リスト]
		ArrayList<HashMap<String, Object>> put_ido_rsn_list = new ArrayList<HashMap<String, Object>>();

		// param.異動理由リストの情報を投入データとして登録
		ArrayList<HashMap<String, Object>> prm_ido_rsn_list = (ArrayList<HashMap<String, Object>>)paramMap.get( JKKAdchgConstCC.PARAM_KEY_IDO_RSN_LIST );
		Iterator<HashMap<String, Object>> prm_ido_rsn_ite = prm_ido_rsn_list.iterator();
		while( prm_ido_rsn_ite.hasNext() ){

			HashMap<String, Object> cur_ido_rsn = prm_ido_rsn_ite.next();

			// 投入データを登録
			HashMap<String, Object> put_ido_rsn = new HashMap<String, Object>();
			put_ido_rsn.put( EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)cur_ido_rsn.get( JKKAdchgConstCC.PARAM_KEY_IDO_RSN_CD ) );
			put_ido_rsn.put( EKK1091D010CBSMsg1List.IDO_RSN_MEMO, (String)cur_ido_rsn.get( JKKAdchgConstCC.PARAM_KEY_IDO_RSN_MEMO ) );
			put_ido_rsn_list.add( put_ido_rsn );
		}

		return put_ido_rsn_list;
	}
// IT1-2014-0000040対応 20140124 星野 ADD END

	/**
	 * 転居先のサービス契約内訳番号を住所変更スキーマ、住所変更仮登録スキーマ更新のパラメータへセットする
	 * 
	 * @throws Throwable
	 */
	private void setTelSvcKeiUcwkNo() throws Throwable {
		
		// パラメータ取得
		HashMap<String, Object> param = getRequestParameter();
		String svcKeiNo = (String)param.get("svc_kei_no");				// 電話のサービス契約番号
		String svcKeiUcwkNo1 = (String)param.get("svc_kei_ucwk_no_1");	// 転居元の電話１のサービス契約内訳番号
		String svcKeiUcwkNo2 = (String)param.get("svc_kei_ucwk_no_2");	// 転居元の電話２のサービス契約内訳番号
		String dslFlgTelNo1 = (String)param.get("dsl_flg_tel_no_1");	// 転居元の電話１の解約有無
		String dslFlgTelNo2 = (String)param.get("dsl_flg_tel_no_2");	// 転居元の電話２の解約有無
// IT1-2014-0000040対応 20140124 星野 ADD START
		String aftSvcKeiUcwkNo1 = (String)param.get("after_svc_kei_ucwk_no_1");		// 転居先の電話１のサービス契約内訳番号
		String aftSvcKeiUcwkNo2 = (String)param.get("after_svc_kei_ucwk_no_2");		// 転居先の電話２のサービス契約内訳番号
		String modifyTelNo1 = (String)param.get("modify_tel_no_1");					// 今回訂正された転居先の電話１の電話番号
		String modifyTelNo2 = (String)param.get("modify_tel_no_2");					// 今回訂正された転居先の電話２の電話番号
// IT1-2014-0000040対応 20140124 星野 ADD END
		
		// サービス契約内訳一覧取得
		ArrayList<HashMap<String, Object>> kk0161_b004_lit = getEKK0161B004(svcKeiNo);
		
		// １番号目
		if ("1".equals(dslFlgTelNo1)) {
			// 番号解約
			
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD START
// 修正モードで住変でサービス追加した電話の番号解約が可能となったため、
// 転居元内訳番号の無い場合の誤更新を防ぐために転居元内訳番号の内容チェックを追加
//			setTelSvcKeiUcwkNo(svcKeiUcwkNo1, (String)null);
			
			if (!StringUtils.isEmpty(svcKeiUcwkNo1)) {
				
				setTelSvcKeiUcwkNo(svcKeiUcwkNo1, (String)null);
				
// IT1-2014-0000040対応 20140124 星野 ADD START
			}else{
				// 番号追加取消
				// 後続のJKKAdchgHonCmtCC.adchgHonCmtAfterFixで処理されるので、ここでは何もしない
				
// IT1-2014-0000040対応 20140124 星野 ADD END
			}
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD END
		} else {
			
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD START
//			if (svcKeiUcwkNo1 != null && svcKeiUcwkNo1.length() != 0) {
			
			if (!StringUtils.isEmpty(svcKeiUcwkNo1)) {
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD END
				
				setTelSvcKeiUcwkNo(svcKeiUcwkNo1, kk0161_b004_lit);
				
// IT1-2014-0000040対応 20140124 星野 ADD START
			}else{
				
				if(StringUtils.isEmpty(aftSvcKeiUcwkNo1)){
					// 番号追加
					addTelSvcKeiUcwkNo(modifyTelNo1, kk0161_b004_lit);
					
				}else{
					
					// 番号追加訂正
					setTelSvcKeiUcwkNoTeisei(aftSvcKeiUcwkNo1, modifyTelNo1, kk0161_b004_lit);
				}
				
// IT1-2014-0000040対応 20140124 星野 ADD END
			}
		}
		
		// ２番号目
		if ("1".equals(dslFlgTelNo2)) {
			// 番号解約
			
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD START
// 修正モードで住変でサービス追加した電話の番号解約が可能となったため、
// 転居元内訳番号の無い場合の誤更新を防ぐために転居元内訳番号の内容チェックを追加
//			setTelSvcKeiUcwkNo(svcKeiUcwkNo2, (String)null);
			
			if (!StringUtils.isEmpty(svcKeiUcwkNo2)) {
				
				setTelSvcKeiUcwkNo(svcKeiUcwkNo2, (String)null);
				
// IT1-2014-0000040対応 20140124 星野 ADD START
			}else{
				// 番号追加取消
				// 後続のJKKAdchgHonCmtCC.adchgHonCmtAfterFixで処理されるので、ここでは何もしない
				
// IT1-2014-0000040対応 20140124 星野 ADD END
			}
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD END
		} else {
			
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD START
//			if (svcKeiUcwkNo2 != null && svcKeiUcwkNo2.length() != 0) {
			
			if (!StringUtils.isEmpty(svcKeiUcwkNo2)) {
// ANK-1665-00-00 2014.01.07 Y.Kanata MOD END
				
				setTelSvcKeiUcwkNo(svcKeiUcwkNo2, kk0161_b004_lit);
				
// IT1-2014-0000040対応 20140124 星野 ADD START
			}else{
				
				if(StringUtils.isEmpty(aftSvcKeiUcwkNo2)){
					// 番号追加
// IT2-2014-0000089対応 20140125 星野 MOD START
//					addTelSvcKeiUcwkNo(modifyTelNo1, kk0161_b004_lit);
					addTelSvcKeiUcwkNo(modifyTelNo2, kk0161_b004_lit);
// IT2-2014-0000089対応 20140125 星野 MOD END
					
				}else{
					
					// 番号追加訂正
					setTelSvcKeiUcwkNoTeisei(aftSvcKeiUcwkNo2, modifyTelNo2, kk0161_b004_lit);
				}
				
// IT1-2014-0000040対応 20140124 星野 ADD END
			}
		}
	}

	/**
	 * 継続元サービス契約内訳番号が転居元の内訳番号に一致するレコードを検索し本登録更新ＣＣのパラメータを更新する<br>
	 * 転居先で解約となる番号については本処理では対応しない
	 * 
	 * @param svcKeiUcwkNo
	 * @param kk0161_b004_lit
	 * @throws Throwable
	 */
	private void setTelSvcKeiUcwkNo(String svcKeiUcwkNo, ArrayList<HashMap<String, Object>> kk0161_b004_lit) throws Throwable {

		// 継続元サービス契約内訳番号が転居元の内訳番号に一致するレコードを検索
		for (HashMap<String, Object> kk0161_b004_map : kk0161_b004_lit) {
// IT1-2014-0000040対応 20140124 星野 ADD START
			// 解約済・キャンセル済を変更後識別番号にセットすることはないので、処理対象外
			String svcKeiUcwkStat = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if("910".equals(svcKeiUcwkStat) || "920".equals(svcKeiUcwkStat)){
				continue;
			}
// IT1-2014-0000040対応 20140124 星野 ADD END
			
			// 継続元サービス契約内訳番号
			String keizkMtSvcKeiUcwkNo = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.KEIZK_MT_SVC_KEI_UCWK_NO);
			if (keizkMtSvcKeiUcwkNo == null || keizkMtSvcKeiUcwkNo.length() == 0) {
				continue;
			}
			
			// 内訳番号が一致した場合はパラメータを更新する
			if (svcKeiUcwkNo.equals(keizkMtSvcKeiUcwkNo)) {
				String afterSvcKeiUcwkNo = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
				setTelSvcKeiUcwkNo(svcKeiUcwkNo, afterSvcKeiUcwkNo);
				return;
			}
		}
		// 内訳が一致しないので同番移転
		setTelSvcKeiUcwkNo(svcKeiUcwkNo, svcKeiUcwkNo);
	}

	/**
	 * 本登録更新ＣＣのパラメータ（転居先の電話の内訳）を更新する
	 * 
	 * @param beforeSvcKeiUcwkNo
	 * @param afterSvcKeiUcwkNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void setTelSvcKeiUcwkNo(String beforeSvcKeiUcwkNo, String afterSvcKeiUcwkNo) throws Throwable {
		
		// パラメータ取得
		HashMap<String, Object> currentParam = getRequestParameter();
		String paramKeyAdchm = (String)currentParam.get("fixedText_adchm_chg");	// 本登録更新CC用のパラメータキー
		
		// 本登録更新のパラメータ
		HashMap<String, Object> updateParam = (HashMap<String, Object>)keepReqParam.get().getData(paramKeyAdchm);
		ArrayList<HashMap<String, Object>> dtlList = (ArrayList<HashMap<String, Object>>)updateParam.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK);
		// 転居元の内訳に一致する変更前識別番号を探し、変更後識別番号を更新する
		for (HashMap<String, Object> dtlMap : dtlList) {
			String svcKeiUcwkNo = (String)dtlMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO);
			if (beforeSvcKeiUcwkNo.equals(svcKeiUcwkNo)) {
				dtlMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, afterSvcKeiUcwkNo);
				break;
			}
		}
	}

// IT1-2014-0000040対応 20140124 星野 ADD START
	/**
	 * サービス契約内訳番号が転居先の内訳番号に一致するレコードを検索し本登録更新ＣＣのパラメータを更新する<br>
	 * 番号追加の訂正のみを処理対象とする
	 * 
	 * @param svcKeiUcwkNoTeiseimae
	 * @param modifyTelNo
	 * @param kk0161_b004_lit
	 * @throws Throwable
	 */
	private void setTelSvcKeiUcwkNoTeisei(String svcKeiUcwkNoTeiseimae, String modifyTelNo, ArrayList<HashMap<String, Object>> kk0161_b004_lit) throws Throwable {
		
		// 電話番号が訂正後電話番号に一致するレコードを検索
		for (HashMap<String, Object> kk0161_b004_map : kk0161_b004_lit) {
// IT1-2014-0000040対応 20140124 星野 ADD START
			// 解約済・キャンセル済を変更後識別番号にセットすることはないので、処理対象外
			String svcKeiUcwkStat = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if("910".equals(svcKeiUcwkStat) || "920".equals(svcKeiUcwkStat)){
				continue;
			}
// IT1-2014-0000040対応 20140124 星野 ADD END
			
			String svcKeiUcwkNo = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			
			HashMap<String, Object> kk0191Map = getEKK0191A010(svcKeiUcwkNo);
			if(kk0191Map!=null && !kk0191Map.isEmpty()){
			
				// 電話番号取得
				String telno = (String)kk0191Map.get(EKK0191A010CBSMsg1List.TELNO);
				if( telno == null || StringUtils.isEmpty(telno) ){
					continue;
				}
				
				// 電話番号が訂正後電話番号と一致するのが訂正後内訳
				if(telno.equals(modifyTelNo)){
					setTelSvcKeiUcwkNoTeisei(svcKeiUcwkNoTeiseimae, svcKeiUcwkNo);
				}
			}
		}
	}
		
	/**
	 * 本登録更新ＣＣのパラメータ（転居先の電話の内訳）を更新する（番号追加の訂正）
	 * 番号追加の訂正のみを処理対象とする
	 * 
	 * @param beforeSvcKeiUcwkNo
	 * @param afterSvcKeiUcwkNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void setTelSvcKeiUcwkNoTeisei(String beforeSvcKeiUcwkNo, String afterSvcKeiUcwkNo) throws Throwable {
		
		// パラメータ取得
		HashMap<String, Object> currentParam = getRequestParameter();
		String paramKeyAdchm = (String)currentParam.get("fixedText_adchm_chg");	// 本登録更新CC用のパラメータキー
		
		// 本登録更新のパラメータ
		HashMap<String, Object> updateParam = (HashMap<String, Object>)keepReqParam.get().getData(paramKeyAdchm);
		ArrayList<HashMap<String, Object>> dtlList = (ArrayList<HashMap<String, Object>>)updateParam.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK);
		// 訂正前内訳に一致する変更後識別番号を探し、変更後識別番号を更新する
		for (HashMap<String, Object> dtlMap : dtlList) {
			String chbfSkbtNo = (String)dtlMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHBF_SKBT_NO);
			String chafSkbtNo = (String)dtlMap.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO);
			
			// 変更前識別が未設定のもののみが対象
			if( StringUtils.isEmpty(chbfSkbtNo) && !StringUtils.isEmpty(chafSkbtNo) && chafSkbtNo.equals(beforeSvcKeiUcwkNo) ){
				dtlMap.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_CHAF_SKBT_NO, afterSvcKeiUcwkNo);
				break;
			}
		}
	}
	
	/**
	 * 本登録更新ＣＣのパラメータを追加する
	 * 
	 * @param svcKeiUcwkNo
	 * @param kk0161_b004_lit
	 * @throws Throwable
	 */
	private void addTelSvcKeiUcwkNo(String modifyTelNo, ArrayList<HashMap<String, Object>> kk0161_b004_lit) throws Throwable {
		
		// 電話番号が訂正後電話番号に一致するレコードを検索
		for (HashMap<String, Object> kk0161_b004_map : kk0161_b004_lit) {
// IT1-2014-0000040対応 20140124 星野 ADD START
			// 解約済・キャンセル済を変更後識別番号にセットすることはないので、処理対象外
			String svcKeiUcwkStat = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if("910".equals(svcKeiUcwkStat) || "920".equals(svcKeiUcwkStat)){
				continue;
			}
// IT1-2014-0000040対応 20140124 星野 ADD END
			
			String svcKeiUcwkNo = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			
			HashMap<String, Object> kk0191Map = getEKK0191A010(svcKeiUcwkNo);
			if(kk0191Map!=null && !kk0191Map.isEmpty()){
			
				// 電話番号取得
				String telno = (String)kk0191Map.get(EKK0191A010CBSMsg1List.TELNO);
				if( telno == null || StringUtils.isEmpty(telno) ){
					continue;
				}
				
				// 電話番号が訂正後電話番号と一致するのが訂正後内訳
				if(telno.equals(modifyTelNo)){
					addTelSvcKeiUcwkNo(svcKeiUcwkNo);
				}
			}
		}
	}
	
	/**
	 * 本登録更新ＣＣのパラメータを追加する
	 * 
	 * @param svcKeiUcwkNo
	 * @param kk0161_b004_lit
	 * @throws Throwable
	 */
	private void addTelSvcKeiUcwkNo(String svcKeiUcwkNo) throws Throwable {
		
		// パラメータ取得
		HashMap<String, Object> currentParam = getRequestParameter();
		String paramKeyAdchm = (String)currentParam.get("fixedText_adchm_chg");	// 本登録更新CC用のパラメータキー
		
		// 本登録更新のパラメータ
		HashMap<String, Object> updateParam = (HashMap<String, Object>)keepReqParam.get().getData(paramKeyAdchm);
		ArrayList<HashMap<String, Object>> dtlList = (ArrayList<HashMap<String, Object>>)updateParam.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK);

		HashMap<String, Object> dtlMap = new HashMap<String, Object>();	// 格納用マップ
		dtlMap.put("adchg_dtl_chaf_skbt_no", svcKeiUcwkNo);
		dtlList.add(dtlMap);

		// ST-2014-0000153 2014/09/17 add start
		ArrayList<HashMap<String, Object>> dtlListNew = (ArrayList<HashMap<String, Object>>)updateParam.get(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK_TEL_NEW);
		if(dtlListNew == null){
			dtlListNew = new ArrayList<HashMap<String, Object>>();
			updateParam.put(JKKAdchgConstCC.PARAM_KEY_ADCHG_DTL_LIST_SVC_KEI_UCWK_TEL_NEW,dtlListNew);
		}
		dtlListNew.add(dtlMap);
		// ST-2014-0000153 2014/09/17 add end
	}
// IT1-2014-0000040対応 20140124 星野 ADD END
	
	/**
	 * サービス契約内訳更新処理
	 * 
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void modifySvcKeiUcwk() throws Throwable {

		HashMap<String, Object> param = getRequestParameter();
		String baseTelNo = (String)param.get("base_tel_no");		// 転居元
		String adchgTelNo = (String)param.get("adchg_tel_no");		// 直近に入力された転居先の電話番号
		String modifyTelNo = (String)param.get("modify_tel_no");	// 今回訂正した転居先の電話番号
		String dslFlg = (String)param.get("dsl_flg");				// 解約有無
// IT1-2014-0000023対応 20140119 星野 ADD START
		String useSvcChgDiv = (String)param.get("use_svc_chg_div");	// 利用サービス変更区分（電話）
		String svcKeiNo = (String)param.get("svc_kei_no");
		String afterSvcKeiUcwkNo = (String)param.get("after_svc_kei_ucwk_no");
		String chbfSvcKeiUcwkGeneAddDtm = "";
// IT1-2014-0000023対応 20140119 星野 ADD END

		// 電番解約の場合
		if ("1".equals(dslFlg)) {
			return;			// 更新する内訳なし
		}

		// 転居元に電話番号が無く、直近の住変で電話番号がない場合
		if (StringUtils.isEmpty(baseTelNo) && StringUtils.isEmpty(adchgTelNo)) {
			return;			// 更新する内訳なし（内訳追加）
		}

		// 直近の住変と電話番号が異なる場合 
		if (!adchgTelNo.equals(modifyTelNo)
// IT2-2014-0000089対応 20140125 星野 ADD START
			// かつ 番号変更やめ（同番移転に戻した）以外
			&& !modifyTelNo.equals(baseTelNo)
// IT2-2014-0000089対応 20140125 星野 ADD END
		) {
			return;			// 更新する内訳なし（内訳追加）
		}
		
// IT1-2014-0000023対応 20140119 星野 ADD START
// IT2-2014-0000089対応 20140125 星野 ADD START
		// 番号解約やめの場合、変更後内訳が入ってこないので未設定チェック
		if(!StringUtils.isEmpty(afterSvcKeiUcwkNo)){
// IT2-2014-0000089対応 20140125 星野 ADD END
			HashMap<String, Object> kk0191MapBf = getEKK0191A010(afterSvcKeiUcwkNo);
			if(kk0191MapBf!=null && !kk0191MapBf.isEmpty()){
				// 更新前の世代登録を取得
				chbfSvcKeiUcwkGeneAddDtm = (String)kk0191MapBf.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM);
			}
// IT2-2014-0000089対応 20140125 星野 ADD START
		}
// IT2-2014-0000089対応 20140125 星野 ADD START
// IT1-2014-0000023対応 20140119 星野 ADD END


		// 電話番号情報変更ＣＣのパラメータ取得
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get("telno_info_chg");

		// 電話番号情報変更ＣＣ
		JKKTelnoInfoChgCC telnoInfoChgCc = new JKKTelnoInfoChgCC();

		// サービス契約内訳更新
		telnoInfoChgCc.modifyTelSvcKeiUcwk(keepSesHandle.get(), keepReqParam.get(), userData);
		
// IT1-2014-0000023対応 20140119 星野 ADD START
		// 利用サービス変更区分「追加」の場合
		if(JKKAdchgConstCC.CD00849_ADD.equals(useSvcChgDiv)){
			
			String chafSvcKeiUcwkGeneAddDtm = "";
			HashMap<String, Object> kk0191MapAf = getEKK0191A010(afterSvcKeiUcwkNo);
			if(kk0191MapAf!=null && !kk0191MapAf.isEmpty()){
				// 更新後の世代登録を取得
				chafSvcKeiUcwkGeneAddDtm = (String)kk0191MapAf.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM);
			}

			if(!StringUtils.isEmpty(chbfSvcKeiUcwkGeneAddDtm) && !StringUtils.isEmpty(chafSvcKeiUcwkGeneAddDtm)){
				// 緊急通報ＳＯＤを発行する必要がある
				hakkoSODForECS(param, svcKeiNo, afterSvcKeiUcwkNo, chbfSvcKeiUcwkGeneAddDtm, chafSvcKeiUcwkGeneAddDtm);
			}
		}
// IT1-2014-0000023対応 20140119 星野 ADD END
	}

	/**
	 * サービス契約内訳追加処理
	 * 
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void appendSvcKeiUcwk() throws Throwable {

		HashMap<String, Object> param = getRequestParameter();
		String adchgTelNo = (String)param.get("adchg_tel_no");		// 直近に入力された転居先の電話番号
		String modifyTelNo = (String)param.get("modify_tel_no");	// 今回訂正した転居先の電話番号
		String dslFlg = (String)param.get("dsl_flg");				// 解約有無
// ANK-1664-00-00対応 20131231 星野 ADD START
		String baseTelNo = (String)param.get("base_tel_no");		// 転居元
		String useSvcChgDiv = (String)param.get("use_svc_chg_div");	// 利用サービス変更区分（電話）
// ANK-1664-00-00対応 20131231 星野 ADD END

		// 電番解約の場合
		if ("1".equals(dslFlg)) {
			return;			// 追加する内訳なし
		}

		// 直近の住変と電話番号が同じ場合
		if (adchgTelNo.equals(modifyTelNo)) {
			return;			// 追加する内訳なし
		}
		
// IT2-2014-0000089対応 20140125 星野 ADD START
		// 番号変更やめ（同番移転に戻す）の場合、内訳の追加不要
		if(!StringUtils.isEmpty(baseTelNo) && baseTelNo.equals(modifyTelNo)){
			return;
		}
//IT2-2014-0000089対応 20140125 星野 ADD END
		

		
// ANK-1664-00-00対応 20131231 星野 ADD START
		// 利用サービス変更区分「追加」の場合
		if(JKKAdchgConstCC.CD00849_ADD.equals(useSvcChgDiv)){
			
			// サービス開始前の番号追加
			// または サービス開始前の番号変更（変更後番号の追加）
			addTelnoInfo();
			
			// 番ポ工事の登録
			addBmpo();
			
// ANK-1664-00-00対応 20140111 星野 ADD START
			// 直近の電話番号なし（＝番号追加）
			if(StringUtils.isEmpty(adchgTelNo)){
				
				String svcKeiNo = (String)param.get("svc_kei_no");
				// 払い出されたサービス契約内訳番号の取得
				String svcKeiUcwkNo = getSvcKeiUcwkNo(svcKeiNo, modifyTelNo);
				

				HashMap<String, Object> kk0341Map = getKiki((String)param.get("after_svc_kei_kaisen_ucwk_no"), (String)param.get("before_svc_kei_kaisen_ucwk_no"), svcKeiNo);
				if(kk0341Map != null){
					// サービス追加時の番号追加は、多機能ルータ交換の可能性があるため紐付け更新が必要
					// SOD発行前に紐付け更新を実施
					String himodukeUpdateFlg = updateSvcKeiUcwkVaHimoduke(svcKeiNo, kk0341Map);
				
					// サービス開始前番号追加のためのＳＯＤ発行
					hakkoSODhtelNoAdd(param, svcKeiNo, svcKeiUcwkNo, kk0341Map, himodukeUpdateFlg);
				}

			}
// ANK-1664-00-00対応 20140111 星野 ADD END
			
		// 利用サービス変更区分「継続」「変更」の場合
		}else{
			
			// 転居元に電話がない場合
			if (StringUtils.isEmpty(baseTelNo)) {
				// 番号追加
				addTelnoInfo();
				// 番ポ工事の登録
				addBmpo();
				
			}else{
// ANK-1664-00-00対応 20131231 星野 ADD END
				
				// 電話番号情報変更ＣＣのパラメータ取得
				HashMap<String, Object> userData = (HashMap<String, Object>)param.get("telno_info_chg");
				
// IT2-2014-0000089対応 20140125 星野 ADD START
				// 申込明細番号
				String mskm_dtl_no = (String)param.get("mskm_dtl_no");
				// サービス契約番号
				String svcKeiNo = (String)param.get("svc_kei_no");
				if(!StringUtils.isEmpty(svcKeiNo)){
					// EKK0081A010 サービス契約一意照会
					HashMap<String, Object> map = getEKK0081A010(svcKeiNo);
					String lastUpdDtm = (String)map.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
					//更新年月日時分秒
					userData.put("kk0081UpdDtm", lastUpdDtm);
				}
				//申込明細番号
				userData.put("mskm_dtl_no", mskm_dtl_no);

// IT2-2014-0000089対応 20140125 星野 ADD END
		
				// 電話番号情報変更ＣＣ
				JKKTelnoInfoChgCC telnoInfoChgCc = new JKKTelnoInfoChgCC();
		
				// 電話サービスの内訳追加
				telnoInfoChgCc.appendTelSvcKeiUcwk(keepSesHandle.get(), keepReqParam.get(), keepFixedText.get(), userData);
// ANK-1664-00-00対応 20131231 星野 ADD START
				
				// 番ポ工事の登録
				addBmpo();
			}
		}
// ANK-1664-00-00対応 20131231 星野 ADD END
	}

// ANK-1664-00-00対応 20140111 星野 ADD START
	private void sodTelnoChg() throws Throwable {
		HashMap<String, Object> paramMap = getRequestParameter();
		String useSvcChgDiv = (String)paramMap.get("use_svc_chg_div");	// 利用サービス変更区分（電話）
		String adchgTelNo = (String)paramMap.get("adchg_tel_no");		// 直近に入力された転居先の電話番号
		String dslFlg = (String)paramMap.get("dsl_flg");				// 解約有無
		String modifyTelNo = (String)paramMap.get("modify_tel_no");	// 今回訂正した転居先の電話番号
		String svcKeiNo = (String)paramMap.get("svc_kei_no");
		String chbfSvcKeiUcwkNo = (String)paramMap.get("after_svc_kei_ucwk_no");
		
		// 利用サービス変更区分「追加」の場合
		if(JKKAdchgConstCC.CD00849_ADD.equals(useSvcChgDiv)){
			// 番号解約ではない
			if (!"1".equals(dslFlg)) {
				// 前回の住変で電話あり
				if (!StringUtils.isEmpty(adchgTelNo) && !adchgTelNo.equals(modifyTelNo)) {
					
					// 払い出されたサービス契約内訳番号の取得
					String chafSvcKeiUcwkNo = getSvcKeiUcwkNo(svcKeiNo, modifyTelNo);


					// サービス開始前番号追加のためのＳＯＤ発行
					hakkoSODhtelNoChge(paramMap, svcKeiNo, chbfSvcKeiUcwkNo, chafSvcKeiUcwkNo);

				}
			}

		}
	}
// ANK-1664-00-00対応 20140111 星野 ADD END

	
// ANK-1664-00-00対応 20131231 星野 ADD START
	/**
	 * 解約実行ＣＣを呼出し、電話番号の解約（即日解約）を行う。
	 * サービス開始前の番号解約・番号変更のために使用
	 * @throws RequestParameterException
	 * @throws Throwable
	 */
	private void dslSvcKeiUcwk() throws RequestParameterException, Throwable {
		// 解約実行ＣＣのパラメータ取得
		HashMap<String, Object> param = getRequestParameter();
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get(KEY_TELNO_INFO_DSL);
		if(userData == null){
			return;
		}
		// パラメータにセット
		keepReqParam.get().setData(KEY_TELNO_INFO_DSL, userData);

		// 解約実行ＣＣ
		JKKDslRunCC dslRunCC = new JKKDslRunCC();

		// 電話番号解約
		dslRunCC.runDsl(keepSesHandle.get(), keepReqParam.get(), KEY_TELNO_INFO_DSL );
		
		
// IT1-2014-0000040対応 20140124 星野 ADD START
		String svcKeiNo = (String)param.get("svc_kei_no");			// サービス契約番号
	
		// 内訳を殺す場合はキャンセルの進捗がないと料金IFに拾ってもらえない
		addEKK1091D010(svcKeiNo, "1201");	// 進捗登録（キャンセル完了）
// IT1-2014-0000040対応 20140124 星野 ADD END
					
// OM-2014-0000680対応 20140216 星野 ADD START
		// サービス契約内訳番号取得
		String svcKeiUcwkNo = (String)param.get("after_svc_kei_ucwk_no");
		
		// EKK0191A010 サービス契約内訳＜ｅｏ光電話＞一意照会
		HashMap<String, Object> kk0191_a010_map = getEKK0191A010(svcKeiUcwkNo);
		
		String telNo = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.TELNO);
		String bmpUm = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.BMP_UM);
		
		// 番ポ番号の場合
		if (JKKSvcConst.BMP_UM_ARI.equals(bmpUm)) {
			// 電話番号マスタより削除　ANK-3021-00-00_電話番号M削除機能抑止対応により電話番号マスタ削除処理を削除
			telNoDelete(telNo);
		}
// OM-2014-0000680対応 20140216 星野 ADD END
	}
	
// ANK-1664-00-00対応 20140111 星野 ADD START
	private void hakkoSODhtelNoDsl(HashMap<String, Object> param, HashMap<String, Object> kk0191Map, HashMap<String, Object> kk0341Map) throws Throwable{
		
		HashMap sodTrgtData = editSodParamHtelNoDsl(param, kk0191Map, kk0341Map);
		
		keepReqParam.get().setData(KEY_ADCHG_HAKKO_SOD, sodTrgtData);
		
		JKKAdchgHakkoSODCC adchgSodCC = new JKKAdchgHakkoSODCC();
		adchgSodCC.hakkoSODhtelNoDsl(keepSesHandle.get(), keepReqParam.get(), KEY_ADCHG_HAKKO_SOD);
	}

	private HashMap editSodParamHtelNoDsl(HashMap<String, Object> param, HashMap<String, Object> kk0191Map, HashMap<String, Object> kk0341Map) throws Throwable{
		
		
		// 対象データマップ
		HashMap sodTrgtData = new HashMap<String, Object>();
		
		// サービスオーダ発行処理の引数を生成
		// 対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);

		// SODマップ
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		trgtDataList.add(sodMap);
		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, param.get("sysid"));
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, "00019");
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, param.get("svc_kei_no"));
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
		// サービス契約内訳情報
		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, kk0191Map.get(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO));
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, kk0191Map.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
		// オプションサービス契約情報
		sodMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, new HashMap<String, Object>());
		// 機器提供サービス契約情報
		HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_NO, kk0341Map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_GENE_ADD_DTM, kk0341Map.get(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.TAKNKIKI_MODEL_CD, kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.KIKI_CHG_NO, kk0341Map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktsvkeiInfo);

		// 機能コード
		sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		return sodTrgtData;
	}
// ANK-1664-00-00対応 20140111 星野 ADD END

	/**
	 * 電話番号追加ＣＣを呼出し、電話番号の追加を行う。
	 * @throws RequestParameterException
	 * @throws Throwable
	 */
	private void addTelnoInfo() throws RequestParameterException, Throwable {
		// 電話番号追加ＣＣのパラメータ取得
		HashMap<String, Object> param = getRequestParameter();
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get(KEY_TELNO_INFO_ADD);
		if(userData == null){
			return;
		}
		
		String svcKeiNo = (String)userData.get("svc_kei_no");
		if(!StringUtils.isEmpty(svcKeiNo)){
			// EKK0081A010 サービス契約一意照会
			HashMap<String, Object> map = getEKK0081A010(svcKeiNo);
			String lastUpdDtm = (String)map.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
			userData.put("kk0081_upd_dtm", lastUpdDtm);
		}
		
		// 仮登録フラグOFF（=本登録モード）で呼び出す場合、VAか多機能ルータの情報が必要
		String kariTourokuFlg = (String)userData.get("kari_touroku_flg");
		if("0".equals(kariTourokuFlg)){
			
			// VAか多機能ルータの機器提供サービス契約を取得
// ANK-1664-00-00対応 20140111 星野 MOD START
//			HashMap<String, Object> kk0341Map = getKiki(param, svcKeiNo);
			HashMap<String, Object> kk0341Map = getKiki((String)param.get("after_svc_kei_kaisen_ucwk_no"), (String)param.get("before_svc_kei_kaisen_ucwk_no"), svcKeiNo);
// ANK-1664-00-00対応 20140111 星野 MOD END
			
			if(kk0341Map != null){
				userData.put("kktk_svc_kei_no", kk0341Map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
				userData.put("va_kiki_chg_no", kk0341Map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
			}
		}
		
		// パラメータにセット
		keepReqParam.get().setData(KEY_TELNO_INFO_ADD, userData);

		// 電話番号追加ＣＣ
		JKKTelnoInfoAddCC telnoInfoAddCC = new JKKTelnoInfoAddCC();

		// 電話番号追加
		telnoInfoAddCC.executeHtelTelnoAdd(keepSesHandle.get(), keepReqParam.get(), KEY_TELNO_INFO_ADD );
	}
	
	/**
	 * 番ポ工事登録ＣＣを呼出し、番ポ工事の登録を行う。
	 * @throws RequestParameterException
	 * @throws Throwable
	 */
	private void addBmpo() throws RequestParameterException, Throwable {
		// 番ポ工事登録ＣＣのパラメータ取得
		HashMap<String, Object> param = getRequestParameter();
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get(KEY_BMPO_ADD);
		if(userData == null){
			return;
		}
		// パラメータにセット
		keepReqParam.get().setData(KEY_BMPO_ADD, userData);

		// 番ポ工事登録ＣＣ
		JKKBmpKojiAddCC bmpKojiAddCC = new JKKBmpKojiAddCC();

		// 番ポ工事登録
		bmpKojiAddCC.bmpKojiAdd(keepSesHandle.get(), keepReqParam.get(), KEY_BMPO_ADD );
	}
	
// ANK-1664-00-00対応 20140111 星野 ADD START
	private String updateSvcKeiUcwkVaHimoduke(String svcKeiNo,
			HashMap<String, Object> kk0341Map)
			throws RequestParameterException, Throwable {
		HashMap<String, Object> vaChgMap = new HashMap<String, Object>();
		vaChgMap.put("svc_kei_no", svcKeiNo);
		vaChgMap.put("kktk_svc_kei_no", kk0341Map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
// OM-2014-0001716対応 20140503 星野 ADD START
		vaChgMap.put("mskm_dtl_no", (String)getRequestParameter().get("mskm_dtl_no"));
// OM-2014-0001716対応 20140503 星野 ADD END
		
		// パラメータにセット
		keepReqParam.get().setData(KEY_VA_CHG, vaChgMap);

		
		JKKAdchgVaChgCC vaChgCC = new JKKAdchgVaChgCC();
		vaChgCC.updateSvcKeiUcwkVaHimoduke(keepSesHandle.get(), keepReqParam.get(), KEY_VA_CHG);
		
		String himodukeUpdateFlg = (String)vaChgMap.get("himodukeUpdateFlg");
		return himodukeUpdateFlg;
	}
	
	private void hakkoSODhtelNoAdd(
		HashMap<String, Object> param,
		String svcKeiNo, 
		String svcKeiUcwkNo,
		HashMap<String, Object> kk0341Map, 
		String himodukeUpdateFlg
	)throws Throwable{
		
		HashMap<String, Object> hakkoSodCcTrgtData = 
			editSodParamHtelNoAdd(param, svcKeiNo, svcKeiUcwkNo, kk0341Map, himodukeUpdateFlg);
		
		keepReqParam.get().setData(KEY_ADCHG_HAKKO_SOD, hakkoSodCcTrgtData);
		
		JKKAdchgHakkoSODCC adchgSodCC = new JKKAdchgHakkoSODCC();
		adchgSodCC.hakkoSODhtelNoAdd(keepSesHandle.get(), keepReqParam.get(), KEY_ADCHG_HAKKO_SOD);
	}

	private HashMap<String, Object> editSodParamHtelNoAdd(
		HashMap<String, Object> param, 
		String svcKeiNo,
		String svcKeiUcwkNo, 
		HashMap<String, Object> kk0341Map,
		String himodukeUpdateFlg
	) throws Throwable {
		HashMap<String, Object> kk0191Map = getEKK0191A010(svcKeiUcwkNo);
		// 入力マップを生成
		
		// 対象データマップ
		HashMap<String, Object> hakkoSodCcTrgtData = new HashMap<String, Object>();
		// 対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		hakkoSodCcTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
		// 機能コード
		hakkoSodCcTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		
		// SODマップ
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, param.get("sysid"));
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, "00019");
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, svcKeiNo);
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
		// サービス契約内訳情報
		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, kk0191Map.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
		// オプションサービス契約情報
		sodMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, new HashMap<String, Object>());
		// 機器提供サービス契約情報
		HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_NO, kk0341Map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_GENE_ADD_DTM, kk0341Map.get(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.TAKNKIKI_MODEL_CD, kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.KIKI_CHG_NO, kk0341Map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
		
		// VA機器返品フラグ
		sodMap.put(JKKHakkoSODConstCC.VA_HENPIN_FLG, (Boolean)("1".equals(himodukeUpdateFlg)) );
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktsvkeiInfo);

		trgtDataList.add(sodMap);
		return hakkoSodCcTrgtData;
	}
	
	private void hakkoSODhtelNoChge(
			HashMap<String, Object> param,
			String svcKeiNo, 
			String chbfSvcKeiUcwkNo,
			String chafSvcKeiUcwkNo
		)throws Throwable{
			
			HashMap<String, Object> hakkoSodCcTrgtData = 
				editSodParamHtelNoChge(param, svcKeiNo, chbfSvcKeiUcwkNo, chafSvcKeiUcwkNo);
			
			keepReqParam.get().setData(KEY_ADCHG_HAKKO_SOD, hakkoSodCcTrgtData);
			
			JKKAdchgHakkoSODCC adchgSodCC = new JKKAdchgHakkoSODCC();
			adchgSodCC.hakkoSODhtelNoChge(keepSesHandle.get(), keepReqParam.get(), KEY_ADCHG_HAKKO_SOD);
		}

	
	private HashMap<String, Object> editSodParamHtelNoChge(
		HashMap<String, Object> param, 
		String svcKeiNo,
		String chbfSvcKeiUcwkNo,
		String chafSvcKeiUcwkNo
	) throws Throwable {
		
		HashMap<String, Object> chbfKk0191Map = getEKK0191A010(chbfSvcKeiUcwkNo);
		HashMap<String, Object> chafKk0191Map = getEKK0191A010(chafSvcKeiUcwkNo);
		HashMap<String, Object> kk0341Map = 
			getRegalKiki(chbfKk0191Map, (String)param.get("after_svc_kei_kaisen_ucwk_no"), (String)param.get("before_svc_kei_kaisen_ucwk_no"), svcKeiNo);
		// 入力マップを生成
		
		// 対象データマップ
		HashMap<String, Object> hakkoSodCcTrgtData = new HashMap<String, Object>();
		// 対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		hakkoSodCcTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
		// 機能コード
		hakkoSodCcTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		
		// SODマップ
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, param.get("sysid"));
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, "00019");
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, svcKeiNo);
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
		// サービス契約内訳情報
		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
		svcKeiUcwkInfo.put("moto_svc_kei_ucwk_no", chbfSvcKeiUcwkNo);
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHBF_SVC_KEI_UCWK_GENE_ADD_DTM, chbfKk0191Map.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, chafSvcKeiUcwkNo);
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, chafKk0191Map.get(EKK0191A010CBSMsg1List.GENE_ADD_DTM));

		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
		// オプションサービス契約情報
		sodMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, new HashMap<String, Object>());
		// 機器提供サービス契約情報
		HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_NO, kk0341Map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_GENE_ADD_DTM, kk0341Map.get(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.TAKNKIKI_MODEL_CD, kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.KIKI_CHG_NO, kk0341Map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
// IT1-2014-0000036 2014.01.23 Y.Kanata ADD START
// JKKAdchgHakkoSODCCにて、SOD発行内容を識別するために必要なので追加
// IT1-2024-0000037 Modify START
//		if ("R0".equals(kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD))) {
		if (KIKIOP_OYA_KIKI_TKSBT_LIST.contains(kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD))) {
// IT1-2024-0000037 Modify END
			kktsvkeiInfo.put("takino_flg", "1");
		} else {
			kktsvkeiInfo.put("takino_flg", "0");
		}
// IT1-2014-0000036 2014.01.23 Y.Kanata ADD END
		
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktsvkeiInfo);

		trgtDataList.add(sodMap);
		return hakkoSodCcTrgtData;
	}

// ANK-1664-00-00対応 20140111 星野 ADD END
	
// IT1-2014-0000023対応 20140119 星野 ADD START
	/** 緊急通報ＳＯＤの発行 */
	private void hakkoSODForECS(
		HashMap<String, Object> param,
		String svcKeiNo, 
		String svcKeiUcwkNo,
		String chbfSvcKeiUcwkGeneAddDtm,
		String chafSvcKeiUcwkGeneAddDtm
	)throws Throwable{
		
		HashMap<String, Object> hakkoSodCcTrgtData = 
			editSodParamForECS(param, svcKeiNo, svcKeiUcwkNo, chbfSvcKeiUcwkGeneAddDtm, chafSvcKeiUcwkGeneAddDtm);
		
		keepReqParam.get().setData(KEY_ADCHG_HAKKO_SOD, hakkoSodCcTrgtData);
		
		JKKAdchgHakkoSODCC adchgSodCC = new JKKAdchgHakkoSODCC();
		adchgSodCC.hakkoSODAdInfChg(keepSesHandle.get(), keepReqParam.get(), KEY_ADCHG_HAKKO_SOD);
	}
	
	private HashMap<String, Object> editSodParamForECS(
		HashMap<String, Object> param, 
		String svcKeiNo,
		String svcKeiUcwkNo,
		String chbfSvcKeiUcwkGeneAddDtm,
		String chafSvcKeiUcwkGeneAddDtm
	) throws Throwable {
		
		HashMap<String, Object> trgt_data = new HashMap<String, Object>();
		ArrayList<HashMap<String, Object>> trgt_data_list = new ArrayList<HashMap<String,Object>>();
		HashMap<String, Object> trgt_data_list_element = new HashMap<String, Object>();
		HashMap<String, Object> sod_kihon_info = new HashMap<String, Object>();
		HashMap<String, Object> svc_kei_info = new HashMap<String, Object>();
		HashMap<String, Object> svc_kei_ucwk_info = new HashMap<String, Object>();
		
		//--サービスオーダ発行データの生成
		//サービスオーダ発行データ
		// 共通情報のマッピング
		trgt_data.put("func_code", JPCModelConstant.FUNC_CD_1);

		//対象データリスト
		trgt_data.put("trgt_data_list", trgt_data_list);
		
		//SODマップ
		trgt_data_list.add(trgt_data_list_element);
		
		//SOD基本情報
		trgt_data_list_element.put("sod_kihon_info", sod_kihon_info);
		
		//サービス契約情報
		trgt_data_list_element.put("svc_kei_info", svc_kei_info);
		
		//サービス契約内訳情報
		trgt_data_list_element.put("svc_kei_ucwk_info", svc_kei_ucwk_info);
		
		
		//SOD基本情報
		//sysid
		sod_kihon_info.put("sysid", param.get("sysid"));
		//異動区分
		sod_kihon_info.put("ido_div", "00019");
		
		//--サービス契約情報
		//サービス契約番号
		svc_kei_info.put("svc_kei_no", svcKeiNo);
		
		//--サービス契約内訳情報
		//サービス契約内訳番号
		svc_kei_ucwk_info.put("svc_kei_ucwk_no", svcKeiUcwkNo);
		//変更前サービス契約内訳世代登録年月日時分秒
		svc_kei_ucwk_info.put("chbf_svc_kei_ucwk_gene_add_dtm",chbfSvcKeiUcwkGeneAddDtm);
		//変更後サービス契約内訳世代登録年月日時分秒
		svc_kei_ucwk_info.put("chaf_svc_kei_ucwk_gene_add_dtm",chafSvcKeiUcwkGeneAddDtm);
		
		return trgt_data;

	}
		
// IT1-2014-0000023対応 20140119 星野 ADD END
// ANK-1664-00-00対応 20140110 星野 ADD START
	/**
	 * 同番移転登録ＣＣを呼出し、同番移転の登録を行う。
	 * @throws RequestParameterException
	 * @throws Throwable
	 */
	private void addDoban() throws RequestParameterException, Throwable {
		// 同番移転登録ＣＣのパラメータ取得
		HashMap<String, Object> param = getRequestParameter();
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get(KEY_DOBAN_INFO_ADD);
		if(userData == null){
			return;
		}
		// パラメータにセット
		keepReqParam.get().setData(KEY_DOBAN_INFO_ADD, userData);

		// 同番移転登録ＣＣ
		JKKAdchgDobanitenAddCC dobanitenAddCC = new JKKAdchgDobanitenAddCC();

		// 同番移転登録
		dobanitenAddCC.adchgDobanitenAdd(keepSesHandle.get(), keepReqParam.get(), KEY_DOBAN_INFO_ADD );
	}
	
	/**
	 * 同番移転取消依頼ＳＣを呼出し、同番移転の取消を行う。
	 * @throws RequestParameterException
	 * @throws Throwable
	 */
	private void dslDoban() throws RequestParameterException, Throwable {
		// 同番移転取消依頼ＳＣのパラメータ取得
		HashMap<String, Object> param = getRequestParameter();
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get(KEY_DOBAN_INFO_DSL);
		if(userData == null){
			return;
		}
		
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 同番移転取消依頼
		reqMap = mapper.setETU0021C030( keepReqParam.get(), keepFixedText.get(), userData );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> tu0021_c030_map = mapper.getETU0021C030( keepReqParam.get(), keepFixedText.get(), resMap );
		mapper.scResultCheck( keepReqParam.get() );
	}
// ANK-1664-00-00対応 20140110 星野 ADD END
	
// ANK-1664-00-00対応 20140111 星野 ADD START
	
// ANK-1664-00-00対応 20140111 星野 ADD END
	public HashMap<String, Object> getKikiPublic(
		SessionHandle handle, 
		IRequestParameterReadWrite param, 
		String fixedText, 
		String afterSvcKeiKaisenUcwkNo, 
		String beforeSvcKeiKaisenUcwkNo, 
		String svcKeiNo
	) throws Exception
	{
		try {
			/** リソース保持 */
			keepSesHandle.set( handle );	// セッションハンドル
			keepReqParam.set( param );		// リクエストパラメータ
			keepFixedText.set( fixedText );	// FixedText
			
			return getKiki(afterSvcKeiKaisenUcwkNo, beforeSvcKeiKaisenUcwkNo, svcKeiNo);

		} finally {
			/** リソース開放 */
			if (keepSesHandle.get() != null) {
				keepSesHandle.remove();		// セッションハンドル開放
			}
			if (keepReqParam.get() != null) {
				keepReqParam.remove();		// リクエストパラメータ開放
			}
			if (keepFixedText.get() != null) {
				keepFixedText.remove();		// FixedText開放
			}
		}

	}
	
// ANK-1664-00-00対応 20140111 星野 MOD START
//	private HashMap<String, Object> getKiki(HashMap<String, Object> param, String svcKeiNo) throws Exception
	private HashMap<String, Object> getKiki(String afterSvcKeiKaisenUcwkNo, String beforeSvcKeiKaisenUcwkNo, String svcKeiNo) throws Exception
// ANK-1664-00-00対応 20140111 星野 MOD END
	{
		HashMap<String, Object> kk0341Map = null;
		
		// 転居先回線内訳番号
// ANK-1664-00-00対応 20140111 星野 MOD START
//		String svcKeiKaisenUcwkNo = (String)param.get("after_svc_kei_kaisen_ucwk_no");
//		kk0341Map = getKikiKaisen(svcKeiKaisenUcwkNo);
		kk0341Map = getKikiKaisen(afterSvcKeiKaisenUcwkNo);
// ANK-1664-00-00対応 20140111 星野 MOD END
		if(kk0341Map != null){
			return kk0341Map;
		}
		
		
		// 転居元サービス契約回線内訳番号]
// ANK-1664-00-00対応 20140111 星野 MOD START
//		String svcKeiKaisenUcwkNoBf = (String)param.get("before_svc_kei_kaisen_ucwk_no");
//		kk0341Map = getKikiKaisen(svcKeiKaisenUcwkNoBf);
		kk0341Map = getKikiKaisen(beforeSvcKeiKaisenUcwkNo);
// ANK-1664-00-00対応 20140111 星野 MOD END
		if(kk0341Map != null){
			return kk0341Map;
		}
		
		
		// サービス契約
		kk0341Map = getKikiSvc(svcKeiNo);
		return kk0341Map;
	}
	
// ANK-1664-00-00対応 20140111 星野 ADD START
	private HashMap<String, Object> getRegalKiki(HashMap<String, Object> kk0191Map, String afterSvcKeiKaisenUcwkNo, String beforeSvcKeiKaisenUcwkNo, String svcKeiNo) throws Exception
		{
			HashMap<String, Object> kk0341Map = null;
			
			// 転居先回線内訳番号
			kk0341Map = getKikiKaisen(afterSvcKeiKaisenUcwkNo);
			if(kk0341Map != null && isRegalKiki(kk0191Map, kk0341Map)){
				return kk0341Map;
			}
			
			
			// 転居元サービス契約回線内訳番号]
			kk0341Map = getKikiKaisen(beforeSvcKeiKaisenUcwkNo);
			if(kk0341Map != null && isRegalKiki(kk0191Map, kk0341Map)){
				return kk0341Map;
			}
			
			
			// サービス契約
			kk0341Map = getKikiSvc(svcKeiNo);
			if(kk0341Map != null && isRegalKiki(kk0191Map, kk0341Map)){
				return kk0341Map;
			}
			
			return null;
		}
	
	private boolean isRegalKiki(HashMap<String, Object> kk0191Map, HashMap<String, Object> kk0341Map) {
		
		if(kk0191Map != null && kk0341Map != null){
			// 内訳からVA型式とVA変更番号を取得
			String vaTaknkikiModelCd = (String)kk0191Map.get(EKK0191A010CBSMsg1List.VA_TAKNKIKI_MODEL_CD);
			String vaKikiChgNo = (String)kk0191Map.get(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO);
			
			// 機器から型式と機器変更番号を取得
			String taknKikiModelCd = (String)kk0341Map.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD);
			String kikiChgNo = (String)kk0341Map.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
			
			if(
				(
					( !StringUtils.isEmpty(taknKikiModelCd) && taknKikiModelCd.equals(vaTaknkikiModelCd) )
					||
					( StringUtils.isEmpty(taknKikiModelCd) && StringUtils.isEmpty(vaTaknkikiModelCd) )
				) 
				&&
				( !StringUtils.isEmpty(kikiChgNo) && kikiChgNo.equals(vaKikiChgNo) )
			){
				return true;
			}
		}
		return false;
	}

// ANK-1664-00-00対応 20140111 星野 ADD END


	private HashMap<String, Object> getKikiKaisen(String svcKeiKaisenUcwkNo) throws Exception 
	{
		
		HashMap<String, Object> kk0341Map = null;
		
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		if(!StringUtils.isEmpty(svcKeiKaisenUcwkNo)){
			condMap.clear();
			condMap.put("key_svc_kei_kaisen_ucwk_no", svcKeiKaisenUcwkNo);
			reqMap = mapper.setEKK0341B504( keepReqParam.get(), keepFixedText.get(), condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			List<HashMap<String, Object>> kk0341_b504_map_list = mapper.getEKK0341B504( keepReqParam.get(), keepFixedText.get(), resMap );
			mapper.scResultCheck( keepReqParam.get() );
			
			for(HashMap<String, Object> kk0341_b504_map : kk0341_b504_map_list){
				// 機器提供サービス契約一意紹介
				condMap.clear();
				// 転居先の機器情報を取得
				condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String)kk0341_b504_map.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_NO));
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE,(String) JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				reqMap = mapper.setEKK0341B032( keepReqParam.get(), keepFixedText.get(), condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				List<HashMap<String, Object>> kk0341_b032_map_af = mapper.getEKK0341B032( keepReqParam.get(), keepFixedText.get(), resMap );
				mapper.scResultCheck( keepReqParam.get() );
				
				HashMap<String, Object> kk0341_a010_map = null;
				if (kk0341_b032_map_af.size() > 0) {
					kk0341_a010_map = kk0341_b032_map_af.get(0);
				}
				
// ANK-1664-00-00対応 20140110 星野 ADD START
				// 解約済・キャンセル済は対象外
				String kktkSvcKeiStat = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat)){
					continue;
				}
// ANK-1664-00-00対応 20140110 星野 ADD END
				
				String taknKikiSbtCd = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
// IT1-2024-0000037 Modify START 
//				if("50".equals(taknKikiSbtCd) || "R0".equals(taknKikiSbtCd)){
				if("50".equals(taknKikiSbtCd) || KIKIOP_OYA_KIKI_TKSBT_LIST.contains(taknKikiSbtCd)){
// IT1-2024-0000037 Modify END 
					kk0341Map = kk0341_a010_map;
					break;
				}
			}
		}
		return kk0341Map;
	}
	
	private HashMap<String, Object> getKikiSvc(String svcKeiNo) throws Exception 
	{
		
		HashMap<String, Object> kk0341Map = null;
		
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		if(!StringUtils.isEmpty(svcKeiNo)){
			// ・EKK0341B002 機器提供サービス契約一覧照会（サービス契約番号）
			condMap.clear();
			condMap.put("cond_key_svc_kei_no", svcKeiNo);
			reqMap = mapper.setEKK0341B002( keepReqParam.get(), keepFixedText.get(), condMap );
			resMap = scCall.run(reqMap, keepSesHandle.get());
			List<HashMap<String, Object>>kk0341_b002_map_list = mapper.getEKK0341B002( keepReqParam.get(), keepFixedText.get(), resMap );
			mapper.scResultCheck( keepReqParam.get() );
			
			for( HashMap<String, Object> kk0341_b002_map : kk0341_b002_map_list ){
				// 機器提供サービス契約一意紹介
				condMap.clear();
				// 転居先の機器情報を取得
				condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String)kk0341_b002_map.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));
				condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE,(String) JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
				reqMap = mapper.setEKK0341B032( keepReqParam.get(), keepFixedText.get(), condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				List<HashMap<String, Object>> kk0341_b032_map_af = mapper.getEKK0341B032( keepReqParam.get(), keepFixedText.get(), resMap );
				mapper.scResultCheck( keepReqParam.get() );
				
				HashMap<String, Object> kk0341_a010_map = null;
				if (kk0341_b032_map_af.size() > 0) {
					kk0341_a010_map = kk0341_b032_map_af.get(0);
				}
				
// ANK-1664-00-00対応 20140110 星野 ADD START
				// 解約済・キャンセル済は対象外
				String kktkSvcKeiStat = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat)){
					continue;
				}
// ANK-1664-00-00対応 20140110 星野 ADD END
				
				String taknKikiSbtCd = (String)kk0341_a010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
				// IT1-2024-0000037 多機能ルータは回線機器なのでこのループでは取得できない。（HGW対応不要）
				if("50".equals(taknKikiSbtCd) || "R0".equals(taknKikiSbtCd)){
					kk0341Map = kk0341_a010_map;
					break;
				}
			}
		}
		return kk0341Map;
	}

// ANK-1664-00-00対応 20131231 星野 ADD END
	
// ANK-1664-00-00対応 20140107 星野 ADD START
	/**
	 * トーキ情報設定処理
	 * @throws Throwable
	 */
	private void setTokiInfo() throws Throwable {
		HashMap<String, Object> param = getRequestParameter();
		String beforeSvcKeiUcwkNo = (String)param.get("before_svc_kei_ucwk_no");	// 転居元
		
		HashMap<String, Object> userData = (HashMap<String, Object>)param.get(KEY_TELNO_INFO_TOKI);
		if(userData == null){
			return;
		}
		HashMap EKK0191C011Map = (HashMap)userData.get("EKK0191C011");
		if(EKK0191C011Map == null){
			return;
		}
		
		if(StringUtils.isEmpty(beforeSvcKeiUcwkNo)){
			return;
		}
		
		// EKK0191A010 サービス契約内訳＜ｅｏ光電話＞一意照会
		HashMap<String, Object> kk0191_a010_map = getEKK0191A010(beforeSvcKeiUcwkNo);
		if(kk0191_a010_map==null || kk0191_a010_map.isEmpty()){
			return;
		}
		
		String dsl_pause_toki_kibo_um = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_KIBO_UM);
		String dsl_pause_toki_sta_ymd = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_STA_YMD);
		String itens_opaf_toki_kibo_um = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_KIBO_UM);
		String itens_opaf_toki_sta_ymd = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_STA_YMD);
		String param_dsl_pause_toki_kibo_um = (String)EKK0191C011Map.get("dsl_pause_toki_kibo_um");
		String param_itens_opaf_toki_kibo_um = (String)EKK0191C011Map.get("itens_opaf_toki_kibo_um");
		
		// 開通前トーキ・開通後トーキともに無⇒無の場合、更新不要
		if( isTokiKiboNasi(dsl_pause_toki_kibo_um) && isTokiKiboNasi(param_dsl_pause_toki_kibo_um)
			&& isTokiKiboNasi(itens_opaf_toki_kibo_um) && isTokiKiboNasi(param_itens_opaf_toki_kibo_um)
		){
			return;
		}
		
		// 運用日付
		String opeDate = JCCBPCommon.getOpeDate(null);
		
		// 開通前トーキが無⇒無の場合
		// 開通前トーキが有⇒有 かつ 開始済の場合
		if( ( isTokiKiboNasi(dsl_pause_toki_kibo_um) && isTokiKiboNasi(param_dsl_pause_toki_kibo_um) ) 
			|| ( !isTokiKiboNasi(dsl_pause_toki_kibo_um) && !isTokiKiboNasi(param_dsl_pause_toki_kibo_um) 
				 && !StringUtils.isEmpty(dsl_pause_toki_sta_ymd)
				 && opeDate.compareTo(dsl_pause_toki_sta_ymd) <= 0
			   )
		){
			// 更新対象外とするため一意照会の結果を転記
			editDslPauseTokiNoUpd(EKK0191C011Map, kk0191_a010_map);
		}
		
		// 開通後トーキが無⇒無の場合
		// 開通後トーキが有⇒有 かつ 開始済の場合
		if( ( isTokiKiboNasi(itens_opaf_toki_kibo_um) && isTokiKiboNasi(param_itens_opaf_toki_kibo_um) ) 
			|| ( !isTokiKiboNasi(itens_opaf_toki_kibo_um) && !isTokiKiboNasi(param_itens_opaf_toki_kibo_um)
				 && !StringUtils.isEmpty(itens_opaf_toki_sta_ymd)
				 && opeDate.compareTo(itens_opaf_toki_sta_ymd) <= 0
			   )
		){
			// 更新対象外とするため一意照会の結果を転記
			editItnsOpafTokiNoUpd(EKK0191C011Map, kk0191_a010_map);
		}
		
		//更新年月日時分秒(更新前)
		userData.put("upd_dtm_bf", kk0191_a010_map.get(EKK0191A010CBSMsg1List.LAST_UPD_DTM));
		//更新年月日時分秒(更新前)
		EKK0191C011Map.put("upd_dtm_bf", kk0191_a010_map.get(EKK0191A010CBSMsg1List.LAST_UPD_DTM));
		
		// 開通後トーキ転送先内訳番号の編集
		editItnsOpafTokiTssSvkuwno(userData, EKK0191C011Map);
		
		// パラメータにセット
		keepReqParam.get().setData(KEY_TELNO_INFO_TOKI, userData);

		// 移転トーキ情報設定ＣＣ
		JKKItenTokiInfoSetteiCC itenTokiCC = new JKKItenTokiInfoSetteiCC();

		// 移転トーキ情報設定
// IT1-2014-0000023対応 20140119 星野 MOD START
//		itenTokiCC.itenTokiInfoSettei(keepSesHandle.get(), keepReqParam.get(), KEY_BMPO_ADD );
		itenTokiCC.itenTokiInfoSettei(keepSesHandle.get(), keepReqParam.get(), KEY_TELNO_INFO_TOKI );
// IT1-2014-0000023対応 20140119 星野 MOD END
	}

	private boolean isTokiKiboNasi(String dsl_pause_toki_kibo_um) {
		return StringUtils.isEmpty(dsl_pause_toki_kibo_um) || "0".equals(dsl_pause_toki_kibo_um);
	}
	
	private void editDslPauseTokiNoUpd(HashMap EKK0191C011Map, HashMap<String, Object> kk0191_a010_map) 
	{
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ希望有無 → 解約・休止トーキ希望有無
		EKK0191C011Map.put("dsl_pause_toki_kibo_um", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_KIBO_UM));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ種別コード → 解約・休止トーキ種別コード
		EKK0191C011Map.put("dsl_pause_toki_sbt_cd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_SBT_CD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ転送先電話番号 → 解約・休止トーキ転送先電話番号
		EKK0191C011Map.put("dsl_pause_toki_tss_tln", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_TSS_TLN));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ開始年月日 → 解約・休止トーキ開始年月日
		EKK0191C011Map.put("dsl_pause_toki_sta_ymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_STA_YMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ終了予定年月日 → 解約・休止トーキ終了予定年月日
		EKK0191C011Map.put("dsl_pause_toki_end_rsymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_END_RSYMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ終了年月日 → 解約・休止トーキ終了年月日
		EKK0191C011Map.put("dsl_pause_toki_end_ymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_END_YMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.休止トーキ終了種別コード → 休止トーキ終了種別コード
		EKK0191C011Map.put("pause_toki_end_sbt_cd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.PAUSE_TOKI_END_SBT_CD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ登録コード → 解約・休止トーキ登録コード
		EKK0191C011Map.put("dsl_pause_toki_add_cd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_ADD_CD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ開始予定年月日 → 解約・休止トーキ開始予定年月日
		EKK0191C011Map.put("dsl_pause_toki_sta_rsymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_STA_RSYMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.解約・休止トーキ転送先サービス契約内訳番号 → 解約・休止トーキ転送先サービス契約内訳番号
		EKK0191C011Map.put("dsl_pause_toki_tss_svkuwno", kk0191_a010_map.get(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_TSS_SVKUWNO));
	}

	private void editItnsOpafTokiNoUpd(HashMap EKK0191C011Map, HashMap<String, Object> kk0191_a010_map) 
	{
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ登録コード → 移転先開通後トーキ登録コード
		EKK0191C011Map.put("itens_opaf_toki_add_cd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_ADD_CD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ種別コード → 移転先開通後トーキ種別コード
		EKK0191C011Map.put("itens_opaf_toki_sbt_cd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_SBT_CD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ希望有無 → 移転先開通後トーキ希望有無
		EKK0191C011Map.put("itens_opaf_toki_kibo_um", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_KIBO_UM));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ開始予定年月日 → 移転先開通後トーキ開始予定年月日
		EKK0191C011Map.put("itens_opaf_toki_sta_rsymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_STA_RSYMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ開始年月日 → 移転先開通後トーキ開始年月日
		EKK0191C011Map.put("itens_opaf_toki_sta_ymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_STA_YMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ終了予定年月日 → 移転先開通後トーキ終了予定年月日
		EKK0191C011Map.put("itens_opaf_toki_end_rsymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_END_RSYMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ終了年月日 → 移転先開通後トーキ終了年月日
		EKK0191C011Map.put("itens_opaf_toki_end_ymd", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_END_YMD));
		// サービス契約内訳＜ｅｏ光電話＞移転トーキ設定.移転先開通後トーキ転送先サービス契約内訳番号 → 移転先開通後トーキ転送先サービス契約内訳番号
		EKK0191C011Map.put("itns_opaf_toki_tss_svkuwno", kk0191_a010_map.get(EKK0191A010CBSMsg1List.ITNS_OPAF_TOKI_TSS_SVKUWNO));
	}
	
	private void editItnsOpafTokiTssSvkuwno(HashMap<String, Object> userData, HashMap EKK0191C011Map) throws Throwable 
	{
		String itns_opaf_toki_tss_tln = (String)userData.get("itns_opaf_toki_tss_tln");
		if(!StringUtils.isEmpty(itns_opaf_toki_tss_tln)){
			// 移転先開通後トーキ転送先サービス契約内訳番号
			String tss_svkuwno = null;
			String svc_kei_no_tel = (String)userData.get("svc_kei_no_tel");
			if(StringUtils.isEmpty(tss_svkuwno) && !StringUtils.isEmpty(svc_kei_no_tel)){
				// サービス契約内訳番号を取得
				tss_svkuwno = getSvcKeiUcwkNo(svc_kei_no_tel, itns_opaf_toki_tss_tln);
			}
			if(!StringUtils.isEmpty(tss_svkuwno)){
				EKK0191C011Map.put("itns_opaf_toki_tss_svkuwno", tss_svkuwno);
			}
		}
	}

	private String getSvcKeiUcwkNo(String svc_kei_no, String telno) throws Throwable{
		
		/** 照会 事前準備 */
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svc_kei_no);
		reqMap = mapper.setEKK0161B004(keepReqParam.get(), keepFixedText.get(), condMap, JPCModelConstant.FUNC_CD_3);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> kk0161_b004 = mapper.getEKK0161B004(keepReqParam.get(), keepFixedText.get(), resMap);
		mapper.scResultCheck(keepReqParam.get());
		
		// サービス契約内訳番号を初期化
		String svc_kei_ucwk_no = "";
		for(HashMap<String, Object> kk0161_b004_map : kk0161_b004){
			svc_kei_ucwk_no = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			
			// キャンセル済・解約済は処理対象外
			String ucwkStat = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if("910".equals(ucwkStat) || "920".equals(ucwkStat)){
				continue;
			}
			
			HashMap<String, Object> kk0191_a010 = getEKK0191A010(svc_kei_ucwk_no);
			
			
			// 電話番号が一致する場合
			if (kk0191_a010 != null && !kk0191_a010.isEmpty() && telno.equals( kk0191_a010.get(EKK0191A010CBSMsg1List.TELNO) )) {
				// そのサービス契約内訳番号を使う
				break;
			}
		}
		return svc_kei_ucwk_no;
	}
// ANK-1664-00-00対応 20140107 星野 ADD END
	
// IT1-2014-0000040対応 20140124 星野 ADD START
	private void idoRsv() throws Throwable{
		
		HashMap<String, Object> param = getRequestParameter();
		// 利用サービス変更区分（電話）
		String useSvcChgDiv = (String)param.get("use_svc_chg_div");	
		// サービス契約番号
		String svcKeiNo = (String)param.get("svc_kei_no");
		// 提供方式契約番号
		String tk_hoshiki_kei_no = (String)param.get("tk_hoshiki_kei_no");
		// 申込明細番号
		String mskm_dtl_no = (String)param.get("mskm_dtl_no");
		// 料金グループ
		String prc_grp_cd = (String)param.get("prc_grp_cd");
		// 料金コース
		String pcrs_cd = (String)param.get("pcrs_cd");
		// 料金プラン
		String pplan_cd = (String)param.get("pplan_cd");
		// 前回電話料金プラン
		String reg_pplan_cd = (String)param.get("reg_pplan_cd");
		
		
		// 利用サービス変更区分「追加」の場合
		if(JKKAdchgConstCC.CD00849_ADD.equals(useSvcChgDiv)){
			// 異動予約は登録しないので処理不要
			return;
		}

		if(StringUtils.isEmpty(reg_pplan_cd) || StringUtils.isEmpty(pplan_cd)){
			return;
		}
		
		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		JKKAdchgCmnLogicCC lclCmnLogic = new JKKAdchgCmnLogicCC(keepSesHandle.get());
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		
		// 番号数が変わった場合
		if(
			( reg_pplan_cd.indexOf("A32") > -1 && pplan_cd.indexOf("A31") > -1 )
			||
			( reg_pplan_cd.indexOf("A31") > -1 && pplan_cd.indexOf("A32") > -1 )
		){
			// 前回の異動予約を取消（なかったら空振り）
			idoRsvCncl(svcKeiNo, mskm_dtl_no);
			
			// コース変更の異動予約を登録
			// EKK0081A010_サービス契約一意照会
			HashMap<String, Object> kk0081_a010_map = 
				lclCmnLogic.getEKK0081A010( keepReqParam.get(), mapper, keepFixedText.get(), scCall, svcKeiNo, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
			String tk_hoshiki_kei_no_bf = (String)kk0081_a010_map.get(EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO);
			// 変更フラグ
			boolean isChg;
			// 変更前・後に差異があれば
			if( !tk_hoshiki_kei_no_bf.equals(tk_hoshiki_kei_no) ){
				// 電話の場合コース変更が存在しないので、変更前後に差異があればtrue
				isChg = true;
			
			// 差異がなければfalse
			}else{
				isChg = false;
			}
			
			if(isChg){
				
				/** サービス契約料金プラン変更 */
				// kk0081_a010_map.申込明細番号をparam.申込明細番号に差替
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.MSKM_DTL_NO, mskm_dtl_no );
				// kk0081_a010_map.異動区分をparam.異動区分に差替
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST );
				// kk0081_a010_map.提供方式契約番号をparam.提供方式契約番号に差替
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO, tk_hoshiki_kei_no );
				// 料金グループ
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.PRC_GRP_CD, prc_grp_cd );
				// 料金コース
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.PCRS_CD, pcrs_cd );
				// 料金プラン
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.PPLAN_CD, pplan_cd );
				// 予約適用年月日   "20991231"(固定)を設定
				kk0081_a010_map.put( EKK0081A010CBSMsg1List.RSV_APLY_YMD, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD );
				// 最終更新年月日時分秒
				kk0081_a010_map.put( JKKAdchgMapperCC.UPD_DT_SVC_KEI_UPD_DTM_BEF, (String) kk0081_a010_map.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM) );
				
				// ・EKK0081C110  サービス契約料金プラン変更
				HashMap<String, Object> reqMap = mapper.setEKK0081C110( keepReqParam.get(), keepFixedText.get(), kk0081_a010_map );
				Map<?, ?> resMap = scCall.run( reqMap, keepSesHandle.get() );
				HashMap<String, Object> kk0081_c110_map = mapper.getEKK0081C110( keepReqParam.get(), keepFixedText.get(), resMap );
				mapper.scResultCheck( keepReqParam.get() );

			}

		}
	}

	private void idoRsvCncl(String svcKeiNo, String mskm_dtl_no) throws Throwable {
		HashMap<String, Object> cancelMap = new HashMap<String, Object>();
		cancelMap.put("key_ido_div", JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);		// 異動区分：住所変更・登録
		cancelMap.put("mskm_dtl_no", mskm_dtl_no);								// 申込明細番号（電話）
		cancelMap.put("ido_rsv_dtl_cd", "003");									// 異動予約詳細コード：コース変更
		cancelMap.put("svc_kei_no", svcKeiNo);									// サービス契約番号
	
		ArrayList<HashMap<String, Object>> cancelList = new ArrayList<HashMap<String, Object>>();
		cancelList.add(cancelMap);
		
		// 異動予約キャンセルＣＣ【電番解約の取消し】へのパラメータ
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 取消一覧
		parentMap.put("cancel_list", cancelList);
		parentMap.put("key_ido_div", JKKAdchgConstCC.IDO_DIV_ADCHG_RGST);

		// パラメータにセット
		keepReqParam.get().setData(KEY_IDO_RSV_CNCL, parentMap);

		
		// 前回の移動予約を取消
		JKKIdoRsvCnclCC idoRsvCnclCC = new JKKIdoRsvCnclCC();
		idoRsvCnclCC.cancelIdoRsvBySvcKeiNo(keepSesHandle.get(), keepReqParam.get(), KEY_IDO_RSV_CNCL );
	}
// IT1-2014-0000040対応 20140124 星野 ADD END
	// ANK-2056-00-00 2014/05/01 ADD START
	/**
	 * ユーザ定義文字列がユーザ情報になければデータを作成します。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @return true：作成した　False：存在していたため作成不要
	 * @throws RequestParameterException 
	 */
	private boolean createUserData(IRequestParameterReadWrite param, String workMapKey) 
	throws RequestParameterException
	{
		if (param.getData(workMapKey) == null)
		{
			param.setData(workMapKey, new HashMap<String, Object>());
			return true;
		}
		
		return false;
	}
	// ANK-2056-00-00 2014/05/01 ADD END

}
