/*********************************************************************
*	All Right reserved,Copyright (c) Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：契約管理
*	モジュール名	：JKKPcrsChgNetCC
*	ソースファイル名：JKKPcrsChgNetCC.java
*	作成者			：富士通
*	日付			：2012年09月05日
*＜機能概要＞
*	eo光ネット料金コース変更の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/09/05	FJ）		新規作成
*	v8.00.00	2014/04/07	FJ）星野	OM-2014-0001277対応
*	v26.00.00	2016/08/10	FJ)藤本		【IT1-2016-0000109】住所変更登録時にホーム100M→メゾン1Gに変更すると認証ID変更ありと判定される
*	v40.00.00	2018/11/22	FJ)北谷		IT1-2018-0000213対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import static com.fujitsu.futurity.bp.custom.constant.JKKSvcConst.OP_SVC_CD_FIXIPAD;
import static com.fujitsu.futurity.bp.custom.constant.JKKSvcConst.OP_SVC_CD_MLTISE;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.custom.constant.KKSV0022_KKSV0022OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0022_KKSV0022OP_KKSV002201CC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list;
import com.fujitsu.futurity.bp.custom.constant.KKSV0202_KKSV0202OP_WORK;
import com.fujitsu.futurity.bp.custom.constant.KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0202_KKSV0202OP_WORK_EKK0361A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list;
import com.fujitsu.futurity.bp.custom.constant.KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_KKSV069901SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_KKSV069902SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_KKSV069906SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_KKSV069923SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0081A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0171A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0481A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0481B001CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK0561B001CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK1061B001CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_EKK1631B002CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list;
import com.fujitsu.futurity.bp.custom.constant.KKSV0699_KKSV0699OP_WORK_engaged_op_svc_kei_list;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_ECK0011A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0081A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0081C014BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0081C110BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0161B004BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0161C160BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0161C180BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0171A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0171C010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0171C030BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0171D010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0351A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0351B002BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0351C220BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0351C240BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0361A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0361C010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0361C030BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0361D010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0451A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0451C020BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0451C070BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0451D010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0481A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0481B001BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0561B001BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0561C020BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0791A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK0791A010_01BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK1061B001BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EKK1631B002BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EZM0101B040BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0699_KKSV0699OP_EZM0111C010BSMapper;
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.BPMException;
import com.fujitsu.futurity.bp.x21.bpm.exception.BPMFlowException;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.bpm.parameter.RequestParameter;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;


/**
 * eo光ネット料金コース変更を行います。
 * 
 * @author 富士通
 */
public class JKKPcrsChgNetCC extends AbstractCommonComponent
{
	/** 通知書取消理由コード お客様都合 */
	private static final String TCHISHO_CLRE_CD_01 = "01";

	/** 対象契約識別コード		03:サービス契約内訳 */
	private static final String IS_SVC_KEI_UCWK = "03";

	/** 対象契約識別コード		04:オプションサービス契約 */
	private static final String IS_OP_SVC_KEI = "04";

	/** エイジング種別コード：固定ＩＰアドレス */
	private static final Object AGING_SBT_CD_FIXIPAD = "002";

	/** 有無：あり */
	private static final String UM_ARI = "1";
	
	/** サービス契約ステータス	020：照査済 */
	private static final String SVC_KEI_STAT_020 = "020";
	
	/** サービス契約ステータス	220：停止中 */
	private static final String SVC_KEI_STAT_220 = "220";

	/** 割引サービス契約ステータス：100(サービス提供中) **/
	private static final String WRIB_SVC_KEI_STAT_100 = "100"; 
	
	// IT1-2016-0000109 DEL START
//// OM-2013-0001878対応 20130909 星野 ADD START
//	/** 料金コース速度コード	01：100M */
//	private static final String PCRS_SPEED_CD_100M = "01";
//	
//	/** 料金コース速度コード	02：100Mプレミアム */
//	private static final String PCRS_SPEED_CD_100MPREMIUM = "02";
//// OM-2013-0001878対応 20130909 星野 ADD END
	// IT1-2016-0000109 DEL END


	/**
	 * <DL>
	 * <DT>処理概要:
	 * <DD>ビジネスプロセスを実行する。
	 * <DT>処理補足:
	 * <DD>特になし
	 * <DT>入力パラメータ説明:
	 * <DD>特になし
	 * <DT>出力パラメータ説明:
	 * <DD>特になし
	 * </DL>
	 * @param param (I)業務データ、コントロールマップを含むパラメータオブジェクト
	 * @throws BPMFlowException ビジネスロジックで問題が発生した場合
	*/
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		
		//作業項目リストマップ
		HashMap<String, Object> workMap = (HashMap<String, Object>)((Map)param.getMappingWorkArea()).get(KKSV0699_KKSV0699OP.WORK);
		
		// 初期処理
		initializeParam(handle, param, workMap, fixedText);

		//***************************************************************************************************
		// サービス契約内訳一覧照会
		//***************************************************************************************************
		executeEKK0161B004(handle, param);

		// 処理対象となる情報を判定
		String svc_kei_ucwk_stat = "";
		String gene_add_dtm_old = "";
		String gene_add_dtm = "";
		int iIndex = -1;

		ArrayList<HashMap<String, Object>> ekk0161b004ItemList =
			(ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0161B004CBSMSG1LIST);
		for (int i = 0; ekk0161b004ItemList != null && i < ekk0161b004ItemList.size(); i++)
		{
			HashMap<String, Object> ekk0161Map = ekk0161b004ItemList.get(i);

			svc_kei_ucwk_stat = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			// サービス契約ステータスと一致しているか
			if(!svc_kei_ucwk_stat.equals(workMap.get("g_svcKeiStat")))
			{
				continue;
			}
			
			// 世代登録年月日時分秒を取得
			gene_add_dtm = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.GENE_ADD_DTM);
			if(!"".equals(gene_add_dtm_old))
			{
				// 前の値と比較し、大きければ配列番号を取得
				if(gene_add_dtm.compareTo(gene_add_dtm_old) > 0)
				{
					iIndex = i;
					gene_add_dtm_old = gene_add_dtm;
				}
			}
			else
			{
				iIndex = i;
				gene_add_dtm_old = gene_add_dtm;
			}
		}
		if(iIndex > -1)
		{
			List<Map<String, Object>> newEkk0161b004List = new ArrayList<Map<String, Object>>();
			newEkk0161b004List.add(ekk0161b004ItemList.get(iIndex));
			workMap.put(KKSV0699_KKSV0699OP_WORK.EKK0161B004CBSMSG1LIST, newEkk0161b004List);
		}
		
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//サービス契約の料金コース変更
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		if (!JKKSvcConst.SVC_KEI_STAT_020.equals(workMap.get("g_svcKeiStat")))
		{
			//***************************************************************************************************
			// サービス契約料金プラン変更
			//***************************************************************************************************
			executeEKK0081C110(handle, param);

			//変更後の料金コースコード
			HashMap<?, ?> KKSV069906sc = (HashMap<?, ?>)param.getData(KKSV0699_KKSV0699OP.KKSV069906SC);
			workMap.put("s_prcGrpCd", KKSV069906sc.get(KKSV0699_KKSV0699OP_KKSV069906SC.PRC_GRP_CD));
			workMap.put("s_pcrsCd", KKSV069906sc.get(KKSV0699_KKSV0699OP_KKSV069906SC.PCRS_CD));
		}

		//***************************************************************************************************
		// サービス契約業務連絡備考変更
		//***************************************************************************************************
		executeEKK0081C014(handle, param);

		//***************************************************************************************************
		// 料金コース変更可能条件一覧照会
		//***************************************************************************************************
		//検索条件：変更前料金コースコードは initializeParam メソッドで設定済み
		//検索条件に変更後料金コースコードを設定
		workMap.put(KKSV0699_KKSV0699OP_WORK.CHAF_PCRS_CD, workMap.get("s_pcrsCd"));

		executeEKK1631B002(handle, param);

		//認証ID付け替えの判断
// OM-2013-0001878対応 20130909 星野 MOD START
//		boolean needNewAuthId = isNewAuthorizationId(param, workMap);
		boolean needNewAuthId = isNewAuthorizationId(handle, param, workMap);
// OM-2013-0001878対応 20130909 星野 MOD END

		//連携データ区分 07 ：回線契約に紐づく各種サービス契約の情報
		JKKBpCommon.putAxMRenkeiDataKbn07(
				param, KKSV0699_KKSV0699OP.SJISHO_MAP, JKKAddSjishoConst.TRN_KBN_ADD, 
				new String[]{(String)workMap.get(KKSV0699_KKSV0699OP_WORK.SVC_KEI_NO)}, "料金グループ番号？");

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//サービス契約内訳の料金コース変更（プラン変更または新認証ID登録）
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		ArrayList<HashMap<String, Object>> ekk0161b004List = (ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0161B004CBSMSG1LIST);
		if (ekk0161b004List != null && !ekk0161b004List.isEmpty())
		{
			HashMap<String, Object> ekk0161Map = ekk0161b004List.get(0);
			param = doChangePlanSvcKeiUcwk(handle, needNewAuthId, ekk0161Map, workMap, param);
		}
		
		if (needNewAuthId)
		{
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//オプションサービス契約（マルチセッション，固定グローバルIPアドレス）の付け替え
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			param = addOpSvcKei(handle, workMap, param);
			
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//割引サービス契約の付け替え
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			param = addWribSvcKei(handle, workMap, param);
			
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//オプションサービス契約のキャンセル／解約
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			param = dlreOpSvcKei(handle, workMap, param);
			
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//サービス契約内訳のキャンセル／解約
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			param = dlreSvcKeiUcwk(handle, workMap, param);
		}

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//割引サービス契約のキャンセル／解約
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		param = dlreWribSvcKei(handle, workMap, param);

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//通知書の取消
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		param = cancelTtsho(handle, workMap, param);

		return param;
	}


	/**
	 * 初期処理
	 * 
	 * @param handle
	 * @param param リクエストパラメータ（マップ）
	 * @param workMap
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void initializeParam(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> workMap, String fixedText) throws Throwable
	{
		//SYSID
		HashMap<String, Object> KKSV069901sc = (HashMap<String, Object>)param.getData(KKSV0699_KKSV0699OP.KKSV069901SC);
		String sysid = (String)KKSV069901sc.get(KKSV0699_KKSV0699OP_KKSV069901SC.KEY_SYSID);
		workMap.put(KKSV0699_KKSV0699OP_WORK.SYSID, sysid);
		
		//サービス契約番号
		HashMap<String, Object> KKSV069902sc = (HashMap<String, Object>)param.getData(KKSV0699_KKSV0699OP.KKSV069902SC);
		String svc_kei_no = (String)KKSV069902sc.get(KKSV0699_KKSV0699OP_KKSV069902SC.KEY_SVC_KEI_NO);
		workMap.put(KKSV0699_KKSV0699OP_WORK.SVC_KEI_NO, svc_kei_no);
		
		//運用年月日
		String g_opeYmd = (String)KKSV069902sc.get(KKSV0699_KKSV0699OP_KKSV069902SC.KEY_RSV_APLY_YMD);
		workMap.put("g_opeYmd", g_opeYmd);
		workMap.put(KKSV0699_KKSV0699OP_WORK.OPE_YMD, g_opeYmd);
		
		//新しい料金コース等
		HashMap<String, Object> KKSV069906sc = (HashMap<String, Object>)param.getData(KKSV0699_KKSV0699OP.KKSV069906SC);
		
		//提供方式契約番号
		String tk_hoshiki_kei_no = (String)KKSV069906sc.get(KKSV0699_KKSV0699OP_KKSV069906SC.TK_HOSHIKI_KEI_NO);
		workMap.put(KKSV0699_KKSV0699OP_WORK.TK_HOSHIKI_KEI_NO, tk_hoshiki_kei_no);		//提供方式契約番号設定はこれで良いか？
		
		
		//***************************************************************************************************
		// お客様一意照会
		//***************************************************************************************************
		executeECK0011A010(handle, param);
		
		//***************************************************************************************************
		// サービス契約一意照会
		//***************************************************************************************************
		executeEKK0081A010(handle, param);
		
		ArrayList<HashMap<String, Object>> ekk0081a010List =
			(ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0081A010CBSMSG1LIST);
		HashMap<String, Object> kk0081Map = ekk0081a010List.get(0);
		
		//サービス契約ステータス
		workMap.put("g_svcKeiStat", kk0081Map.get(KKSV0699_KKSV0699OP_WORK_EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		
		//サービスコード
		workMap.put("g_svcCd", kk0081Map.get(KKSV0699_KKSV0699OP_WORK_EKK0081A010CBSMsg1List.SVC_CD));
		
		//変更前の料金グループコード
		workMap.put("g_prcGrpCd", kk0081Map.get(KKSV0699_KKSV0699OP_WORK_EKK0081A010CBSMsg1List.PRC_GRP_CD));
		
		//変更前の料金コースコード
		String g_pcrsCd = (String)kk0081Map.get(KKSV0699_KKSV0699OP_WORK_EKK0081A010CBSMsg1List.PCRS_CD);
		workMap.put("g_pcrsCd", g_pcrsCd);
		workMap.put(KKSV0699_KKSV0699OP_WORK.CHBF_PCRS_CD, g_pcrsCd);
		
		
		HashMap<String, Object> inMap = (HashMap<String, Object>) param.getData(fixedText);
		// 解約予定オプションリスト
		workMap.put( "dslRsvOpList", inMap.get("dslRsvOpList") );
		return;
	}

	/**
	 * 通知書の取消
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite cancelTtsho(SessionHandle handle,
													HashMap<String, Object> workMap,
													IRequestParameterReadWrite param) throws Throwable
	{
		//取消対象の旧ＩＳＰ認証ＩＤを取得
		ArrayList<HashMap<String, Object>> ekk0171a010List =
			(ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0171A010CBSMSG1LIST);
		if (ekk0171a010List == null || ekk0171a010List.isEmpty())
		{
			return param;
		}
		HashMap<String, Object> kk0171Map = ekk0171a010List.get(0);
		String isp_ninsho_idOld = (String) kk0171Map.get(KKSV0699_KKSV0699OP_WORK_EKK0171A010CBSMsg1List.ISP_NINSHO_ID);

		//***************************************************************************************************
		// ID通知書一覧照会
		//***************************************************************************************************
		executeEKK0561B001(handle, param);
		
		//照会結果
		ArrayList<HashMap<String, Object>> ekk0561b001List = (ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0561B001CBSMSG1LIST);
		for (int i = 0; ekk0561b001List != null && i < ekk0561b001List.size(); i++)
		{
			HashMap<String, Object> kk0561Map = ekk0561b001List.get(i);
			
			String tts_stat = (String) kk0561Map.get(KKSV0699_KKSV0699OP_WORK_EKK0561B001CBSMsg1List.TCHISHO_STAT);
			if ("010".equals(tts_stat))			//通知書ステータスが「受付済」のまま
			{
				//処理対象の通知書番号
				String tchisho_no = (String) kk0561Map.get(KKSV0699_KKSV0699OP_WORK_EKK0561B001CBSMsg1List.TCHISHO_NO);
				workMap.put(KKSV0699_KKSV0699OP_WORK.TCHISHO_NO, tchisho_no);

				//***************************************************************************************************
				// 通知書内訳一覧照会
				//***************************************************************************************************
				executeEKK1061B001(handle, param);

				//通知書内訳に取消対象のＩＳＰ認証ＩＤがセットされているかを確認
				ArrayList<HashMap<String, Object>> ekk1061b001List = (ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.EKK1061B001CBSMSG1LIST);
				String canceling_tts_no = null;
				int p = 0;
				while (ekk1061b001List != null && p < ekk1061b001List.size())
				{
					HashMap<String, Object> kk1061Map = ekk1061b001List.get(p);
					String isp_ninsho_idXx = (String) kk1061Map.get(KKSV0699_KKSV0699OP_WORK_EKK1061B001CBSMsg1List.NINSHO_ID);
					//通知書取消対象の現ＩＤを発見
					if (isp_ninsho_idOld.equals(isp_ninsho_idXx))
					{
						canceling_tts_no = (String) kk1061Map.get(KKSV0699_KKSV0699OP_WORK_EKK1061B001CBSMsg1List.TCHISHO_NO);
						break;
					}

					p++;
				}

				if (canceling_tts_no != null && canceling_tts_no.equals(tchisho_no))
				{
					//更新年月日時分秒
					String upd_dtm = (String) kk0561Map.get(KKSV0699_KKSV0699OP_WORK_EKK0561B001CBSMsg1List.UPD_DTM);
					workMap.put(KKSV0699_KKSV0699OP_WORK.KK0561_UPD_DTM, upd_dtm);
					
					//通知書取消理由コード
					workMap.put(KKSV0699_KKSV0699OP_WORK.TCHISHO_CLRE_CD, TCHISHO_CLRE_CD_01);

					//***************************************************************************************************
					// 通知書取消
					//***************************************************************************************************
					executeEKK0561C020(handle, param);
				}
			}
		}
		return param;
	}


	/**
	 * 付替えられる割引サービス契約のキャンセル／解約
	 * 
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite dlreWribSvcKei(	SessionHandle handle,
														HashMap<String, Object> workMap,
														IRequestParameterReadWrite param) throws Throwable
	{
		ArrayList<HashMap<String, Object>> dlre_wrib_svc_kei_list =
			(ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.DLRE_WRIB_SVC_KEI_LIST);
		for (int i = 0; dlre_wrib_svc_kei_list != null && i < dlre_wrib_svc_kei_list.size(); i++)
		{
			HashMap<String, Object> xMap = dlre_wrib_svc_kei_list.get(i);

			String wrib_svc_kei_no = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.WRIB_SVC_KEI_NO);
			workMap.put(KKSV0699_KKSV0699OP_WORK.WRIB_SVC_KEI_NO, wrib_svc_kei_no);
			String upd_dtm = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.UPD_DTM);
			workMap.put(KKSV0699_KKSV0699OP_WORK.KK0451_UPD_DTM, upd_dtm);

			String wrib_svc_kei_stat = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.WRIB_SVC_KEI_STAT);
			if (WRIB_SVC_KEI_STAT_100.equals(wrib_svc_kei_stat))
			{
				//***************************************************************************************************
				// 割引サービス契約解約
				//***************************************************************************************************
				executeEKK0451C020(handle, param);
			}
			else
			{
				//***************************************************************************************************
				// 割引サービス契約キャンセル
				//***************************************************************************************************
				executeEKK0451C070(handle, param);
			}
		}

		return param;
	}


	/**
	 * ＩＳＰ認証ＩＤ付替えに伴う現サービス契約内訳のキャンセル／解約
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite dlreSvcKeiUcwk(	SessionHandle handle,
														HashMap<String, Object> workMap,
														IRequestParameterReadWrite param) throws Throwable
	{
		ArrayList<HashMap<String, Object>> ekk0161b004List =
			(ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0161B004CBSMSG1LIST);
		for (int i = 0; ekk0161b004List != null && i < ekk0161b004List.size(); i++)
		{
			HashMap<String, Object> ekk0161Map = ekk0161b004List.get(i);

			String svc_kei_ucwk_no = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			workMap.put(KKSV0699_KKSV0699OP_WORK.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);

			//通知書取消の際に比較するための旧ＩＳＰ認証ＩＤを取得
			//***************************************************************************************************
			// サービス契約内訳＜eo光ネット＞一意照会
			//***************************************************************************************************
			executeEKK0171A010(handle, param);

			String svc_kei_ucwk_stat = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if (JKKSvcConst.SVC_KEI_STAT_020.equals(svc_kei_ucwk_stat))
			{
				//***************************************************************************************************
				// サービス契約内訳キャンセル
				//***************************************************************************************************
				executeEKK0161C160(handle, param);
			}
			// 締結済、サービス提供中、停止中、休止・中断中のみ解約処理を行う
			else if (JKKSvcConst.SVC_KEI_STAT_100.equals(svc_kei_ucwk_stat)
					|| JKKSvcConst.SVC_KEI_STAT_030.equals(svc_kei_ucwk_stat)
					|| JKKSvcConst.SVC_KEI_STAT_210.equals(svc_kei_ucwk_stat)
					|| SVC_KEI_STAT_220.equals(svc_kei_ucwk_stat))
			{
				//***************************************************************************************************
				// サービス契約内訳解約
				//***************************************************************************************************
				executeEKK0161C180(handle, param);
			}

			//連携データ区分 05 ：認証ＩＤの情報
			JKKBpCommon.putAxMRenkeiDataKbn(
					param, KKSV0699_KKSV0699OP.SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_NINSHO_ID, JKKAddSjishoConst.TRN_KBN_DEL, 
					new String[]{svc_kei_ucwk_no}, (String)workMap.get(KKSV0699_KKSV0699OP_WORK.SYSID));

			break;
		}

		return param;
	}


	/**
	 * 被付け替えオプションサービス契約のキャンセル／解約
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite dlreOpSvcKei(	SessionHandle handle,
														HashMap<String, Object> workMap,
														IRequestParameterReadWrite param) throws Throwable
	{
		ArrayList<HashMap<String, Object>> oldOptionList = 
			(ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.DLRE_OP_SVC_KEI_LIST);

		for (int i = 0; i < oldOptionList.size(); i++)
		{
			HashMap<String, Object> xMap = oldOptionList.get(i);
			
			//キー情報をセット
			workMap.put(KKSV0699_KKSV0699OP_WORK.OP_SVC_KEI_NO, 
					xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.OP_SVC_KEI_NO));
			workMap.put(KKSV0699_KKSV0699OP_WORK.KK0351_UPD_DTM, 
					xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.UPD_DTM));

			String op_svc_kei_stat = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.OP_SVC_KEI_STAT);
			if (JKKSvcConst.SVC_KEI_STAT_020.equals(op_svc_kei_stat))		//オプションサービス契約ステータスが「照査済」
			{
				//***************************************************************************************************
				// オプションサービス契約キャンセル
				//***************************************************************************************************
				executeEKK0351C220(handle, param);
			}
			else
			{
				//***************************************************************************************************
				// オプションサービス契約解約
				//***************************************************************************************************
				executeEKK0351C240(handle, param);
			}

// OM-2014-0001277対応 20140407 星野 DEL START
//			String op_svc_cd = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.OP_SVC_CD);
//			if (OP_SVC_CD_FIXIPAD.equals(op_svc_cd))			//固定ＩＰオプションの場合
//			{
//				//***************************************************************************************************
//				// 固定ＩＰアドレス一覧照会（契約用）
//				//***************************************************************************************************
//				//検索キーとして固定ＩＰアドレスを指定
//				workMap.put(KKSV0699_KKSV0699OP_WORK.KOTEI_IP_AD, xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.KOTEI_IP_AD));
//				
//				executeEZM0101B040(handle, param);
//				
//				ArrayList<HashMap<String, Object>> ezm0101bzzzList =
//					(ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EZM0101B040CBSMSG1LIST);
//				
//				// 2013.02.06 IT2-2013-0000093 MOD Start
//				//if (ezm0101bzzzList != null && 1 <= ezm0101bzzzList.size())
//				//{
//				//	HashMap<String, Object> zm0101Map = ezm0101bzzzList.get(0);
//				//	
//				//	//エイジング番号
//				//	workMap.put(KKSV0699_KKSV0699OP_WORK.AGING_NO, zm0101Map.get(KKSV0699_KKSV0699OP_WORK_EZM0101B040CBSMsg1List.AGING_NO));
//				//	//エイジング種別コード
//				//	workMap.put(KKSV0699_KKSV0699OP_WORK.AGING_SBT_CD, AGING_SBT_CD_FIXIPAD);
//				//	//固定ＩＰアドレス
//				//	//※設定済み
//				//	//使用終了年月日時分秒
//				//	String dtm = JKKFixipadCC.nowTimestamp();
//				//	workMap.put(KKSV0699_KKSV0699OP_WORK.USE_END_DTM, workMap.get("g_opeYmd") + dtm);
//				//	//エイジングレコードの更新年月日時分秒を取得
//				//	workMap.put(KKSV0699_KKSV0699OP_WORK.ZM0111_UPD_DTM, zm0101Map.get(KKSV0699_KKSV0699OP_WORK_EZM0101B040CBSMsg1List.ZM0111_UPD_DTM));
//
//				//	//***************************************************************************************************
//				//	// エイジング対象使用終了
//				//	//***************************************************************************************************
//				//	executeEZM0111C010(handle, param);
//				//}
//				
//				// 取得したレコードより自分のIPアドレスを検索し処理を行う
//				String kotei_ip_ad = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.KOTEI_IP_AD);
//				for (int j = 0; ezm0101bzzzList != null && j < ezm0101bzzzList.size(); j++)
//				{
//					HashMap<String, Object> zm0101Map = ezm0101bzzzList.get(j);
//					
//					// 自分のIPアドレスが見つかった
//					if ( kotei_ip_ad.equals(zm0101Map.get(KKSV0699_KKSV0699OP_WORK_EZM0101B040CBSMsg1List.KOTEI_IP_AD))) {
//
//						//エイジング番号
//						workMap.put(KKSV0699_KKSV0699OP_WORK.AGING_NO, zm0101Map.get(KKSV0699_KKSV0699OP_WORK_EZM0101B040CBSMsg1List.AGING_NO));
//						//エイジング種別コード
//						workMap.put(KKSV0699_KKSV0699OP_WORK.AGING_SBT_CD, AGING_SBT_CD_FIXIPAD);
//						//固定ＩＰアドレス
//						//※設定済み
//						//使用終了年月日時分秒
//						String dtm = JKKFixipadCC.nowTimestamp();
//						workMap.put(KKSV0699_KKSV0699OP_WORK.USE_END_DTM, workMap.get("g_opeYmd") + dtm);
//						//エイジングレコードの更新年月日時分秒を取得
//						workMap.put(KKSV0699_KKSV0699OP_WORK.ZM0111_UPD_DTM, zm0101Map.get(KKSV0699_KKSV0699OP_WORK_EZM0101B040CBSMsg1List.ZM0111_UPD_DTM));
//
//						//***************************************************************************************************
//						// エイジング対象使用終了
//						//***************************************************************************************************
//						executeEZM0111C010(handle, param);
//					}
//				
//				}
//				
//				
//				// 2013.02.06 IT2-2013-0000093 MOD End
//			}
// OM-2014-0001277対応 20140407 星野 DEL END
		}

		return param;
	}


	/**
	 * 割引サービス契約の付け替え
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite addWribSvcKei(SessionHandle handle, HashMap<String, Object> workMap, IRequestParameterReadWrite param) throws Throwable
	{
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//サービス契約内訳に付く割引サービス契約の付け替えを行う
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		
		ArrayList<HashMap<String, Object>> kk0161b004List = (ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0161B004CBSMSG1LIST);
		for (int i = 0; kk0161b004List != null && i < kk0161b004List.size(); i++)
		{
			HashMap<String, Object> kk0161Map = kk0161b004List.get(i);
			
			//付替え対象のサービス契約内訳番号
			String svc_kei_ucwk_no = (String) kk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			workMap.put(KKSV0699_KKSV0699OP_WORK.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
			workMap.put(KKSV0699_KKSV0699OP_WORK.OP_SVC_KEI_NO, null);
			param = addEachWribSvcKei(handle, workMap, param, IS_SVC_KEI_UCWK, svc_kei_ucwk_no, (String)workMap.get("g_svcCd"));
		}

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//オプションサービス契約に付く割引サービス契約の付け替えを行う
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		ArrayList<HashMap<String, Object>> oldOptionList = (ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.DLRE_OP_SVC_KEI_LIST);
		for (int i = 0; i < oldOptionList.size(); i++)
		{
			HashMap<String, Object> xMap = oldOptionList.get(i);
			
			//付替え対象のオプションサービス契約番号
			String op_svc_kei_no = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.OP_SVC_KEI_NO);
			String op_svc_cd = (String) xMap.get(KKSV0699_KKSV0699OP_WORK_dlre_op_svc_kei_list.OP_SVC_CD);
			workMap.put(KKSV0699_KKSV0699OP_WORK.SVC_KEI_UCWK_NO, null);
			workMap.put(KKSV0699_KKSV0699OP_WORK.OP_SVC_KEI_NO, op_svc_kei_no);
			param = addEachWribSvcKei(handle, workMap, param, IS_OP_SVC_KEI, op_svc_kei_no, op_svc_cd);
		}

		return param;
	}
	
	
	/**
	 * 付替え対象の割引サービス契約登録および照査<br/>
	 * ※巻取@で割引サービス契約のモデルが変更（一時割引、月額割引のサブタイプが廃止）されたため全面的に書き換え
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @param oya_sbt_cd 対象契約識別コード
	 * @param tg_kei_no 対象契約の番号
	 * @return
	 * @throws Throwable 
	 * @since 2012-04-26 巻@断面合わせ
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite addEachWribSvcKei(	SessionHandle handle,
															HashMap<String, Object> workMap,
															IRequestParameterReadWrite param,
															String oya_sbt_cd,
															String tg_kei_no,
															String tg_svc_cd) throws Throwable
	{
		//予約適用年月日を取得
		Map<?, ?> KKSV069906sc = (Map<?, ?>) param.getData(KKSV0699_KKSV0699OP.KKSV069906SC);	//サービス契約料金プラン変更SC
		String kk0081_rsv_aply_ymd = (String) KKSV069906sc.get(KKSV0699_KKSV0699OP_KKSV069906SC.RSV_APLY_YMD);
		//違約金発生区分も
		String pnlty_hassei_cd = (String) KKSV069906sc.get(KKSV0699_KKSV0699OP_KKSV069906SC.PNLTY_HASSEI_CD);

		//***************************************************************************************************
		// 割引サービス対象契約一覧照会
		//***************************************************************************************************
		//★検索キーは呼び出し元で設定済み（サービス契約内訳番号またはオプションサービス契約番号
		executeEKK0481B001(handle, param);

		//被付替え割引サービス契約の更新キー情報
		ArrayList<HashMap<String, Object>> dlre_wrib_svc_kei_list =
			(ArrayList<HashMap<String, Object>>) workMap.get(KKSV0699_KKSV0699OP_WORK.DLRE_WRIB_SVC_KEI_LIST);
		if (dlre_wrib_svc_kei_list == null)
		{
			dlre_wrib_svc_kei_list = new ArrayList<HashMap<String,Object>>();
			workMap.put(KKSV0699_KKSV0699OP_WORK.DLRE_WRIB_SVC_KEI_LIST, dlre_wrib_svc_kei_list);
		}

		//*************************************************************************************************************
		//第１のループ：割引サービス対象契約をスタックする
		//*************************************************************************************************************
		Map<String, List<Map<String, Object>>> kk0481StackMap = new HashMap<String, List<Map<String,Object>>>();

		ArrayList<HashMap<String, Object>> ekk0481b001List = (ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0481B001CBSMSG1LIST);
		for (int i = 0; ekk0481b001List != null && i < ekk0481b001List.size(); i++)
		{
			HashMap<String, Object> kk0481Map = ekk0481b001List.get(i);
			
			//付替え対象の割引サービス契約番号
			String wrib_svc_kei_no = (String)kk0481Map.get(KKSV0699_KKSV0699OP_WORK_EKK0481B001CBSMsg1List.WRIB_SVC_KEI_NO);
			String wrib_svc_trgt_kei_no = (String)kk0481Map.get(KKSV0699_KKSV0699OP_WORK_EKK0481B001CBSMsg1List.WRIB_SVC_TRGT_KEI_NO);
			
			List<Map<String, Object>> list = kk0481StackMap.get(wrib_svc_kei_no);
			if (null == list)
			{
				list = new ArrayList<Map<String,Object>>();
				kk0481StackMap.put(wrib_svc_kei_no, list);
			}
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put(wrib_svc_trgt_kei_no, kk0481Map);
			list.add(map);
		}

		//*************************************************************************************************************
		//第２のループ：スタックをもとに、割引サービス契約毎の付け替えをする
		//*************************************************************************************************************
		HashMap<String, Object> KKSV069923sc = (HashMap<String, Object>) param.getData(KKSV0699_KKSV0699OP.KKSV069923SC);
		if (null == KKSV069923sc)
		{
			KKSV069923sc = new HashMap<String, Object>();
			param.setData(KKSV0699_KKSV0699OP.KKSV069923SC, KKSV069923sc);
		}

		for (Entry<String, List<Map<String, Object>>> wribKeiData: kk0481StackMap.entrySet())
		{
			KKSV069923sc.clear();

			//付替え対象の割引サービス契約番号
			String wrib_svc_kei_no = wribKeiData.getKey();
			workMap.put(KKSV0699_KKSV0699OP_WORK.WRIB_SVC_KEI_NO, wrib_svc_kei_no);

			//***************************************************************************************************
			// 割引サービス契約一意照会
			//***************************************************************************************************
			executeEKK0451A010(handle, param);

			ArrayList<HashMap<String, Object>> ekk0451a010List = (ArrayList<HashMap<String, Object>>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0451A010CBSMSG1LIST);
			HashMap<String, Object> kk0451Map = ekk0451a010List.get(0);		//先頭の１件目

			//割引サービス契約ステータス
			String wrib_svc_kei_stat = (String) kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT);
			//受付済　か　サービス提供中なら登録・照査する
			if ("010".equals(wrib_svc_kei_stat) || "100".equals(wrib_svc_kei_stat))
			{
				//割引サービス契約登録用に、割引サービス契約本体の各情報をS-IFマップに複製
				editKKSV069923SC_Map(param, KKSV069923sc, workMap, kk0451Map, kk0081_rsv_aply_ymd, pnlty_hassei_cd);
	
				//解約する割引サービス契約リストに保持
				HashMap<String, Object> xMap = new HashMap<String, Object>();
				xMap.put(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.WRIB_SVC_KEI_NO, wrib_svc_kei_no);			//割引サービス契約番号
				xMap.put(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.WRIB_SVC_KEI_STAT, wrib_svc_kei_stat);			//割引サービス契約ステータス
				String gene_add_dtm = (String) kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.GENE_ADD_DTM);
				xMap.put(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.GENE_ADD_DTM, gene_add_dtm);				//世代登録年月日時分秒
				xMap.put(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.GENE_ADD_DTM_BF, gene_add_dtm);
				String upd_dtm = (String) kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.LAST_UPD_DTM);
				xMap.put(KKSV0699_KKSV0699OP_WORK_dlre_wrib_svc_kei_list.UPD_DTM, upd_dtm);							//更新年月日時分秒
				dlre_wrib_svc_kei_list.add(xMap);

				//割引サービス対象契約の数だけ繰り返し（付け替え）
				List<Map<String, Object>> list = wribKeiData.getValue();
				for (int j = 0; j < list.size(); j++)
				{
					Map<String, Object> inMap = list.get(j);
					
					for (String wrib_svc_trgt_kei_no: inMap.keySet())		//１回だけのループのハズです
					{
						workMap.put(KKSV0699_KKSV0699OP_WORK.WRIB_SVC_TRGT_KEI_NO, wrib_svc_trgt_kei_no);

						//***************************************************************************************************
						// 割引サービス対象契約一意照会
						//***************************************************************************************************
						executeEKK0481A010(handle, param);
	
						Map<String, Object> kk0481Map = (Map<String, Object>) ((List<?>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK0481A010CBSMSG1LIST)).get(0);
						editKKSV069923SCinList(param, KKSV069923sc, workMap, kk0481Map, kk0081_rsv_aply_ymd);
					}
				}
				
				//***************************************************************************************************
				// 割引サービス契約登録
				//***************************************************************************************************
				executeEKK0451D010(handle, param);
			}
		}			//for (Entry<String, List<Map<String, Object>>> wribKeiData: kk0481StackMap.entrySet())
		
		return param;
	}
	
	
	/**
	 * EKK0451D010割引サービス契約登録S-IF用パラメータマップの編集
	 * 
	 * @param param リクエストパラメータ
	 * @param mapNm データを設定するマップの名称
	 * @param workMap WORK領域
	 * @param kk0451Map 割引サービス契約一意照会結果明細
	 * @param rsv_aply_ymd 予約適用年月日
	 * @param pnlty_hassei_cd 違約金発生区分
	 * @throws RequestParameterException 
	 * @since 2012-04-26 巻@断面合わせ
	 */
	private void editKKSV069923SC_Map(	IRequestParameterReadWrite param,
										Map<String, Object> targetMap,
										Map<String, Object> workMap,
										Map<String,Object> kk0451Map,
										String rsv_aply_ymd,
										String pnlty_hassei_cd) throws RequestParameterException
	{
		//〇  SYSID
		//BP-SC マッピングクラス内でマッピングしてます
		//〇  割引サービスコード
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.WRIB_SVC_CD, kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.WRIB_SVC_CD));
					//料金コースコード
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.PCRS_CD, kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.PCRS_CD));
					//料金プランコード
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.PPLAN_CD, kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.PPLAN_CD));
					//サービス利用開始希望年月日
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.SVC_USE_STA_KIBO_YMD, rsv_aply_ymd);
		//    予約適用開始希望年月日
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.RSV_TSTA_KIBO_YMD, rsv_aply_ymd);
		//    申込明細番号
		//BP-SC マッピングクラス内でマッピングしてます
		//〇  即時適用フラグ
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.APLY_JUN, kk0451Map.get(KKSV0699_KKSV0699OP_WORK_EKK0451A010CBSMsg1List.APLY_JUN));
		//    違約金発生コード
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.PNLTY_HASSEI_CD, pnlty_hassei_cd);
		//〇  異動区分
		//BP-SC マッピングクラス内でマッピングしてます
		//〇  申込起算年月日
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.MSKM_KISAN_YMD, workMap.get("g_opeYmd"));
		//〇  割引登録契機コード
		targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.WRIB_ADD_OPTY_CD, "0");
		//○  更新年月日時分秒(更新前)
		//BP-SC マッピングクラス内でマッピングしてます
	}


	/**
	 * 
	 * @param param リクエストパラメータ
	 * @param mapNm データを設定するマップの名称
	 * @param workMap WORK領域
	 * @param kk0481Map 割引サービス対象契約一覧照会結果明細
	 * @param rsv_aply_ymd 予約適用年月日
	 * @return リクエストパラメータ
	 * @throws RequestParameterException 
	 * @since 2012-04-26 巻@断面合わせ
	 */
	@SuppressWarnings("unchecked")
	private void editKKSV069923SCinList(	IRequestParameterReadWrite param,
											Map<String, Object> targetMap,
											Map<String, Object> workMap,
											Map<String,Object> kk0481Map,
											String rsv_aply_ymd) throws RequestParameterException
	{
		String svc_kei_ucwk_no = (String) kk0481Map.get(KKSV0699_KKSV0699OP_WORK_EKK0481A010CBSMsg1List.SVC_KEI_UCWK_NO);
		String op_svc_kei_no = (String) kk0481Map.get(KKSV0699_KKSV0699OP_WORK_EKK0481A010CBSMsg1List.OP_SVC_KEI_NO);

		//割引サービス対象契約明細
		List<Map<String, Object>> ekk0451d010List = (List<Map<String, Object>>) targetMap.get(KKSV0699_KKSV0699OP_KKSV069923SC.EKK0451D010CBSMSG1LIST);
		if (null == ekk0451d010List)
		{
			ekk0451d010List = new ArrayList<Map<String, Object>>();
			targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC.EKK0451D010CBSMSG1LIST, ekk0451d010List);
				}

		Map<String, Object> childMap = null;

		if (null != svc_kei_ucwk_no)
		{
			//付替え先のサービス契約内訳番号
			String new_svc_kei_ucwk_no = (String) workMap.get(KKSV0699_KKSV0699OP_WORK.NEW_SVC_KEI_UCWK_NO);

			childMap = new HashMap<String, Object>();
			//〇  対象契約識別コード
			childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD, "03");
			//    サービス契約内訳番号
			childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.SVC_KEI_UCWK_NO, new_svc_kei_ucwk_no);
		}
		if (null != op_svc_kei_no)
		{
			String new_op_svc_kei_no = null;

			ArrayList<HashMap<String, String>> newOpSvcKeiList = (ArrayList<HashMap<String, String>>) workMap.get(KKSV0699_KKSV0699OP_WORK.ENGAGED_OP_SVC_KEI_LIST);
			for (int j = 0; null != newOpSvcKeiList && j < newOpSvcKeiList.size(); j ++)
			{
				String xz = newOpSvcKeiList.get(j).get(KKSV0699_KKSV0699OP_WORK_engaged_op_svc_kei_list.BASE_OP_SVC_KEI_NO);
				if (op_svc_kei_no.equals(xz))
				{
					new_op_svc_kei_no = newOpSvcKeiList.get(j).get(KKSV0699_KKSV0699OP_WORK_engaged_op_svc_kei_list.OP_SVC_KEI_NO);
					break;
				}
			}
			if (null != new_op_svc_kei_no)
			{
				childMap = new HashMap<String, Object>();
				//〇  対象契約識別コード
				childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD, "04");
				//    オプションサービス契約番号
				childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.OP_SVC_KEI_NO, new_op_svc_kei_no);
			}
		}
		if (null != childMap)
		{
			//〇  割引サービス対象サービスコード
			childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.WRIB_SVC_TRGT_SVC_CD, 
					kk0481Map.get(KKSV0699_KKSV0699OP_WORK_EKK0481A010CBSMsg1List.WRIB_SVC_TRGT_SVC_CD));
			//    設定登録年月日
			targetMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.SET_ADD_YMD, workMap.get("g_opeYmd"));
			//〇  割引サービス対象契約適用開始年月日
			childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TSTAYMD, rsv_aply_ymd);
			//〇  割引サービス対象契約適用終了年月日
			childMap.put(KKSV0699_KKSV0699OP_KKSV069923SC_EKK0451D010CBSMsg1List.WRISVC_TG_KEI_TENDYMD, 
					kk0481Map.get(KKSV0699_KKSV0699OP_WORK_EKK0481A010CBSMsg1List.WRISVC_TG_KEI_TENDYMD));
			//明細リストに追加
			ekk0451d010List.add(childMap);
		}
	}


	/**
	 * サービス契約内訳の料金コース変更
	 * 
	 * @param handle
	 * @param needNewAuthId
	 * @param ekk0161Map
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private IRequestParameterReadWrite doChangePlanSvcKeiUcwk(	SessionHandle handle,
																boolean needNewAuthId,
																HashMap<String, Object> ekk0161Map,
																HashMap<String, Object> workMap,
																IRequestParameterReadWrite param) throws Throwable
	{
		String svc_kei_ucwk_no = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
		workMap.put(KKSV0699_KKSV0699OP_WORK.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
		String svc_kei_ucwk_stat = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
		String tk_hoshiki_kei_no = (String)ekk0161Map.get(KKSV0699_KKSV0699OP_WORK_EKK0161B004CBSMsg1List.TK_HOSHIKI_KEI_NO);
		workMap.put(KKSV0202_KKSV0202OP_WORK.TK_HOSHIKI_KEI_NO, null);   // IT1-2012-0002080 2012/11/18 nullにする

		//認証ID付け替えを伴うコース変更の場合（eo光ネット固有）
		if (needNewAuthId)
		{
			//***************************************************************************************************
			// サービス契約内訳＜eo光ネット＞登録
			//***************************************************************************************************
			executeEKK0171D010(handle, param);

			if (JKKSvcConst.SVC_KEI_STAT_020.equals(svc_kei_ucwk_stat))
			{
				//***************************************************************************************************
				// サービス契約内訳＜eo光ネット＞照査
				//***************************************************************************************************
				executeEKK0171C010(handle, param);
			}
			else
			{
				//***************************************************************************************************
				// サービス契約内訳＜eo光ネット＞照査締結
				//***************************************************************************************************
				executeEKK0171C030(handle, param);
			}

			//新しいサービス契約内訳についての更新キー情報を退避
			String new_svc_kei_ucwk_no = (String) workMap.get(KKSV0699_KKSV0699OP_WORK.SVC_KEI_UCWK_NO);
			workMap.put(KKSV0699_KKSV0699OP_WORK.NEW_SVC_KEI_UCWK_NO, new_svc_kei_ucwk_no);		//登録した新サービス契約内訳番号
			workMap.put(KKSV0699_KKSV0699OP_WORK.NEW_KK0161_GENE_ADD_DTM, 
					workMap.get(KKSV0699_KKSV0699OP_WORK.KK0161_GENE_ADD_DTM));	//同、世代登録年月日時分秒
			//連携データ区分 05 ：認証ＩＤの情報
			JKKBpCommon.putAxMRenkeiDataKbn(
					param, KKSV0699_KKSV0699OP.SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_NINSHO_ID, JKKAddSjishoConst.TRN_KBN_ADD, 
					new String[]{new_svc_kei_ucwk_no}, (String)workMap.get(KKSV0699_KKSV0699OP_WORK.SYSID));
		}
		
		return param;
	}


	/**
	 * 光回線の変更による認証ID付け替えが必要か否かを判定
	 * 
	 * @param param
	 * @param workMap
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
// OM-2013-0001878対応 20130909 星野 MOD START
//	private boolean isNewAuthorizationId(IRequestParameterReadWrite param, HashMap<String,Object> workMap) throws RequestParameterException
	private boolean isNewAuthorizationId(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String,Object> workMap) throws Throwable
// OM-2013-0001878対応 20130909 星野 MOD END
	{
		boolean ret = false;
// OM-2013-0001878対応 20130909 星野 DEL START
//		String g_prcGrpCd = (String)workMap.get("g_prcGrpCd");
//		String s_prcGrpCd = (String)workMap.get("s_prcGrpCd");
//		
//		if (("02".equals(g_prcGrpCd) && "02".equals(s_prcGrpCd))	//eo光ネットホームタイプ
//		||  ("03".equals(g_prcGrpCd) && "03".equals(s_prcGrpCd))	//eo光ネットメゾンタイプ
//		||  ("04".equals(g_prcGrpCd) && "04".equals(s_prcGrpCd))	//eo光ネットマンションタイプ
//		||  ("05".equals(g_prcGrpCd) && "05".equals(s_prcGrpCd))	//eoADSL(eAccess)
//		)
//		{
// OM-2013-0001878対応 20130909 星野 DEL END
		ArrayList<?> ekk1631List = (ArrayList<?>)workMap.get(KKSV0699_KKSV0699OP_WORK.EKK1631B002CBSMSG1LIST);
		if (ekk1631List != null && 0 < ekk1631List.size())
		{
			HashMap<String, Object> ekk1631Map = (HashMap<String, Object>)ekk1631List.get(0);
			
			//認証ＩＤ変更有無
			String ninsho_id_chg_um = (String)ekk1631Map.get(KKSV0699_KKSV0699OP_WORK_EKK1631B002CBSMsg1List.NINSHO_ID_CHG_UM);

			ret = (UM_ARI.equals(ninsho_id_chg_um.trim()));
			
// OM-2013-0001878対応 20130909 星野 ADD START
		}else{
			// 料金コース変更可能条件マスタが取得できない場合は、料金コース速度コードで判断する
			// 住所変更ではホーム⇔メゾン間のコース変更があるため、マスタが取得できない場合がある
			ret = checkChangeSpeed(handle, param);
			
// OM-2013-0001878対応 20130909 星野 ADD END
		}
// OM-2013-0001878対応 20130909 星野 DEL START
//		}
// OM-2013-0001878対応 20130909 星野 DEL END

		return ret;
	}
	
// OM-2013-0001878対応 20130909 星野 ADD START
	/**
	 * コース変更により速度が変わるかどうかをチェックします。
	 * 
	 * @param param リクエストパラメータ一式
	 * @return true: 速度変わる，false: 速度変化なし
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean checkChangeSpeed(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
// 2018/11/22 IT1-2018-0000213 MOD START　　５ギガ１０ギガ対応で認証ID変更は無くなった
//		/******************************************************************
//		 * コース変更前の料金コースの速度コード取得
//		 */
//		//***************************************************************************************************
//		// KKSV069974SC実行		EKK0791A010_料金コース一意照会
//		//***************************************************************************************************
//		executeEKK0791A010_01(handle, param);
//		
//		/******************************************************************
//		 * コース変更後の料金コースの速度コード取得
//		 */
//		// IT1-2012-0002124 2012/11/22 start  KKSV069909SCで提供帯域コードを決めるため料金コースマスタを参照
//		//***************************************************************************************************
//		// KKSV069969SC実行		EKK0791A010_料金コース一意照会
//		//***************************************************************************************************
//		executeEKK0791A010(handle, param);
//		// IT1-2012-0002124 2012/11/22 end
//		
//		//「前」
//		HashMap<?, ?> KKSV069974sc = (HashMap<?, ?>) param.getData(KKSV0699_KKSV0699OP.KKSV069974SC);
//		ArrayList<HashMap<?, ?>> ekk0791a010List = (ArrayList<HashMap<?, ?>>) KKSV069974sc.get("EKK0791A010CBSMsg1List");
//		HashMap<?, ?> ekk0791Map = ekk0791a010List.get(0);
//		String chgBfSpeedCd = (String) ekk0791Map.get("pcrs_speed_cd");
//		
//		//「後」
//		HashMap<?, ?> KKSV069969sc = (HashMap<?, ?>) param.getData(KKSV0699_KKSV0699OP.KKSV069969SC);
//		ekk0791a010List = (ArrayList<HashMap<?, ?>>) KKSV069969sc.get("EKK0791A010CBSMsg1List");
//		ekk0791Map = ekk0791a010List.get(0);
//		String chgAfSpeedCd = (String) ekk0791Map.get("pcrs_speed_cd");
//
//		// IT1-2016-0000109 DEL START
//		// 速度変更ありの場合
////		if(!chgAfSpeedCd.equals(chgBfSpeedCd)){
////			
////			// 100M⇔100Mプレミアム は認証ＩＤが変わらない
////			if( ( PCRS_SPEED_CD_100M.equals(chgAfSpeedCd) || PCRS_SPEED_CD_100MPREMIUM.equals(chgAfSpeedCd) )&& 
////				( PCRS_SPEED_CD_100M.equals(chgBfSpeedCd) || PCRS_SPEED_CD_100MPREMIUM.equals(chgBfSpeedCd) ) 
////			){
////				return false;
////			}else{
////				return true;
////			}
////			
////		// 速度変更なしの場合
////		}else{
////			return false;
////		}
//		// IT1-2016-0000109 DEL END
//		// IT1-2016-0000109 ADD START
//		// 10G⇒10G以外、または10G以外⇒10Gの場合
//		if (JKKStrConst.CD00688_10G.equals(chgBfSpeedCd) && !JKKStrConst.CD00688_10G.equals(chgAfSpeedCd)
//			|| !JKKStrConst.CD00688_10G.equals(chgBfSpeedCd) && JKKStrConst.CD00688_10G.equals(chgAfSpeedCd))
//		{
//			// 認証ID変更あり
//			return true;
//		}
//		else
//		{
//			// 認証ID変更なし(ANK-2765-00-00)
//			return false;
//		}
//		// IT1-2016-0000109 ADD END
		
		// 認証ID変更なし
		return false;
// 2018/11/22 IT1-2018-0000213 MOD END
	}
// OM-2013-0001878対応 20130909 星野 ADD END
	
	/**
	 * お客様一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeECK0011A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_ECK0011A010BSMapper mapper = new KKSV0699_KKSV0699OP_ECK0011A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0081A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0081A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0081A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳一覧照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0161B004(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0161B004BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0161B004BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約料金プラン変更サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0081C110(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0081C110BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0081C110BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約業務連絡備考変更サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0081C014(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0081C014BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0081C014BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 料金コース変更可能条件一覧照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK1631B002(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK1631B002BSMapper mapper = new KKSV0699_KKSV0699OP_EKK1631B002BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳＜eo光ネット＞登録サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0171D010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0171D010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0171D010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳＜eo光ネット＞照査サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0171C010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0171C010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0171C010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳＜eo光ネット＞照査締結サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0171C030(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0171C030BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0171C030BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 割引サービス対象契約一覧照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0481B001(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0481B001BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0481B001BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 割引サービス契約一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0451A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0451A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0451A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 割引サービス対象契約一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0481A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0481A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0481A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 割引サービス契約登録サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0451D010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0451D010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0451D010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * オプションサービス契約キャンセルサービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0351C220(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0351C220BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0351C220BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * オプションサービス契約解約サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0351C240(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0351C240BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0351C240BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 固定ＩＰアドレス一覧照会（契約用）サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEZM0101B040(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EZM0101B040BSMapper mapper = new KKSV0699_KKSV0699OP_EZM0101B040BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * エイジング対象使用終了サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEZM0111C010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EZM0111C010BSMapper mapper = new KKSV0699_KKSV0699OP_EZM0111C010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳＜eo光ネット＞一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0171A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0171A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0171A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳キャンセルサービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0161C160(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0161C160BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0161C160BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * サービス契約内訳解約サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0161C180(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0161C180BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0161C180BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 割引サービス契約解約サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0451C020(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0451C020BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0451C020BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 割引サービス契約キャンセルサービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0451C070(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0451C070BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0451C070BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * ID通知書一覧照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0561B001(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0561B001BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0561B001BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 通知書内訳一覧照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK1061B001(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK1061B001BSMapper mapper = new KKSV0699_KKSV0699OP_EKK1061B001BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 通知書取消サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0561C020(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0561C020BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0561C020BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	
	/**
	 * 呼び出したサービスIFの処理結果を判定します。
	 * 
	 * @param result
	 * @throws Throwable
	 */
	private void checkExecutionResult(Map<?, ?> result) throws Throwable
	{
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		Integer status = templates[0].getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if (!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
	}
	

	/**
	 * 新認証IDのためのオプションサービス契約の作成<br/>
	 * マルチセッション，固定グローバルIPアドレス　各オプションを持つサービス契約の場合
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite addOpSvcKei(SessionHandle handle, HashMap<String, Object> workMap, IRequestParameterReadWrite param) throws Throwable
	{
		//***************************************************************************************************
		// オプションサービス契約一覧照会（サービス契約番号）
		//***************************************************************************************************
		executeEKK0351B002(handle, param);
		
		//登録オプションサービス契約情報リストを初期化
		ArrayList<HashMap<String, Object>> newOptionList = new ArrayList<HashMap<String,Object>>();
		//解約オプションサービス契約リスト
		ArrayList<HashMap<String, Object>> oldOptionList = new ArrayList<HashMap<String,Object>>();
		// 解約予定オプションサービス契約リスト
		ArrayList<HashMap<String, Object>> dslRsvOpList = (ArrayList<HashMap<String, Object>>) workMap.get("dslRsvOpList");

		ArrayList<HashMap<String, Object>> ekk0351b002List = (ArrayList<HashMap<String, Object>>)workMap.get(KKSV0202_KKSV0202OP_WORK.EKK0351B002CBSMSG1LIST);

		/**
		 * 以降の処理で動的、静的IPにより処理が分岐するため、固定IP情報を確保
		 */
		//固定グローバルIP
		String kotei_ip_flg = "0";
		for (int i = 0; ekk0351b002List != null && i < ekk0351b002List.size(); i++)
		{
			HashMap<String, Object> kk0351Map = ekk0351b002List.get(i);
			
			//オプションサービスコード
			String op_svc_cd = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.OP_SVC_CD);

			if (OP_SVC_CD_FIXIPAD.equals(op_svc_cd))			//固定グローバルIPアドレス
			{
// 品質強化試験追加分 故障No.100052対応 20121230 星野 ADD START
				//オプションサービス契約番号
				String op_svc_kei_no = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
				boolean isDslRsv = false;
				for(HashMap<String, Object> childMap : dslRsvOpList){
					if(op_svc_kei_no.equals(childMap.get("op_svc_kei_no"))){
						isDslRsv = true;
					}
				}
				
				// 固定IPが解約予定の場合は無視
				if(!isDslRsv){
// 品質強化試験追加分 故障No.100052対応 20121230 星野 ADD END
					kotei_ip_flg = "1";
// 品質強化試験追加分 故障No.100052対応 20121230 星野 ADD START
				}
// 品質強化試験追加分 故障No.100052対応 20121230 星野 ADD END
			}
		}

		for (int i = 0; ekk0351b002List != null && i < ekk0351b002List.size(); i++)
		{
			HashMap<String, Object> kk0351Map = ekk0351b002List.get(i);
			//↓↓↓2012-10-30追加　ロット２ST3-2012-0000367↓↓↓
			//処理不可なステータスの契約をスルー
			String kk0351Stat = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
			if (SVC_KEI_STAT_020.compareTo(kk0351Stat) > 0 || SVC_KEI_STAT_220.compareTo(kk0351Stat) < 0)
			{
				continue;
			}
			//↑↑↑2012-10-30追加　ロット２ST3-2012-0000367↑↑↑
			//オプションサービスコード
			String op_svc_cd = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.OP_SVC_CD);
			//オプションサービス契約番号
			String op_svc_kei_no = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
			String fixipad = "";
			String netmask = "";
			
			boolean isDslRsv = false;
			for(HashMap<String, Object> childMap : dslRsvOpList){
				if(op_svc_kei_no.equals(childMap.get("op_svc_kei_no"))){
					isDslRsv = true;
				}
			}

			if ( (OP_SVC_CD_MLTISE.equals(op_svc_cd) ||			//マルチセッション
				   OP_SVC_CD_FIXIPAD.equals(op_svc_cd)				//固定グローバルIPアドレス
				 ) &&
				 !isDslRsv
			){
				HashMap<String, Object> yMap = new HashMap<String, Object>();
				yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.OP_SVC_CD, op_svc_cd);
				yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.OP_SVC_KEI_NO, op_svc_kei_no);
				//オプションサービス契約ステータス
				String op_svc_kei_stat = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
				yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.OP_SVC_KEI_STAT, op_svc_kei_stat);
				//世代登録年月日時分秒
				//世代登録年月日時分秒（更新前）
				String gene_add_dtm = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.GENE_ADD_DTM);
				yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.GENE_ADD_DTM, gene_add_dtm);
				yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.GENE_ADD_DTM_BF, gene_add_dtm);
				//更新年月日時分秒
				String upd_dtm = (String)kk0351Map.get(KKSV0202_KKSV0202OP_WORK_EKK0351B002CBSMsg1List.UPD_DTM);
				yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.UPD_DTM, upd_dtm);
				
				if (OP_SVC_CD_FIXIPAD.equals(op_svc_cd))		//固定グローバルＩＰアドレスオプションの場合
				{
					//***************************************************************************************************
					// オプションサービス契約＜ＩＳＰ＞一意照会
					//***************************************************************************************************
					//検索キー：オプションサービス契約番号
					workMap.put(KKSV0202_KKSV0202OP_WORK.OP_SVC_KEI_NO, op_svc_kei_no);
					executeEKK0361A010(handle, param);

					ArrayList<HashMap<String, Object>> ekk0361a010List = (ArrayList<HashMap<String, Object>>)workMap.get(KKSV0202_KKSV0202OP_WORK.EKK0361A010CBSMSG1LIST);
					HashMap<String, Object> kk0361Map = ekk0361a010List.get(0);
					//オプションサービス内容（固定ＩＰアドレス）
					fixipad = (String)kk0361Map.get(KKSV0202_KKSV0202OP_WORK_EKK0361A010CBSMsg1List.KOTEI_IP_AD);
					yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.KOTEI_IP_AD, fixipad);
					//オプションサービス内容（ネットマスク）
					netmask = (String)kk0361Map.get(KKSV0202_KKSV0202OP_WORK_EKK0361A010CBSMsg1List.NETMASK);
				}
				else
				{
					yMap.put(KKSV0202_KKSV0202OP_WORK_dlre_op_svc_kei_list.KOTEI_IP_AD, "");
				}
				oldOptionList.add(yMap);


				//検索キーのオプションサービス契約番号をセット
				workMap.put(KKSV0202_KKSV0202OP_WORK.OP_SVC_KEI_NO, op_svc_kei_no);
	
				//現オプションサービス契約から下記を取得し複製
				//***************************************************************************************************
				// オプションサービス契約一意照会
				//***************************************************************************************************
				executeEKK0351A010(handle, param);
		
				ArrayList<HashMap<String, Object>> ekk0351a010List = (ArrayList<HashMap<String, Object>>) workMap.get(KKSV0202_KKSV0202OP_WORK.EKK0351A010CBSMSG1LIST);
				HashMap<String, Object> kk0351MapEx = ekk0351a010List.get(0);

				//オプションサービスコード
				//料金コースコード
				String pcrs_cd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.PCRS_CD);
				//料金プランコード
				String pplan_cd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.PPLAN_CD);
				//試用加入年月日
				String ftrial_kanyu_ymd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.FTRIAL_KANYU_YMD);
				//試用期間終了年月日
				String ftrial_prd_endymd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.FTRIAL_PRD_ENDYMD);
				//本加入年月日
				String honkanyu_ymd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.HONKANYU_YMD);
				//本加入移行期限年月日
				String honkanyu_iko_kigen_ymd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.HONKANYU_IKO_KIGEN_YMD);
				//サービス利用開始希望年月日
				String svc_use_sta_kibo_ymd = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.SVC_USE_STA_KIBO_YMD);
				
				String oyaKeiSkbtCd = (String)kk0351MapEx.get("oya_kei_skbt_cd");

				//オプションサービス契約ステータス
				op_svc_kei_stat = (String)kk0351MapEx.get(KKSV0202_KKSV0202OP_WORK_EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);

				if (OP_SVC_CD_FIXIPAD.equals(op_svc_cd))			//固定グローバルIPアドレス
				{
					// 料金コースが"マンションタイプ　グローバル　１００Ｍ　イーサネット"(A54)または
					// "マンションタイプ　グローバル　１ギガ　イーサネット"(A55)の場合、新規アドレスを取得しない
					if (JKKSvcConst.PCRS_CD_MANS_GLB_METHER.equals(workMap.get("g_pcrsCd")) || JKKSvcConst.PCRS_CD_MANS_GLB_GETHER.equals(workMap.get("g_pcrsCd")))
					{
						//固定ＩＰアドレス
						workMap.put(KKSV0202_KKSV0202OP_WORK.KOTEI_IP_AD, fixipad);
						//ネットマスク
						workMap.put(KKSV0202_KKSV0202OP_WORK.NETMASK, netmask);
					}
					else
					{
						param = engageNewFixIpAddress(handle, workMap, param);
					}
					
					//マルチセッション情報を削除
					workMap.remove(KKSV0202_KKSV0202OP_WORK.MLTISE_SHK_NINSHO_ID_PWD);
					workMap.remove(KKSV0202_KKSV0202OP_WORK.MLTISE_NINSHO_ID);
					workMap.remove(KKSV0202_KKSV0202OP_WORK.MLTISE_NINSHO_ID_PWD);
					workMap.remove(EKK0361D010CBSMsg.MLTISE_SESSION_CNT);
				}
				else											//マルチセッション
				{
					//固定グローバルオプションが存在する場合は、マルチセッションID、PW、初期PWへはセットしない
					String ispNinshoId="";
					String ispNinshoIdPw="";
					String ispNinshoIdShkPw="";
					if("1".equals(kotei_ip_flg))
					{
						//マルチセッション用初期認証ＩＤパスワード
						ispNinshoIdShkPw = (String)workMap.get(KKSV0202_KKSV0202OP_WORK.SHK_ISP_NINSHO_ID_PWD);	//サービス契約内訳<eo光ネット>照査締結SCにて取得
						//マルチセッション用認証ＩＤ
// 20130506 星野 MOD START
// 認証ＩＤを通常異動と合わせる
//						//↓↓↓2012-11-02変更　ロット１ST1-2012-0000862（マルチセッションパスワード設定）↓↓↓
//						//	ispNinshoId = (String)workMap.get(KKSV0202_KKSV0202OP_WORK.ISP_NINSHO_ID);
//							ispNinshoId = JKKBpCommon.getAgingNinshoId((String)workMap.get(KKSV0202_KKSV0202OP_WORK.ISP_NINSHO_ID));
//							ispNinshoId += "P";			//おしりにＰを付けるお約束です
						ispNinshoId = (String)workMap.get(KKSV0202_KKSV0202OP_WORK.ISP_NINSHO_ID);
						String[] buf = ispNinshoId.split("@");
						ispNinshoId = buf[0] + "P" + (1 < buf.length ? ("@" + buf[1]) : "");
// 20130506 星野 MOD END
						//マルチセッション用認証ＩＤパスワード
						ispNinshoIdPw = (String)workMap.get(KKSV0202_KKSV0202OP_WORK.ISP_NINSHO_ID_PWD);
					}
					
					//マルチセッション用初期認証ＩＤパスワード
					workMap.put(KKSV0202_KKSV0202OP_WORK.MLTISE_SHK_NINSHO_ID_PWD, ispNinshoIdShkPw);
					//マルチセッション用認証ＩＤ
					workMap.put(KKSV0202_KKSV0202OP_WORK.MLTISE_NINSHO_ID, ispNinshoId);
					//マルチセッション用認証ＩＤパスワード
					workMap.put(KKSV0202_KKSV0202OP_WORK.MLTISE_NINSHO_ID_PWD, ispNinshoIdPw);
					//マルチセッション用セッション数（1は静的、動的に関係なくセット）
					workMap.put(EKK0361D010CBSMsg.MLTISE_SESSION_CNT, "1");
					
					//固定ＩＰアドレスを削除
					workMap.remove(KKSV0202_KKSV0202OP_WORK.KOTEI_IP_AD);
					workMap.remove(KKSV0202_KKSV0202OP_WORK.NETMASK);
				}

				//***************************************************************************************************
				// オプションサービス契約＜ＩＳＰ＞登録
				//***************************************************************************************************
				//オプションサービスコード
				workMap.put(KKSV0202_KKSV0202OP_WORK.OP_SVC_CD, op_svc_cd);
				//料金コースコード
				workMap.put(KKSV0202_KKSV0202OP_WORK.PCRS_CD, pcrs_cd);
				//料金プランコード
				workMap.put(KKSV0202_KKSV0202OP_WORK.PPLAN_CD, pplan_cd);
				//試用加入年月日
				workMap.put(KKSV0202_KKSV0202OP_WORK.FTRIAL_KANYU_YMD, ftrial_kanyu_ymd);
				//試用期間終了年月日
				workMap.put(KKSV0202_KKSV0202OP_WORK.FTRIAL_PRD_ENDYMD, ftrial_prd_endymd);
				//本加入年月日
				workMap.put(KKSV0202_KKSV0202OP_WORK.HONKANYU_YMD, honkanyu_ymd);
				//本加入移行期限年月日
				workMap.put(KKSV0202_KKSV0202OP_WORK.HONKANYU_IKO_KIGEN_YMD, honkanyu_iko_kigen_ymd);
				//サービス利用開始希望年月日
				workMap.put(KKSV0202_KKSV0202OP_WORK.SVC_USE_STA_KIBO_YMD, svc_use_sta_kibo_ymd);

				// 親契約識別コード
				workMap.put("oya_kei_skbt_cd", oyaKeiSkbtCd);

				executeEKK0361D010(handle, param);

				if (JKKSvcConst.SVC_KEI_STAT_020.equals(op_svc_kei_stat))			//照査済？
				{
					//***************************************************************************************************
					// オプションサービス契約＜ＩＳＰ＞照査
					//***************************************************************************************************
					executeEKK0361C010(handle, param);
				}
				else
				{
					//***************************************************************************************************
					// オプションサービス契約＜ＩＳＰ＞照査締結
					//***************************************************************************************************
					executeEKK0361C030(handle, param);
				}

				//固定ＩＰアドレスのエイジング開始
				if (OP_SVC_CD_FIXIPAD.equals(op_svc_cd))			//固定グローバルIPアドレス
				{
					// 料金コースが"マンションタイプ　グローバル　１００Ｍ　イーサネット"(A54)または
					// "マンションタイプ　グローバル　１ギガ　イーサネット"(A55)の場合、
					// ＩＰアドレスが変化しないためエイジングを行わない
					if (!JKKSvcConst.PCRS_CD_MANS_GLB_METHER.equals(workMap.get("g_pcrsCd")) && !JKKSvcConst.PCRS_CD_MANS_GLB_GETHER.equals(workMap.get("g_pcrsCd")))
					{
						param = startFixipadAging(handle, workMap, param);
					}
				}

				//新しいオプションサービス契約情報を保持
				HashMap<String, Object> xMap = new HashMap<String, Object>();
				xMap.put(KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list.OP_SVC_KEI_NO, 
						workMap.get(KKSV0202_KKSV0202OP_WORK.OP_SVC_KEI_NO));
				xMap.put(KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list.OP_SVC_CD, op_svc_cd);
				xMap.put(KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list.GENE_ADD_DTM, 
						workMap.get(KKSV0202_KKSV0202OP_WORK.KK0351_GENE_ADD_DTM));
				xMap.put(KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list.UPD_DTM, 
						workMap.get(KKSV0202_KKSV0202OP_WORK.KK0351_UPD_DTM));
				xMap.put(KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list.BASE_OP_SVC_KEI_NO, op_svc_kei_no);
				xMap.put(KKSV0202_KKSV0202OP_WORK_engaged_op_svc_kei_list.BASE_GENE_ADD_DTM, gene_add_dtm);

				newOptionList.add(xMap);
			}
		}

		workMap.put(KKSV0202_KKSV0202OP_WORK.ENGAGED_OP_SVC_KEI_LIST, newOptionList);
		workMap.put(KKSV0202_KKSV0202OP_WORK.DLRE_OP_SVC_KEI_LIST, oldOptionList);

		return param;
	}

	/**
	 * オプションサービス契約一覧照会（サービス契約番号）サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0351B002(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0351B002BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0351B002BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}

	/**
	 * オプションサービス契約＜ISP＞一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0361A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0361A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0361A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}

	/**
	 * オプションサービス契約一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0351A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0351A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0351A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}

	/**
	 * オプションサービス契約＜ISP＞登録サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0361D010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0361D010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0361D010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}

	/**
	 * オプションサービス契約＜ISP＞照査サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0361C010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0361C010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0361C010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}

	/**
	 * オプションサービス契約＜ISP＞照査締結サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0361C030(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0361C030BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0361C030BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
// OM-2013-0001878対応 20130909 星野 ADD START
	/**
	 * 料金コース一意照会サービスI/F「コース変更後」実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0791A010(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0791A010BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0791A010BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 料金コース一意照会サービスI/F「コース変更前」実行
	 * 
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void executeEKK0791A010_01(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		KKSV0699_KKSV0699OP_EKK0791A010_01BSMapper mapper = new KKSV0699_KKSV0699OP_EKK0791A010_01BSMapper();
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
// OM-2013-0001878対応 20130909 星野 ADD END


	/**
	 * 新固定ＩＰアドレスのエイジング開始
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite startFixipadAging(SessionHandle handle, HashMap<String, Object> workMap, IRequestParameterReadWrite param) throws Throwable
	{
		HashMap<String, Object> kksv002201cc = (HashMap<String, Object>)param.getData(KKSV0022_KKSV0022OP.KKSV002201CC);
		ArrayList<?> childList = (ArrayList<?>)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_HRADSI_LIST);
		HashMap<String, Object> childMap = (HashMap<String, Object>)childList.get(0);

		//＋＋固定ＩＰアドレス払出ＣＣに渡すパラメータを編集＋＋
		//固定ＩＰアドレス
		String fixipad = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.FIXIPAD);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_IN, fixipad);
		//更新年月日時分秒
		String upd_dtm = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.ZM0101_UPD_DTM);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.ZM0101_UPD_DTM_BF, upd_dtm);
		//利用開始日
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.USE_STAT_YMD, workMap.get("g_opeYmd"));
		//集約局・中心局コード
		String shyakk_chuskk_cd_in = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SHYAKK_CHUSKK_CD);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.SHYAKK_CHUSKK_CD_IN, shyakk_chuskk_cd_in);
		//固定IP取得種別コード
		String kotei_ip_stku_sbt_cd_in = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.KOTEI_IP_STKU_SBT_CD);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.KOTEI_IP_STKU_SBT_CD_IN, kotei_ip_stku_sbt_cd_in);
		//使用回数
		String zBuf = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.USE_CNT);
		int nUseCnt = Integer.parseInt(zBuf);
		String use_cnt_in = String.valueOf(++nUseCnt);			//使用回数をカウントアップ
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.USE_CNT_IN, use_cnt_in);

		//***************************************************************************************************
		// 固定ＩＰアドレス払出（登録）
		//***************************************************************************************************
		JKKFixipadCC cc = new JKKFixipadCC();
		cc.runFixipadHradsi(handle, param, "post");
		
		return param;
	}

	/**
	 * 固定グローバルIPアドレス・オプションサービス契約の付替えに伴う、新IPアドレスの取得
	 * 
	 * @param handle
	 * @param workMap
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite engageNewFixIpAddress(SessionHandle handle, HashMap<String, Object> workMap, IRequestParameterReadWrite param)
	throws Throwable
	{
		//***************************************************************************************************
		// 固定ＩＰアドレス払出（取得）
		//***************************************************************************************************
		param = editParameterMap4FixipadCC(workMap, param);

		JKKFixipadCC cc = new JKKFixipadCC();
		cc.runFixipadHradsi(handle, param, "get");

		HashMap<String, Object> kksv002201cc = (HashMap<String, Object>)param.getData(KKSV0022_KKSV0022OP.KKSV002201CC);
		ArrayList<?> childList = (ArrayList<?>)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_HRADSI_LIST);
		if (childList != null && 0 < childList.size())
		{
			HashMap<String, Object> childMap = (HashMap<String, Object>)childList.get(0);
	
			//固定ＩＰアドレス
			String fixipad = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.FIXIPAD);
			workMap.put(KKSV0202_KKSV0202OP_WORK.KOTEI_IP_AD, fixipad);

			//ネットマスク
			String netmask = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.NETMASK);
			workMap.put(KKSV0202_KKSV0202OP_WORK.NETMASK, netmask);
			
			//サービス契約回線内訳番号
			String svc_kei_kaisen_ucwk_no = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SVC_KEI_KAISEN_UCWK_NO);
			workMap.put("svc_kei_kaisen_ucwk_no", svc_kei_kaisen_ucwk_no);
			
			//集約局中心局コード
			String shyakk_chuskk_cd = (String)childMap.get(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SHYAKK_CHUSKK_CD);
			workMap.put(KKSV0202_KKSV0202OP_WORK.SHYAKK_CHUSKK_CD, shyakk_chuskk_cd);
		}
		else
		{
			throw new BPMFlowException((RequestParameter) param, "固定ＩＰアドレスが払い出されませんでした");
		}

		return param;
	}

	/**
	 * 固定ＩＰアドレス払出CCの入力マップを編集
	 * 
	 * @param workMap 
	 * @param param
	 * @return
	 * @throws RequestParameterException
	 * @throws BPMException
	 */
	private IRequestParameterReadWrite editParameterMap4FixipadCC(HashMap<String,Object> workMap, IRequestParameterReadWrite param) throws RequestParameterException, BPMException
	{
		HashMap<String, Object> kksv002201cc = new HashMap<String, Object>();

		//＋＋固定ＩＰアドレス払出ＣＣに渡すパラメータを編集＋＋
		//サービス契約番号
		String svc_kei_no = (String)workMap.get(KKSV0202_KKSV0202OP_WORK.SVC_KEI_NO);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.SVC_KEI_NO, svc_kei_no);

		//ＩＳＰ認証ＩＤ
		String isp_ninsho_id = (String)workMap.get(KKSV0202_KKSV0202OP_WORK.ISP_NINSHO_ID);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.ISP_NINSHO_ID, isp_ninsho_id);
		
		//機能コード
		kksv002201cc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);

		//固定ＩＰアドレス払出マップの設定
		param.setData(KKSV0022_KKSV0022OP.KKSV002201CC, kksv002201cc);

		return param;
	}
}
