/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK0081KRCK
*   ソースファイル名：JKKejbKK0081KRCK.java
*   作成者          ：富士通
*   日付            ：2011年04月20日
*＜機能概要＞
*   サービス契約の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/04/20  富士通      新規作成
*	v5.00.00	2013/02/19	FJ）寺園	ANK-1456-00-00
*	v5.00.01	2013/03/19	FJ）沖田	ANK-1429-00-00
*	v5.00.02	2013/04/01	FJ）沖田	OT-2013-0000463
*	v5.00.03	2013/04/05	FJ）竹内	OT-2013-0000463
*   v5.00.04	2013/04/13	FJ）清藤	IT1-2013-0000812
*   v5.00.05    2013/04/25  FJ）寺本    IKK-2013-0001001
*   v5.00.06    2013/05/01  FJ）寺本    OT-2013-0000675
*   v5.00.07    2013/05/14  FJ）寺本    -
*   v5.00.08    2013/05/20  FJ）寺本    IT1-2013-0001205
*   v5.00.09    2013/08/07  FJ）沖田    LT-2013-0000694
*   v5.00.10    2013/08/26  FJ）沖田    OM-2013-0000878
*   v5.00.11    2013/10/09  FJ）寺園    OM-2013-0003064
*   v7.00.00    2013/12/10  FJ）寺園    ANK-1578-00-00
*	v7.00.01	2014/01/16	FJ）寺園	IT1-2014-0000024
*	v7.00.02	2014/01/30	FJ）松枝	OM-2014-0000353
*	v8.00.00	2014/03/28	FJ）宇野	OM-2014-0000853
*	v8.00.01	2014/04/16	FJ）宇野	OM-2014-0001534
*   v10.00.00	2014/07/25  FJ) 齋藤   【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修
*   v11.00.00	2014/12/17	FJ) 谷口   【IT2-2014-0000340】課金開始が1日から5日の時にサービス開始日訂正ができない
*   v26.00.00	2016/09/10	FJ) 星野   【OM-2016-0001573】コース変更時ファミパエラー
*   v33.00.00	2017/07/26	FJ) 中原   【ANK-3118-00-00】開通前かつ出荷完了後もコース変更可能とする。
*   v31.00.00   2017/12/05  FJ) 孫      ANK-3136-00-00
*   v45.00.00   2019/08/07  FJ) 張本   【ANK-3687-00-00】【10Gフォロー】開通前コース変更対応
*   v52.00.00   2021/05/11  FJ) 上村	OM-2021-0000602
*   v55.00.00	2021/10/21  FJ) 西窪    【ANK-4146-00-00】【eo定期】多機能ルーター枯渇対応 STEP2
*   v73.00.00	2025/02/25  FJ) 舘山    【#83584】HGW瑕疵内障害
**********************************************************************/

package eo.ejb.common.entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.base.CAANLog;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.CH0501ETMsg;
import eo.ejb.cbm.entity.KK0021ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0081LE;
import eo.ejb.cbm.entity.KK0121ETMsg;
import eo.ejb.cbm.entity.KK0161ETMsg;
import eo.ejb.cbm.entity.KK0161LE;
import eo.ejb.cbm.entity.KK0191ETMsg;
import eo.ejb.cbm.entity.KK0241ETMsg;
import eo.ejb.cbm.entity.KK0251ETMsg;
import eo.ejb.cbm.entity.KK0321ETMsg;
import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbm.entity.KK0451ETMsg;
import eo.ejb.cbm.entity.KK0481ETMsg;
import eo.ejb.cbm.entity.KK0781ETMsg;
import eo.ejb.cbm.entity.KK0791ETMsg;
import eo.ejb.cbm.entity.KK0881ETMsg;
import eo.ejb.cbm.entity.KK0881LE;
import eo.ejb.cbm.entity.KK0891ETMsg;
import eo.ejb.cbm.entity.KK0891LE;
import eo.ejb.cbm.entity.KK0911ETMsg;
import eo.ejb.cbm.entity.KK1631ETMsg;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KU0011ETMsg;
import eo.ejb.cbm.entity.KU0081ETMsg;
import eo.ejb.cbm.entity.KU0081LE;
import eo.ejb.cbm.entity.TU0011ETMsg;
import eo.ejb.cbm.entity.ZM0331ETMsg;
import eo.ejb.cbm.entity.ZM0331LE;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.JKKejbBusinessException;
import eo.ejb.common.JKKejbCallTypeChecker;
import eo.ejb.common.db.JKKejbKK0021DBABase;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.db.JKKejbKK0121DBABase;
import eo.ejb.common.db.JKKejbKK0161DBABase;
import eo.ejb.common.db.JKKejbKK0191DBABase;
import eo.ejb.common.db.JKKejbKK0251DBABase;
import eo.ejb.common.db.JKKejbKK0341DBABase;
import eo.ejb.common.db.JKKejbKK0781DBABase;
import eo.ejb.common.db.JKKejbKK0891DBABase;
import eo.ejb.common.db.JKKejbKK0911DBABase;
import eo.ejb.common.db.JKKejbKK1631DBABase;
import eo.ejb.common.db.JKKejbKK2811DBABase;
import eo.ejb.common.db.JKKejbKU0011DBABase;
import eo.ejb.common.db.JKKejbShosaChkBase;

/**
 * <p>
 * サービス契約の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0081KRCK extends JKKejbKK0081DBABase
{

	/** 休止中断コード（休止中(SOD未発行)） */
	private static final String PAUSE_STP_CD_NOSOD = "00";

	/** 休止中断コード（休止中(SOD発行済)） */
	private static final String PAUSE_STP_CD_SOD = "01";

	/** 固定グローバルIPアドレス検索用オプションサービスコード */
	private static final String OPT_SVC_CD_GLOVAL = "B004";

	/** マルチセッション検索用オプションサービスコード */
	private static final String OPT_SVC_CD_MULTI = "B015";

	/** 機器提供サービスコード（BBR） */
	private static final String KKTK_SVC_CD_BBR = "C014";

	/** 機器提供サービスコード（ｅｏモバイル機器　ＵＱ用） */
	private static final String KKTK_SVC_CD_MBL_UQ = "C017";

	/** 機器提供種別コード（持込） */
	private static final String KKTK_SBT_CD_MOTIKOMI = "03";

	/** 申込形態コード（WEB） */
	private static final String MSKM_FORM_WEB = "01";

	/** 料金コース変更可能機能識別コード（Webのみ） */
	private static final String PCRS_KINO_SKBT_WEB = "1";

	/** 料金コース変更可能機能識別コード（業務端末のみ） */
	private static final String PCRS_KINO_SKBT_GYOMU = "2";

	/** サービスコード(電話サービス) */
	private static final String SVC_CD_TEL = "02";

	/** GE-PON利用可否(否) */
	private static final String GEPON_USE_KH_NO = "0";

	/** 解約・休止トーキ登録コード(休止によるトーキ) */
	private static final String ITNTOKI_ADD_CD_PSE = "3";

	/** マンション通信設備コード(光配線) */
	private static final String MANS_TUS_EQP_CD_HIK = "03";
	
	//ANK-1918-00-00 ADD START
	/** IP払出コード(プライベート) */
	private static final String IP_HRADSI_CD_PRIV = "01";
	//ANK-1918-00-00 ADD END
	/** IP払出コード(グローバル) */
	private static final String IP_HRADSI_CD_GROV = "02";

	/** 異動予約詳細コード（コース変更） */
	private static final String IDO_RSV_DTL_OP_CRC = "003";

	/** 異動予約詳細コード（サービス休止） */
	private static final String IDO_RSV_DTL_SVC_PSE = "005";

	/** 異動予約詳細コード（回線利用場所変更） */
	private static final String IDO_RSV_DTL_KAISEN_CNG = "009";

	/** 異動予約詳細コード（機器開始） */
	private static final String IDO_RSV_DTL_KK_STA = "010";

	/** 異動予約詳細コード（機器コース変更） */
	private static final String IDO_RSV_DTL_KK_PCRS = "011";

	/** 異動予約詳細コード（機器変更手続） */
	private static final String IDO_RSV_DTL_KK_TET = "012";

	/** 異動予約詳細コード（機器解約） */
	private static final String IDO_RSV_DTL_KK_DSL = "013";

	/** 異動予約詳細コード（オプション開始） */
	private static final String IDO_RSV_DTL_OP_STA = "014";

	/** 異動予約詳細コード（オプション引継） */
	private static final String IDO_RSV_DTL_OP_SUCS = "015";

	/** 異動区分（休止受付） */
	private static final String IDO_DIV_PSE_RES = "00024";

	/** 機器提供サービス契約_異動予約取得項目（異動予約詳細コード） **/
	private static final String SEL_KKTIDO_IDO_DTL = "IDO_RSV_DTL_CD";

	/** オプションサービス契約_異動予約取得項目（異動予約詳細コード） **/
	private static final String SEL_OPIDO_IDO_DTL = "IDO_RSV_DTL_CD";

	/** 日：月初日 */
	private static final String DAY_FIRST = "01";

	/** コース変更NG状態コード（NG） */
	private static final String COURSECHG_NG_STAT_CD_NG = "1";

	/** 加入契約支払方式コード（全戸一括） */
	private static final String KNY_KEI_PAY_HSK_CD_ALL = "003";

	/** 加入契約支払方式コード（居住者一括） */
	private static final String KNY_KEI_PAY_HSK_CD_INHAB = "004";

	/** 料金コースコード（ＷｉＭＡＸ　４０Ｍ　通常） */
	private static final String PCRS_CD_WIMAX_40M_TUJYO = "A28";

	/** 料金コースコード（ＷｉＭＡＸ　４０Ｍ　ＰＣ搭載） */
	private static final String PCRS_CD_WIMAX_40M_PC = "A29";

	/** 料金コースコード（ＷＩ−ＦＩスポット） */
	private static final String PCRS_CD_WIFI_SPOT = "A30";

// 2019/08/07 ANK-3687-00-00 DEL START
//	// 2017/07/26 ANK-3118-00-00 ADD START
//	/** 料金コースコード（１０Gコース） */
//	private static final String PCRS_CD_10G = "A83";
//	// 2017/07/26 ANK-3118-00-00 ADD END
// 2019/08/07 ANK-3687-00-00 DEL END

	/** 料金プランコード：１番号コース　（マンションタイプ・グローバル） */
	private static final String PPLAN_CD_1NO_MANS_GB = "PA3102";

	/** 料金プランコード：２番号コース　（マンションタイプ・グローバル） */
	private static final String PPLAN_CD_2NO_MANS_GB = "PA3202";
	
	/** 料金プランコード：１番号コース　（マンションタイプ・光配線） */
	private static final String PPLAN_CD_1NO_MANS_LH = "PA3104";

	/** 料金プランコード：２番号コース　（マンションタイプ・光配線） */
	private static final String PPLAN_CD_2NO_MANS_LH = "PA3204";
	
	/** 番ポ工事ステータス：番ポ工事取消(090) */
	private static final String BMP_KOJI_STAT_BMPKJ_CL = "090";
	
	/** 番ポ申込書タイプコード：廃止(6) */
	private static final String TU_T_BMP_KOJI_HAISHI = "6";
	
	/** 有無（有） */
	private static final String UM_ARI = "1";
	
	/** KEY_サービス契約番号 */
	private static final String KEY_SVC_KEI_NO = "SVC_KEI_NO";
	//ANK-1918-00-00 ADD START
	/** マンション工事案件状態コード */
	private static final ArrayList<String> MANS_KOJIAK_STAT = new ArrayList<String>();
	static
	{
		MANS_KOJIAK_STAT.add(JKKModelConst.KOJIAK_STAT_REQ_ZM);
		MANS_KOJIAK_STAT.add(JKKModelConst.KOJIAK_STAT_KOCOMP_KETEI_ZM);
	}
	//ANK-1918-00-00 ADD END

	/**
	 * <p>
	 * 新しいJSYejbKK0081KRCKを作成します。
	 * </p>
	 */
	public JKKejbKK0081KRCK()
	{
		super();
	}

	/**
	 * <p>
	 * サービス契約の存在チェックを行います。（世代登録年月日時分秒を除く有効なレコード）
	 * </p>
	 * @param svcKeiNo サービス契約番号
	 * @return レコードが存在する場合はtrue。存在しない場合はfalse。
	 */
	public boolean isExistsNonGene(String svcKeiNo)
	{
		if (svcKeiNo == null || "".equals(svcKeiNo)) 
		{
			return true;
		}

		// ETメッセージ
		CAANMsg msg = new CAANMsg(KK0081ETMsg.class.getName());
		msg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		msg.set(KK0081ETMsg.MK_FLG, "0");

		// ロジカルエンティティ生成
		KK0081LE le = new KK0081LE();

		try
		{
			CAANMsg[] rsltList = le.findByCondition(msg);

			//存在しない場合
			if (rsltList.length == 0)
			{
				return false;
			}

			//存在する場合
			return true;
		}
		catch (CAANException ex)
		{
			throw new CAANRuntimeException(ex);
		}
	}

	/**
	 * <p>
	 * サービス契約にプラン変更予約があるかをチェックを行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 異動予約にプラン変更予約が存在する場合false、それ以外の場合はtrue
	 */
	public boolean isPcrsChgMskm(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isPcrsChgMskm");

		// サービス契約番号に紐付く異動予約の予約を取得
		List<CAANMsg> retKK0081 = new JKKejbIdoRsvAccess().getIdoRsvSvcKeiNo(inMsg.getString(KK0081ETMsg.SVC_KEI_NO), JKKModelCommon.getOpeDate(inMsg));

		for (int i = 0; i < retKK0081.size(); i++)
		{
			CAANMsg retMsg = retKK0081.get(i);
			
			// 「異動予約詳細コード」が"003"（コース変更）である場合、falseを返却する
			if (IDO_RSV_DTL_OP_CRC.equals(retMsg.getString(KK1681ETMsg.IDO_RSV_DTL_CD))) 
			{
				return false;
			}
		}

		// 対象の予約が存在しなかった場合はtrueを返却する
		return true;
	}
	
	/**
	 * <p>
	 * 住所変更予約があるかのチェックを行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア 
	 * @param inContext ディスパッチコンテキスト
	 * 
	 * @return 住所変更申込中の予約が存在しない場合：true
	 *          上記以外：false
	 */
	public boolean isAddChgMskm(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isAddChgMskm");

		// サービス契約番号に紐付く異動予約の予約を取得
		List<CAANMsg> retKK0081 = new JKKejbIdoRsvAccess().getIdoRsvSvcKeiNo(inMsg.getString(KK0081ETMsg.SVC_KEI_NO), JKKModelCommon.getOpeDate(inMsg));

		for (int i = 0; i < retKK0081.size(); i++)
		{
			CAANMsg retMsg = retKK0081.get(i);

			// 「異動予約詳細コード」が"009"（回線利用場所変更）である場合、falseを返却する
			if (IDO_RSV_DTL_KAISEN_CNG.equals(retMsg.getString(KK1681ETMsg.IDO_RSV_DTL_CD))) 
			{
				return false;
			}
		}

		// 対象の予約が存在しなかった場合はtrueを返却する
		return true;
	}

	/**
	 * <p>
	 * サービス契約内訳の起点変電所コードが未設定かチェックを行う。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * 			
	 * @return 起点変電所コードが設定されている場合  ：true
	 * 			起点変電所コードが設定されていない場合：false
	 */
	public boolean isKitenHdshoCd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isKitenHdshoCd");
		
		// 内部スキーマメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// パラメータ設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));

		// サービス契約回線内訳のカレントレコードを取得する
		ArrayList<Map<String, String>> mapList = getCurrentKK0251(inETMsg, inContext);
		
		for (int i = 0; i < mapList.size(); i++)
		{
			if (mapList.get(i).get(KK0251ETMsg.KITEN_HDSHO_CD) == null)
			{
				// 変電所コードが設定されていた場合falseを返却
				return false;
			}
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * サービス契約番号に紐付く、ＢＢＲの機器提供サービス契約の予約があるかチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く機器提供サービス契約の予約レコードが
	 *          存在する場合false、存在しない場合true
	 */
	public boolean isKktkMskm(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isKktkMskm");

		// サービス契約番号に紐付くＢＢＲの機器提供サービス契約を取得
		ArrayList<HashMap<String, String>> retKK0081 = new JKKejbKRCKCommon().getRsvKktkIdo(inMsg, inContext,
				inMsg.getString(KK0081ETMsg.SVC_KEI_NO), KKTK_SVC_CD_BBR);

		for (int i = 0; i < retKK0081.size(); i++)
		{
			HashMap<String, String> retMsg = retKK0081.get(i);

			// 「異動予約詳細コード」が"010"（機器開始）、"011"（機器コース変更）、
			// "012"（機器変更手続）、"013"（機器解約）、である場合、falseを返却する
			if (IDO_RSV_DTL_KK_STA.equals(retMsg.get(SEL_KKTIDO_IDO_DTL))
					|| IDO_RSV_DTL_KK_PCRS.equals(retMsg.get(SEL_KKTIDO_IDO_DTL))) 
			{
				return false;
			}
			if (IDO_RSV_DTL_KK_TET.equals(retMsg.get(SEL_KKTIDO_IDO_DTL))
					|| IDO_RSV_DTL_KK_DSL.equals(retMsg.get(SEL_KKTIDO_IDO_DTL))) 
			{
				return false;
			}
		}

		// 対象の予約が存在しなかった場合はtrueを返却する
		return true;
	}
	
	/**
	 * <p>
	 * サービス契約回線内訳のPON識別コードが未設定かチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付くサービス契約回線内訳のPON識別コードが設定されて
	 *          いない場合false、それ以外の場合はtrue。
	 */
	public boolean isPonSbtCd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isPonSbtCd");

		// 内部スキーマメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// パラメータ設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));

		// PON種別コードを取得する
		ArrayList<Map<String, String>> mapList = getCurrentKK0251(inETMsg, inContext);
		
		for (int i = 0; i < mapList.size(); i++)
		{
			if (mapList.get(i).get(KK0251ETMsg.PON_SBT_CD) == null)
			{
				// PON種別コードが設定されていた場合falseを返却
				return false;
			}
		}
		
		return true;
	}

	/**
	 * <p>
	 * プラン変更前後で上位速度のルーターのレコードが取得できるかチェックを行う。
	 * </p>
	 * @param  inMsg         処理対象のメッセージキャリア
	 * @param  inContext     ディスパッチコンテキスト
	 * @param  svcKeiNo      サービス契約番号
	 * @param  pcrsSpeedCdBf 料金コース速度コード(変更前)
	 * @param  pcrsSpeedCdAf 料金コース速度コード(変更後)
	 * 
	 * @return 自動登録可能ルータが存在する場合：true
	 *          自動登録可能ルータが存在しない場合：false
	 */
	public boolean isJidoAdPosiblRoterCtrctFail(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isJidoAdPosiblRoterCtrctFail");
		
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// SQL文
		StringBuffer sbSql = new StringBuffer();

		try
		{
			// サービス契約番号に紐付く特定の機器提供サービス契約が存在しない場合はtrueを返却
			if (!isKktkByCondition(inMsg, inContext))
			{
				return true;
			}

			// 関連制約共通処理部品インスタンス生成
			JKKejbKRCKCommon jkekc = new JKKejbKRCKCommon();
			
			// 料金コースカレント検索(変更後)を行う
			CAANMsg afPcrsMsg = jkekc.getCurentKK0791(inMsg, inContext, inMsg.getString(KK0081ETMsg.PCRS_CD));
			
			// 存在しない場合falseを返却
			if(afPcrsMsg == null) 
			{
				return false;
			}
			
			// サービス契約メッセージ生成
			CAANMsg svcMsg = new CAANMsg(KK0081ETMsg.class.getName());

			// サービス契約設定
			svcMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			svcMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

			// サービス契約カレント検索を行う
			CAANMsg curSvcMsg = findByCurrent(svcMsg);
			
			if(curSvcMsg == null) 
			{
				return false;
			}

			// サービス契約のカレントレコードから取得した料金コース検索メッセージインスタンスを生成
			CAANMsg curSvcPcrsMsg = new CAANMsg(KK0791ETMsg.class.getName());
			
			// サービス契約のカレントレコードから取得した料金コース検索メッセージを設定
			curSvcPcrsMsg.set(KK0081ETMsg.PCRS_CD, curSvcMsg.getString(KK0081ETMsg.PCRS_CD));
			curSvcPcrsMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));
			
			// 料金コースカレント検索(変更前)を行う
			CAANMsg bfPcrsMsg = jkekc.getCurentKK0791(inMsg, inContext, curSvcPcrsMsg.getString(KK0081ETMsg.PCRS_CD));

			if(bfPcrsMsg == null) 
			{
				return false;
			}
			
			// 料金コース速度コードが設定されているかチェックする
			if (afPcrsMsg.isNull(KK0791ETMsg.PCRS_SPEED_CD) || bfPcrsMsg.isNull(KK0791ETMsg.PCRS_SPEED_CD))
			{
				// 設定されていない場合レコードを取得できないため、falseを返却
				return false;
			}
			
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());
			
			sbSql.append(" SELECT ");
			sbSql.append("     KK0341_01.TAKNKIKI_MODEL_CD ");
			sbSql.append(" FROM ");
			sbSql.append("     (SELECT  ");
			sbSql.append("         KK0341.PCRS_CD, ");
			sbSql.append("         KK0341.PPLAN_CD, ");
			sbSql.append("         KK0341.TAKNKIKI_MODEL_CD ");
			sbSql.append("     FROM ");
			sbSql.append("         KK_T_KKTK_SVC_KEI KK0341 ");
			sbSql.append("     WHERE ");
			sbSql.append("        KK0341.SVC_KEI_NO = ? ");
			sbSql.append("         AND KK0341.KKTK_SVC_CD = 'C014' ");
			sbSql.append("         AND KK0341.KKTK_SBT_CD = '02' ");

			// 呼出区分により、取得条件を追加
			if (JKKejbCallTypeChecker.isCallTypeBackyard(inContext))
			{
				// バックヤード呼出の場合
				sbSql.append("     AND KK0341.KKTK_SVC_KEI_STAT IN ('010', '020', '030', '100') ");
			}
			if (JKKejbCallTypeChecker.isCallTypeFront(inContext))
			{
				// フロント呼出の場合
				sbSql.append("     AND KK0341.PLAN_STAYMD <= ? ");
				sbSql.append("     AND KK0341.PLAN_ENDYMD >= ?   ");
				sbSql.append("     AND KK0341.KKTK_SVC_KEI_STAT = '100' ");
			}
			//OM-2021-0000602 ADD START
			if (JKKejbCallTypeChecker.isCallTypeApi(inContext))
			{
				// API呼出の場合
				sbSql.append("     AND KK0341.KKTK_SVC_KEI_STAT IN ('010', '020', '030', '100') ");
			}
			//OM-2021-0000602 ADD END
			sbSql.append("         AND (KK0341.KKTK_SVC_KEI_NO, KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM) = ");
			sbSql.append("         (SELECT KK0341_GENE.KKTK_SVC_KEI_NO, MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX  ");
			sbSql.append("         FROM KK_T_KKTK_SVC_KEI KK0341_GENE  ");
			sbSql.append("         WHERE KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO  ");
			sbSql.append("         AND KK0341_GENE.RSV_APLY_YMD <= ?  ");
			sbSql.append("         AND KK0341_GENE.RSV_APLY_CD = '2'  ");
			sbSql.append("         AND KK0341_GENE.MK_FLG= '0' ");
			sbSql.append("         GROUP BY KK0341_GENE.KKTK_SVC_KEI_NO ");
			sbSql.append("         )) KK0341_01 ");
			sbSql.append(" 	INNER JOIN ( ");
			sbSql.append(" 	    SELECT  ");
			sbSql.append(" 	        KK1651.KKTSV_PCRS_CD, ");
			sbSql.append(" 	        KK1651.KKTSV_PPLAN_CD, ");
			sbSql.append(" 	        KK1651.CHBF_TAKNKIKI_MODEL_CD ");
			sbSql.append(" 	    FROM ");
			sbSql.append(" 	        KK_M_KIKI_ATKN_TGMDL KK1651 ");
			sbSql.append(" 	    WHERE ");
			sbSql.append(" 	        KK1651.CHBF_KIKI_SPEC_CD = ?  ");
			sbSql.append(" 	        AND KK1651.CHAF_KIKI_SPEC_CD = ?  ");
			sbSql.append(" 	        AND KK1651.ATKN_SBT_CD = '001'  ");
			sbSql.append(" 	        AND KK1651.KKTK_SVC_CD = 'C014'  ");
			sbSql.append(" 	        AND KK1651.KIKI_ATKN_TGMDL_TSTAYMD <= ?   ");
			sbSql.append(" 	        AND KK1651.KIKI_ATKN_TGMDL_TENDYMD >= ?   ");
			sbSql.append(" 	        AND (KK1651.KIKI_ATKN_TGMDL_NO, KK1651.RSV_APLY_YMD || KK1651.GENE_ADD_DTM) = ");
			sbSql.append(" 	        (SELECT KK1651_GENE.KIKI_ATKN_TGMDL_NO, MAX(KK1651_GENE.RSV_APLY_YMD || KK1651_GENE.GENE_ADD_DTM) AS KK1651_MAX  ");
			sbSql.append(" 	        FROM KK_M_KIKI_ATKN_TGMDL KK1651_GENE  ");
			sbSql.append(" 	        WHERE KK1651_GENE.KIKI_ATKN_TGMDL_NO = KK1651.KIKI_ATKN_TGMDL_NO  ");
			sbSql.append(" 	        AND KK1651_GENE.RSV_APLY_YMD <= ?  ");
			sbSql.append(" 	        AND KK1651_GENE.MK_FLG= '0' ");
			sbSql.append(" 	        GROUP BY KK1651_GENE.KIKI_ATKN_TGMDL_NO ");
			sbSql.append(" 	        )) KK1651_01 ");
			sbSql.append(" 	ON KK0341_01.PCRS_CD = KK1651_01.KKTSV_PCRS_CD ");
			sbSql.append(" 	AND KK0341_01.PPLAN_CD = KK1651_01.KKTSV_PPLAN_CD ");
			sbSql.append(" 	AND KK0341_01.TAKNKIKI_MODEL_CD = KK1651_01.CHBF_TAKNKIKI_MODEL_CD ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);
			
			// パラメータの設定(サービス契約番号を指定)
			int iParam = 1;
			CAANJDBCUtil.setParam(pstmt, iParam++, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			if (JKKejbCallTypeChecker.isCallTypeFront(inContext))
			{
				// フロント呼出の場合
				// パラメータの設定(運用日付を指定)
				CAANJDBCUtil.setParam(pstmt, iParam++, JKKModelCommon.getOpeDate(inMsg));
				// パラメータの設定(運用日付を指定)
				CAANJDBCUtil.setParam(pstmt, iParam++, JKKModelCommon.getOpeDate(inMsg));
			}
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, iParam++, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(料金コース速度コード(変更前)を指定)
			CAANJDBCUtil.setParam(pstmt, iParam++, bfPcrsMsg.getString(KK0791ETMsg.PCRS_SPEED_CD));
			// パラメータの設定(料金コース速度コード(変更後)を指定)
			CAANJDBCUtil.setParam(pstmt, iParam++, afPcrsMsg.getString(KK0791ETMsg.PCRS_SPEED_CD));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, iParam++, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, iParam++, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, iParam++, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// 検索結果が取得した場合trueを返却
			if (rsltQuery.next())
			{
				return true;
			}
			
			// レコードが取得できなかった場合falseを返却
			return false;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
	/**
	 * <p>
	 * サービス契約に紐付く割引サービス契約の機器提供サービスコードが
	 * /変更前コース/変更前プラン/変更後通信速度のレコードで
	 * 自動交換ルーター型式(ファミリーパック)を検索し、レコードが取得できるかチェックを行う。
	 * 
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return boolean   宅内機器型式コードが取得できた場合false、それ以外の場合true
	 * 
	 */
	public boolean isEoHikariMusenRouterKeiFail(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 料金コース速度コード
		Object pcrsSpeedCd = "";

		// 開始ログ
		CAANLog.println(CAANLog.LEVEL_FW, "CALL: JKKejbKRCKCommon#isTkkikiCode");

		// サービス契約番号に紐付くファミリーパック割引が存在しない場合はtrueを返却
		if(!isFamilyPackWari(inMsg, inContext))
		{
			return true;
		}
		
		// 関連制約共通処理部品インスタンス生成
		JKKejbKRCKCommon jkekc = new JKKejbKRCKCommon();

		// 料金コースカレントレコード取得(変更後)
		CAANMsg afPcrsMsg = jkekc.getCurentKK0791(inMsg, inContext, inMsg.getString(KK0081ETMsg.PCRS_CD));

		if(afPcrsMsg == null) 
		{
			return false;
		}

		// サービス契約メッセージ生成
		CAANMsg svcMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		svcMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		svcMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約カレント検索を行う
		CAANMsg curSvcMsg = findByCurrent(svcMsg);

		if(curSvcMsg == null) 
		{
			return false;
		}

		// サービス契約のカレントレコードから取得した料金コース検索メッセージインスタンスを生成
		CAANMsg bfPcrsMsg = jkekc.getCurentKK0791(inMsg, inContext, curSvcMsg.getString(KK0081ETMsg.PCRS_CD));

		if(bfPcrsMsg == null) 
		{
			return false;
		}

		// 料金コース速度コードを比較
		if(afPcrsMsg.getStringAsLong(KK0791ETMsg.DSP_JUN) > bfPcrsMsg.getStringAsLong(KK0791ETMsg.DSP_JUN))
		{
			// 入力パラメータの料金コースコードに紐付く料金コース速度コードを設定
			pcrsSpeedCd = afPcrsMsg.getObject(KK0791ETMsg.PCRS_SPEED_CD);
		}
		else
		{
			// 入力パラメータの料金コースコードに紐付く料金コース速度コードを設定
			pcrsSpeedCd = bfPcrsMsg.getString(KK0791ETMsg.PCRS_SPEED_CD);
		}

		// 多機能ルーターのルーター機能を利用している場合は、チェック対象外
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();
		// 現在使用中の回線に紐づく回線の一覧を取得する。
		CAANMsg[] kk0341ListMsg = new JKKejbKK0341DBABase().getKK0341FromKK0251bySvcKei(inMsg.getString(KK0081ETMsg.SVC_KEI_NO), 
				curSvcMsg.getString(KK0081ETMsg.SVC_CD) , searchJknMap, JKKModelCommon.getOpeDate(inMsg), "1");
		
		// 機器提供サービス契約が取得できない場合は、チェック対象外
		if(kk0341ListMsg == null || kk0341ListMsg.length == 0) 
		{
			return true;
		}
		
		for(CAANMsg kk0341Msg : kk0341ListMsg) 
		{
			String strKKtkSvcKeiNo = kk0341Msg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO);
			String strKKtkSvcCD = kk0341Msg.getString(KK0341ETMsg.KKTK_SVC_CD);
			
			// 機器が多機能ルータでない場合、チェック対象
// ▽▽▽ #83584 Modify START
//			if(!JKKModelConst.KKTK_SVC_CD_TAKINORT.equals(strKKtkSvcCD)) {
			if(!(JKKModelConst.KKTK_SVC_CD_TAKINORT.equals(strKKtkSvcCD) || JKKModelConst.KKTK_SVC_CD_HGW.equals(strKKtkSvcCD))) {
// △△△ #83584 Modify END
				continue;
			}
			
			// 機器提供サービス契約番号から機器オプションのルータ機能の情報を取得する。
			CAANMsg[] kk2811ListMsg = new JKKejbKK2811DBABase().getKK2811byKktk(strKKtkSvcKeiNo, null, JKKModelCommon.getOpeDate(inMsg), "2");

			// 機器オプションが取得できた場合は、チェック対象外
			if(kk2811ListMsg.length > 0) 
			{
				return true;
			}
		}
		
		/* ++++++++++ v26.00.00 ADD START ++++++++++ */
		// サービス契約番号に紐付く特定の機器提供サービス契約が存在しない場合はtrueを返却
		if (!isKktkByCondition(inMsg, inContext))
		{
			return true;
		}
		/* ++++++++++ v26.00.00 ADD END   ++++++++++ */
		
		// 宅内機器型式コード取得判定
		return jkekc.isTkkikiCode(inMsg, inContext, inMsg.getString(KK0081ETMsg.SVC_KEI_NO) , pcrsSpeedCd);
	}
	
	/**
	 * <p>
	 * オプションサービスコード"固定グローバルIPアドレス"の
	 * 申し込み予約レコードが存在するかチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付くオプションサービスコードが"固定グローバルIPアドレス"
	 *          の申込予約レコードが存在する場合false、それ以外の場合true。
	 */
	public boolean isAplyOpSvcGrobalIp(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isAplyOpSvcGrobalIp");

		// サービス契約番号に紐付くオプションサービス契約の予約を取得
		ArrayList<HashMap<String, String>> retKK0351
			= new JKKejbKRCKCommon().getRsvOpIdoWithSvc(inMsg, inContext, inMsg.getString(KK0351ETMsg.SVC_KEI_NO), OPT_SVC_CD_GLOVAL);

		for (int i = 0; i < retKK0351.size(); i++)
		{
			HashMap<String, String> hash = retKK0351.get(i);

			// 「異動予約詳細コード」が
			// "014"（オプション開始）、"015"（オプション引継）いずれかである場合、falseを返却する
			if (IDO_RSV_DTL_OP_STA.equals(hash.get(SEL_OPIDO_IDO_DTL))
					|| IDO_RSV_DTL_OP_SUCS.equals(hash.get(SEL_OPIDO_IDO_DTL))) 
			{
				return false;
			}
		}

		// 対象の予約が存在しなかった場合はtrueを返却する
		return true;
	}
	
	/**
	 * <p>
	 * 指定されたオプションサービスコード"マルチセッション"の
	 * 申し込み予約レコードが存在するかチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付くオプションサービスコードが"マルチセッション"
	 *          の申込予約レコードが存在する場合false、それ以外の場合true。
	 */
	public boolean isAplyOpSvcMultiSession(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isAplyOpSvcMultiSettion");

		// サービス契約番号に紐付くオプションサービス契約の予約を取得
		ArrayList<HashMap<String, String>> retKK0351
			= new JKKejbKRCKCommon().getRsvOpIdoWithSvc(inMsg, inContext, inMsg.getString(KK0351ETMsg.SVC_KEI_NO), OPT_SVC_CD_MULTI);

		for (int i = 0; i < retKK0351.size(); i++)
		{
			HashMap<String, String> hash = retKK0351.get(i);

			// 「異動予約詳細コード」が
			// "014"（オプション開始）、"015"（オプション引継）いずれかである場合、falseを返却する
			if (IDO_RSV_DTL_OP_STA.equals(hash.get(SEL_OPIDO_IDO_DTL))
					|| IDO_RSV_DTL_OP_SUCS.equals(hash.get(SEL_OPIDO_IDO_DTL))) 
			{
				return false;
			}
		}

		// 対象の予約が存在しなかった場合はtrueを返却する
		return true;
	}
	
	/**
	 * <p>
	 * サービス契約に紐付く料金コース変更可能条件が存在するか、チェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約に紐付く料金コースが存在する場合true、それ以外の場合false
	 * 
	 */
	public boolean isPcrsChgPos(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isPcrsChgPos");

		// カレントレコード検索パラメータの設定
		CAANMsg kk0081_msg = new CAANMsg(KK0081ETMsg.class.getName());
		kk0081_msg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		kk0081_msg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// カレントレコードの検索
		CAANMsg retkk0081 = new JKKejbKK0081DBABase().findByCurrent(kk0081_msg);

		// カレントレコード検索パラメータの設定
		CAANMsg kk1631_msg = new CAANMsg(KK1631ETMsg.class.getName());
		kk1631_msg.set(KK1631ETMsg.CHG_BF_PCRS_CD, retkk0081.getString(KK0081ETMsg.PCRS_CD));
		kk1631_msg.set(KK1631ETMsg.CHG_AF_PCRS_CD, inMsg.getString(KK0081ETMsg.PCRS_CD));
		kk1631_msg.set(KK1631ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// カレントレコードの検索
		CAANMsg retkk1631 = new JKKejbKK1631DBABase().findByCurrent(kk1631_msg);

		// 料金コース変更可能条件が存在しない場合はfalseを返却する
		if (retkk1631 == null)
		{
			return false;
		}

		// 料金コース変更受付開始年月日時分が運用日時より大きい場合はfalseを返却する
		if (JKKModelCommon.getOpeDateTimeStamp(inMsg).substring(0, 12).compareTo(retkk1631.getString(KK1631ETMsg.PCRS_CHG_UK_SYMDHM)) < 0)
		{
			return false;
		}

		// 料金コース変更受付終了年月日時分が運用日時より小さい場合はfalseを返却する
		if (JKKModelCommon.getOpeDateTimeStamp(inMsg).substring(0, 12).compareTo(retkk1631.getString(KK1631ETMsg.PCRS_CHG_UK_EYMDHM)) > 0)
		{
			return false;
		}

		// 入力値「申込明細番号」が未設定だった場合はtrueを返却する
		if (inMsg.isNull(KK0081ETMsg.MSKM_DTL_NO))
		{
			return true;
		}

		// カレントレコード検索パラメータの設定
		CAANMsg kk0021_msg = new CAANMsg(KK0021ETMsg.class.getName());
		kk0021_msg.set(KK0021ETMsg.MSKM_DTL_NO, inMsg.getString(KK0081ETMsg.MSKM_DTL_NO));

		// カレントレコードの検索
		CAANMsg retkk0021 = new JKKejbKK0021DBABase().findByCurrent(kk0021_msg);

		// 申込明細が存在しない場合はtrueを返却する
		if (retkk0021 == null)
		{
			return true;
		}

		// 申込形態コードがnullの場合はtrueを返却する
		if (retkk0021.isNull(KK0021ETMsg.MSKM_FORM_CD))
		{
			return true;
		}

		// 申込形態コードが"1"（Web）の場合のみチェックを行う
		if (MSKM_FORM_WEB.equals(retkk0021.getString(KK0021ETMsg.MSKM_FORM_CD)))
		{
			// 料金コース変更可能機能識別コードが"2"（業務端末のみ）の場合はfalseを返却する
			if (PCRS_KINO_SKBT_GYOMU.equals(retkk1631.getString(KK1631ETMsg.PCRS_CGPSB_KINO_SKBT_CD)))
			{
				return false;
			}
		}

		// 申込形態コードが"1"（Web）以外の場合のみチェックを行う
		if (!MSKM_FORM_WEB.equals(retkk0021.getString(KK0021ETMsg.MSKM_FORM_CD)))
		{
			// 料金コース変更可能機能識別コードが"1"（Webのみ）の場合はfalseを返却する
			if (PCRS_KINO_SKBT_WEB.equals(retkk1631.getString(KK1631ETMsg.PCRS_CGPSB_KINO_SKBT_CD)))
			{
				return false;
			}
		}

		return true;
	}
	
	/**
	 * <p>
	 * IF項目の料金コース、料金プラン、提供方式契約番号が現在契約中の料金コース、料金プラン、提供方式契約番号と同一かチェックを行います。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return 指定された料金プランコード、料金コースコード、提供方式契約番号の全てが
	 *          カレントレコードと一致しない場合はtrue。一致する場合はfalse。
	 */
	public boolean isPcrsPplanSameCheck(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// カレント検索用のメッセージを作成
		CAANMsg inETMsgKK0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgKK0081.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		inETMsgKK0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約のカレント検索を行う
		CAANMsg ret0081 = findByCurrent(inETMsgKK0081);

		// 検索結果がnullだった場合はfalseを返却
		if (ret0081 == null)
		{
			return false;
		}

		// カレントレコードと処理対象メッセージの料金コースコード、料金プランコード、提供方式契約番号が全て一致する場合はfalseを返却する
		if (ret0081.getString(KK0081ETMsg.PCRS_CD).equals(inMsg.getString(KK0081ETMsg.PCRS_CD))
				&& ret0081.getString(KK0081ETMsg.PPLAN_CD).equals(inMsg.getString(KK0081ETMsg.PPLAN_CD)))
		{
			if (!ret0081.isNull(KK0081ETMsg.TK_HOSHIKI_KEI_NO)
					&& !inMsg.isNull(KK0081ETMsg.TK_HOSHIKI_KEI_NO)
					&& ret0081.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO).equals(inMsg.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO)))
			{
				return false;
			}
			else if (ret0081.isNull(KK0081ETMsg.TK_HOSHIKI_KEI_NO)
					&& inMsg.isNull(KK0081ETMsg.TK_HOSHIKI_KEI_NO))
			{
				return false;
			}
		}

		return true;
	}
	
	/**
	 * <p>
	 * サービス契約回線内訳の起点変電所コードに該当する起点変電所のGE-PON利用可否が"否"のチェックを行います。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く起点変電所のGE-PON利用可否が否でない場合はtrue。否の場合はfalse。
	 */
	public boolean isGePonUseHukaChk(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 内部スキーマメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// パラメータ設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));

		// サービス契約回線内訳のカレントレコードを取得する
		ArrayList<Map<String, String>> mapList = getCurrentKK0251(inETMsg, inContext);

		try
		{
			for (int i = 0; i < mapList.size(); i++)
			{
				// 変電所コードが設定されていた場合
				if (null != mapList.get(i).get(KK0251ETMsg.KITEN_HDSHO_CD))
				{
					// 全件検索用のメッセージを作成
					CAANMsg inETMsgZM0331 = new CAANMsg(ZM0331ETMsg.class.getName());
					inETMsgZM0331.set(ZM0331ETMsg.KITEN_HDSHO_CD, mapList.get(i).get(KK0251ETMsg.KITEN_HDSHO_CD));
					inETMsgZM0331.set(ZM0331ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
	
					// 起点変電所の全件検索を行う
					CAANMsg[] retZM0331 = new ZM0331LE().findByCondition(inETMsgZM0331);
	
					// 検索結果がnullだった場合はfalseを返却
					if (retZM0331 == null)
					{
						return false;
					}

					// 取得した起点変電所のGE-PON利用可否が否の場合はfalseを返却する
					for (int j = 0; j < retZM0331.length; j++)
					{
						if (GEPON_USE_KH_NO.equals(retZM0331[j].getString(ZM0331ETMsg.GEPON_USE_KH)))
						{
							return false;
						}
					}
				}
			}
		}
		catch(CAANException ce)
		{
			return false;
		}
		
		// 起点変電所が存在し、GE-PON利用可否が全て要の場合はtrueを返却する
		return true;
	}

	/**
	 * <p>
	 * サービス契約番号に紐付くサービス契約_工事案件が存在するかのチェックを行います。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付くサービス契約_工事案件が存在する場合はtrue。存在しない場合はfalse。
	 */
	public boolean isExistsSvcKeiKojiAk(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		CAANMsg conInMsg = new CAANMsg(KU0081ETMsg.class.getName());
		conInMsg.set(KU0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		conInMsg.set(KU0081ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
		CAANMsg[] conRetMsg = null;
		try
		{
			conRetMsg = new KU0081LE().findByCondition(conInMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		if (0 < conRetMsg.length)
		{
			// 上記検索結果が存在する場合
			return true;
		}

		// 検索結果0件の場合
		return false;
	}

	/**
	 * <p>
	 * サービス契約カレントレコードの存在チェックを行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return カレントレコードが存在する場合はtrue
	 */
	public boolean isExistsCurrent(CAANMsg inMsg, String svcKeiNo)
	{
		if (svcKeiNo == null)
		{
			return true;
		}

		// カレントレコード検索パラメータの設定
		CAANMsg msg = new CAANMsg(KK0081ETMsg.class.getName());
		msg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		msg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0081DBABase().findByCurrent(msg);

		if (ret == null)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * "サービス契約番号"に紐付く「オプションサービス契約」の
	 * "オプションサービス契約引継発生年月日"が設定されているレコードが存在するかの判定を行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return "サービス契約番号"に紐付く「オプションサービス契約」の"オプションサービス契約引継発生年月日"が設定されているレコードが
	 *          存在する場合false、それ以外の場合はtrue。
	 */
	public boolean isChkOpHktgi(CAANMsg inETMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// オプション引継チェックの結果を返却
		return new JKKejbShosaChkBase().isChkOpHktgi(inETMsg, svcKeiNo);
	}
	
	/**
	 * <p>
	 * 指定された「サービス契約」の"照査年月日"が運用日と等しいか判定を行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return "照査年月日"が運用日と等しくない場合false、それ以外の場合はtrue。
	 */
	public boolean isChkSyosaCancelDay(CAANMsg inETMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// 照査取消日チェックの結果を返却
		return new JKKejbShosaChkBase().isChkSyosaCancelDay(inETMsg, svcKeiNo);
	}
	
	/**
	 * <p>
	 * "申込明細番号"に紐付く「工事案件」の"工事案件ステータス" が"中止(900)"以外かつ、
	 * "工事案件依頼年月日"が設定されているレコードが存在するかの判定を行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param mskmDtlNo 申込明細番号
	 * @return "申込明細番号"に紐付く「工事案件」の"工事案件ステータス" が"中止(900)"以外
	 * 			かつ、"工事案件依頼年月日"が設定されているレコードが存在する場合false、それ以外の場合はtrue。
	 */
	public boolean isChkStatusKoji(CAANMsg inETMsg, AgentDispatchContext inContext, String mskmDtlNo)
	{
		String svcKeiNo = inETMsg.getString(KK0081ETMsg.SVC_KEI_NO);
		// 工事状態チェック(ADSL)と工事状態チェック(ADSL以外)を行い、その結果を返却
		if (!new JKKejbShosaChkBase().isChkStatusKojiADSL(inETMsg, svcKeiNo, mskmDtlNo))
		{
			return false;
		}

		return new JKKejbShosaChkBase().isChkStatusKojiExceptADSL(inETMsg, svcKeiNo, mskmDtlNo);
	}
	
	/**
	 * <p>
	 * "サービス契約番号"に紐付く「機器提供サービス契約」の"機器提供サービス契約番号"が、
	 * 配送ステータス="001"or"005"の「配送」の"配送番号"に紐付く
	 * 「配送対象物品」の"機器提供サービス契約番号"と等しいレコードが存在するかの判定を行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return "サービス契約番号"に紐付く「機器提供サービス契約」の"機器提供サービス契約番号"と
	 * 			配送ステータス="001"or"005"の「配送」の"配送番号"に紐付く「配送対象物品」の"機器提供サービス契約番号"と
	 * 			等しいレコードが存在する場合false、それ以外の場合はtrue。
	 */
	public boolean isChkStatusKikiHaisou(CAANMsg inETMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		return new JKKejbShosaChkBase().isChkStatusKikiHaisou(inETMsg, svcKeiNo, "0");
	}
	
	/**
	 * <p>
	 * "サービス契約番号"に紐付く「機器提供サービス契約」の"機器提供サービス契約番号"が、
	 * 配送ステータス="001"or"005"の「配送」の"配送番号"に紐付く
	 * 「配送対象物品」の"機器提供サービス契約番号"と等しいレコードが存在するかの判定を行います。
	 * ただし、回線に紐づく機器についてはチェック対象外とする。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return "サービス契約番号"に紐付く「機器提供サービス契約」の"機器提供サービス契約番号"と
	 * 			配送ステータス="001"or"005"の「配送」の"配送番号"に紐付く「配送対象物品」の"機器提供サービス契約番号"と
	 * 			等しいレコードが存在する場合false、それ以外の場合はtrue。
	 */
	public boolean isChkStatusKikiHaisou2(CAANMsg inETMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		return new JKKejbShosaChkBase().isChkStatusKikiHaisou(inETMsg, svcKeiNo, "1");
	}

	/**
	 * <p>
	 * サービス契約に紐付くグループコードがｅｏ光ネットマンションタイプ,ｅｏ光電話かチェックを行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return カレントレコードの料金グループコードがｅｏ光ネットマンションタイプ,ｅｏ光電話の場合true、それ以外の場合false
	 */
	public boolean isChkGroupCd(CAANMsg inETMsg, AgentDispatchContext inContext)
	{
		String svcKeiNo = inETMsg.getString(KK0081ETMsg.SVC_KEI_NO);

		if (null == svcKeiNo)
		{
			return true;
		}

		// サービス契約カレント検索
		CAANMsg curInMsg = new CAANMsg(KK0081ETMsg.class.getName());
		curInMsg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		curInMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inETMsg));
		CAANMsg curRetMsg = new JKKejbKK0081DBABase().findByCurrent(curInMsg);

		if (null == curRetMsg)
		{
			return false;
		}

		// 料金グループコードの判定
		if (JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE.equals(curRetMsg.getString(KK0081ETMsg.PRC_GRP_CD))
			|| JKKModelConst.PRC_GRP_CD_EOHTL.equals(curRetMsg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			return true;
		}

		return false;
	}

	/**
	 * <p>
	 * サービス開始年月日が変更可能期間かチェックを行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcStaYmd サービス開始年月日
	 * @return サービス開始年月日が運用日付より未来日の場合true、それ以外の場合false
	 */
	public boolean isChkSvcStaYmd(CAANMsg inETMsg, AgentDispatchContext inContext, String svcStaYmd)
	{
		// サービス開始年月日未設定の場合
		if (null == svcStaYmd)
		{
			return true;
		}

		if (JKKModelCommon.isFutureDate(svcStaYmd, JKKModelCommon.getOpeDate(inETMsg), "1"))
		{	
			return true;
		}

		return false;
	}
	
	/**
	 * <p>
	 * サービス契約<eoモバイル>のコース変更NG状態コードのチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return コース変更NG状態コードがOKの場合はtrue。NGの場合はfalse。
	 */
	public boolean isCourseChgCdNg(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		CAANMsg ret0121 = getPrimaryKK0121(inMsg.getString(KK0121ETMsg.SVC_KEI_NO), inMsg.getString(KK0121ETMsg.GENE_ADD_DTM));

		//存在しない場合
		if (ret0121 == null)
		{
			return true;
		}
		
		// コース変更NG状態コードがNGの場合
		if (COURSECHG_NG_STAT_CD_NG.equals(ret0121.getString(KK0121ETMsg.COURSECHG_NG_STAT_CD)))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * サービス契約<eoモバイル>の事業者出荷課金連携年月日のチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return 事業者出荷課金連携年月日に"20991231"以外の日付が設定されている場合はtrue。それ以外はfalse。
	 */
	public boolean isCourseChgMirenkei(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		CAANMsg ret0121 = getPrimaryKK0121(inMsg.getString(KK0121ETMsg.SVC_KEI_NO), inMsg.getString(KK0121ETMsg.GENE_ADD_DTM));

		//存在しない場合
		if (ret0121 == null)
		{
			return true;
		}
		
		// 事業者出荷課金連携年月日が未設定、"20991231"の場合
		if (ret0121.isNull(KK0121ETMsg.JGS_SHKA_CHRG_RNKI_YMD) || JKKModelConst.DATE_MAX.equals(ret0121.getString(KK0121ETMsg.JGS_SHKA_CHRG_RNKI_YMD)))
		{
			return false;
		}
		
		return true;
	}

	/**
	 * <p>
	 * コース変更妥当性チェックを行います（住所変更）。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く工事中の住変の工事が存在しない場合はtrue。存在する場合はfalse。
	 */
	public boolean isCrsCngValidJH(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス契約番号に紐付く住変の工事案件の件数を取得する
		Long lData = getKU0011JH(inMsg, inContext);

		// 取得できなかった場合はチェック正常とする
		if (lData < 1)
		{
			return true;
		}

		// データが存在する場合はエラーとする
		return false;
	}
	
	/**
	 * <p>
	 * コース変更妥当性チェックを行います（新設工事）。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く工事中の新設の工事でかつ、回線機器がGE-PONの場合はtrue。それ以外はfalse。
	 */
	public boolean isCrsCngValidNew(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス契約番号に紐付く新設の工事案件の件数を取得する
		Long lData = getKU0011PlusDK0021New(inMsg, inContext);

		// 2017/07/26 ANK-3118-00-00 ADD START
		// 新設でかつ配送データ作成済みの場合
		if (lData > 0 )
		{

// 2019/08/07 ANK-3687-00-00 MOD START
//			// サービス契約番号に紐付く、回線機器のPON種別がGE-PON以外の件数を取得する
//			Long lPonData = getKK0341GEPon(inMsg, inContext);
//			// GE-PON以外の場合
//			if (lPonData > 0)
//			{
//				//GE-PON以外の場合はエラーとする
//				return false;
//			}
//			else
//			{
//				//GE-PONの場合コース変更先の料金コースを確認
//				String pcrsCd = inMsg.getString(KK0081ETMsg.PCRS_CD);
//				if ( PCRS_CD_10G.equals(pcrsCd) )
//				{
//					//コース変更先が10Gコースの場合はエラーとする
//					return false;
//				}
//			}
			// サービス契約番号に紐付く、回線機器のPON種別がE-PONの件数を取得する
			Long lPonData = getKK0341EPon(inMsg, inContext);
			// E-PONの場合
			if (lPonData > 0)
			{
				//E-PONの場合はエラーとする
				return false;
			}
// 2019/08/07 ANK-3687-00-00 MOD END
			
		}
		// 2017/07/26 ANK-3118-00-00 ADD END
		// 2017/07/26 ANK-3118-00-00 MOD START
		// 取得できなかった場合はチェック正常とする
//		if (lData < 1)
//		{
//			return true;
//		}
//
//		// その他エラーとしない
//		return false;
		return true;
		// 2017/07/26 ANK-3118-00-00 MOD END
	}
	
	// 2017/07/26 ANK-3118-00-00 ADD START
	/**
	 * <p>
	 * ルーターの自動交換チェックを行います
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く保有ルーターが存在しない場合はtrue。それ以外の場合はfalse。
	 */
	public boolean isChkRouterJidoChg(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス契約番号に紐付く新設の工事案件の件数を取得する
		Long lDataKU0011 = getKU0011PlusDK0021New(inMsg, inContext);

		// 取得できなかった場合はチェック正常とする
		if (lDataKU0011 < 1)
		{
			return true;
		}

		// サービス契約番号に紐付く自動交換対象外の保有ルーターを取得する
		Long lData = getKK0341Router(inMsg, inContext);

		// 取得できなかった場合はチェック正常とする
		if (lData < 1)
		{
			return true;
		}

		// データが存在する場合はエラーとする
		return false;
	}
	// 2017/07/26 ANK-3118-00-00 ADD END
	
	/**
	 * <p>
	 * PON種別妥当性チェックを行います。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く工事中の新設の工事が存在しない、かつ
	 *          申込明細番号に紐付くE-PONのサービス契約回線内訳が存在する場合はtrue。存在する場合はfalse。
	 */
	public boolean isPonSbtValid(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス契約番号に紐付く新設の工事案件の件数を取得する
		Long lDataKU0011 = getKU0011PlusDK0021New(inMsg, inContext);

		// 取得できた場合はチェック正常とする
		if (lDataKU0011 > 0)
		{
			return true;
		}

		// 申込明細番号に紐付くE-PONのサービス契約回線内訳の件数を取得する
		Long lDataKK0251 = getKK0251EPon(inMsg, inContext);

		// 取得できなかった場合はチェック正常とする
		if (lDataKK0251 < 1)
		{
			return true;
		}

		// データが存在する場合はエラーとする
		return false;
	}
	
	/**
	 * <p>
	 * 休止トーキ登録済みチェックを行います。
	 * </p>
	 * @param  curKK0081 サービス契約のカレントレコードメッセージ
	 * @return 紐づくマンションコースが、「グローバル」、「光配線」
	 *          かつ、休止中・休止予約中
	 *          かつ、休止トーキの場合はtrue。それ以外の場合はfalse。
	 */
	public boolean isPauseTokAddChk(CAANMsg curKK0081)
	{
		// サービス契約に紐づくマンションコースを取得する
		CAANMsg retKK0911 = getKK0911WithSvc(curKK0081);

		// マンションコースが取得できない場合、trueを返却
		if (null == retKK0911)
		{
			return true;
		}

		// マンションコースが「グローバル」、「光配線」以外の場合、trueを返却
		if (!isMansionHikGrov(retKK0911))
		{
			return true;
		}

		// 休止中・休止予約中の判定を行う
		if (!isPauseSvc(curKK0081))
		{
			// 休止中・休止予約中でない場合、trueを返却
			return true;
		}

		// 休止トーキの判定を行う
		if (!isTokSvcUcwk(curKK0081))
		{
			// 「休止によるトーキ」でない場合、trueを返却
			return true;
		}

		// データが存在する場合はエラーとする
		return false;
	}
	
	/**
	 * <p>
	 * サービス契約の休止登録可否チェックを行います。
	 * </p>
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return サービス契約番号に紐付く工事案件ステータスが"130"(受付済)以上
	 * 			"190"(現場作業完了済)以下の工事が存在しない場合はtrue。存在する場合はfalse。
	 */
	public boolean isPauseAddKh(AgentDispatchContext inContext, String svcKeiNo)
	{
		if (svcKeiNo == null)
		{
			return true;
		}
		
		Long lDataKU0011 = getKU0011Incomplete(inContext, svcKeiNo);
		
		// 取得できた場合はチェックエラーとする
		if (lDataKU0011 > 0)
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * サービス解約起算年月日妥当性チェック（料金月初日）を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 料金月初日 ≦ サービス解約起算年月日 ≦ 運用日付以外の場合true。それ以外の場合false。
	 */
	public boolean isSvcDslKisYmdValMonFst(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 運用日付を取得
		String opeDate = JKKModelCommon.getOpeDate(inMsg);

		// サービス終了年月日時点でのサービス契約のカレントレコードを検索する
		CAANMsg inETMsgKK0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgKK0081.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		inETMsgKK0081.set(KK0081ETMsg.RSV_APLY_YMD, inMsg.getString(KK0081ETMsg.SVC_ENDYMD));
		CAANMsg retMsgKK0081 = new JKKejbKK0081DBABase().findByCurrent(inETMsgKK0081);

		if (null == retMsgKK0081)
		{
			return false;
		}

		// 判定日を決定する
		String judgeYmd = null;

		if (!retMsgKK0081.isNull(KK0081ETMsg.KAIHK_YMD))
		{
			// 回復年月日が設定されている場合、回復年月日を判定日とする
			judgeYmd = retMsgKK0081.getString(KK0081ETMsg.KAIHK_YMD);
		}
		else if (!retMsgKK0081.isNull(KK0081ETMsg.SVC_STA_YMD))
		{
			// サービス開始年月日が設定されている場合、サービス開始年月日を判定日とする
			judgeYmd = retMsgKK0081.getString(KK0081ETMsg.SVC_STA_YMD);
		}
		else
		{
			// どちらも未設定の場合はtrueを返却する
			return true;
		}

		// 料金月初日を取得
		String prcFstYmd = getSeikyYmFirst(inMsg, inContext);

		if (null == prcFstYmd)
		{
			return false;
		}

		// 判定日 ≦ 料金月初日でない場合は処理を終了する
		if (!JPCUtilCommon.isPastDate(judgeYmd, prcFstYmd, "1"))
		{
			return true;
		}

		// サービス解約起算年月日を取得
		String svcDslKisYmd = inMsg.getString(KK0081ETMsg.SVC_DSL_KISAN_YMD);

		// 料金月初日 ≦ サービス解約起算年月日でない場合、falseを返却する
		if (!JPCUtilCommon.isPastDate(prcFstYmd, svcDslKisYmd, "1"))
		{
			return false;
		}

		// サービス解約起算年月日 ≦ 運用日付でない場合、falseを返却する
		if (!JPCUtilCommon.isPastDate(svcDslKisYmd, opeDate, "1"))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * サービス解約起算年月日妥当性チェック（サービス開始年月日）を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return サービス開始年月日 ≦ サービス解約起算年月日 ≦ 運用日付以外の場合true。それ以外の場合false。
	 */
	public boolean isSvcDslKisYmdValSvcSta(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス終了年月日時点でのサービス契約のカレントレコードを検索する
		CAANMsg inETMsgKK0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgKK0081.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		inETMsgKK0081.set(KK0081ETMsg.RSV_APLY_YMD, inMsg.getString(KK0081ETMsg.SVC_ENDYMD));
		CAANMsg retMsgKK0081 = new JKKejbKK0081DBABase().findByCurrent(inETMsgKK0081);

		if (null == retMsgKK0081)
		{
			return false;
		}

		// サービス開始年月日を判定日として共通処理を呼び出す
		return isSvcDslKisYmdValCom(inMsg, inContext, retMsgKK0081.getString(KK0081ETMsg.SVC_STA_YMD), JKKModelCommon.getOpeDate(inMsg));
	}
	
	/**
	 * <p>
	 * サービス解約起算年月日妥当性チェック（回復年月日）を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 回復年月日 ≦ サービス解約起算年月日 ≦ 運用日付以外の場合true。それ以外の場合false。
	 */
	public boolean isSvcDslKisYmdValKaihk(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス終了年月日時点でのサービス契約のカレントレコードを検索する
		CAANMsg inETMsgKK0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgKK0081.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		inETMsgKK0081.set(KK0081ETMsg.RSV_APLY_YMD, inMsg.getString(KK0081ETMsg.SVC_ENDYMD));
		CAANMsg retMsgKK0081 = new JKKejbKK0081DBABase().findByCurrent(inETMsgKK0081);

		if (null == retMsgKK0081)
		{
			return false;
		}

		// 回復年月日を判定日として共通処理を呼び出す
		return isSvcDslKisYmdValCom(inMsg, inContext, retMsgKK0081.getString(KK0081ETMsg.KAIHK_YMD), JKKModelCommon.getOpeDate(inMsg));
	}
	
	/**
	 * <p>
	 * サービス解約起算年月日妥当性チェック共通処理を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param judgeYmd 判定日
	 * @param opeDate 運用日付
	 * @return 判定日 ≦ サービス解約起算年月日 ≦ 運用日付以外の場合true。それ以外の場合false。
	 */
	private boolean isSvcDslKisYmdValCom(CAANMsg inMsg, AgentDispatchContext inContext, String judgeYmd, String opeDate)
	{
		// 判定日が未設定だった場合は処理を行わない
		if (null == judgeYmd)
		{
			return true;
		}

		// 料金月初日を取得
		String prcFstYmd = getSeikyYmFirst(inMsg, inContext);

		if (null == prcFstYmd)
		{
			return false;
		}

		// 判定日 ＞ 料金月初日でない場合は処理を終了する
		if (!JPCUtilCommon.isFutureDate(judgeYmd, prcFstYmd, "0"))
		{
			return true;
		}

		// サービス解約起算年月日を取得
		String svcDslKisYmd = inMsg.getString(KK0081ETMsg.SVC_DSL_KISAN_YMD);

		// 判定日 ≦ サービス解約起算年月日でない場合、falseを返却する
		if (!JPCUtilCommon.isPastDate(judgeYmd, svcDslKisYmd, "1"))
		{
			return false;
		}

		// サービス解約起算年月日 ≦ 運用日付でない場合、falseを返却する
		if (!JPCUtilCommon.isPastDate(svcDslKisYmd, opeDate, "1"))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * サービス契約に紐付く督促ステータスチェックを行います。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return サービス契約番号に紐付く督促ステータスが"15"(強制解約予告済)以上の
	 *          督促が存在しない場合はtrue。存在する場合はfalse。
	 */
	public boolean isRecoveryTkskStat(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		Long lDataCH0231 = getCH0231NonRecovery(inMsg, inContext);
		
		// 取得できた場合はチェックエラーとする
		if (lDataCH0231 > 0)
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * 電話単独不可チェック（ネット契約解約・キャンセル時）
	 * </p>
	 * 対象のネット契約がマンションタイプの加入契約、かつ支払方法が全戸一括、居住者一括の場合、
	 * 解約(またはキャンセル)により、同一回線上で電話単独契約とならないこと。
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcEndymd サービス終了年月日
	 * @return true:チェックOK、false:チェックNG
	 */
	public boolean isTelSnglFailChkForNetDsl(CAANMsg inMsg, AgentDispatchContext inContext, String svcEndymd)
	{
		// サービス契約のカレントレコード検索
		CAANMsg inMsgKK0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inMsgKK0081.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		inMsgKK0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		CAANMsg retMsgKK0081 = new JKKejbKK0081DBABase().findByCurrent(inMsgKK0081);

		// カレントレコードが存在しなかった場合はfalseを返却
		if (null == retMsgKK0081)
		{
			return false;
		}

		// 料金グループコードが"ｅｏ光ネットマンションタイプ"以外の場合はチェックを行わない
		if (!JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE.equals(retMsgKK0081.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			return true;
		}
		
		// 提供方式契約のカレントレコード検索
		CAANMsg retMsgKK0891 = getKK0891WithSvc(retMsgKK0081);

		// カレントレコードが存在しなかった場合はtrueを返却
		if (null == retMsgKK0891)
		{
			return true;
		}

		// 加入契約支払方式コードが、"003"（全戸一括）または"004"（居住者一括）以外の場合はtrueを返却する
		if (!KNY_KEI_PAY_HSK_CD_ALL.equals(retMsgKK0891.getString(KK0891ETMsg.KANYU_KEI_PAY_HOSHIKI_CD))
				&& !KNY_KEI_PAY_HSK_CD_INHAB.equals(retMsgKK0891.getString(KK0891ETMsg.KANYU_KEI_PAY_HOSHIKI_CD)))
		{
			return true;
		}

		// サービス契約番号に紐付く、自契約以外のサービス契約の件数取得
		HashMap<String, Long> retMap = getKK0081ByKaisen(inMsg, inContext, retMsgKK0081.getString(KK0081ETMsg.SVC_KEI_NO));

		// 取得したデータに電話のサービスがいなかった場合はtrueを返却する
		if (!retMap.containsKey(SVC_CD_TEL))
		{
			return true;
		}

		// データの件数をカウントする
		Long lCnt = 0L;

		Iterator<String> it = retMap.keySet().iterator();

		// 各取得値について処理を行う
		while (it.hasNext())
		{
			// キー値（サービスコード）の取得
			String svcCd = it.next();

			// 電話以外のサービスのデータ件数を集約する
			if (!SVC_CD_TEL.equals(svcCd))
			{
				lCnt =+ retMap.get(svcCd);
			}
		}

		// データが存在しなかった場合はfalseを返却
		if (lCnt < 1)
		{
			// ネットの解約投入日（入力のサービス終了年月日）が電話の解約予約日以上の場合はtrueを返却
			if (getKK0081ByKaisenTelRsv(inMsg, inContext, retMsgKK0081.getString(KK0081ETMsg.SVC_KEI_NO), svcEndymd))
			{
				return true;
			}
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * マンションコースが「グローバル」、「光配線」であるかを判定します。
	 * </p>
	 * @param msgKK0911 マンションコースのレコード
	 * @return マンションコースが「グローバル」、「光配線」の場合はtrue。それ以外の場合はfalse。
	 */
	private boolean isMansionHikGrov(CAANMsg msgKK0911)
	{
		// マンション通信設備コードが"03"（光配線）の場合はtrueを返却
		if (MANS_TUS_EQP_CD_HIK.equals(msgKK0911.getString(KK0911ETMsg.MANS_TUSHIN_EQUIP_CD)))
		{
			return true;
		}

		// IP払出コードが"02"（グローバル）の場合はtrueを返却
		if (IP_HRADSI_CD_GROV.equals(msgKK0911.getString(KK0911ETMsg.IP_HRADSI_CD)))
		{
			return true;
		}

		// それ以外の場合はfalseを返却
		return false;
	}

	/**
	 * <p>
	 * 対象のサービス契約が休止中・休止予約中であるかのチェックを行う。
	 * </p>
	 * @param msgKK0081 サービス契約のカレントレコードメッセージ
	 * @return 対象のサービス契約が休止中・休止予約中の場合はtrue。それ以外の場合はfalse。
	 */
	private boolean isPauseSvc(CAANMsg msgKK0081)
	{
		// サービス契約ステータスが"休止・中断中"の場合
		if (JKKModelConst.SVC_KEI_STAT_PAUSE_STP_CHU.equals(msgKK0081.getString(KK0081ETMsg.SVC_KEI_STAT)))
		{
			// 休止中断コードが"00"（休止中(SOD未発行)）、"01"（休止中(SOD発行済)）の場合trueを返却
			if (PAUSE_STP_CD_NOSOD.equals(msgKK0081.getString(KK0081ETMsg.PAUSE_STP_CD))
					|| PAUSE_STP_CD_SOD.equals(msgKK0081.getString(KK0081ETMsg.PAUSE_STP_CD)))
			{
				return true;
			}
		}

		// サービス契約番号に紐づく予約を取得する
		List<CAANMsg> retKK1681RsvList
			= new JKKejbIdoRsvAccess().getIdoRsvSvcKeiNo(msgKK0081.getString(KK0081ETMsg.SVC_KEI_NO), JKKModelCommon.getOpeDate(msgKK0081));

		// 予約の取得結果を判定する
		for (CAANMsg retMsgKK1681: retKK1681RsvList)
		{
			// 異動区分が"00024"（休止受付）以外の場合は次の明細へ
			if (!IDO_DIV_PSE_RES.equals(retMsgKK1681.getString(KK1681ETMsg.IDO_DIV)))
			{
				continue;
			}

			// 異動予約詳細コードが"005"（サービス休止）以外の場合は次の明細へ
			if (!IDO_RSV_DTL_SVC_PSE.equals(retMsgKK1681.getString(KK1681ETMsg.IDO_RSV_DTL_CD)))
			{
				continue;
			}

			// 上記条件でループしなかった場合はtrueを返却
			return true;
		}

		// それ以外の場合はfalseを返却
		return false;
	}

	/**
	 * <p>
	 * サービス契約番号に紐づくサービス契約内訳<eo光電話>が休止トーキであるかのチェックを行う。
	 * </p>
	 * @param msgKK0081 サービス契約のカレント列コードメッセージ
	 * @return サービス契約に紐づくサービス契約内訳<eo光電話>が
	 *          「休止によるトーキ」の場合はtrue。それ以外の場合はfalse。
	 */
	private boolean isTokSvcUcwk(CAANMsg msgKK0081)
	{
		// サービス契約番号に紐づくサービス契約内訳のレコードを取得
		CAANMsg[] retMsgKK0161List = findByAllCurKK0161WithSvc(msgKK0081);

		for (CAANMsg retMsgKK0161: retMsgKK0161List)
		{
			// サービス契約内訳に紐づくサービス契約内訳<eo光電話>を取得する
			CAANMsg retMsgKK0191 = findByPrimaryKeyKK0191(retMsgKK0161);

			// 取得できなかった場合は次の明細へ
			if (null == retMsgKK0191)
			{
				continue;
			}

			if (ITNTOKI_ADD_CD_PSE.equals(retMsgKK0191.getString(KK0191ETMsg.DSL_PAUSE_TOKI_ADD_CD)))
			{
				// 解約・休止トーキ登録コードが"3"（休止によるトーキ）の場合、trueを返却する
				return true;
			}
		}

		// それ以外の場合はfalseを返却
		return false;
	}

	/**
	 * <p>
	 * サービス契約<eoモバイル>の一意検索を行います。
	 * </p>
	 * @param svcKeiNo サービス契約番号
	 * @param geneAddDtm　サービス契約の世代年月登録年月日時分秒
	 * @return 検索結果のレコード
	 */
	private CAANMsg getPrimaryKK0121(Object svcKeiNo, Object geneAddDtm)
	{
		// 一意検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0121ETMsg.class.getName());
		inETMsg.set(KK0121ETMsg.SVC_KEI_NO, svcKeiNo);
		inETMsg.set(KK0121ETMsg.GENE_ADD_DTM, geneAddDtm);
		
		// サービス契約<eoモバイル>の一意検索を行う
		return new JKKejbKK0121DBABase().findByPrimaryKey(inETMsg);
	}

	/**
	 * <p>
	 * サービス契約回線内訳のカレントレコードを取得する
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return サービス契約回線内訳のカレントレコード情報
	 *          該当するレコードが存在しない場合null
	 */
	private ArrayList<Map<String, String>> getCurrentKK0251(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 返却用メッセージ
		ArrayList<Map<String, String>> mapList = new ArrayList<Map<String, String>>();
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0251ETMsg.getTableName());
			// SQL文
			StringBuffer sbSql = new StringBuffer();
			
			sbSql.append(" SELECT ")
				.append(" KK0251.KITEN_HDSHO_CD, ")
				.append(" KK0251.PON_SBT_CD ")
				.append(" FROM ")
				.append(" KK_T_KAISEN_TG_SVKEI KK0241  ")
				.append(" INNER JOIN KK_T_SVKEI_KAISEN_UW KK0251 ")
				.append(" ON KK0241.SVC_KEI_KAISEN_UCWK_NO = KK0251.SVC_KEI_KAISEN_UCWK_NO ")
				.append(" WHERE  ")
				.append(" KK0241.SVC_KEI_NO = ?  ")
				.append(" AND KK0241.KAISEN_UCWK_USE_STAYMD <= ?  ")
				.append(" AND KK0241.KAISEN_UCWK_USE_ENDYMD >= ?  ")
				.append(" AND KK0241.MK_FLG = '0'  ")
				.append(" AND (KK0251.SVC_KEI_KAISEN_UCWK_NO, KK0251.GENE_ADD_DTM) = ")
				.append(" (SELECT KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO, MAX(KK0251_GENE.GENE_ADD_DTM) AS KK0251_MAX ")
				.append(" FROM KK_T_SVKEI_KAISEN_UW KK0251_GENE ")
				.append(" WHERE  KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO = KK0251.SVC_KEI_KAISEN_UCWK_NO ")
				.append(" AND KK0251_GENE.MK_FLG= '0' ")
				.append(" GROUP BY KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0241ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// リスト格納用マップ
			HashMap<String, String> map = null;
			
			// 取得結果をマップに格納
			while (rsltQuery.next())
			{
				// レコード情報格納用マップを初期化する
				map = new HashMap<String, String>();
				// 取得したレコード情報をセットする
				map.put(KK0251ETMsg.KITEN_HDSHO_CD, rsltQuery.getString(1));
				map.put(KK0251ETMsg.PON_SBT_CD, rsltQuery.getString(2));
				
				// セットしたMapをListに格納する
				mapList.add(map);
			}
			
			return mapList;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約番号に紐付く、特定条件の機器提供サービス契約が存在するかを判定します。
	 * ・機器提供サービスコードが"C014"（BBR）
	 * ・機器提供種別コードが"02"（レンタル）
	 * ・販売種別コードが"10"（標準（新品））
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return レコードが存在する場合はtrue、存在しない場合はfalse。
	 */
	private boolean isKktkByCondition(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT  ");
			sbSql.append("     KK0341.KKTK_SVC_KEI_NO ");
			sbSql.append(" FROM ");
			sbSql.append("     KK_T_KKTK_SVC_KEI KK0341 ");
			sbSql.append(" WHERE ");
			sbSql.append("    KK0341.SVC_KEI_NO = ? ");
			sbSql.append("     AND KK0341.KKTK_SVC_CD = 'C014' ");
			sbSql.append("     AND KK0341.KKTK_SBT_CD = '02' ");
			sbSql.append("     AND KK0341.HAMBAI_SBT_CD = '10' ");
			// ANK-4146-00-00 ADD START
			sbSql.append("     AND KK0341.PCRS_CD <> 'CA6' ");
			// ANK-4146-00-00 ADD END
			sbSql.append("     AND (KK0341.KKTK_SVC_KEI_NO, KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM) = ");
			sbSql.append("         (SELECT KK0341_GENE.KKTK_SVC_KEI_NO, MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX  ");
			sbSql.append("         FROM KK_T_KKTK_SVC_KEI KK0341_GENE  ");
			sbSql.append("         WHERE KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO  ");
			sbSql.append("         AND KK0341_GENE.RSV_APLY_YMD <= ?  ");
			sbSql.append("         AND KK0341_GENE.RSV_APLY_CD = '2'  ");
			sbSql.append("         AND KK0341_GENE.MK_FLG= '0' ");
			sbSql.append("         GROUP BY KK0341_GENE.KKTK_SVC_KEI_NO) ");

			// 呼出区分により、取得条件を追加
			if (JKKejbCallTypeChecker.isCallTypeBackyard(inContext))
			{
				// バックヤード呼出の場合
				sbSql.append("     AND KK0341.KKTK_SVC_KEI_STAT IN ('010', '020', '030', '100') ");
			}
			if (JKKejbCallTypeChecker.isCallTypeFront(inContext))
			{
				// フロント呼出の場合
				sbSql.append("     AND KK0341.KKTK_SVC_KEI_STAT = '100' ");
			}
			//OM-2021-0000602 ADD START
			if (JKKejbCallTypeChecker.isCallTypeApi(inContext))
			{
				// API呼出の場合
				sbSql.append("     AND KK0341.KKTK_SVC_KEI_STAT IN ('010', '020', '030', '100') ");
			}
			//OM-2021-0000602 ADD END
			
			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0341ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// データが取得できた場合はtrueを返却
			if (rsltQuery.next())
			{
				return true;
			}

			// 取得できなかった場合はfalseを返却
			return false;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約番号に紐付く、ファミリーパック割引が存在するかを判定します。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return レコードが存在する場合はtrue、存在しない場合はfalse。
	 */
	private boolean isFamilyPackWari(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0451ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT  ");
			sbSql.append("     KK0481.WRIB_SVC_KEI_NO  ");
			sbSql.append(" FROM  ");
			sbSql.append("     KK_T_WRISVC_TG_KEI KK0481  ");
			sbSql.append("     INNER JOIN KK_T_WRIB_SVC_KEI KK0451  ");
			sbSql.append("     ON KK0451.WRIB_SVC_KEI_NO = KK0481.WRIB_SVC_KEI_NO  ");
			sbSql.append("     INNER JOIN KK_M_WRIB_SVC KK0841  ");
			sbSql.append("     ON KK0841.WRIB_SVC_CD = KK0451.WRIB_SVC_CD  ");
			sbSql.append(" WHERE  ");
			sbSql.append("     KK0481.SVC_KEI_NO = ?  ");
			sbSql.append("     AND KK0481.WRISVC_TG_KEI_TSTAYMD <= ?  ");
			sbSql.append("     AND KK0481.WRISVC_TG_KEI_TENDYMD >= ?  ");
			sbSql.append("     AND KK0841.WRIB_SVC_CD='W00000006'   ");
			sbSql.append("     AND KK0841.WRIB_SVC_TSTAYMD <= ?  ");
			sbSql.append("     AND KK0841.WRIB_SVC_TENDYMD >= ?  ");
			sbSql.append("     AND KK0451.WRIB_SVC_KEI_STAT IN ('100','300') ");
			sbSql.append("     AND (KK0451.WRIB_SVC_KEI_NO, KK0451.RSV_APLY_YMD || KK0451.GENE_ADD_DTM) =  ");
			sbSql.append("         (SELECT KK0451_GENE.WRIB_SVC_KEI_NO, MAX(KK0451_GENE.RSV_APLY_YMD || KK0451_GENE.GENE_ADD_DTM) AS KK0451_MAX   ");
			sbSql.append("         FROM KK_T_WRIB_SVC_KEI KK0451_GENE   ");
			sbSql.append("         WHERE KK0451_GENE.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO   ");
			sbSql.append("         AND KK0451_GENE.RSV_APLY_YMD <= ?   ");
			sbSql.append("         AND KK0451_GENE.RSV_APLY_CD = '2'   ");
			sbSql.append("         AND KK0451_GENE.MK_FLG= '0'  ");
			sbSql.append("         GROUP BY KK0451_GENE.WRIB_SVC_KEI_NO)  ");
			sbSql.append("     AND (KK0481.WRIB_SVC_KEI_NO, KK0481.WRIB_SVC_TRGT_KEI_NO, KK0481.GENE_ADD_DTM) =  ");
			sbSql.append("         (SELECT KK0481_GENE.WRIB_SVC_KEI_NO, KK0481_GENE.WRIB_SVC_TRGT_KEI_NO, MAX(KK0481_GENE.GENE_ADD_DTM) AS KK0481_MAX   ");
			sbSql.append("         FROM KK_T_WRISVC_TG_KEI KK0481_GENE   ");
			sbSql.append("         WHERE KK0481_GENE.WRIB_SVC_KEI_NO = KK0481.WRIB_SVC_KEI_NO   ");
			sbSql.append("         AND KK0481_GENE.WRIB_SVC_TRGT_KEI_NO = KK0481.WRIB_SVC_TRGT_KEI_NO   ");
			sbSql.append("         AND KK0481_GENE.MK_FLG= '0'  ");
			sbSql.append("         GROUP BY KK0481_GENE.WRIB_SVC_KEI_NO, KK0481_GENE.WRIB_SVC_TRGT_KEI_NO)  ");
			sbSql.append("     AND (KK0841.WRIB_SVC_CD, KK0841.RSV_APLY_YMD || KK0841.GENE_ADD_DTM) =  ");
			sbSql.append("         (SELECT KK0841_GENE.WRIB_SVC_CD, MAX(KK0841_GENE.RSV_APLY_YMD || KK0841_GENE.GENE_ADD_DTM) AS KK0841_MAX   ");
			sbSql.append("         FROM KK_M_WRIB_SVC KK0841_GENE   ");
			sbSql.append("         WHERE KK0841_GENE.WRIB_SVC_CD = KK0841.WRIB_SVC_CD   ");
			sbSql.append("         AND KK0841_GENE.RSV_APLY_YMD <= ?   ");
			sbSql.append("         AND KK0841_GENE.MK_FLG= '0'  ");
			sbSql.append("         GROUP BY KK0841_GENE.WRIB_SVC_CD)  ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0481ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 4, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 5, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 6, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 7, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// データが取得できた場合はtrueを返却
			if (rsltQuery.next())
			{
				return true;
			}

			// 取得できなかった場合はfalseを返却
			return false;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約番号に紐付く、工事案件を取得します（住所変更）。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return 取得したデータ件数
	 */
	private Long getKU0011JH(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KU0011ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("     KU_T_SVKEI_KOJIAK KU0081 ");
			sbSql.append("     INNER JOIN KU_T_KOJIAK KU0011 ");
			sbSql.append("     ON KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ");
			sbSql.append(" WHERE ");
			sbSql.append("     KU0081.SVC_KEI_NO = ? ");
			sbSql.append("     AND KU0081.SVKEI_KOJIAK_TSTAYMD <= ? ");
			sbSql.append("     AND KU0081.SVKEI_KOJIAK_TENDYMD >= ? ");
			sbSql.append("     AND KU0011.KOJIAK_STAT IN ('110', '130', '140', '150', '160', '170', '180', '190') ");
			sbSql.append("     AND KU0011.KOJIAK_SBT_CD IN ('003', '004') ");
			sbSql.append("     AND KU0081.MK_FLG = '0' ");
			sbSql.append("     AND KU0011.MK_FLG = '0' ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約番号に紐付く、工事案件と配送を取得します（新設工事）。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return 取得したデータ件数
	 */
	private Long getKU0011PlusDK0021New(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KU0011ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("     KU_T_SVKEI_KOJIAK KU0081 ");
			sbSql.append("     INNER JOIN KU_T_KOJIAK KU0011 ");
			sbSql.append("     ON KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ");
			sbSql.append("     INNER JOIN DK_T_HAISO_TG_BPIN DK0021 ");
			sbSql.append("     ON DK0021.KOJIAK_NO = KU0081.KOJIAK_NO ");
			sbSql.append("     INNER JOIN DK_T_HAISO DK0011 ");
			sbSql.append("     ON DK0011.HAISO_NO = DK0021.HAISO_NO ");
			sbSql.append(" WHERE ");
			sbSql.append("     KU0081.SVC_KEI_NO = ? ");
			sbSql.append("     AND KU0081.SVKEI_KOJIAK_TSTAYMD <= ? ");
			sbSql.append("     AND KU0081.SVKEI_KOJIAK_TENDYMD >= ? ");
			sbSql.append("     AND KU0011.KOJIAK_STAT IN ('110', '130', '140', '150', '160', '170', '180', '190') ");
			sbSql.append("     AND KU0011.KOJIAK_SBT_CD = '001' ");
			sbSql.append("     AND KU0081.MK_FLG = '0' ");
			sbSql.append("     AND KU0011.MK_FLG = '0' ");
			sbSql.append("     AND DK0021.MK_FLG = '0' ");
			sbSql.append("     AND DK0011.MK_FLG = '0' ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
// 2019/08/07 ANK-3687-00-00 DEL START
//	// 2017/07/26 ANK-3118-00-00 ADD START
//	/**
//	 * <p>
//	 *  サービス契約番号に紐付く、回線機器のPON種別がGE-PON以外の件数を取得する。
//	 * </p>
//	 * @param  inMsg     処理対象のメッセージキャリア
//	 * @param  inContext ディスパッチコンテキスト
//	 * @return 取得したデータ件数
//	 */
//	private Long getKK0341GEPon(CAANMsg inMsg, AgentDispatchContext inContext)
//	{
//		// コネクション
//		Connection con = null;
//		// プリペアステートメント
//		PreparedStatement pstmt = null;
//		// リザルトセット
//		ResultSet rsltQuery = null;
//
//		// 返却用データ件数
//		Long lDateCnt = 0L;
//
//		try
//		{
//			// 対象テーブルのコネクション取得
//			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());
//
//			// SQL文
//			StringBuffer sbSql = new StringBuffer();
//
//			sbSql.append(" SELECT ");
//			sbSql.append("       COUNT(*) AS CNT ");
//			sbSql.append(" FROM ");
//			sbSql.append("       KK_T_KKTK_SVC_KEI KK0341 ");
//			sbSql.append("       INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411 ON ZM0411.TAKNKIKI_MODEL_CD = KK0341.TAKNKIKI_MODEL_CD ");
//			sbSql.append("       AND ZM0411.PON_SBT_CD <> '2' ");
//			sbSql.append("       AND ZM0411.MK_FLG = '0' ");
//			sbSql.append(" WHERE ");
//			sbSql.append("       KK0341.SVC_KEI_KAISEN_UCWK_NO = ( ");
//			sbSql.append("       SELECT DISTINCT ");
//			sbSql.append("              KK0241_01.SVC_KEI_KAISEN_UCWK_NO ");
//			sbSql.append("       FROM ");
//			sbSql.append("              KK_T_KAISEN_TG_SVKEI KK0241_01 ");
//			sbSql.append("       WHERE ");
//			sbSql.append("              KK0241_01.SVC_KEI_NO = ? ");
//			sbSql.append("          AND KK0241_01.KAISEN_UCWK_USE_STAYMD || KK0241_01.KAISEN_UCWK_USE_ENDYMD = ");
//			sbSql.append("          ( ");
//			sbSql.append("              SELECT ");
//			sbSql.append("                     MIN(KK0241_02.KAISEN_UCWK_USE_STAYMD || KK0241_02.KAISEN_UCWK_USE_ENDYMD) ");
//			sbSql.append("              FROM ");
//			sbSql.append("                     KK_T_KAISEN_TG_SVKEI KK0241_02 ");
//			sbSql.append("              WHERE ");
//			sbSql.append("                     KK0241_02.SVC_KEI_NO = KK0241_01.SVC_KEI_NO ");
//			sbSql.append("                 AND KK0241_02.KAISEN_UCWK_USE_ENDYMD =  ");
//			sbSql.append("                 ( ");
//			sbSql.append("                  SELECT ");
//			sbSql.append("                        MAX(KK0241_03.KAISEN_UCWK_USE_ENDYMD) ");
//			sbSql.append("                  FROM ");
//			sbSql.append("                        KK_T_KAISEN_TG_SVKEI KK0241_03 ");
//			sbSql.append("                  WHERE ");
//			sbSql.append("                        KK0241_03.SVC_KEI_NO = KK0241_02.SVC_KEI_NO ");
//			sbSql.append("                    AND KK0241_03.KAISEN_UCWK_USE_STAYMD <= ? ");
//			sbSql.append("                    AND KK0241_03.MK_FLG = '0' ");
//			sbSql.append("                 ) ");
//			sbSql.append("           ) ");
//			sbSql.append("       ) ");
//			sbSql.append("       AND KK0341.KKTK_SVC_CD = 'C012' ");
//			sbSql.append("       AND KK0341.KKTK_SVC_KEI_STAT IN ('020', '030', '100', '210', '220') ");
//			sbSql.append("       AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM =  ");
//			sbSql.append("       ( ");
//			sbSql.append("        SELECT ");
//			sbSql.append("               MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) ");
//			sbSql.append("        FROM ");
//			sbSql.append("               KK_T_KKTK_SVC_KEI KK0341_GENE ");
//			sbSql.append("        WHERE ");
//			sbSql.append("               KK0341_GENE.SVC_KEI_KAISEN_UCWK_NO  =   KK0341.SVC_KEI_KAISEN_UCWK_NO ");
//			sbSql.append("           AND KK0341_GENE.RSV_APLY_YMD <=  ? ");
//			sbSql.append("          AND KK0341_GENE.KKTK_SVC_CD = 'C012' ");
//			sbSql.append("           AND KK0341_GENE.RSV_APLY_CD = '2' ");
//			sbSql.append("           AND KK0341_GENE.MK_FLG = '0' ");
//			sbSql.append("       ) ");
//
//			// repareStatementにSQL文をセット
//			pstmt = con.prepareStatement(sbSql.toString());
//
//			//ログ出力(SQL文の出力)
//			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);
//
//			// パラメータの設定(サービス契約番号を指定)
//			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
//			// パラメータの設定(運用日付を指定)
//			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
//			// パラメータの設定(運用日付を指定)
//			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
//
//			// ResultSetの取得
//			rsltQuery = pstmt.executeQuery();
//
//			// 結果の設定
//			if (rsltQuery.next())
//			{
//				lDateCnt = rsltQuery.getLong("CNT");
//			}
//
//			return lDateCnt;
//		}
//		catch(SQLException se)
//		{
//			throw new CAANRuntimeException(se);
//		}
//		finally
//		{
//			// 資源の解放
//			try
//			{
//				if(rsltQuery != null)
//				{
//					rsltQuery.close();
//				}
//				if(pstmt != null)
//				{
//					pstmt.close();
//				}
//				if(con != null)
//				{
//					CAANConnectionMgr.getInstance().close(con);
//				}
//			}
//			catch(SQLException se)
//			{
//				throw new CAANRuntimeException(se);
//			}
//		}
//	}
//	
//	// 2017/07/26 ANK-3118-00-00 ADD START
// 2019/08/07 ANK-3687-00-00 DEL END
// 2019/08/07 ANK-3687-00-00 ADD START
	/**
	 * <p>
	 *  サービス契約番号に紐付く、回線機器のPON種別がE-PONの件数を取得する。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return 取得したデータ件数
	 */
	private Long getKK0341EPon(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("       COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("       KK_T_KKTK_SVC_KEI KK0341 ");
			sbSql.append("       INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411 ON ZM0411.TAKNKIKI_MODEL_CD = KK0341.TAKNKIKI_MODEL_CD ");
// 2019/08/07 ANK-3687-00-00 MOD START
//			sbSql.append("       AND ZM0411.PON_SBT_CD <> '2' ");
			sbSql.append("       AND ZM0411.PON_SBT_CD = '1' ");
// 2019/08/07 ANK-3687-00-00 MOD END
			sbSql.append("       AND ZM0411.MK_FLG = '0' ");
			sbSql.append(" WHERE ");
			sbSql.append("       KK0341.SVC_KEI_KAISEN_UCWK_NO = ( ");
			sbSql.append("       SELECT DISTINCT ");
			sbSql.append("              KK0241_01.SVC_KEI_KAISEN_UCWK_NO ");
			sbSql.append("       FROM ");
			sbSql.append("              KK_T_KAISEN_TG_SVKEI KK0241_01 ");
			sbSql.append("       WHERE ");
			sbSql.append("              KK0241_01.SVC_KEI_NO = ? ");
			sbSql.append("          AND KK0241_01.KAISEN_UCWK_USE_STAYMD || KK0241_01.KAISEN_UCWK_USE_ENDYMD = ");
			sbSql.append("          ( ");
			sbSql.append("              SELECT ");
			sbSql.append("                     MIN(KK0241_02.KAISEN_UCWK_USE_STAYMD || KK0241_02.KAISEN_UCWK_USE_ENDYMD) ");
			sbSql.append("              FROM ");
			sbSql.append("                     KK_T_KAISEN_TG_SVKEI KK0241_02 ");
			sbSql.append("              WHERE ");
			sbSql.append("                     KK0241_02.SVC_KEI_NO = KK0241_01.SVC_KEI_NO ");
			sbSql.append("                 AND KK0241_02.KAISEN_UCWK_USE_ENDYMD =  ");
			sbSql.append("                 ( ");
			sbSql.append("                  SELECT ");
			sbSql.append("                        MAX(KK0241_03.KAISEN_UCWK_USE_ENDYMD) ");
			sbSql.append("                  FROM ");
			sbSql.append("                        KK_T_KAISEN_TG_SVKEI KK0241_03 ");
			sbSql.append("                  WHERE ");
			sbSql.append("                        KK0241_03.SVC_KEI_NO = KK0241_02.SVC_KEI_NO ");
			sbSql.append("                    AND KK0241_03.KAISEN_UCWK_USE_STAYMD <= ? ");
			sbSql.append("                    AND KK0241_03.MK_FLG = '0' ");
			sbSql.append("                 ) ");
			sbSql.append("           ) ");
			sbSql.append("       ) ");
			sbSql.append("       AND KK0341.KKTK_SVC_CD = 'C012' ");
			sbSql.append("       AND KK0341.KKTK_SVC_KEI_STAT IN ('020', '030', '100', '210', '220') ");
			sbSql.append("       AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM =  ");
			sbSql.append("       ( ");
			sbSql.append("        SELECT ");
			sbSql.append("               MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) ");
			sbSql.append("        FROM ");
			sbSql.append("               KK_T_KKTK_SVC_KEI KK0341_GENE ");
			sbSql.append("        WHERE ");
			sbSql.append("               KK0341_GENE.SVC_KEI_KAISEN_UCWK_NO  =   KK0341.SVC_KEI_KAISEN_UCWK_NO ");
			sbSql.append("           AND KK0341_GENE.RSV_APLY_YMD <=  ? ");
			sbSql.append("          AND KK0341_GENE.KKTK_SVC_CD = 'C012' ");
			sbSql.append("           AND KK0341_GENE.RSV_APLY_CD = '2' ");
			sbSql.append("           AND KK0341_GENE.MK_FLG = '0' ");
			sbSql.append("       ) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
// 2019/08/07 ANK-3687-00-00 ADD END
	
	/**
	 * <p>
	 * サービス契約番号に紐付く、保有ルーターを取得する
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return 取得したデータ件数
	 */
	private Long getKK0341Router(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT   ");
			sbSql.append("    COUNT(*) AS CNT  ");
			sbSql.append(" FROM  ");
			sbSql.append("    KK_T_KKTK_SVC_KEI KK0341  ");
			sbSql.append("     INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411 ON ZM0411.TAKNKIKI_MODEL_CD = KK0341.TAKNKIKI_MODEL_CD ");
			sbSql.append("   AND ZM0411.ROUTER_SPEED_SBT_CD < '20' ");
			sbSql.append("   AND ZM0411.MK_FLG = '0' ");
			sbSql.append(" WHERE  ");
			sbSql.append("    KK0341.SVC_KEI_NO = ?  ");
			sbSql.append("    AND KK0341.KKTK_SVC_CD = 'C014'  ");
			sbSql.append("    AND KK0341.KKTK_SBT_CD = '02'  ");
			sbSql.append("    AND KK0341. KKTK_SVC_KEI_STAT IN ('020', '030', '100', '110', '210', '220')   ");
			sbSql.append("    AND (KK0341.KKTK_SVC_KEI_NO, KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM) =  ");
			sbSql.append("    (SELECT KK0341_GENE.KKTK_SVC_KEI_NO, MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX   ");
			sbSql.append("    FROM KK_T_KKTK_SVC_KEI KK0341_GENE   ");
			sbSql.append("    WHERE KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO   ");
			sbSql.append("    AND KK0341_GENE.RSV_APLY_YMD <= ?   ");
			sbSql.append("    AND KK0341_GENE.RSV_APLY_CD = '2'   ");
			sbSql.append("    AND KK0341_GENE.MK_FLG= '0'  ");
			sbSql.append("    GROUP BY KK0341_GENE.KKTK_SVC_KEI_NO ) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
	// 2017/07/26 ANK-3118-00-00 ADD END
	/**
	 * <p>
	 * 工事案件データを取得します（ステータスが"130"(受付済)以上"190"(現場作業完了済)以下）。
	 * </p>
	 * @param  inContext ディスパッチコンテキスト
	 * @param  svcKeiNo サービス契約番号
	 * @return 取得したデータ件数
	 */
	private Long getKU0011Incomplete(AgentDispatchContext inContext, String svcKeiNo)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KU0011ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("     KU_T_SVKEI_KOJIAK KU0081 ");
			sbSql.append("     INNER JOIN KU_T_KOJIAK KU0011 ");
			sbSql.append("     ON KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ");
			sbSql.append(" WHERE ");
			sbSql.append("     KU0081.SVC_KEI_NO = ? ");
			sbSql.append("     AND KU0011.KOJIAK_STAT >= '130' ");
			sbSql.append("     AND KU0011.KOJIAK_STAT <= '190' ");
			sbSql.append("     AND KU0081.MK_FLG = '0' ");
			sbSql.append("     AND KU0011.MK_FLG = '0' ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 申込明細番号に紐付く、E-PONのサービス契約回線内訳を取得します。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return 取得したデータ件数
	 */
	private Long getKK0251EPon(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0251ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("     KK_T_SVKEI_KAISEN_UW KK0251 ");
			sbSql.append(" WHERE ");
			sbSql.append("     KK0251.MSKM_DTL_NO = ? ");
			sbSql.append("     AND KK0251.PON_SBT_CD = '1' ");
			sbSql.append("     AND (KK0251.SVC_KEI_KAISEN_UCWK_NO, KK0251.GENE_ADD_DTM) = ");
			sbSql.append("         (SELECT KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO, MAX(KK0251_GENE.GENE_ADD_DTM) AS KK0251_MAX ");
			sbSql.append("          FROM   KK_T_SVKEI_KAISEN_UW KK0251_GENE ");
			sbSql.append("          WHERE  KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO = KK0251.SVC_KEI_KAISEN_UCWK_NO ");
			sbSql.append("          AND    KK0251_GENE.MK_FLG = '0' ");
			sbSql.append("          GROUP BY KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(申込明細番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.MSKM_DTL_NO));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 料金スケジュール定義から、運用日以降で直近の料金計算の請求年月初日を取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 該当するレコードの請求年月の月初日
	 */
	private String getSeikyYmFirst(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(CH0501ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     CH0501.SEIKY_YM ");
			sbSql.append(" FROM ");
			sbSql.append("     CH_M_PRC_SCHDL_TEIGI CH0501 ");
			sbSql.append(" WHERE ");
			sbSql.append("     CH0501.EVENT_CD = '03' ");
			sbSql.append("     AND (CH0501.EVENT_CD, CH0501.EVENT_YMD) = ");
			sbSql.append("         (SELECT CH0501_TMP.EVENT_CD, MIN(CH0501_TMP.EVENT_YMD) AS MIN_EVENT_YMD ");
			sbSql.append("          FROM CH_M_PRC_SCHDL_TEIGI CH0501_TMP ");
			sbSql.append("          WHERE CH0501_TMP.EVENT_CD = CH0501.EVENT_CD ");
			sbSql.append("          AND   CH0501_TMP.EVENT_YMD >= ? ");
			sbSql.append("          AND   CH0501_TMP.MK_FLG = '0' ");
			sbSql.append("          GROUP BY CH0501_TMP.EVENT_CD) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 1, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// レコードが取得できなかった場合nullを返却
			if (!rsltQuery.next())
			{
				return null;
			}

			// 取得した請求年月の月初を返却
			return rsltQuery.getString(CH0501ETMsg.SEIKY_YM).concat(DAY_FIRST);
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 料金スケジュール定義から、サービス課金開始年月日以降で直近の料金計算のイベント年月日を取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcChrgStaymd サービス課金開始年月日
	 * @return 該当するレコードの請求年月の月初日
	 */
	private String getEventYmd(CAANMsg inMsg, AgentDispatchContext inContext, String svcChrgStaymd)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(CH0501ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     CH0501.EVENT_YMD ");
			sbSql.append(" FROM ");
			sbSql.append("     CH_M_PRC_SCHDL_TEIGI CH0501 ");
			sbSql.append(" WHERE ");
			sbSql.append("     CH0501.EVENT_CD = '03' ");
			sbSql.append("     AND (CH0501.EVENT_CD, CH0501.EVENT_YMD) = ");
			sbSql.append("         (SELECT CH0501_TMP.EVENT_CD, MIN(CH0501_TMP.EVENT_YMD) AS MIN_EVENT_YMD ");
			sbSql.append("          FROM CH_M_PRC_SCHDL_TEIGI CH0501_TMP ");
			sbSql.append("          WHERE CH0501_TMP.EVENT_CD = CH0501.EVENT_CD ");
			sbSql.append("          AND   CH0501_TMP.EVENT_YMD >= ? ");
			sbSql.append("          AND   CH0501_TMP.MK_FLG = '0' ");
			sbSql.append("          GROUP BY CH0501_TMP.EVENT_CD) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcChrgStaymd);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// レコードが取得できなかった場合nullを返却
			if (!rsltQuery.next())
			{
				return null;
			}

			// 取得した請求年月の月初を返却
			return rsltQuery.getString(CH0501ETMsg.EVENT_YMD);
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
	/**
	 * <p>
	 * サービス契約番号に紐付く、回復不可の督促を取得します。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return 取得したデータ件数
	 */
	private Long getCH0231NonRecovery(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0321ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT  ");
			sbSql.append("     COUNT(*) AS CNT  ");
			sbSql.append(" FROM  ");
			sbSql.append("     CH_T_TOKUSOKU CH0231  ");
			sbSql.append("     INNER JOIN KK_T_KAKINS KK0321  ");
			sbSql.append("     ON CH0231.SEIKY_KEI_NO = KK0321.SEIKY_KEI_NO ");
			sbSql.append(" WHERE  ");
			sbSql.append("     KK0321.SVC_KEI_NO = ?  ");
			sbSql.append("     AND KK0321.KAKINS_TSTAYMD <= ? ");
			sbSql.append("     AND KK0321.KAKINS_TENDYMD >= ? ");
			sbSql.append("     AND KK0321.MK_FLG = '0' ");
			sbSql.append("     AND CH0231.TOKUSOKU_STAT >= '15' ");
			sbSql.append("     AND CH0231.TOKUSOKU_STAYMD <= ? ");
			sbSql.append("     AND CH0231.TOKUSOKU_ENDYMD >= ? ");
			sbSql.append("     AND CH0231.MK_FLG = '0' ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 4, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 5, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 指定されたサービス契約番号に紐付く、自契約以外のサービス契約の件数を、
	 * 回線対象サービス契約を経由して、
	 * サービスコードごとに集約してカウントする。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @param  svcKeiNo  サービス契約番号
	 * @return サービスコードと、集約された件数を持つMAP
	 */
	private HashMap<String, Long> getKK0081ByKaisen(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     KK0081.SVC_CD ");
			sbSql.append("     , COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("     KK_T_KAISEN_TG_SVKEI KK0241_01 ");
			sbSql.append("     INNER JOIN KK_T_KAISEN_TG_SVKEI KK0241_02 ");
			sbSql.append("     ON KK0241_02.SVC_KEI_KAISEN_UCWK_NO = KK0241_01.SVC_KEI_KAISEN_UCWK_NO ");
			sbSql.append("     INNER JOIN KK_T_SVC_KEI KK0081 ");
			sbSql.append("     ON KK0081.SVC_KEI_NO = KK0241_02.SVC_KEI_NO ");
			sbSql.append(" WHERE ");
			sbSql.append("     KK0241_01.SVC_KEI_NO = ? ");
			sbSql.append("     AND KK0241_02.SVC_KEI_NO <> ? ");
			sbSql.append("     AND KK0081.SVC_KEI_STAT NOT IN ('910', '920') ");
			sbSql.append("     AND KK0241_01.KAISEN_UCWK_USE_STAYMD <= ? ");
			sbSql.append("     AND KK0241_01.KAISEN_UCWK_USE_ENDYMD >= ? ");
			sbSql.append("     AND KK0241_01.MK_FLG = '0' ");
			sbSql.append("     AND KK0241_02.KAISEN_UCWK_USE_STAYMD <= ? ");
			sbSql.append("     AND KK0241_02.KAISEN_UCWK_USE_ENDYMD >= ? ");
			sbSql.append("     AND KK0241_02.MK_FLG = '0' ");
			sbSql.append("     AND (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) = ");
			sbSql.append("         (SELECT KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ");
			sbSql.append("          FROM   KK_T_SVC_KEI KK0081_GENE ");
			sbSql.append("          WHERE  KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO ");
			sbSql.append("          AND    KK0081_GENE.RSV_APLY_YMD <= ? ");
			sbSql.append("          AND    KK0081_GENE.RSV_APLY_CD = '2' ");
			sbSql.append("          AND    KK0081_GENE.MK_FLG = '0' ");
			sbSql.append("          GROUP BY KK0081_GENE.SVC_KEI_NO) ");
			sbSql.append(" GROUP BY ");
			sbSql.append("     KK0081.SVC_CD ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);
			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 2, svcKeiNo);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 4, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 5, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 6, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 7, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 返却用MAP
			HashMap<String, Long> retMap = new HashMap<String, Long>();

			// 結果の設定
			while (rsltQuery.next())
			{
				retMap.put(rsltQuery.getString(KK0081ETMsg.SVC_CD), rsltQuery.getLong("CNT"));
			}

			return retMap;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約に紐づくマンションコースを取得する
	 * </p>
	 * @param curKK0081 サービス契約のカレントレコードメッセージ
	 * @return サービス契約のカレントレコードに紐づくマンションコースのメッセージ
	 */
	private CAANMsg getKK0911WithSvc(CAANMsg curKK0081)
	{
		// 提供方式契約→回線使用契約→マンションコースで検索する

		try
		{
			// 提供方式契約検索
			CAANMsg msgKK0891 = new CAANMsg(KK0891ETMsg.class.getName());
			msgKK0891.set(KK0891ETMsg.TK_HOSHIKI_KEI_NO, curKK0081.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO));
			msgKK0891.set(KK0891ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
			CAANMsg[] retMsgKK0891 = new KK0891LE().findByCondition(msgKK0891);
			if (retMsgKK0891.length == 0)
			{
				// 取得できない場合はnullを返却する
				return null;
			}

			// 回線使用契約検索
			CAANMsg msgKK0881 = new CAANMsg(KK0881ETMsg.class.getName());
			msgKK0881.set(KK0881ETMsg.KAISEN_USE_KEI_NO, retMsgKK0891[0].getString(KK0891ETMsg.KAISEN_USE_KEI_NO));
			msgKK0881.set(KK0881ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
			CAANMsg[] retMsgKK0881 = new KK0881LE().findByCondition(msgKK0881);
			if (retMsgKK0881.length == 0)
			{
				// 取得できない場合はnullを返却する
				return null;
			}

			// マンションコース検索
			CAANMsg msgKK0911 = new CAANMsg(KK0911ETMsg.class.getName());
			msgKK0911.set(KK0911ETMsg.MANSION_COURSE_CD, retMsgKK0881[0].getString(KK0881ETMsg.MANSION_COURSE_CD));
			msgKK0911.set(KK0911ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(retMsgKK0881[0]));
			CAANMsg retMsgKK0911  = new JKKejbKK0911DBABase().findByCurrent(msgKK0911);

			// マンションコースの取得結果を返却する
			return retMsgKK0911;

		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

	}

	/**
	 * <p>
	 * サービス契約に紐づく提供方式契約を取得する
	 * </p>
	 * @param curKK0081 サービス契約のカレントレコードメッセージ
	 * @return サービス契約のカレントレコードに紐づくマンションコースのメッセージ
	 */
	private CAANMsg getKK0891WithSvc(CAANMsg curKK0081)
	{
		try
		{
			// 提供方式契約検索
			CAANMsg msgKK0891 = new CAANMsg(KK0891ETMsg.class.getName());
			msgKK0891.set(KK0891ETMsg.TK_HOSHIKI_KEI_NO, curKK0081.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO));
			msgKK0891.set(KK0891ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
			CAANMsg[] retMsgKK0891 = new KK0891LE().findByCondition(msgKK0891);

			if (retMsgKK0891.length == 0)
			{
				// 取得できない場合はnullを返却する
				return null;
			}

			// 2件以上取得されることはないため、1件目のみ返却する
			return retMsgKK0891[0];

		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

	}

	/**
	 * <p>
	 * サービス契約番号に紐付く、サービス契約内訳の全カレント検索を行います。
	 * </p>
	 * @param curKK0081 サービス契約のカレントレコードメッセージ
	 * @return サービス契約番号に紐付く、サービス契約内訳の全カレントレコード
	 */
	private CAANMsg[] findByAllCurKK0161WithSvc(CAANMsg curKK0081)
	{
		// サービス契約番号に紐づくサービス契約内訳の全件検索
		CAANMsg inEtMsgKK0161Cond = new CAANMsg(KK0161ETMsg.class.getName());
		inEtMsgKK0161Cond.set(KK0161ETMsg.SVC_KEI_NO, curKK0081.getString(KK0081ETMsg.SVC_KEI_NO));
		inEtMsgKK0161Cond.set(KK0161ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		CAANMsg[] retKK0161Cond = null;

		try
		{
			retKK0161Cond = new KK0161LE().findByCondition(inEtMsgKK0161Cond);
		}
		catch(CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		ArrayList<CAANMsg> array = new ArrayList<CAANMsg>();
		HashMap<String, String> hash = new HashMap<String, String>();

		// 検索結果の件数分処理を行う
		for (CAANMsg msgKK0161: retKK0161Cond)
		{
			String svcKeiUcwkNo = msgKK0161.getString(KK0161ETMsg.SVC_KEI_UCWK_NO);

			// 既に処理済みのレコードは処理しない
			if (hash.containsKey(svcKeiUcwkNo))
			{
				continue;
			}

			hash.put(svcKeiUcwkNo, svcKeiUcwkNo);

			// カレント検索
			CAANMsg inEtMsgKK0161 = new CAANMsg(KK0161ETMsg.class.getName());
			inEtMsgKK0161.set(KK0161ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
			inEtMsgKK0161.set(KK0161ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(curKK0081));

			CAANMsg kk0161 = new JKKejbKK0161DBABase().findByCurrent(inEtMsgKK0161);

			// カレントレコードが存在しない場合は次の明細へ
			if (null == kk0161)
			{
				continue;
			}

			// サービス契約番号が一致するか確認（全件検索でヒットした明細が、カレントレコードの値と異なる可能性があるため）
			if (!curKK0081.getString(KK0081ETMsg.SVC_KEI_NO).equals(kk0161.getString(KK0161ETMsg.SVC_KEI_NO)))
			{
				continue;
			}

			array.add(kk0161);
		}

		return array.toArray(new CAANMsg[0]);
	}

	/**
	 * <p>
	 * サービス契約内訳<eo光電話>の一意検索を行います。
	 * </p>
	 * @param msgKK0161 サービス契約内訳のメッセージ
	 * @param geneAddDtm　サービス契約の世代年月登録年月日時分秒
	 * @return 検索結果のレコード
	 */
	private CAANMsg findByPrimaryKeyKK0191(CAANMsg msgKK0161)
	{
		// 一意検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0191ETMsg.class.getName());
		inETMsg.set(KK0191ETMsg.SVC_KEI_UCWK_NO, msgKK0161.getString(KK0161ETMsg.SVC_KEI_UCWK_NO));
		inETMsg.set(KK0191ETMsg.GENE_ADD_DTM, msgKK0161.getString(KK0161ETMsg.GENE_ADD_DTM));

		// サービス契約内訳<eo光電話>の一意検索を行う
		CAANMsg retMsgKK0191 = new JKKejbKK0191DBABase().findByPrimaryKey(inETMsg);

		// レコードが取得できなかった場合はnullを返却する
		if (null == retMsgKK0191)
		{
			return null;
		}

		// 取得したレコードが有効ではない場合はnullを返却する
		if (!JKKModelConst.MK_FLG_YK.equals(retMsgKK0191.getString(KK0191ETMsg.MK_FLG)))
		{
			return null;
		}

		return retMsgKK0191;
	}

	/**
	 * <p>
	 * サービス契約総戸数チェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param svcCd サービスコード
	 * @return 同一マンションにおけるネット契約数が総戸数より小さい場合はtrue。それ以外はfalse
	 */
	public boolean isChkSvcKeiTtlKosu(CAANMsg inMsg, AgentDispatchContext inContext, Object svcCd)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isChkSvcKeiTtlKosu");

		String tkHoshikiKeiNo = inMsg.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO);
		String mansionId = getMansionId(tkHoshikiKeiNo);

		if (null != mansionId && !"".equals(mansionId))
		{
			// 同一物件サービス契約件数取得処理
			Long sameBknSvcKeiCnt = getSameBknSvcKeiCnt(inMsg, mansionId, svcCd.toString());
			// 回線使用契約物件情報取得処理
			Long ttlKosu = getTtlKosu(tkHoshikiKeiNo);

			if (null != ttlKosu)
			{
				// 同一物件サービス契約件数>=総戸数の場合、falseを返却する
				if (sameBknSvcKeiCnt >= ttlKosu)
				{
					return false;
				}
			}
		}

		return true;
	}

	/**
	 * <p>
	 * マンションID取得処理
	 * </p>
	 * @param tkHoshikiKeiNo 提供方式契約番号
	 * @return マンションID
	 */
	private String getMansionId(String tkHoshikiKeiNo)
	{
		if (tkHoshikiKeiNo == null || "".equals(tkHoshikiKeiNo))
		{
			return null;
		}

		// コネクション
		Connection con = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;

		// リザルトセット
		ResultSet rsltQuery = null;

		// SQL文
		StringBuffer sbSql = new StringBuffer();

		sbSql.append(" SELECT KK0881.MANSION_ID");
		sbSql.append("    FROM KK_T_KAISEN_USE_KEI KK0881 ");
		sbSql.append("    INNER JOIN KK_T_TK_HOSHIKI_KEI KK0891");
		sbSql.append("       ON KK0891.KAISEN_USE_KEI_NO = KK0881.KAISEN_USE_KEI_NO");
		sbSql.append("    WHERE KK0891.TK_HOSHIKI_KEI_NO = ?");
		sbSql.append("      AND KK0891.MK_FLG = '0'");
		sbSql.append("      AND KK0881.MK_FLG = '0'");

		try
		{
			//コネクション取得
			con = JSYejbConnection.getConnection(KK0891ETMsg.getTableName());

			//prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), sbSql);

			// バインド変数設定
			CAANJDBCUtil.setParam(pstmt, 1, tkHoshikiKeiNo);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			String mansionId = null;

			if (rsltQuery.next())
			{

				mansionId = rsltQuery.getString(1);
			}
			return mansionId;

		}
		catch (SQLException e)
		{
			throw new CAANRuntimeException(e);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
				if (con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException e)
			{
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * <p>
	 * 同一物件サービス契約件数取得処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param mansionId マンションID
	 * @param svcCd サービスコード
	 * @return 同一物件サービス契約件数
	 */
	private Long getSameBknSvcKeiCnt(CAANMsg inMsg, String mansionId, String svcCd)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT COUNT(*) AS CNT");
			sbSql.append("   FROM KK_T_SVC_KEI KK0081");
			sbSql.append("   INNER JOIN KK_T_TK_HOSHIKI_KEI KK0891");
			sbSql.append("      ON KK0891.TK_HOSHIKI_KEI_NO = KK0081.TK_HOSHIKI_KEI_NO");
			sbSql.append("   INNER JOIN KK_T_KAISEN_USE_KEI KK0881");
			sbSql.append("      ON KK0881.KAISEN_USE_KEI_NO = KK0891.KAISEN_USE_KEI_NO");
			sbSql.append("   WHERE KK0881.MANSION_ID = ?");
			sbSql.append("      AND KK0881.MK_FLG = '0'");
			sbSql.append("      AND KK0891.MK_FLG = '0'");
			sbSql.append("      AND KK0081.SVC_CD = ?");
			sbSql.append("      AND KK0081.SVC_KEI_STAT IN ('010','020','030','100','210','220')");
			sbSql.append("      AND (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) =");
			sbSql.append("           (SELECT KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX");
			sbSql.append("             FROM KK_T_SVC_KEI KK0081_GENE");
			sbSql.append("             WHERE KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO");
			sbSql.append("             AND KK0081_GENE.RSV_APLY_YMD <= ?");
			sbSql.append("             AND KK0081_GENE.RSV_APLY_CD = '2'");
			sbSql.append("             AND KK0081_GENE.MK_FLG= '0'");
			sbSql.append("             GROUP BY KK0081_GENE.SVC_KEI_NO");
			sbSql.append("            )");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			// パラメータの設定(マンションIDを指定)
			CAANJDBCUtil.setParam(pstmt, 1, mansionId);
			// パラメータの設定(サービスコードを指定)
			CAANJDBCUtil.setParam(pstmt, 2, svcCd);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}

			return lDateCnt;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	

	/**
	 * <p>
	 * 提供方式契約総戸数取得処理
	 * </p>
	 * @param tkHoshikiKeiNo 提供方式契約
	 * @return 総戸数
	 */
	private Long getTtlKosu(String tkHoshikiKeiNo)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0891ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT KK0891.TTL_KOSU ");
			sbSql.append(" FROM KK_T_TK_HOSHIKI_KEI KK0891 ");
			sbSql.append(" WHERE KK0891.TK_HOSHIKI_KEI_NO = ? ");
			sbSql.append("   AND KK0891.MK_FLG = '0' ");
			
			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			// パラメータの設定(提供方式契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, tkHoshikiKeiNo);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			Long ttlKosu = 0L;

			if (rsltQuery.next())
			{
				ttlKosu = rsltQuery.getLong(1);
			}
			return ttlKosu;

		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
	/**
	 * 開始日変更時光ネット(マンション)料金計算済チェック処理
	 * <p>
	 * 対象のサービス契約の料金グループコードが"04"：ＭＴ（プライベート、グローバル、光配線）であり、
	 * 料金月初日が運用日以下の場合にサービス開始年月日が変更されていないかのチェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return サービス開始年月日が変更されている且料金計算が完了している場合、true
	 *          上記以外の場合はfalse。
	 */
	public boolean isStaYmdCngNetMsPrcCalcEnd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isStaYmdCngNetMsPrcCalcEnd");

		// 運用日付
		String opeDate = JKKModelCommon.getOpeDate(inMsg);

		// サービス契約メッセージ生成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getObject(KK0081ETMsg.SVC_KEI_NO));
		inETMsg.set(KK0081ETMsg.RSV_APLY_YMD, opeDate);

		// サービス契約カレント検索を行う
		CAANMsg outETMsg = findByCurrent(inETMsg);

		if (outETMsg == null)
		{
			throw new JKKejbBusinessException("サービス契約が取得できませんでした。");
		}

		// 入力.サービス開始年月日＝カレント.サービス契約開始日の場合、falseを返却
		if (inMsg.getString(KK0081ETMsg.SVC_STA_YMD).equals(outETMsg.getString(KK0081ETMsg.SVC_STA_YMD)))
		{
			return false;
		}

		// サービス課金開始年月日が未設定の場合チェックしない
		if (outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD) == null)
		{
			return false;
		}
		
		// カレントレコードのサービス課金開始年月日が運用日の翌月月初以降の場合、チェックしない
		// 料金スケジュールマスタに存在しない未来日をサービス課金開始年月日に設定された場合、
		// チェックエラーとなるが、運用上、いったん40年後の未来に設定し、工事日決定後にサービス開始日を決定する
		// ケースがあるため、エラーとしないよう対応する
		// 運用日のの翌月初日を取得する
		String nextFirstDay;
		try {
			nextFirstDay = JKKModelCommon.addMonth(opeDate, 1).substring(0, 6).concat("01");
		} catch (ParseException e) {
			throw new JKKejbBusinessException("運用日の翌月月初が取得できませんでした。");
		}
		if (JKKModelCommon.isFutureDate(outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD), nextFirstDay, "1")) {
			return false;
		}
		
		// 取得したカレントレコードが"eo光ネットマンションタイプ"である場合
		if (JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE.equals(outETMsg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			// IT2-2014-0000340 MOD START
			// 課金開始日基準で取得したイベント年月日での判定ではなく
			// 運用日基準で取得した請求年月で判定する。
//			// イベント年月日
//			String eventYmd = getEventYmd(inMsg, inContext, outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD));
//
//			// イベント年月日がnullの場合はシステムエラー
//			if (eventYmd == null)
//			{
//				throw new JKKejbBusinessException("イベント年月日が取得できませんでした。");
//			}
//			
//			// イベント年月日≦運用日の場合エラー
//			if (JPCUtilCommon.isPastDate(eventYmd, JKKModelCommon.getOpeDate(inMsg), "1"))
//			{
//				return true;
//			}
			// 請求年月
			String seikyYm = getSeikyYm(inMsg, inContext, opeDate);
			
			// 請求年月がnullの場合はシステムエラー
			if (seikyYm == null)
			{
				throw new JKKejbBusinessException("請求年月が取得できませんでした。");
			}
			
			// 取得した請求年月の月末を求める
			String seikyYmEnd =  seikyYm.concat(JPCUtilCommon.getEndOfMonth(seikyYm));
			
			// 取得した請求年月の月末≧カレントのサービス課金開始日の場合は料金計算済みとしてエラー
			if (JPCUtilCommon.isFutureDate(seikyYmEnd, outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD), "1"))
			{
				return true;
			}
			// IT2-2014-0000340 MOD END
		}
		
		return false;
	}

	/**
	 * 開始日変更時光ネット(マンション)解約予約済チェック処
	 * <p>
	 * 対象のサービス契約の料金グループコードが"04"：ＭＴ（プライベート、グローバル、光配線）であり、
	 * 異動予約スキーマ内に解約予約データが存在する場合にサービス開始年月日が変更されていないかのチェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return サービス開始年月日が変更されている且解約予約済みの場合、true
	 *          上記以外の場合はfalse。
	 */
	public boolean isStaYmdCngNetMsRsvDslEnd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isStaYmdCngNetMsRsvDslEnd");
		
		// サービス契約メッセージ生成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getObject(KK0081ETMsg.SVC_KEI_NO));
		inETMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約カレント検索を行う
		CAANMsg outETMsg = findByCurrent(inETMsg);

		if (outETMsg == null)
		{
			throw new JKKejbBusinessException("サービス契約が取得できませんでした。");
		}

		// 取得したカレントレコードが"eo光ネットマンションタイプ"である場合
		if (JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE.equals(outETMsg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			// 入力.サービス開始年月日＝カレント.サービス契約開始日の場合false
			if (inMsg.getObject(KK0081ETMsg.SVC_STA_YMD).equals(outETMsg.getObject(KK0081ETMsg.SVC_STA_YMD)))
			{
				return false;
			}

			// 解約予約件数が1件以上の場合、true
			if (getIdoRsvEndCnt(inContext, inMsg.getString(KK0081ETMsg.SVC_KEI_NO)) > 0L)
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 解約予約取得処理
	 * <p>
	 * サービス契約番号に紐付く解約予約の件数を取得
	 * </p>
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return 解約予約件数
	 */
	private long getIdoRsvEndCnt(AgentDispatchContext inContext, String svcKeiNo)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// リスト格納用マップ
		long retCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0241ETMsg.getTableName());
			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT COUNT(*) AS CNT ");
			sbSql.append("   FROM KK_T_IDO_RSV KK1681 ");
			sbSql.append("  WHERE KK1681.SVC_KEI_NO = ? ");
			sbSql.append("    AND KK1681.IDO_DIV IN ('00005','00006') ");
			sbSql.append("    AND KK1681.IDO_RSV_STAT_CD IN ('00','03') ");
			sbSql.append("    AND KK1681.MK_FLG = '0' ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 取得結果をマップに格納
			if (rsltQuery.next())
			{
				// 取得したレコード件数をセットする
				retCnt = rsltQuery.getLong("CNT");
			}
		}
		catch (SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
				if (con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
		return retCnt;
	}

	/**
	 * 開始日変更時光電話(マンション)料金計算済チェック処理
	 * <p>
	 * 対象のサービス契約の料金プランが「PA3102」か「PA3104」か「PA3202」か「PA3204」であり、
	 * 料金月初日が運用日以下の場合にサービス開始年月日が変更されていないかのチェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return サービス開始年月日が変更されている且料金計算が完了している場合、true
	 *          上記以外の場合はfalse。
	 */
	public boolean isStaYmdCngTelMsPrcCalcEnd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isStaYmdCngTelMsPrcCalcEnd");

		// 運用日付
		String opeDate = JKKModelCommon.getOpeDate(inMsg);

		// サービス契約メッセージ生成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getObject(KK0081ETMsg.SVC_KEI_NO));
		inETMsg.set(KK0081ETMsg.RSV_APLY_YMD, opeDate);

		// サービス契約カレント検索を行う
		CAANMsg outETMsg = findByCurrent(inETMsg);

		if (outETMsg == null)
		{
			throw new JKKejbBusinessException("サービス契約が取得できませんでした。");
		}

		// 入力.サービス開始年月日＝カレント.サービス契約開始日の場合、falseを返却
		if (inMsg.getObject(KK0081ETMsg.SVC_STA_YMD).equals(outETMsg.getObject(KK0081ETMsg.SVC_STA_YMD)))
		{
			return false;
		}
		// サービス課金開始年月日が未設定の場合チェックしない
		if (outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD) == null)
		{
			return false;
		}
		
		// カレントレコードのサービス課金開始年月日が運用日の翌月月初以降の場合、チェックしない
		// 料金スケジュールマスタに存在しない未来日をサービス課金開始年月日に設定された場合、
		// チェックエラーとなるが、運用上、いったん40年後の未来に設定し、工事日決定後にサービス開始日を決定する
		// ケースがあるため、エラーとしないよう対応する
		// 運用日のの翌月初日を取得する
		String nextFirstDay;
		try {
			nextFirstDay = JKKModelCommon.addMonth(opeDate, 1).substring(0, 6).concat("01");
		} catch (ParseException e) {
			throw new JKKejbBusinessException("運用日の翌月月初が取得できませんでした。");
		}
		if (JKKModelCommon.isFutureDate(outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD), nextFirstDay, "1")) {
			return false;
		}
		
		// 取得したカレントレコードが「PA3102」または「PA3104」または「PA3202」または「PA3204」である場合
		if (PPLAN_CD_1NO_MANS_GB.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD))
				|| PPLAN_CD_1NO_MANS_LH.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD))
				|| PPLAN_CD_2NO_MANS_GB.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD))
				|| PPLAN_CD_2NO_MANS_LH.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD)))
		{
			// IT2-2014-0000340 MOD START
			// 課金開始日基準で取得したイベント年月日での判定ではなく
			// 運用日基準で取得した請求年月で判定する。
//			// イベント年月日
//			String eventYmd = getEventYmd(inMsg, inContext, outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD));
//
//			// イベント年月日がnullの場合はシステムエラー
//			if (eventYmd == null)
//			{
//				throw new JKKejbBusinessException("イベント年月日が取得できませんでした。");
//			}
//			
//			// イベント年月日≦運用日の場合エラー
//			if (JPCUtilCommon.isPastDate(eventYmd, JKKModelCommon.getOpeDate(inMsg), "1"))
//			{
//				return true;
//			}
			// 請求年月
			String seikyYm = getSeikyYm(inMsg, inContext, opeDate);
			
			// 請求年月がnullの場合はシステムエラー
			if (seikyYm == null)
			{
				throw new JKKejbBusinessException("請求年月が取得できませんでした。");
			}
			
			// 取得した請求年月の月末を求める
			String seikyYmEnd =  seikyYm.concat(JPCUtilCommon.getEndOfMonth(seikyYm));
			
			// 取得した請求年月の月末≧カレントのサービス課金開始日の場合は料金計算済みとしてエラー
			if (JPCUtilCommon.isFutureDate(seikyYmEnd, outETMsg.getString(KK0081ETMsg.SVC_CHRG_STAYMD), "1"))
			{
				return true;
			}
			// IT2-2014-0000340 MOD END
		}
		
		return false;
	}

	/**
	 * 開始日変更時光電話(マンション)解約予約済チェック処理
	 * <p>
	 * 対象のサービス契約の料金プランが「PA3102」か「PA3104」か「PA3202」か「PA3204」であり、
	 * 異動予約スキーマ内に解約予約データが存在する場合にサービス開始年月日が変更されていないかのチェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return サービス開始年月日が変更されている且解約予約済みの場合、true
	 *          上記以外の場合はfalse。
	 */
	public boolean isStaYmdCngTelMsRsvDslEnd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isStaYmdCngTelMsRsvDslEnd");

		// サービス契約メッセージ生成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getObject(KK0081ETMsg.SVC_KEI_NO));
		inETMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約カレント検索を行う
		CAANMsg outETMsg = findByCurrent(inETMsg);

		if (outETMsg == null)
		{
			throw new JKKejbBusinessException("サービス契約が取得できませんでした。");
		}

		// 取得したカレントレコードが「PA3102」または「PA3104」または「PA3202」または「PA3204」である場合
		if (PPLAN_CD_1NO_MANS_GB.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD))
				|| PPLAN_CD_1NO_MANS_LH.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD))
				|| PPLAN_CD_2NO_MANS_GB.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD))
				|| PPLAN_CD_2NO_MANS_LH.equals(outETMsg.getString(KK0081ETMsg.PPLAN_CD)))
		{
			// 入力.サービス開始年月日＝カレント.サービス契約開始日の場合false
			if (inMsg.getObject(KK0081ETMsg.SVC_STA_YMD).equals(outETMsg.getObject(KK0081ETMsg.SVC_STA_YMD)))
			{
				return false;
			}

			// 解約予約件数が1件以上の場合、true
			if (getIdoRsvEndCnt(inContext, inMsg.getString(KK0081ETMsg.SVC_KEI_NO)) > 0L)
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * <p>
	 * モバイル即時開対象サービス取消不可チェック
	 * 
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  svcKeiNo  サービス契約番号
	 * @return boolean   取得できた場合false、それ以外の場合true
	 * 
	 */
	public boolean isMblSokuTgSvcClFailChk(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// サービス契約メッセージ生成
		CAANMsg svcMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		svcMsg.set(KK0081ETMsg.SVC_KEI_NO, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
		svcMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約カレント検索を行う
		CAANMsg curSvcMsg = findByCurrent(svcMsg);

		if(curSvcMsg == null) 
		{
			return false;
		}

		// 料金グループコードが"ｅｏモバイル（Ｗｉ−Ｆｉ）"かつ料金コースコードが"A030"（ＷＩ−ＦＩスポット）の場合
		if (JKKModelConst.PRC_GRP_CD_EOMOBA_WIFI.equals(curSvcMsg.getString(KK0081ETMsg.PRC_GRP_CD))
				&& PCRS_CD_WIFI_SPOT.equals(curSvcMsg.getString(KK0081ETMsg.PCRS_CD)))
		{
			return false;
		}
		// 料金グループコードが"ｅｏモバイル（ＵＱ−ＷｉＭＡＸ）"かつ料金コースコードが"A029"（ＷｉＭＡＸ　４０Ｍ　ＰＣ搭載）の場合
		else if (JKKModelConst.PRC_GRP_CD_EOMOBA_UQ_WIMAX.equals(curSvcMsg.getString(KK0081ETMsg.PRC_GRP_CD))
				&& PCRS_CD_WIMAX_40M_PC.equals(curSvcMsg.getString(KK0081ETMsg.PCRS_CD)))
		{
			return false;
		}
		// 料金グループコードが"ｅｏモバイル（ＵＱ−ＷｉＭＡＸ）"かつ料金コースコードが"A028"（ＷｉＭＡＸ　４０Ｍ　通常）の場合
		else if (JKKModelConst.PRC_GRP_CD_EOMOBA_UQ_WIMAX.equals(curSvcMsg.getString(KK0081ETMsg.PRC_GRP_CD))
				&& PCRS_CD_WIMAX_40M_TUJYO.equals(curSvcMsg.getString(KK0081ETMsg.PCRS_CD)))
		{
			/** 機器提供サービス契約の情報 */
			CAANMsg[] kk0341Info = null;
			// 検索条件マップ
			HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();
			// 検索条件マップに追加
			searchJknMap.put(KK0341ETMsg.KKTK_SVC_CD, new String[]{KKTK_SVC_CD_MBL_UQ});
			searchJknMap.put(KK0341ETMsg.KKTK_SBT_CD, new String[]{KKTK_SBT_CD_MOTIKOMI});

			JKKejbKK0341DBABase jk0341db = new JKKejbKK0341DBABase();
			// 機器提供サービス契約の情報を取得する
			kk0341Info = jk0341db.getKK0341bySvcKei(svcKeiNo, searchJknMap, JKKModelCommon.getOpeDate(inMsg), "4");

			if(kk0341Info.length > 0) 
			{
				return false;
			}
		}
		return true;
	}

	/**
	 * <p>
	 * 番ポ工事取消ステータスチェック処理
	 * 対象のサービス契約に紐付く番ポ工事取消ステータスのチェックを行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 番ポ有無が「有」かつ、番ポ工事．番ポ工事ステータスが"090"(番ポ工事取消)以外かつ番ポ工事.番ポ申込書タイプコードが"6"のレコードが1件でも存在した場合エラー false
	 *          上記以外 true
	 */
	public boolean isChkBmpkjClStat(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isChkBmpkjClStat");

		String svcKeiNo = inMsg.getString(KEY_SVC_KEI_NO);
		if (svcKeiNo == null || "".equals(svcKeiNo))
		{
			return true;
		}

		// サービス契約メッセージ生成
		CAANMsg svcMsg = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約設定
		svcMsg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		svcMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約カレント検索を行う
		CAANMsg curSvcMsg = findByCurrent(svcMsg);

		if (curSvcMsg == null)
		{
			return true;
		}

		// サービスコード「02:電話サービス」の場合
		if (SVC_CD_TEL.equals(curSvcMsg.getString(KK0081ETMsg.SVC_CD)))
		{
			// サービス契約内訳（サービス契約番号）取得処理
			ArrayList<Map<String, String>> rsltMapList = getSvcKeiUcwkSvcKeiNo(inMsg, inContext);

			for (int i = 0; i < rsltMapList.size(); i++)
			{
				// 番ポ有無「1:有」の場合
				if (UM_ARI.equals(rsltMapList.get(i).get(KK0191ETMsg.BMP_UM)))
				{
					// 番ポ工事．番ポ工事ステータスが番ポ工事.番ポ申込書タイプコードが"6"かつ"090"(番ポ工事取消)以外で
					// 番ポ工事を検索しレコードが存在すればエラー
					int cnt = getTuBmpKojiClCnt(inMsg, inContext, rsltMapList.get(i).get(KK0161ETMsg.SVC_KEI_UCWK_NO), TU_T_BMP_KOJI_HAISHI, BMP_KOJI_STAT_BMPKJ_CL);
					if ( cnt > 0 )
					{
						return false;
					}
				}
			}
		}
		return true;
	}

	
	/**
	 * <p>
	 * サービス契約内訳（サービス契約番号）取得処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 取得結果
	 */
	public ArrayList<Map<String, String>> getSvcKeiUcwkSvcKeiNo(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 返却用メッセージ
		ArrayList<Map<String, String>> mapList = new ArrayList<Map<String, String>>();
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0161ETMsg.getTableName());
			// SQL文
			StringBuffer sbSql = new StringBuffer();
			
			sbSql.append(" SELECT  ")
				.append("     KK0161.SVC_KEI_UCWK_NO  ")
				.append("     , KK0161.SVC_KEI_UCWK_STAT  ")
				.append("     , KK0191.BMP_UM ")
				.append(" FROM   KK_T_SVC_KEI_UCWK KK0161 ")
				.append(" INNER JOIN ")
				.append("        KK_T_SVKEIUW_EOH_TEL KK0191 ")
				.append(" ON     KK0161.SVC_KEI_UCWK_NO = KK0191.SVC_KEI_UCWK_NO ")
				.append(" AND    KK0161.GENE_ADD_DTM = KK0191.GENE_ADD_DTM ")
				.append(" WHERE  KK0161.SVC_KEI_NO = ? ")
				.append(" AND    (KK0161.SVC_KEI_UCWK_NO, KK0161.RSV_APLY_YMD || KK0161.GENE_ADD_DTM) = ")
				.append("        ( SELECT KK0161_GENE.SVC_KEI_UCWK_NO, MAX(KK0161_GENE.RSV_APLY_YMD || KK0161_GENE.GENE_ADD_DTM) AS KK0161_MAX ")
				.append("          FROM   KK_T_SVC_KEI_UCWK KK0161_GENE ")
				.append("          WHERE  KK0161_GENE.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ")
				.append("          AND    KK0161_GENE.RSV_APLY_CD = '2' ")
				.append("          AND    KK0161_GENE.RSV_APLY_YMD <= ? ")
				.append("          AND    KK0161_GENE.MK_FLG = '0' ")
				.append("          GROUP BY KK0161_GENE.SVC_KEI_UCWK_NO ")
				.append("        ) ")
				.append(" AND    KK0191.MK_FLG = '0' ");


			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(KK0081ETMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// リスト格納用マップ
			HashMap<String, String> map = null;

			// 取得結果をマップに格納
			while (rsltQuery.next())
			{
				// レコード情報格納用マップを初期化する
				map = new HashMap<String, String>();
				// 取得したレコード情報をセットする
				map.put(KK0161ETMsg.SVC_KEI_UCWK_NO, rsltQuery.getString(1));
				map.put(KK0161ETMsg.SVC_KEI_UCWK_STAT, rsltQuery.getString(2));
				map.put(KK0191ETMsg.BMP_UM, rsltQuery.getString(3));

				// セットしたMapをListに格納する
				mapList.add(map);
			}
			
			return mapList;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	

	/**
	 * <p>
	 * 番ポ工事件数取得処理
	 * 
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 取得結果の件数
	 */
	public int getTuBmpKojiClCnt(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiUcwkNo, String bmpMskmshoTypeCd, String bmpKojiStat)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(TU0011ETMsg.getTableName());
			// SQL文
			StringBuffer sbSql = new StringBuffer();
			
			sbSql.append(" SELECT  ")
				.append("     COUNT(*) AS CNT ")
				.append(" FROM   TU_T_BMP_KOJI TU0011 ")
				.append(" WHERE  TU0011.SVC_KEI_UCWK_NO = ? ")
				.append(" AND    TU0011.BMP_MSKMSHO_TYPE_CD = ? ")
				.append(" AND    TU0011.BMP_KOJI_STAT <> ? ")
				.append(" AND    TU0011.MK_FLG = '0' ");


			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約内訳番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiUcwkNo);
			// パラメータの設定(番ポ申込書タイプコードを指定)
			CAANJDBCUtil.setParam(pstmt, 2, bmpMskmshoTypeCd);
			// パラメータの設定(番ポ工事ステータスを指定)
			CAANJDBCUtil.setParam(pstmt, 3, bmpKojiStat);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 取得結果をマップに格納
			if (rsltQuery.next())
			{
				return rsltQuery.getInt("CNT");
			}
			
			return 0;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	

	/**
	 * <p>
	 * キャンセル取消可能期間の関連制約チェックを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * 
	 * @return true：キャンセル取消可、false：キャンセル取消不可
	 */
	public boolean cancelClPsbPrdChk(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object svcKeiNo)
	{
		// カレントレコード検索パラメータの設定
		CAANMsg msg = new CAANMsg(KK0081ETMsg.class.getName());
		msg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		msg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

		// 「サービス契約」のカレントレコードの検索
		CAANMsg kk0081Current = new JKKejbKK0081DBABase().findByCurrent(msg);

		if (kk0081Current == null)
		{
			return false;
		}
		
		
		// 該当の「サービス契約」が指定する「料金グループ」のカレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0781ETMsg.class.getName());
		inETMsg.set(KK0781ETMsg.PRC_GRP_CD, kk0081Current.getString(KK0081ETMsg.PRC_GRP_CD));
		inETMsg.set(KK0781ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

		// 料金グループのカレント検索を行う
		CAANMsg kk0781Current = new JKKejbKK0781DBABase().findByCurrent(inETMsg);
		
		if (kk0781Current == null)
		{
			return false;
		}
		if (kk0081Current.isNull(KK0081ETMsg.SVC_CANCEL_YMD) || kk0781Current.isNull(KK0781ETMsg.CANCEL_CL_PSB_PRD))
		{
			return false;
		}

		// サービスキャンセル年月日
		String svcCancelYmd = kk0081Current.getString(KK0081ETMsg.SVC_CANCEL_YMD);
		// キャンセル取消可能期間
		String cancelClPsbPrd = kk0781Current.getString(KK0781ETMsg.CANCEL_CL_PSB_PRD);
		
		String judgeYmd = JKKModelCommon.addDay(inCBSMsg, inContext, svcCancelYmd, cancelClPsbPrd);

		// サービス契約．サービスキャンセル年月日 ＋ 料金グループ．キャンセル取消可能期間 ＜ 運用年月日
		// の場合、エラーとする。（判定日 ＜ 運用日の場合はエラーとする）
		if (JPCUtilCommon.isPastDate(judgeYmd, JKKModelCommon.getOpeDate(inCBSMsg), "0"))
		{
			// エラー
			return false;
		}
		// 正常
		return true;
	}

	/**
	 * <p>
	 * 新設工事中の関連制約チェックを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * 
	 * @return true：新設工事完了前のレコードが存在しない場合、false：新設工事完了前のレコードが存在する場合
	 */
	public boolean isNewKojiExists(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// 運用日付
		String opeDate = JKKModelCommon.getOpeDate(inCBSMsg);

		// 該当の「サービス契約」のカレントレコードを取得する。
		JKKejbKK0081DBABase kk0081Dba = new JKKejbKK0081DBABase();
		CAANMsg kk0081Current = kk0081Dba.getKK0081Current(svcKeiNo, opeDate);

		// チェック対象・料金グループコードリスト
		ArrayList<String> tgPrcGrpCdList = new ArrayList<String>();
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHNT_HOME_TYPE);
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHNT_MAISON_TYPE);
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHTV);
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHTV_KCN);
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHTV_RE_SEND);
		//ANK-1918-00-00 ADD START
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE);
		tgPrcGrpCdList.add(JKKModelConst.PRC_GRP_CD_EOHTL);
		//ANK-1918-00-00 ADD END
		
		// 該当の「サービス契約」がネット(ホーム、メゾン、マンション)、電話、テレビ以外の場合、チェック対象外
		if (!tgPrcGrpCdList.contains(kk0081Current.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			return true;
		}

		// 個別検索条件マップ
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();
		// 追加検索条件：工事案件.工事案件種別コード = "新設"
		String[] kojiakSbtCdLsit = {JKKModelConst.KOJIAK_SBT_CD_NEWESTA,
				JKKModelConst.KOJIAK_SBT_CD_ADCHG_NEWESTA
		};
		searchJknMap.put(KU0011ETMsg.KOJIAK_SBT_CD, kojiakSbtCdLsit);
		//ANK-1918-00-00 ADD START
		// 該当の「サービス契約」に紐づくマンションコースを取得する
		CAANMsg retKK0911 = getKK0911WithSvc(kk0081Current);
		//マンション、グローバル・プライベートフラグ
		boolean mansGloPriFlg = false;	
		//グローバル・プライベートの場合
		if((retKK0911 != null)
			&&(IP_HRADSI_CD_PRIV.equals(retKK0911.getString(KK0911ETMsg.IP_HRADSI_CD)) 
			|| IP_HRADSI_CD_GROV.equals(retKK0911.getString(KK0911ETMsg.IP_HRADSI_CD))))
			
		{
			mansGloPriFlg = true;
			// 追加検索条件：工事案件.工事案件ステータス = "登録済"
			String[] kojiakStatList = {
						JKKModelConst.KOJIAK_STAT_ADD_ZM,
			};
			searchJknMap.put(KU0011ETMsg.KOJIAK_STAT, kojiakStatList);
			
		}
		else
		{
			//ANK-1918-00-00 ADD END
			// 追加検索条件：工事案件.工事案件ステータス = "依頼済"〜"現場作業完了済"
			String[] kojiakStatList = {
					JKKModelConst.KOJIAK_STAT_REQ_ZM,
					JKKModelConst.KOJIAK_STAT_TAKCHO_FIN_ZM,
					JKKModelConst.KOJIAK_STAT_KOCOMP_KETEI_ZM,
					JKKModelConst.KOJIAK_STAT_TKKIKI_RSV_ADD_ZM,
					JKKModelConst.KOJIAK_STAT_KR_KEY_HAK_REQ_ZM,
					JKKModelConst.KOJIAK_STAT_GEMBA_WORK_FIN_ZM
			};
			searchJknMap.put(KU0011ETMsg.KOJIAK_STAT, kojiakStatList);
		//ANK-1918-00-00 ADD START
		}
		//ANK-1918-00-00 ADD END
		// 該当の「サービス契約」に紐づく「工事案件」(新設工事、工事未完了)を取得する。
		JKKejbKU0011DBABase ku0011Dba = new JKKejbKU0011DBABase();
		CAANMsg[] ku0011MsgList = ku0011Dba.getKU0011bySvcKei(svcKeiNo, searchJknMap, opeDate, "1");
		
		// 該当の「工事案件」(新設、未完了)が存在しない場合、チェックＯＫ
		if (ku0011MsgList.length == 0)
		{
			return true;
		}
		//ANK-1918-00-00 ADD START
		// グローバル・プライベートの場合該当の「工事案件」(新設、未完了)からマンションから工事案件状態コードを取得
		if(mansGloPriFlg)
		{
			for (CAANMsg ku0011Msg : ku0011MsgList)
				
			{
				// マンション案件状態コードが"依頼済"、"工事会社決定済"以外の場合、チェックＯＫ
				if (!MANS_KOJIAK_STAT.contains(ku0011Msg.getString(KU0011ETMsg.MANS_KOJIAK_STAT_CD)))
				{
					return true;
				}
			}
		}
		//ANK-1918-00-00 ADD END

		// 該当の「工事案件」(新設、未完了)の対象となる、他の「サービス契約」が存在する場合、チェックＯＫ
		for (CAANMsg ku0011Msg : ku0011MsgList)
		{
			// 該当の「工事案件」の対象となる「サービス契約」を取得する。
			CAANMsg[] kk0081MsgList = kk0081Dba.getKK0081byKojiak(ku0011Msg.getString(KU0011ETMsg.KOJIAK_NO), null, opeDate, "1");
			
			// 解約済、キャンセル済を除外する
			kk0081MsgList = kk0081Dba.getKK0081OutDsLCl(kk0081MsgList);
			
			for (CAANMsg kk0081Msg : kk0081MsgList)
			{
				// 処理対象の「サービス契約」以外に、該当の「工事案件」の対象となる「サービス契約」が１件でも存在する場合
				if (!kk0081Msg.getString(KK0081ETMsg.SVC_KEI_NO).equals(svcKeiNo))
				{
					return true;
				}
			}
		}

		// 該当の「工事案件」(新設、未完了)の対象となる、他の「サービス契約」が存在しない場合、チェックＮＧ
		return false;
	}

	/**
	 * <p>
	 * 同一サービス契約回線内訳のサービス存在チェック
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @return true：正常　false：異常
	 */
	public boolean isSameSvcKeiKisuwSonzaiChk(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// パラメータ取得
		String svcKeiNo = inMsg.getString(KK0081ETMsg.SVC_KEI_NO); 	// サービス契約番号
		String opeDate = JKKModelCommon.getOpeDate(inMsg);			// 運用日付

		// 該当の「サービス契約」が使用する「サービス契約回線内訳」を取得する。
		CAANMsg[] KK0251InfoList = new JKKejbKK0251DBABase().getKK0251bySvcKei(svcKeiNo, null, opeDate, "2");
		
		// 回線に紐づかない「サービス契約」は、チェック対象外
		if (KK0251InfoList == null || KK0251InfoList.length == 0)
		{
			return true;
		}

		/* ----------------------------------------------------------------------------------------------------
		 * 当該「サービス契約」が回復・解約取消・キャンセル取消されることにより、
		 * 同一回線で同一サービスを複数保有することを抑止する。
		 * ---------------------------------------------------------------------------------------------------- */
		JKKejbKK0081DBABase kk0081dba = new JKKejbKK0081DBABase();

		// 回復・解約取消・キャンセル取消対象の「サービス契約」のカレントレコードを取得する。
		CAANMsg kk0081Msg = kk0081dba.getKK0081Current(svcKeiNo, opeDate);
		String svcCd = kk0081Msg.getString(KK0081ETMsg.SVC_CD);

		// 個別検索条件マップ
		HashMap<String, String[]> keyMap = new HashMap<String, String[]>();
		// 追加検索条件：サービス契約.料金グループコード = 同一回線・同一サービス複数保有不可となる「料金グループ」の料金グループコード
		// 例）同一回線で、ネット契約であるeo光ネットホームタイプ、eo(eAccess)の「サービス契約」は共存できない
		String[] prcGrpCdList = {
				JKKModelConst.PRC_GRP_CD_EOHNT_HOME_TYPE,
				JKKModelConst.PRC_GRP_CD_EOHNT_MAISON_TYPE,
				JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE,
				JKKModelConst.PRC_GRP_CD_EOADSL_EACCESS,
				JKKModelConst.PRC_GRP_CD_EOADSL_FLETS,
				JKKModelConst.PRC_GRP_CD_EOHTL,
				JKKModelConst.PRC_GRP_CD_EOHTV,
				JKKModelConst.PRC_GRP_CD_EOHTV_KCN,
				JKKModelConst.PRC_GRP_CD_EOHTV_RE_SEND,
		};
		keyMap.put(KK0081ETMsg.PRC_GRP_CD, prcGrpCdList);

		for (CAANMsg KK0251Info : KK0251InfoList)
		{
			// 該当の「サービス契約回線内訳」を使用する「サービス契約」を取得する。
			String svcKeiKaisenUcwkNo = KK0251Info.getString(KK0251ETMsg.SVC_KEI_KAISEN_UCWK_NO);
			CAANMsg[] KK0081InfoList = kk0081dba.getKK0081bySvcKeiKaisenUcwk(svcKeiKaisenUcwkNo, keyMap, opeDate, "1");

			// 解約済、キャンセル済を除外する
			KK0081InfoList = kk0081dba.getKK0081OutDsLCl(KK0081InfoList);

			for (CAANMsg KK0081Info : KK0081InfoList)
			{
				// 回復・解約取消・キャンセル取消対象の「サービス契約」と異なるサービスの「サービス契約」は対象外
				if (!KK0081Info.getString(KK0081ETMsg.SVC_CD).equals(svcCd))
				{
					continue;
				}

				// 回復・解約取消・キャンセル取消対象の「サービス契約」以外に、
				// 同一回線を使用する同一サービスの「サービス契約」が１件でも存在する場合、エラー
				if (!KK0081Info.getString(KK0081ETMsg.SVC_KEI_NO).equals(svcKeiNo))
				{
					return false;
				}
			}
		}

		return true;
	}

	/**
	 * <p>
	 * インターネットオフィス引継ぎチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return チェックエラー場合false。
	 */
	public boolean isChkInOffcHktgi(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isChkInOffcHktgi");

		// サービス契約カレント検索を行う
		CAANMsg curSvcMsg = getKK0081Current(inMsg.getString(KK0081ETMsg.SVC_KEI_NO), JKKModelCommon.getOpeDate(inMsg));

		// サービスコードが"インターネットサービス"以外の場合、チェック対象外
		if (!JKKModelConst.SVC_CD_NET.equals(curSvcMsg.getString(KK0081ETMsg.SVC_CD)))
		{
			return true;
		}

		// 法人サービス契約引継ぎ種別コードが"HT→IO"の場合、チェックエラー
		if (JKKModelConst.HOJINSVKEI_HKTGI_SBT_CD_HT_IO.equals(curSvcMsg.getString(KK0081ETMsg.HOJINSVKEI_HKTGI_SBT_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * 電話単独不可チェック（電話契約登録・回復・解約取消・キャンセル取消時）
	 * </p>
	 * 対象の電話契約がマンションタイプの加入契約、かつ支払方法が全戸一括、居住者一括の場合、
	 * 登録(または回復・解約取消・キャンセル取消)により、同一回線上で電話単独契約とならないこと。
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return true:チェックOK、false:チェックNG
	 */
	public boolean isTelSnglFailChkForTelAdd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		JKKejbKK0081DBABase kk0081dba = new JKKejbKK0081DBABase();
		JKKejbKK0251DBABase kk0251dba = new JKKejbKK0251DBABase();
		JKKejbKK0891DBABase kk0891dba = new JKKejbKK0891DBABase();

		// チェック対象の「サービス契約」カレント取得
		String svcKeiNo = inMsg.getString(KK0081ETMsg.SVC_KEI_NO);
		String opeDate = JKKModelCommon.getOpeDate(inMsg);
		CAANMsg kk0081CurInfo = kk0081dba.getKK0081Current(svcKeiNo, opeDate);

		// 電話契約以外の場合、チェック対象外
		if (!JKKModelConst.SVC_CD_TEL.equals(kk0081CurInfo.getString(KK0081ETMsg.SVC_CD)))
		{
			return true;
		}

		// マンションタイプの加入契約(提供方式契約番号が設定済)以外の場合、チェック対象外
		String tkHoshikiKeiNo = kk0081CurInfo.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO);
		if (tkHoshikiKeiNo == null || "".equals(tkHoshikiKeiNo))
		{
			return true;
		}

		// チェック対象の「サービス契約」が指定する「提供方式契約」を取得する。
		CAANMsg kk0891PriInfo = kk0891dba.getKK0891PrimaryInfo(tkHoshikiKeiNo);

		// 加入契約支払方式コードが"全戸一括"、"居住者一括"以外の場合、チェック対象外
		String kanyuKeiPayHoshikiCd = kk0891PriInfo.getString(KK0891ETMsg.KANYU_KEI_PAY_HOSHIKI_CD);
		if (!(JKKModelConst.KANYU_KEI_PAY_HOSHIKI_CD_ZNGIKT.equals(kanyuKeiPayHoshikiCd) 
				|| JKKModelConst.KANYU_KEI_PAY_HOSHIKI_CD_KYOJUIKT.equals(kanyuKeiPayHoshikiCd)))
		{
			return true;
		}

		// チェック対象の「サービス契約」が使用する「サービス契約回線内訳」を取得する。
		CAANMsg[] kk0251MsgList = kk0251dba.getKK0251bySvcKei(svcKeiNo, null, opeDate, "2");
		for (CAANMsg kk0251Msg : kk0251MsgList)
		{
			// 該当の「サービス契約回線内訳」を使用する「サービス契約」を取得する。
			String svcKeiKaisenUcwkNo = kk0251Msg.getString(KK0251ETMsg.SVC_KEI_KAISEN_UCWK_NO);
			CAANMsg[] kk0081MsgList = kk0081dba.getKK0081bySvcKeiKaisenUcwk(svcKeiKaisenUcwkNo, null, opeDate, "1");

			// 解約済、キャンセル済を除外する
			kk0081MsgList = kk0081dba.getKK0081OutDsLCl(kk0081MsgList);

			for (CAANMsg kk0081Msg : kk0081MsgList)
			{
				// チェック対象の「サービス契約」は除く(チェック結果は変わらないけど。)
				if (svcKeiNo.equals(kk0081Msg.getString(KK0081ETMsg.SVC_KEI_NO)))
				{
					continue;
				}
				// 同一回線を使用するネット契約が存在する（電話単独契約とならない）場合、チェックＯＫ
				if (JKKModelConst.SVC_CD_NET.equals(kk0081Msg.getString(KK0081ETMsg.SVC_CD)))
				{
					return true;
				}
			}
		}

		// 同一回線を使用するネット契約が存在しない（電話単独契約となる）場合、チェックＮＧ
		return false;
	}

	/**
	 * <p>
	 * 解約投入日が指定されたサービス契約番号に紐付く、電話契約の解約予約日以上かを判定する。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @param  svcKeiNo  サービス契約番号
	 * @param  svcEndymd サービス終了年月日
	 * @return true:存在する場合、false:存在しない場合
	 */
	private boolean getKK0081ByKaisenTelRsv(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo, String svcEndymd)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("     KK_T_KAISEN_TG_SVKEI KK0241_01 ");
			sbSql.append("     INNER JOIN KK_T_KAISEN_TG_SVKEI KK0241_02 ");
			sbSql.append("     ON KK0241_02.SVC_KEI_KAISEN_UCWK_NO = KK0241_01.SVC_KEI_KAISEN_UCWK_NO ");
			sbSql.append("     INNER JOIN KK_T_SVC_KEI KK0081 ");
			sbSql.append("     ON KK0081.SVC_KEI_NO = KK0241_02.SVC_KEI_NO ");
			sbSql.append("     INNER JOIN KK_T_IDO_RSV KK1681 ");
			sbSql.append("     ON KK1681.SVC_KEI_NO = KK0081.SVC_KEI_NO ");
			sbSql.append(" WHERE ");
			sbSql.append("     KK0241_01.SVC_KEI_NO = ? ");
			sbSql.append("     AND KK0241_02.SVC_KEI_NO <> ? ");
			sbSql.append("     AND KK0081.SVC_KEI_STAT NOT IN ('910', '920') ");
			sbSql.append("     AND KK0081.SVC_CD = '02' ");
			sbSql.append("     AND KK0241_01.KAISEN_UCWK_USE_STAYMD <= ? ");
			sbSql.append("     AND KK0241_01.KAISEN_UCWK_USE_ENDYMD >= ? ");
			sbSql.append("     AND KK0241_01.MK_FLG = '0' ");
			sbSql.append("     AND KK0241_02.KAISEN_UCWK_USE_STAYMD <= ? ");
			sbSql.append("     AND KK0241_02.KAISEN_UCWK_USE_ENDYMD >= ? ");
			sbSql.append("     AND KK0241_02.MK_FLG = '0' ");
			sbSql.append("     AND KK1681.IDO_RSV_DTL_CD = '007' ");
			sbSql.append("     AND KK1681.IDO_RSV_STAT_CD IN('00','03') ");
			sbSql.append("     AND KK1681.RSV_APLY_YMD <= ? ");
			sbSql.append("     AND KK1681.MK_FLG = '0' ");
			sbSql.append("     AND (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) = ");
			sbSql.append("         (SELECT KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ");
			sbSql.append("          FROM   KK_T_SVC_KEI KK0081_GENE ");
			sbSql.append("          WHERE  KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO ");
			sbSql.append("          AND    KK0081_GENE.RSV_APLY_YMD <= ? ");
			sbSql.append("          AND    KK0081_GENE.RSV_APLY_CD = '2' ");
			sbSql.append("          AND    KK0081_GENE.MK_FLG = '0' ");
			sbSql.append("          GROUP BY KK0081_GENE.SVC_KEI_NO) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);
			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 2, svcKeiNo);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 4, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 5, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 6, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(サービス終了年月日を指定)
			CAANJDBCUtil.setParam(pstmt, 7, svcEndymd);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 8, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			if (rsltQuery.next())
			{
				if(rsltQuery.getInt("CNT") > 0)
				{
					return true;
				}
			}
			return false;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * ネット・電話解約予約チェック
	 * ネットの解約取消時、ネットと電話契約の解約予約が共に存在するかをチェックする。
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @param  svcKeiNo  サービス契約番号
	 * @return false:存在する場合、true:存在しない場合
	 */
	public boolean netTelDslRsvChk(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT  ");
			sbSql.append("     COUNT(*) AS CNT  ");
			sbSql.append(" FROM  ");
			sbSql.append("     KK_T_KAISEN_TG_SVKEI KK0241_01  ");
			sbSql.append("     INNER JOIN KK_T_KAISEN_TG_SVKEI KK0241_02  ");
			sbSql.append("     ON KK0241_02.SVC_KEI_KAISEN_UCWK_NO = KK0241_01.SVC_KEI_KAISEN_UCWK_NO  ");
			sbSql.append("     INNER JOIN KK_T_SVC_KEI KK0081  ");
			sbSql.append("     ON KK0081.SVC_KEI_NO = KK0241_02.SVC_KEI_NO  ");
			sbSql.append("     INNER JOIN KK_T_IDO_RSV KK1681  ");
			sbSql.append("     ON KK1681.SVC_KEI_NO = KK0081.SVC_KEI_NO  ");
			sbSql.append(" WHERE  ");
			sbSql.append("     KK0241_01.SVC_KEI_NO = ?  ");
			sbSql.append("     AND KK0241_02.SVC_KEI_NO <> ?  ");
			sbSql.append("     AND KK0081.SVC_KEI_STAT NOT IN ('910', '920')  ");
			sbSql.append("     AND KK0241_01.KAISEN_UCWK_USE_STAYMD <= ?  ");
			sbSql.append("     AND KK0241_01.KAISEN_UCWK_USE_ENDYMD >= ?  ");
			sbSql.append("     AND KK0241_01.MK_FLG = '0'  ");
			sbSql.append("     AND KK0241_02.KAISEN_UCWK_USE_STAYMD <= ?  ");
			sbSql.append("     AND KK0241_02.KAISEN_UCWK_USE_ENDYMD >= ?  ");
			sbSql.append("     AND KK0241_02.MK_FLG = '0'  ");
			sbSql.append("     AND EXISTS ( ");
			sbSql.append("         SELECT 1  ");
			sbSql.append("         FROM KK_T_SVC_KEI KK0081  ");
			sbSql.append("         INNER JOIN KK_T_IDO_RSV KK1681  ");
			sbSql.append("         ON KK1681.SVC_KEI_NO = KK0081.SVC_KEI_NO  ");
			sbSql.append("         WHERE  KK0081.SVC_KEI_NO = KK0241_01.SVC_KEI_NO  ");
			sbSql.append("         AND    KK0081.SVC_CD = '02'  ");
			sbSql.append("         AND    KK1681.IDO_RSV_DTL_CD = '007'  ");
			sbSql.append("         AND    KK1681.IDO_RSV_STAT_CD IN('00','03')  ");
			sbSql.append("         AND    KK1681.MK_FLG = '0'  ");
			sbSql.append("         AND   (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) =  ");
			sbSql.append("               (SELECT KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX  ");
			sbSql.append("                FROM   KK_T_SVC_KEI KK0081_GENE  ");
			sbSql.append("                WHERE  KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO  ");
			sbSql.append("                AND    KK0081_GENE.RSV_APLY_YMD <= ?  ");
			sbSql.append("                AND    KK0081_GENE.RSV_APLY_CD = '2'  ");
			sbSql.append("                AND    KK0081_GENE.MK_FLG = '0'  ");
			sbSql.append("                GROUP BY KK0081_GENE.SVC_KEI_NO)  ");
			sbSql.append("         ) ");
			sbSql.append("     AND EXISTS (  ");
			sbSql.append("         SELECT 1  ");
			sbSql.append("         FROM KK_T_SVC_KEI KK0081  ");
			sbSql.append("         INNER JOIN KK_T_IDO_RSV KK1681  ");
			sbSql.append("         ON KK1681.SVC_KEI_NO = KK0081.SVC_KEI_NO  ");
			sbSql.append("         WHERE  KK0081.SVC_KEI_NO = KK0241_02.SVC_KEI_NO  ");
			sbSql.append("         AND    KK0081.SVC_CD = '01'  ");
			sbSql.append("         AND    KK1681.IDO_RSV_DTL_CD = '007'  ");
			sbSql.append("         AND    KK1681.IDO_RSV_STAT_CD IN('00','03')  ");
			sbSql.append("         AND    KK1681.MK_FLG = '0'  ");
			sbSql.append("         AND   (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) =  ");
			sbSql.append("               (SELECT KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX  ");
			sbSql.append("                FROM   KK_T_SVC_KEI KK0081_GENE  ");
			sbSql.append("                WHERE  KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO  ");
			sbSql.append("                AND    KK0081_GENE.RSV_APLY_YMD <= ?  ");
			sbSql.append("                AND    KK0081_GENE.RSV_APLY_CD = '2'  ");
			sbSql.append("                AND    KK0081_GENE.MK_FLG = '0'  ");
			sbSql.append("                GROUP BY KK0081_GENE.SVC_KEI_NO)  ");
			sbSql.append("         ) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);
			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 2, svcKeiNo);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 4, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 5, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 6, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 7, JKKModelCommon.getOpeDate(inMsg));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 8, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			if (rsltQuery.next())
			{
				if(rsltQuery.getInt("CNT") > 0)
				{
					return false;
				}
			}
			return true;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
	/**
	 * <p>
	 * 複数ルータチェック
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return true:チェックOK、false:チェックNG
	 */
	public boolean hukusuRouterChk(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		JKKejbKK0341DBABase kk0341dba = new JKKejbKK0341DBABase();
		String opeDate = JKKModelCommon.getOpeDate(inMsg);

		// 追加検索条件：機器提供サービス契約.機器提供サービスコード = 機器提供サービスコード（"C014"：ＢＢＲ）
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();
		searchJknMap.put(KK0341ETMsg.KKTK_SVC_CD, new String[] {JKKModelConst.KKTK_SVC_CD_BBR});
		
		// 該当の「サービス契約」に紐づく「機器提供サービス契約」を取得する。
		CAANMsg[] kk0341MsgList = kk0341dba.getKK0341bySvcKei(svcKeiNo, searchJknMap, opeDate, "4");
		
		// 解約済、キャンセル済を除外する
		kk0341MsgList = kk0341dba.getKK0341OutDsLCl(kk0341MsgList);
		
		int hukusuRouterCnt = 0;
		
		// ベーシックルーター（レンタル：料金コースコード＝"C24"、"C25"）が存在するかを判定する
		for(CAANMsg kk0341Msg : kk0341MsgList) 
		{
			if (JKKModelConst.PCRS_CD_EOH_BROUTER_100M_RENT.equals(kk0341Msg.getString(KK0341ETMsg.PCRS_CD)) || 
					JKKModelConst.PCRS_CD_EOH_BROUTER_1G_RENT.equals(kk0341Msg.getString(KK0341ETMsg.PCRS_CD)))
			{
				hukusuRouterCnt++;
				break;
			}
		}
		
		// 無線ルーター（レンタル：料金コースコード＝"C22"、"C23"、"C42"）が存在するかを判定する
		for(CAANMsg kk0341Msg : kk0341MsgList) 
		{
			if (JKKModelConst.PCRS_CD_EOH_MROUTER_100M_RENT.equals(kk0341Msg.getString(KK0341ETMsg.PCRS_CD)) || 
					JKKModelConst.PCRS_CD_EOH_MROUTER_1G_RENT.equals(kk0341Msg.getString(KK0341ETMsg.PCRS_CD)) ||
					JKKModelConst.PCRS_CD_EOH_OLDMROUTER_100M_RENT.equals(kk0341Msg.getString(KK0341ETMsg.PCRS_CD)))
			{
				hukusuRouterCnt++;
				break;
			}
		}
		
		// 共に存在する場合はエラー
		if (hukusuRouterCnt > 1)
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * <p>
	 * 料金計算日チェックを行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return true:チェックOK、false:チェックNG
	 */
	public boolean isEventYmdChk(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbKK0081KRCK#isEventYmdChk");

		// 異動区分が「登録内容修正」または「サービス情報訂正」以外はチェック対象外
		if (!(JKKModelConst.IDO_DIV_ADD_NAIYO_SHUSEI.equals(inMsg.getString(KK0081ETMsg.IDO_DIV)) ||
				JKKModelConst.IDO_DIV_SVC_TEISE.equals(inMsg.getString(KK0081ETMsg.IDO_DIV))))
		{
			return true;
		}
		
		JKKejbKK0081DBABase kk0081dba = new JKKejbKK0081DBABase();
		String svcKeiNo = inMsg.getString(KK0081ETMsg.SVC_KEI_NO);
		// チェック対象の「サービス契約」カレント取得
		String opeDate = JKKModelCommon.getOpeDate(inMsg);
		
		CAANMsg kk0081CurInfo = kk0081dba.getKK0081Current(svcKeiNo, opeDate);
		
		String svc_kei_stat = kk0081CurInfo.getString(KK0081ETMsg.SVC_KEI_STAT);
		
		// サービス契約ステータスが「解約済み」以外はチェック対象外
		if (!JKKModelConst.SVC_KEI_STAT_DSL_ZM.equals(svc_kei_stat))
		{
			return true;
		}
		
		// サービス契約ステータスが「解約済み」かつ解約理由コードが「強制解約」はチェック対象外
		if (JKKModelConst.SVC_KEI_STAT_DSL_ZM.equals(svc_kei_stat) && 
				JKKModelConst.SVC_DLRE_CD_KSI_DSL.equals(kk0081CurInfo.getString(KK0081ETMsg.SVC_DLRE_CD)))
		{
			return true;
		}
		
		String inPnltyCd = inMsg.getString(KK0081ETMsg.PNLTY_HASSEI_CD);
		
		// 入力値の違約金発生コードがカレントレコードの違約金発生コードと同じ場合はチェック対象外
		if (inPnltyCd.equals(kk0081CurInfo.getString(KK0081ETMsg.PNLTY_HASSEI_CD)))
		{
			return true;
		}
		
		// 解約起算年月日の年月を取得（解約データは必ず設定されている）
		String strYm = kk0081CurInfo.getString(KK0081ETMsg.SVC_DSL_KISAN_YMD).substring(0, 6);
		
		// イベント年月日を取得
		String eventYmd = getEventYmd(inContext, strYm);

		// イベント年月日が取得できない場合、比較ができない為trueを返却する
		if (null == eventYmd)
		{
			return true;
		}

		// 判定日 ＞ イベント年月日の場合はfalseを返却する
		if (JPCUtilCommon.isFutureDate(opeDate, eventYmd, "0"))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * 料金スケジュール定義から、指定した請求年月でイベント年月日を取得します。
	 * </p>
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyYm 検索条件の請求年月
	 * @return 該当するレコードのイベント年月日
	 */
	private String getEventYmd(AgentDispatchContext inContext, String seikyYm)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(CH0501ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     CH0501.EVENT_YMD ");
			sbSql.append(" FROM ");
			sbSql.append("     CH_M_PRC_SCHDL_TEIGI CH0501 ");
			sbSql.append(" WHERE ");
			sbSql.append("     CH0501.EVENT_CD = '03' ");
			sbSql.append("     AND (CH0501.EVENT_CD, CH0501.EVENT_YMD) = ");
			sbSql.append("         (SELECT CH0501_TMP.EVENT_CD, MAX(CH0501_TMP.EVENT_YMD) AS MAX_EVENT_YMD ");
			sbSql.append("          FROM CH_M_PRC_SCHDL_TEIGI CH0501_TMP ");
			sbSql.append("          WHERE CH0501_TMP.EVENT_CD = CH0501.EVENT_CD ");
			sbSql.append("          AND   CH0501_TMP.SEIKY_YM <= ? ");
			sbSql.append("          AND   CH0501_TMP.MK_FLG = '0' ");
			sbSql.append("          GROUP BY CH0501_TMP.EVENT_CD) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(引数の請求年月を指定)
			CAANJDBCUtil.setParam(pstmt, 1, seikyYm);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// レコードが取得できなかった場合nullを返却
			if (!rsltQuery.next())
			{
				return null;
			}
			
			// 取得したイベント年月日を返却
			return rsltQuery.getString(CH0501ETMsg.EVENT_YMD);
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	// IT2-2014-0000340 ADD START
	/**
	 * <p>
	 * 料金スケジュール定義から、運用日付で直近の料金計算の請求年月を取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param opeDate 運用日付
	 * @return 該当するレコードの請求年月
	 */
	private String getSeikyYm(CAANMsg inMsg, AgentDispatchContext inContext, String opeDate)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(CH0501ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT ");
			sbSql.append("     CH0501.SEIKY_YM ");
			sbSql.append(" FROM ");
			sbSql.append("     CH_M_PRC_SCHDL_TEIGI CH0501 ");
			sbSql.append(" WHERE ");
			sbSql.append("     CH0501.EVENT_CD = '03' ");
			sbSql.append("     AND (CH0501.EVENT_CD, CH0501.EVENT_YMD) = ");
			sbSql.append("         (SELECT CH0501_TMP.EVENT_CD, MAX(CH0501_TMP.EVENT_YMD) AS MIN_EVENT_YMD ");
			sbSql.append("          FROM CH_M_PRC_SCHDL_TEIGI CH0501_TMP ");
			sbSql.append("          WHERE CH0501_TMP.EVENT_CD = CH0501.EVENT_CD ");
			sbSql.append("          AND   CH0501_TMP.EVENT_YMD < ? ");
			sbSql.append("          AND   CH0501_TMP.MK_FLG = '0' ");
			sbSql.append("          GROUP BY CH0501_TMP.EVENT_CD) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 1, opeDate);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// レコードが取得できなかった場合nullを返却
			if (!rsltQuery.next())
			{
				return null;
			}

			// 取得した請求年月を返却
			return rsltQuery.getString(CH0501ETMsg.SEIKY_YM);
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}	
	// IT2-2014-0000340 ADD END
	
	// ANK-3136-00-00 2017/12/05 ADD START
	/**
	 * <p>
	 * "指定された"サービス契約番号"に紐づく「工事案件」に設備流用ありが存在するかの判定を行います。
	 * </p>
	 * @param inETMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 * @return boolean サービス契約番号"に紐づく「工事案件」の
	 *                  設備流用ありが存在しない場合false、存在する場合true。
	 */
	public boolean ischkExistsEquipRyuyo(CAANMsg inETMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// 設備流用チェックの結果を返却
		return new JKKejbShosaChkBase().ischkExistsEquipRyuyo(inETMsg, svcKeiNo);
	}
	// ANK-3136-00-00 2017/12/05 ADD END
}