/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKejbKK0341SecProc
 *	ソースファイル名：JKKejbKK0341SecProc.java
 *	作成者			：EKek0048
 *	日付			：2011年06月27日
 *＜機能概要＞
 *	機器提供サービス契約に対する副次処理を行う部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00
 *  v4.00.00    2013/04/17  FJ)寺本     IT1-2012-0000903
 *	v5.00.00	2013/07/09	FJ)寺園		LT-2013-0000321
 *	v5.00.01	2013/10/30	FJ)小島		OM-2013-0002943
 *  v5.00.02    2013/11/11  FJ)寺園     OM-2013-0003965
 *	v5.00.03	2013/11/25	FJ)寺園		OM-2013-0003646
 *	v6.00.00	2013/11/29	FJ)大山		IT2-2013-0000830
 *  v7.00.00    2013/12/04  FJ)大山     ANK-1578-00-00
 *  v7.00.01    2013/12/10  FJ)大山     ANK-1578-00-00
 *  v8.00.00	2014/05/09	FJ)舩橋		OM-2014-0001666
 *	v8.00.01	2014/06/02	FJ)小島		OM-2014-0001861
*	v9.00.00	2014/07/22	FJ)小島		OM-2014-0002138
 *	v12.00.00	2015/01/27	FJ)岡田		OM-2015-0000088
 *	v33.00.00	2017/09/09	FJ)星野		OM-2017-0000920
 *	v61.00.00	2023/04/19	FJ)藤本涼	ANK-4315-00-00
 ********************************************************************************/

package eo.ejb.common.db;

import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0161ETMsg;
import eo.ejb.cbm.entity.KK0241ETMsg;
import eo.ejb.cbm.entity.KK0241LE;
import eo.ejb.cbm.entity.KK0251ETMsg;
import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbm.entity.KK0341LE;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KK2811ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0081C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081C260CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.entity.JKKejbIdoRsvAccess;

/**
* <p>
* 機器提供サービス契約に対する副次処理を行う部品です。
* </p>
* @author 富士通
*/
public class JKKejbKK0341SecProc extends JKKejbKK0341DBABase
{
	/**
	 * 状態遷移定義の配列 (受付済) 010,(照査済) 020 ,(締結済) 030,(サービス提供中) 100,(契約変更中) 110,(休止・中断中) 210,(停止中)220
	 */
	private static final String[] STATE_CONTENTS = {
		JKKModelConst.KKTK_SVC_KEI_STAT_UK_ZM, 
		JKKModelConst.KKTK_SVC_KEI_STAT_SHOSA_ZM, 
		JKKModelConst.KKTK_SVC_KEI_STAT_CNC_ZM,
		JKKModelConst.KKTK_SVC_KEI_STAT_SVCTK_CHU, 
		JKKModelConst.KKTK_SVC_KEI_STAT_KEI_CHG_CHU, 
		JKKModelConst.KKTK_SVC_KEI_STAT_PAUSE_STP_CHU, 
		JKKModelConst.KKTK_SVC_KEI_STAT_STP_CHU
	};

	/** サービスIFID：機器提供サービス契約回復 */
	private static final String SIF_IF_EKK0341C380 = "EKK0341C380";

	/** サービスIFID：サービス提供前機器提供サービス契約回復 */
	private static final String SIF_IF_EKK0341C390 = "EKK0341C390";

	/** サービスIFID：休止中機器提供サービス契約回復 */
	private static final String SIF_IF_EKK0341C400 = "EKK0341C400";

	/** サービスIFID：照査前機器提供サービス契約キャンセル取消 */
	private static final String SIF_IF_EKK0341C410 = "EKK0341C410";

	/** サービスIFID：照査後機器提供サービス契約キャンセル取消 */
	private static final String SIF_IF_EKK0341C420 = "EKK0341C420";

	/**
	 * <p>
	 * 機器提供サービス契約のお客様変更を行います。
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param kk0161MsgList サービス契約内訳
	 * @param kk0241MsgList サービス契約回線内訳
	 * @param sysid SYSID
	 * @param mskmDtlNo 申込明細番号
	 * @param rsvAplyYmd 予約適用年月日
	 * @param idoDiv 異動区分
	 */
	public void kktkSvcCustChg(CAANMsg inCbsMsg, String svcKeiNo, CAANMsg[] kk0161MsgList,
			CAANMsg[] kk0241MsgList, String sysid, String mskmDtlNo, String rsvAplyYmd, String idoDiv)
	{

		// 機器提供サービス契約の一覧照会を行う
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.SVC_KEI_NO, svcKeiNo);

		KK0341LE kk0341 = new KK0341LE();
		CAANMsg[] otETMsg = null;

		try
		{
			otETMsg = kk0341.findByCondition(inETMsg);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// 処理済み機器提供サービス契約保持用
		HashMap<String, String> hash = new HashMap<String, String>();
		
		// サービス契約に紐付く契約が存在しない場合は次へ
		int listCnt = otETMsg.length;
		if (listCnt > 0)
		{
			for (int j = 0; j < listCnt; j++)
			{
				if (hash.containsKey(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO)))
				{
					continue;
				}

				// 読み込んだ機器提供サービス契約番号を控える
				hash.put(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));

				//OM-2015-0000088 MOD START
				// 機器提供サービス契約の登録処理
				//boolean flg = kktkSvcCustChgInsert(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
						//otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
				boolean flg = kktkSvcCustChgInsert(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
						otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), svcKeiNo);
				//OM-2015-0000088 MOD END
				
				// OM-2017-0000920対応 20170920 星野 ADD START
				// 未来日レコードも合わせて更新する
				kktkSvcCustChgUpdateFuture(inCbsMsg, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), sysid, rsvAplyYmd, svcKeiNo);
				// OM-2017-0000920対応 20170920 星野 ADD END
				
				if (flg)
				{
					// 機器オプションサービス契約の登録処理
					kkopSvcCustChg(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
							otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
				}
			}
		}
		
		// サービス契約内訳に紐づく機器提供サービス契約を更新
		for (CAANMsg kk0161Msg : kk0161MsgList)
		{
			String svcKeiUcwkNo = kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO);
			
			// 機器提供サービス契約の一覧照会を行う
			inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
			inETMsg.set(KK0341ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);

			otETMsg = null;

			try
			{
				otETMsg = kk0341.findByCondition(inETMsg);
			}
			catch (CAANException e1)
			{
				throw new CAANRuntimeException(e1);
			}
			
			// サービス契約に紐付く契約が存在しない場合は終了
			listCnt = otETMsg.length;
			if (listCnt >= 1)
			{
				for (int j = 0; j < listCnt; j++)
				{
					if (hash.containsKey(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO)))
					{
						continue;
					}

					// 読み込んだ機器提供サービス契約番号を控える
					hash.put(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
					//OM-2015-0000088 MOD START
					// 機器提供サービス契約の登録処理
					//kktkSvcCustChgInsert(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));)
					kktkSvcCustChgInsert(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), svcKeiNo);
					//OM-2015-0000088 MOD END
					
					// OM-2017-0000920対応 20170920 星野 ADD START
					// 未来日レコードも合わせて更新する
					kktkSvcCustChgUpdateFuture(inCbsMsg, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), sysid, rsvAplyYmd, svcKeiNo);
					// OM-2017-0000920対応 20170920 星野 ADD END
				}
			}
		}
		// サービス契約回線内訳に紐づく機器提供サービス契約を更新
		for (CAANMsg kk0241Msg : kk0241MsgList)
		{
			String svcKeiKaisenUcwkNo = kk0241Msg.getString(KK0241ETMsg.SVC_KEI_KAISEN_UCWK_NO);
			
			// 機器提供サービス契約の一覧照会を行う
			inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
			inETMsg.set(KK0341ETMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);

			otETMsg = null;

			try
			{
				otETMsg = kk0341.findByCondition(inETMsg);
			}
			catch (CAANException e1)
			{
				throw new CAANRuntimeException(e1);
			}

			// サービス契約に紐付く契約が存在しない場合は次へ
			listCnt = otETMsg.length;
			if (listCnt > 0)
			{
				for (int j = 0; j < listCnt; j++)
				{
					if (hash.containsKey(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO)))
					{
						continue;
					}

					// 読み込んだ機器提供サービス契約番号を控える
					hash.put(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));

					//OM-2015-0000088 MOD START
					// 機器提供サービス契約の登録処理
					//boolean flg = kktkSvcCustChgInsert(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
							//otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
					boolean flg = kktkSvcCustChgInsert(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
							otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), svcKeiNo);
					//OM-2015-0000088 MOD END
					
					// OM-2017-0000920対応 20170920 星野 ADD START
					// 未来日レコードも合わせて更新する
					kktkSvcCustChgUpdateFuture(inCbsMsg, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), sysid, rsvAplyYmd, svcKeiNo);
					// OM-2017-0000920対応 20170920 星野 ADD END
					
					if (flg)
					{
						//OM-2015-0000088 MOD START
//						// 機器オプションサービス契約の登録処理
//						kkopSvcCustChg(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
//								otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
						
						// サービス契約の照会を行う
						CAANMsg inKK0081ETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
						inKK0081ETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
						inKK0081ETMsgCurrent.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCbsMsg));
						CAANMsg otKK0081ETMsg = new JKKejbKK0081DBABase().findByCurrent(inKK0081ETMsgCurrent);
						
						String searchPattern;
						String svcCd = otKK0081ETMsg.getString(KK0081ETMsg.SVC_CD);
						if(JKKModelConst.SVC_CD_NET.equals(svcCd)) {
							// ネットに紐づく機器オプションサービス契約を検索する。
							searchPattern = "2";
						} else if(JKKModelConst.SVC_CD_TEL.equals(svcCd)) {
							// 電話に紐づく機器オプションサービス契約を検索する。
							searchPattern = "3";
						} else {
							// 全ての機器オプションサービス契約を検索する。
							searchPattern = "1";
						}
						
						// 機器オプションサービス契約の登録処理
						kkopSvcCustChg(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, 
								otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), searchPattern);
						//OM-2015-0000088 MOD END
					}
				}
			}
		}
	}

	/**
	 * 機器提供サービス契約のお客様変更の登録を行います。
	 * @param inCbsMsg CBSメッセージ
	 * @param sysid SYSID
	 * @param mskmDtlNo 申込明細番号
	 * @param rsvAplyYmd 予約適用年月日
	 * @param idoDiv 異動区分
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param svcKeiNo サービス契約番号
	 * @return 登録を行った場合true
	 */
	//OM-2015-0000088 MOD START
	//private boolean kktkSvcCustChgInsert(CAANMsg inCbsMsg, String sysid, String mskmDtlNo, 
			//String rsvAplyYmd, String idoDiv, String kktkSvcKeiNo)

	private boolean kktkSvcCustChgInsert(CAANMsg inCbsMsg, String sysid, String mskmDtlNo, 
			String rsvAplyYmd, String idoDiv, String kktkSvcKeiNo, String svcKeiNo)
	//OM-2015-0000088 MOD END
	{
		try 
		{
			// 機器提供サービス契約のETメッセージに以下の値を設定し、機器提供サービス契約のカレントレコードの照会を行う。
			CAANMsg msgKkCrt = new CAANMsg(KK0341ETMsg.class.getName());

			msgKkCrt.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
			msgKkCrt.set(KK0341ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCbsMsg));
			
			//OM-2015-0000088 ADD START
			// サービス契約の照会を行う
			CAANMsg inKK0081ETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
			inKK0081ETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
			inKK0081ETMsgCurrent.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCbsMsg));
			CAANMsg otKK0081ETMsg = new JKKejbKK0081DBABase().findByCurrent(inKK0081ETMsgCurrent);
			//OM-2015-0000088 ADD END
			
			// 副次の判定を行う
			JKKejbKK0341DBABase kk0341DB = new JKKejbKK0341DBABase();
			CAANMsg retKK0341 = kk0341DB.findByCurrent(msgKkCrt);

			if (retKK0341 == null)
			{
				return false;
			}
			
			//OM-2015-0000088 ADD START
			// 該当の回線機器が、処理対象のネット契約・電話契約・テレビ契約で使用する機器でない場合、課金先請求契約変更は不要
			if (!isPcrsTgKktkSvc(otKK0081ETMsg.getString(KK0081ETMsg.PCRS_CD), retKK0341.getString(KK0341ETMsg.KKTK_SVC_CD), 
					JKKModelCommon.getOpeDate(inCbsMsg)))
			{
				return false;
			}
			//OM-2015-0000088 ADD END
			
			// 遷移状態判定
			String stKkktkSvcKeiStat = retKK0341.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT);

			boolean isStatus = false;
			for (int i = 0; i < STATE_CONTENTS.length; i++)
			{
				if (STATE_CONTENTS[i].equals(stKkktkSvcKeiStat))
				{
					isStatus = true;
					break;
				}
			}

			if (isStatus)
			{

				// 機器提供サービス契約お客様変更処理を行う。
					retKK0341.set(KK0341ETMsg.KKTK_SVC_KEI_NO, retKK0341.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
					retKK0341.set(KK0341ETMsg.GENE_ADD_DTM, JKKModelCommon.getSysDateTimeStamp());
					retKK0341.set(KK0341ETMsg.SYSID, sysid);
					retKK0341.set(KK0341ETMsg.MSKM_DTL_NO, mskmDtlNo);
					retKK0341.set(KK0341ETMsg.RSV_APLY_YMD, rsvAplyYmd);
					retKK0341.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
					retKK0341.set(KK0341ETMsg.IDO_DIV, idoDiv);
					retKK0341.set(KK0341ETMsg.ADD_DTM, inCbsMsg.getString(EKK0081C250CBSMsg.OPERATEDATETIME));
					retKK0341.set(KK0341ETMsg.ADD_OPEACNT, inCbsMsg.getString(EKK0081C250CBSMsg.ADD_OPEACNT));
					retKK0341.set(KK0341ETMsg.UPD_DTM, inCbsMsg.getString(EKK0081C250CBSMsg.OPERATEDATETIME));
					retKK0341.set(KK0341ETMsg.UPD_OPEACNT, inCbsMsg.getString(EKK0081C250CBSMsg.UPD_OPEACNT));
					retKK0341.setNull(KK0341ETMsg.DEL_DTM);
					retKK0341.setNull(KK0341ETMsg.DEL_OPEACNT);
					retKK0341.set(KK0341ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

				create(retKK0341);
			}
			
			return isStatus;
		} 
		catch (CAANCreateException e1) 
		{
			throw new CAANRuntimeException(e1);
		}
	}
	
	// OM-2017-0000920対応 20170920 星野 ADD START
	/**
	 * 機器提供サービス契約のお客様変更の登録（未来日レコード分）を行います。
	 * @param inCbsMsg CBSメッセージ
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param sysid SYSID
	 * @param rsvAplyYmd 予約適用年月日
	 * @param svcKeiNo サービス契約番号
	 */
	private void kktkSvcCustChgUpdateFuture(CAANMsg inCbsMsg, String kktkSvcKeiNo, String sysid,String rsvAplyYmd, String svcKeiNo) {
		try 
		{
			// 予約検索用メッセージ作成
			CAANMsg searchETMsg = new CAANMsg(KK0341ETMsg.class.getName());
			searchETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
			searchETMsg.set(KK0341ETMsg.RSV_APLY_YMD, rsvAplyYmd);

			// 予約検索を行う
			CAANMsg[] retMsgList = super.findByReserve(searchETMsg);
			
			if(retMsgList == null){
				return;
			}			
			
			// サービス契約の照会を行う
			CAANMsg inKK0081ETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
			inKK0081ETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
			inKK0081ETMsgCurrent.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCbsMsg));
			CAANMsg otKK0081ETMsg = new JKKejbKK0081DBABase().findByCurrent(inKK0081ETMsgCurrent);
			
			
			for(CAANMsg retKK0341: retMsgList){
				
				if (retKK0341 == null)
				{
					return;
				}
				
				// 該当の回線機器が、処理対象のネット契約・電話契約・テレビ契約で使用する機器でない場合、課金先請求契約変更は不要
				if (!isPcrsTgKktkSvc(otKK0081ETMsg.getString(KK0081ETMsg.PCRS_CD), retKK0341.getString(KK0341ETMsg.KKTK_SVC_CD), 
						JKKModelCommon.getOpeDate(inCbsMsg)))
				{
					return;
				}
				
				// 遷移状態判定
				String stKkktkSvcKeiStat = retKK0341.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT);
	
				boolean isStatus = false;
				for (int i = 0; i < STATE_CONTENTS.length; i++)
				{
					if (STATE_CONTENTS[i].equals(stKkktkSvcKeiStat))
					{
						isStatus = true;
						break;
					}
				}
	
				if (isStatus)
				{
					// 機器提供サービス契約お客様変更処理を行う。
					CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

					inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, retKK0341.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
					inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, retKK0341.getString(KK0341ETMsg.GENE_ADD_DTM));

					// sysid
					inETMsg.set(KK0341ETMsg.SYSID, sysid);
					
					inETMsg.set(KK0341ETMsg.UPD_DTM,  inCbsMsg.getString(EKK0081C250CBSMsg.OPERATEDATETIME));
					inETMsg.set(KK0341ETMsg.UPD_OPEACNT, inCbsMsg.getString(EKK0081C250CBSMsg.UPD_OPEACNT));

					super.update(inETMsg);
				}
			}
		} 
		catch (CAANFinderException e1) 
		{
			throw new CAANRuntimeException(e1);
		}
	}
	// OM-2017-0000920対応 20170920 星野 ADD END
	
	/**
	 * <p>
	 * 機器オプションサービス契約のお客様変更を行います。
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param sysid SYSID
	 * @param mskmDtlNo 申込明細番号
	 * @param rsvAplyYmd 予約適用年月日
	 * @param idoDiv 異動区分
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 */
	private void kkopSvcCustChg(CAANMsg inCbsMsg, String sysid, String mskmDtlNo, String rsvAplyYmd, String idoDiv, String kktkSvcKeiNo)
	{
// OM-2017-0000920対応 20170920 星野 ADD START
		kkopSvcCustChg(inCbsMsg, sysid, mskmDtlNo, rsvAplyYmd, idoDiv, kktkSvcKeiNo, "1");
	}
	
	/**
	 * <p>
	 * 機器オプションサービス契約のお客様変更を行います。
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param sysid SYSID
	 * @param mskmDtlNo 申込明細番号
	 * @param rsvAplyYmd 予約適用年月日
	 * @param idoDiv 異動区分
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param 機器オプション検索パターン
	 */
	private void kkopSvcCustChg(CAANMsg inCbsMsg, String sysid, String mskmDtlNo, String rsvAplyYmd, String idoDiv, String kktkSvcKeiNo, String searchPattern)
	{
// OM-2017-0000920対応 20170920 星野 ADD END
		// 機器オプションサービス契約の一覧照会を行う
		// OM-2017-0000920対応 20170920 星野 MOD START
//		CAANMsg[] kk2811MsgList = new JKKejbKK2811SecProc().getKK2811byKktk(kktkSvcKeiNo, null, JKKModelCommon.getOpeDate(inCbsMsg), "1");
		CAANMsg[] kk2811MsgList = new JKKejbKK2811SecProc().getKK2811byKktk(kktkSvcKeiNo, null, JKKModelCommon.getOpeDate(inCbsMsg), searchPattern);
		// OM-2017-0000920対応 20170920 星野 MOD END

		for (CAANMsg kk2811Msg : kk2811MsgList)
		{
			// 機器オプションサービス契約お客様変更処理を行う。
			kk2811Msg.set(KK2811ETMsg.GENE_ADD_DTM, JKKModelCommon.getSysDateTimeStamp());
			kk2811Msg.set(KK2811ETMsg.SYSID, sysid);
			kk2811Msg.set(KK2811ETMsg.MSKM_DTL_NO, mskmDtlNo);
			kk2811Msg.set(KK2811ETMsg.RSV_APLY_YMD, rsvAplyYmd);
			kk2811Msg.set(KK2811ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
			kk2811Msg.set(KK2811ETMsg.IDO_DIV, idoDiv);
			kk2811Msg.set(KK2811ETMsg.ADD_DTM, inCbsMsg.getString(EKK0081C250CBSMsg.OPERATEDATETIME));
			kk2811Msg.set(KK2811ETMsg.ADD_OPEACNT, inCbsMsg.getString(EKK0081C250CBSMsg.ADD_OPEACNT));
			kk2811Msg.set(KK2811ETMsg.UPD_DTM, inCbsMsg.getString(EKK0081C250CBSMsg.OPERATEDATETIME));
			kk2811Msg.set(KK2811ETMsg.UPD_OPEACNT, inCbsMsg.getString(EKK0081C250CBSMsg.UPD_OPEACNT));
			kk2811Msg.setNull(KK2811ETMsg.DEL_DTM);
			kk2811Msg.setNull(KK2811ETMsg.DEL_OPEACNT);
			kk2811Msg.set(KK2811ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

			JKKejbDBAUtil dbaUtil = new JKKejbDBAUtil(inCbsMsg);
			dbaUtil.create(kk2811Msg);
		}
	}
		

	/**
	 * <p>
	 * 機器提供サービス契約の休止・中断または休止解除・中断解除データを作成します。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo　サービス契約番号
	 * @param svcKeiUcwkNo　サービス契約内訳番号
	 * @param opSvcKeiNo　オプションサービス契約番号
	 * @param mskmDtlNo　申込明細番号
	 * @param rsvAplyYmd　予約適用年月日
	 * @param pause_stp_cd　休止中断コード
	 * @param svc_pause_ymd　サービス休止年月日
	 * @param svc_pause_rsn_cd　サービス休止理由コード
	 * @param svc_pause_rsn_memo　サービス休止理由メモ
	 * @param svc_pause_rls_ymd　サービス休止解除年月日
	 * @param svc_pause_rls_rsn_cd　サービス休止解除理由コード
	 * @param svc_pause_rls_rsn_memo　サービス休止解除理由メモ
	 * @param svc_pause_chrg_sta_ymd　サービス休止課金開始年月日
	 * @param idoDiv　異動区分
	 * @param kbn　休止・中断区分フラグ（true:「休止・中断」、false:「休止解除・中断解除」）
	 */
	private void kktkSvcPause(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svcKeiNo, String svcKeiUcwkNo, String opSvcKeiNo,
			String mskmDtlNo, String rsvAplyYmd, String pause_stp_cd, String svc_pause_ymd, String svc_pause_rsn_cd, String svc_pause_rsn_memo,
			String svc_pause_rls_ymd, String svc_pause_rls_rsn_cd, String svc_pause_rls_rsn_memo, 
			String svc_pause_chrg_sta_ymd, String idoDiv, boolean kbn)
	{
		
		// 機器提供サービス契約の一覧照会を行う
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		
		if(svcKeiNo != null)
		{
			inETMsg.set(KK0341ETMsg.SVC_KEI_NO, svcKeiNo);
		}
		else if(svcKeiUcwkNo != null)
		{
			inETMsg.set(KK0341ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		}
		else if(opSvcKeiNo != null)
		{
			inETMsg.set(KK0341ETMsg.OP_SVC_KEI_NO, opSvcKeiNo);
		}

		KK0341LE kk0341 = new KK0341LE();
		CAANMsg[] otETMsg = null;

		try
		{
			otETMsg = kk0341.findByCondition(inETMsg);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// サービス契約に紐付く契約が存在しない場合は終了
		int listCnt = otETMsg.length;
		if (listCnt < 1)
		{
			return;
		}

		// 処理済み機器提供サービス契約保持用
		HashMap<String, String> hash = new HashMap<String, String>();

		try
		{

			for (int j = 0; j < listCnt; j++)
			{
				if (hash.containsKey(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO)))
				{
					continue;
				}

				// 読み込んだ機器提供サービス契約番号を控える
				hash.put(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));

				CAANMsg inMsgKK0341 = new CAANMsg(KK0341ETMsg.class.getName());
				inMsgKK0341.set(KK0341ETMsg.KKTK_SVC_KEI_NO, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
				inMsgKK0341.set(KK0341ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
				CAANMsg retCurrent = new JKKejbKK0341DBABase().findByCurrent(inMsgKK0341);

				if(retCurrent == null)
				{
					continue;
				}

				String stat = retCurrent.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT);

				//休止・中断の場合かつカレントステータスが「サービス提供中」の場合、「休止・中断中」のデータを作成する
				//休止解除・中断解除の場合かつステータスが「休止・中断中」の場合、「サービス提供中」のデータを作成する
				if("100".equals(stat) && kbn)
				{
					stat = "210";
				}
				else if("210".equals(stat) && !kbn)
				{
					stat = "100";
				}
				else
				{
					continue;
				}

				// 機器提供サービス契約 新規レコード用Msg生成
				CAANMsg create0341Msg = retCurrent;

				// 新規レコード用メッセージ設定
				create0341Msg.set(KK0341ETMsg.GENE_ADD_DTM, (String)JKKModelCommon.getTransferGeneAddDtm(inCBSMsg, inContext));
				create0341Msg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, stat);
				if(!"EKK0161C070".equals(inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY)))
				{
					create0341Msg.set(KK0341ETMsg.MSKM_DTL_NO, mskmDtlNo);
				}
				create0341Msg.set(KK0341ETMsg.RSV_APLY_YMD, rsvAplyYmd);
				create0341Msg.set(KK0341ETMsg.RSV_APLY_CD, "2");

				if(kbn)
				{
					create0341Msg.set(KK0341ETMsg.PAUSE_STP_CD, pause_stp_cd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_YMD, svc_pause_ymd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_CD, svc_pause_rsn_cd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_MEMO, svc_pause_rsn_memo);
					create0341Msg.setNull(KK0341ETMsg.SVC_PAUSE_RLS_YMD);
					create0341Msg.setNull(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD);
					create0341Msg.setNull(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO);

					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD, svc_pause_chrg_sta_ymd);
				}
				else
				{
					create0341Msg.set(KK0341ETMsg.PAUSE_STP_CD, retCurrent.getString(KK0341ETMsg.PAUSE_STP_CD));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_YMD, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_YMD));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_CD, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_RSN_CD));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_MEMO, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_RSN_MEMO));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RLS_YMD, svc_pause_rls_ymd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD, svc_pause_rls_rsn_cd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO, svc_pause_rls_rsn_memo);

					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD));

				}

				create0341Msg.set(KK0341ETMsg.IDO_DIV, idoDiv);

				create0341Msg.set(KK0341ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				create0341Msg.set(KK0341ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				create0341Msg.set(KK0341ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				create0341Msg.set(KK0341ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				create0341Msg.setNull(KK0341ETMsg.DEL_DTM);
				create0341Msg.setNull(KK0341ETMsg.DEL_OPEACNT);
				create0341Msg.set(KK0341ETMsg.MK_FLG, "0");

				// 登録処理の実行
				create(create0341Msg);

				// 引数をメッセージに詰め込む
				CAANMsg msgOfHikisu = setMsgOfHikisu(svcKeiNo, create0341Msg.getString(KK0341ETMsg.MSKM_DTL_NO), rsvAplyYmd, 
						pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
						svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
						svc_pause_chrg_sta_ymd, idoDiv);

				// 予約レコード更新処理
				updateKktkSvcKeiRsv(inCBSMsg, inContext, retCurrent.getString(KK0341ETMsg.KKTK_SVC_KEI_NO), stat, kbn, msgOfHikisu);
			}
		}
		catch (CAANCreateException e1)
		{
			throw new CAANRuntimeException(e1);
		}
		
		return;
	}
	
	/**
	 * <p>
	 * 機器提供サービス契約の休止・中断または休止解除・中断解除データを作成します。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo　サービス契約番号
	 * @param svcKeiKaisenUcwkNo　サービス契約回線内訳番号
	 * @param mskmDtlNo　申込明細番号
	 * @param rsvAplyYmd　予約適用年月日
	 * @param pause_stp_cd　休止中断コード
	 * @param svc_pause_ymd　サービス休止年月日
	 * @param svc_pause_rsn_cd　サービス休止理由コード
	 * @param svc_pause_rsn_memo　サービス休止理由メモ
	 * @param svc_pause_rls_ymd　サービス休止解除年月日
	 * @param svc_pause_rls_rsn_cd　サービス休止解除理由コード
	 * @param svc_pause_rls_rsn_memo　サービス休止解除理由メモ
	 * @param svc_pause_chrg_sta_ymd　サービス休止課金開始年月日
	 * @param idoDiv　異動区分
	 * @param kbn　休止・中断区分フラグ（true:「休止・中断」、false:「休止解除・中断解除」）
	 * @param svc_cd　サービスコード
	 */
	private void kktkSvcPauseKaisen(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svcKeiNo, String svcKeiKaisenUcwkNo,
			String mskmDtlNo, String rsvAplyYmd, String pause_stp_cd, String svc_pause_ymd, String svc_pause_rsn_cd, String svc_pause_rsn_memo,
			String svc_pause_rls_ymd, String svc_pause_rls_rsn_cd, String svc_pause_rls_rsn_memo, 
			String svc_pause_chrg_sta_ymd, String idoDiv, boolean kbn, String svc_cd)
	{
		
		// 機器提供サービス契約の一覧照会を行う
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		
		inETMsg.set(KK0341ETMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);

		KK0341LE kk0341 = new KK0341LE();
		CAANMsg[] otETMsg = null;

		try
		{
			otETMsg = kk0341.findByCondition(inETMsg);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// 回線に紐付く契約が存在しない場合は終了
		int listCnt = otETMsg.length;
		if (listCnt < 1)
		{
			return;
		}

		// 処理済み機器提供サービス契約保持用
		HashMap<String, String> hash = new HashMap<String, String>();

		try
		{

			for (int j = 0; j < listCnt; j++)
			{
				if (hash.containsKey(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO)))
				{
					continue;
				}

				// 読み込んだ機器提供サービス契約番号を控える
				hash.put(otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO), otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));

				CAANMsg inMsgKK0341 = new CAANMsg(KK0341ETMsg.class.getName());
				inMsgKK0341.set(KK0341ETMsg.KKTK_SVC_KEI_NO, otETMsg[j].getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
				inMsgKK0341.set(KK0341ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
				CAANMsg retCurrent = new JKKejbKK0341DBABase().findByCurrent(inMsgKK0341);

				if(retCurrent == null)
				{
					continue;
				}

				String stat = retCurrent.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT);

				//休止・中断の場合かつカレントステータスが「サービス提供中」の場合、「休止・中断中」のデータを作成する
				//休止解除・中断解除の場合かつステータスが「休止・中断中」の場合、「サービス提供中」のデータを作成する
				if("100".equals(stat) && kbn)
				{
					stat = "210";
				}
				else if("210".equals(stat) && !kbn)
				{
					stat = "100";
				}
				else
				{
					continue;
				}

				String kktkSvcKeiNo = retCurrent.getString(KK0341ETMsg.KKTK_SVC_KEI_NO);
				String kktkSvcCd = retCurrent.getString(KK0341ETMsg.KKTK_SVC_CD);

				//ネットまたは電話の場合かつカレントの機器提供サービスコードが「ＯＮＵ」「スリッパー」「モデム」
				//「スプリッター」「インラインフィルタ」、「多機能ルータ」、「ＨＧＷ」以外の場合は何もしない
				if((JKKModelConst.SVC_CD_NET.equals(svc_cd) || JKKModelConst.SVC_CD_TEL.equals(svc_cd)))
				{
					if(!(JKKModelConst.KKTK_SVC_CD_ONU.equals(kktkSvcCd) || JKKModelConst.KKTK_SVC_CD_SURIPPER.equals(kktkSvcCd) ||
							JKKModelConst.KKTK_SVC_CD_MODEM.equals(kktkSvcCd) || JKKModelConst.KKTK_SVC_CD_SPLITTER.equals(kktkSvcCd) ||
						// ANK-4315-00-00 MOD START
//							JKKModelConst.KKTK_SVC_CD_INLINE_FILTER.equals(kktkSvcCd) || JKKModelConst.KKTK_SVC_CD_TAKINORT.equals(kktkSvcCd)))
							JKKModelConst.KKTK_SVC_CD_INLINE_FILTER.equals(kktkSvcCd) || JKKModelConst.KKTK_SVC_CD_TAKINORT.equals(kktkSvcCd) || JKKModelConst.KKTK_SVC_CD_HGW.equals(kktkSvcCd)))
						// ANK-4315-00-00 MOD END
					{
						continue;
					}
				}
				String searchPtn = "";
				//多機能ルータかつサービス契約のサービスコードがネットまたは電話でない場合処理対象外
				// ANK-4315-00-00 MOD START
//				if(JKKModelConst.KKTK_SVC_CD_TAKINORT.equals(kktkSvcCd))
				if(JKKModelConst.KKTK_SVC_CD_TAKINORT.equals(kktkSvcCd) || JKKModelConst.KKTK_SVC_CD_HGW.equals(kktkSvcCd))
				// ANK-4315-00-00 MOD END
				{
					if(JKKModelConst.SVC_CD_NET.equals(svc_cd)) {
						searchPtn = "2";
					} else if(JKKModelConst.SVC_CD_TEL.equals(svc_cd)){
						searchPtn = "3";	
					} else {
						continue;
					}
					// 多機能ルータの場合、その多機能ルータに紐づく機器オプションが有効になっている場合のみ処理対象とする。
					CAANMsg[] kk2811Msg = new JKKejbKK2811DBABase().getKK2811byKktk(kktkSvcKeiNo, null, JKKModelCommon.getOpeDate(inCBSMsg), searchPtn);
					if(kk2811Msg == null || kk2811Msg.length == 0) {
						continue;
					}
				}
				
				//ＴＶの場合かつカレントの機器提供サービスコードが「Ｖ−ＯＮＵ」以外の場合は何もしない
				if(JKKModelConst.SVC_CD_TV.equals(svc_cd) && 	!JKKModelConst.KKTK_SVC_CD_V_ONU.equals(kktkSvcCd))
				{
					continue;
				}

				// 機器提供サービス契約 新規レコード用Msg生成
				CAANMsg create0341Msg = retCurrent;

				// 新規レコード用メッセージ設定
				create0341Msg.set(KK0341ETMsg.GENE_ADD_DTM, (String)JKKModelCommon.getTransferGeneAddDtm(inCBSMsg, inContext));
				create0341Msg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, stat);
				create0341Msg.set(KK0341ETMsg.MSKM_DTL_NO, mskmDtlNo);
				create0341Msg.set(KK0341ETMsg.RSV_APLY_YMD, rsvAplyYmd);
				create0341Msg.set(KK0341ETMsg.RSV_APLY_CD, "2");

				if(kbn)
				{
					create0341Msg.set(KK0341ETMsg.PAUSE_STP_CD, pause_stp_cd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_YMD, svc_pause_ymd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_CD, svc_pause_rsn_cd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_MEMO, svc_pause_rsn_memo);
					create0341Msg.setNull(KK0341ETMsg.SVC_PAUSE_RLS_YMD);
					create0341Msg.setNull(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD);
					create0341Msg.setNull(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO);

					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD, svc_pause_chrg_sta_ymd);
				}
				else
				{
					create0341Msg.set(KK0341ETMsg.PAUSE_STP_CD, retCurrent.getString(KK0341ETMsg.PAUSE_STP_CD));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_YMD, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_YMD));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_CD, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_RSN_CD));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RSN_MEMO, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_RSN_MEMO));
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RLS_YMD, svc_pause_rls_ymd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD, svc_pause_rls_rsn_cd);
					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO, svc_pause_rls_rsn_memo);

					create0341Msg.set(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD, retCurrent.getString(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD));

				}

				create0341Msg.set(KK0341ETMsg.IDO_DIV, idoDiv);

				create0341Msg.set(KK0341ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				create0341Msg.set(KK0341ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				create0341Msg.set(KK0341ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				create0341Msg.set(KK0341ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				create0341Msg.setNull(KK0341ETMsg.DEL_DTM);
				create0341Msg.setNull(KK0341ETMsg.DEL_OPEACNT);
				create0341Msg.set(KK0341ETMsg.MK_FLG, "0");

				// 登録処理の実行
				create(create0341Msg);

				// 引数をメッセージに詰め込む
				CAANMsg msgOfHikisu = setMsgOfHikisu(svcKeiNo, create0341Msg.getString(KK0341ETMsg.MSKM_DTL_NO), rsvAplyYmd, 
						pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
						svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
						svc_pause_chrg_sta_ymd, idoDiv);

				// 予約レコード更新処理
				updateKktkSvcKeiRsv(inCBSMsg, inContext, retCurrent.getString(KK0341ETMsg.KKTK_SVC_KEI_NO), stat, true, msgOfHikisu);
			}
		}
		catch (CAANCreateException e1)
		{
			throw new CAANRuntimeException(e1);
		}
		
		return;
	}

	/**
	 * <p>
	 * サービス契約に紐付く機器提供サービス契約のステータスの変更を行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svc_kei_no　サービス契約番号
	 * @param gene_add_dtm　世代登録年月日時分秒
	 */
	public void execFromSvcKei(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svc_kei_no, String gene_add_dtm)
	{
		
		// サービス契約の照会を行う
		CAANMsg inETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, svc_kei_no);
		inETMsgCurrent.set(KK0081ETMsg.GENE_ADD_DTM, gene_add_dtm);
		CAANMsg otETMsg = new JKKejbKK0081DBABase().findByPrimaryKey(inETMsgCurrent);
		
		// サービス契約内訳が存在しない場合は終了
		if (otETMsg == null)
		{
			return;
		}

		//紐づくオプションサービス契約・機器提供サービス契約を
		//作成する。
		String mskmDtlNo = otETMsg.getString(KK0081ETMsg.MSKM_DTL_NO);
		String rsvAplyYmd = otETMsg.getString(KK0081ETMsg.RSV_APLY_YMD);
		String pause_stp_cd = otETMsg.getString(KK0081ETMsg.PAUSE_STP_CD);
		String svc_pause_ymd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_YMD);
		String svc_pause_rsn_cd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RSN_CD);
		String svc_pause_rsn_memo = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RSN_MEMO);
		String svc_pause_rls_ymd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RLS_YMD);
		String svc_pause_rls_rsn_cd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RLS_RSN_CD);
		String svc_pause_rls_rsn_memo = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RLS_RSN_MEMO);
		String svc_pause_chrg_sta_ymd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_CHRG_STA_YMD);
		String idoDiv = otETMsg.getString(KK0081ETMsg.IDO_DIV);
		String svc_kei_stat = otETMsg.getString(KK0081ETMsg.SVC_KEI_STAT);
		
		//サービス契約のステータスが「休止・中断中」の場合、区分にtrueを設定
		//サービス契約のステータスが「休止・中断中」でない場合、区分にfalseを設定
		boolean kbn = true;
		if(!"210".equals(svc_kei_stat))
		{
			kbn = false;
		}

		//登録処理メソッド呼び出し
		kktkSvcPause(inCBSMsg, inContext, svc_kei_no, null, null, mskmDtlNo, rsvAplyYmd, 
				pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
				svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
				svc_pause_chrg_sta_ymd, idoDiv, kbn);
		
	}

	/**
	 * <p>
	 * 回線に紐付く機器提供サービス契約のステータスの変更を行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svc_kei_no　サービス契約番号
	 * @param gene_add_dtm　世代登録年月日時分秒
	 */
	public void execFromKktkSvcKei(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svc_kei_no, String gene_add_dtm)
	{
		
		// サービス契約の照会を行う
		CAANMsg inETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, svc_kei_no);
		inETMsgCurrent.set(KK0081ETMsg.GENE_ADD_DTM, gene_add_dtm);
		CAANMsg otETMsg = new JKKejbKK0081DBABase().findByPrimaryKey(inETMsgCurrent);
		
		// サービス契約が存在しない場合は終了
		if (otETMsg == null)
		{
			return;
		}

		//紐づくオプションサービス契約・機器提供サービス契約を
		//作成する。
		String mskmDtlNo = otETMsg.getString(KK0081ETMsg.MSKM_DTL_NO);
		String rsvAplyYmd = otETMsg.getString(KK0081ETMsg.RSV_APLY_YMD);
		String pause_stp_cd = otETMsg.getString(KK0081ETMsg.PAUSE_STP_CD);
		String svc_pause_ymd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_YMD);
		String svc_pause_rsn_cd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RSN_CD);
		String svc_pause_rsn_memo = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RSN_MEMO);
		String svc_pause_rls_ymd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RLS_YMD);
		String svc_pause_rls_rsn_cd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RLS_RSN_CD);
		String svc_pause_rls_rsn_memo = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_RLS_RSN_MEMO);
		String svc_pause_chrg_sta_ymd = otETMsg.getString(KK0081ETMsg.SVC_PAUSE_CHRG_STA_YMD);
		String idoDiv = otETMsg.getString(KK0081ETMsg.IDO_DIV);
		String svc_kei_stat = otETMsg.getString(KK0081ETMsg.SVC_KEI_STAT);
		String svc_cd = otETMsg.getString(KK0081ETMsg.SVC_CD);
		
		//サービス契約のステータスが「休止・中断中」の場合、区分にtrueを設定
		//サービス契約のステータスが「休止・中断中」でない場合、区分にfalseを設定
		boolean kbn = true;
		if(!"210".equals(svc_kei_stat))
		{
			kbn = false;
		}
		
		// 回線対象サービス契約の照会を行う
		CAANMsg inKK0241ETMsg = new CAANMsg(KK0241ETMsg.class.getName());
		inKK0241ETMsg.set(KK0241ETMsg.SVC_KEI_NO, svc_kei_no);
		inKK0241ETMsg.set(KK0241ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
		KK0241LE kk0241 = new KK0241LE();
		CAANMsg[] otKK0241ETMsg = null;

		try
		{
			otKK0241ETMsg = kk0241.findByCondition(inKK0241ETMsg);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// サービス契約に紐付く回線対象サービス契約が存在しない場合は終了
		int listCnt = otKK0241ETMsg.length;
		if (listCnt < 1)
		{
			return;
		}

		for (int j = 0; j < listCnt; j++)
		{
			String svcKeiNo = otKK0241ETMsg[j].getString(KK0241ETMsg.SVC_KEI_NO);
			String svcKeiKaisenUcwkNo = otKK0241ETMsg[j].getString(KK0241ETMsg.SVC_KEI_KAISEN_UCWK_NO);

			// 回線対象サービス契約の照会を行う
			CAANMsg inKK0241_1ETMsg = new CAANMsg(KK0241ETMsg.class.getName());
			inKK0241_1ETMsg.set(KK0241ETMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
			inKK0241_1ETMsg.set(KK0241ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
			KK0241LE kk0241_1 = new KK0241LE();
			CAANMsg[] otKK0241_1ETMsg = null;

			try
			{
				otKK0241_1ETMsg = kk0241_1.findByCondition(inKK0241_1ETMsg);
			}
			catch (CAANException e1)
			{
				throw new CAANRuntimeException(e1);
			}

			int listCnt_1 = otKK0241_1ETMsg.length;
			int kk0241Flg = 0;

			for (int k = 0; k < listCnt_1; k++)
			{
				//対象のサービス契約以外かつ休止の場合
				if (!svc_kei_no.equals(otKK0241_1ETMsg[k].getString(KK0241ETMsg.SVC_KEI_NO)) && kbn)
				{
					// サービス契約の照会を行う
					String opeDate = JKKModelCommon.getOpeDate(inCBSMsg);
					CAANMsg inKK0081ETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
					inKK0081ETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, otKK0241_1ETMsg[k].getString(KK0241ETMsg.SVC_KEI_NO));
					inKK0081ETMsgCurrent.set(KK0081ETMsg.RSV_APLY_YMD, opeDate);
					CAANMsg otKK0081ETMsg = new JKKejbKK0081DBABase().findByCurrent(inKK0081ETMsgCurrent);
					
					// サービス契約が存在しない場合は終了
					if (otKK0081ETMsg == null)
					{
						continue;
					}
					// 休止対象のサービス契約がＴＶの場合
					if (JKKModelConst.SVC_CD_TV.equals(svc_cd))
					{
						continue;
					}
					// サービス契約がネットまたは電話の場合
					if (JKKModelConst.SVC_CD_NET.equals(otKK0081ETMsg.getString(KK0081ETMsg.SVC_CD)) ||
							JKKModelConst.SVC_CD_TEL.equals(otKK0081ETMsg.getString(KK0081ETMsg.SVC_CD)))
					{
						// サービス契約ステータスが休止・中断中もしくはキャンセル済、もしくは解約済以外が存在する場合は処理しない
						if (!(JKKModelConst.SVC_KEI_STAT_PAUSE_STP_CHU.equals(otKK0081ETMsg.getString(KK0081ETMsg.SVC_KEI_STAT)) ||
								JKKModelConst.SVC_KEI_STAT_DSL_ZM.equals(otKK0081ETMsg.getString(KK0081ETMsg.SVC_KEI_STAT)) ||
								JKKModelConst.SVC_KEI_STAT_CNCL_ZM.equals(otKK0081ETMsg.getString(KK0081ETMsg.SVC_KEI_STAT))))
						{
							kk0241Flg = 1;
						}
					}
				}
			}

			if (kk0241Flg == 0)
			{
				//登録処理メソッド呼び出し
				kktkSvcPauseKaisen(inCBSMsg, inContext, svcKeiNo, svcKeiKaisenUcwkNo, mskmDtlNo, rsvAplyYmd, 
						pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
						svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
						svc_pause_chrg_sta_ymd, idoDiv, kbn, svc_cd);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約内訳に紐付く機器提供サービス契約のステータスの変更を行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiUcwkNo　サービス契約内訳番号
	 * @param gene_add_dtm　世代登録年月日時分秒
	 */
	public void execFromSvcKeiUcwk(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svcKeiUcwkNo, String gene_add_dtm)
	{
		CAANMsg inMsgKK0161 = new CAANMsg(KK0161ETMsg.class.getName());
		inMsgKK0161.set(KK0161ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		inMsgKK0161.set(KK0161ETMsg.GENE_ADD_DTM, gene_add_dtm);
		CAANMsg otETMsg = new JKKejbKK0161DBABase().findByPrimaryKey(inMsgKK0161);

		// サービス契約内訳が存在しない場合は終了
		if (otETMsg == null)
		{
			return;
		}

		//紐づくオプションサービス契約・機器提供サービス契約を
		//作成する。
		String mskmDtlNo = otETMsg.getString(KK0161ETMsg.MSKM_DTL_NO);
		
		//サービス契約内訳中断解除のときのみ申込明細番号を受け渡さない（カレントレコードの値を設定）
		if("EKK0161C070".equals(inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY)))
		{
			mskmDtlNo = null;
		}
		
		String rsvAplyYmd = otETMsg.getString(KK0161ETMsg.RSV_APLY_YMD);
		String pause_stp_cd = otETMsg.getString(KK0161ETMsg.PAUSE_STP_CD);
		String svc_pause_ymd = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_YMD);
		String svc_pause_rsn_cd = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_RSN_CD);
		String svc_pause_rsn_memo = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_RSN_MEMO);
		String svc_pause_rls_ymd = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_RLS_YMD);
		String svc_pause_rls_rsn_cd = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_RLS_RSN_CD);
		String svc_pause_rls_rsn_memo = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_RLS_RSN_MEMO);
		String svc_pause_chrg_sta_ymd = otETMsg.getString(KK0161ETMsg.SVC_PAUSE_CHRG_STA_YMD);
		String idoDiv = otETMsg.getString(KK0161ETMsg.IDO_DIV);
		String svc_kei_stat = otETMsg.getString(KK0161ETMsg.SVC_KEI_UCWK_STAT);
		
		//サービス契約のステータスが「休止・中断中」の場合、区分にtrueを設定
		//サービス契約のステータスが「休止・中断中」でない場合、区分にfalseを設定
		boolean kbn = true;
		if(!"210".equals(svc_kei_stat))
		{
			kbn = false;
		}

		//登録処理メソッド呼び出し
		kktkSvcPause(inCBSMsg, inContext, null, svcKeiUcwkNo, null, mskmDtlNo, rsvAplyYmd, 
				pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
				svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
				svc_pause_chrg_sta_ymd, idoDiv, kbn);
		
	}

	/**
	 * <p>
	 * サービス契約内訳に紐付く機器提供サービス契約のステータスの変更を行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiUcwkNo　サービス契約内訳番号
	 * @param mskmDtlNo　申込明細番号
	 * @param rsvAplyYmd　予約適用年月日
	 * @param pause_stp_cd　休止中断コード
	 * @param svc_pause_ymd　サービス休止年月日
	 * @param svc_pause_rsn_cd　サービス休止理由コード
	 * @param svc_pause_rsn_memo　サービス休止理由メモ
	 * @param svc_pause_rls_ymd　サービス休止解除年月日
	 * @param svc_pause_rls_rsn_cd　サービス休止解除理由コード
	 * @param svc_pause_rls_rsn_memo　サービス休止解除理由メモ
	 * @param svc_pause_chrg_sta_ymd　サービス休止課金開始年月日
	 * @param idoDiv　異動区分
	 * @param kbn　休止・中断区分フラグ（true:「休止・中断」、false:「休止解除・中断解除」）
	 */
	public void execFromSvcKeiUcwk(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svcKeiUcwkNo, String mskmDtlNo, String rsvAplyYmd,
			String pause_stp_cd, String svc_pause_ymd, String svc_pause_rsn_cd, String svc_pause_rsn_memo, String svc_pause_rls_ymd,
			String svc_pause_rls_rsn_cd, String svc_pause_rls_rsn_memo, String svc_pause_chrg_sta_ymd, String idoDiv, boolean kbn)
	{
		//登録処理メソッド呼び出し
		kktkSvcPause(inCBSMsg, inContext, null, svcKeiUcwkNo, null, mskmDtlNo, rsvAplyYmd, 
				pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
				svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
				svc_pause_chrg_sta_ymd, idoDiv, kbn);
		
	}

	/**
	 * <p>
	 * オプションサービス契約に紐付く機器提供サービス契約のステータスの変更を行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param opSvcKeiNo　オプションサービス契約番号
	 * @param mskmDtlNo　申込明細番号
	 * @param rsvAplyYmd　予約適用年月日
	 * @param pause_stp_cd　休止中断コード
	 * @param svc_pause_ymd　サービス休止年月日
	 * @param svc_pause_rsn_cd　サービス休止理由コード
	 * @param svc_pause_rsn_memo　サービス休止理由メモ
	 * @param svc_pause_rls_ymd　サービス休止解除年月日
	 * @param svc_pause_rls_rsn_cd　サービス休止解除理由コード
	 * @param svc_pause_rls_rsn_memo　サービス休止解除理由メモ
	 * @param svc_pause_chrg_sta_ymd　サービス休止課金開始年月日
	 * @param idoDiv　異動区分
	 * @param kbn　休止・中断区分フラグ（true:「休止・中断」、false:「休止解除・中断解除」）
	 */
	public void execFromOpSvcKei(CAANMsg inCBSMsg, AgentDispatchContext inContext, String opSvcKeiNo, String mskmDtlNo, String rsvAplyYmd,
			String pause_stp_cd, String svc_pause_ymd, String svc_pause_rsn_cd, String svc_pause_rsn_memo, String svc_pause_rls_ymd,
			String svc_pause_rls_rsn_cd, String svc_pause_rls_rsn_memo, String svc_pause_chrg_sta_ymd, String idoDiv, boolean kbn)
	{
		
		//登録処理メソッド呼び出し
		kktkSvcPause(inCBSMsg, inContext, null, null, opSvcKeiNo, mskmDtlNo, rsvAplyYmd, 
				pause_stp_cd, svc_pause_ymd, svc_pause_rsn_cd, svc_pause_rsn_memo, 
				svc_pause_rls_ymd, svc_pause_rls_rsn_cd, svc_pause_rls_rsn_memo, 
				svc_pause_chrg_sta_ymd, idoDiv, kbn);
		
	}

	/**
	 * <p>
	 * 引数をメッセージに詰めて返却します。
	 * </p>
	 * @param svcKeiNo　サービス契約番号
	 * @param mskmDtlNo　申込明細番号
	 * @param rsvAplyYmd　予約適用年月日
	 * @param pause_stp_cd　休止中断コード
	 * @param svc_pause_ymd　サービス休止年月日
	 * @param svc_pause_rsn_cd　サービス休止理由コード
	 * @param svc_pause_rsn_memo　サービス休止理由メモ
	 * @param svc_pause_rls_ymd　サービス休止解除年月日
	 * @param svc_pause_rls_rsn_cd　サービス休止解除理由コード
	 * @param svc_pause_rls_rsn_memo　サービス休止解除理由メモ
	 * @param svc_pause_chrg_sta_ymd　サービス休止課金開始年月日
	 * @param idoDiv　異動区分
	 * @return 引数の値を詰め込んだMsg
	 */
	private CAANMsg setMsgOfHikisu(String svcKeiNo, String mskmDtlNo, String rsvAplyYmd, 
			String pause_stp_cd, String svc_pause_ymd, String svc_pause_rsn_cd, String svc_pause_rsn_memo,
			String svc_pause_rls_ymd, String svc_pause_rls_rsn_cd, String svc_pause_rls_rsn_memo, 
			String svc_pause_chrg_sta_ymd, String idoDiv)
	{
		CAANMsg setMsg = new CAANMsg(KK0341ETMsg.class.getName());
		setMsg.set(KK0341ETMsg.SVC_KEI_NO, svcKeiNo);
		setMsg.set(KK0341ETMsg.MSKM_DTL_NO, mskmDtlNo);
		setMsg.set(KK0341ETMsg.RSV_APLY_YMD, rsvAplyYmd);
		setMsg.set(KK0341ETMsg.PAUSE_STP_CD, pause_stp_cd);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_YMD, svc_pause_ymd);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_RSN_CD, svc_pause_rsn_cd);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_RSN_MEMO, svc_pause_rsn_memo);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_RLS_YMD, svc_pause_rls_ymd);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD, svc_pause_rls_rsn_cd);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO, svc_pause_rls_rsn_memo);
		setMsg.set(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD, svc_pause_chrg_sta_ymd);
		setMsg.set(KK0341ETMsg.IDO_DIV, idoDiv);

		return setMsg;
	}

	/**
	 * <p>
	 * 機器提供サービス契約の予約レコードの更新処理を行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param kktkSvcKeiNo　機器提供サービス契約番号
	 * @param stat 更新用ステータス
	 * @param kbn　休止・中断区分フラグ（true:「休止・中断」、false:「休止解除・中断解除」）
	 * @param inMsg　予約更新用メッセージ
	 */
	private void updateKktkSvcKeiRsv(CAANMsg inCBSMsg, AgentDispatchContext inContext, String kktkSvcKeiNo, String stat, boolean kbn, CAANMsg inMsg)
	{
		CAANMsg rsvInMsg = new CAANMsg(KK0341ETMsg.class.getName());
		rsvInMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		rsvInMsg.set(KK0341ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg[] rsvRetMsgs = findByReserve(rsvInMsg); // 予約レコード取得

		try
		{
			for (CAANMsg retMsg : rsvRetMsgs)
			{
				// ステータスが"契約変更中"の場合は更新対象外
				if (JKKModelConst.KKTK_SVC_KEI_STAT_KEI_CHG_CHU.equals(retMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT)))
				{
					continue;
				}

				// 更新内容設定
				setColumnForRsvUpd(inCBSMsg, inContext, retMsg, stat, kbn, inMsg);

				// 更新処理の実行
				update(retMsg);
			}
		}
		catch (CAANFinderException e2)
		{
			throw new CAANRuntimeException(e2);
		}
	}

	/**
	 * <p>
	 * 機器提供サービス契約の予約レコードの更新内容を設定します。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param retMsg    更新対象レコード
	 * @param stat      更新用ステータス
	 * @param kbn　     休止・中断区分フラグ（true:「休止・中断」、false:「休止解除・中断解除」）
	 * @param inMsg　   予約更新用メッセージ
	 */
	private void setColumnForRsvUpd(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg retMsg, String stat, boolean kbn, CAANMsg inMsg)
	{
		retMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, stat); // ステータス
		retMsg.set(KK0341ETMsg.MSKM_DTL_NO, inMsg.getString(KK0341ETMsg.MSKM_DTL_NO)); // 申込明細番号
		if (kbn)
		{
			retMsg.set(KK0341ETMsg.PAUSE_STP_CD, inMsg.getString(KK0341ETMsg.PAUSE_STP_CD)); // 休止中断コード
			retMsg.set(KK0341ETMsg.SVC_PAUSE_YMD, inMsg.getString(KK0341ETMsg.SVC_PAUSE_YMD)); // サービス休止年月日
			retMsg.set(KK0341ETMsg.SVC_PAUSE_RSN_CD, inMsg.getString(KK0341ETMsg.SVC_PAUSE_RSN_CD)); // サービス休止理由コード
			retMsg.set(KK0341ETMsg.SVC_PAUSE_RSN_MEMO, inMsg.getString(KK0341ETMsg.SVC_PAUSE_RSN_MEMO)); // サービス休止理由メモ

			retMsg.set(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD, inMsg.getString(KK0341ETMsg.SVC_PAUSE_CHRG_STA_YMD)); // サービス休止課金開始年月日
		}
		retMsg.set(KK0341ETMsg.SVC_PAUSE_RLS_YMD, inMsg.getString(KK0341ETMsg.SVC_PAUSE_RLS_YMD)); // サービス休止解除年月日
		retMsg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD, inMsg.getString(KK0341ETMsg.SVC_PAUSE_RLS_RSN_CD)); // サービス休止解除理由コード
		retMsg.set(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO, inMsg.getString(KK0341ETMsg.SVC_PAUSE_RLS_RSN_MEMO)); // サービス休止解除理由メモ
		retMsg.set(KK0341ETMsg.IDO_DIV, inMsg.getString(KK0341ETMsg.IDO_DIV)); // 異動区分
		retMsg.set(KK0341ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY)); // 更新年月日時分秒
		retMsg.set(KK0341ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY)); // 更新オペレータアカウント
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く予約の取消、および自動予約取消ワークの登録を行います。
	 * </p>
	 * @param kktkSvcKeiNo 取り消し対象の機器提供サービス契約番号
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param opeDate 運用日付
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 * @param autoRsvClStatCd 自動予約取消状態コード("取消済"/"自動予約取消未実施"：予約取消を実施する/しない)
	 */
	public void cancelReserve(String kktkSvcKeiNo, String idoDiv, String mskmDtlNo,
			String opeDate, String updDtm, String updOpeAct, String autoRsvClStatCd)
	{
		// 機器提供サービス契約スキーマの予約取消

		// 予約検索用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		inETMsg.set(KK0341ETMsg.RSV_APLY_YMD, opeDate);

		// 予約検索を行う
		CAANMsg[] retMsgList = super.findByReserve(inETMsg);

		// 取得した予約レコードを全て取り消す
		for (CAANMsg retMsg : retMsgList)
		{
			// 自動予約取消状態コードが"取消済"の場合のみ、予約取消実施
			if (JKKModelConst.AUTO_RSV_CL_STAT_CD_CL_ZM.equals(autoRsvClStatCd))
			{
				updateKK0341ClRsv(retMsg, opeDate, updDtm, updOpeAct);
			}
			// 自動予約取消ワークに登録します
			this.createKK2791GymSchema(retMsg, idoDiv, mskmDtlNo, updDtm, updOpeAct, autoRsvClStatCd);
		}

		// 異動予約スキーマの予約取消

		// 予約検索を行う
		List<CAANMsg> retList = new JKKejbIdoRsvAccess().getIdoRsvKktkSvcKeiNo(kktkSvcKeiNo, opeDate);

		// 予約レコードが存在した場合は取り消す
		for (CAANMsg retIdoRsv : retList)
		{
			// ただし、申込明細番号が同一のものは処理しない
			if (mskmDtlNo != null && !mskmDtlNo.equals(retIdoRsv.getString(KK1681ETMsg.MSKM_DTL_NO)))
			{
				// 自動予約取消状態コードが"取消済"の場合のみ、予約取消実施
				if (JKKModelConst.AUTO_RSV_CL_STAT_CD_CL_ZM.equals(autoRsvClStatCd))
				{
					new JKKejbKK1681SecProc().updateKK1681ClRsv(retIdoRsv, opeDate, updDtm, updOpeAct);
				}
				// 自動予約取消ワークに登録します
				this.createKK2791IdoRsv(retIdoRsv, idoDiv, mskmDtlNo, updDtm, updOpeAct, autoRsvClStatCd);
			}
		}
	}

	/**
	 * <p>
	 * 自動予約取消ワークに機器提供サービス契約の予約情報を登録します
	 * </p>
	 * @param kk0341EtMsg ETメッセージ
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 * @param autoRsvClStatCd 自動予約取消状態コード
	 */
	private void createKK2791GymSchema(CAANMsg kk0341EtMsg, String idoDiv, String mskmDtlNo, String updDtm, String updOpeAct, String autoRsvClStatCd)
	{
		// 自動予約取消ワークＤＢ操作部品のインスタンス化
		JKKejbKK2791ETDA kk2791etda = new JKKejbKK2791ETDA();

		// 取消契機異動区分
		kk2791etda.setCl_opty_ido_div(idoDiv);
		// 取消契機申込明細番号
		kk2791etda.setCl_opty_mskm_dtl_no(mskmDtlNo);
		// 機器提供サービス契約番号
		kk2791etda.setKktk_svc_kei_no(kk0341EtMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		// 予約契機異動区分
		kk2791etda.setRsv_opty_ido_div(kk0341EtMsg.getString(KK0341ETMsg.IDO_DIV));
		// 予約契機申込明細番号
		kk2791etda.setRsv_opty_mskm_dtl_no(kk0341EtMsg.getString(KK0341ETMsg.MSKM_DTL_NO));
		// 予約適用年月日
		kk2791etda.setRsv_aply_ymd(kk0341EtMsg.getString(KK0341ETMsg.RSV_APLY_YMD));
		// 各種スキーマ世代登録年月日時分秒
		kk2791etda.setVari_schma_gene_add_dtm(kk0341EtMsg.getString(KK0341ETMsg.GENE_ADD_DTM));
		// 予約適用コード
		kk2791etda.setRsv_aply_cd(kk0341EtMsg.getString(KK0341ETMsg.RSV_APLY_CD));
		// 登録年月日時分秒
		kk2791etda.setAdd_dtm(updDtm);
		// 登録オペレータアカウント
		kk2791etda.setAdd_opeacnt(updOpeAct);
		// 更新年月日時分秒
		kk2791etda.setUpd_dtm(updDtm);
		// 更新オペレータアカウント
		kk2791etda.setUpd_opeacnt(updOpeAct);

		// 自動予約取消ワークの登録
		kk2791etda.createKK2791(kk0341EtMsg, "KK0341", autoRsvClStatCd);
	}

	/**
	 * <p>
	 * 自動予約取消ワークに異動予約の予約情報を登録します
	 * </p>
	 * @param kk1681EtMsg ETメッセージ
	 * @param idoDiv 異動区分
	 * @param mskmDtlNo 申込明細番号
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 * @param autoRsvClStatCd 自動予約取消状態コード
	 */
	private void createKK2791IdoRsv(CAANMsg kk1681EtMsg, String idoDiv, String mskmDtlNo, String updDtm, String updOpeAct, String autoRsvClStatCd)
	{
		// 自動予約取消ワークＤＢ操作部品のインスタンス化
		JKKejbKK2791ETDA kk2791etda = new JKKejbKK2791ETDA();

		// 取消契機異動区分
		kk2791etda.setCl_opty_ido_div(idoDiv);
		// 取消契機申込明細番号
		kk2791etda.setCl_opty_mskm_dtl_no(mskmDtlNo);
		// 登録年月日時分秒
		kk2791etda.setAdd_dtm(updDtm);
		// 登録オペレータアカウント
		kk2791etda.setAdd_opeacnt(updOpeAct);
		// 更新年月日時分秒
		kk2791etda.setUpd_dtm(updDtm);
		// 更新オペレータアカウント
		kk2791etda.setUpd_opeacnt(updOpeAct);

		// 自動予約取消ワークの登録
		kk2791etda.createKK2791(kk1681EtMsg, "KK1681", autoRsvClStatCd);
	}

	/**
	 * <p>
	 * 該当の「機器提供サービス契約」を回復(または解約取消)する際に、予約適用年月日が到来済の予約を取り消します。
	 * </p>
	 * @param kktkSvcKeiNo 回復(または解約取消)対象の機器提供サービス契約番号
	 * @param opeDate 運用日付
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	public void cancelReserveForKaihk(String kktkSvcKeiNo, String opeDate, String updDtm, String updOpeAct)
	{
		// 予約検索を行う
		List<CAANMsg> kk1681MsgList = new JKKejbIdoRsvAccess().getIdoRsvKktkSvcKeiNo(kktkSvcKeiNo, opeDate);

		// 予約取消対象となる「異動予約」(予約適用年月日が到来済、かつ予約未反映)リスト
		JKKejbKK1681SecProc kk1681sp = new JKKejbKK1681SecProc();
		kk1681MsgList = kk1681sp.getIdoRsvForKaihkJiRsvCl(kk1681MsgList, opeDate);
		for (CAANMsg kk1681Msg : kk1681MsgList)
		{
			kk1681sp.updateKK1681ClRsv(kk1681Msg, opeDate, updDtm, updOpeAct);

			// 該当の予約と同時に作成された各種契約のインスタンスを削除する。
			kk1681sp.deleteInstanceForRsvCl(kk1681Msg, opeDate, updDtm, updOpeAct);
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く予約
	 * （該当の「機器提供サービス契約」レコードのうち、未来日での予約確定レコード）を解約します。
	 * </p>
	 * @param kktkSvcKeiNo 解約対象の機器提供サービス契約番号
	 * @param opeDate 運用日付
	 * @param svcEndymd サービス終了年月日
	 * @param svcChrgEndYmd サービス課金終了年月日
	 * @param svcDlreCd サービス解約理由コード
	 * @param svcDlreMemo サービス解約理由メモ
	 * @param zanchiFlg 残置フラグ
	 * @param taknkikiIdoCd 宅内機器異動コード
	 * @param kaishuKikiUm 回収機器有無
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	public void dslRsvFixRec(String kktkSvcKeiNo, String opeDate,
			String svcEndymd, String svcChrgEndYmd, String svcDlreCd, String svcDlreMemo,
			String zanchiFlg, String taknkikiIdoCd, String kaishuKikiUm, String updDtm, String updOpeAct)
	{
		/* ------------------------------------------------------------------------------------------------------------------------
		 * 予約中の強制解約、および住所変更予約中の解約の場合、回復時に予約情報を反映する必要があるため予約取消は行わない。
		 * ※ただし、未来日・予約確定レコードについては、予約適用年月日が到来した時点で、カレントレコードとなってしまうため、
		 *   以下の更新処理を行う。
		 * (1)予約解約(キャンセル)：解約時に予約レコードを"解約済"とする。
		 * (2)予約回復(キャンセル取消)：回復時に予約レコードを元のステータスに回復する。（現時点では、住所変更中の解約／回復に対してのみ実施する。）
		 * ------------------------------------------------------------------------------------------------------------------------ */
		
		// 該当の「機器提供サービス契約」レコードの予約確定レコードを取得する。
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
		inETMsg.set(KK0341ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		CAANMsg[] retMsg = null;
		try
		{
			retMsg = new KK0341LE().findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		
		// 予約解約実行
		for (int i = 0; i < retMsg.length; i++)
		{
			// 予約適用年月日＞運用日付の予約確定レコードのみ解約する。
			if (JKKModelCommon.isFutureDate(retMsg[i].getString(KK0341ETMsg.RSV_APLY_YMD), opeDate, "0"))
			{
				updateKK0341DslRsv(retMsg[i], svcEndymd, svcChrgEndYmd, svcDlreCd, svcDlreMemo,
						zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtm, updOpeAct);
			}
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く予約
	 * （該当の「機器提供サービス契約」レコードのうち、未来日での予約確定レコード）をキャンセルします。
	 * </p>
	 * @param kktkSvcKeiNo キャンセル対象の機器提供サービス契約番号
	 * @param opeDate 運用日付
	 * @param svcCancelYmd サービスキャンセル年月日
	 * @param svcCancelRsnCd サービスキャンセル理由コード
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	public void cancelRsvFixRec(String kktkSvcKeiNo, String opeDate,
			String svcCancelYmd, String svcCancelRsnCd, String updDtm, String updOpeAct)
	{
		/* ------------------------------------------------------------------------------------------------------------------------
		 * 予約中の強制解約、および住所変更予約中のキャンセルの場合、回復時に予約情報を反映する必要があるため予約取消は行わない。
		 * ※ただし、未来日・予約確定レコードについては、予約適用年月日が到来した時点で、カレントレコードとなってしまうため、
		 *   以下の更新処理を行う。
		 * (1)予約解約(キャンセル)：解約時に予約レコードを"解約済"とする。
		 * (2)予約回復(キャンセル取消)：回復時に予約レコードを元のステータスに回復する。（現時点では、住所変更中の解約／回復に対してのみ実施する。）
		 * ------------------------------------------------------------------------------------------------------------------------ */
		
		// 該当の「機器提供サービス契約」レコードの予約確定レコードを取得する。
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
		inETMsg.set(KK0341ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		CAANMsg[] retMsg = null;
		try
		{
			retMsg = new KK0341LE().findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		
		// 予約キャンセル実行
		for (int i = 0; i < retMsg.length; i++)
		{
			// 予約適用年月日＞運用日付の予約確定レコードのみキャンセルする。
			if (JKKModelCommon.isFutureDate(retMsg[i].getString(KK0341ETMsg.RSV_APLY_YMD), opeDate, "0"))
			{
				updateKK0341CancelRsv(retMsg[i], svcCancelYmd, svcCancelRsnCd, updDtm, updOpeAct);
			}
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く予約
	 * （該当の「機器提供サービス契約」レコードのうち、未来日での予約確定レコード）を回復します。
	 * </p>
	 * @param kktkSvcKeiNo 回復対象の機器提供サービス契約番号
	 * @param opeDate 運用日付
	 * @param dslBfKktkSvcKeiStat 解約前機器提供サービス契約ステータス
	 * @param svcIfId サービスインターフェイスID
	 * @param kaihkYmd 回復年月日
	 * @param svcDslClYmd サービス解約取消年月日
	 * @param svcCancelClYmd サービスキャンセル取消年月日
	 * @param haisoKigenYmd 配送期限年月日
	 * @param haisoArivShiteiYmd 配送到着指定年月日
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	public void kaihkRsvFixRec(String kktkSvcKeiNo, String opeDate,
			String dslBfKktkSvcKeiStat, String svcIfId, String kaihkYmd, String svcDslClYmd, String svcCancelClYmd,
			String haisoKigenYmd, String haisoArivShiteiYmd, String updDtm, String updOpeAct)
	{
// OM-2014-0002138 ADD START
		kaihkRsvFixRec(kktkSvcKeiNo, opeDate, dslBfKktkSvcKeiStat, svcIfId, kaihkYmd, svcDslClYmd, svcCancelClYmd,
				haisoKigenYmd, haisoArivShiteiYmd, updDtm, updOpeAct, null, null);
		
	}
		
	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く予約
	 * （該当の「機器提供サービス契約」レコードのうち、未来日での予約確定レコード）を回復します。
	 * </p>
	 * @param kktkSvcKeiNo 回復対象の機器提供サービス契約番号
	 * @param opeDate 運用日付
	 * @param dslBfKktkSvcKeiStat 解約前機器提供サービス契約ステータス
	 * @param svcIfId サービスインターフェイスID
	 * @param kaihkYmd 回復年月日
	 * @param svcDslClYmd サービス解約取消年月日
	 * @param svcCancelClYmd サービスキャンセル取消年月日
	 * @param haisoKigenYmd 配送期限年月日
	 * @param haisoArivShiteiYmd 配送到着指定年月日
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 * @param svcStpRlsYmd サービス停止解除年月日
	 * @param svcStpRlsRsnCd サービス停止解除理由コード
	 */
	public void kaihkRsvFixRec(String kktkSvcKeiNo, String opeDate,
			String dslBfKktkSvcKeiStat, String svcIfId, String kaihkYmd, String svcDslClYmd, String svcCancelClYmd,
			String haisoKigenYmd, String haisoArivShiteiYmd, String updDtm, String updOpeAct, String svcStpRlsYmd, String svcStpRlsRsnCd)
	{
// OM-2014-0002138 ADD END
		/* ------------------------------------------------------------------------------------------------------------------------
		 * 予約中の強制解約、および住所変更予約中の解約の場合、回復時に予約情報を反映する必要があるため予約取消は行わない。
		 * ※ただし、未来日・予約確定レコードについては、予約適用年月日が到来した時点で、カレントレコードとなってしまうため、
		 *   以下の更新処理を行う。
		 * (1)予約解約(キャンセル)：解約時に予約レコードを"解約済"とする。
		 * (2)予約回復(キャンセル取消)：回復時に予約レコードを元のステータスに回復する。（現時点では、住所変更中の解約／回復に対してのみ実施する。）
		 * ------------------------------------------------------------------------------------------------------------------------ */
		// 該当の「機器提供サービス契約」レコードの予約確定レコードを取得する。
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
		inETMsg.set(KK0341ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		CAANMsg[] retMsg = null;
		try
		{
			retMsg = new KK0341LE().findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// 予約回復実行
		for (int i = 0; i < retMsg.length; i++)
		{
			// 住所変更による予約以外は、予約回復の対象外
			if (!JKKModelConst.IDO_DIV_ADCHG_ADD.equals(retMsg[i].getString(KK0341ETMsg.IDO_DIV)))
			{
				continue;
			}
			
			// 予約適用年月日＞運用日付の予約確定レコードのみ回復する。
			if (JKKModelCommon.isFutureDate(retMsg[i].getString(KK0341ETMsg.RSV_APLY_YMD), opeDate, "0"))
			{
				// OM-2014-0002138 MOD START
				//updateKK0341KaihkRsv(retMsg[i], svcIfId, dslBfKktkSvcKeiStat, kaihkYmd, svcDslClYmd, svcCancelClYmd,
				//		haisoKigenYmd, haisoArivShiteiYmd, updDtm, updOpeAct);
				updateKK0341KaihkRsv(retMsg[i], svcIfId, dslBfKktkSvcKeiStat, kaihkYmd, svcDslClYmd, svcCancelClYmd,
						haisoKigenYmd, haisoArivShiteiYmd, updDtm, updOpeAct, svcStpRlsYmd, svcStpRlsRsnCd);
				// OM-2014-0002138 MOD END
			}
		}
	}

	/**
	 * 指定された機器提供サービス契約番号に紐付く、機器提供サービス契約スキーマの予約を取り消します。
	 * @param inMsg 予約検索の結果を保持するメッセージキャリア
	 * @param opeDate 運用日付
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	private void updateKK0341ClRsv(CAANMsg inMsg, String opeDate, String updDtm, String updOpeAct)
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, inMsg.getString(KK0341ETMsg.GENE_ADD_DTM));
		inETMsg.set(KK0341ETMsg.RSV_CL_YMD, opeDate);
		inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_CL);
		inETMsg.set(KK0341ETMsg.UPD_DTM, updDtm);
		inETMsg.set(KK0341ETMsg.UPD_OPEACNT, updOpeAct);

		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く、機器提供サービス契約スキーマの予約レコードを解約します。
	 * </p>
	 * @param inMsg 予約検索の結果を保持するメッセージキャリア
	 * @param svcEndymd サービス終了年月日
	 * @param svcChrgEndYmd サービス課金終了年月日
	 * @param svcDlreCd サービス解約理由コード
	 * @param svcDlreMemo サービス解約理由メモ
	 * @param zanchiFlg 残置フラグ
	 * @param taknkikiIdoCd 宅内機器異動コード
	 * @param kaishuKikiUm 回収機器有無
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	private void updateKK0341DslRsv(CAANMsg inMsg,
			String svcEndymd, String svcChrgEndYmd, String svcDlreCd, String svcDlreMemo,
			String zanchiFlg, String taknkikiIdoCd, String kaishuKikiUm, String updDtm, String updOpeAct)
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, inMsg.getString(KK0341ETMsg.GENE_ADD_DTM));
		// 機器提供サービス契約ステータス
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, JKKModelConst.KKTK_SVC_KEI_STAT_DSL_ZM);
		// プラン終了年月日
		inETMsg.set(KK0341ETMsg.PLAN_ENDYMD, svcEndymd);
		// プラン課金終了年月日
		inETMsg.set(KK0341ETMsg.PLAN_CHRG_ENDYMD, svcChrgEndYmd);
		// サービス終了年月日
		inETMsg.set(KK0341ETMsg.SVC_ENDYMD, svcEndymd);
		// サービス課金終了年月日
		inETMsg.set(KK0341ETMsg.SVC_CHRG_ENDYMD, svcChrgEndYmd);
		// サービス解約年月日
		inETMsg.set(KK0341ETMsg.SVC_DSL_YMD, svcEndymd);
		// サービス解約理由コード
		inETMsg.set(KK0341ETMsg.SVC_DLRE_CD, svcDlreCd);
		// サービス解約理由メモ
		inETMsg.set(KK0341ETMsg.SVC_DLRE_MEMO, svcDlreMemo);
		// 残置フラグ
		inETMsg.set(KK0341ETMsg.ZANCHI_FLG, zanchiFlg);
		// 宅内機器異動コード
		inETMsg.set(KK0341ETMsg.TAKNKIKI_IDO_CD, taknkikiIdoCd);
		// 回収機器有無
		inETMsg.set(KK0341ETMsg.KAISHU_KIKI_UM, kaishuKikiUm);
		
		inETMsg.set(KK0341ETMsg.UPD_DTM, updDtm);
		inETMsg.set(KK0341ETMsg.UPD_OPEACNT, updOpeAct);
		
		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}

	/**
	 * 指定された機器提供サービス契約番号に紐付く、機器提供サービス契約スキーマの予約をキャンセルします。
	 * @param inMsg 予約検索の結果を保持するメッセージキャリア
	 * @param svcCancelYmd サービスキャンセル年月日
	 * @param svcDlreCd サービスキャンセル理由コード
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	private void updateKK0341CancelRsv(CAANMsg inMsg, String svcCancelYmd, String svcCancelRsnCd, String updDtm, String updOpeAct)
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, inMsg.getString(KK0341ETMsg.GENE_ADD_DTM));
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, JKKModelConst.KKTK_SVC_KEI_STAT_CNCL_ZM);
		inETMsg.set(KK0341ETMsg.SVC_CANCEL_YMD, svcCancelYmd);
		inETMsg.set(KK0341ETMsg.SVC_CANCEL_RSN_CD, svcCancelRsnCd);
		inETMsg.set(KK0341ETMsg.UPD_DTM, updDtm);
		inETMsg.set(KK0341ETMsg.UPD_OPEACNT, updOpeAct);

		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く、機器提供サービス契約スキーマの予約レコードを回復します。
	 * </p>
	 * @param inMsg 予約検索の結果を保持するメッセージキャリア
	 * @param svcIfId サービスインターフェイスID
	 * @param dslBfKktkSvcKeiStat 解約前機器提供サービス契約ステータス
	 * @param kaihkYmd 回復年月日
	 * @param svcDslClYmd サービス解約取消年月日
	 * @param svcCancelClYmd サービスキャンセル取消年月日
	 * @param haisoKigenYmd 配送期限年月日
	 * @param haisoArivShiteiYmd 配送到着指定年月日
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
// OM-2014-0002138 MOD START
//	private void updateKK0341KaihkRsv(CAANMsg inMsg, String svcIfId, String dslBfKktkSvcKeiStat, String kaihkYmd,
//			String svcDslClYmd, String svcCancelClYmd, String haisoKigenYmd, String haisoArivShiteiYmd, String updDtm, String updOpeAct)
	private void updateKK0341KaihkRsv(CAANMsg inMsg, String svcIfId, String dslBfKktkSvcKeiStat, String kaihkYmd,
			String svcDslClYmd, String svcCancelClYmd, String haisoKigenYmd, String haisoArivShiteiYmd, String updDtm, String updOpeAct,
			String svcStpRlsYmd, String svcStpRlsRsnCd)
// OM-2014-0002138 MOD END
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, inMsg.getString(KK0341ETMsg.GENE_ADD_DTM));

		if (SIF_IF_EKK0341C410.equals(svcIfId) || SIF_IF_EKK0341C420.equals(svcIfId))
		{
			// 機器提供サービス契約ステータス
			inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, dslBfKktkSvcKeiStat);
			// サービスキャンセル年月日
			inETMsg.setNull(KK0341ETMsg.SVC_CANCEL_YMD);
			// サービスキャンセル理由コード
			inETMsg.setNull(KK0341ETMsg.SVC_CANCEL_RSN_CD);
			// サービスキャンセル取消年月日
			inETMsg.set(KK0341ETMsg.SVC_CANCEL_CL_YMD, svcCancelClYmd);
		}
		else
		{
			// 終了年月日初期値
			String initEndYmd = null;
			if (JKKModelConst.KKTK_SVC_KEI_STAT_SVCTK_CHU.equals(dslBfKktkSvcKeiStat)
					|| JKKModelConst.KKTK_SVC_KEI_STAT_PAUSE_STP_CHU.equals(dslBfKktkSvcKeiStat))
			{
				// "サービス提供中"または"休止・中断中"に回復させる場合、終了年月日に最大日付を設定
				initEndYmd = JKKModelConst.DATE_MAX;
			}

			// 機器提供サービス契約ステータス
			inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, dslBfKktkSvcKeiStat);
			// プラン終了年月日
			inETMsg.set(KK0341ETMsg.PLAN_ENDYMD, initEndYmd);
			// プラン課金終了年月日
			inETMsg.set(KK0341ETMsg.PLAN_CHRG_ENDYMD, initEndYmd);
			// プラン終了種別コード
			inETMsg.setNull(KK0341ETMsg.PLAN_END_SBT_CD);
			// サービス終了年月日
			inETMsg.set(KK0341ETMsg.SVC_ENDYMD, initEndYmd);
			// サービス課金終了年月日
			inETMsg.set(KK0341ETMsg.SVC_CHRG_ENDYMD, initEndYmd);
			// サービス解約年月日
			inETMsg.setNull(KK0341ETMsg.SVC_DSL_YMD);
			// サービス解約理由コード
			inETMsg.setNull(KK0341ETMsg.SVC_DLRE_CD);
			// サービス解約理由メモ
			inETMsg.setNull(KK0341ETMsg.SVC_DLRE_MEMO);
			// サービス解約手続完了フラグ
			inETMsg.setNull(KK0341ETMsg.SVC_DSL_TTDKI_FIN_FLG);
			// 回復年月日
			if (kaihkYmd != null && !"".equals(kaihkYmd))
			{
				inETMsg.set(KK0341ETMsg.KAIHK_YMD, kaihkYmd);
			}
			// サービス解約取消年月日
			if (svcDslClYmd != null && !"".equals(svcDslClYmd))
			{
				inETMsg.set(KK0341ETMsg.SVC_DSL_CL_YMD, svcDslClYmd);
			}

			if (SIF_IF_EKK0341C380.equals(svcIfId) || SIF_IF_EKK0341C400.equals(svcIfId))
			{
				// 残置フラグ
				inETMsg.setNull(KK0341ETMsg.ZANCHI_FLG);

				// OM-2014-0002138 ADD START
				if (SIF_IF_EKK0341C380.equals(svcIfId))
				{
					// サービス停止解除年月日
					inETMsg.set(KK0341ETMsg.SVC_STP_RLS_YMD, svcStpRlsYmd);
					// サービス停止解除理由コード
					inETMsg.set(KK0341ETMsg.SVC_STP_RLS_RSN_CD, svcStpRlsRsnCd);
				}
				// OM-2014-0002138 ADD END
			}
			else if (SIF_IF_EKK0341C390.equals(svcIfId))
			{
				// 配送期限年月日
				inETMsg.set(KK0341ETMsg.HAISO_KIGEN_YMD, haisoKigenYmd);
				// 配送到着指定年月日
				inETMsg.set(KK0341ETMsg.HAISO_ARIV_SHITEI_YMD, haisoArivShiteiYmd);
				// 残置フラグ
				inETMsg.setNull(KK0341ETMsg.ZANCHI_FLG);
			}
		}

		inETMsg.set(KK0341ETMsg.UPD_DTM, updDtm);
		inETMsg.set(KK0341ETMsg.UPD_OPEACNT, updOpeAct);

		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}
	
	/**
	 * <p>
	 * サービス契約番号に紐づく機器提供サービス契約を遡及解約します。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param svcChrgEndYmd サービス課金終了年月日
	 */
	public void sokyuKK0341(CAANMsg inCBSMsg, String svcChrgEndYmd)
	{
		String opedate = JKKModelCommon.getOpeDate(inCBSMsg);
		
		JKKejbKK0341DBABase dbaBase = new JKKejbKK0341DBABase();
		
		// サービス契約番号に紐づく機器提供サービス契約を取得
		CAANMsg[] kk0341MsgList = dbaBase.getKK0341bySvcKei(inCBSMsg.getString(EKK0081C260CBSMsg.SVC_KEI_NO), null, opedate, "4");
		
		for (CAANMsg kk0341Msg : kk0341MsgList)
		{
			sokyuMainKK0341(inCBSMsg, svcChrgEndYmd, kk0341Msg, opedate);
		}
		
		CAANMsg[] kk0251MsgList = new JKKejbKK0251DBABase().getKK0251bySvcKei(inCBSMsg.getString(EKK0081C260CBSMsg.SVC_KEI_NO), null, opedate, "0");
		for (CAANMsg kk0251Msg : kk0251MsgList)
		{
			// 該当の「サービス契約回線内訳」に紐付く「機器提供サービス契約」を取得する。
			String svcKeiKaisenUcwkNo = kk0251Msg.getString(KK0251ETMsg.SVC_KEI_KAISEN_UCWK_NO);
			CAANMsg[] kk0341MsgList2 = getKK0341bySvcKeiKaisenUcwk(svcKeiKaisenUcwkNo, null, opedate);
			for (CAANMsg kk0341Msg : kk0341MsgList2)
			{
				sokyuMainKK0341(inCBSMsg, svcChrgEndYmd, kk0341Msg, opedate);
			}
		}
	}
	
	/**
	 * <p>
	 * 解約済の機器提供サービス契約のサービス課金終了年月日を更新します。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param svcChrgEndYmd サービス課金終了年月日
	 * @param kk0341Data 機器提供サービス契約
	 * @param opedate 運用日付
	 */
	private void sokyuMainKK0341(CAANMsg inCBSMsg, String svcChrgEndYmd, CAANMsg kk0341Data, String opedate)
	{
		// 機器提供サービス契約ステータスが解約済でサービス契約よりも課金終了年月日が遅い場合
		if (JKKModelConst.SVC_KEI_STAT_DSL_ZM.equals(kk0341Data.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT))
				&& !kk0341Data.isNull(KK0341ETMsg.SVC_CHRG_ENDYMD)
				&& kk0341Data.getString(KK0341ETMsg.SVC_CHRG_ENDYMD).compareTo(svcChrgEndYmd) > 0
				&& (inCBSMsg.isNull(EKK0081C260CBSMsg.MSKM_DTL_NO) 
						||!inCBSMsg.getString(EKK0081C260CBSMsg.MSKM_DTL_NO).equals(kk0341Data.getString(KK0341ETMsg.MSKM_DTL_NO))))
		{
			String svcEndYmd = inCBSMsg.getString(EKK0081C260CBSMsg.SVC_ENDYMD);
			
			// 遡及解約に伴う更新処理
			CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
			inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kk0341Data.getString(KK0341ETMsg.KKTK_SVC_KEI_NO)); // 機器提供サービス契約番号
			inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, kk0341Data.getString(KK0341ETMsg.GENE_ADD_DTM)); // 世代登録年月日時分秒
			inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, JKKModelConst.SVC_KEI_STAT_DSL_ZM); // 機器提供サービス契約ステータス
			inETMsg.set(KK0341ETMsg.PLAN_ENDYMD, svcEndYmd); // プラン終了年月日
			inETMsg.set(KK0341ETMsg.PLAN_CHRG_ENDYMD, svcChrgEndYmd); // プラン課金終了年月日
			
			// 予約適用年月日
			if (opedate.compareTo(svcEndYmd) > 0)
			{
				// サービス終了年月日が運用日付より過去の場合運用日付を設定
				inETMsg.set(KK0341ETMsg.RSV_APLY_YMD, opedate);
			}
			else
			{
				// 上記以外の場合サービス終了年月日を設定
				inETMsg.set(KK0341ETMsg.RSV_APLY_YMD, svcEndYmd);
			}
			
			inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX); // 予約適用コード
			inETMsg.set(KK0341ETMsg.SVC_ENDYMD, svcEndYmd); // サービス終了年月日
			inETMsg.set(KK0341ETMsg.SVC_CHRG_ENDYMD, svcChrgEndYmd); // サービス課金終了年月日
			inETMsg.set(KK0341ETMsg.SVC_DLRE_CD, inCBSMsg.getString(EKK0081C260CBSMsg.SVC_DLRE_CD)); // サービス解約理由コード
			inETMsg.set(KK0341ETMsg.SVC_DLRE_MEMO, inCBSMsg.getString(EKK0081C260CBSMsg.SVC_DLRE_MEMO)); // サービス解約理由メモ
			inETMsg.set(KK0341ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
			inETMsg.set(KK0341ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
			
			JKKejbDBAUtil dbaUtil = new JKKejbDBAUtil(inCBSMsg);
			dbaUtil.update(inETMsg);
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号の予約手続中のレコードに対し、回復年月日を設定する。
	 * </p>
	 * @param kktkSvcKeiNo 回復対象の機器提供サービス契約番号
	 * @param kaihkYmd 回復年月日
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	public void kaihkRsvTtdkChu(String kktkSvcKeiNo, String kaihkYmd, String updDtm, String updOpeAct)
	{
		// 該当の「機器提供サービス契約」レコードの予約確定レコードを取得する。
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_TTDK_CHU);
		inETMsg.set(KK0341ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		CAANMsg[] retMsg = null;
		try
		{
			retMsg = new KK0341LE().findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// 予約手続中のレコードに対し、回復年月日を設定する。
		for (int i = 0; i < retMsg.length; i++)
		{
			updateKK0341kaihkRsvTtdkChu(retMsg[i], kaihkYmd, updDtm, updOpeAct);
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号の予約手続中のレコードに対し、回復年月日を設定する。
	 * </p>
	 * @param inMsg 予約検索の結果を保持するメッセージキャリア
	 * @param kaihkYmd 回復年月日
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	private void updateKK0341kaihkRsvTtdkChu(CAANMsg inMsg, String kaihkYmd, String updDtm, String updOpeAct)
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, inMsg.getString(KK0341ETMsg.GENE_ADD_DTM));

		// 回復年月日
		inETMsg.set(KK0341ETMsg.KAIHK_YMD, kaihkYmd);
		
		inETMsg.set(KK0341ETMsg.UPD_DTM, updDtm);
		inETMsg.set(KK0341ETMsg.UPD_OPEACNT, updOpeAct);

		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く予約（該当の「機器提供サービス契約」レコードのうち、未来日での予約確定レコード）を停止/解除します。
	 * </p>
	 * @param kktkSvcKeiNo 停止/解除対象の機器提供サービス契約番号
	 * @param rsvAplyCd 停止/解除対象の機器提供サービス契約ステータス
	 * @param opeDate 運用日付
	 * @param svcStpymd サービス停止/解除年月日
	 * @param svcStpCd サービス停止/解除理由コード
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	public void stpKktkSvcKeiRec(String kktkSvcKeiNo, String rsvAplyCd, String opeDate, String svcStpymd, 
			String svcStpCd, String updDtm, String updOpeAct)
	{
		// 該当の「サービス契約」レコードの予約確定レコードを取得する。
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		inETMsg.set(KK0341ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
		inETMsg.set(KK0341ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		CAANMsg[] retMsg = null;
		try
		{
			retMsg = new KK0341LE().findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// 予約停止/解除実行
		for (int i = 0; i < retMsg.length; i++)
		{
			// 予約適用年月日＞運用日付の予約確定レコードのみ停止/解除する。
			if (JKKModelCommon.isFutureDate(retMsg[i].getString(KK0341ETMsg.RSV_APLY_YMD), opeDate, "0"))
			{
				updateKK0341StpKktkSvcKei(retMsg[i], rsvAplyCd, svcStpymd, svcStpCd, updDtm, updOpeAct);
			}
		}
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約番号に紐付く、機器提供サービス契約スキーマの予約レコードを停止/解除します。
	 * </p>
	 * @param inMsg 予約検索の結果を保持するメッセージキャリア
	 * @param rsvAplyCd 停止/解除対象の機器提供サービス契約ステータス
	 * @param svcStpymd サービス停止/解除年月日
	 * @param svcStpCd サービス停止/解除理由コード
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeAct 更新オペレータアカウント
	 */
	private void updateKK0341StpKktkSvcKei(CAANMsg inMsg, String rsvAplyCd, String svcStpymd, String svcStpCd, 
			String updDtm, String updOpeAct)
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());

		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		inETMsg.set(KK0341ETMsg.GENE_ADD_DTM, inMsg.getString(KK0341ETMsg.GENE_ADD_DTM));
		// 機器提供サービス契約ステータス
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_STAT, rsvAplyCd);

		// 停止中は停止年月日、停止理由コードを更新し、停止解除年月日、停止理由解除コードを空白にする。
		if (JKKModelConst.KKTK_SVC_KEI_STAT_STP_CHU.equals(rsvAplyCd))
		{
			// サービス停止年月日
			inETMsg.set(KK0341ETMsg.SVC_STP_YMD, svcStpymd);
			// サービス停止理由コード
			inETMsg.set(KK0341ETMsg.SVC_STP_RSN_CD, svcStpCd);
			// サービス停止解除年月日
			inETMsg.setNull(KK0341ETMsg.SVC_STP_RLS_YMD);
			// サービス停止理由解除コード
			inETMsg.setNull(KK0341ETMsg.SVC_STP_RLS_RSN_CD);
		}
		// 停止中以外は停止解除年月日、停止理由解除コードを更新する。
		else
		{
			// サービス停止解除年月日
			inETMsg.set(KK0341ETMsg.SVC_STP_RLS_YMD, svcStpymd);
			// サービス停止理由解除コード
			inETMsg.set(KK0341ETMsg.SVC_STP_RLS_RSN_CD, svcStpCd);
		}

		inETMsg.set(KK0341ETMsg.UPD_DTM, updDtm);
		inETMsg.set(KK0341ETMsg.UPD_OPEACNT, updOpeAct);
		
		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}
	//OM-2015-0000088 ADD START
	/**
	 * <p>
	 * 入力の「機器提供サービス」の機器が、入力の「料金コース」の契約で使用する機器かどうか判定します。
	 * </p>
	 * @param pcrsCd 料金コースコード
	 * @param kktkSvcCd 機器提供サービスコード
	 * @param opeDate 運用日付
	 * @return true[false]:該当の機器が入力の「料金コース」の契約で使用する機器である[ない]場合
	 */
	private boolean isPcrsTgKktkSvc(String pcrsCd, String kktkSvcCd, String opeDate)
	{
		// 入力の「料金コース」、「機器提供サービス」に紐づく「料金コース_機器提供サービス」を取得する。
		JKKejbKK0801DBABase kk0801Dba = new JKKejbKK0801DBABase();
		CAANMsg[] kk0801MsgList = kk0801Dba.getKK0801byPcrs_KktkSvc(pcrsCd, kktkSvcCd, opeDate);

		// 取得件数が０件の場合、該当の機器は入力の「料金コース」の契約で使用する機器でない
		if (kk0801MsgList.length == 0)
		{
			return false;
		}

		return true;
	}
	//OM-2015-0000088 ADD END
}
