/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKK0191C012KRCK
*	ソースファイル名：JKK0191C012KRCK.java
*	作成者			：EK911024
*	日付			：2012年07月06日
*＜機能概要＞
*	関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00   2012/07/06  富士通
*	 v4.00.01	2013/04/06	FJ）沖田 	OT-2013-0000577
*	 v4.00.02	2013/04/09	FJ）沖田 	IT1-2013-0000840
*    v5.00.00   2013/06/21  FJ) 沖田    IT2-2013-0000551
*    v5.00.01   2013/09/04  FJ）寺本    OM-2013-0000791
*    v5.00.02   2013/09/11  FJ）沖田    OM-2013-0001893
*    v5.00.03   2013/10/01  FJ）沖田    OM-2013-0002820
*    v6.00.00   2013/11/26  FJ）大山    ANK-1723-00-00
*    v72.00.00  2024/05/27  FJ）寺田    ANK-4494-00-00
*    v72.00.00  2024/04/16  FJ）大路    ANK-4494-00-00
********************************************************************************/

package eo.ejb.common.entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Map;

import com.fujitsu.futurity.common.JCCWebAddTrnId;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANException;
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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0161ETMsg;
import eo.ejb.cbm.entity.KK0191ETMsg;
import eo.ejb.cbm.entity.TU0011ETMsg;
import eo.ejb.cbm.entity.TU0011LE;
import eo.ejb.cbm.entity.ZM0121ETMsg;
import eo.ejb.cbm.entity.ZM0301ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0191C012CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191C014CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.JKKejbCallTypeChecker;
import eo.ejb.common.db.JKKejbKK0191DBABase;
import eo.ejb.common.db.JKKejbTU0011DBABase;
import eo.ejb.common.db.JKKejbZM0091DBABase;
import eo.ejb.common.db.JKKejbZM0301DBABase;

/**
 * <p>
 * サービス契約内訳<eo光電話>番ポ情報変更関連チェック処理です。
 * ＜メソッド一覧＞
 * execKRCK
 * execEKK0191C012_KR1
 * execEKK0191C012_KR2
 * </p>
 * @author 富士通
 */

public class JEKK0191C012KRCK
{

	/** 番ポ工事希望年月日保留フラグ：番ポ工事希望年月日保留 */
	private static final String BMPKJ_KIBO_YMD_PDING_FLG_ARI = "1";

	/** 番ポ工事ステータス：他事業者確認要 〜 工事実施依頼待ち */
	private static final String[] BMP_KJ_STAT = {"010", "011", "012", "013", "021", "022", "023", "031"}; 

	/** 異動区分：光電話・番号変更 */
	private static final String IDO_KBN_HKARITEL_NUM_CHG = "00042";

	/**
	 * コンストラクタ
	 */

	public JEKK0191C012KRCK()
	{
	}

	/**
	 * サービス契約内訳<eo光電話>番ポ情報変更関連チェックを行います。
	 * 
	 * @param inCBSMsg エンティティ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */

	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JKK0191C012KRCK.execKRCK");

		// ステータス
		int rtn = 0;

		rtn = execEKK0191C012_KR3(inCBSMsg, inContext, "ED");
		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0191C012_KR12(inCBSMsg, inContext, "EE");
		}
		
// ANK-4494-00-00 DEL START
//		if (rtn <= StatusCodes.WARNING)
//		{
//			rtn = execEKK0191C012_KR10(inCBSMsg, inContext, "EF");
//		}
// ANK-4494-00-00 DEL END

		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0191C012_KR13(inCBSMsg, inContext, "EG");
		}
		
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JKK0191C012KRCK.execKRCK");
	}

	
	/**
	 * EKK0191C012_制約ＮＯ１６（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191C012_KR3(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;
		
		// チェック条件@ サービス契約内訳番号が未設定の場合は正常を返却する
		if(inCBSMsg.isNull(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO)) {
			return result;
		}

		// チェック条件A 異動区分が未設定の場合は正常を返却する
		if (inCBSMsg.isNull(EKK0191C012CBSMsg.IDO_DIV))
		{
			return result;
		}

		// チェック条件B 異動区分が"光電話・番号変更"以外の場合は正常を返却する
		if (!IDO_KBN_HKARITEL_NUM_CHG.equals(inCBSMsg.getString(EKK0191C012CBSMsg.IDO_DIV)))
		{
			return result;
		}

		// チェック条件C "番ポ有無"が「無」以外の場合は正常を返却する
		if (!JKKModelConst.UM_M.equals(inCBSMsg.getString(EKK0191C012CBSMsg.BMP_UM)))
		{
			return result;
		}

		// チェック実施
		if (0L != this.getKK0161SvcKeiUcwkStatCnt(inCBSMsg, inContext, errFlag))
		{
			// エラー処理
			inCBSMsg.set(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}
		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}

	/**
	 * EKK0191C012_制約ＮＯ１７（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191C012_KR12(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;
		
		// チェック条件@ サービス契約内訳番号が未設定の場合は正常を返却する
		if(inCBSMsg.isNull(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO)) {
			return result;
		}

		// チェック条件A 異動区分が未設定の場合は正常を返却する
		if (inCBSMsg.isNull(EKK0191C012CBSMsg.IDO_DIV))
		{
			return result;
		}

		// チェック条件B 異動区分が"光電話・番号変更"以外の場合は正常を返却する
		if (!IDO_KBN_HKARITEL_NUM_CHG.equals(inCBSMsg.getString(EKK0191C012CBSMsg.IDO_DIV)))
		{
			return result;
		}

		// チェック実施
		if (0L != this.getKK0161SvcKeiUcwkStatCnt(inCBSMsg, inContext, errFlag))
		{
			// エラー処理
			inCBSMsg.set(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}
		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}
	/**
	 * <p>
	 * 番ポ工事からサービス契約内訳番号をKEYに検索し、番ポ工事番号を取得する
	 * </p>
	 * @param  inCBSMsg チェック対象のCBSMsg
	 * @return 番ポ工事番号のリスト
	 */
	private ArrayList<String> getBmpKojiNo(CAANMsg inCBSMsg)
	{

		// 番ポ工事インスタンスを生成
		CAANMsg bmpMsg = new CAANMsg(TU0011ETMsg.class.getName());
		bmpMsg.set(TU0011ETMsg.SVC_KEI_UCWK_NO, inCBSMsg.getString(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO));
		bmpMsg.set(TU0011ETMsg.MK_FLG, "0");

		CAANMsg[] tu0011Msg = null;
		try
		{
			// 番ポ工事をサービス契約番号をKEYに検索を行う
			TU0011LE tu0011le = new TU0011LE();
			tu0011Msg = tu0011le.findByCondition(bmpMsg);
		}
		catch (CAANException e)
		{
			throw new CAANRuntimeException(e);
		}

		// 検索結果が0件の場合
		if (tu0011Msg == null)
		{
			return null;
		}

		ArrayList<String> bmpKjNolist = new ArrayList<String>();

		// 番ポ工事番号をマージする
		for (int i = 0; i < tu0011Msg.length; i++)
		{
			// 番ポ工事番号を取得する
			String bmpkojiNo = tu0011Msg[i].getString(TU0011ETMsg.BMP_KOJI_NO);

			if (bmpKjNolist.contains(bmpkojiNo))
			{
				continue;
			}
			bmpKjNolist.add(bmpkojiNo);
		}
		return bmpKjNolist;
	}
	
	

	/**
	 * <p>
	 * 指定された電話番号のサービス契約内訳ステータスを取得します
	 * </p>
	 * @param  inMsg     処理対象のメッセージキャリア
	 * @param  inContext ディスパッチコンテキスト
	 * @param  errFlag   ERRフラグ
	 * @return 取得したデータ件数
	 */
	private Long getKK0161SvcKeiUcwkStatCnt(CAANMsg inMsg, AgentDispatchContext inContext, String errFlag)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;

		// 返却用データ件数
		Long lDateCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0191ETMsg.getTableName());

			// SQL文
			StringBuffer sbSql = new StringBuffer();

			sbSql.append(" SELECT  ")
				 .append("     COUNT(*) AS CNT ")
				 .append(" FROM ")
				 .append("     KK_T_SVC_KEI_UCWK KK0161 ")
				 .append("     INNER JOIN KK_T_SVKEIUW_EOH_TEL KK0191  ")
				 .append("     ON KK0161.SVC_KEI_UCWK_NO = KK0191.SVC_KEI_UCWK_NO  ")
				 .append("     AND KK0161.GENE_ADD_DTM = KK0191.GENE_ADD_DTM  ")
				 .append(" WHERE  ")
				 .append("         KK0161.SVC_KEI_UCWK_NO = ?  ");
			// 制約ＮＯ１６の場合
			if ("ED".equals(errFlag))
			{
				sbSql.append("     AND KK0161.SVC_KEI_UCWK_STAT NOT IN ('100')  ")
					 .append("     AND KK0191.BMP_UM = '0'  ");
			}
			// 制約ＮＯ１７の場合
			if ("EE".equals(errFlag))
			{
				sbSql.append("     AND KK0161.SVC_KEI_UCWK_STAT NOT IN ('020', '030' ,'100')  ")
					 .append("     AND KK0191.BMP_UM = '1'  ");
			}
			sbSql.append("     AND (KK0161.SVC_KEI_UCWK_NO, KK0161.RSV_APLY_YMD || KK0161.GENE_ADD_DTM) =   ")
				 .append("         (SELECT KK0161_GENE.SVC_KEI_UCWK_NO, MAX(KK0161_GENE.RSV_APLY_YMD || KK0161_GENE.GENE_ADD_DTM)   ")
				 .append("            FROM KK_T_SVC_KEI_UCWK KK0161_GENE   ")
				 .append("           WHERE KK0161_GENE.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO   ")
				 .append("             AND KK0161_GENE.RSV_APLY_YMD <= ?   ")
				 .append("             AND KK0161_GENE.RSV_APLY_CD = '2'   ")
				 .append("             AND KK0161_GENE.MK_FLG = '0'  ")
				 .append("        GROUP BY KK0161_GENE.SVC_KEI_UCWK_NO)  ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sbSql);

			// パラメータの設定(サービス契約内訳番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getString(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の設定
			if (rsltQuery.next())
			{
				lDateCnt = rsltQuery.getLong("CNT");
			}
			return lDateCnt;
		}
		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);
			}
		}
	}
	
// ANK-4494-00-00 DEL START
//	/**
//	 * <p>
//	 * EKK0191C012_制約ＮＯ２４（関連）チェック
//	 * </p>
//	 * @param  inCBSMsg  チェック対象のCBSMsg
//	 * @param  inContext Agentから渡されたAgentDispatchContext
//	 * @param  errFlag   ERRフラグ
//	 * @return result    チェック結果
//	 */
//	private int execEKK0191C012_KR10(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
//	{
//		// ステータス
//		int result = 0;
//
//		// 電話番号がnullの場合、チェック実施せず
//		if (inCBSMsg.isNull(EKK0191C012CBSMsg.TELNO))
//		{
//			return result;
//		}
//
//		// 番ポ有無が"有"以外の場合、チェック実施せず
//		if (!JKKModelConst.UM_U.equals(inCBSMsg.getString(EKK0191C012CBSMsg.BMP_UM)))
//		{
//			return result;
//		}
//
//		// サービス契約内訳<eo光電話>制約部品に渡す値を作成する
//		CAANMsg inETMsg = new CAANMsg(KK0191ETMsg.class.getName());
//		inETMsg.set(KK0191ETMsg.TELNO, inCBSMsg.getString(EKK0191C012CBSMsg.TELNO));
//
//		JKKejbKK0191KRCK kk0191KRCK = new JKKejbKK0191KRCK();
//
//		// 番ポ可能エリアが存在しない場合、エラー
//		if (!kk0191KRCK.isExistsBmpArea(inETMsg, inContext))
//		{
//			// エラー処理
//			inCBSMsg.set(EKK0191C012CBSMsg.TELNO_ERR, errFlag);
//			if ("W".equals(errFlag.substring(0, 1)))
//			{
//				result = StatusCodes.WARNING;
//			}
//			else
//			{
//				result = StatusCodes.RELATION_ERR;
//			}
//		}
//		// ステータスのセット
//		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
//		{
//			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
//		}
//		return result;
//	}
// ANK-4494-00-00 DEL END

	/**
	 * <p>
	 * EKK0191C012_制約ＮＯ１９（関連）チェック
	 * チェック内容は以下のとおり。<br>
	 * ・ルーティング番号存在チェック<br>
	 * ・番ポ申込事業所番号存在チェック
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param errFlg エラーフラグ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return result  チェック結果
	 */
	public int execEKK0191C012_KR13(CAANMsg inMsg, AgentDispatchContext arg1, String errFlg)
	{
		// ステータス
		int result = 0;
		
		// フロントまたは量販からの場合チェック対象外とする
		if (JKKejbCallTypeChecker.isCallTypeFront(arg1) || JKKejbCallTypeChecker.isCallTypeRyohan(arg1))
		{
			return result;
		}

		// 共通メッセージからサービス呼び出し元の区分を取得する
		Map<String, Object> commonMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		
		// 呼び出し元サービスID
		String serviceId = (String)commonMsg.get(JCMConstants.USECASE_ID_KEY);
		
		// 呼び出し元サービスIDが"FUSV0356"(フロンティア登録)の場合
		if ("FUSV0356".equals(serviceId))
		{
			// チェック対象外
			return result;
		}
		
		// 番ポなしの場合チェック対象外
		if (JKKModelConst.UM_M.equals(inMsg.getString(EKK0191C012CBSMsg.BMP_UM)))
		{
			return result;
		}
		// 運用日付の取得
		String opeDate = JKKModelCommon.getOpeDate(inMsg);

		// 電話番号
		String telNo = inMsg.getString(EKK0191C012CBSMsg.TELNO);
		// 緊急通報用住所コード
		String emgAdCd = inMsg.getString(EKK0191C012CBSMsg.EMG_AD_CD);
		
		// 電話番号がNullの場合、エラーを返却する
		if (telNo == null || "".equals(telNo) || telNo.length() < 6)
		{
			return setError(inMsg, errFlg);
		}
		
		
// ANK-4494-00-00 ADD START
		// 電話番号マスタ及び通信事業者マスタから、対象の電話番号をKeyに
		// 取得し、自社電話番号の場合はチェックをしない。

		Connection con = JSYejbConnection.getConnection(ZM0121ETMsg.getTableName());

		PreparedStatement pstmtQuery = null;
		ResultSet rsltQuery = null;
		StringBuffer sqlQuery = new StringBuffer();

		try {

			// ＳＱＬ文の組み立て
			sqlQuery.append(" SELECT ")
					.append("      TE.TELNO ")
					.append("     ,TE.SHK_KOJIN_HOJIN_TLN_TAI_CD ")
					.append("     ,CD8.CD_DIV_NM AS SHK_KOJIN_HOJIN_TLN_TAI_CD_NM ")
					.append("     ,TE.KOJIN_HOJIN_TLN_TAI_CD ")
					.append("     ,CD4.CD_DIV_NM AS KOJIN_HOJIN_TLN_TAI_CD_NM ")
					.append("     ,TE.TLN_STKU_TSJGS_CD ")
					.append("     ,TJ3.TSJGS_NM AS TLN_STKU_TSJGS_CD_NM ")
					.append("     ,TJ3.JISHA_TASHA_FLG AS TLN_STKU_TSJGS_JISHA_TASHA_FLG ")
					.append("     ,TE.ITNM_TSJGS_CD ")
					.append("     ,TJ4.TSJGS_NM AS ITNM_TSJGS_CD_NM ")
					.append("     ,TJ4.JISHA_TASHA_FLG AS ITNM_TSJGS_JISHA_TASHA_FLG ")
					.append("     ,TE.ITNS_TSJGS_CD ")
					.append("     ,TJ5.TSJGS_NM AS ITNS_TSJGS_CD_NM ")
					.append("     ,TJ5.JISHA_TASHA_FLG AS ITNS_TSJGS_JISHA_TASHA_FLG ")
					.append(" FROM ")
					.append("     ZM_M_TELNO TE ")
					.append(" LEFT OUTER JOIN ")
					.append("     ZM_M_CD_NM_KANRI CD4 ")
					.append(" ON  CD4.CD_SBT_CD = 'CD00410' ")
					.append(" AND CD4.CD_DIV = TE.KOJIN_HOJIN_TLN_TAI_CD ")
					.append(" AND CD4.CD_TSTAYMD <= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND CD4.CD_TENDYMD >= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND CD4.MK_FLG = '0' ")
					.append(" LEFT OUTER JOIN ")
					.append("     ZM_M_CD_NM_KANRI CD8 ")
					.append(" ON  CD8.CD_SBT_CD = 'CD00410' ")
					.append(" AND CD8.CD_DIV = TE.SHK_KOJIN_HOJIN_TLN_TAI_CD ")
					.append(" AND CD8.CD_TSTAYMD <= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND CD8.CD_TENDYMD >= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND CD8.MK_FLG = '0' ")
					.append(" LEFT OUTER JOIN ")
					.append("     TU_M_TUSHIN_JGYOSHA TJ3 ")
					.append(" ON  TJ3.TSJGS_CD = TE.TLN_STKU_TSJGS_CD ")
					.append(" AND TJ3.TSJGS_TSTAYMD <= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND TJ3.TSJGS_TENDYMD >= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND TJ3.MK_FLG = '0' ")
					.append(" LEFT OUTER JOIN ")
					.append("     TU_M_TUSHIN_JGYOSHA TJ4 ")
					.append(" ON  TJ4.TSJGS_CD = TE.ITNM_TSJGS_CD ")
					.append(" AND TJ4.TSJGS_TSTAYMD <= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND TJ4.TSJGS_TENDYMD >= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND TJ4.MK_FLG = '0' ")
					.append(" LEFT OUTER JOIN ")
					.append("     TU_M_TUSHIN_JGYOSHA TJ5 ")
					.append(" ON  TJ5.TSJGS_CD = TE.ITNS_TSJGS_CD ")
					.append(" AND TJ5.TSJGS_TSTAYMD <= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND TJ5.TSJGS_TENDYMD >= SUBSTR(TE.UPD_DTM,0,8) ")
					.append(" AND TJ5.MK_FLG = '0' ")
					.append(" WHERE ")
					.append("     TE.TELNO = ? ")
					.append(" AND TE.MK_FLG = '0' ");
			
			// ＳＱＬ文の解析
			pstmtQuery = con.prepareStatement(sqlQuery.toString());

			int para_idx = 1;
			CAANJDBCUtil.setParam(pstmtQuery, para_idx++, telNo);

			// ＳＱＬ文の実行
			rsltQuery = pstmtQuery.executeQuery();

			while (rsltQuery.next()) {
				// 判定条件
				String value = rsltQuery.getString("TLN_STKU_TSJGS_JISHA_TASHA_FLG");

				if ("1".equals(value)) {
					// 電話番号取得事業者コードの自社フラグが自社：1の場合、チェックしない。
					// 1以外 他事業者の2や、電話番号取得事業者コードがNULLで自社フラグがNULLの場合は他事業者として判定し
					// 後続のチェックを行う。
					return result;
				}
			}
		}
		catch (SQLException e) {
			inMsg.set(ZM0121ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally {
			// このメソッドで確保した資源の解放
			try {
				if (rsltQuery != null) {
					rsltQuery.close();
				}
				if (pstmtQuery != null) {
					pstmtQuery.close();
				}
				if (con != null) {
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException e) {
				inMsg.set(ZM0121ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
// ANK-4494-00-00 ADD END

		// -------------------------------------
		// ルーティング番号存在チェック
		// -------------------------------------
		// 電話番号上6桁に紐づく「局番」を取得する
		JKKejbZM0301DBABase zm0301Dba = new JKKejbZM0301DBABase();
		CAANMsg[] zm0301MsgList = zm0301Dba.getZM0301byKyoku(telNo.substring(0, 6), null, opeDate, "1");

		// レコードが取得できない場合、エラー
		if (zm0301MsgList.length == 0)
		{
			return setError(inMsg, errFlg);
		}
		
		// 局番.個人用ＮＲＮ番号が未設定の場合、エラー
		String kojinNrnNo = zm0301MsgList[0].getString(ZM0301ETMsg.KOJIN_NRN_NO);
		if (kojinNrnNo == null || "".equals(kojinNrnNo))
		{
			return setError(inMsg, errFlg);
		}
		// 局番.番号区画コード
		String noKukakucd = zm0301MsgList[0].getString(ZM0301ETMsg.NO_KUKAKU_CD);

		// -------------------------------------
		// 番ポ申込事業所番号存在チェック
		// -------------------------------------
		// 実施条件
		if (!isBmpMskmJgyoNoExsitChk(inMsg))
		{
			return result;
		}
		// 緊急通報用住所コード、および電話番号が指定する「局番」の番号区画コードに紐づく「住所対象番号区画」を取得する
		JKKejbZM0091DBABase zm0091Dba = new JKKejbZM0091DBABase();
		CAANMsg[] zm0091MsgList = zm0091Dba.getZM0091byAd_NoKukaku(emgAdCd, noKukakucd, null, opeDate, "1");

		// レコードが取得できない場合、エラー
		if (zm0091MsgList.length == 0)
		{
			return setError(inMsg, errFlg);
		}


		return result;
	}

	/**
	 * <p>
	 * 番ポ申込事業所番号存在チェック実施条件
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return true：チェック実施 false：チェック未実施
	 */
	private boolean isBmpMskmJgyoNoExsitChk(CAANMsg inMsg)
	{
		// サービス契約内訳のカレントレコードを元にサービス契約内訳<eo光電話>を取得する
		CAANMsg searchKey = new CAANMsg(KK0161ETMsg.class.getName());
		searchKey.set(KK0161ETMsg.SVC_KEI_UCWK_NO, inMsg.getString(EKK0191C012CBSMsg.SVC_KEI_UCWK_NO));

		// 運用日付を取得する
		String stdYmd = JKKModelCommon.getOpeDate(inMsg);

		// 異動区分を取得
		String idoDiv = inMsg.getString(EKK0191C012CBSMsg.IDO_DIV);
		// 異動区分が"住所変更・登録"の場合
		if (JKKModelConst.IDO_DIV_ADCHG_ADD.equals(idoDiv))
		{
			// 入力の予約適用年月日を基準にカレントレコードを取得する。
			stdYmd = inMsg.getString(EKK0191C012CBSMsg.RSV_APLY_YMD);
		}

		CAANMsg kk0191Rec = new JKKejbKK0191DBABase().findByCurrent(searchKey, stdYmd);

		// 取得できない場合
		if (kk0191Rec == null)
		{
			throw new CAANRuntimeException("サービス契約内訳番号に紐付くサービス契約内訳が取得できません。");
		}

		// 取得されたサービス契約内訳<eo光電話>の「電話番号」と「緊急通報用住所コード」を取得する
		String telNo = kk0191Rec.getString(KK0191ETMsg.TELNO);
		String emgAdCd = kk0191Rec.getString(KK0191ETMsg.EMG_AD_CD);

		// 各種値をnull⇒""にコンバートする
		String[] hikakuStr = nullEmptyConv(new String[]{telNo, inMsg.getString(EKK0191C012CBSMsg.TELNO), emgAdCd,
				inMsg.getString(EKK0191C012CBSMsg.EMG_AD_CD)});

		// 入力の「電話番号」vsカレント「電話番号」、入力の「緊急通報用住所コード」vsカレント「緊急通報用住所コード」を行う。
		if (hikakuStr[0].equals(hikakuStr[1]) && hikakuStr[2].equals(hikakuStr[3]))
		{
			// 両方とも変更が無い場合はチェック対象外とする
			return false;
		}
		return true;
	}
	
	/**
	 * <p>
	 * nullを空白にコンバートする
	 * </p>
	 * @param strList コンバートしたい値のリスト
	 * @return nullを空文字に変換したリスト
	 */
	private String[] nullEmptyConv(String[] strList)
	{
		for (int i = 0; i < strList.length; i++)
		{
			if (strList[i] == null)
			{
				strList[i] = "";
			}
		}
		return strList;
	}

	/**
	 * <p>
	 * エラー処理を行います。
	 * </p>
	 * 
	 * @param  inCBSMsg チェック対象のCBSMsg(EKK0191C012CBSMsg)
	 * @return エラーステータス
	 */
	private int setError(CAANMsg inMsg, String errFlg) {

		// ステータス
		int result = 0;
		
		// エラー処理
		inMsg.set(EKK0191C012CBSMsg.TELNO_ERR, errFlg);
		if ("W".equals(errFlg.substring(0, 1)))
		{
			result = StatusCodes.WARNING;
		}
		else
		{
			result = StatusCodes.RELATION_ERR;
		}
		// ステータスのセット
		if (result > inMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}

}
