/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbZM0541KRCK
*	ソースファイル名：JKKejbZM0541KRCK.java
*	作成者			：富士通
*	日付			：2024年07月11日
*＜機能概要＞
*	ENUM切替履歴関連チェック部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/12/26	FJ)			新規作成
*
**********************************************************************/

package eo.ejb.common.entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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.TU0051ETMsg;
import eo.ejb.cbm.entity.ZM0121ETMsg;
import eo.ejb.cbm.entity.ZM0541ETMsg;

/**
 * <p>
 * ENUM切替履歴の関連チェックを行う部品
 * </p>
 * @author 富士通
 */
public class JKKejbZM0541KRCK
{
	/**
	 * <p>
	 * 新しいJKKejbZM0541KRCKクラスを作成します
	 * </p>
	 */
	public JKKejbZM0541KRCK()
	{
	}

	/**
	 * <p>
	 * 移転元通信事業者コード未存在チェックを実施します
	 * </p>
	 * @param inETMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 存在しない場合true 存在する場合false nullの場合は、false
	 */
	public boolean existItnmTsjgsCd(CAANMsg inETMsg, AgentDispatchContext inContext)
	{
		String itnmTsjgsCd = inETMsg.getString(ZM0541ETMsg.ITNM_TSJGS_CD);		 // 移転元通信事業者コード
		
		// 設定値が存在する場合
		if (!isNullBlank(itnmTsjgsCd))
		{
			return existTsjgsCd(inETMsg, inContext, itnmTsjgsCd);
		}
		
		return false;
	}
	
	/**
	 * <p>
	 * 移転先通信事業者コード未存在チェックを実施します
	 * </p>
	 * @param inETMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 存在しない場合true 存在する場合false nullの場合は、false
	 */
	public boolean existItnsTsjgsCd(CAANMsg inETMsg, AgentDispatchContext inContext)
	{
		String itnsTsjgsCd = inETMsg.getString(ZM0541ETMsg.ITNS_TSJGS_CD);		 // 移転先通信事業者コード
		
		// 設定値が存在する場合
		if (!isNullBlank(itnsTsjgsCd))
		{
			return existTsjgsCd(inETMsg, inContext, itnsTsjgsCd);
		}
		
		return false;
	}
	
	/**
	 * <p>
	 * 通信事業者コード未存在チェックを実施します
	 * </p>
	 * @param inETMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 存在しない場合true 存在する場合false
	 */
	private boolean existTsjgsCd(CAANMsg inETMsg, AgentDispatchContext inContext, Object tsjgsCd)
	{
		// 通信事業者コードのデータ件数を取得します
		long tsjgsCdDataCnt = this.getTsjgsCdDataChk(inETMsg, inContext, (String)tsjgsCd);
		
		// データ件数が1件以上存在する場合
		if(tsjgsCdDataCnt > 0) {
			return false;
		}
		return true;
	}
	
	/**
	 * <p>
	 * 通信事業者コードのデータを取得します
	 * </p>
	 * @param inETMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @param tsjgsCd 通信事業者コード
	 * @return 通信事業者のデータ件数
	 */
	private long getTsjgsCdDataChk(CAANMsg inETMsg, AgentDispatchContext inContext, String tsjgsCd)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// 返却用取得件数
		long retCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(TU0051ETMsg.getTableName());

			// SQL文
			StringBuffer sqlBf = new StringBuffer();

			sqlBf.append(" SELECT ")
				 .append("     COUNT(*) AS CNT ")
				 .append(" FROM ")
				 .append("     TU_M_TUSHIN_JGYOSHA TU0051 ")
				 .append(" WHERE ")
				 .append("         TU0051.TSJGS_CD = ? ")
				 .append("     AND TU0051.MK_FLG = '0' ")
				 ;

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sqlBf.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlBf);

			// パラメータの設定(データ抽出年月日時分秒を指定)
			CAANJDBCUtil.setParam(pstmt, 1, tsjgsCd);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 結果の確認
			if (rsltQuery.next())
			{
				// 取得件数を返却項目に設定する
				retCnt = rsltQuery.getLong("CNT");
			}
		}
		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);
			}
		}
		return retCnt;
	}
	
	/**
	 * null又は空文字の場合、trueを返却する
	 * 
	 * @param str 検査対象文字列
	 * @return true:null、又は空文字／false:左記以外
	 */
	private boolean isNullBlank(String str)
	{
		if (str == null || "".equals(str))
		{
			return true;
		}
		return false;
	}
}
