/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbZM0111KRCK
*   ソースファイル名：JKKejbZM0111KRCK.java
*   作成者          ：富士通
*   日付            ：2013年05月13日
*＜機能概要＞
*   エイジングの関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v4.00.00    2013/05/13  FJ）竹内    OT-2013-0000675
*   v4.00.01    2013/05/21  FJ）沖田    OT-2013-0000675
*   v4.00.02    2013/05/27  FJ）竹内    IT1-2013-0001223
*   v8.00.00    2014/03/25  FJ）小島    OM-2014-0000286
*
**********************************************************************/

package eo.ejb.common.entity;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0111ETMsg;
import eo.ejb.cbm.entity.KK0161ETMsg;
import eo.ejb.cbm.entity.KK0171ETMsg;
import eo.ejb.cbm.entity.KK0191ETMsg;
import eo.ejb.cbm.entity.KK0221ETMsg;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbm.entity.KK0361ETMsg;
import eo.ejb.cbm.entity.KK0401ETMsg;
import eo.ejb.cbm.entity.KK0411ETMsg;
import eo.ejb.cbm.entity.ZM0111ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.db.JKKejbKK0111DBABase;
import eo.ejb.common.db.JKKejbKK0161DBABase;
import eo.ejb.common.db.JKKejbKK0171DBABase;
import eo.ejb.common.db.JKKejbKK0191DBABase;
import eo.ejb.common.db.JKKejbKK0221DBABase;
import eo.ejb.common.db.JKKejbKK0351DBABase;
import eo.ejb.common.db.JKKejbKK0361DBABase;
import eo.ejb.common.db.JKKejbKK0401DBABase;
import eo.ejb.common.db.JKKejbKK0411DBABase;
import eo.ejb.common.db.JKKejbZM0111DBABase;
import eo.ejb.common.db.JKKejbZM0321DBAccess;

/**
 * <p>
 * エイジングの関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbZM0111KRCK extends JKKejbZM0111DBABase
{

	/** アットマーク */
	private static final String ATSIGN = "@";

	/**
	 * エイジング種別検索条件マップ
	 */
	private static final HashMap<String, String[]> AGING_SBT_SEARCH_JKN_MAP = new HashMap<String, String[]>();
	static {
		/*
		 * メールアドレス、メールエイリアスは重複不可のため、エイジングチェック時には、互いのエイジング種別を含めて検索する。
		 */
		// ISP認証ID(アカウント)
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_ISP_NINSHO_ID,
				new String [] {JKKModelConst.AGING_SBT_CD_ISP_NINSHO_ID});
		// PPP認証ID(アカウント)
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_PPP_NINSHO_ID,
				new String [] {JKKModelConst.AGING_SBT_CD_PPP_NINSHO_ID});
		// 電話番号
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_TELNO,
				new String [] {JKKModelConst.AGING_SBT_CD_TELNO});
		// SIPユーザーID
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_SIP_USER_ID,
				new String [] {JKKModelConst.AGING_SBT_CD_SIP_USER_ID});
		// ADSL認証ID(アカウント)
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_ADSL_NINSHO_ID,
				new String [] {JKKModelConst.AGING_SBT_CD_ADSL_NINSHO_ID});
		// 固定IPアドレス
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_FIXIPAD,
				new String [] {JKKModelConst.AGING_SBT_CD_FIXIPAD});
		// URL
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_URL,
				new String [] {JKKModelConst.AGING_SBT_CD_URL});
		// WebID
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_WEB_ID,
				new String [] {JKKModelConst.AGING_SBT_CD_WEB_ID});
		// POPID
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_POP_ID,
				new String [] {JKKModelConst.AGING_SBT_CD_POP_ID});
		// メールアドレス
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_MLAD,
				new String [] {JKKModelConst.AGING_SBT_CD_MLAD, JKKModelConst.AGING_SBT_CD_MAILALIAS, JKKModelConst.AGING_SBT_CD_MLLIST});
		// メーリングリスト
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_MLLIST,
				new String [] {JKKModelConst.AGING_SBT_CD_MLAD, JKKModelConst.AGING_SBT_CD_MAILALIAS, JKKModelConst.AGING_SBT_CD_MLLIST});
		// メールエイリアス
		AGING_SBT_SEARCH_JKN_MAP.put(JKKModelConst.AGING_SBT_CD_MAILALIAS,
				new String [] {JKKModelConst.AGING_SBT_CD_MLAD, JKKModelConst.AGING_SBT_CD_MAILALIAS, JKKModelConst.AGING_SBT_CD_MLLIST});
	}

	/**
	 * <p>
	 * 電話番号エイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isTelnoAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isTelnoAgingChk");

		if (!("1".equals(chkPtn) || "2".equals(chkPtn) || "3".equals(chkPtn)))
		{
			throw new CAANRuntimeException("未定義のチェックパターンです。");
		}

		// サービス契約内訳番号
		String svcKeiUcwkNo = null;
		// 電話番号
		String telno = null;
		// 個別検索条件マップ
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();

		JKKejbKK0081DBABase kk0081dba = new JKKejbKK0081DBABase();
		JKKejbKK0161DBABase kk0161dba = new JKKejbKK0161DBABase();
		JKKejbKK0191DBABase kk0191dba = new JKKejbKK0191DBABase();
		String opedate = JKKModelCommon.getOpeDate(inMsg);

		/* ------------------------------------------------------------------------------------------------------------------------
		 * 現時点では、登録・変更IFでのチェックは不要。
		 * 「エイジング」に登録する際に、「EZM0111D010_エイジング対象登録」にて、エイジング対象値の存在チェックが行われるため。
		 * ------------------------------------------------------------------------------------------------------------------------ */
		// 回復・解約取消・キャンセル取消IF
		if ("3".equals(chkPtn))
		{
			// サービス契約内訳番号が未設定の場合、チェック対象外
			svcKeiUcwkNo = inMsg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO);
			if (svcKeiUcwkNo == null || "".equals(svcKeiUcwkNo))
			{
				return true;
			}

			// 内訳に紐づく親のサービス契約が電話のみをチェック対象とする。
			CAANMsg inKK0161Msg = kk0161dba.getKK0161Current(svcKeiUcwkNo, opedate);

			String svcKeiNo = inKK0161Msg.getString(KK0161ETMsg.SVC_KEI_NO);
			CAANMsg kk0081Msg = kk0081dba.getKK0081Current(svcKeiNo, opedate);

			// 電話契約以外の場合、チェック対象外
			if (!JKKModelConst.SVC_CD_TEL.equals(kk0081Msg.getString(KK0081ETMsg.SVC_CD)))
			{
				return true;
			}

			// 対象の「サービス契約内訳<eo光電話>」のカレントレコードを取得する。
			CAANMsg kk0191Msg = kk0191dba.findByCurrent(inMsg);

			// 電話番号が未設定の場合、チェック対象外
			telno = kk0191Msg.getString(KK0191ETMsg.TELNO);
			if (telno == null || "".equals(telno))
			{
				return true;
			}

			// 追加検索条件：エイジング.エイジングステータス = "使用中"、"エージング中"
			String [] agingStatList = {JKKModelConst.AGING_STAT_USE_CHU, JKKModelConst.AGING_STAT_AGING_CHU};
			searchJknMap.put(ZM0111ETMsg.AGING_STAT, agingStatList);
		}

		// 対象の電話番号に紐づく「エイジング」を取得する。
		CAANMsg[] zm0111MsgList = new JKKejbZM0111DBABase().getZM0111byAgingTgValue(
				new String[] {JKKModelConst.AGING_SBT_CD_TELNO}, telno, searchJknMap);

		// １件でも存在する場合、チェックＮＧ
		if (zm0111MsgList.length > 0)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * ISP認証ID(アカウント)エイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isIspNinshoIdAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isIspNinshoIdAgingChk");

		return isAgingChkForSvcKeiUcwk(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_ISP_NINSHO_ID);
	}

	/**
	 * <p>
	 * PPP認証ID(アカウント)エイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isPppNinshoIdAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isPppNinshoIdAgingChk");

		return isAgingChkForSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_PPP_NINSHO_ID);
	}
//
//	/**
//	 * <p>
//	 * 電話番号エイジングチェック処理
//	 * </p>
//	 * @param inMsg 処理対象のメッセージキャリア
//	 * @param inContext Agentから渡されたAgentDispatchContext
//	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
//	 * @return true:チェックＯＫ、false:チェックＮＧ
//	 */
//	public boolean isTelnoAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
//	{
//		// 開始ログ出力
//		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isTelnoAgingChk");
//
//		return isAgingChkForSvcKeiUcwk(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_TELNO);
//	}

	/**
	 * <p>
	 * SIPユーザーIDエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isSipUserIdAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isSipUserIdAgingChk");

		return isAgingChkForSvcKeiUcwk(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_SIP_USER_ID);
	}

	/**
	 * <p>
	 * ADSL認証ID(アカウント)エイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isAdslNinshoIdAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isAdslNinshoIdAgingChk");

		return isAgingChkForSvcKeiUcwk(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_ADSL_NINSHO_ID);
	}

	/**
	 * <p>
	 * 固定IPアドレスエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isFixipadAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isFixipadAgingChk");

		return isAgingChkForOpSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_FIXIPAD);
	}

	/**
	 * <p>
	 * URLエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isUrlAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isUrlAgingChk");

		return isAgingChkForOpSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_URL);
	}

	/**
	 * <p>
	 * WebIDエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isWebIdAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isWebIdAgingChk");

		return isAgingChkForOpSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_WEB_ID);
	}

	/**
	 * <p>
	 * POPIDエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isPopIdAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isPopIdAgingChk");

		return isAgingChkForOpSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_POP_ID);
	}

	/**
	 * <p>
	 * メールアドレスエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isMladAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isMladAgingChk");

		return isAgingChkForOpSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_MLAD);
	}

	/**
	 * <p>
	 * メーリングリストエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF / "4"：登録IF(使用中))
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isMllistAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isMllistAgingChk");

		return isAgingChkForOpSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_MLLIST);
	}

	/**
	 * <p>
	 * メールエイリアスエイジングチェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	public boolean isMailaliastAgingChk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbZM0111KRCK#isMailaliastAgingChk");

		return isAgingChkForSbopSvcKei(inMsg, inContext, chkPtn, JKKModelConst.AGING_SBT_CD_MAILALIAS);
	}

	/**
	 * <p>
	 * エイジングチェック処理（サービス契約用）
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	private boolean isAgingChkForSvcKei(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn, String agingSbtCd)
	{
		if (!("1".equals(chkPtn) || "2".equals(chkPtn) || "3".equals(chkPtn)))
		{
			throw new CAANRuntimeException("未定義のチェックパターンです。");
		}

		// エイジング対象値
		String agingTgValue = null;
		// 個別検索条件マップ
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();

		JKKejbKK0081DBABase kk0081dba = new JKKejbKK0081DBABase();
		String opedate = JKKModelCommon.getOpeDate(inMsg);

		/* ------------------------------------------------------------------------------------------------------------------------
		 * 現時点では、登録・変更IFでのチェックは不要。
		 * 「エイジング」に登録する際に、「EZM0111D010_エイジング対象登録」にて、エイジング対象値の存在チェックが行われるため。
		 * ------------------------------------------------------------------------------------------------------------------------ */
		// 回復・解約取消・キャンセル取消IF
		if ("3".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.サービス契約番号が設定(採番)されていること。
			 * Aエイジングチェック対象の料金グループであること。
			 * Bカレント.エイジング対象値が設定されていること。
			 * -------------------------------------------------------------------------------- */
			// サービス契約番号が未設定の場合、チェック対象外
			String svcKeiNo = inMsg.getString(KK0081ETMsg.SVC_KEI_NO);
			if (svcKeiNo == null || "".equals(svcKeiNo))
			{
				return true;
			}

			// 対象の「サービス契約」のカレントレコードを取得する。
			CAANMsg kk0081Msg = kk0081dba.getKK0081Current(svcKeiNo, opedate);

			// エイジングチェック対象の料金グループコード以外の場合、チェック対象外
			if (!isAgingChkTgPrcGrp(agingSbtCd, kk0081Msg.getString(KK0081ETMsg.PRC_GRP_CD)))
			{
				return true;
			}

			// 対象の「サービス契約」のサブタイプのレコードを取得する。
			CAANMsg kk0081SubTypeMsg = getKK0081SubTypeByAgingSbt(agingSbtCd, svcKeiNo, kk0081Msg.getString(KK0081ETMsg.GENE_ADD_DTM));

			// カレント.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, kk0081SubTypeMsg);
			// カレント.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 追加検索条件：エイジング.エイジングステータス = "使用中"、"エージング中"
			String [] agingStatList = {JKKModelConst.AGING_STAT_USE_CHU, JKKModelConst.AGING_STAT_AGING_CHU};
			searchJknMap.put(ZM0111ETMsg.AGING_STAT, agingStatList);
		}

		// エイジング対象値に紐づく「エイジング」を取得する。
		CAANMsg[] zm0111MsgList = new JKKejbZM0111DBABase().getZM0111byAgingTgValue(
				AGING_SBT_SEARCH_JKN_MAP.get(agingSbtCd), agingTgValue, searchJknMap);

		// １件でも存在する場合、チェックＮＧ
		if (zm0111MsgList.length > 0)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * エイジングチェック処理（サービス契約内訳用）
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	private boolean isAgingChkForSvcKeiUcwk(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn, String agingSbtCd)
	{
		if (!("1".equals(chkPtn) || "2".equals(chkPtn) || "3".equals(chkPtn)))
		{
			throw new CAANRuntimeException("未定義のチェックパターンです。");
		}

		// エイジング対象値
		String agingTgValue = null;
		// 個別検索条件マップ
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();

		JKKejbKK0081DBABase kk0081dba = new JKKejbKK0081DBABase();
		JKKejbKK0161DBABase kk0161dba = new JKKejbKK0161DBABase();
		String opedate = JKKModelCommon.getOpeDate(inMsg);

		/* ------------------------------------------------------------------------------------------------------------------------
		 * 現時点では、登録・変更IFでのチェックは不要。
		 * 「エイジング」に登録する際に、「EZM0111D010_エイジング対象登録」にて、エイジング対象値の存在チェックが行われるため。
		 * ------------------------------------------------------------------------------------------------------------------------ */
		// 回復・解約取消・キャンセル取消IF
		if ("3".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.サービス契約内訳番号が設定(採番)されていること。
			 * Aエイジングチェック対象の料金グループであること。
			 * Bカレント.エイジング対象値が設定されていること。
			 * -------------------------------------------------------------------------------- */
			// サービス契約内訳番号が未設定の場合、チェック対象外
			String svcKeiUcwkNo = inMsg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO);
			if (svcKeiUcwkNo == null || "".equals(svcKeiUcwkNo))
			{
				return true;
			}

			// 対象の「サービス契約内訳」のカレントレコードを取得する。
			CAANMsg kk0161Msg = kk0161dba.getKK0161Current(svcKeiUcwkNo, opedate);

			// 対象の「サービス契約内訳」の親「サービス契約」を取得する。
			CAANMsg kk0081Msg = kk0081dba.getKK0081Current(kk0161Msg.getString(KK0161ETMsg.SVC_KEI_NO), opedate);

			// エイジングチェック対象の料金グループコード以外の場合、チェック対象外
			if (!isAgingChkTgPrcGrp(agingSbtCd, kk0081Msg.getString(KK0081ETMsg.PRC_GRP_CD)))
			{
				return true;
			}

			// 対象の「サービス契約内訳」のサブタイプのレコードを取得する。
			CAANMsg kk0161SubTypeMsg = getKK0161SubTypeByAgingSbt(agingSbtCd, svcKeiUcwkNo, kk0161Msg.getString(KK0161ETMsg.GENE_ADD_DTM));

			// カレント.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, kk0161SubTypeMsg);
			// カレント.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 追加検索条件：エイジング.エイジングステータス = "使用中"、"エージング中"
			String [] agingStatList = {JKKModelConst.AGING_STAT_USE_CHU, JKKModelConst.AGING_STAT_AGING_CHU};
			searchJknMap.put(ZM0111ETMsg.AGING_STAT, agingStatList);
		}

		// エイジング対象値に紐づく「エイジング」を取得する。
		CAANMsg[] zm0111MsgList = new JKKejbZM0111DBABase().getZM0111byAgingTgValue(
				AGING_SBT_SEARCH_JKN_MAP.get(agingSbtCd), agingTgValue, searchJknMap);

		// １件でも存在する場合、チェックＮＧ
		if (zm0111MsgList.length > 0)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * エイジングチェック処理（オプションサービス契約用）
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF / "4"：登録IF(使用中))
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	private boolean isAgingChkForOpSvcKei(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn, String agingSbtCd)
	{
		if (!("1".equals(chkPtn) || "2".equals(chkPtn) || "3".equals(chkPtn) || "4".equals(chkPtn)))
		{
			throw new CAANRuntimeException("未定義のチェックパターンです。");
		}

		// エイジング対象値
		String agingTgValue = null;
		// 個別検索条件マップ
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();

		JKKejbKK0351DBABase kk0351dba = new JKKejbKK0351DBABase();
		String opedate = JKKModelCommon.getOpeDate(inMsg);

		// 登録IF
		if ("1".equals(chkPtn) || "4".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @エイジングチェック対象のオプションであること。
			 * A入力.エイジング対象値が設定されていること。
			 * -------------------------------------------------------------------------------- */
			// エイジングチェック対象のオプションサービスコード以外の場合、チェック対象外
			if (!isAgingChkTgOpSvc(agingSbtCd, getOp_Svc_cd()))
			{
				return true;
			}

			// 入力.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, inMsg);
			// 入力.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 【使用中】の「エイジング」のみを対象とする場合
			if ("4".equals(chkPtn))
			{
				// 追加検索条件：エイジング.エイジングステータス = "使用中"
				String [] agingStatList = {JKKModelConst.AGING_STAT_USE_CHU};
				searchJknMap.put(ZM0111ETMsg.AGING_STAT, agingStatList);
			}
		}
		// 変更IF
		else if ("2".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.オプションサービス契約番号が設定(採番)されていること。
			 * Aエイジングチェック対象のオプションであること。
			 * B入力.エイジング対象値が設定されていること。
			 * C入力.エイジング対象値≠カレント.エイジング対象値であること。
			 * -------------------------------------------------------------------------------- */
			// 入力.オプションサービス契約番号が未設定の場合、チェック対象外
			String opSvcKeiNo = inMsg.getString(KK0351ETMsg.OP_SVC_KEI_NO);
			if (opSvcKeiNo == null || "".equals(opSvcKeiNo))
			{
				return true;
			}

			// 対象の「オプションサービス契約」のカレントレコードを取得する。
			CAANMsg searchKey = new CAANMsg(KK0351ETMsg.class.getName());
			searchKey.set(KK0351ETMsg.OP_SVC_KEI_NO, opSvcKeiNo);
			searchKey.set(KK0351ETMsg.RSV_APLY_YMD, opedate);			
			CAANMsg kk0351Msg = kk0351dba.findByCurrent(searchKey);
			
			// オプションサービス契約番号が存在しない場合、チェック対象外
			if (kk0351Msg == null)
			{
				return true;
			}

			// エイジングチェック対象のオプションサービスコード以外の場合、チェック対象外
			if (!isAgingChkTgOpSvc(agingSbtCd, kk0351Msg.getString(KK0351ETMsg.OP_SVC_CD)))
			{
				return true;
			}

			// 入力.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, inMsg);
			// 入力.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 対象の「オプションサービス契約」のサブタイプのレコードを取得する。
			CAANMsg kk0351SubTypeMsg = getKK0351SubTypeByAgingSbt(agingSbtCd, opSvcKeiNo, kk0351Msg.getString(KK0351ETMsg.GENE_ADD_DTM));

			// カレント.エイジング対象値を取得する。
			String agingTgValueBf = getAgingTgValue(agingSbtCd, kk0351SubTypeMsg);
			// 入力.エイジング対象値＝カレント.エイジング対象値 の場合は、チェック対象外
			if (agingTgValue.equals(agingTgValueBf))
			{
				return true;
			}
		}
		// 回復・解約取消・キャンセル取消IF
		else if ("3".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.オプションサービス契約番号が設定(採番)されていること。
			 * Aエイジングチェック対象のオプションであること。
			 * Bカレント.エイジング対象値が設定されていること。
			 * -------------------------------------------------------------------------------- */
			// 入力.オプションサービス契約番号が未設定の場合、チェック対象外
			String opSvcKeiNo = inMsg.getString(KK0351ETMsg.OP_SVC_KEI_NO);
			if (opSvcKeiNo == null || "".equals(opSvcKeiNo))
			{
				return true;
			}

			// 対象の「オプションサービス契約」のカレントレコードを取得する。
			CAANMsg kk0351Msg = kk0351dba.getKK0351Current(opSvcKeiNo, opedate);

			// エイジングチェック対象のオプションサービスコード以外の場合、チェック対象外
			if (!isAgingChkTgOpSvc(agingSbtCd, kk0351Msg.getString(KK0351ETMsg.OP_SVC_CD)))
			{
				return true;
			}

			// 対象の「オプションサービス契約」のサブタイプのレコードを取得する。
			CAANMsg kk0351SubTypeMsg = getKK0351SubTypeByAgingSbt(agingSbtCd, opSvcKeiNo, kk0351Msg.getString(KK0351ETMsg.GENE_ADD_DTM));

			// カレント.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, kk0351SubTypeMsg);
			// カレント.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 追加検索条件：エイジング.エイジングステータス = "使用中"、"エージング中"
			String [] agingStatList = {JKKModelConst.AGING_STAT_USE_CHU, JKKModelConst.AGING_STAT_AGING_CHU};
			searchJknMap.put(ZM0111ETMsg.AGING_STAT, agingStatList);
		}

		// エイジング対象値に紐づく「エイジング」を取得する。
		CAANMsg[] zm0111MsgList = new JKKejbZM0111DBABase().getZM0111byAgingTgValue(
				AGING_SBT_SEARCH_JKN_MAP.get(agingSbtCd), agingTgValue, searchJknMap);

		// １件でも存在する場合、チェックＮＧ
		if (zm0111MsgList.length > 0)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * エイジングチェック処理（サブオプションサービス契約用）
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param chkPtn チェックパターン("1"：登録IF / "2"：変更IF / "3"：回復・解約取消・キャンセル取消IF)
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @return true:チェックＯＫ、false:チェックＮＧ
	 */
	private boolean isAgingChkForSbopSvcKei(CAANMsg inMsg, AgentDispatchContext inContext, String chkPtn, String agingSbtCd)
	{
		if (!("1".equals(chkPtn) || "2".equals(chkPtn) || "3".equals(chkPtn)))
		{
			throw new CAANRuntimeException("未定義のチェックパターンです。");
		}

		// エイジング対象値
		String agingTgValue = null;
		// 個別検索条件マップ
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();

		JKKejbKK0401DBABase kk0401dba = new JKKejbKK0401DBABase();
		String opedate = JKKModelCommon.getOpeDate(inMsg);

		// 登録IF
		if ("1".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.オプションサービス契約番号が設定(採番)されていること。
			 * Aエイジングチェック対象のサブオプションであること。
			 * B入力.エイジング対象値が設定されていること。
			 * -------------------------------------------------------------------------------- */
			// オプションサービス契約番号が未設定の場合、チェック対象外
			String opSvcKeiNo = inMsg.getString(KK0411ETMsg.OP_SVC_KEI_NO);
			if (opSvcKeiNo == null || "".equals(opSvcKeiNo))
			{
				return true;
			}

			// エイジングチェック対象のサブオプションサービスコード以外の場合、チェック対象外
			if (!isAgingChkTgSbopSvc(agingSbtCd, getSbop_Svc_cd()))
			{
				return true;
			}

			// 入力.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, inMsg);
			// 入力.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}
		}
		// 変更IF
		else if ("2".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.オプションサービス契約番号、サブオプションサービス契約番号が設定(採番)されていること。
			 * Aエイジングチェック対象のサブオプションであること。
			 * B入力.エイジング対象値が設定されていること。
			 * C入力.エイジング対象値≠カレント.エイジング対象値であること。
			 * -------------------------------------------------------------------------------- */
			// オプションサービス契約番号、サブオプションサービス契約番号が未設定の場合、チェック対象外
			String opSvcKeiNo = inMsg.getString(KK0401ETMsg.OP_SVC_KEI_NO);
			String sbopSvcKeiNo = inMsg.getString(KK0401ETMsg.SBOP_SVC_KEI_NO);
			if ((opSvcKeiNo == null || "".equals(opSvcKeiNo)) || (sbopSvcKeiNo == null || "".equals(sbopSvcKeiNo)))
			{
				return true;
			}

			// 対象の「サブオプションサービス契約」のカレントレコードを取得する。
			CAANMsg searchKey = new CAANMsg(KK0401ETMsg.class.getName());
			searchKey.set(KK0401ETMsg.OP_SVC_KEI_NO, opSvcKeiNo);
			searchKey.set(KK0401ETMsg.SBOP_SVC_KEI_NO, sbopSvcKeiNo);
			searchKey.set(KK0401ETMsg.RSV_APLY_YMD, opedate);
			
			CAANMsg kk0401Msg = kk0401dba.findByCurrent(searchKey);
			
			// サブオプションサービス契約が存在しない場合、チェック対象外
			if (kk0401Msg == null)
			{
				return true;
			}

			// エイジングチェック対象のサブオプションサービスコード以外の場合、チェック対象外
			if (!isAgingChkTgSbopSvc(agingSbtCd, kk0401Msg.getString(KK0401ETMsg.SBOP_SVC_CD)))
			{
				return true;
			}

			// 入力.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, inMsg);
			// 入力.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 対象の「サブオプションサービス契約」のサブタイプのレコードを取得する。
			CAANMsg kk0401SubTypeMsg = getKK0401SubTypeByAgingSbt(agingSbtCd,
					opSvcKeiNo, sbopSvcKeiNo, kk0401Msg.getString(KK0401ETMsg.GENE_ADD_DTM));

			// カレント.エイジング対象値を取得する。
			String agingTgValueBf = getAgingTgValue(agingSbtCd, kk0401SubTypeMsg);
			// 入力.エイジング対象値＝カレント.エイジング対象値 の場合は、チェック対象外
			if (agingTgValue.equals(agingTgValueBf))
			{
				return true;
			}
		}
		// 回復・解約取消・キャンセル取消IF
		else if ("3".equals(chkPtn))
		{
			/* --------------------------------------------------------------------------------
			 * チェック実施条件
			 * @入力.オプションサービス契約番号、サブオプションサービス契約番号が設定(採番)されていること。
			 * Aエイジングチェック対象のサブオプションであること。
			 * Bカレント.エイジング対象値が設定されていること。
			 * -------------------------------------------------------------------------------- */
			// オプションサービス契約番号、サブオプションサービス契約番号が未設定の場合、チェック対象外
			String opSvcKeiNo = inMsg.getString(KK0401ETMsg.OP_SVC_KEI_NO);
			String sbopSvcKeiNo = inMsg.getString(KK0401ETMsg.SBOP_SVC_KEI_NO);
			if ((opSvcKeiNo == null || "".equals(opSvcKeiNo)) || (sbopSvcKeiNo == null || "".equals(sbopSvcKeiNo)))
			{
				return true;
			}

			// 対象の「サブオプションサービス契約」のカレントレコードを取得する。
			CAANMsg kk0401Msg = kk0401dba.getKK0401Current(opSvcKeiNo, sbopSvcKeiNo, opedate);

			// エイジングチェック対象のサブオプションサービスコード以外の場合、チェック対象外
			if (!isAgingChkTgSbopSvc(agingSbtCd, kk0401Msg.getString(KK0401ETMsg.SBOP_SVC_CD)))
			{
				return true;
			}

			// 対象の「サブオプションサービス契約」のサブタイプのレコードを取得する。
			CAANMsg kk0401SubTypeMsg = getKK0401SubTypeByAgingSbt(agingSbtCd,
					opSvcKeiNo, sbopSvcKeiNo, kk0401Msg.getString(KK0401ETMsg.GENE_ADD_DTM));

			// カレント.エイジング対象値を取得する。
			agingTgValue = getAgingTgValue(agingSbtCd, kk0401SubTypeMsg);
			// カレント.エイジング対象値が未設定の場合、チェック対象外
			if (agingTgValue == null || "".equals(agingTgValue))
			{
				return true;
			}

			// 追加検索条件：エイジング.エイジングステータス = "使用中"、"エージング中"
			String [] agingStatList = {JKKModelConst.AGING_STAT_USE_CHU, JKKModelConst.AGING_STAT_AGING_CHU};
			searchJknMap.put(ZM0111ETMsg.AGING_STAT, agingStatList);
		}

		// エイジング対象値に紐づく「エイジング」を取得する。
		CAANMsg[] zm0111MsgList = new JKKejbZM0111DBABase().getZM0111byAgingTgValue(
				AGING_SBT_SEARCH_JKN_MAP.get(agingSbtCd), agingTgValue, searchJknMap);

		// １件でも存在する場合、チェックＮＧ
		if (zm0111MsgList.length > 0)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * 該当の料金グループがエイジングチェックの対象であるかどうか判別します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param prcGrpCd 料金グループコード
	 * @return true:エイジングチェックの対象となる料金グループである場合、false:それ以外
	 */
	private boolean isAgingChkTgPrcGrp(String agingSbtCd, String prcGrpCd)
	{
		// ISP認証ID(アカウント)エイジングチェック
		if (JKKModelConst.AGING_SBT_CD_ISP_NINSHO_ID.equals(agingSbtCd))
		{
			// 料金グループコード："ｅｏ光ネットホームタイプ"、"ｅｏ光ネットメゾンタイプ"、"ｅｏ光ネットマンションタイプ"
			if (JKKModelConst.PRC_GRP_CD_EOHNT_HOME_TYPE.equals(prcGrpCd)
					|| JKKModelConst.PRC_GRP_CD_EOHNT_MAISON_TYPE.equals(prcGrpCd)
					|| JKKModelConst.PRC_GRP_CD_EOHNT_MANS_TYPE.equals(prcGrpCd))
			{
				return true;
			}
		}
		// PPP認証ID(アカウント)エイジングチェック、電話番号エイジングチェック、SIPユーザーIDエイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_PPP_NINSHO_ID.equals(agingSbtCd)
				|| JKKModelConst.AGING_SBT_CD_TELNO.equals(agingSbtCd) || JKKModelConst.AGING_SBT_CD_SIP_USER_ID.equals(agingSbtCd))
		{
			// 料金グループコード："ｅｏ光電話"
			if (JKKModelConst.PRC_GRP_CD_EOHTL.equals(prcGrpCd))
			{
				return true;
			}
		}
		// ADSL認証ID(アカウント)エイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_ADSL_NINSHO_ID.equals(agingSbtCd))
		{
			// 料金グループコード："ｅｏＡＤＳＬ（ｅＡｃｃｅｓｓ）"、"ｅｏＡＤＳＬ（フレッツ））"
			if (JKKModelConst.PRC_GRP_CD_EOADSL_EACCESS.equals(prcGrpCd) || JKKModelConst.PRC_GRP_CD_EOADSL_FLETS.equals(prcGrpCd))
			{
				return true;
			}
		}

		return false;
	}

	/**
	 * <p>
	 * 該当のオプションサービスがエイジングチェックの対象であるかどうか判別します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param opSvcCd オプションサービスコード
	 * @return true:エイジングチェックの対象となるオプションサービスである場合、false:それ以外
	 */
	private boolean isAgingChkTgOpSvc(String agingSbtCd, String opSvcCd)
	{
		// 固定IPアドレスエイジングチェック
		if (JKKModelConst.AGING_SBT_CD_FIXIPAD.equals(agingSbtCd))
		{
			// オプションサービスコード："固定グローバルＩＰアドレス"
			if (JKKModelConst.OP_SVC_CD_KOTEI_GLOBAL_IPAD.equals(opSvcCd))
			{
				return true;
			}
		}
		// URLエイジングチェック、WebIDエイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_URL.equals(agingSbtCd) || JKKModelConst.AGING_SBT_CD_WEB_ID.equals(agingSbtCd))
		{
			// オプションサービスコード："Ｍｙホームページ"、"ＳＯＨＯパック１０"
			if (JKKModelConst.OP_SVC_CD_MY_HP.equals(opSvcCd) || JKKModelConst.OP_SVC_CD_SOHO_PACK_10.equals(opSvcCd))
			{
				return true;
			}
		}
		// POPIDエイジングチェック、メールアドレスエイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_POP_ID.equals(agingSbtCd) || JKKModelConst.AGING_SBT_CD_MLAD.equals(agingSbtCd))
		{
			// オプションサービスコード："Ｅメール"
			if (JKKModelConst.OP_SVC_CD_EMAIL.equals(opSvcCd))
			{
				return true;
			}
		}
		// メーリングリストエイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_MLLIST.equals(agingSbtCd))
		{
			// オプションサービスコード："メーリングリスト"
			if (JKKModelConst.OP_SVC_CD_MLLIST.equals(opSvcCd))
			{
				return true;
			}
		}

		return false;
	}

	/**
	 * <p>
	 * 該当のサブオプションサービスがエイジングチェックの対象であるかどうか判別します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param sbopSvcCd サブオプションサービスコード
	 * @return true:エイジングチェックの対象となるサブオプションサービスである場合、false:それ以外
	 */
	private boolean isAgingChkTgSbopSvc(String agingSbtCd, String sbopSvcCd)
	{
		// メールエイリアスエイジングチェック
		if (JKKModelConst.AGING_SBT_CD_MAILALIAS.equals(agingSbtCd))
		{
			// サブオプションサービスコード："メールエイリアス"
			if (JKKModelConst.SBOP_SVC_CD_MAILALIAS.equals(sbopSvcCd))
			{
				return true;
			}
		}

		return false;
	}

	/**
	 * <p>
	 * 該当のエイジング種別コードに応じたエイジング対象値の取得元となる「サービス契約」サブタイプを取得します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param svcKeiNo サービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @return エイジング対象値の取得元となる「サービス契約」サブタイプのメッセージキャリア
	 */
	private CAANMsg getKK0081SubTypeByAgingSbt(String agingSbtCd, String svcKeiNo, String geneAddDtm)
	{
		CAANMsg kk0081SubTypeMsg = null;
		// PPP認証ID(アカウント)エイジングチェック
		if (JKKModelConst.AGING_SBT_CD_PPP_NINSHO_ID.equals(agingSbtCd))
		{
			// 対象の「サービス契約<eo光電話>」のレコードを取得する。
			kk0081SubTypeMsg = new JKKejbKK0111DBABase().getKK0111Primary(svcKeiNo, geneAddDtm);
		}

		return kk0081SubTypeMsg;
	}

	/**
	 * <p>
	 * 該当のエイジング種別コードに応じたエイジング対象値の取得元となる「サービス契約内訳」サブタイプを取得します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @return エイジング対象値の取得元となる「サービス契約内訳」サブタイプのメッセージキャリア
	 */
	private CAANMsg getKK0161SubTypeByAgingSbt(String agingSbtCd, String svcKeiUcwkNo, String geneAddDtm)
	{
		CAANMsg kk0161SubTypeMsg = null;
		// ISP認証ID(アカウント)エイジングチェック
		if (JKKModelConst.AGING_SBT_CD_ISP_NINSHO_ID.equals(agingSbtCd))
		{
			// 対象の「サービス契約内訳<eo光ネット>」のレコードを取得する。
			kk0161SubTypeMsg = new JKKejbKK0171DBABase().getKK0171Primary(svcKeiUcwkNo, geneAddDtm);
		}
		// 電話番号エイジングチェック、SIPユーザーIDエイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_TELNO.equals(agingSbtCd) || JKKModelConst.AGING_SBT_CD_SIP_USER_ID.equals(agingSbtCd))
		{
			// 対象の「サービス契約内訳<eo光電話>」のレコードを取得する。
			kk0161SubTypeMsg = new JKKejbKK0191DBABase().getKK0191Primary(svcKeiUcwkNo, geneAddDtm);
		}
		// ADSL認証ID(アカウント)エイジングチェック
		else if (JKKModelConst.AGING_SBT_CD_ADSL_NINSHO_ID.equals(agingSbtCd))
		{
			// 対象の「サービス契約内訳<eoADSL>」のレコードを取得する。
			kk0161SubTypeMsg = new JKKejbKK0221DBABase().getKK0221Primary(svcKeiUcwkNo, geneAddDtm);
		}

		return kk0161SubTypeMsg;
	}

	/**
	 * <p>
	 * 該当のエイジング種別コードに応じたエイジング対象値の取得元となる「オプションサービス契約」サブタイプを取得します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @return エイジング対象値の取得元となる「オプションサービス契約」サブタイプのメッセージキャリア
	 */
	private CAANMsg getKK0351SubTypeByAgingSbt(String agingSbtCd, String opSvcKeiNo, String geneAddDtm)
	{
		CAANMsg kk0351SubTypeMsg = null;
		// 固定IPアドレス、URL、WebID、POPID、メールアドレス、メーリングリストエイジングチェック
		if (JKKModelConst.AGING_SBT_CD_FIXIPAD.equals(agingSbtCd)
				|| JKKModelConst.AGING_SBT_CD_URL.equals(agingSbtCd) || JKKModelConst.AGING_SBT_CD_WEB_ID.equals(agingSbtCd)
				|| JKKModelConst.AGING_SBT_CD_POP_ID.equals(agingSbtCd) || JKKModelConst.AGING_SBT_CD_MLAD.equals(agingSbtCd)
				|| JKKModelConst.AGING_SBT_CD_MLLIST.equals(agingSbtCd))
		{
			kk0351SubTypeMsg = new JKKejbKK0361DBABase().getKK0361Primary(opSvcKeiNo, geneAddDtm);
		}

		return kk0351SubTypeMsg;
	}

	/**
	 * <p>
	 * 該当のエイジング種別コードに応じたエイジング対象値の取得元となる「サブオプションサービス契約」サブタイプを取得します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param sbopSvcKeiNo サブオプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @return エイジング対象値の取得元となる「サブオプションサービス契約」サブタイプのメッセージキャリア
	 */
	private CAANMsg getKK0401SubTypeByAgingSbt(String agingSbtCd, String opSvcKeiNo, String sbopSvcKeiNo, String geneAddDtm)
	{
		CAANMsg kk0401SubTypeMsg = null;
		// メールエイリアスエイジングチェック
		if (JKKModelConst.AGING_SBT_CD_MAILALIAS.equals(agingSbtCd))
		{
			kk0401SubTypeMsg = new JKKejbKK0411DBABase().getKK0411Primary(opSvcKeiNo, sbopSvcKeiNo, geneAddDtm);
		}

		return kk0401SubTypeMsg;
	}

	/**
	 * <p>
	 * 該当のエイジングチェックの対象となるエイジング対象値を取得します。
	 * </p>
	 * @param agingSbtCd チェック対象となるエイジング種別コード
	 * @param agingTgValueMtMsg エイジング対象値の取得元となるメッセージキャリア<br>
	 *         「サービス契約＜eo光電話＞」：PPP認証ID(アカウント)<br>
	 *         「サービス契約内訳＜eo光ネット＞」：ISP認証ID(アカウント)<br>
	 *         「サービス契約内訳＜eo光電話＞」：電話番号、SIPユーザーID<br>
	 *         「サービス契約内訳＜eoADSL＞」：ADSL認証ID(アカウント)<br>
	 *         「オプションサービス契約＜ISP＞」：固定IPアドレス、URL、WebID、POPID、メールアドレス、メーリングリスト<br>
	 *         「サブオプションサービス契約＜ISP＞」：メールエイリアス<br>
	 * @return エイジング対象値
	 */
	private String getAgingTgValue(String agingSbtCd, CAANMsg agingTgValueMtMsg)
	{
		// エイジング対象値
		String agingTgValue = null;

		/* --------------------------------------------------
		 * サービス契約、サービス契約内訳関連エイジングチェック
		 * -------------------------------------------------- */
		// ISP認証ID(アカウント)エイジングチェック：サービス契約内訳<eo光ネット>.ISP認証IDのアカウント部
		if (JKKModelConst.AGING_SBT_CD_ISP_NINSHO_ID.equals(agingSbtCd))
		{
			String ispNinshoId = agingTgValueMtMsg.getString(KK0171ETMsg.ISP_NINSHO_ID);
			if (ispNinshoId == null || "".equals(ispNinshoId))
			{
				// ISP認証IDが未設定の場合
				return null;
			}
			agingTgValue = ispNinshoId.split(ATSIGN)[0];
		}
		// PPP認証ID(アカウント)エイジングチェック：サービス契約<eo光電話>.PPP認証IDのアカウント部
		else if (JKKModelConst.AGING_SBT_CD_PPP_NINSHO_ID.equals(agingSbtCd))
		{
			String pppNinshoId = agingTgValueMtMsg.getString(KK0111ETMsg.PPP_NINSHO_ID);
			if (pppNinshoId == null || "".equals(pppNinshoId))
			{
				// PPP認証IDが未設定の場合
				return null;
			}
			agingTgValue = pppNinshoId.split(ATSIGN)[0];
		}
		// 電話番号エイジングチェック：サービス契約内訳<eo光電話>.電話番号
		else if (JKKModelConst.AGING_SBT_CD_TELNO.equals(agingSbtCd))
		{
			agingTgValue = agingTgValueMtMsg.getString(KK0191ETMsg.TELNO);
		}
		// SIPユーザーIDエイジングチェック：サービス契約内訳<eo光電話>.SIPユーザーID
		else if (JKKModelConst.AGING_SBT_CD_SIP_USER_ID.equals(agingSbtCd))
		{
			agingTgValue = agingTgValueMtMsg.getString(KK0191ETMsg.SIP_USER_ID);
		}
		// ADSL認証ID(アカウント)エイジングチェック：サービス契約内訳<eoADSL>.ADSL認証IDのアカウント部
		else if (JKKModelConst.AGING_SBT_CD_ADSL_NINSHO_ID.equals(agingSbtCd))
		{
			String adslNinshoId = agingTgValueMtMsg.getString(KK0221ETMsg.ADSL_NINSHO_ID);
			if (adslNinshoId == null || "".equals(adslNinshoId))
			{
				// ADSL認証IDが未設定の場合
				return null;
			}
			agingTgValue = adslNinshoId.split(ATSIGN)[0];
		}
		/* --------------------------------------------------
		 * オプションサービス契約関連エイジングチェック
		 * -------------------------------------------------- */
		// 固定IPアドレスエイジングチェック：オプションサービス契約<ISP>.固定IPアドレス
		else if (JKKModelConst.AGING_SBT_CD_FIXIPAD.equals(agingSbtCd))
		{
			agingTgValue = agingTgValueMtMsg.getString(KK0361ETMsg.KOTEI_IP_AD);
		}
		// URLエイジングチェック：オプションサービス契約<ISP>.URL(ドメイン) + URL(アカウント)
		else if (JKKModelConst.AGING_SBT_CD_URL.equals(agingSbtCd))
		{
			String urlDomain = agingTgValueMtMsg.getString(KK0361ETMsg.URL_DOMAIN);
			String urlAccount = agingTgValueMtMsg.getString(KK0361ETMsg.URL_ACCOUNT);
			if ((urlDomain == null || "".equals(urlDomain)) || (urlAccount == null || "".equals(urlAccount)))
			{
				// URL(ドメイン)、URL(アカウント)いずれかが未設定の場合
				return null;
			}
			agingTgValue = urlDomain.concat(urlAccount);
		}
		// WebIDエイジングチェック：オプションサービス契約<ISP>.WebID
		else if (JKKModelConst.AGING_SBT_CD_WEB_ID.equals(agingSbtCd))
		{
			agingTgValue = agingTgValueMtMsg.getString(KK0361ETMsg.WEB_ID);
		}
		// POPIDエイジングチェック：オプションサービス契約<ISP>.POPID
		else if (JKKModelConst.AGING_SBT_CD_POP_ID.equals(agingSbtCd))
		{
			agingTgValue = agingTgValueMtMsg.getString(KK0361ETMsg.POP_ID);
		}
		// メールアドレスエイジングチェック：オプションサービス契約<ISP>.メールアドレス
		else if (JKKModelConst.AGING_SBT_CD_MLAD.equals(agingSbtCd))
		{
			agingTgValue = agingTgValueMtMsg.getString(KK0361ETMsg.MLAD);
		}
		// メーリングリストエイジングチェック：オプションサービス契約<ISP>.メーリングリスト名 + メーリングリストドメイン(業務パラメータ)
		else if (JKKModelConst.AGING_SBT_CD_MLLIST.equals(agingSbtCd))
		{
			String mllistNm = agingTgValueMtMsg.getString(KK0361ETMsg.MLLIST_NM);
			if (mllistNm == null || "".equals(mllistNm))
			{
				// メーリングリスト名が未設定の場合
				return null;
			}
			String mllistDomain = new JKKejbZM0321DBAccess().getParamE(JKKModelConst.WORK_PARAM_KK_MLLIST_NM_DOMAIN);
			agingTgValue = mllistNm.concat(ATSIGN).concat(mllistDomain);
		}
		/* --------------------------------------------------
		 * サブオプションサービス契約関連エイジングチェック
		 * -------------------------------------------------- */
		// メールエイリアスエイジングチェック：サブオプションサービス契約<ISP>.エイリアス + オプションサービス契約<ISP>.メールアドレスのドメイン部
		else if (JKKModelConst.AGING_SBT_CD_MAILALIAS.equals(agingSbtCd))
		{
			// 対象の「サブオプションサービス契約<ISP>」の親「オプションサービス契約<ISP>」を取得する。
			String opSvcKeiNo = agingTgValueMtMsg.getString(KK0411ETMsg.OP_SVC_KEI_NO);
			CAANMsg kk0351Msg = new JKKejbKK0351DBABase().getKK0351Current(opSvcKeiNo, JKKModelCommon.getOpeDate(agingTgValueMtMsg));
			CAANMsg kk0361Msg = new JKKejbKK0361DBABase().getKK0361Primary(opSvcKeiNo, kk0351Msg.getString(KK0351ETMsg.GENE_ADD_DTM));
			
			String alias = agingTgValueMtMsg.getString(KK0411ETMsg.ALIAS);
			String mlad = kk0361Msg.getString(KK0361ETMsg.MLAD);
			if ((mlad == null || "".equals(mlad)) || (alias == null || "".equals(alias)))
			{
				// サブオプションサービス契約<ISP>.エイリアス、オプションサービス契約<ISP>.メールアドレスいずれかが未設定の場合
				return null;
			}
			// オプションサービス契約<ISP>.メールアドレスのドメイン部
			String mladDomain = mlad.substring(mlad.indexOf(ATSIGN));
			
			agingTgValue = alias.concat(mladDomain);
		}

		return agingTgValue;
	}

	/** オプションサービスコード */
	private String op_svc_cd = null;

	/**
	 * <p>
	 * オプションサービスコードを取得します。
	 * </p>
	 * @return オプションサービスコード
	 */
	private String getOp_Svc_cd()
	{
		return this.op_svc_cd;
	}

	/**
	 * <p>
	 * オプションサービスコードを設定します。
	 * </p>
	 * @param p_op_svc_cd オプションサービスコード
	 */
	public void setOp_Svc_cd(String p_op_svc_cd)
	{
		this.op_svc_cd = p_op_svc_cd;
	}

	/** サブオプションサービスコード */
	private String sbop_svc_cd = null;

	/**
	 * <p>
	 * サブオプションサービスコードを取得します。
	 * </p>
	 * @return サブオプションサービスコード
	 */
	private String getSbop_Svc_cd()
	{
		return this.sbop_svc_cd;
	}

	/**
	 * <p>
	 * サブオプションサービスコードを設定します。
	 * </p>
	 * @param p_sbop_svc_cd サブオプションサービスコード
	 */
	public void setSbop_Svc_cd(String p_sbop_svc_cd)
	{
		this.sbop_svc_cd = p_sbop_svc_cd;
	}


}
