/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbIdoRestrictDao
*	ソースファイル名：JKKejbIdoRestrictDao.java
*	作成者			：富士通
*	日付			：2011年11月22日
*＜機能概要＞
*	異動可否判定チェックのデータアクセスクラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/22	FJ)			新規作成
*	v4.00.00	2012/01/23	FJ）藤本	ST1-2012-0000846
*	v4.00.01	2013/02/01	FJ）沖田 	IT1-2013-0000186
*	v5.00.00	2013/03/12	FJ）竹内	ANK-1429-00-00
*	v5.00.01	2013/03/25	FJ）阿部	ST4-2013-0000161
*	v5.00.02	2013/04/30	FJ）竹内	OT-2013-0000675
*   v7.00.00    2013/11/18  FJ）沖田    ANK-1578-00-00
*  v71.00.00    2024/04/08  FJ）渋谷    ANK-4468-00-00
*   v74.00.00   2025/01/06  FJ)森下     ANK-4592-00-00
**********************************************************************/

package eo.ejb.common.entity;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbDBAccess;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.ejb.cbm.entity.KK0011ETMsg;
import eo.ejb.cbm.entity.KK0021ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0081LE;
import eo.ejb.cbm.entity.KK0091ETMsg;
import eo.ejb.cbm.entity.KK0161ETMsg;
import eo.ejb.cbm.entity.KK0161LE;
import eo.ejb.cbm.entity.KK0251ETMsg;
import eo.ejb.cbm.entity.KK0321ETMsg;
import eo.ejb.cbm.entity.KK0321LE;
import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbm.entity.KK0341LE;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbm.entity.KK0351LE;
import eo.ejb.cbm.entity.KK0401ETMsg;
import eo.ejb.cbm.entity.KK0401LE;
import eo.ejb.cbm.entity.KK0451ETMsg;
import eo.ejb.cbm.entity.KK0451LE;
import eo.ejb.cbm.entity.KK0791ETMsg;
import eo.ejb.cbm.entity.KK0821ETMsg;
import eo.ejb.cbm.entity.KK0841ETMsg;
import eo.ejb.cbm.entity.KK1631ETMsg;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KK2101ETMsg;
import eo.ejb.cbm.entity.KK2811ETMsg;
import eo.ejb.cbm.entity.KK2811LE;
import eo.ejb.cbm.entity.KU0081ETMsg;
import eo.ejb.cbm.entity.KU0091ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.JKKejbBusinessException;
import eo.ejb.common.db.JKKejbKK0011DBABase;
import eo.ejb.common.db.JKKejbKK0021DBABase;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.db.JKKejbKK0091DBABase;
import eo.ejb.common.db.JKKejbKK0161DBABase;
import eo.ejb.common.db.JKKejbKK0251DBABase;
import eo.ejb.common.db.JKKejbKK0341DBABase;
import eo.ejb.common.db.JKKejbKK0351DBABase;
import eo.ejb.common.db.JKKejbKK0401DBABase;
import eo.ejb.common.db.JKKejbKK0451DBABase;
import eo.ejb.common.db.JKKejbKK0791DBABase;
import eo.ejb.common.db.JKKejbKK0801DBABase;
import eo.ejb.common.db.JKKejbKK0821DBABase;
import eo.ejb.common.db.JKKejbKK0841DBABase;
import eo.ejb.common.db.JKKejbKK1631DBABase;
import eo.ejb.common.db.JKKejbKK1681DBABase;
import eo.ejb.common.db.JKKejbKK2101DBABase;
import eo.ejb.common.db.JKKejbKK2811DBABase;

/**
 * <p>
 * 異動可否判定チェックのデータアクセスクラスです。
 * </p>
 * @author 富士通
 */
public abstract class JKKejbIdoRestrictDao extends JKKejbIdoRestrictBase
{

	/**
	 * <p>
	 * お客様のデータ設定を行います。
	 * </p>
	 */
	protected void setDataCK0011()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataCK0011");

		// お客様に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_CK0011);
	}

	/**
	 * <p>
	 * サービス契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0081()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0081");

		CAANMsg ret = null;

		if (getKk0081_gene_add_dtm() == null)
		{
			// カレントレコードの取得
			ret = getCurrentDataKK0081(getSvc_kei_no());
		}
		else
		{
			// プライマリレコードの取得
			ret = getPrimaryDataKK0081(getSvc_kei_no(), getKk0081_gene_add_dtm());
		}

		// 異動区分
		setIdo_div(ret.getString(KK0081ETMsg.IDO_DIV));
		// SYSID
		setSysid(ret.getString(KK0081ETMsg.SYSID));
		// 申込明細番号
		setMskm_dtl_no(ret.getString(KK0081ETMsg.MSKM_DTL_NO));
		// 契約ステータス
		setKei_stat(ret.getString(KK0081ETMsg.SVC_KEI_STAT));
		// サービスコード
		setSvc_cd(ret.getString(KK0081ETMsg.SVC_CD));
		// 料金グループコード
		setPrc_grp_cd(ret.getString(KK0081ETMsg.PRC_GRP_CD));
		// 料金コースコード
		setKk0081_pcrs_cd(ret.getString(KK0081ETMsg.PCRS_CD));
		// 料金プランコード
		setKk0081_pplan_cd(ret.getString(KK0081ETMsg.PPLAN_CD));

		// サービス契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0081);

		// お客様のデータ設定
		setDataCK0011();

		// 課金先の情報を設定
		CAANMsg kk0321 = getCurrentDataKK0321(getSvc_kei_no());

		if (kk0321 != null)
		{
			// 請求契約番号
			setSeiky_kei_no(kk0321.getString(KK0321ETMsg.SEIKY_KEI_NO));
			// 請求契約のデータ設定
			setDataKK0491();
		}
		
		// サービス契約に紐付く住所変更予約の取得
		setAdchgDataKK2101(ADCHG_DTL_SBT_CD_SVC, getSvc_kei_no());
	}

	/**
	 * <p>
	 * サービス契約内訳のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0161()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0161");

		if (getSvc_kei_ucwk_no() != null)
		{
			CAANMsg ret = null;

			if (getKk0161_gene_add_dtm() == null)
			{
				// カレントレコードの取得
				ret = getCurrentDataKK0161(getSvc_kei_ucwk_no());
			}
			else
			{
				// プライマリレコードの取得
				ret = getPrimaryDataKK0161(getSvc_kei_ucwk_no(), getKk0161_gene_add_dtm());
			}

			// 異動区分
			setIdo_div(ret.getString(KK0161ETMsg.IDO_DIV));
			// 申込明細番号
			setMskm_dtl_no(ret.getString(KK0161ETMsg.MSKM_DTL_NO));
			// サービス契約番号
			setSvc_kei_no(ret.getString(KK0161ETMsg.SVC_KEI_NO));
			// 契約ステータス
			setKei_stat(ret.getString(KK0161ETMsg.SVC_KEI_UCWK_STAT));
			// 料金コースコード
			setKk0161_pcrs_cd(ret.getString(KK0161ETMsg.PCRS_CD));
			// 料金プランコード
			setKk0161_pplan_cd(ret.getString(KK0161ETMsg.PPLAN_CD));
		}

		// サービス契約情報を設定
		setDataKK0081();
		// サービス契約内訳に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0161);
	}

	/**
	 * <p>
	 * 課金先のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0321()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0321");

		// プライマリレコードの取得
		CAANMsg ret = getPrimaryDataKK0321(getKakins_no());
		// サービス契約番号
		setSvc_kei_no(ret.getString(KK0321ETMsg.SVC_KEI_NO));
		// 請求契約番号
		setSeiky_kei_no(ret.getString(KK0321ETMsg.SEIKY_KEI_NO));

		// 請求契約のデータ設定
		setDataKK0491();
	}

	/**
	 * <p>
	 * 機器提供サービス契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0341()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0341");

		if (getKktk_svc_kei_no() != null)
		{
			CAANMsg ret = null;

			if (getKk0341_gene_add_dtm() == null)
			{
				// カレントレコードの取得
				ret = getCurrentDataKK0341(getKktk_svc_kei_no());
			}
			else
			{
				// プライマリレコードの取得
				ret = getPrimaryDataKK0341(getKktk_svc_kei_no(), getKk0341_gene_add_dtm());
			}

			// 異動区分
			setIdo_div(ret.getString(KK0341ETMsg.IDO_DIV));
			// 申込明細番号
			setMskm_dtl_no(ret.getString(KK0341ETMsg.MSKM_DTL_NO));
			// 親契約識別コード
			setTg_kei_skbt_cd(ret.getString(KK0341ETMsg.OYA_KEI_SKBT_CD));
			// サービス契約番号
			setSvc_kei_no(ret.getString(KK0341ETMsg.SVC_KEI_NO));
			// サービス契約内訳番号
			setSvc_kei_ucwk_no(ret.getString(KK0341ETMsg.SVC_KEI_UCWK_NO));
			// オプションサービス契約番号
			setOp_svc_kei_no(ret.getString(KK0341ETMsg.OP_SVC_KEI_NO));
			// サービス契約回線内訳番号
			setSvc_kei_kaisen_ucwk_no(ret.getString(KK0341ETMsg.SVC_KEI_KAISEN_UCWK_NO));
			// 契約ステータス
			setKei_stat(ret.getString(KK0341ETMsg.KKTK_SVC_KEI_STAT));
			// 機器提供サービスコード
			setKktk_svc_cd(ret.getString(KK0341ETMsg.KKTK_SVC_CD));
			// 料金コースコード
			setKk0341_pcrs_cd(ret.getString(KK0341ETMsg.PCRS_CD));
			// 料金プランコード
			setKk0341_pplan_cd(ret.getString(KK0341ETMsg.PPLAN_CD));
			// 機器提供種別コード
			setKktk_sbt_cd(ret.getString(KK0341ETMsg.KKTK_SBT_CD));
		}

		// 対象契約識別コードに従って親契約の情報を設定
		if (TG_KEI_SKBT_CD_01.equals(getTg_kei_skbt_cd()))
		{
			// サービス契約情報を設定
			setDataKK0081();
		}
		else if (TG_KEI_SKBT_CD_03.equals(getTg_kei_skbt_cd()))
		{
			// サービス契約内訳情報を設定
			setDataKK0161();
		}
		else if (TG_KEI_SKBT_CD_04.equals(getTg_kei_skbt_cd()))
		{
			// オプションサービス契約情報を設定
			setDataKK0351();
		}
		else if (TG_KEI_SKBT_CD_02.equals(getTg_kei_skbt_cd()))
		{
			// 機器提供サービス契約.機器提供サービスコード
			String kktkSvcCd = getKktk_svc_cd();
			
			// 該当の「サービス契約回線内訳」を使用する「サービス契約」を取得する。
			CAANMsg[] kk0081MsgList = new JKKejbKK0081DBABase().getKK0081bySvcKeiKaisenUcwk(getSvc_kei_kaisen_ucwk_no(), null, getOpeDate(), "0");
			for (CAANMsg kk0081Msg : kk0081MsgList)
			{
				// 該当の「サービス契約」で、処理対象の回線機器を使用する場合、該当の「サービス契約」に紐づく「異動予約」を取得する。
				if (isPcrsTgKktkSvc(kk0081Msg.getString(KK0081ETMsg.PCRS_CD), kktkSvcCd, getOpeDate()))
				{
					// サービス契約番号
					setSvc_kei_no(kk0081Msg.getString(KK0081ETMsg.SVC_KEI_NO));
					setDataKK0081();
				}
			}
		}

		// 機器提供サービス契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0341);
	}

	/**
	 * <p>
	 * オプションサービス契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0351()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0351");

		if (getOp_svc_kei_no() != null)
		{
			CAANMsg ret = null;

			if (getKk0351_gene_add_dtm() == null)
			{
				// カレントレコードの取得
				ret = getCurrentDataKK0351(getOp_svc_kei_no());
			}
			else
			{
				// プライマリレコードの取得
				ret = getPrimaryDataKK0351(getOp_svc_kei_no(), getKk0351_gene_add_dtm());
			}

			// 異動区分
			setIdo_div(ret.getString(KK0351ETMsg.IDO_DIV));
			// 申込明細番号
			setMskm_dtl_no(ret.getString(KK0351ETMsg.MSKM_DTL_NO));
			// 親契約識別コード
			setTg_kei_skbt_cd(ret.getString(KK0351ETMsg.OYA_KEI_SKBT_CD));
			// サービス契約番号
			setSvc_kei_no(ret.getString(KK0351ETMsg.SVC_KEI_NO));
			// サービス契約内訳番号
			setSvc_kei_ucwk_no(ret.getString(KK0351ETMsg.SVC_KEI_UCWK_NO));
			// 契約ステータス
			setKei_stat(ret.getString(KK0351ETMsg.OP_SVC_KEI_STAT));
			// オプションサービスコード
			setOp_svc_cd(ret.getString(KK0351ETMsg.OP_SVC_CD));
			// 料金コースコード
			setKk0351_pcrs_cd(ret.getString(KK0351ETMsg.PCRS_CD));
			// 料金プランコード
			setKk0351_pplan_cd(ret.getString(KK0351ETMsg.PPLAN_CD));
		}

		// 対象契約識別コードに従って親契約の情報を設定
		if (TG_KEI_SKBT_CD_01.equals(getTg_kei_skbt_cd()))
		{
			// サービス契約情報を設定
			setDataKK0081();
		}
		else if (TG_KEI_SKBT_CD_03.equals(getTg_kei_skbt_cd()))
		{
			// サービス契約内訳情報を設定
			setDataKK0161();
		}

		// オプションサービス契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0351);
	}

	/**
	 * <p>
	 * サブオプションサービス契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0401()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0401");

		if (getSbop_svc_kei_no() != null)
		{
			CAANMsg ret = null;

			if (getKk0401_gene_add_dtm() == null)
			{
				// カレントレコードの取得
				ret = getCurrentDataKK0401(getOp_svc_kei_no(), getSbop_svc_kei_no());
			}
			else
			{
				// プライマリレコードの取得
				ret = getPrimaryDataKK0401(getOp_svc_kei_no(), getSbop_svc_kei_no(), getKk0401_gene_add_dtm());
			}

			// 異動区分
			setIdo_div(ret.getString(KK0401ETMsg.IDO_DIV));
			// 申込明細番号
			setMskm_dtl_no(ret.getString(KK0401ETMsg.MSKM_DTL_NO));
			// 契約ステータス
			setKei_stat(ret.getString(KK0401ETMsg.SBOP_SVC_KEI_STAT));
			// サブオプションサービスコード
			setSbop_svc_cd(ret.getString(KK0401ETMsg.SBOP_SVC_CD));
			// 料金コースコード
			setKk0401_pcrs_cd(ret.getString(KK0401ETMsg.PCRS_CD));
			// 料金プランコード
			setKk0401_pplan_cd(ret.getString(KK0401ETMsg.PPLAN_CD));
		}

		// オプションサービス契約情報の設定
		setDataKK0351();
		// サブオプションサービス契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0401);
	}

	/**
	 * <p>
	 * 割引サービス契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0451()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0451");

		if (getWrib_svc_kei_no() != null)
		{
			CAANMsg ret = null;

			if (getKk0451_gene_add_dtm() == null)
			{
				// カレントレコードの取得
				ret = getCurrentDataKK0451(getWrib_svc_kei_no());
			}
			else
			{
				// プライマリレコードの取得
				ret = getPrimaryDataKK0451(getWrib_svc_kei_no(), getKk0451_gene_add_dtm());
			}

			// 異動区分
			setIdo_div(ret.getString(KK0451ETMsg.IDO_DIV));
			// 申込明細番号
			setMskm_dtl_no(ret.getString(KK0451ETMsg.MSKM_DTL_NO));
			// 契約ステータス
			setKei_stat(ret.getString(KK0451ETMsg.WRIB_SVC_KEI_STAT));
			// 割引サービスコード
			setWrib_svc_cd(ret.getString(KK0451ETMsg.WRIB_SVC_CD));
			// 料金コースコード
			setKk0451_pcrs_cd(ret.getString(KK0451ETMsg.PCRS_CD));
			// 料金プランコード
			setKk0451_pplan_cd(ret.getString(KK0451ETMsg.PPLAN_CD));
		}

		// 割引タイプコードの設定
		setWrib_type_cd(getWribTypeCd());

		// 対象契約識別コードに従って親契約の情報を設定
		if (TG_KEI_SKBT_CD_01.equals(getTg_kei_skbt_cd()))
		{
			// サービス契約情報を設定
			setDataKK0081();
		}
		else if (TG_KEI_SKBT_CD_03.equals(getTg_kei_skbt_cd()))
		{
			// サービス契約内訳情報を設定
			setDataKK0161();
		}
		else if (TG_KEI_SKBT_CD_04.equals(getTg_kei_skbt_cd()))
		{
			// オプションサービス契約情報を設定
			setDataKK0351();
		}
		else if (TG_KEI_SKBT_CD_05.equals(getTg_kei_skbt_cd()))
		{
			// サブオプションサービス契約情報を設定
			setDataKK0401();
		}
		else if (TG_KEI_SKBT_CD_06.equals(getTg_kei_skbt_cd()))
		{
			// 機器提供サービス契約情報を設定
			setDataKK0341();
		}

		// 割引サービス契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0451);
	}

	/**
	 * <p>
	 * 請求契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK0491()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK0491");

		// 請求契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK0491);
	}

	/**
	 * <p>
	 * 機器オプションサービス契約のデータ設定を行います。
	 * </p>
	 */
	protected void setDataKK2811()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setDataKK2811");

		if (getKkop_svc_kei_no() != null)
		{
			CAANMsg ret = null;

			if (getKk2811_gene_add_dtm() == null)
			{
				// カレントレコードの取得
				ret = getCurrentDataKK2811(getKkop_svc_kei_no());
			}
			else
			{
				// プライマリレコードの取得
				ret = getPrimaryDataKK2811(getKktk_svc_kei_no(), getKk2811_gene_add_dtm());
			}

			// 機器提供サービス契約番号
			setKktk_svc_kei_no(ret.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
		}

		// 機器提供サービス契約情報を設定
		setDataKK0341();
		// 機器オプションサービス契約に紐付く異動予約の取得
		setReserveDataKK1681(TG_SKBT_CD_KK2811);
		
	}
	
	/**
	 * <p>
	 * 申込明細番号から申込種別コードを取得します。
	 * </p>
	 * @return 申込種別コード
	 */
	protected String getMskmSbtCd()
	{
		// 申込明細カレントレコードの取得
		CAANMsg kk0021 = getCurrentDataKK0021(getMskm_dtl_no());

		if (kk0021 == null)
		{
			return null;
		}

		// 申込カレントレコードの取得
		CAANMsg kk0011 = getCurrentDataKK0011(kk0021.getString(KK0021ETMsg.MSKM_NO));

		if (kk0011 == null)
		{
			return null;
		}

		return kk0011.getString(KK0011ETMsg.MSKM_SBT_CD);
	}

	/**
	 * <p>
	 * 割引サービスの割引タイプコードを取得します。
	 * </p>
	 * @return 割引タイプコード
	 */
	protected String getWribTypeCd()
	{
		CAANMsg kk0841 = getCurrentDataKK0841(getWrib_svc_cd());
		return kk0841.getString(KK0841ETMsg.WRIB_TYPE_CD);
	}

	/**
	 * <p>
	 * 指定された申込のカレントレコード取得を行います。
	 * </p>
	 * @param p_mskmNo 申込番号
	 * @return 指定された申込のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0011(String p_mskmNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0011ETMsg.class.getName());
		msg.set(KK0011ETMsg.MSKM_NO, p_mskmNo);
		// カレントレコードの検索
		return new JKKejbKK0011DBABase().findByCurrent(msg);
	}

	/**
	 * <p>
	 * 指定された申込明細のカレントレコード取得を行います。
	 * </p>
	 * @param p_mskmDtlNo 申込明細番号
	 * @return 指定された申込明細のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0021(String p_mskmDtlNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0021ETMsg.class.getName());
		msg.set(KK0021ETMsg.MSKM_DTL_NO, p_mskmDtlNo);
		// カレントレコードの検索
		return new JKKejbKK0021DBABase().findByCurrent(msg);
	}

	/**
	 * <p>
	 * 指定されたサービス契約のカレントレコード取得を行います。
	 * </p>
	 * @param p_svcKeiNo サービス契約番号
	 * @return 指定されたサービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0081(String p_svcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0081ETMsg.class.getName());
		msg.set(KK0081ETMsg.SVC_KEI_NO, p_svcKeiNo);
		msg.set(KK0081ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0081DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサービス契約のプライマリレコード取得を行います。
	 * </p>
	 * @param p_svcKeiNo サービス契約番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定されたサービス契約のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0081(String p_svcKeiNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0081ETMsg.class.getName());
		msg.set(KK0081ETMsg.SVC_KEI_NO, p_svcKeiNo);
		msg.set(KK0081ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// プライマリレコードの検索
		CAANMsg ret = new KK0081LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0081ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサービス契約内訳のカレントレコード取得を行います。
	 * </p>
	 * @param p_svcKeiUcwkNo サービス契約内訳番号
	 * @return 指定されたサービス契約内訳のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0161(String p_svcKeiUcwkNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0161ETMsg.class.getName());
		msg.set(KK0161ETMsg.SVC_KEI_UCWK_NO, p_svcKeiUcwkNo);
		msg.set(KK0161ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0161DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサービス契約内訳のプライマリレコード取得を行います。
	 * </p>
	 * @param p_svcKeiUcwkNo サービス契約内訳番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定されたサービス契約内訳のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0161(String p_svcKeiUcwkNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0161ETMsg.class.getName());
		msg.set(KK0161ETMsg.SVC_KEI_UCWK_NO, p_svcKeiUcwkNo);
		msg.set(KK0161ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// プライマリレコードの検索
		CAANMsg ret = new KK0161LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0161ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサービス契約に紐付く課金先のカレントレコード取得を行います。
	 * </p>
	 * @param p_svcKeiNo サービス契約番号
	 * @return 指定されたサービス契約に紐付く課金先のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0321(String p_svcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0321ETMsg.class.getName());
		msg.set(KK0321ETMsg.SVC_KEI_NO, p_svcKeiNo);
		msg.set(KK0321ETMsg.MK_FLG, MK_FLG_VALID);

		CAANMsg[] msgList = null;

		try
		{
			// パラメータと一致するレコードの検索
			msgList = new KK0321LE().findByCondition(msg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		for (CAANMsg ret : msgList)
		{
			if (0 > JKKModelCommon.subtractDay(getOpeDate(), ret.getString(KK0321ETMsg.KAKINS_TSTAYMD)))
			{
				// 適用開始していない場合
				continue;
			}

			if (0 < JKKModelCommon.subtractDay(getOpeDate(), ret.getString(KK0321ETMsg.KAKINS_TENDYMD)))
			{
				// 適用終了している場合
				continue;
			}

			return ret;
		}

		return null;
	}

	/**
	 * <p>
	 * 指定された課金先のプライマリレコード取得を行います。
	 * </p>
	 * @param p_kakinsNo 課金先番号
	 * @return 指定された課金先のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0321(String p_kakinsNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0321ETMsg.class.getName());
		msg.set(KK0321ETMsg.KAKINS_NO, p_kakinsNo);

		// プライマリレコードの検索
		CAANMsg ret = new KK0321LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0321ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約のカレントレコード取得を行います。
	 * </p>
	 * @param p_kktkSvcKeiNo 機器提供サービス契約番号
	 * @return 指定された機器提供サービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0341(String p_kktkSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0341ETMsg.class.getName());
		msg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, p_kktkSvcKeiNo);
		msg.set(KK0341ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0341DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された機器提供サービス契約のプライマリレコード取得を行います。
	 * </p>
	 * @param p_kktkSvcKeiNo 機器提供サービス契約番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定された機器提供サービス契約のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0341(String p_kktkSvcKeiNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0341ETMsg.class.getName());
		msg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, p_kktkSvcKeiNo);
		msg.set(KK0341ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// カレントレコードの検索
		CAANMsg ret = new KK0341LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0341ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたオプションサービス契約のカレントレコード取得を行います。
	 * </p>
	 * @param p_opSvcKeiNo オプションサービス契約番号
	 * @return 指定されたオプションサービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0351(String p_opSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO, p_opSvcKeiNo);
		msg.set(KK0351ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0351DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたオプションサービス契約の基準日時点でのカレントレコード取得を行います。
	 * </p>
	 * @param p_opSvcKeiNo オプションサービス契約番号
	 * @return 指定されたオプションサービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0351Base(String p_opSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO, p_opSvcKeiNo);
		msg.set(KK0351ETMsg.RSV_APLY_YMD, getBaseDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0351DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたオプションサービス契約のプライマリレコード取得を行います。
	 * </p>
	 * @param p_opSvcKeiNo オプションサービス契約番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定されたオプションサービス契約のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0351(String p_opSvcKeiNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO, p_opSvcKeiNo);
		msg.set(KK0351ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// カレントレコードの検索
		CAANMsg ret = new KK0351LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0351ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサブオプションサービス契約のカレントレコード取得を行います。
	 * </p>
	 * @param p_opSvcKeiNo サブオプションサービス契約番号
	 * @param p_sbopSvcKeiNo サブオプションサービス契約番号
	 * @return 指定されたサブオプションサービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0401(String p_opSvcKeiNo, String p_sbopSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0401ETMsg.class.getName());
		msg.set(KK0401ETMsg.OP_SVC_KEI_NO, p_opSvcKeiNo);
		msg.set(KK0401ETMsg.SBOP_SVC_KEI_NO, p_sbopSvcKeiNo);
		msg.set(KK0401ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0401DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサブオプションサービス契約の基準日時点でのカレントレコード取得を行います。
	 * </p>
	 * @param p_opSvcKeiNo サブオプションサービス契約番号
	 * @param p_sbopSvcKeiNo サブオプションサービス契約番号
	 * @return 指定されたサブオプションサービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0401Base(String p_opSvcKeiNo, String p_sbopSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0401ETMsg.class.getName());
		msg.set(KK0401ETMsg.OP_SVC_KEI_NO, p_opSvcKeiNo);
		msg.set(KK0401ETMsg.SBOP_SVC_KEI_NO, p_sbopSvcKeiNo);
		msg.set(KK0401ETMsg.RSV_APLY_YMD, getBaseDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0401DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたサブオプションサービス契約のプライマリレコード取得を行います。
	 * </p>
	 * @param p_opSvcKeiNo サブオプションサービス契約番号
	 * @param p_sbopSvcKeiNo サブオプションサービス契約番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定されたサブオプションサービス契約のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0401(String p_opSvcKeiNo, String p_sbopSvcKeiNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0401ETMsg.class.getName());
		msg.set(KK0401ETMsg.OP_SVC_KEI_NO, p_opSvcKeiNo);
		msg.set(KK0401ETMsg.SBOP_SVC_KEI_NO, p_sbopSvcKeiNo);
		msg.set(KK0401ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// カレントレコードの検索
		CAANMsg ret = new KK0401LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0401ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された割引サービス契約のカレントレコード取得を行います。
	 * </p>
	 * @param p_wribSvcKeiNo 割引サービス契約番号
	 * @return 指定された割引サービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0451(String p_wribSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0451ETMsg.class.getName());
		msg.set(KK0451ETMsg.WRIB_SVC_KEI_NO, p_wribSvcKeiNo);
		msg.set(KK0451ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0451DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された割引サービス契約のプライマリレコード取得を行います。
	 * </p>
	 * @param p_wribSvcKeiNo 割引サービス契約番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定された割引サービス契約のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK0451(String p_wribSvcKeiNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0451ETMsg.class.getName());
		msg.set(KK0451ETMsg.WRIB_SVC_KEI_NO, p_wribSvcKeiNo);
		msg.set(KK0451ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// カレントレコードの検索
		CAANMsg ret = new KK0451LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK0451ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された料金コースのカレントレコード取得を行います。
	 * </p>
	 * @param p_pcrsCd 料金コースコード
	 * @return 指定された料金コースのカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0791(String p_pcrsCd)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0791ETMsg.class.getName());
		msg.set(KK0791ETMsg.PCRS_CD, p_pcrsCd);

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0791DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定されたオプションサービスのカレントレコード取得を行います。
	 * </p>
	 * @param p_opSvcCd オプションサービスコード
	 * @return 指定されたオプションサービスのカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0821(String p_opSvcCd)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0821ETMsg.class.getName());
		msg.set(KK0821ETMsg.OP_SVC_CD, p_opSvcCd);
		msg.set(KK0821ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0821DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された割引サービスのカレントレコード取得を行います。
	 * </p>
	 * @param p_wribSvcCd 割引サービスコード
	 * @return 指定された割引サービスのカレントレコード
	 */
	protected CAANMsg getCurrentDataKK0841(String p_wribSvcCd)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK0841ETMsg.class.getName());
		msg.set(KK0841ETMsg.WRIB_SVC_CD, p_wribSvcCd);
		msg.set(KK0841ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK0841DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 料金コース変更可能条件のカレントレコード取得を行います。
	 * </p>
	 * @param p_pcrsCd 変更前料金コースコード
	 * @param p_pcrsCdNew 変更後料金コースコード
	 * @return 料金コース変更可能条件のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK1631(String p_pcrsCd, String p_pcrsCdNew)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK1631ETMsg.class.getName());
		msg.set(KK1631ETMsg.CHG_BF_PCRS_CD, p_pcrsCd);
		msg.set(KK1631ETMsg.CHG_AF_PCRS_CD, p_pcrsCdNew);
		msg.set(KK1631ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		return new JKKejbKK1631DBABase().findByCurrent(msg);
	}

	/**
	 * <p>
	 * 指定された機器オプションサービス契約のカレントレコード取得を行います。
	 * </p>
	 * @param p_kkopSvcKeiNo 機器オプションサービス契約番号
	 * @return 指定された機器オプションサービス契約のカレントレコード
	 */
	protected CAANMsg getCurrentDataKK2811(String p_kkopSvcKeiNo)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK2811ETMsg.class.getName());
		msg.set(KK2811ETMsg.KKOP_SVC_KEI_NO, p_kkopSvcKeiNo);
		msg.set(KK2811ETMsg.RSV_APLY_YMD, getOpeDate());

		// カレントレコードの検索
		CAANMsg ret = new JKKejbKK2811DBABase().findByCurrent(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された機器オプションサービス契約のプライマリレコード取得を行います。
	 * </p>
	 * @param p_kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param p_geneAddDtm 世代登録年月日時分秒
	 * @return 指定された機器オプションサービス契約のプライマリレコード
	 */
	protected CAANMsg getPrimaryDataKK2811(String p_kkopSvcKeiNo, String p_geneAddDtm)
	{
		// パラメータの設定
		CAANMsg msg = new CAANMsg(KK2811ETMsg.class.getName());
		msg.set(KK2811ETMsg.KKTK_SVC_KEI_NO, p_kkopSvcKeiNo);
		msg.set(KK2811ETMsg.GENE_ADD_DTM, p_geneAddDtm);

		// カレントレコードの検索
		CAANMsg ret = new KK2811LE().findByPrimaryKey(msg);

		if (ret == null)
		{
			// レコードなし
			throw new JKKejbBusinessException();
		}

		if (MK_FLG_INVALID.equals(ret.getString(KK2811ETMsg.MK_FLG)))
		{
			// レコード無効
			throw new JKKejbBusinessException();
		}

		return ret;
	}

	/**
	 * <p>
	 * 指定された対象スキーマに紐付く異動予約の取得を行います。
	 * </p>
	 * @param tgSkbtCd 対象識別コード
	 */
	protected void setReserveDataKK1681(String tgSkbtCd)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setReserveDataKK1681 => " + tgSkbtCd);

		// 各種契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = new JKKejbKK1681DBABase().getKK1681byVariKei(tgSkbtCd, getSvc_kei_no(),
				getSvc_kei_ucwk_no(), getOp_svc_kei_no(), getSbop_svc_kei_no(), getKktk_svc_kei_no(), getWrib_svc_kei_no(),
				getSysid(), getSysid_new(), isSysidJoinFlg(), getSeiky_kei_no(), getSeiky_kei_no_new(), isSeikyJoinFlg(),
				getSvc_kei_no_new(), getOpeDate(), getKkop_svc_kei_no());

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvData(kk1681MsgList);
	}

	/**
	 * <p>
	 * 指定された対象スキーマに紐付く異動予約の取得を行います。
	 * 住所変更・登録をチェック対象として含むデータを返却します。
	 * </p>
	 * @param tgSkbtCd 対象識別コード
	 */
	protected void setReserveDataAdChgKK1681(String tgSkbtCd)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setReserveDataKK1681 => " + tgSkbtCd);

		// 各種契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = new JKKejbKK1681DBABase().getKK1681byVariKei(tgSkbtCd, getSvc_kei_no(),
				getSvc_kei_ucwk_no(), getOp_svc_kei_no(), getSbop_svc_kei_no(), getKktk_svc_kei_no(), getWrib_svc_kei_no(),
				getSysid(), getSysid_new(), isSysidJoinFlg(), getSeiky_kei_no(), getSeiky_kei_no_new(), isSeikyJoinFlg(),
				getSvc_kei_no_new(), getOpeDate(), getKkop_svc_kei_no());

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvDataAdChg(kk1681MsgList);
	}

	/**
	 * <p>
	 * 該当の契約に対する住所変更予約を抽出し、住所変更予約リストに設定します。
	 * </p>
	 * @param adchgDtlSbtCd 住所変更明細種別コード
	 * @param variKeiNo 各種契約番号
	 */
	protected void setAdchgDataKK2101(String adchgDtlSbtCd, String variKeiNo)
	{
		// 住所変更予約マップ
		HashMap<String, Object> adchgRsvMap = null;
		
		// 転居元で使用する契約に紐づく「住所変更明細」リスト
		CAANMsg[] adchgDtlMtList = null;
		
		// 転居先で使用する契約に紐づく「住所変更明細」リスト
		CAANMsg[] adchgDtlSkList = null;
		
		JKKejbKK2101DBABase kk2101dba = new JKKejbKK2101DBABase();
		
		/* --------------------------------------------------
		 * 該当の契約に紐づく「住所変更明細」を取得
		 * -------------------------------------------------- */
		// 住所変更明細種別コードがサービス契約/サービス契約内訳/オプションサービス契約/請求契約の場合
		if (ADCHG_DTL_SBT_CD_SVC.equals(adchgDtlSbtCd) || ADCHG_DTL_SBT_CD_UCWK.equals(adchgDtlSbtCd)
				|| ADCHG_DTL_SBT_CD_OP.equals(adchgDtlSbtCd) || ADCHG_DTL_SBT_CD_SIKY.equals(adchgDtlSbtCd))
		{
			// 住所変更中の「住所変更」において、転居元で使用する契約に紐づく「住所変更明細」を取得する。
			adchgDtlMtList = kk2101dba.getKK2101byVariKei(adchgDtlSbtCd, null, variKeiNo, null, "1");
			
			// 住所変更中の「住所変更」において、転居先で使用する契約に紐づく「住所変更明細」を取得する。
			adchgDtlSkList = kk2101dba.getKK2101byVariKei(adchgDtlSbtCd, null, null, variKeiNo, "1");
		}
//		※現時点では未使用のため、コメントアウトしておく
//		// 住所変更明細種別コードが機器提供サービス契約の場合
//		else if (ADCHG_DTL_SBT_CD_KKTK.equals(adchgDtlSbtCd))
//		{
//			// 住所変更中の「住所変更」において、転居元で使用する「機器提供サービス契約」に紐づく「住所変更明細」を取得する。
//			CAANMsg[] adchgDtlKiKiList = kk2101dba.getKK2101byVariKei(adchgDtlSbtCd, variKeiNo, null, null, "1");
//			
//			// 転居元で使用する機器に紐づく「住所変更明細」リスト
//			ArrayList adchgDtlMtKiKiMsgList = new ArrayList();
//			// 転居先で使用する機器に紐づく「住所変更明細」リスト
//			ArrayList adchgDtlSkKiKiMsgList = new ArrayList();
//			
//			// 転居元・転居先で使用する機器を仕分けする。
//			for (CAANMsg adchgDtlKiKiMsg : adchgDtlKiKiList)
//			{
//				// 住所変更明細.変更前識別番号(転居元で使用する機器の機器変更番号)が設定されている場合
//				if (!adchgDtlKiKiMsg.isNull(KK2101ETMsg.CHBF_SKBT_NO))
//				{
//					adchgDtlMtKiKiMsgList.add(adchgDtlKiKiMsg);
//				}
//				// 住所変更明細.変更後識別番号(転居先で使用する機器の機器変更番号)が設定されている場合
//				if (!adchgDtlKiKiMsg.isNull(KK2101ETMsg.CHAF_SKBT_NO))
//				{
//					adchgDtlSkKiKiMsgList.add(adchgDtlKiKiMsg);
//				}
//			}
//			
//			adchgDtlMtList = (CAANMsg[])adchgDtlMtKiKiMsgList.toArray(new CAANMsg[0]);
//			adchgDtlSkList = (CAANMsg[])adchgDtlSkKiKiMsgList.toArray(new CAANMsg[0]);
//		}
		else
		{
			throw new CAANRuntimeException("処理対象外の住所変更明細種別コードです。");
		}

		/* --------------------------------------------------
		 * 住所変更予約リストの設定
		 * -------------------------------------------------- */
		// 該当の契約に紐づく「住所変更明細」が存在しない場合
		if (adchgDtlMtList.length == 0 && adchgDtlSkList.length == 0)
		{
			return;
		}
		// 住所変更中の「住所変更」において、転居元にて該当の契約を解約する場合
		else if (adchgDtlMtList.length == 1 && adchgDtlSkList.length == 0)
		{
			adchgRsvMap = makeAdchgDtlMap(adchgDtlMtList[0], EXIST_RSV_012);
		}
		// 住所変更中の「住所変更」において、転居先にて該当の契約を新設する場合
		else if (adchgDtlMtList.length == 0 && adchgDtlSkList.length == 1)
		{
			adchgRsvMap = makeAdchgDtlMap(adchgDtlSkList[0], EXIST_RSV_018);
		}
		// 住所変更中の「住所変更」において、転居元から転居先へ該当の契約を継続使用する場合
		else if (adchgDtlMtList.length == 1 && adchgDtlSkList.length == 1)
		{
			// 住所変更明細番号(転居元)
			String adchgDtlMtNo = adchgDtlMtList[0].getString(KK2101ETMsg.ADCHG_DTL_NO);
			// 住所変更明細番号(転居先)
			String adchgDtlSkNo = adchgDtlSkList[0].getString(KK2101ETMsg.ADCHG_DTL_NO);
			if (!adchgDtlMtNo.equals(adchgDtlSkNo))
			{
				// 異なる「住所変更明細」で、転居元、転居先で使用する契約として該当の契約を指定している場合
				throw new CAANRuntimeException("該当の契約について、住所変更中のデータが複数存在しています。");
			}
			
			adchgRsvMap = makeAdchgDtlMap(adchgDtlMtList[0], EXIST_RSV_019);
			//adchgRsvMap = makeAdchgDtlMap(adchgDtlSkList[0], EXIST_RSV_019);でも同じ
		}
		// 住所変更中の「住所変更」において、該当の契約に紐づく「住所変更明細」が2件以上存在する場合
		else
		{
			throw new CAANRuntimeException("該当の契約について、住所変更中のデータが複数存在しています。");
		}

		adchgRsvList.add(adchgRsvMap);

		return;
	}

	/**
	 * <p>
	 * 入力された「住所変更明細」に関する住所変更予約マップを作成します。
	 * </p>
	 * @param adchgDtlMsg 住所変更明細
	 * @param existRsv 既にある予約(住所変更・登録(転居元解約)/住所変更・登録(転居先新規)/住所変更・登録(継続))
	 * 
	 * @return 住所変更予約マップ
	 */
	protected HashMap<String, Object> makeAdchgDtlMap(CAANMsg adchgDtlMsg, String existRsv)
	{
		// 住所変更予約マップ
		HashMap<String, Object> adchgRsvMap = new HashMap<String, Object>();

		/* --------------------------------------------------
		 * 撤去希望日・入居予定日の「住所変更明細」を取得
		 * -------------------------------------------------- */
		// 住所変更明細.住所変更番号
		String adchgNo = adchgDtlMsg.getString(KK2101ETMsg.ADCHG_NO);
		
		// 該当の「住所変更」における撤去希望日・入居予定日の「住所変更明細」を取得する。
		JKKejbKK2101DBABase kk2101dba = new JKKejbKK2101DBABase();
		CAANMsg[] adchgDtlDateList = kk2101dba.getKK2101byAdchgNo(adchgNo, ADCHG_DTL_SBT_CD_DATE, "1");
		
		// 撤去希望日・入居予定日の「住所変更明細」が存在しない場合
		if (adchgDtlDateList.length == 0)
		{
			throw new CAANRuntimeException("該当の住所変更について、撤去希望日・入居予定日の住所変更明細が存在しません。");
		}
		// 撤去希望日・入居予定日の「住所変更明細」が2件以上存在する場合
		else if (adchgDtlDateList.length > 1)
		{
			throw new CAANRuntimeException("該当の住所変更について、撤去希望日・入居予定日の住所変更明細が複数存在しています。");
		}

		/* --------------------------------------------------
		 * 住所変更予約マップのパラメータを設定
		 * -------------------------------------------------- */
		// 「住所変更明細」を設定
		adchgRsvMap.put(ADCHG_RSV_ADCHG_DTL_MSG, adchgDtlMsg);

		// 既にある予約を設定
		adchgRsvMap.put(ADCHG_RSV_EXIST_RSV, existRsv);

		// 住所変更予約反映日を設定
		if (EXIST_RSV_012.equals(existRsv))
		{
			// 解約希望日(「住所変更明細」(解約希望日・入居予定日)の変更前識別番号)
			String dslKiboYmd = adchgDtlDateList[0].getString(KK2101ETMsg.CHBF_SKBT_NO);
			
			// “既にある予約”が住所変更・登録(転居元解約)の場合、解約希望日を設定
			adchgRsvMap.put(ADCHG_RSV_RSV_HANEI_YMD, dslKiboYmd);
		}
		else if (EXIST_RSV_018.equals(existRsv))
		{
			// 入居予定日(「住所変更明細」(解約希望日・入居予定日)の変更後識別番号)
			String nyukyoRsvYmd = adchgDtlDateList[0].getString(KK2101ETMsg.CHAF_SKBT_NO);
			
			// “既にある予約”が住所変更・登録(転居先新規)の場合、入居予定日を設定
			adchgRsvMap.put(ADCHG_RSV_RSV_HANEI_YMD, nyukyoRsvYmd);
		}
		else if (EXIST_RSV_019.equals(existRsv))
		{
			// 入居予定日(「住所変更明細」(解約希望日・入居予定日)の変更後識別番号)
			String nyukyoRsvYmd = adchgDtlDateList[0].getString(KK2101ETMsg.CHAF_SKBT_NO);
			
			// “既にある予約”が住所変更・登録(継続)の場合、入居予定日を設定
			adchgRsvMap.put(ADCHG_RSV_RSV_HANEI_YMD, nyukyoRsvYmd);
		}
		else
		{
			throw new CAANRuntimeException("未定義の住所変更予約です。");
		}

		return adchgRsvMap;
	}

	/**
	 * <p>
	 * 該当の「サービス契約」配下の契約に紐付く「異動予約」の取得を行います。
	 * </p>
	 */
	protected void setKK0081ChildRsv()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setKK0081ChildRsv");

		JKKejbKK1681DBABase kk1681dba = new JKKejbKK1681DBABase();
		JKKejbKK0251DBABase kk0251dba = new JKKejbKK0251DBABase();
		JKKejbKK0341DBABase kk0341dba = new JKKejbKK0341DBABase();

		// @該当の「サービス契約」配下の契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = kk1681dba.getKK1681byVariKeiChild(getSvc_kei_no(), null, null, null, null, getOpeDate(), "1");

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvData(kk1681MsgList);

		// A該当の「サービス契約」が使用する「サービス契約回線内訳」配下の「機器提供サービス契約」に紐付く「異動予約」を取得する。
		// 該当の「サービス契約」が使用する「サービス契約回線内訳」を取得する。
		CAANMsg[] kk0251MsgList = kk0251dba.getKK0251bySvcKei(getSvc_kei_no(), null, getOpeDate(), "0");
		for (CAANMsg kk0251Msg : kk0251MsgList)
		{
			// 該当の「サービス契約回線内訳」を使用する「機器提供サービス契約」を取得する。
			String svcKeiKaisenUcwkNo = kk0251Msg.getString(KK0251ETMsg.SVC_KEI_KAISEN_UCWK_NO);
			CAANMsg[] kk0341MsgList = kk0341dba.getKK0341bySvcKeiKaisenUcwk(svcKeiKaisenUcwkNo, null, getOpeDate());

			for (CAANMsg kk0341Msg : kk0341MsgList)
			{
				// 該当の回線機器が、処理対象の「サービス契約」で使用する機器でない場合、予約情報取得の対象外
				if (!isPcrsTgKktkSvc(getKk0081_pcrs_cd(), kk0341Msg.getString(KK0341ETMsg.KKTK_SVC_CD), getOpeDate()))
				{
					continue;
				}

				// 機器提供サービス契約番号
				setKktk_svc_kei_no(kk0341Msg.getString(KK0341ETMsg.KKTK_SVC_KEI_NO));
				// 機器提供サービス契約に紐付く異動予約の取得
				setReserveDataKK1681(TG_SKBT_CD_KK0341);
				// 機器提供サービス契約配下の契約に紐付く異動予約の取得
				setKK0341ChildRsv();
			}
		}
	}

	/**
	 * <p>
	 * 該当の「サービス契約内訳」配下の契約に紐付く「異動予約」の取得を行います。
	 * </p>
	 */
	protected void setKK0161ChildRsv()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setKK0161ChildRsv");

		// 該当の「サービス契約内訳」配下の契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = new JKKejbKK1681DBABase().getKK1681byVariKeiChild(null,
				getSvc_kei_ucwk_no(), null, null, null, getOpeDate(), "2");

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvData(kk1681MsgList);
	}

	/**
	 * <p>
	 * 該当の「オプションサービス契約」配下の契約に紐付く「異動予約」の取得を行います。
	 * </p>
	 */
	protected void setKK0351ChildRsv()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setKK0351ChildRsv");

		// 該当の「オプションサービス契約」配下の契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = new JKKejbKK1681DBABase().getKK1681byVariKeiChild(null,
				null, getOp_svc_kei_no(), null, null, getOpeDate(), "3");

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvData(kk1681MsgList);
	}

	/**
	 * <p>
	 * 該当の「サブオプションサービス契約」配下の契約に紐付く「異動予約」の取得を行います。
	 * </p>
	 */
	protected void setKK0401ChildRsv()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setKK0401ChildRsv");

		// 該当の「サブオプションサービス契約」配下の契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = new JKKejbKK1681DBABase().getKK1681byVariKeiChild(null,
				null, null, getSbop_svc_kei_no(), null, getOpeDate(), "4");

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvData(kk1681MsgList);
	}

	/**
	 * <p>
	 * 該当の「機器提供サービス契約」配下の契約に紐付く「異動予約」の取得を行います。
	 * </p>
	 */
	protected void setKK0341ChildRsv()
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "exec:setKK0341ChildRsv");

		// 該当の「機器提供サービス契約」配下の契約に紐付く「異動予約」を取得する。
		CAANMsg[] kk1681MsgList = new JKKejbKK1681DBABase().getKK1681byVariKeiChild(null,
				null, null, null, getKktk_svc_kei_no(), getOpeDate(), "5");

		// チェック対象となる異動予約リストに設定する。
		setIdoRsvData(kk1681MsgList);
	}

	/**
	 * <p>
	 * 取得した「異動予約」のうち、チェック対象外となる「異動予約」を除いて、異動予約リストに設定します。
	 * </p>
	 * @param outMsgList 取得した「異動予約」メッセージ配列
	 */
	private void setIdoRsvData(CAANMsg[] outMsgList)
	{
		for (CAANMsg outMsg : outMsgList)
		{
			String idoRsvNo = outMsg.getString(KK1681ETMsg.IDO_RSV_NO);

			// 異動予約リスト(全て)に設定済の「異動予約」はスキップする。
			if (!allIdoRsvMap.containsKey(idoRsvNo))
			{
				allIdoRsvList.add(outMsg);
				allIdoRsvMap.put(idoRsvNo, idoRsvNo);
			}
			
			// 異動予約.申込明細番号が、異動可否判定対象の"申込明細番号"と同一の場合、同一トランとみなし、チェック対象外とする。
			if (null != getMskm_dtl_no() && !"".equals(getMskm_dtl_no()))
			{
				if (getMskm_dtl_no().equals(outMsg.getString(KK1681ETMsg.MSKM_DTL_NO)))
				{
					continue;
				}
			}

			// 異動予約.異動区分が"住所変更・登録"、"光電話・番号変更"の場合、チェック対象外
			if (JDG_IDO_DIV_00019.equals(outMsg.getString(KK1681ETMsg.IDO_DIV))
					|| JDG_IDO_DIV_00042.equals(outMsg.getString(KK1681ETMsg.IDO_DIV)))
			{
				continue;
			}

			// チェック対象となる異動予約リストに設定済の「異動予約」はスキップする。
			if (!idoRsvMap.containsKey(idoRsvNo))
			{
				idoRsvList.add(outMsg);
				idoRsvMap.put(idoRsvNo, idoRsvNo);
			}
		}
	}

	/**
	 * <p>
	 * 取得した「異動予約」のうち、チェック対象外となる「異動予約」を除いて、異動予約リストに設定します。
	 * ※setIdoRsvDataメソッドの"住所変更・登録"をチェック対象とするメソッド(VR識別設定時の異動予約取得時のみ使用する)
	 * </p>
	 * @param outMsgList 取得した「異動予約」メッセージ配列
	 */
	private void setIdoRsvDataAdChg(CAANMsg[] outMsgList)
	{
		for (CAANMsg outMsg : outMsgList)
		{
			String idoRsvNo = outMsg.getString(KK1681ETMsg.IDO_RSV_NO);

			// 異動予約.申込明細番号が、異動可否判定対象の"申込明細番号"と同一の場合、同一トランとみなし、チェック対象外とする。
			if (null != getMskm_dtl_no() && !"".equals(getMskm_dtl_no()))
			{
				if (getMskm_dtl_no().equals(outMsg.getString(KK1681ETMsg.MSKM_DTL_NO)))
				{
					continue;
				}
			}

			// 異動予約.異動区分が"光電話・番号変更"の場合、チェック対象外
			if (JDG_IDO_DIV_00042.equals(outMsg.getString(KK1681ETMsg.IDO_DIV)))
			{
				continue;
			}

			// チェック対象となる異動予約リストに設定済の「異動予約」はスキップする。
			if (!idoRsvMap.containsKey(idoRsvNo))
			{
				idoRsvList.add(outMsg);
				idoRsvMap.put(idoRsvNo, idoRsvNo);
			}
		}
	}

	/**
	 * <p>
	 * サービス契約に紐付く使用中のサービス契約回線内訳で、
	 * PON識別コードが「E-PON」または未設定のデータが存在するか
	 * チェックを行います。
	 * </p>
	 * @return 該当するサービス契約回線内訳が存在する場合はtrue
	 */
	protected boolean isExistEponKaisen()
	{
		// 対象の「サービス契約」が使用する「サービス契約回線内訳」(受付済・使用中)を取得する。
		CAANMsg[] kk0251MsgList = new JKKejbKK0251DBABase().getKK0251bySvcKei(getSvc_kei_no(), null, getOpeDate(), "2");

		for (CAANMsg kk0251Msg : kk0251MsgList)
		{
			// サービス契約回線内訳ステータスが"受付済"、"使用中"以外の場合は、対象外
			String svcKeiKaisenUcwkStat = kk0251Msg.getString(KK0251ETMsg.SVC_KEI_KAISEN_UCWK_STAT);
			if (!JKKModelConst.SVC_KEI_KAISEN_UCWK_STAT_UK_ZM.equals(svcKeiKaisenUcwkStat)
					&& !JKKModelConst.SVC_KEI_KAISEN_UCWK_STAT_USE_CHU.equals(svcKeiKaisenUcwkStat))
			{
				continue;
			}

			// PON種別コードが未設定または"E-PON"の場合、trueを返却する。
			String ponSbtCd = kk0251Msg.getString(KK0251ETMsg.PON_SBT_CD);
			if (ponSbtCd == null || "".equals(ponSbtCd) || JKKModelConst.PON_SBT_CD_E_PON.equals(ponSbtCd))
			{
				return true;
			}
		}

		// 検索条件に合致する「サービス契約回線内訳」が存在しない場合、falseを返却する。
		return false;
	}

	/**
	 * <p>
	 * サービス契約内訳に紐付く機器提供サービス契約でeoテレビ変更の予約が
	 * 存在するかチェックを行います。<br>
	 * </p>
	 * @return eoテレビ変更の予約が存在する場合はtrue
	 */
	protected boolean isExistKikiEoTvRsv()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KK0341ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ( ");
		sql.append("  SELECT ");
		sql.append("    DISTINCT KK0341_01.KKTK_SVC_KEI_NO ");
		sql.append("  FROM ");
		sql.append("    KK_T_KKTK_SVC_KEI KK0341_01 ");
		sql.append("  WHERE ");
		sql.append("    KK0341_01.SVC_KEI_UCWK_NO = ? ");
		paramList.add(getSvc_kei_ucwk_no());
		sql.append("    AND KK0341_01.MK_FLG = '0' ) KK0341 ");
		sql.append("  INNER JOIN KK_T_IDO_RSV KK1681_01 ");
		sql.append("  ON KK1681_01.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO ");
		sql.append("  AND KK1681_01.IDO_RSV_DTL_CD = '011' ");
		sql.append("  AND ( KK1681_01.IDO_RSV_STAT_CD IN ('00', '03') ");
		sql.append("    OR (KK1681_01.IDO_RSV_STAT_CD = '04' ");
		sql.append("      AND KK1681_01.RSV_APLY_YMD > ? ) ) ");
		paramList.add(getOpeDate());
		sql.append("  AND KK1681_01.MK_FLG = '0' ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * サービス契約に紐付くオプションサービス契約で、以下のオプションサービスの
	 * 予約が存在するかチェックを行います。<br>
	 * <ol>
	 * <li>固定グローバルIPアドレス
	 * <li>マルチセッション
	 * </ol>
	 * </p>
	 * @param pDetailCodes 異動予約詳細コード
	 * @return 該当するオプションサービスの予約が存在する場合はtrue
	 */
	protected boolean isExistOpIPAdrsAndMultiRsv(String... pDetailCodes)
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KK0351ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ( ");
		sql.append("  SELECT ");
		sql.append("    DISTINCT KK0351_01.OP_SVC_KEI_NO ");
		sql.append("  FROM ");
		sql.append("    KK_T_OP_SVC_KEI KK0351_01 ");
		sql.append("  WHERE ");
		sql.append("    KK0351_01.SVC_KEI_NO = ? ");
		paramList.add(getSvc_kei_no());
		sql.append("    AND KK0351_01.OP_SVC_CD IN ('B004', 'B015')");
		sql.append("    AND KK0351_01.MK_FLG = '0' ) KK0351 ");
		sql.append("  INNER JOIN KK_T_IDO_RSV KK1681_01 ");
		sql.append("  ON KK1681_01.OP_SVC_KEI_NO = KK0351.OP_SVC_KEI_NO ");

		if (0 < pDetailCodes.length)
		{
			sql.append("  AND KK1681_01.IDO_RSV_DTL_CD = ? ");
			paramList.add(pDetailCodes[0]);
		}

		sql.append("  AND ( KK1681_01.IDO_RSV_STAT_CD IN ('00', '03') ");
		sql.append("    OR (KK1681_01.IDO_RSV_STAT_CD = '04' ");
		sql.append("      AND KK1681_01.RSV_APLY_YMD > ? ) ) ");
		paramList.add(getOpeDate());
		sql.append("  AND KK1681_01.MK_FLG = '0' ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * サービス契約内訳に紐付くオプションチャンネルの予約が
	 * 存在するかチェックを行います。<br>
	 * オプションサービス種別コードが以下の種類で予約が存在するか
	 * チェックします。<br>
	 * <ol>
	 * <li>通常チャンネル
	 * <li>アダルトチャンネル
	 * </ol>
	 * </p>
	 * @return オプションチャンネルの予約が存在する場合はtrue
	 */
	protected boolean isExistOpChannelRsv()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KK0351ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ( ");
		sql.append("  SELECT ");
		sql.append("    DISTINCT KK0351_01.OP_SVC_KEI_NO , ");
		sql.append("    KK0351_01.OP_SVC_CD ");
		sql.append("  FROM ");
		sql.append("    KK_T_OP_SVC_KEI KK0351_01 ");
		sql.append("  WHERE ");
		sql.append("    KK0351_01.SVC_KEI_UCWK_NO = ? ");
		paramList.add(getSvc_kei_ucwk_no());
		sql.append("    AND KK0351_01.MK_FLG = '0' ) KK0351 ");
		sql.append("  INNER JOIN ( ");
		sql.append("    SELECT ");
		sql.append("      DISTINCT KK0821_01.OP_SVC_CD ");
		sql.append("    FROM ");
		sql.append("      KK_M_OP_SVC KK0821_01 ");
		sql.append("    WHERE ");
		sql.append("      KK0821_01.OP_CHANNEL_SBT_CD IN ('01', '02') ");
		sql.append("      AND KK0821_01.MK_FLG = '0') KK0821 ");
		sql.append("  ON KK0351.OP_SVC_CD = KK0821.OP_SVC_CD ");
		sql.append("  INNER JOIN KK_T_IDO_RSV KK1681_01 ");
		sql.append("  ON KK1681_01.OP_SVC_KEI_NO = KK0351.OP_SVC_KEI_NO ");
		sql.append("  AND ( KK1681_01.IDO_RSV_STAT_CD IN ('00', '03') ");
		sql.append("    OR (KK1681_01.IDO_RSV_STAT_CD = '04' ");
		sql.append("      AND KK1681_01.RSV_APLY_YMD > ? ) ) ");
		paramList.add(getOpeDate());
		sql.append("  AND KK1681_01.MK_FLG = '0' ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * オプションサービス契約に紐付くオプション解約以外の予約が存在するか
	 * チェックを行います。
	 * </p>
	 * @return オプション解約以外の予約が存在する場合はtrue
	 */
	protected boolean isExistOpNonDslRsv()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KK1681ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ");
		sql.append("  KK_T_IDO_RSV KK1681 ");
		sql.append("WHERE ");
		sql.append("  KK1681.OP_SVC_KEI_NO = ? ");
		paramList.add(getOp_svc_kei_no());
		sql.append("  AND ( ( KK1681.IDO_RSV_STAT_CD IN ('00', '03') ) ");
		sql.append("    OR ( KK1681.IDO_RSV_STAT_CD = '04' ");
		sql.append("      AND KK1681.RSV_APLY_YMD > ? ) )");
		paramList.add(getOpeDate());
		sql.append("  AND KK1681.MK_FLG = '0' ");
		sql.append("  AND KK1681.IDO_RSV_DTL_CD <> '016' ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * サブオプションサービス契約に紐付くサブオプション解約以外の予約が存在するか
	 * チェックを行います。
	 * </p>
	 * @return サブオプション解約以外の予約が存在する場合はtrue
	 */
	protected boolean isExistSbopNonDslRsv()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KK1681ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ");
		sql.append("  KK_T_IDO_RSV KK1681 ");
		sql.append("WHERE ");
		sql.append("  KK1681.SBOP_SVC_KEI_NO = ? ");
		paramList.add(getSbop_svc_kei_no());
		sql.append("  AND ( ( KK1681.IDO_RSV_STAT_CD IN ('00', '03') ) ");
		sql.append("    OR ( KK1681.IDO_RSV_STAT_CD = '04' ");
		sql.append("      AND KK1681.RSV_APLY_YMD > ? ) )");
		paramList.add(getOpeDate());
		sql.append("  AND KK1681.MK_FLG = '0' ");
		sql.append("  AND KK1681.IDO_RSV_DTL_CD <> '018' ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * サービス契約に紐付く工事案件が存在するかチェックを行います。
	 * </p>
	 * @return サービス契約に紐付く工事案件が存在する場合はtrue
	 */
	protected boolean isExistKoji()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0081ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ");
		sql.append("  KU_T_SVKEI_KOJIAK KU0081 ");
		sql.append("WHERE ");
		sql.append("  KU0081.SVC_KEI_NO = ? ");
		paramList.add(getSvc_kei_no());
		sql.append("  AND KU0081.SVKEI_KOJIAK_TSTAYMD <= ? ");
		paramList.add(getOpeDate());
		sql.append("  AND KU0081.SVKEI_KOJIAK_TENDYMD >= ? ");
		paramList.add(getOpeDate());
		sql.append("  AND KU0081.MK_FLG = '0' ");
		sql.append("  AND EXISTS ( ");
		sql.append("    SELECT 1 FROM ");
		sql.append("      KU_T_KOJIAK KU0011 ");
		sql.append("    WHERE ");
		sql.append("      KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ");
		sql.append("      AND KU0011.MK_FLG = '0' ) ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * サービス契約に紐付く依頼済の工事案件が存在するかチェックを行います。
	 * </p>
	 * @return サービス契約に紐付く依頼済の工事案件が存在する場合はtrue
	 */
	protected boolean isExistKojiReqAf()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0081ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ");
		sql.append("  KU_T_SVKEI_KOJIAK KU0081 ");
		sql.append("WHERE ");
		sql.append("  KU0081.SVC_KEI_NO = ? ");
		paramList.add(getSvc_kei_no());
		sql.append("  AND KU0081.SVKEI_KOJIAK_TSTAYMD <= ? ");
		paramList.add(getOpeDate());
		sql.append("  AND KU0081.SVKEI_KOJIAK_TENDYMD >= ? ");
		paramList.add(getOpeDate());
		sql.append("  AND KU0081.MK_FLG = '0' ");
		sql.append("  AND EXISTS ( ");
		sql.append("    SELECT 1 FROM ");
		sql.append("      KU_T_KOJIAK KU0011 ");
		sql.append("    WHERE ");
		sql.append("      KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ");
		sql.append("      AND KU0011.KOJIAK_SBT_CD = '002' ");
		sql.append("      AND KU0011.KOJIAK_STAT IN ('140', '150', '160', '170', '180', '190', '200') ");
		sql.append("      AND KU0011.MK_FLG = '0' ) ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * サービス契約に紐付く予定情報連携済みの工事が存在するかチェックを行います。
	 * </p>
	 * @return 予定情報連携済みの工事が存在する場合はtrue
	 */
	protected boolean isExistKojiRnkAf()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0081ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ");
		sql.append("  KU_T_SVKEI_KOJIAK KU0081 ");
		sql.append("WHERE ");
		sql.append("  KU0081.SVC_KEI_NO = ? ");
		paramList.add(getSvc_kei_no());
		sql.append("  AND KU0081.SVKEI_KOJIAK_TSTAYMD <= ? ");
		paramList.add(getOpeDate());
		sql.append("  AND KU0081.SVKEI_KOJIAK_TENDYMD >= ? ");
		paramList.add(getOpeDate());
		sql.append("  AND KU0081.MK_FLG = '0' ");
		sql.append("  AND EXISTS ( ");
		sql.append("    SELECT 1 FROM ");
		sql.append("      KU_T_KOJIAK KU0011 ");
		sql.append("    WHERE ");
		sql.append("      KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ");
		sql.append("      AND KOJIAK_SBT_CD IN ('001', '012')");
		sql.append("      AND KOJIAK_STAT IN ('170', '180', '190') ");
		sql.append("      AND KU0011.MK_FLG = '0' ) ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * テレビサービスの場合に、STBが全撤去となるコース変更予約が存在するか
	 * チェックを行います。
	 * </p>
	 * @return STBが全撤去となるコース変更予約が存在する場合はtrue
	 */
	protected boolean isExistStbRmvAllCourseUpdRsv()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0081ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ( ");
		sql.append("  SELECT ");
		sql.append("    DISTINCT KK0081_01.SVC_KEI_NO , ");
		sql.append("    KK0081_01.SVC_CD ");
		sql.append("  FROM ");
		sql.append("    KK_T_SVC_KEI KK0081_01 ");
		sql.append("  WHERE ");
		sql.append("    KK0081_01.SVC_KEI_NO = ? ");
		paramList.add(getSvc_kei_no());
		sql.append("    AND KK0081_01.SVC_CD = '03' ");
		sql.append("    AND KK0081_01.MK_FLG = '0' ) KK0081 ");
		sql.append("  INNER JOIN KK_T_IDO_RSV KK1681_01 ");
		sql.append("  ON KK1681_01.SVC_KEI_NO = KK0081.SVC_KEI_NO ");
		sql.append("  AND KK1681_01.IDO_RSV_DTL_CD = '003' ");
		// ANK-4592-00-00 MOD START
//		sql.append("  AND KK1681_01.NEW_PCRS_CD IN ('A23', 'A25', 'A37') ");
		sql.append("  AND KK1681_01.NEW_PCRS_CD IN ('A23', 'A25', 'A37', 'AC0', 'AC1') ");
		// ANK-4592-00-00 MOD END
		sql.append("  AND ( KK1681_01.IDO_RSV_STAT_CD IN ('00', '03') ");
		sql.append("    OR (KK1681_01.IDO_RSV_STAT_CD = '04' ");
		sql.append("      AND KK1681_01.RSV_APLY_YMD > ? ) ) ");
		paramList.add(getOpeDate());
		sql.append("  AND KK1681_01.MK_FLG = '0' ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * 配送中の機器が存在するかチェックを行います。
	 * </p>
	 * @return 配送中の機器が存在する場合はtrue
	 */
	protected boolean isExistHaisoKiki()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0081ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  1 ");
		sql.append("FROM ");
		sql.append("  DK_T_HAISO_TG_BPIN DK0021 ");
		sql.append("WHERE ");
		sql.append("  DK0021.KKTK_SVC_KEI_NO = ? ");
		paramList.add(getKktk_svc_kei_no());
		sql.append("  AND DK0021.MK_FLG = '0' ");
		sql.append("  AND EXISTS ( ");
		sql.append("    SELECT 1 FROM ");
		sql.append("      DK_T_HAISO DK0011 ");
		sql.append("    WHERE ");
		sql.append("      DK0021.HAISO_NO = DK0011.HAISO_NO ");
		sql.append("      AND DK0011.HAISO_STAT IN ('002', '003') ");
		sql.append("      AND DK0011.MK_FLG = '0' ) ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return false;
			}

			return true;
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * 移転トーキ設定予約に設定されている電話番号を取得します。
	 * </p>
	 * @return 移転トーキ設定予約に設定されている電話番号
	 */
	protected String getTokiRsvTelno()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0081ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  KK0191.TELNO ");
		sql.append("FROM ( ");
		sql.append("  SELECT ");
		sql.append("    KK0161_01.SVC_KEI_UCWK_NO , ");
		sql.append("    KK0161_01.GENE_ADD_DTM ");
		sql.append("  FROM ");
		sql.append("    KK_T_SVC_KEI_UCWK KK0161_01 ");
		sql.append("  WHERE ");
		sql.append("    KK0161_01.SVC_KEI_UCWK_NO = ? ");
		paramList.add(getSvc_kei_ucwk_no());
		sql.append("    AND KK0161_01.IDO_DIV = '00046' ");
		sql.append("    AND KK0161_01.RSV_APLY_YMD > ? ");
		paramList.add(getOpeDate());
		sql.append("    AND KK0161_01.RSV_APLY_CD = '2' ");
		sql.append("    AND KK0161_01.MK_FLG = '0' ) KK0161 ");
		sql.append("  INNER JOIN KK_T_SVKEIUW_EOH_TEL KK0191 ");
		sql.append("  ON KK0191.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ");
		sql.append("  AND KK0191.GENE_ADD_DTM = KK0161.GENE_ADD_DTM ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return null;
			}

			return dba.getString("TELNO");
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}

	/**
	 * <p>
	 * 入力の「機器提供サービス」の機器が、入力の「料金コース」の契約で使用する機器かどうか判定します。
	 * </p>
	 * @param pcrsCd 料金コースコード
	 * @param kktkSvcCd 機器提供サービスコード
	 * @param stdYmd 基準年月日
	 * @return true[false]:該当の機器が入力の「料金コース」の契約で使用する機器である[ない]場合
	 */
	private boolean isPcrsTgKktkSvc(String pcrsCd, String kktkSvcCd, String stdYmd)
	{
		// 入力の「料金コース」、「機器提供サービス」に紐づく「料金コース_機器提供サービス」を取得する。
		JKKejbKK0801DBABase kk0801Dba = new JKKejbKK0801DBABase();
		CAANMsg[] kk0801MsgList = kk0801Dba.getKK0801byPcrs_KktkSvc(pcrsCd, kktkSvcCd, stdYmd);

		// 取得件数が０件の場合、該当の機器は入力の「料金コース」の契約で使用する機器でない
		if (kk0801MsgList.length == 0)
		{
			return false;
		}

		return true;
	}
	
	// ANK-4468-00-00 ADD START
	
	/**
	 * <p>
	 * 乗換元サービス契約番号をKEYに乗換先情報を取得します。
	 * </p>
	 * @return 移転トーキ設定予約に設定されている電話番号
	 */
	protected String getNrkeSkInfo()
	{
		JSYejbDBAccess dba = new JSYejbDBAccess(KU0091ETMsg.getTableName());
		StringBuffer sql = new StringBuffer();
		List<String> paramList = new ArrayList<String>();

		sql.append("SELECT ");
		sql.append("  KK0091.SVC_KEI_NO ");
		sql.append(" FROM ");
		sql.append(" 	KK_T_SVC_KEI_EOH_NET KK0091 ");
		sql.append(" WHERE    KK0091.NRKEMT_SVKEI_NO = ? ");
		paramList.add(getSvc_kei_no());
		sql.append(" AND      (KK0091.NRKEMT_SVKEI_NO, KK0091.GENE_ADD_DTM) = ");
		sql.append("          (SELECT KK0091_GENE.NRKEMT_SVKEI_NO, MAX(KK0091_GENE.GENE_ADD_DTM) AS KK0091_MAX ");
		sql.append("           FROM   KK_T_SVC_KEI_EOH_NET KK0091_GENE ");
		sql.append("           WHERE  KK0091_GENE.NRKEMT_SVKEI_NO = KK0091.NRKEMT_SVKEI_NO ");
		sql.append("           AND    KK0091_GENE.RSV_APLY_CD = '2' ");
		sql.append("           AND    KK0091_GENE.MK_FLG = '0' ");
		sql.append("           GROUP BY KK0091_GENE.NRKEMT_SVKEI_NO) ");

		try
		{
			// オブジェクトの初期化
			dba.initialize();
			// SQL文のプリコンパイル
			dba.prepareStatement(sql.toString());

			// バインド変数の設定
			for (String param : paramList)
			{
				dba.setParam(param);
			}

			// SQL実行
			dba.executeQuery();

			if (!dba.next())
			{
				return null;
			}

			return dba.getString("SVC_KEI_NO");
		}
		catch (SQLException sqle)
		{
			throw new CAANRuntimeException(sqle);
		}
		finally
		{
			if (dba != null)
			{
				dba.terminal();
			}
		}
	}
	// ANK-4468-00-00 ADD END

}
