/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK0351ConvChk
*	ソースファイル名：JKKejbKK0351ConvChk.java
*	作成者			：富士通
*	日付			：2011年07月11日
*＜機能概要＞
*	変換条件を記載する部品です
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/11	富士通		新規作成
*	v4.00.00	2013/02/05	FJ)坂本		ST4-2012-0000263
*	v5.00.00	2013/08/09	FJ）阿武	IT2-2013-0000733
*	v32.00.00	2017/03/27	FJ）三宅	ANK-3149-00-00 新セキュリティパック導入
*	v32.00.01	2017/05/10	FJ）三宅	IT1-2017-0000038(オプションサービス契約番号が未設定時のエラー対応)
*	v32.00.02	2017/05/10	FJ）三宅	IT1-2017-0000031(購入ID、製品ダウンロードURLの引継対応)
*	v39.00.02	2018/10/17	FJ）澤田	【IT1-2018-0000162】端末補償契約番号の統一対応
*	v73.00.00	2024/09/26	FJ）謝		【ANK-4427-00-00】NTT卸対応
**********************************************************************/
package eo.ejb.common.convert;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbm.entity.KK0361ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C010CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.db.JKKejbKK0351DBABase;
import eo.ejb.common.db.JKKejbKK0361DBABase;

/**
 * ３層スキーマ変換時の変換条件を提供するクラスです。<p>
 * <br>
 * @author 富士通
 */
public class JKKejbKK0351ConvChk
{

	/** オプションサービスコード（IPv6）*/
	private static final String OPT_SVC_CD_IPV6 = "B070";

	/** オプションサービスコード（Ｍｙホームページ）*/
	private static final String OP_SVC_CD_MHP = "B002";
	
	// IT1-2018-0000162 ADD START
	/** ＰＣプラン*/
	private static final String OP_SVC_CD_B133 = "B133";
	/** ＴＶプラン*/
	private static final String OP_SVC_CD_B134 = "B134";
	// IT1-2018-0000162 ADD END
	// ANK-4427-00-00 ADD START
	/** オプションサービスコード eo光電話(type N) */
	private static final String OP_SVC_CD_B138 = "B138";
	// ANK-4427-00-00 ADD END
	
	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコードが等しいか判定する。
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcNo オプションサービス契約番号
	 * @param opSvcCd 判定対象オプションサービスコード
	 * @return オプションサービスコードが等しい場合true、等しくない場合false
	 */
	public boolean isChkOpSvcCd(CAANMsg inMsg,Object opSvcNo,Object opSvcCd)
	{
		// 引数チェック
		if ( opSvcNo == null || opSvcCd == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO,opSvcNo.toString());
		msg.set(KK0351ETMsg.RSV_APLY_YMD,JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtMsg = new JKKejbKK0351DBABase().findByCurrent(msg);
		
		// 存在しない場合
		if( crtMsg == null )
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if( !opSvcCd.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコード(対象2つ)が等しいか判定する。
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcNo オプションサービス契約番号
	 * @param opSvcCd1 判定対象オプションサービスコード1
	 * @param opSvcCd2 判定対象オプションサービスコード2
	 * @return オプションサービスコードが等しい場合true、等しくない場合false
	 */
	public boolean isChkOpSvcCdTaisho2(CAANMsg inMsg,Object opSvcNo, Object opSvcCd1, Object opSvcCd2)
	{
		// 引数チェック
		if ( opSvcNo == null || opSvcCd1 == null || opSvcCd2 == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO,opSvcNo.toString());
		msg.set(KK0351ETMsg.RSV_APLY_YMD,JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtMsg = new JKKejbKK0351DBABase().findByCurrent(msg);
		
		// 存在しない場合
		if( crtMsg == null )
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if( !opSvcCd1.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD))
			&& !opSvcCd2.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコードが等しいか判定する。(POPID用)
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param opSvcCd 判定対象オプションサービスコード1
	 * @return カレントレコードが設定されていないかつオプションサービスコードが等しい場合true
	 *          上記以外の場合false
	 */
	public boolean isChkOpSvcCdPopId(CAANMsg inMsg, Object opSvcKeiNo, Object opSvcCd)
	{
		String templateID = inMsg.getString(JCMConstants.TEMPLATE_ID_KEY);
		if ("EKK0361C010".equals(templateID) && JKKModelCommon.isValueChk(inMsg, null, inMsg.getObject(EKK0361C010CBSMsg.SHOSA_DSL_FIN_CD), "2"))
		{
			return false;
		}

		
		// 引数チェック
		if (opSvcKeiNo == null || opSvcCd == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg kk0351 = new CAANMsg(KK0351ETMsg.class.getName());
		kk0351.set(KK0351ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtKK0351 = new JKKejbKK0351DBABase().findByCurrent(kk0351);
		
		// 存在しない場合
		if(null == crtKK0351)
		{
			return false;
		}
		
		// オプションサービス契約<ISP>取得（カレントレコード）
		CAANMsg kk0361 = new CAANMsg(KK0361ETMsg.class.getName());
		kk0361.set(KK0361ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0361.set(KK0361ETMsg.GENE_ADD_DTM, crtKK0351.getString(KK0351ETMsg.GENE_ADD_DTM));
		CAANMsg priKK0361 = new JKKejbKK0361DBABase().findByPrimaryKey(kk0361);
		
		// 存在しない場合
		if(null == priKK0361)
		{
			return false;
		}
		
		// POPIDが設定されている場合
		if (!priKK0361.isNull(KK0361ETMsg.POP_ID))
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if(!opSvcCd.equals(crtKK0351.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコードが等しいか判定する。(初期POPIDパスワード用)
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param opSvcCd 判定対象オプションサービスコード1
	 * @return カレントレコードが設定されていないかつオプションサービスコードが等しい場合true
	 *          上記以外の場合false
	 */
	public boolean isChkOpSvcCdPopIdPw(CAANMsg inMsg, Object opSvcKeiNo, Object opSvcCd)
	{
		String templateID = inMsg.getString(JCMConstants.TEMPLATE_ID_KEY);
		if ("EKK0361C010".equals(templateID) && JKKModelCommon.isValueChk(inMsg, null, inMsg.getObject(EKK0361C010CBSMsg.SHOSA_DSL_FIN_CD), "2"))
		{
			return false;
		}

		// 引数チェック
		if (opSvcKeiNo == null || opSvcCd == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg kk0351 = new CAANMsg(KK0351ETMsg.class.getName());
		kk0351.set(KK0351ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtKK0351 = new JKKejbKK0351DBABase().findByCurrent(kk0351);
		
		// 存在しない場合
		if(null == crtKK0351)
		{
			return false;
		}
		
		// オプションサービス契約<ISP>取得（カレントレコード）
		CAANMsg kk0361 = new CAANMsg(KK0361ETMsg.class.getName());
		kk0361.set(KK0361ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0361.set(KK0361ETMsg.GENE_ADD_DTM, crtKK0351.getString(KK0351ETMsg.GENE_ADD_DTM));
		CAANMsg priKK0361 = new JKKejbKK0361DBABase().findByPrimaryKey(kk0361);
		
		// 存在しない場合
		if(null == priKK0361)
		{
			return false;
		}
		
		// 初期POPIDパスワードが設定されている場合
		if (!priKK0361.isNull(KK0361ETMsg.SHK_POP_ID_PWD))
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if(!opSvcCd.equals(crtKK0351.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコードが等しいか判定する。(メールアドレス用)
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param opSvcCd 判定対象オプションサービスコード1
	 * @return カレントレコードが設定されていないかつオプションサービスコードが等しい場合true
	 *          上記以外の場合false
	 */
	public boolean isChkOpSvcCdMlad(CAANMsg inMsg, Object opSvcKeiNo, Object opSvcCd)
	{
		String templateID = inMsg.getString(JCMConstants.TEMPLATE_ID_KEY);
		if ("EKK0361C010".equals(templateID) && JKKModelCommon.isValueChk(inMsg, null, inMsg.getObject(EKK0361C010CBSMsg.SHOSA_DSL_FIN_CD), "2"))
		{
			return false;
		}
			
		// 引数チェック
		if (opSvcKeiNo == null || opSvcCd == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg kk0351 = new CAANMsg(KK0351ETMsg.class.getName());
		kk0351.set(KK0351ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtKK0351 = new JKKejbKK0351DBABase().findByCurrent(kk0351);
		
		// 存在しない場合
		if(null == crtKK0351)
		{
			return false;
		}
		
		// オプションサービス契約<ISP>取得（カレントレコード）
		CAANMsg kk0361 = new CAANMsg(KK0361ETMsg.class.getName());
		kk0361.set(KK0361ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0361.set(KK0361ETMsg.GENE_ADD_DTM, crtKK0351.getString(KK0351ETMsg.GENE_ADD_DTM));
		CAANMsg priKK0361 = new JKKejbKK0361DBABase().findByPrimaryKey(kk0361);
		
		// 存在しない場合
		if(null == priKK0361)
		{
			return false;
		}
		
		// メールアドレスが設定されている場合
		if (!priKK0361.isNull(KK0361ETMsg.MLAD))
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if(!opSvcCd.equals(crtKK0351.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコードが等しいか判定する。(WebId用)
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param opSvcCd 判定対象オプションサービスコード1
	 * @return カレントレコードが設定されていないかつオプションサービスコードが等しい場合true
	 *          上記以外の場合false
	 */
	public boolean isChkOpSvcCdWebId(CAANMsg inMsg, Object opSvcKeiNo, Object opSvcCd)
	{
		String templateID = inMsg.getString(JCMConstants.TEMPLATE_ID_KEY);
		if ("EKK0361C010".equals(templateID) && JKKModelCommon.isValueChk(inMsg, null, inMsg.getObject(EKK0361C010CBSMsg.SHOSA_DSL_FIN_CD), "2"))
		{
			return false;
		}

		// 引数チェック
		if (opSvcKeiNo == null || opSvcCd == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg kk0351 = new CAANMsg(KK0351ETMsg.class.getName());
		kk0351.set(KK0351ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtKK0351 = new JKKejbKK0351DBABase().findByCurrent(kk0351);
		
		// 存在しない場合
		if(null == crtKK0351)
		{
			return false;
		}
		
		// オプションサービス契約<ISP>取得（カレントレコード）
		CAANMsg kk0361 = new CAANMsg(KK0361ETMsg.class.getName());
		kk0361.set(KK0361ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0361.set(KK0361ETMsg.GENE_ADD_DTM, crtKK0351.getString(KK0351ETMsg.GENE_ADD_DTM));
		CAANMsg priKK0361 = new JKKejbKK0361DBABase().findByPrimaryKey(kk0361);
		
		// 存在しない場合
		if(null == priKK0361)
		{
			return false;
		}
		
		// WebIDが設定されている場合
		if (!priKK0361.isNull(KK0361ETMsg.WEB_ID))
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if(!opSvcCd.equals(crtKK0351.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約のオプションサービスコードと引数のオプションサービスコードが等しいか判定する。(初期WebIDパスワード用)
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param opSvcCd 判定対象オプションサービスコード1
	 * @return カレントレコードが設定されていないかつオプションサービスコードが等しい場合true
	 *          上記以外の場合false
	 */
	public boolean isChkOpSvcCdWebIdPw(CAANMsg inMsg, Object opSvcKeiNo, Object opSvcCd)
	{
		
		String templateID = inMsg.getString(JCMConstants.TEMPLATE_ID_KEY);
		if ("EKK0361C010".equals(templateID) && JKKModelCommon.isValueChk(inMsg, null, inMsg.getObject(EKK0361C010CBSMsg.SHOSA_DSL_FIN_CD), "2"))
		{
			return false;
		}

		
		// 引数チェック
		if (opSvcKeiNo == null || opSvcCd == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg kk0351 = new CAANMsg(KK0351ETMsg.class.getName());
		kk0351.set(KK0351ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtKK0351 = new JKKejbKK0351DBABase().findByCurrent(kk0351);
		
		// 存在しない場合
		if(null == crtKK0351)
		{
			return false;
		}
		
		// オプションサービス契約<ISP>取得（カレントレコード）
		CAANMsg kk0361 = new CAANMsg(KK0361ETMsg.class.getName());
		kk0361.set(KK0361ETMsg.OP_SVC_KEI_NO, opSvcKeiNo.toString());
		kk0361.set(KK0361ETMsg.GENE_ADD_DTM, crtKK0351.getString(KK0351ETMsg.GENE_ADD_DTM));
		CAANMsg priKK0361 = new JKKejbKK0361DBABase().findByPrimaryKey(kk0361);
		
		// 存在しない場合
		if(null == priKK0361)
		{
			return false;
		}
		
		// 初期WebIDパスワードが設定されている場合
		if (!priKK0361.isNull(KK0361ETMsg.SHK_WEB_ID_PWD))
		{
			return false;
		}

		// 引数のオプションサービスコードとチェック
		if(!opSvcCd.equals(crtKK0351.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約の表示用サービス提供開始年月日が設定されていないか判定する。
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param opSvcNo オプションサービス契約番号
	 * @return 表示用サービス提供開始年月日が設定されていない場合true、設定されている場合false
	 */
	public boolean isDspSvctkStaymd(CAANMsg inMsg,Object opSvcNo)
	{
		// 引数チェック
		if ( opSvcNo == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO,opSvcNo.toString());
		msg.set(KK0351ETMsg.RSV_APLY_YMD,JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtMsg = new JKKejbKK0351DBABase().findByCurrent(msg);
		
		// 存在しない場合
		if( crtMsg == null )
		{
			return false;
		}

		// 表示用サービス提供開始年月日が設定されていないかチェック
		if(!crtMsg.isNull(KK0351ETMsg.DSP_SVCTK_STAYMD))
		{
			return false;
		}

		return true;
	}
	
	/**
	 * <p>
	 * オプションサービス契約の表示用サービス提供開始年月日が設定必要かを判定する。
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param opSvcNo オプションサービス契約番号
	 * @param ipv6AdIfid IPv6アドレス(インターフェイスID)
	 * @return 表示用サービス提供開始年月日の設定が必要な場合true、不要な場合false
	 */
	public boolean isDspSvctkStaymd1(CAANMsg inMsg, AgentDispatchContext inContext, Object opSvcNo, Object ipv6AdIfid)
	{
		// 引数チェック
		if ( opSvcNo == null)
		{
			return false;
		}
		
		// オプションサービス契約取得（カレントレコード）
		CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
		msg.set(KK0351ETMsg.OP_SVC_KEI_NO,opSvcNo.toString());
		msg.set(KK0351ETMsg.RSV_APLY_YMD,JKKModelCommon.getOpeDate(inMsg));
		CAANMsg crtMsg = new JKKejbKK0351DBABase().findByCurrent(msg);
		
		// 存在しない場合
		if( crtMsg == null )
		{
			return false;
		}

		// 表示用サービス提供開始年月日が設定されていないかチェック
		if(!crtMsg.isNull(KK0351ETMsg.DSP_SVCTK_STAYMD))
		{
			return false;
		}

		// オプションサービスコードが"B070"(IPv6)の場合
		if (OPT_SVC_CD_IPV6.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			// IPv6アドレスが入力されているかつルータが出荷済みか？
			if (ipv6AdIfid != null && this.isRuterSyukkaZumi(crtMsg, inContext))
			{
				return true;
			}
			else
			{
				return false;
			}
		}

		// オプションサービスコードが"B002"(Ｍｙホームページ)の場合
		if (OP_SVC_CD_MHP.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			// オプションサービス契約<ISP>取得（カレントレコード）
			CAANMsg kk0361 = new CAANMsg(KK0361ETMsg.class.getName());
			kk0361.set(KK0361ETMsg.OP_SVC_KEI_NO, opSvcNo.toString());
			kk0361.set(KK0361ETMsg.GENE_ADD_DTM, crtMsg.getString(KK0351ETMsg.GENE_ADD_DTM));
			CAANMsg priKK0361 = new JKKejbKK0361DBABase().findByPrimaryKey(kk0361);
			
			// 存在しない場合
			if(null == priKK0361)
			{
				return false;
			}
			
			// URL(アカウント)が設定されている場合
			if (!priKK0361.isNull(KK0361ETMsg.URL_ACCOUNT))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		
		// IT1-2018-0000162 ADD START
		// オプションサービスコードが"B133"または"B134"の場合
		if (OP_SVC_CD_B133.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)) || OP_SVC_CD_B134.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)) )
		{
			return false;
		}
		// IT1-2018-0000162 ADD END
		
		// ANK-4427-00-00 ADD START
		// オプションサービスコードが"B138"(eo光電話(type N))の場合
		if (OP_SVC_CD_B138.equals(crtMsg.getString(KK0351ETMsg.OP_SVC_CD)))
		{
			return false;
		}
		// ANK-4427-00-00 ADD END
		return true;
	}
	
	/**
	 * <p>
	 * ルータが出荷済みか否かを判定する
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @return true：ルーターが出荷済　false：ルーターが出荷済でない
	 */
	
	private boolean isRuterSyukkaZumi(CAANMsg inMsg, AgentDispatchContext inContext) {
		
		// オプションサービス契約.サービス契約番号が設定されていない場合
		if (inMsg.isNull(KK0351ETMsg.SVC_KEI_NO))
		{
			return false;
		}

		// 機器提供サービス契約の宅内機器型式コードを取得します
		CAANMsg msg = this.getTaknkikiModelCd(inMsg, inContext, inMsg.getString(KK0351ETMsg.SVC_KEI_NO));
		
		// 検索結果が0件の場合
		if (msg == null)
		{
			return false;
		}
		
		// 宅内機器型式コードをキーに宅内機器型式のIPv6対応フラグが"有"の件数を取得します
		long retlong = this.getIPv6AriCnt(inMsg, inContext, msg.getString(KK0341ETMsg.TAKNKIKI_MODEL_CD));
		
		// 検索結果が0件の場合
		if (retlong == 0)
		{
			return false;
		}
		return true;
	}
	
	/**
	 * <p>
	 * サービス契約番号をキーに機器提供サービス契約の宅内機器型式コードを取得します
     * </p>
	 * @param  inMsg      処理対象のメッセージキャリア
	 * @param  inContext  ディスパッチコンテキスト
	 * @param  svcKeiNo   サービス契約番号
	 * @return 指定したサービス契約番号に紐付く、機器提供サービス契約の宅内機器型式コード
	 */
	private CAANMsg getTaknkikiModelCd(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// 返却メッセージ
		CAANMsg retMsg = null;
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// SQL文
		StringBuffer sbSql = new StringBuffer();

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());

			sbSql.append("SELECT ");
			sbSql.append("    KK0341.TAKNKIKI_MODEL_CD ");
			sbSql.append("FROM ");
			sbSql.append("    KK_T_KKTK_SVC_KEI KK0341 ");
			sbSql.append("WHERE ");
			sbSql.append("    KK0341.SVC_KEI_NO = ? ");
			sbSql.append("    AND KK0341.KIKI_SEIZO_NO IS NOT NULL ");
			sbSql.append("    AND (KK0341.KKTK_SVC_KEI_NO, KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM) = ");
			sbSql.append("        (SELECT KK0341_GENE.KKTK_SVC_KEI_NO, MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX ");
			sbSql.append("         FROM   KK_T_KKTK_SVC_KEI KK0341_GENE ");
			sbSql.append("         WHERE  KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO ");
			sbSql.append("         AND    KK0341_GENE.RSV_APLY_YMD <= ? ");
			sbSql.append("         AND    KK0341_GENE.RSV_APLY_CD = '2' ");
			sbSql.append("         AND    KK0341_GENE.MK_FLG= '0' ");
			sbSql.append("         GROUP BY KK0341_GENE.KKTK_SVC_KEI_NO) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約番号)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);
			// パラメータの設定(運用日付)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 取得結果をメッセージキャリアに格納
			if (rsltQuery.next())
			{
				// カレントレコード取得のため、取得するレコードは1件のみ
				retMsg = new CAANMsg(KK0341ETMsg.class.getName());
				retMsg.set(KK0341ETMsg.TAKNKIKI_MODEL_CD, rsltQuery.getString(1));	// 宅内機器型式コード 
			}

			return retMsg;
		}
		catch (SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
				if (con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}
	
	/**
	 * <p>
	 * 宅内機器型式コードをキーに宅内機器型式のIPv6対応フラグが"有"の件数を取得します
     * </p>
	 * @param  inMsg           処理対象のメッセージキャリア
	 * @param  inContext       ディスパッチコンテキスト
	 * @param  taknkikiModelCd 宅内機器型式コード
	 * @return 指定した宅内機器型式コードに紐付く、宅内機器型式のIPv6対応フラグが"有"の件数
	 */
	private long getIPv6AriCnt(CAANMsg inMsg, AgentDispatchContext inContext, String taknkikiModelCd)
	{
		
		// 宅内機器型式コードがnullの場合
		if (taknkikiModelCd == null)
		{
			return 0;
		}
		
		// 返却メッセージ
		long retCnt = 0L;
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// SQL文
		StringBuffer sbSql = new StringBuffer();

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());

			sbSql.append(" SELECT COUNT(*) AS CNT ");
			sbSql.append(" FROM ");
			sbSql.append("    ZM_M_TAKNKIKI_MODEL ZM0411 ");
			sbSql.append(" WHERE ");
			sbSql.append("    ZM0411.TAKNKIKI_MODEL_CD = ? ");
			sbSql.append("    AND ZM0411.IPV6_TAIO_FLG = '1' ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(宅内機器型式コード)
			CAANJDBCUtil.setParam(pstmt, 1, taknkikiModelCd);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 取得結果をメッセージキャリアに格納
			if (rsltQuery.next())
			{
				retCnt = rsltQuery.getLong("CNT");
			}

			return retCnt;
		}
		catch (SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
				if (con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

// IT1-2017-0000031 DEL START
//// ANK-3149-00-00 ADD START
//	/**
//	 * <p>
//	 * 更新対象のレコードにマカフィー会員IDが設定されているかを確認する。
//	 * </p>
//	 * @param inMsg 処理対象メッセージキャリア
//	 * @param opSvcKeiNo オプションサービス契約番号
//	 * @param opHktgiUm オプション引継有無
//	 * @return 設定されている場合true、設定されていない場合false
//	 */
//	public boolean isCheckMcafeeMemmberId(CAANMsg inMsg, AgentDispatchContext inContext, Object opSvcKeiNo, Object opHktgiUm)
//	{
//// IT1-2017-0000038 ADD START
//		// オプションサービス契約番号が未設定の場合はfalseを返却する。
//		if (null == opSvcKeiNo || "".equals(opSvcKeiNo)) {
//			return false;
//		}
//// IT1-2017-0000038 ADD END
//		
//		// 対象の「オプションサービス契約」カレントレコードを取得する。
//		CAANMsg kk0351Msg = new JKKejbKK0351DBABase().getKK0351Current((String)opSvcKeiNo, JKKModelCommon.getOpeDate(inMsg));
//		
//		// 対象の「オプションサービス契約<ISP>」を取得する。
//		CAANMsg kk0361Msg = new JKKejbKK0361DBABase().getKK0361Primary((String)opSvcKeiNo, kk0351Msg.getString(KK0351ETMsg.GENE_ADD_DTM));
//		
//		String mcfMbrId = kk0361Msg.getString(KK0361ETMsg.MCAFEE_MEMBER_ID);
//		
//		if ((JKKModelConst.OP_SVC_CD_MACFEE_MLTIACS).equals(kk0351Msg.getString(KK0351ETMsg.OP_SVC_CD))) {
//			// オプションサービスコードがマカフィーマルチアクセスの場合
//			if (mcfMbrId != null && !("1").equals((String)opHktgiUm)) {
//				// マカフィー会員IDが設定されていない、又はオプション引継有無が"1"の場合は、falseを返却する
//				return true;
//			}
//		}
//
//		return false;
//	}
//	
//	/**
//	 * <p>
//	 * 更新対象のレコードにBBSS会員IDが設定されているかを確認する。
//	 * </p>
//	 * @param inMsg 処理対象メッセージキャリア
//	 * @param opSvcKeiNo オプションサービス契約番号
//	 * @param opHktgiUm オプション引継有無
//	 * @return 設定されている場合true、設定されていない場合false
//	 */
//	public boolean isCheckBbssMemmberId(CAANMsg inMsg, AgentDispatchContext inContext, Object opSvcKeiNo, Object opHktgiUm)
//	{
//// IT1-2017-0000038 ADD START
//		// オプションサービス契約番号が未設定の場合はfalseを返却する。
//		if (null == opSvcKeiNo || "".equals(opSvcKeiNo)) {
//			return false;
//		}
//// IT1-2017-0000038 ADD END
//		
//		// 対象の「オプションサービス契約」カレントレコードを取得する。
//		CAANMsg kk0351Msg = new JKKejbKK0351DBABase().getKK0351Current((String)opSvcKeiNo, JKKModelCommon.getOpeDate(inMsg));
//		
//		// 対象の「オプションサービス契約<ISP>」を取得する。
//		CAANMsg kk0361Msg = new JKKejbKK0361DBABase().getKK0361Primary((String)opSvcKeiNo, kk0351Msg.getString(KK0351ETMsg.GENE_ADD_DTM));
//		
//		String bbsMbrId = kk0361Msg.getString(KK0361ETMsg.BBSS_MEMBER_ID);
//		
//		if ((JKKModelConst.OP_SVC_CD_NET_SAGI_WALL).equals(kk0351Msg.getString(KK0351ETMsg.OP_SVC_CD)) ||
//				(JKKModelConst.OP_SVC_CD_NORTON_FAMILY_PREMIERE).equals(kk0351Msg.getString(KK0351ETMsg.OP_SVC_CD))) {
//			// オプションサービスコードがインターネットサギウォールかノートンファミリープレミアの場合
//			if (bbsMbrId != null && !("1").equals((String)opHktgiUm)) {
//				// BBSS会員IDが設定されていない、又はオプション引継有無が"1"の場合は、falseを返却する
//				return true;
//			}
//		}
//
//		return false;
//	}
//// ANK-3149-00-00 ADD END
// IT1-2017-0000031 DEL END
}
