/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK0361D010TPMA
*	ソースファイル名：JEKK0361D010TPMA.java
*	作成者			：富士通
*	日付			：2011年09月29日
*＜機能概要＞
*	オプションサービス契約<ISP>登録の独自処理を行う部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/29	富士通		新規作成
*	v4.00.00	2013/03/15	FJ）寺園	IT1-2013-0000448
*	v4.00.01	2013/03/26	FJ）阿部	IT1-2013-0000572
*	v4.00.02	2013/03/31	FJ）沖田	ST2-2013-0001643
*   v4.00.03    2013/05/27  FJ）竹内    IT1-2013-0001223
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbm.entity.KK0361ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.JKKejbCallTypeChecker;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.db.JKKejbKK0401SecProc;
import eo.ejb.common.entity.JKKejbIdoRestrictController;
import eo.ejb.common.entity.JKKejbKRCKCommon;
import eo.ejb.common.entity.JKKejbZM0111KRCK;

/**
 * <p>
 * オプションサービス契約<ISP>登録の顧客独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0361D010TPMA implements TemplateMainHandler
{

	/** NGワードコード（メールアドレス） */
	private static final String NG_WORD_CD_MLAD = "02";

	/** NGワードコード（メーリングリスト） */
	private static final String NG_WORD_CD_MLLIST = "11";

	/** 料金コースコード(マンションタイプ　グローバル　１００Ｍ　イーサネット) */
	private static final String PCRS_CD_MANS_GLOBAL_100M = "A54";

	/** 料金コースコード(マンションタイプ　グローバル　１ギガ　イーサネット) */
	private static final String PCRS_CD_MANS_GLOBAL_1G = "A55";

	/**
	 * <p>
	 * オプションサービス契約<ISP>登録の顧客独自処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

		// 希望メールアカウント１ NGチェック処理
		if (!isNotNgMailAccount1(inCBSMsg, inContext))
		{
			return;
		}

		// 希望メールアカウント２ NGチェック処理
		if (!isNotNgMailAccount2(inCBSMsg, inContext))
		{
			return;
		}

		// 希望メールアカウント３ NGチェック処理
		if (!isNotNgMailAccount3(inCBSMsg, inContext))
		{
			return;
		}

		// メーリングリスト名 NGチェック処理
		if (!isNotNgMailListNm(inCBSMsg, inContext))
		{
			return;
		}

		// メーリングリスト名 エイジングチェック(使用中)処理
		if (!isNotExistAsingMllistUse(inCBSMsg, inContext))
		{
			return;
		}

		// メーリングリスト名 エイジングチェック処理
		if (!isNotExistAsingMllist(inCBSMsg, inContext))
		{
			return;
		}

		// 固定IPアドレス エイジングチェック処理
		if (!isNotExistAsingFixipad(inCBSMsg, inContext))
		{
			return;
		}

	}
	
	/**
	 * <p>
	 * オプション契約上限チェックの呼び出し
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void optionKeiLimitChk(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプション契約上限チェックを行います
		if (!isOptionKeiLimitChk(inCBSMsg, inContext))
		{
			inCBSMsg.set(EKK0361D010CBSMsg.MLTISE_SESSION_CNT_ERR, "EA");
			inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
			return;
		}
	}

	/**
	 * <p>
	 * オプションサービス契約<ISP>登録メールウィルスチェック登録処理の呼び出しを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	public void createMailVirusChk(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプションサービス契約<ISP>登録メールウィルスチェック登録処理の呼び出し
		new JKKejbKK0401SecProc().createMailVirusChkOfOp(inCBSMsg, inContext);
	}

	/**
	 * <p>
	 * オプション契約上限チェック
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return true：正常判定 false：異常判定
	 */
	private boolean isOptionKeiLimitChk(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// マルチセッション用セッション数が未設定の場合
		if (inCBSMsg.isNull(EKK0361D010CBSMsg.MLTISE_SESSION_CNT))
		{
			return true;
		}

		// オプションサービスコードが"マルチセッション"以外の場合、チェック対象外
		if (!JKKModelConst.OP_SVC_CD_MLTISE.equals(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD)))
		{
			return true;
		}

		// 入力値のマルチセッション用セッション数を取得する
		int inMltiSesCnt = inCBSMsg.getStringAsInt(EKK0361D010CBSMsg.MLTISE_SESSION_CNT);

		CAANMsg inETMsgKK0351 = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsgKK0351.set(KK0351ETMsg.OYA_KEI_SKBT_CD, inCBSMsg.getString(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD));
		inETMsgKK0351.set(KK0351ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_NO));
		inETMsgKK0351.set(KK0351ETMsg.SVC_KEI_UCWK_NO, inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO));
		
		// オプション契約の上限値のチェックの結果を返却する。
		return new JKKejbKRCKCommon().isNotOverLimitOpInCnt(inETMsgKK0351, inContext, JKKModelConst.OP_SVC_CD_MLTISE, inMltiSesCnt);
	}

	/**
	 * <p>
	 * 希望メールアカウント１ NGチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 希望メールアカウント1が、NGワードに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotNgMailAccount1(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプションサービスコードが"Ｅメール"以外の場合、チェック対象外
		if (!JKKModelConst.OP_SVC_CD_EMAIL.equals(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD)))
		{
			return true;
		}

		// 希望メールアカウント1が入力されていない場合は処理を終了する
		if (inCBSMsg.isNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1))
		{
			return true;
		}

		// NGワードチェック処理を呼び出す
		JKKejbKRCKCommon krckc = new JKKejbKRCKCommon();
		boolean ngFlg = krckc.isNotExistsNg(inCBSMsg, inContext, NG_WORD_CD_MLAD, inCBSMsg.getString(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1));

		// NGワードチェック処理の結果がtrueだった場合、処理を終了する
		if (ngFlg)
		{
			return true;
		}

		// NGワードチェック処理の結果がfalseだった場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1_ERR, "EB");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

	/**
	 * <p>
	 * 希望メールアカウント２ NGチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 希望メールアカウント2が、NGワードに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotNgMailAccount2(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプションサービスコードが"Ｅメール"以外の場合、チェック対象外
		if (!JKKModelConst.OP_SVC_CD_EMAIL.equals(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD)))
		{
			return true;
		}

		// 希望メールアカウント2が入力されていない場合は処理を終了する
		if (inCBSMsg.isNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2))
		{
			return true;
		}

		// NGワードチェック処理を呼び出す
		JKKejbKRCKCommon krckc = new JKKejbKRCKCommon();
		boolean ngFlg = krckc.isNotExistsNg(inCBSMsg, inContext, NG_WORD_CD_MLAD, inCBSMsg.getString(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2));

		// NGワードチェック処理の結果がtrueだった場合、処理を終了する
		if (ngFlg)
		{
			return true;
		}

		// NGワードチェック処理の結果がfalseだった場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2_ERR, "EA");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

	/**
	 * <p>
	 * 希望メールアカウント３ NGチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 希望メールアカウント3が、NGワードに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotNgMailAccount3(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプションサービスコードが"Ｅメール"以外の場合、チェック対象外
		if (!JKKModelConst.OP_SVC_CD_EMAIL.equals(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD)))
		{
			return true;
		}

		// 希望メールアカウント3が入力されていない場合は処理を終了する
		if (inCBSMsg.isNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3))
		{
			return true;
		}

		// NGワードチェック処理を呼び出す
		JKKejbKRCKCommon krckc = new JKKejbKRCKCommon();
		boolean ngFlg = krckc.isNotExistsNg(inCBSMsg, inContext, NG_WORD_CD_MLAD, inCBSMsg.getString(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3));

		// NGワードチェック処理の結果がtrueだった場合、処理を終了する
		if (ngFlg)
		{
			return true;
		}

		// NGワードチェック処理の結果がfalseだった場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3_ERR, "EA");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

	/**
	 * <p>
	 * メーリングリスト名 NGチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return メーリングリスト名が、NGワードに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotNgMailListNm(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプションサービスコードが"メーリングリスト"以外の場合、チェック対象外
		if (!JKKModelConst.OP_SVC_CD_MLLIST.equals(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD)))
		{
			return true;
		}

		// メーリングリスト名が入力されていない場合は処理を終了する
		if (inCBSMsg.isNull(EKK0361D010CBSMsg.MLLIST_NM))
		{
			return true;
		}

		// NGワードチェック処理を呼び出す
		JKKejbKRCKCommon krckc = new JKKejbKRCKCommon();
		boolean ngFlg = krckc.isNotExistsNg(inCBSMsg, inContext, NG_WORD_CD_MLLIST, inCBSMsg.getString(EKK0361D010CBSMsg.MLLIST_NM));

		// NGワードチェック処理の結果がtrueだった場合、処理を終了する
		if (ngFlg)
		{
			return true;
		}

		// NGワードチェック処理の結果がfalseだった場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.MLLIST_NM_ERR, "EA");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

	/**
	 * <p>
	 * メーリングリスト名 エイジングチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return メーリングリスト名が、エイジングに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotExistAsingMllist(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 異動区分が"オプション引継"または"住所変更・登録"の場合、チェック対象外
		String idoDiv = inCBSMsg.getString(EKK0361D010CBSMsg.IDO_DIV);
		if (JKKModelConst.IDO_DIV_OP_HKTGI.equals(idoDiv) || JKKModelConst.IDO_DIV_ADCHG_ADD.equals(idoDiv))
		{
			return true;
		}


		CAANMsg inETMsgKK0361 = new CAANMsg(KK0361ETMsg.class.getName());
		inETMsgKK0361.set(KK0361ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO));
		inETMsgKK0361.set(KK0361ETMsg.MLLIST_NM, inCBSMsg.getString(EKK0361D010CBSMsg.MLLIST_NM));
		JKKejbZM0111KRCK instance = new JKKejbZM0111KRCK();
		instance.setOp_Svc_cd(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD));
		// メーリングリストエイジングチェック
		if (instance.isMllistAgingChk(inETMsgKK0361, inContext, "1"))
		{
			return true;
		}

		// エイジングのデータ取得件数が0件以外の場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.MLLIST_NM_ERR, "EB");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

	/**
	 * <p>
	 * 固定IPアドレス エイジングチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 固定IPアドレスが、エイジングに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotExistAsingFixipad(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 異動区分が"オプション引継"または"住所変更・登録"の場合、チェック対象外
		String idoDiv = inCBSMsg.getString(EKK0361D010CBSMsg.IDO_DIV);
		if (JKKModelConst.IDO_DIV_OP_HKTGI.equals(idoDiv) || JKKModelConst.IDO_DIV_ADCHG_ADD.equals(idoDiv))
		{
			return true;
		}

		// サービス契約番号、サービス契約内訳番号がともに未設定の場合、処理を終了する
		String svcKeiNo = inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_NO);
		String svcKeiUcwkNo = inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO);
		if ((svcKeiNo ==null || "".equals(svcKeiNo)) && (svcKeiUcwkNo ==null || "".equals(svcKeiUcwkNo)))
		{
			return true;
		}

		// 該当の「オプションサービス契約」の親「サービス契約」を取得する。
		CAANMsg inETMsgKK0351 = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsgKK0351.set(KK0351ETMsg.OYA_KEI_SKBT_CD, inCBSMsg.getString(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD));
		inETMsgKK0351.set(KK0351ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_NO));
		inETMsgKK0351.set(KK0351ETMsg.SVC_KEI_UCWK_NO, inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO));
		CAANMsg ret0081Msg = new JKKejbKK0081DBABase().getKK0081byOpSvcKei(inETMsgKK0351, JKKModelCommon.getOpeDate(inETMsgKK0351));
		
		// 異動区分が"コース変更"の場合
		if (JKKModelConst.IDO_DIV_COURSE_CHG.equals(idoDiv))
		{
			// 料金コースが"マンションタイプ　グローバル　１００Ｍ　イーサネット"または
			// "マンションタイプ　グローバル　１ギガ　イーサネット"の場合処理を終了する
			if (PCRS_CD_MANS_GLOBAL_100M.equals(ret0081Msg.getString(KK0081ETMsg.PCRS_CD))
				|| PCRS_CD_MANS_GLOBAL_1G.equals(ret0081Msg.getString(KK0081ETMsg.PCRS_CD)))
			{
				return true;
			}
		}

		CAANMsg inETMsgKK0361 = new CAANMsg(KK0361ETMsg.class.getName());
		inETMsgKK0361.set(KK0361ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO));
		inETMsgKK0361.set(KK0361ETMsg.KOTEI_IP_AD, inCBSMsg.getString(EKK0361D010CBSMsg.KOTEI_IP_AD));
		JKKejbZM0111KRCK instance = new JKKejbZM0111KRCK();
		instance.setOp_Svc_cd(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD));
		// 固定IPアドレスエイジングチェック
		if (instance.isFixipadAgingChk(inETMsgKK0361, inContext, "1"))
		{
			return true;
		}

		// エイジングのデータ取得件数が0件以外の場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.KOTEI_IP_AD_ERR, "EA");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

	/**
	 * <p>
	 * オプションサービス契約<ISP>登録時の異動制約チェックを呼び出しを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	public void idoKhChk(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK0361D010TPMA#idoKhChk");

		if (inCBSMsg.isNull(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD))
		{
			return;
		}

		// 親契約識別コード
		String oyaKeiSkbtCd = inCBSMsg.getString(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD);

		if (JKKejbIdoRestrictController.TG_KEI_SKBT_CD_01.equals(oyaKeiSkbtCd))
		{
			// 親契約がサービス契約
			if (inCBSMsg.isNull(EKK0361D010CBSMsg.SVC_KEI_NO))
			{
				return;
			}
		}
		else if (JKKejbIdoRestrictController.TG_KEI_SKBT_CD_03.equals(oyaKeiSkbtCd))
		{
			// 親契約がサービス契約内訳
			if (inCBSMsg.isNull(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO))
			{
				return;
			}
		}
		else
		{
			return;
		}

		// 異動可否判定チェック部品の呼び出し
		JKKejbIdoRestrictController idoKh = new JKKejbIdoRestrictController(inCBSMsg);

		// 呼び出しパラメータの設定
		idoKh.setBaseDate(JKKModelCommon.getOpeDate(inCBSMsg));
		idoKh.setIdo_div(inCBSMsg.getString(EKK0361D010CBSMsg.IDO_DIV));
		idoKh.setMskm_dtl_no(inCBSMsg.getString(EKK0361D010CBSMsg.MSKM_DTL_NO));
		idoKh.setTg_skbt_cd(JKKejbIdoRestrictController.TG_SKBT_CD_KK0351);
		idoKh.setSysid(inCBSMsg.getString(EKK0361D010CBSMsg.SYSID));
		idoKh.setSeiky_kei_no(inCBSMsg.getString(EKK0361D010CBSMsg.SEIKY_KEI_NO));
		idoKh.setSvc_kei_no(inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_NO));
		idoKh.setSvc_kei_ucwk_no(inCBSMsg.getString(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO));
		idoKh.setTg_kei_skbt_cd(inCBSMsg.getString(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD));
		idoKh.setKk0351_pcrs_cd(inCBSMsg.getString(EKK0361D010CBSMsg.PCRS_CD));
		idoKh.setKk0351_pplan_cd(inCBSMsg.getString(EKK0361D010CBSMsg.PPLAN_CD));
		idoKh.setOp_svc_cd(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD));

		// 異動可否判定
		boolean rslt = idoKh.isIdoKahi();

		// 異動登録可の場合はtrue、不可の場合はfalse
		if (!rslt)
		{
			inCBSMsg.set(EKK0361D010CBSMsg.IDO_DIV_ERR, idoKh.getErrFlg());
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.TEMPLATE_CORRELATION_ERR);
		}

		// 終了ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JEKK0361D010TPMA#idoKhChk");
	}

	/**
	 * <p>
	 * メーリングリスト名 エイジングチェック(使用中)処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return メーリングリスト名が、エイジングに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotExistAsingMllistUse(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// フロント以外の場合に実施する
		if (JKKejbCallTypeChecker.isCallTypeFront(inContext))
		{
			return true;
		}

		// 異動区分が"オプション引継"または"住所変更・登録"の場合、チェック対象外
		String idoDiv = inCBSMsg.getString(EKK0361D010CBSMsg.IDO_DIV);
		if (JKKModelConst.IDO_DIV_OP_HKTGI.equals(idoDiv) || JKKModelConst.IDO_DIV_ADCHG_ADD.equals(idoDiv))
		{
			return true;
		}

		CAANMsg inETMsgKK0361 = new CAANMsg(KK0361ETMsg.class.getName());
		inETMsgKK0361.set(KK0361ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO));
		inETMsgKK0361.set(KK0361ETMsg.MLLIST_NM, inCBSMsg.getString(EKK0361D010CBSMsg.MLLIST_NM));
		JKKejbZM0111KRCK instance = new JKKejbZM0111KRCK();
		instance.setOp_Svc_cd(inCBSMsg.getString(EKK0361D010CBSMsg.OP_SVC_CD));
		// メーリングリストエイジングチェック
		if (instance.isMllistAgingChk(inETMsgKK0361, inContext, "4"))
		{
			return true;
		}

		// エイジングのデータ取得件数が0件以外の場合、エラー項目を設定して処理を終了する
		inCBSMsg.set(EKK0361D010CBSMsg.MLLIST_NM_ERR, "EC");
		inCBSMsg.set(EKK0361D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);

		return false;
	}

}
