/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK0931KRCK
*	ソースファイル名：JKKejbKK0931KRCK.java
*	作成者			：富士通
*	日付			：2012年8月27日
*＜機能概要＞
*	サービス提供エリア警告対象住所制約部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/08/27	FJ)			新規作成
*
**********************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0931ETMsg;
import eo.ejb.cbm.entity.KK0931LE;
import eo.ejb.cbm.entity.ZM0081ETMsg;
import eo.ejb.cbm.entity.ZM0081LE;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * サービス提供エリア警告対象住所の制約を行う部品
 * </p>
 * @author 富士通
 */
public class JKKejbKK0931KRCK
{

	/**  無効フラグ：有効 */
	private static final String MK_FLG_YUKO = "0";

	/**  01：都道府県以下全域 */
	private static final String VTA_KKKU_WDASTISCP_CD_01 = "01";

	/**  02：市区町村以下全域 */
	private static final String VTA_KKKU_WDASTISCP_CD_02 = "02";

	/**  03：大字通称以下全域 */
	private static final String VTA_KKKU_WDASTISCP_CD_03 = "03";

	/**  04：字丁目以下全域 */
	private static final String VTA_KKKU_WDASTISCP_CD_04 = "04";

	/**  NULL値 */
	private static final String NULL_STR = null;

	/**
	 * <p>
	 * 新しいJKKejbKK0931KRCKクラスを作成します
	 * </p>
	 */
	public JKKejbKK0931KRCK()
	{
	}

	/**
	 * 適用期間重複チェック処理
	 * <p>
	 * 登録・更新対象となるサービス提供エリア警告対象住所の適用期間の重複チェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @param isCreate true：サービス提供エリア警告対象住所登録 false：サービス提供エリア警告対象住所更新
	 * @return 重複期間がなければtrue。重複期間があればfalse
	 */
	public boolean isNotTkyKknOverlap(CAANMsg inMsg, AgentDispatchContext inContext, boolean isCreate)
	{

		// ロジカルエンティティ生成
		KK0931LE le = new KK0931LE();

		String inStaYmd = null;
		String inEndYmd = null;
		String myNo = null;

		CAANMsg myMsg = new CAANMsg(KK0931ETMsg.class.getName());
		CAANMsg msg = new CAANMsg(KK0931ETMsg.class.getName());

		// (1) 入力値「登録フラグ」がfalseである場合、自契約の「サービス提供エリア警告対象住所」を取得する
		if (!isCreate)
		{
			myMsg = getMyKK0931(inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO));

			// 自契約検索結果が0件の場合、戻り値にtrueを設定し処理を終了する。
			if (myMsg == null)
			{
				return true;
			}
		}

		// (2) サービス提供エリア警告対象住所のロジカルエンティティに引き渡す、値の設定を行う

		if (isCreate)
		{
			// ａ．入力値「登録フラグ」がtrueである場合
			msg.set(KK0931ETMsg.SVC_CD, inMsg.getString(KK0931ETMsg.SVC_CD));
			msg.set(KK0931ETMsg.PRC_GRP_CD, inMsg.getString(KK0931ETMsg.PRC_GRP_CD));
			msg.set(KK0931ETMsg.PCRS_CD, inMsg.getString(KK0931ETMsg.PCRS_CD));
			msg.set(KK0931ETMsg.PPLAN_CD, inMsg.getString(KK0931ETMsg.PPLAN_CD));
			msg.set(KK0931ETMsg.CHK_SBT_CD, inMsg.getString(KK0931ETMsg.CHK_SBT_CD));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO));
			msg.set(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD, inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD));
			msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);
		}
		else
		{
			// ｂ．入力値「登録フラグ」がfalseである場合
			msg.set(KK0931ETMsg.SVC_CD, myMsg.getString(KK0931ETMsg.SVC_CD));
			msg.set(KK0931ETMsg.PRC_GRP_CD, myMsg.getString(KK0931ETMsg.PRC_GRP_CD));
			msg.set(KK0931ETMsg.PCRS_CD, myMsg.getString(KK0931ETMsg.PCRS_CD));
			msg.set(KK0931ETMsg.PPLAN_CD, myMsg.getString(KK0931ETMsg.PPLAN_CD));
			msg.set(KK0931ETMsg.CHK_SBT_CD, myMsg.getString(KK0931ETMsg.CHK_SBT_CD));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO));
			msg.set(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD, myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD));
			msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);
		}

		// (3) (2)で作成したメッセージを使用してレコード検索を行う。
		// ・ロジカルエンティティの検索を実行する（findByCondition)
		try
		{
			CAANMsg[] rsltMsg = le.findByCondition(msg);

			// (4) (3)の処理結果のメッセージ件数が0件の場合、戻り値にtrueを設定し、処理を終了する。
			if (rsltMsg == null)
			{
				return true;
			}

			// 以下重複期間のチェック
			if (isCreate)
			{
				// ａ．入力値「登録フラグ」がtrueである場合　(別紙「備考」【1.適用期間重複チェック判定】参照）
				inStaYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
				inEndYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);
			}
			else
			{
				// ｂ．入力値「登録フラグ」がfalseである場合(別紙「備考」【1.適用期間重複チェック判定】参照）
				inStaYmd = myMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
				inEndYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);
				myNo = myMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO);
			}

			// (5) (3)の処理結果のメッセージと入力値から、期間が重複している場合にエラーとする。
			if (!isNotKikan(inStaYmd, inEndYmd, myNo, rsltMsg))
			{
				return false;
			}
		}
		catch (CAANException ex)
		{
			ex.printStackTrace();
		}

		return true;
	}

	/**
	 * 提供エリア重複（上位）チェック処理
	 * <p>
	 * 登録・更新対象となるサービス提供エリア警告対象住所の適用エリアの重複チェックを行う（上位エリアの判定）
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @param isCreate true：サービス提供エリア警告対象住所登録 false：サービス提供エリア警告対象住所更新
	 * @return 重複する上位エリアがなければtrue。重複する上位があればfalse
	 */
	public boolean isNotAreaOvlUpper(CAANMsg inMsg, AgentDispatchContext inContext, boolean isCreate)
	{
		// ロジカルエンティティ生成
		KK0931LE le = new KK0931LE();

		String inStaYmd = null;
		String inEndYmd = null;
		String myNo = null;

		CAANMsg myMsg = new CAANMsg(KK0931ETMsg.class.getName());
		CAANMsg msg = new CAANMsg(KK0931ETMsg.class.getName());

		// (1) 入力値「登録フラグ」がfalseである場合、自契約の「サービス提供エリア警告対象住所」を取得する
		if (!isCreate)
		{
			myMsg = getMyKK0931(inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO));

			// 自契約検索結果が0件の場合、戻り値にtrueを設定し処理を終了する。
			if (myMsg == null)
			{
				return true;
			}
		}

		// (2) サービス提供エリア警告対象住所のロジカルエンティティに引き渡す、値の設定を行う
		if (isCreate)
		{
			// ａ．入力値「登録フラグ」がtrueである場合
			msg.set(KK0931ETMsg.SVC_CD, inMsg.getString(KK0931ETMsg.SVC_CD));
			msg.set(KK0931ETMsg.PRC_GRP_CD, inMsg.getString(KK0931ETMsg.PRC_GRP_CD));
			msg.set(KK0931ETMsg.PCRS_CD, inMsg.getString(KK0931ETMsg.PCRS_CD));
			msg.set(KK0931ETMsg.PPLAN_CD, inMsg.getString(KK0931ETMsg.PPLAN_CD));
			msg.set(KK0931ETMsg.CHK_SBT_CD, inMsg.getString(KK0931ETMsg.CHK_SBT_CD));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, NULL_STR);
			msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);

			// サービス提供エリア警告広域指定範囲コードが'01'または'02'の時
			if (VTA_KKKU_WDASTISCP_CD_01.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
					|| VTA_KKKU_WDASTISCP_CD_02.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, NULL_STR);
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, NULL_STR);
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, NULL_STR);
			}

			// サービス提供エリア警告広域指定範囲コードが'01'または'02'または'03'の時
			if (VTA_KKKU_WDASTISCP_CD_03.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, NULL_STR);
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, NULL_STR);
			}

			// サービス提供エリア警告広域指定範囲コードが'01'または'02'または'03'または'04'の時
			if (VTA_KKKU_WDASTISCP_CD_04.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, NULL_STR);
			}
		}
		else
		{
			// ｂ．入力値「登録フラグ」がfalseである場合
			msg.set(KK0931ETMsg.SVC_CD, myMsg.getString(KK0931ETMsg.SVC_CD));
			msg.set(KK0931ETMsg.PRC_GRP_CD, myMsg.getString(KK0931ETMsg.PRC_GRP_CD));
			msg.set(KK0931ETMsg.PCRS_CD, myMsg.getString(KK0931ETMsg.PCRS_CD));
			msg.set(KK0931ETMsg.PPLAN_CD, myMsg.getString(KK0931ETMsg.PPLAN_CD));
			msg.set(KK0931ETMsg.CHK_SBT_CD, myMsg.getString(KK0931ETMsg.CHK_SBT_CD));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, NULL_STR);
			msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);

			// サービス提供エリア警告広域指定範囲コードが'01'または'02'の時
			if (VTA_KKKU_WDASTISCP_CD_01.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
					|| VTA_KKKU_WDASTISCP_CD_02.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, NULL_STR);
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, NULL_STR);
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, NULL_STR);
			}

			// サービス提供エリア警告広域指定範囲コードが'03'の時
			if (VTA_KKKU_WDASTISCP_CD_03.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, NULL_STR);
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, NULL_STR);
			}

			// サービス提供エリア警告広域指定範囲コードが'04'の時
			if (VTA_KKKU_WDASTISCP_CD_04.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, NULL_STR);
			}
		}

		try
		{
			// (3) (2)で作成したメッセージを使用してレコード検索を行う。
			// ・ロジカルエンティティの検索を実行する（findByCondition)
			CAANMsg[] rsltMsg = le.findByCondition(msg);

			// (4) (3)の処理結果のメッセージ件数が0件の場合、戻り値にtrueを設定し、処理を終了する。
			if (rsltMsg == null)
			{
				return true;
			}

			// 以下重複期間のチェック
			if (isCreate)
			{
				// ａ．入力値「登録フラグ」がtrueである場合　(別紙「備考」【1.適用期間重複チェック判定】参照）
				inStaYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
				inEndYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);
			}
			else
			{
				// ｂ．入力値「登録フラグ」がfalseである場合(別紙「備考」【1.適用期間重複チェック判定】参照）
				inStaYmd = myMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
				inEndYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);
				myNo = myMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO);
			}

			// 検索結果より、期間の判定を行う
			if (!isNotKikan(inStaYmd, inEndYmd, myNo, rsltMsg))
			{
				return false;
			}
		}
		catch (CAANException ex)
		{
			ex.printStackTrace();
		}

		return true;
	}

	/**
	 * 提供エリア重複（下位）チェック処理
	 * <p>
	 * 登録・更新対象となるサービス提供エリア警告対象住所の適用エリアの重複チェックを行う（下位エリアの判定）
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @param isCreate true：サービス提供エリア警告対象住所登録 false：サービス提供エリア警告対象住所更新
	 * @return 重複する下位エリアがなければtrue。重複する下位があればfalse
	 */
	public boolean isNotAreaOvlLower(CAANMsg inMsg, AgentDispatchContext inContext, boolean isCreate)
	{
		// ロジカルエンティティ生成
		KK0931LE le = new KK0931LE();

		String inStaYmd = null;
		String inEndYmd = null;
		String myNo = null;

		CAANMsg myMsg = new CAANMsg(KK0931ETMsg.class.getName());
		CAANMsg msg = new CAANMsg(KK0931ETMsg.class.getName());

		// (1) 入力値「登録フラグ」がfalseである場合、自契約の「サービス提供エリア警告対象住所」を取得する
		if (!isCreate)
		{
			myMsg = getMyKK0931(inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO));

			// 自契約検索結果が0件の場合、戻り値にtueを設定し処理を終了する。
			if (myMsg == null)
			{
				return true;
			}
		}

		// (2) サービス提供エリア警告対象住所のロジカルエンティティに引き渡す、値の設定を行う
		if (isCreate)
		{
			// ａ．入力値「登録フラグ」がtrueである場合
			msg.set(KK0931ETMsg.SVC_CD, inMsg.getString(KK0931ETMsg.SVC_CD));
			msg.set(KK0931ETMsg.PRC_GRP_CD, inMsg.getString(KK0931ETMsg.PRC_GRP_CD));
			msg.set(KK0931ETMsg.PCRS_CD, inMsg.getString(KK0931ETMsg.PCRS_CD));
			msg.set(KK0931ETMsg.PPLAN_CD, inMsg.getString(KK0931ETMsg.PPLAN_CD));
			msg.set(KK0931ETMsg.CHK_SBT_CD, inMsg.getString(KK0931ETMsg.CHK_SBT_CD));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM));

			// サービス提供エリア警告広域指定範囲コードが'02'の時
			if (VTA_KKKU_WDASTISCP_CD_02.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
			}

			// サービス提供エリア警告広域指定範囲コードが'03'の時
			if (VTA_KKKU_WDASTISCP_CD_03.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
			}

			// サービス提供エリア警告広域指定範囲コードが'04'の時
			if (VTA_KKKU_WDASTISCP_CD_04.equals(inMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM));
			}

			// サービス提供エリア警告広域指定範囲コードがnullの時
			if (inMsg.isNull(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO));
			}
			msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);
		}
		else
		{
			// ｂ．入力値「登録フラグ」がfalseである場合
			msg.set(KK0931ETMsg.SVC_CD, myMsg.getString(KK0931ETMsg.SVC_CD));
			msg.set(KK0931ETMsg.PRC_GRP_CD, myMsg.getString(KK0931ETMsg.PRC_GRP_CD));
			msg.set(KK0931ETMsg.PCRS_CD, myMsg.getString(KK0931ETMsg.PCRS_CD));
			msg.set(KK0931ETMsg.PPLAN_CD, myMsg.getString(KK0931ETMsg.PPLAN_CD));
			msg.set(KK0931ETMsg.CHK_SBT_CD, myMsg.getString(KK0931ETMsg.CHK_SBT_CD));
			msg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM));

			// サービス提供エリア警告広域指定範囲コードが'02'の時
			if (VTA_KKKU_WDASTISCP_CD_02.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
			}

			// サービス提供エリア警告広域指定範囲コードが'03'の時
			if (VTA_KKKU_WDASTISCP_CD_03.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
			}

			// サービス提供エリア警告広域指定範囲コードが'04'の時
			if (VTA_KKKU_WDASTISCP_CD_04.equals(myMsg.getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM));
			}

			// サービス提供エリア警告広域指定範囲コードがnullの時
			if (myMsg.isNull(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
			{
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM));
				msg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, myMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO));
			}
			msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);
		}

		try
		{
			// (3) (2)で作成したメッセージを使用してレコード検索を行う。
			// ・ロジカルエンティティの検索を実行する（findByCondition)
			CAANMsg[] rsltMsg = le.findByCondition(msg);

			// (4) (3)の処理結果のメッセージ件数が0件の場合、戻り値にtrueを設定し、処理を終了する。
			if (rsltMsg == null)
			{
				return true;
			}

			// 以下重複期間のチェック
			if (isCreate)
			{
				// ａ．入力値「登録フラグ」がtrueである場合　(別紙「備考」【1.適用期間重複チェック判定】参照）
				inStaYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
				inEndYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);
			}
			else
			{
				// ｂ．入力値「登録フラグ」がfalseである場合(別紙「備考」【1.適用期間重複チェック判定】参照）
				inStaYmd = myMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
				inEndYmd = inMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);
				myNo = myMsg.getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO);
			}

			// 検索結果より、期間の判定を行う
			if (!isNotKikan(inStaYmd, inEndYmd, myNo, rsltMsg))
			{
				return false;
			}
		}
		catch (CAANException ex)
		{
			ex.printStackTrace();
		}

		return true;
	}

	/**
	 * 郵便番号存在チェック処理
	 * <p>
	 * 入力されたサービス提供エリア警告対象住所の郵便番号が、住所マスタに存在しているかのチェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 住所マスタに郵便番号が存在すればtrue。存在しなければfalse
	 */
	public boolean isSvtaKkkuTgPcd(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// ローカル変数
		String startYmd = null;
		String endYmd = null;
		String onlUnyoYmd = JKKModelCommon.getOpeDate(inMsg); // オンライン運用日

		// (1) 住所のロジカルエンティティに引き渡す、値の設定を行う
		CAANMsg msg = new CAANMsg(ZM0081ETMsg.class.getName());
		msg.set(ZM0081ETMsg.PCD, inMsg.getString(KK0931ETMsg.SVTA_KKKU_TG_PCD));
		msg.set(ZM0081ETMsg.MK_FLG, MK_FLG_YUKO);

		// ロジカルエンティティ生成
		ZM0081LE le = new ZM0081LE();

		// (2) (1)で作成したメッセージを使用して、検索を行う。
		// ・ロジカルエンティティのプライマリキー検索を実行する（findByCondition)
		try
		{
			CAANMsg[] rsltMsg = le.findByCondition(msg);

			// (3) (2)での処理結果のメッセージ件数が0件の場合、戻り値にfalseを設定し処理を終了する。
			if (rsltMsg == null)
			{
				return false;
			}

			// (4) (2)での処理結果のメッセージ件数が1件以上の場合
			for (int i = 0; i < rsltMsg.length; i++)
			{
				startYmd = rsltMsg[i].getString(ZM0081ETMsg.AD_TSTAYMD);
				endYmd = rsltMsg[i].getString(ZM0081ETMsg.AD_TENDYMD);

				// ａ．「結果．住所適用開始年月日 ≦ 運用日付 ≦ 結果．住所適用終了年月日」の場合、戻り値にtrueを設定し、処理を終了する。
				if (onlUnyoYmd.compareTo(startYmd) >= 0 && onlUnyoYmd.compareTo(endYmd) <= 0)
				{
					return true;
				}

				// ｂ．上記以外の場合、次の処理結果を判断する
			}
		}
		catch (CAANException ex)
		{
			ex.printStackTrace();
		}

		// (5) 戻り値にfalseを設定し、処理を終了する。
		return false;
	}

	/**
	 * <p>
	 *  自契約情報を取得する
	 * </p>
	 * @param svtaKkkuTaiadNo  サービス提供エリア警告対象住所番号
	 * @return 自契約情報
	 */
	private CAANMsg getMyKK0931(String svtaKkkuTaiadNo)
	{
		// ロジカルエンティティ生成
		KK0931LE myLe = new KK0931LE();
		CAANMsg msg = new CAANMsg(KK0931ETMsg.class.getName());
		CAANMsg rsltMsg = new CAANMsg(KK0931ETMsg.class.getName());

		// ａ．サービス提供エリア警告対象住所のロジカルエンティティに引き渡す、値の設定を行う
		msg.set(KK0931ETMsg.SVTA_KKKU_TAIAD_NO, svtaKkkuTaiadNo);
		msg.set(KK0931ETMsg.MK_FLG, MK_FLG_YUKO);

		// ｂ．「ａ．」で作成したメッセージを使用して、プライマリーキー検索を行う。
		// ・ロジカルエンティティのプライマリキー検索を実行する（findByPrimaryKey)
		rsltMsg = myLe.findByPrimaryKey(msg);

		return rsltMsg;
	}

	/**
	 * 
	 * <p>
	 * 検索結果より、期間の判定を行う
	 * </p>
	 * @param inStaYmd 入力・自契約の適用開始年月日
	 * @param inEndYmd 入力の適用終了年月日
	 * @param myNo 自契約「サービス提供エリア警告対象住所番号」
	 * @param rsltMsgs 検索結果一覧
	 * @return 重複期間なし：true 重複期間あり：false
	 */
	private boolean isNotKikan(String inStaYmd, String inEndYmd, String myNo, CAANMsg[] rsltMsgs)
	{
		String inFStaYmd = null;
		String inFEndYmd = null;
		boolean retFlg = true;

		// 検索結果がない場合、重複期間なし
		if (rsltMsgs == null)
		{
			return true;
		}

		// 検索結果の分繰り返す
		for (int i = 0; i < rsltMsgs.length; i++)
		{
			inFStaYmd = rsltMsgs[i].getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TSTAYMD);
			inFEndYmd = rsltMsgs[i].getString(KK0931ETMsg.SVTA_KKKU_TAIAD_TENDYMD);

			// 自契約「サービス提供エリア警告対象住所番号」と一致するデータである場合、次のデータを確認する
			if (myNo != null && myNo.equals(rsltMsgs[i].getString(KK0931ETMsg.SVTA_KKKU_TAIAD_NO)))
			{
				continue;
			}

			// 重複期間の判断

			// 検索結果．サービス提供エリア警告対象住所適用開始年月日 < CBMメッセージ・自契約「サービス提供エリア警告対象住所適用開始年月日」より小さい 且
			// 検索結果．サービス提供エリア警告対象住所適用終了年月日 > CBMメッセージ「サービス提供エリア警告対象住所適用終了年月日」より大きい
			if (inStaYmd.compareTo(inFStaYmd) < 0 && inEndYmd.compareTo(inFEndYmd) > 0)

			{
				retFlg = false;
			}
			
			// 検索結果．サービス提供エリア警告対象住所適用開始年月日 ≦ 
			// CBMメッセージ・自契約「サービス提供エリア警告対象住所適用開始年月日」
			// ≦ 検索結果．サービス提供エリア警告対象住所適用終了年月日以下
			if (inStaYmd.compareTo(inFStaYmd) >= 0 && inStaYmd.compareTo(inFEndYmd) <= 0)
			{
				retFlg = false;
			}
			
			// 検索結果．サービス提供エリア警告対象住所適用開始年月日 ≦ 
			// CBMメッセージ「サービス提供エリア警告対象住所適用終了年月日」≦ 
			// 検索結果．サービス提供エリア警告対象住所適用終了年月日以下
			if (inEndYmd.compareTo(inFStaYmd) >= 0 && inEndYmd.compareTo(inFEndYmd) <= 0)
			{
				retFlg = false;
			}
		}

		return retFlg;
	}
}
