/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKAdchgKktkSvcKeiDslCC
 *   ソースファイル名：JKKAdchgKktkSvcKeiDslCC.java
 *   作成者          ：富士通
 *   日付            ：2012年08月27日
 *＜機能概要＞
 *   機器提供サービス契約解約CC部品
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v3.00.00    2012/08/27   FJ          新規作成
 *   v13.00.00   2015/04/21   FJ)阮      【OM-2015-0000170】
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import static com.fujitsu.futurity.bp.custom.constant.JKKSvcConst.KKTK_SVC_CD_BBR;
import static com.fujitsu.futurity.bp.custom.constant.JKKSvcConst.SVC_KEI_STAT_030;
import static com.fujitsu.futurity.bp.custom.constant.JKKSvcConst.SVC_KEI_STAT_100;
import static com.fujitsu.futurity.bp.custom.constant.JKKSvcConst.SVC_KEI_STAT_210;
import static com.fujitsu.futurity.bp.custom.constant.KKSV0677_KKSV0677OP_WORK.LAST_UPD_DTM;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.custom.constant.KKSV0677_KKSV0677OP;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EDK0301D010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK0161A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK0161C180BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK0161C190BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK0341A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK0341C340BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK0341C350BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0677_KKSV0677OP_EKK1091D010BSMapper;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EDK0301D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C340CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C350CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;

/**
 * 機器提供サービス契約解約CC部品
 *
 * @author 富士通
 */
public class JKKAdchgKktkSvcKeiDslCC extends AbstractCommonComponent
{
	/** 契約ステータス：110(契約変更中) **/
	private static final String SVC_KEI_STAT_110 = "110";
	/** 契約ステータス：220(停止中) **/
	private static final String SVC_KEI_STAT_220 = "220";
	/** サービス解約理由コード:通常解約 */
	private static final String SVC_DLRE_CD_01 = "01";
	/** 機器提供サービスコード:STB */
	public static final String KKTK_SVC_CD_STB = "C009";
	/** C0:宅内機器種別コード CO */
	public static final String CODE_C0 = "C0";
	/** D0:宅内機器種別コード：ONU */
	public static final String CODE_D0 = "D0";
	/** E0:宅内機器種別コード：V-ONU */
	public static final String CODE_E0 = "E0";
	/** F0:宅内機器種別コード：ルーター */
	public static final String CODE_F0 = "F0";
	/** 撤去種別コード:撤去 */
	public static final String CD00851_TEKKYO = "1";
	/** 撤去種別コード:解約 */
	public static final String CD00851_SLRE = "3";
	/** 設置ルーターコード なし */
	public static final String ROUTER_NONE = "2";
	/** 宅内機器異動コード 03:一部撤去 */
	public static final String REMOVE = "03";
	/** マンション物件コード: マンション */
	public static final String MANSION_BUKKEN_CD_MANSION = "001";
	/** 有無:無 */
	public static final String CD00002_NASHI = "0";
	/** 料金コースコード（eo光テレビ(ｅｏ光テレビ再送信)） */
	public static final String PCRS_CD_A23 = "A23";
	/** 料金コースコード（ＫＣＮｅｏ光テレビ（役務提供）） */
	public static final String PCRS_CD_A25 = "A25";
	/** 料金コースコード（地デジ・ＢＳコース） */
	public static final String PCRS_CD_A37 = "A37";
// OM-2015-0000170 2015/04/21 ADD START
	/** 機器提供サービスコード:Ｂ−ＣＡＳカード */
	public static final String KKTK_SVC_CD_BCAS = "C010";
	/** 機器提供サービスコード:Ｃ−ＣＡＳカード */
	public static final String KKTK_SVC_CD_CCAS = "C011";
// OM-2015-0000170 2015/04/21 ADD END

	/** 作業領域 */
	private class CCMAP {
		/** 機器提供サービス契約リスト */
		private static final String KKTK_SVC_KEI_LIST = "kktk_svc_kei_list";
		/** サービス契約内訳リスト */
		private static final String SVC_KEI_UCWK_LIST = "svc_kei_ucwk_list";
		/** サービス契約内訳番号 */
		private static final String SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
		/** 申込明細番号 */
		private static final String MSKM_DTL_NO = "mskm_dtl_no";
		/** 変更予定年月日 */
		private static final String CHG_RSV_YMD = "chg_rsv_ymd";
		/** 解約希望年月日 */
		private static final String KJ_DSL_YMD = "kj_dsl_ymd";
		/** 工事希望年月日 */
		private static final String KJ_KIBO_YMD = "kj_kibo_ymd";
		/** 移転元マンション物件コード */
		private static final String ITENM_MANSION_BUKKEN_CD = "itenm_mansion_bukken_cd";
		/** 異動区分 */
		private static final String IDO_DIV = "ido_div";
		/** 異動理由コード */
		private static final String IDO_RSN_CD = "ido_rsn_cd";
// IT1障害No.100193対応 20121128 星野 ADD START
		/** 料金コースコード（サービス契約） */
		private static final String PCRS_CD = "pcrs_cd";
// IT1障害No.100193対応 20121128 星野 ADD START
//		/** 設置ルータコード */
//		private static final String EOHNT_STC_ROUTER_CD = "eohnt_stc_router_cd";
		/** 機能コード */
		private static final String FUNC_CODE = "func_code";
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO ADD START
		/** 異動年月日時分秒 */
		private static final String IDO_DTM = "ido_dtm";
		/** 異動理由リスト*/
		private static final String EKK1091D010CBSMSG1LIST = "EKK1091D010CBSMsg1List";
		/** 異動理由メモ */
		private static final String IDO_RSN_MEMO = "ido_rsn_memo";
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO ADD END
	}
	private class KKTK_SVC_KEI_MAP {
		/** 機器提供サービス契約番号 */
		private static final String KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
//		/** 宅内機器異動コード */
//		private static final String ADCHG_DTL_STB_IDO_DIV = "adchg_dtl_stb_ido_div";
//		/** 撤去種別 */
//		private static final String ADCHG_DTL_TKKIKI_TEKKYO_SBT_CD = "adchg_dtl_tkkiki_tekkyo_sbt_cd";
//		/** 宅内機器種別 */
//		private static final String ADCHG_DTL_TAKNKIKI_SBT_CD = "adchg_dtl_taknkiki_sbt_cd";
	}
	
	/** 作業領域 */
	private static ThreadLocal<HashMap<String, Object>> ccMap = new ThreadLocal<HashMap<String,Object>>();
	
	/**
	 *　機器提供サービス契約解約CC処理です。
	 * 
	 * 複数件の機器提供サービス契約の解約処理を行います。<br>
	 * <br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite dslKktkSvcKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			if (!mapSet(param, fixedText)) {
				return param;
			}
			
			ArrayList<HashMap<String, Object>> kktkSvcKeiList =
				(ArrayList<HashMap<String, Object>>)ccMap.get().get(CCMAP.KKTK_SVC_KEI_LIST);
			
			ArrayList<HashMap<String, Object>> svcKeiUcwkList =
				(ArrayList<HashMap<String, Object>>)ccMap.get().get(CCMAP.SVC_KEI_UCWK_LIST);
			
	// IT1障害No.100193対応 20121128 星野 ADD START
			// サービス契約の料金コースコード
			String svcPcrsCd = (String) ccMap.get().get(CCMAP.PCRS_CD);
	// IT1障害No.100193対応 20121128 星野 ADD END
	
			
			for (int cnt = 0; cnt < kktkSvcKeiList.size(); cnt++)
			{
				HashMap<String, Object> kktkSvcKeiMap = kktkSvcKeiList.get(cnt);
				HashMap<String, Object> svcKeiUcwkMap = svcKeiUcwkList.get(cnt);
				// 機器提供サービス契約番号の取得
				String kktkSvcKeiNo = (String)kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.KKTK_SVC_KEI_NO);
				// サービス契約内訳番号の取得
				String svcKeiUtwkNo = (String)svcKeiUcwkMap.get(CCMAP.SVC_KEI_UCWK_NO);
				
				//--------------------------------------------
				// ◆ 機器提供サービス契約一意照会サービスI/F
				//--------------------------------------------
				executeEKK0341A010(handle, param, kktkSvcKeiNo);
				
				// 機器提供サービス契約ステータスの取得
				String kktkSvcKeiStat = getStringKk0341A010(param, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
				// 機器提供サービスコードの取得
				String kktkSvcCd = getStringKk0341A010(param, EKK0341A010CBSMsg1List.KKTK_SVC_CD);
				
				if (isExecuteEKK0341C340(param, kktkSvcKeiStat, kktkSvcCd, kktkSvcKeiMap)) {
					//--------------------------------------------
					// ◆ 機器提供サービス契約解約サービスI/F
					//--------------------------------------------
					executeEKK0341C340(handle, param);
				}
// OM-2015-0000170 2015/04/21 MOD START
//				if (isExecuteEKK0341C350(param, kktkSvcKeiStat, svcPcrsCd)) {
				if (isExecuteEKK0341C350(param, kktkSvcKeiStat, svcPcrsCd, kktkSvcCd)) {
// OM-2015-0000170 2015/04/21 MOD END
					//--------------------------------------------
					// ◆ 機器提供サービス契約解約確定サービスI/F
					//--------------------------------------------
					executeEKK0341C350(handle, param);
				}
				
				if (isExecuteEKK0161XXXX(kktkSvcKeiStat, svcKeiUtwkNo, kktkSvcCd, kktkSvcKeiMap)) {
					//--------------------------------------------
					// ◆ サービス契約内訳一意照会サービスI/F
					//--------------------------------------------
					executeEKK0161A010(handle, param, svcKeiUtwkNo);
					//--------------------------------------------
					// ◆ サービス契約内訳解約サービスI/F
					//--------------------------------------------
// OM-2015-0000170 2015/04/21 MOD START
//					executeEKK0161C180(handle, param, svcPcrsCd);
					executeEKK0161C180(handle, param, svcPcrsCd, kktkSvcCd);
// OM-2015-0000170 2015/04/21 MOD END
					
					if(isExecuteEKK0161C190(kktkSvcKeiStat, svcKeiUtwkNo, kktkSvcCd, svcPcrsCd)){
						//--------------------------------------------
						// ◆ サービス契約内訳解約確定サービスI/F
						//--------------------------------------------
						executeEKK0161C190(handle, param);
					}
				}

// ANK-1578-00-00 2014.01.27 T.TORIKAI MOD START（IT1-2014-0000047）
				//--------------------------------------------
				// ◆ 返品機器受付サービスI/F
				//--------------------------------------------
//				executeEDK0301D010(handle, param);
				// 返品未作成フラグが設定されていない場合のみ返品を作成する
				if (!"1".equals(kktkSvcKeiMap.get("henpin_not_create_flg"))) {
					executeEDK0301D010(handle, param);
				}
// ANK-1578-00-00 2014.01.27 T.TORIKAI MOD END  （IT1-2014-0000047）

	// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD START
	// コメントアウトを削除
				//--------------------------------------------
				// ◆ 進捗登録サービスI/F
				//--------------------------------------------
				executeEKK1091D010(handle, param);
	// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD END
			}
			
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(ccMap.get() != null){
				ccMap.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
		
	}
	
	/**
	 * マップデータをローカル領域に保存
	 * 
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private boolean mapSet(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		if (inMap == null) {
			return false;
		}
		ccMap.set(inMap);
		
		return true;
	}
	
	/**
	 * 機器提供サービス契約一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private void executeEKK0341A010(	SessionHandle handle,
										IRequestParameterReadWrite param,
										String kktkSvcKeiNo) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067701SC;
		KKSV0677_KKSV0677OP_EKK0341A010BSMapper mapper = new KKSV0677_KKSV0677OP_EKK0341A010BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// 引継データ.機器提供サービス契約番号 → 機器提供サービス契約番号
		inMap.put(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		// 機能コード（固定：2）
		inMap.put(EKK0341A010CBSMsg.FUNC_CODE, "2");
		// 運用日 → ＫＥＹ＿予約適用年月日
		inMap.put(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		// 最終更新年月日
		getWorkMap(param).put(LAST_UPD_DTM, getStringKk0341A010(param, EKK0341A010CBSMsg1List.LAST_UPD_DTM));
		
		return;
	}
	
	/**
	 * 機器提供サービス契約解約サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private void executeEKK0341C340(	SessionHandle handle,
										IRequestParameterReadWrite param) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067702SC;
		KKSV0677_KKSV0677OP_EKK0341C340BSMapper mapper = new KKSV0677_KKSV0677OP_EKK0341C340BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// 機器提供サービス契約一意照会.機器提供サービス契約番号 → 機器提供サービス契約番号
		inMap.put(EKK0341C340CBSMsg.KKTK_SVC_KEI_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// 引継データ.機能コード → 機能コード
		inMap.put(EKK0341C340CBSMsg.FUNC_CODE, ccMap.get().get(CCMAP.FUNC_CODE));
		// 引継データ.申込明細番号 → 申込明細番号
		inMap.put(EKK0341C340CBSMsg.MSKM_DTL_NO, (String)ccMap.get().get(CCMAP.MSKM_DTL_NO));
		// 引継データ.変更予定年月日 → 予約適用開始希望年月日
		inMap.put(EKK0341C340CBSMsg.RSV_TSTA_KIBO_YMD, (String)ccMap.get().get(CCMAP.CHG_RSV_YMD));
		// 運用年月日 → サービス終了年月日
		inMap.put(EKK0341C340CBSMsg.SVC_ENDYMD, JCCBPCommon.getOpeDate(null));
		// 運用年月日 → サービス課金終了年月日
		inMap.put(EKK0341C340CBSMsg.SVC_CHRG_ENDYMD, JCCBPCommon.getOpeDate(null));
		// 更新年月日 → 更新年月日時分秒（更新前）
		inMap.put(EKK0341C340CBSMsg.UPD_DTM_BF, getWorkMap(param).get(LAST_UPD_DTM));
		// 引継データ.異動区分 → 異動区分
		inMap.put(EKK0341C340CBSMsg.IDO_DIV, (String)ccMap.get().get(EKK0341A010CBSMsg1List.IDO_DIV));
		// サービス終了年月日
		String kj_dsl_ymd = "";
		String itenmMansionBukkenCd = (String)ccMap.get().get(CCMAP.ITENM_MANSION_BUKKEN_CD);
// OM-2013-0003803対応 20131106 星野 DEL START
//		// 移転元のマンション物件コードがマンションの場合
//		if (MANSION_BUKKEN_CD_MANSION.equals(itenmMansionBukkenCd)) {
// OM-2013-0003803対応 20131106 星野 DEL END
		// 解約希望年月日
		kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_DSL_YMD);
// OM-2013-0003803対応 20131106 星野 DEL START
//		} else {
//			// 工事希望年月日
//			kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_KIBO_YMD);
//		}
// OM-2013-0003803対応 20131106 星野 DEL END
		inMap.put(EKK0341C340CBSMsg.SVC_ENDYMD, kj_dsl_ymd );
		// 残置フラグ
		inMap.put(EKK0341C340CBSMsg.ZANCHI_FLG, CD00002_NASHI);
		// 機器提供サービス契約一意照会.宅内機器異動コード → 宅内機器異動コード
		inMap.put(EKK0341C340CBSMsg.TAKNKIKI_IDO_CD, getStringKk0341A010(param, EKK0341A010CBSMsg1List.TAKNKIKI_IDO_CD));

		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		// 最終更新年月日
		getWorkMap(param).put(LAST_UPD_DTM, getStringMapData(param, mapName, EKK0341C340CBSMsg.UPD_DTM));
		
		return;
	}
	
	/**
	 * 機器提供サービス契約解約確定サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private void executeEKK0341C350(	SessionHandle handle,
										IRequestParameterReadWrite param) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067703SC;
		KKSV0677_KKSV0677OP_EKK0341C350BSMapper mapper = new KKSV0677_KKSV0677OP_EKK0341C350BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// 機器提供サービス契約一意照会.機器提供サービス契約番号 → 機器提供サービス契約番号
		inMap.put(EKK0341C350CBSMsg.KKTK_SVC_KEI_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// 引継データ.機能コード → 機能コード
		inMap.put(EKK0341C350CBSMsg.FUNC_CODE, ccMap.get().get(CCMAP.FUNC_CODE));
		// サービス終了年月日
		String kj_dsl_ymd = "";
		String itenmMansionBukkenCd = (String)ccMap.get().get(CCMAP.ITENM_MANSION_BUKKEN_CD);
// OM-2013-0003803対応 20131106 星野 DEL START
//		// 移転元のマンション物件コードがマンションの場合
//		if (MANSION_BUKKEN_CD_MANSION.equals(itenmMansionBukkenCd)) {
// OM-2013-0003803対応 20131106 星野 DEL END
		// 解約希望年月日
		kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_DSL_YMD);
// OM-2013-0003803対応 20131106 星野 DEL START
//		} else {
//			// 工事希望年月日
//			kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_KIBO_YMD);
//		}
// OM-2013-0003803対応 20131106 星野 DEL END
		inMap.put(EKK0341C350CBSMsg.SVC_ENDYMD, kj_dsl_ymd );
		// サービス課金終了年月日
		inMap.put(EKK0341C350CBSMsg.SVC_CHRG_ENDYMD, kj_dsl_ymd);
		// 通常解約 → サービス解約理由コード
		inMap.put(EKK0341C350CBSMsg.SVC_DLRE_CD, SVC_DLRE_CD_01);
		// 更新年月日 → 更新年月日時分秒（更新前）
		inMap.put(EKK0341C350CBSMsg.UPD_DTM_BF, getWorkMap(param).get(LAST_UPD_DTM));
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		// 最終更新年月日
		getWorkMap(param).put(LAST_UPD_DTM, getStringMapData(param, mapName, EKK0341C350CBSMsg.UPD_DTM));
		
		return;
	}
	
	/**
	 * サービス契約内訳一意照会サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @param svcKeiUtwkNo
	 * @return
	 * @throws Throwable 
	 */
	private void executeEKK0161A010(	SessionHandle handle,
										IRequestParameterReadWrite param,
										String svcKeiUtwkNo) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067704SC;
		KKSV0677_KKSV0677OP_EKK0161A010BSMapper mapper = new KKSV0677_KKSV0677OP_EKK0161A010BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// サービス契約内訳番号 → サービス契約内訳番号
		inMap.put(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUtwkNo);
		// 機能コード（固定：2）
		inMap.put(EKK0161A010CBSMsg.FUNC_CODE, "2");
		// 運用日 → ＫＥＹ＿予約適用年月日
		inMap.put(EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		// 最終更新年月日
		getWorkMap(param).put(LAST_UPD_DTM, getStringKk0161A010(param, EKK0161A010CBSMsg1List.LAST_UPD_DTM));
		
		return;
	}
	
	/**
	 * サービス契約内訳解約サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
// OM-2015-0000170 2015/04/21 MOD START
//	private void executeEKK0161C180(	SessionHandle handle,
//										IRequestParameterReadWrite param, String svcPcrsCd) throws Throwable
	private void executeEKK0161C180(	SessionHandle handle,
										IRequestParameterReadWrite param, String svcPcrsCd, String kktkSvcCd) throws Throwable
// OM-2015-0000170 2015/04/21 MOD END
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067705SC;
		KKSV0677_KKSV0677OP_EKK0161C180BSMapper mapper = new KKSV0677_KKSV0677OP_EKK0161C180BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// サービス契約内訳一意照会.サービス契約内訳番号 → サービス契約内訳番号
		inMap.put(EKK0161C180CBSMsg.SVC_KEI_UCWK_NO, getStringKk0161A010(param, EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));
		// 引継データ.機能コード → 機能コード
		inMap.put(EKK0161C180CBSMsg.FUNC_CODE, ccMap.get().get(CCMAP.FUNC_CODE));
		// 引継データ.申込明細番号 → 申込明細番号
		inMap.put(EKK0161C180CBSMsg.MSKM_DTL_NO, (String)ccMap.get().get(CCMAP.MSKM_DTL_NO));
		// 引継データ.変更予定年月日 → 予約適用開始希望年月日
		inMap.put(EKK0161C180CBSMsg.RSV_TSTA_KIBO_YMD, (String)ccMap.get().get(CCMAP.CHG_RSV_YMD));
		// 引継データ.解約希望年月日 → サービス終了年月日
		String itenmMansionBukkenCd = (String)ccMap.get().get(CCMAP.ITENM_MANSION_BUKKEN_CD);
		String kj_dsl_ymd = "";
// IT1障害No.100193対応 20121128 星野 ADD START
		// サービス契約の料金コースコードがSTBなしコースの場合、解約確定不要
		if (PCRS_CD_A37.equals(svcPcrsCd)
				|| PCRS_CD_A23.equals(svcPcrsCd)
// OM-2015-0000170 2015/04/21 MOD START
//				|| PCRS_CD_A25.equals(svcPcrsCd))
				|| PCRS_CD_A25.equals(svcPcrsCd)
// OM-2015-0000170 2015/04/21 MOD END
// OM-2015-0000170 2015/04/21 ADD START
				|| KKTK_SVC_CD_STB.equals(kktkSvcCd)
				|| KKTK_SVC_CD_BCAS.equals(kktkSvcCd)
				|| KKTK_SVC_CD_CCAS.equals(kktkSvcCd))
// OM-2015-0000170 2015/04/21 ADD END
		{
			kj_dsl_ymd = "20991231";
		}else{
// IT1障害No.100193対応 20121128 星野 ADD END
// OM-2013-0003803対応 20131106 星野 DEL START
//			// 移転元のマンション物件コードがマンションの場合
//			if (MANSION_BUKKEN_CD_MANSION.equals(itenmMansionBukkenCd)) {
// OM-2013-0003803対応 20131106 星野 DEL END
			// 解約希望年月日
			kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_DSL_YMD);
// OM-2013-0003803対応 20131106 星野 DEL START
//			} else {
//				// 工事希望年月日
//				kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_KIBO_YMD);
//			}
// OM-2013-0003803対応 20131106 星野 DEL END
		}
		inMap.put(EKK0161C180CBSMsg.SVC_ENDYMD, kj_dsl_ymd);
		// サービス契約内訳一意照会.違約金発生コード → 違約金発生コード
		inMap.put(EKK0161C180CBSMsg.PNLTY_HASSEI_CD, getStringKk0161A010(param, EKK0161A010CBSMsg1List.PNLTY_HASSEI_CD));
		// 更新年月日 → 更新年月日時分秒（更新前）
		inMap.put(EKK0161C180CBSMsg.UPD_DTM_BF, getWorkMap(param).get(LAST_UPD_DTM));
		// 引継データ.異動区分 → 異動区分
		inMap.put(EKK0161C180CBSMsg.IDO_DIV, (String)ccMap.get().get(CCMAP.IDO_DIV));
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		// 最終更新年月日
		getWorkMap(param).put(LAST_UPD_DTM, getStringMapData(param, mapName, EKK0161C180CBSMsg.UPD_DTM));

		return;
	}
	
	/**
	 * サービス契約内訳解約確定サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private void executeEKK0161C190(	SessionHandle handle,
										IRequestParameterReadWrite param) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067706SC;
		KKSV0677_KKSV0677OP_EKK0161C190BSMapper mapper = new KKSV0677_KKSV0677OP_EKK0161C190BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// サービス契約内訳一意照会.サービス契約内訳番号 → サービス契約内訳番号
		inMap.put(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO, getStringKk0161A010(param, EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));
		// 引継データ.機能コード → 機能コード
		inMap.put(EKK0161C190CBSMsg.FUNC_CODE, ccMap.get().get(CCMAP.FUNC_CODE));
		// 引継データ.解約希望年月日 → サービス終了年月日
		String itenmMansionBukkenCd = (String)ccMap.get().get(CCMAP.ITENM_MANSION_BUKKEN_CD);
		String kj_dsl_ymd = "";
// OM-2013-0003803対応 20131106 星野 DEL START
//		// 移転元のマンション物件コードがマンションの場合
//		if (MANSION_BUKKEN_CD_MANSION.equals(itenmMansionBukkenCd)) {
// OM-2013-0003803対応 20131106 星野 DEL END
		// 解約希望年月日
		kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_DSL_YMD);
// OM-2013-0003803対応 20131106 星野 DEL START
//		} else {
//			// 工事希望年月日
//			kj_dsl_ymd = (String)ccMap.get().get(CCMAP.KJ_KIBO_YMD);
//		}
// OM-2013-0003803対応 20131106 星野 DEL END
		inMap.put(EKK0161C190CBSMsg.SVC_ENDYMD, kj_dsl_ymd);
		// 運用年月日 → サービス解約起算年月日
		inMap.put(EKK0161C190CBSMsg.SVC_DSL_KISAN_YMD, JCCBPCommon.getOpeDate(null));
		// 更新年月日 → 更新年月日時分秒（更新前）
		inMap.put(EKK0161C190CBSMsg.UPD_DTM_BF, getWorkMap(param).get(LAST_UPD_DTM));
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		// 最終更新年月日
		getWorkMap(param).put(LAST_UPD_DTM, getStringMapData(param, mapName, EKK0161C190CBSMsg.UPD_DTM));
		
		return;
	}
	
	/**
	 * 返品機器受付サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private void executeEDK0301D010(	SessionHandle handle,
										IRequestParameterReadWrite param) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067707SC;
		KKSV0677_KKSV0677OP_EDK0301D010BSMapper mapper = new KKSV0677_KKSV0677OP_EDK0301D010BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// 引継データ.機能コード → 機能コード
		inMap.put(EDK0301D010CBSMsg.FUNC_CODE, ccMap.get().get(CCMAP.FUNC_CODE));
		// 運用年月日 → 返品受付年月日
		inMap.put(EDK0301D010CBSMsg.HMPIN_UK_YMD, JCCBPCommon.getOpeDate(null));
		// キャンセル品 → 返品区分
		inMap.put(EDK0301D010CBSMsg.HMPIN_DIV, "2");
		// 機器提供サービス契約一意照会.機器設置先場所番号 → 場所番号
		inMap.put(EDK0301D010CBSMsg.PLACE_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO));
		// 機器提供サービス契約一意照会.機器提供サービス契約番号 → 機器提供サービス契約番号
		inMap.put(EDK0301D010CBSMsg.KKTK_SVC_KEI_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// 機器提供サービス契約一意照会.宅内機器型式コード → 宅内機器型式コード
		inMap.put(EDK0301D010CBSMsg.TAKNKIKI_MODEL_CD, getStringKk0341A010(param, EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
		// 機器提供サービス契約一意照会.機器製造番号 → 機器製造番号
		inMap.put(EDK0301D010CBSMsg.KIKI_SEIZO_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
		// 機器提供サービス契約一意照会.付属品型式コード → 付属品型式コード
		inMap.put(EDK0301D010CBSMsg.HUZOKUHIN_MODEL_CD, getStringKk0341A010(param, EKK0341A010CBSMsg1List.HUZOKUHIN_MODEL_CD));
		// 返品元個別指定フラグ
		inMap.put(EDK0301D010CBSMsg.HMPIN_MOTO_KSITEI_FLG, "0");
		// 返品理由コード
		inMap.put(EDK0301D010CBSMsg.HMPIN_RSN_CD, "30");
		// 引継データ.異動区分 → 登録契機契約異動区分
		inMap.put(EDK0301D010CBSMsg.ADD_OPTNTY_KEI_IDO_DIV, (String)ccMap.get().get(CCMAP.IDO_DIV));
		// 運用日付時分秒 → 登録契機契約異動年月日時分秒
		inMap.put(EDK0301D010CBSMsg.ADD_OPTNTY_KEI_IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null));
		// 機器提供サービス契約一意照会.サービス契約番号 → 読込親サービス契約番号
		inMap.put(EDK0301D010CBSMsg.LOAD_OYA_SVKEI_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.SVC_KEI_NO));
		// 商品状態コード
		inMap.put(EDK0301D010CBSMsg.GDS_STAT_CD, "0");
		// 提供種別コード
		inMap.put(EDK0301D010CBSMsg.TK_SBT_CD, "02");
		// 機器提供サービス契約一意照会.機器変更番号 → 機器変更番号
		inMap.put(EDK0301D010CBSMsg.KIKI_CHG_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.KIKI_CHG_NO));
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 進捗登録サービスI/F実行
	 * 
	 * @param handle
	 * @param param
	 * @return
	 * @throws Throwable 
	 */
	private void executeEKK1091D010(	SessionHandle handle,
										IRequestParameterReadWrite param) throws Throwable
	{
		String mapName = KKSV0677_KKSV0677OP.KKSV067708SC;
		KKSV0677_KKSV0677OP_EKK1091D010BSMapper mapper = new KKSV0677_KKSV0677OP_EKK1091D010BSMapper(mapName);
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		param.setData(mapName, inMap);
		
		// 引継データ.機能コード → 機能コード
		inMap.put(EKK1091D010CBSMsg.FUNC_CODE, ccMap.get().get(CCMAP.FUNC_CODE));
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD START
		// システム日付(YYYYMMDDhhmmssSSS形式) → 異動年月日時分秒
//		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
//		inMap.put(EKK1091D010CBSMsg.IDO_DTM, operateDateTime);
		inMap.put(EKK1091D010CBSMsg.IDO_DTM, ccMap.get().get(CCMAP.IDO_DTM));
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD END
		// 機器提供サービス契約一意照会.サービス契約番号 → サービス契約番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_NO, getStringKk0341A010(param, EKK0341A010CBSMsg1List.SVC_KEI_NO));
		// 引継データ.異動区分 → 異動区分
		inMap.put(EKK1091D010CBSMsg.IDO_DIV, (String)ccMap.get().get(CCMAP.IDO_DIV));
		
		// 引継データ.異動理由コード → 異動理由コード
		ArrayList<HashMap<String, Object>> idoRsnCdList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> idoRsnCdMap = new HashMap<String, Object>();
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD START
//		idoRsnCdMap.put(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)ccMap.get().get(CCMAP.IDO_RSN_CD));
//		idoRsnCdList.add(idoRsnCdMap);
		ArrayList<HashMap<String, Object>> inIdoRsnCdList = 
			(ArrayList<HashMap<String, Object>>)ccMap.get().get(CCMAP.EKK1091D010CBSMSG1LIST);
		for (int i = 0; i < inIdoRsnCdList.size(); i++)
		{
			// n件目を取得
			HashMap<String, Object> inIdoRsnCdMap = (HashMap<String, Object>)inIdoRsnCdList.get(i);
			// 入力情報を初期化
			idoRsnCdMap = new HashMap<String, Object>();
			// 異動理由コード
			idoRsnCdMap.put(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)inIdoRsnCdMap.get(CCMAP.IDO_RSN_CD));
			// 異動理由メモ
			idoRsnCdMap.put(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, (String)inIdoRsnCdMap.get(CCMAP.IDO_RSN_MEMO));
			// 進捗登録SCマップ用リストへ追加
			idoRsnCdList.add(idoRsnCdMap);
		}
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD END
		inMap.put(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, idoRsnCdList);
		
		String idoDiv = (String)ccMap.get().get(CCMAP.IDO_DIV);
		String setIdoDiv = "";
		
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD START
// 住変ではレンタル解約完了のみが対象なので、異動区分による制御はしない
//		// 機器契約変更
//		if (JKKSvcConst.IDO_DIV_KIKIKEICHGE.equals(idoDiv)) {
			// レンタル解約完了
			setIdoDiv = JKKSvcConst.PRG_STAT_3200;
//		}
//		// 未返却機器解約
//		else if (JKKSvcConst.IDO_DIV_MIRTNKIKIDSL.equals(idoDiv)) {
//			// 未返却機器解約完了
//			setIdoDiv = JKKSvcConst.PRG_STAT_3A00;
//		}
// IT1-2013-0000082 2013.01.15 Y.MORIMOTO MOD END
		// 進捗ステータス
		inMap.put(EKK1091D010CBSMsg.PRG_STAT, setIdoDiv);
		
		/* ◇上りマッピング処理 */
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		/* ◇ＳＣ呼出実行 */
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		/* ◇下りマッピング処理 */
		param = mapper.editResultRP(result, param);
		checkExecutionResult(result);
		
		return;
	}
	
	/**
	 * 機器提供サービス契約解約S-IF起動可否判定
	 * 
	 * @param param
	 * @param kktkSvcKeiStat
	 * @param kktkSvcCd
	 * @param kktkSvcKeiMap
	 * @return
	 * @throws RequestParameterException
	 */
	private boolean isExecuteEKK0341C340(	IRequestParameterReadWrite param,
											String kktkSvcKeiStat,
											String kktkSvcCd,
											HashMap<String, Object> kktkSvcKeiMap) throws RequestParameterException
	{
//		// 宅内機器異動コードが｢STB一部撤去｣
//		if (REMOVE.equals( kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.ADCHG_DTL_STB_IDO_DIV)))
//		{
//			return true;
//		}
//		
//		// 宅内機器種別コード
//		String taknkikiSbtCd = getStringKk0341A010(param, EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
//		
//		// ルータの場合
//		if (CODE_F0.equals(taknkikiSbtCd)) {
//			// 撤去種別
//			String svc_tk_sbt_div = (String) kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.ADCHG_DTL_TKKIKI_TEKKYO_SBT_CD);
//			
//			// 撤去種別が「撤去」・「解約」の場合
//			if (CD00851_TEKKYO.equals(svc_tk_sbt_div)
//					|| CD00851_SLRE.equals(svc_tk_sbt_div)) {
//				
//				// 設置ルータコード
//				String stcRouterCd = (String)ccMap.get().get(CCMAP.EOHNT_STC_ROUTER_CD);
//				
//				// 設置ルータコードが「なし」の場合
//				if (ROUTER_NONE.equals(stcRouterCd)) {
//					
		// 締結済、サービス提供中、停止中、休止・中断中のいづれか、又は契約変更中且つBBR
		if (SVC_KEI_STAT_030.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_100.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_210.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_220.equals(kktkSvcKeiStat)
				|| (SVC_KEI_STAT_110.equals(kktkSvcKeiStat) && KKTK_SVC_CD_BBR.equals(kktkSvcCd)))
		{
			return true;
		}
//				}
//			}
//		}
		
		return false;
	}
	
	/**
	 * 機器提供サービス契約解約確定S-IF起動可否判定
	 * 
	 * @param param
	 * @param kktkSvcKeiStat
	 * @param kktkSvcKeiMap
	 * @return
	 * @throws RequestParameterException
	 */
// OM-2015-0000170 2015/04/21 MOD START
//	private boolean isExecuteEKK0341C350(	IRequestParameterReadWrite param,
//											String kktkSvcKeiStat,
//											String svcPcrsCd) throws RequestParameterException
	private boolean isExecuteEKK0341C350(	IRequestParameterReadWrite param,
			                                String kktkSvcKeiStat,
			                                String svcPcrsCd,
			                                String kktkSvcCd) throws RequestParameterException
// OM-2015-0000170 2015/04/21 MOD END			                                
	{
//		// 宅内機器異動コードが｢STB一部撤去｣
//		if (REMOVE.equals( kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.ADCHG_DTL_STB_IDO_DIV)))
//		{
//			return true;
//		}
//		
//		// 宅内機器種別コード
//		String taknkikiSbtCd = getStringKk0341A010(param, EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
//		
//		// ルータの場合
//		if (CODE_F0.equals(taknkikiSbtCd)) {
//			// 撤去種別
//			String svc_tk_sbt_div = (String) kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.ADCHG_DTL_TKKIKI_TEKKYO_SBT_CD);
//			
//			// 撤去種別が「撤去」・「解約」の場合
//			if (CD00851_TEKKYO.equals(svc_tk_sbt_div)
//					|| CD00851_SLRE.equals(svc_tk_sbt_div)) {
//				
//				// 設置ルータコード
//				String stcRouterCd = (String)ccMap.get().get(CCMAP.EOHNT_STC_ROUTER_CD);
//				
//				// 設置ルータコードが「なし」の場合
//				if (ROUTER_NONE.equals(stcRouterCd)) {
// OM-2015-0000170 2015/04/21 ADD START
// STB、BCAS、CCASは機器の解約確定を行わない
		if (KKTK_SVC_CD_STB.equals(kktkSvcCd)
				|| KKTK_SVC_CD_BCAS.equals(kktkSvcCd)
				|| KKTK_SVC_CD_CCAS.equals(kktkSvcCd))
		{
			return false;
		}
// OM-2015-0000170 2015/04/21 ADD END
// IT1障害No.100193対応 20121128 星野 ADD START
		// サービス契約の料金コースコードがSTBなしコースの場合、解約確定不要
		if (PCRS_CD_A37.equals(svcPcrsCd)
				|| PCRS_CD_A23.equals(svcPcrsCd)
				|| PCRS_CD_A25.equals(svcPcrsCd))
		{
			return false;
		}
// IT1障害No.100193対応 20121128 星野 ADD END
		
		// 締結済、サービス提供中、停止中、休止・中断中のいづれか
		if (SVC_KEI_STAT_030.equals(kktkSvcKeiStat)
			|| SVC_KEI_STAT_100.equals(kktkSvcKeiStat)
			|| SVC_KEI_STAT_210.equals(kktkSvcKeiStat)
			|| SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
		{
			return true;
		}
//				}
//			}
//		}
		
		return false;
	}
	
	/**
	 * サービス契約内訳照会・更新S-IF起動可否判定
	 * 
	 * @param kktkSvcKeiStat
	 * @param svcKeiUtwkNo
	 * @param kktkSvcCd
	 * @param kktkSvcKeiMap
	 * @return
	 */
	private boolean isExecuteEKK0161XXXX(	String kktkSvcKeiStat,
											String svcKeiUtwkNo,
											String kktkSvcCd,
											HashMap<String, Object> kktkSvcKeiMap)
	{
//		// 宅内機器異動コードが｢STB一部撤去｣
//		if (REMOVE.equals(kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.ADCHG_DTL_STB_IDO_DIV)))
//		{
//			// 宅内機器種別が C-CAS
//			if (CODE_C0.equals(kktkSvcKeiMap.get(KKTK_SVC_KEI_MAP.ADCHG_DTL_TAKNKIKI_SBT_CD)))
//			{
//				return true;
//			}
//		}
		
		// サービス契約内訳番号が設定有りで且つサービスコードがSTB、且つ締結済、サービス提供中、停止中、休止・中断中のいづれか
		if ((SVC_KEI_STAT_030.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_100.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_210.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
			&&
			(!JKKStringUtil.isNullBlank(svcKeiUtwkNo) && KKTK_SVC_CD_STB.equals(kktkSvcCd)))
		{
			return true;
		}
		return false;
	}
	
// IT1障害No.100193対応 20121128 星野 ADD START
	/**
	 * サービス契約内訳解約確定S-IF起動可否判定
	 * 
	 * @param kktkSvcKeiStat
	 * @param svcKeiUtwkNo
	 * @param kktkSvcCd
	 * @param kktkSvcKeiMap
	 * @return
	 */
	private boolean isExecuteEKK0161C190(	String kktkSvcKeiStat,
											String svcKeiUtwkNo,
											String kktkSvcCd,
											String svcPcrsCd)
	{
		// サービス契約の料金コースコードがSTBなしコースの場合、解約確定不要
		if (PCRS_CD_A37.equals(svcPcrsCd)
				|| PCRS_CD_A23.equals(svcPcrsCd)
				|| PCRS_CD_A25.equals(svcPcrsCd))
		{
			return false;
		}
		
// OM-2015-0000170 2015/04/21 ADD START
		// STB、BCAS、CCASは機器の解約確定を行わない
		if (KKTK_SVC_CD_STB.equals(kktkSvcCd)
				|| KKTK_SVC_CD_BCAS.equals(kktkSvcCd)
				|| KKTK_SVC_CD_CCAS.equals(kktkSvcCd))
		{
			return false;
		}
// OM-2015-0000170 2015/04/21 ADD END
		
		// サービス契約内訳番号が設定有りで且つサービスコードがSTB、且つ締結済、サービス提供中、停止中、休止・中断中のいづれか
		if ((SVC_KEI_STAT_030.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_100.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_210.equals(kktkSvcKeiStat)
				|| SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
			&&
			(!JKKStringUtil.isNullBlank(svcKeiUtwkNo) && KKTK_SVC_CD_STB.equals(kktkSvcCd)))
		{
			return true;
		}
		return false;
	}
// IT1障害No.100193対応 20121128 星野 ADD END
	
	/**
	 * 機器提供サービス契約一意照会の結果取得
	 * 
	 * @param param
	 * @param target
	 * @return
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private String getStringKk0341A010(IRequestParameterReadOnly param, String target) throws RequestParameterException
	{
		// 機器提供サービス契約一意照会の結果取得
		HashMap<String, Object> ekk0341A010Map = (HashMap<String, Object>)param.getData(KKSV0677_KKSV0677OP.KKSV067701SC);
		ArrayList ekk0341A010MapList = (ArrayList)ekk0341A010Map.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		ekk0341A010Map = (HashMap<String, Object>)ekk0341A010MapList.get(0);

		return (String)ekk0341A010Map.get(target);
	}
	
	/**
	 * サービス契約内訳一意照会の結果取得
	 * 
	 * @param param
	 * @param target
	 * @return
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private String getStringKk0161A010(IRequestParameterReadOnly param, String target) throws RequestParameterException
	{
		// サービス契約内訳一意照会の結果取得
		HashMap<String, Object> ekk0161A010Map = (HashMap<String, Object>)param.getData(KKSV0677_KKSV0677OP.KKSV067704SC);
		ArrayList ekk0161A010MapList = (ArrayList)ekk0161A010Map.get(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		ekk0161A010Map = (HashMap<String, Object>)ekk0161A010MapList.get(0);
		
		return (String)ekk0161A010Map.get(target);
	}
	
	/**
	 * マップデータ内の対象キーの文字列を返却する。
	 * 
	 * @param param
	 * @param mapName
	 * @param target
	 * @return
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private String getStringMapData(IRequestParameterReadOnly param, String mapName, String target) throws RequestParameterException
	{
		HashMap<String, Object> map = (HashMap<String, Object>)param.getData(mapName);
		
		return (String)map.get(target);
	}

	
	/**
	 * 呼び出したサービス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;
		}
	}

	/**
	 * 作業領域取得
	 * 
	 * @param param
	 * @return
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getWorkMap(IRequestParameterReadWrite param) throws RequestParameterException
	{
		Map workAreaMap = (Map)param.getMappingWorkArea();
		if (workAreaMap == null) {
			workAreaMap = new HashMap();
			param.setMappingWorkArea(workAreaMap);
		}
		HashMap<String, Object> workMap = (HashMap<String, Object>)workAreaMap.get(KKSV0677_KKSV0677OP.WORK);
		if (workMap == null) {
			workMap = new HashMap<String, Object>();
			workAreaMap.put("WORK", workMap);
		}
		return workMap;
	}
	
	/**
	 * 機器提供サービス契約解約チェック処理.
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[0]);
		return paramMap;
	}
	
	
	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * 
	 * @param param モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, Integer returnCode) throws Throwable
	{
		return param;
	}

}
