/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK1151KRCK
*	ソースファイル名：JKKejbKK1151KRCK.java
*	作成者			：富士通
*	日付			：2012年12月26日
*＜機能概要＞
*	加入御礼書発行制約部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	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.KK0811ETMsg;
import eo.ejb.cbm.entity.KK1151ETMsg;

/**
 * <p>
 * 加入御礼書発行の制約を行う部品
 * </p>
 * @author 富士通
 */
public class JKKejbKK1151KRCK
{
	/**
	 * <p>
	 * 新しいJKKejbKK1151KRCKクラスを作成します
	 * </p>
	 */
	public JKKejbKK1151KRCK()
	{
	}

	/**
	 * <p>
	 * 加入御礼書発行未存在チェックを実施します
	 * </p>
	 * @param inETMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 存在しない場合true 存在する場合false
	 */
	public boolean kanHakNotExistsChk(CAANMsg inETMsg, AgentDispatchContext inContext)
	{
		String dataChshtDtm = inETMsg.getString(KK1151ETMsg.DATA_CHSHT_DTM);		 // データ抽出年月日時分秒
		String kanuoresoHakkoNo = inETMsg.getString(KK1151ETMsg.KANUORESO_HAKKO_NO); // 加入御礼書発行番号
		
		// 加入御礼書発行のデータ件数を取得します
		long kanHakDataCnt = this.getkanHakDataChk(inETMsg, inContext, dataChshtDtm, kanuoresoHakkoNo);
		
		// データ件数が1件以上存在する場合
		if(kanHakDataCnt > 0) {
			return false;
		}
		return true;
	}
	
	/**
	 * <p>
	 * 加入御礼書発行のデータを取得します
	 * </p>
	 * @param inETMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @param dataChshtDtm データ抽出年月日時分秒
	 * @param kanuoresoHakkoNo 加入御礼書発行番号
	 * @return 加入御礼書発行のデータ件数
	 */
	private long getkanHakDataChk(CAANMsg inETMsg, AgentDispatchContext inContext, String dataChshtDtm, String kanuoresoHakkoNo)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// 返却用取得件数
		long retCnt = 0L;

		try
		{
			// 対象テーブルのコネクション取得
			con = JSYejbConnection.getConnection(KK0811ETMsg.getTableName());

			// SQL文
			StringBuffer sqlBf = new StringBuffer();

			sqlBf.append(" SELECT ")
				 .append("     COUNT(*) AS CNT ")
				 .append(" FROM ")
				 .append("     KK_T_KANUORESO_HAKKO KK1151 ")
				 .append(" WHERE ")
				 .append("         KK1151.DATA_CHSHT_DTM > ? ")
				 .append("     AND KK1151.MK_FLG = '0' ")
				 .append("     AND EXISTS (SELECT 1 ")
				 .append("                   FROM KK_T_KANUORESO_HAKKO KK1151_01 ")
				 .append("                  WHERE KK1151_01.SVC_KEI_NO = KK1151.SVC_KEI_NO ")
				 .append("                    AND KK1151_01.KANUORESO_HAKKO_NO = ? ")
				 .append("                    AND KK1151_01.SEND_JGI_FLG = '2' ")
				 .append("                    AND KK1151_01.MK_FLG = '0' ")				 
				 .append("                 ) ");

			// repareStatementにSQL文をセット
			pstmt = con.prepareStatement(sqlBf.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlBf);

			// パラメータの設定(データ抽出年月日時分秒を指定)
			CAANJDBCUtil.setParam(pstmt, 1, dataChshtDtm);
			// パラメータの設定(加入御礼書発行番号を指定)
			CAANJDBCUtil.setParam(pstmt, 2, kanuoresoHakkoNo);

			// 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;
	}
}
