/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbECH0011B015TPDA
*	ソースファイル名：JSYejbECH0011B015TPDA.java
*	作成者			：EK911025
*	日付			：2017年04月07日
*＜機能概要＞
*	支払状況照会（ＩＢＵＫＩ）テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v32.00.00	2017/04/07  FJ)寺園		【ANK-3140-00-00】IBUKI向け支払状況確認APIの作成
*
********************************************************************************/

package eo.ejb.cbs.sqlf;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANSQLFacility;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
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.TemplateDBAccessHandler;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import eo.common.constant.JACStrConst;
import eo.ejb.cbs.cbsmsg.ECH0011B015CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0011B015CBSMsg1List;
import eo.ejb.cbm.entity.CH0011ETMsg;
import eo.ejb.cbm.entity.CH0051ETMsg;
import eo.ejb.cbm.entity.CH0231ETMsg;
import eo.ejb.cbm.entity.CH0501ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.common.JPCModelCommon;

/**
*
*  テンプレートDBアクセス部品　ECH0011B015_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbECH0011B015TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbECH0011B015TPDA()	{
	}
	
	/**
	*   ECH0011B015_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){

		ArrayList rsltMsgList = new ArrayList();
		CAANMsg outMsg1 = new CAANMsg("eo.ejb.cbs.cbsmsg.ECH0011B015CBSMsg1List");
		// inMsg(CBSMsg)に明細をセット
		outMsg1.set(ECH0011B015CBSMsg1List.PAY_JOKYO, "1");
		rsltMsgList.add(outMsg1);
		inMsg.set("ECH0011B015CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));

		// 運用日付を取得
		String opeDate = JPCModelCommon.getOpeDate(inMsg, inContext, null).toString();
		
		// 請求契約番号を取得
		String seikyKeiNo = getSeikyKeiNo(inMsg, inContext, opeDate);

		// 請求契約番号が取得できない場合
		if (null == seikyKeiNo)
		{
			// inMsg(CBSMsg)に明細をセット
			outMsg1.set(ECH0011B015CBSMsg1List.PAY_JOKYO, "0");
			rsltMsgList.add(outMsg1);
			inMsg.set("ECH0011B015CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));
			return;
		}
		
		// 請求年月-2ヶ月（料金計算日基準）を取得
		String seikyYm_03 = getSeikyYm_03(inMsg, inContext, opeDate);
		
		// 請求年月-1ヶ月（請求処理日基準）を取得
		String seikyYm_04 = getSeikyYm_04(inMsg, inContext, opeDate);

		// 未収債権の判定
		if (!chkMishuSaiken(inMsg, inContext, opeDate, seikyKeiNo, seikyYm_03))
		{
			// inMsg(CBSMsg)に明細をセット
			outMsg1.set(ECH0011B015CBSMsg1List.PAY_JOKYO, "0");
			rsltMsgList.add(outMsg1);
			inMsg.set("ECH0011B015CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));
			return;
		}

		// 督促ステータスの判定
		if (!chkTokusoku(inMsg, inContext, opeDate, seikyKeiNo))
		{
			// inMsg(CBSMsg)に明細をセット
			outMsg1.set(ECH0011B015CBSMsg1List.PAY_JOKYO, "0");
			rsltMsgList.add(outMsg1);
			inMsg.set("ECH0011B015CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));
			return;
		}

		// 請求書払いの判定
		if (!chkSeikysho(inMsg, inContext, opeDate, seikyKeiNo, seikyYm_04))
		{
			// inMsg(CBSMsg)に明細をセット
			outMsg1.set(ECH0011B015CBSMsg1List.PAY_JOKYO, "0");
			rsltMsgList.add(outMsg1);
			inMsg.set("ECH0011B015CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));
			return;
		}

		return;
	}
	
	/**
	 * <p>
	 * 請求契約番号を取得する
	 * </p>
	 *  @param inMsg    入力値の格納されたCBSMsg <br>
	 *  @param inContext Agentから渡されたAgentDispatchContext
	 *  @param opeDate 運用日付
	 *  @return 請求契約番号
	*/
	public String getSeikyKeiNo(CAANMsg inMsg,AgentDispatchContext inContext, String opeDate){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;

		String seikyKeiNo = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT KK0321.SEIKY_KEI_NO ")
					.append(" FROM   KK_T_KAKINS KK0321 ")
					.append(" INNER JOIN KK_T_SVC_KEI KK0081 ")
					.append("         ON KK0081.SVC_KEI_NO = KK0321.SVC_KEI_NO ")
					.append(" WHERE KK0081.SVC_KEI_NO = ?  ")
					.append("   AND KK0321.KAKINS_TSTAYMD <= ?  ")
					.append("   AND KK0321.KAKINS_TENDYMD >= ?  ")
					.append("   AND KK0321.MK_FLG = '0' ")
					.append("   AND (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) ")
					.append("          = (SELECT KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX  ")
					.append("               FROM KK_T_SVC_KEI KK0081_GENE  ")
					.append("              WHERE KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
					.append("                AND KK0081_GENE.RSV_APLY_YMD <= ?  ")
					.append("                AND KK0081_GENE.RSV_APLY_CD = '2' ")
					.append("                AND KK0081_GENE.MK_FLG = '0' ")
					.append("              GROUP BY KK0081_GENE.SVC_KEI_NO) ");
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(ＫＥＹ＿サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getObject(ECH0011B015CBSMsg.KEY_SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, opeDate);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, opeDate);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 4, opeDate);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 請求契約番号を返却する
			if (rsltQuery.next())
			{
				seikyKeiNo = rsltQuery.getString("SEIKY_KEI_NO");
			}

			return seikyKeiNo;

		} catch(SQLException e) {
			inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * <p>
	 * 請求年月-2ヶ月（料金計算日基準）を取得する
	 * </p>
	 *  @param inMsg    入力値の格納されたCBSMsg <br>
	 *  @param inContext Agentから渡されたAgentDispatchContext
	 *  @param opeDate 運用日付
	 *  @return 請求年月-2ヶ月（料金計算日基準）
	*/
	public String getSeikyYm_03(CAANMsg inMsg,AgentDispatchContext inContext, String opeDate){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;

		String seikyYm_03 = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0501ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  ")
					.append("     TO_CHAR(ADD_MONTHS(TO_DATE(MIN(CH0501.SEIKY_YM),'yyyyMM'),-2),'yyyyMM') AS SEIKY_YM_03  ")
					.append(" FROM  ")
					.append("     CH_M_PRC_SCHDL_TEIGI CH0501  ")
					.append(" WHERE  ")
					.append("     CH0501.EVENT_CD = '03'  ")
					.append("     AND CH0501.EVENT_YMD >= ?  ")
					.append("     AND CH0501.MK_FLG = '0'  ");
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 1, opeDate);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 請求契約番号を返却する
			if (rsltQuery.next())
			{
				seikyYm_03 = rsltQuery.getString("SEIKY_YM_03");
			}

			return seikyYm_03;

		} catch(SQLException e) {
			inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * <p>
	 * 請求年月-1ヶ月（請求処理日基準）を取得する
	 * </p>
	 *  @param inMsg    入力値の格納されたCBSMsg <br>
	 *  @param inContext Agentから渡されたAgentDispatchContext
	 *  @param opeDate 運用日付
	 *  @return 請求年月-1ヶ月（請求処理日基準）
	*/
	public String getSeikyYm_04(CAANMsg inMsg,AgentDispatchContext inContext, String opeDate){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;

		String seikyYm_04 = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0501ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  ")
					.append("     TO_CHAR(ADD_MONTHS(TO_DATE(MIN(CH0501.SEIKY_YM),'yyyyMM'),-1),'yyyyMM') AS SEIKY_YM_04  ")
					.append(" FROM  ")
					.append("     CH_M_PRC_SCHDL_TEIGI CH0501  ")
					.append(" WHERE  ")
					.append("     CH0501.EVENT_CD = '04'  ")
					.append("     AND CH0501.EVENT_YMD >= ?  ")
					.append("     AND CH0501.MK_FLG = '0'  ");
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 1, opeDate);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 請求契約番号を返却する
			if (rsltQuery.next())
			{
				seikyYm_04 = rsltQuery.getString("SEIKY_YM_04");
			}

			return seikyYm_04;

		} catch(SQLException e) {
			inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * <p>
	 * 未収債権が存在するか判定する
	 * </p>
	 *  @param inMsg    入力値の格納されたCBSMsg <br>
	 *  @param inContext Agentから渡されたAgentDispatchContext
	 *  @param opeDate 運用日付
	 *  @param seikyKeiNo 請求契約番号
	 *  @param seikyYm_03 請求年月（2ヶ月前）
	 *  @return 判定結果　true：債権未収なし　false：債権未収あり
	*/
	public boolean chkMishuSaiken(CAANMsg inMsg,AgentDispatchContext inContext, String opeDate, String seikyKeiNo, String seikyYm_03){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;

		long amnt = 0L;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0011ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT NVL(SUM(CH0021.AMNT),0) AS AMNT ")
					.append(" FROM  ")
					.append("     CH_T_SAIKEN CH0011 ")
					.append("     INNER JOIN ")
					.append("         ( ")
					.append("         SELECT ")
					.append("              CH0021_SUB.SAIKEN_FIX_YM ")
					.append("             ,CH0021_SUB.SAIKEN_NO ")
					.append("             ,CH0021_SUB.AMNT ")
					.append("         FROM ")
					.append("             CH_T_SAIKEN_UCWK CH0021_SUB ")
					.append("             INNER JOIN ")
					.append("                 ( ")
					.append("                   SELECT ")
					.append("                        CH0401_GENE.SYS_CD ")
					.append("                        ,CH0401_GENE.WORK_KINO_SKBT_CD ")
					.append("                        ,CH0401_GENE.CHSHT_CHG_CD ")
					.append("                        ,CH0401_GENE.PRC_GRP_CD ")
					.append("                        ,CH0401_GENE.PCRS_CD ")
					.append("                        ,CH0401_GENE.PRC_SVC_CD ")
					.append("                        ,CH0401_GENE.PRC_KMK_CD ")
					.append("                   FROM ")
					.append("                        CH_M_PRC_KMK_CS_CHGE CH0401_GENE ")
					.append("                   WHERE ")
					.append("                        CH0401_GENE.SYS_CD                       = 'CH' ")
					.append("                        AND CH0401_GENE.WORK_KINO_SKBT_CD        = 'MISH_AMNT' ")
					.append("                        AND CH0401_GENE.CHSHT_CHG_CD             = '1' ")
					.append("                        AND CH0401_GENE.RSV_APLY_YMD            <= ?  ")
					.append("                        AND CH0401_GENE.PRC_KMK_CS_CHGE_TSTAYMD <= ?  ")
					.append("                        AND CH0401_GENE.PRC_KMK_CS_CHGE_TENDYMD >= ?  ")
					.append("                        AND CH0401_GENE.MK_FLG                   = '0'  ")
					.append("                   GROUP BY ")
					.append("                        CH0401_GENE.SYS_CD ")
					.append("                        ,CH0401_GENE.WORK_KINO_SKBT_CD ")
					.append("                        ,CH0401_GENE.CHSHT_CHG_CD ")
					.append("                        ,CH0401_GENE.PRC_GRP_CD ")
					.append("                        ,CH0401_GENE.PCRS_CD ")
					.append("                        ,CH0401_GENE.PRC_SVC_CD ")
					.append("                        ,CH0401_GENE.PRC_KMK_CD ")
					.append("                 ) CH0401 ")
					.append("             ON  ")
					.append("                 CH0021_SUB.PRC_GRP_CD     = CH0401.PRC_GRP_CD ")
					.append("                 AND CH0021_SUB.PCRS_CD    = CH0401.PCRS_CD ")
					.append("                 AND CH0021_SUB.PRC_SVC_CD = CH0401.PRC_SVC_CD ")
					.append("                 AND CH0021_SUB.PRC_KMK_CD = CH0401.PRC_KMK_CD ")
					.append("         WHERE ")
					.append("             CH0021_SUB.SAIKEN_FIX_YM <= ?  ")
					.append("             AND CH0021_SUB.MK_FLG    = '0' ")
					.append("         ) CH0021 ")
					.append("         ON  ")
					.append("             CH0011.SAIKEN_NO = CH0021.SAIKEN_NO ")
					.append("         AND CH0011.SAIKEN_YM = CH0021.SAIKEN_FIX_YM ")
 					.append(" WHERE ")
					.append("     CH0011.SEIKY_KEI_NO      = ?  ")
					.append("     AND CH0011.SAIKEN_STAT  IN ('020', '060', '080') ")
					.append("     AND CH0011.MK_FLG        = '0' ");
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 1, opeDate);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, opeDate);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, opeDate);
			// パラメータの設定(請求年月（2ヶ月前）を指定)
			CAANJDBCUtil.setParam(pstmt, 4, seikyYm_03);
			// パラメータの設定(請求契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 5, seikyKeiNo);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 未収額合計を返却する
			if (rsltQuery.next())
			{
				amnt = rsltQuery.getLong("AMNT");
			}
			
			if (amnt > 0)
			{
				return false;
			}
			else 
			{
				return true;
			}

		} catch(SQLException e) {
			inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * <p>
	 * 督促ステータスを判定する
	 * </p>
	 *  @param inMsg    入力値の格納されたCBSMsg <br>
	 *  @param inContext Agentから渡されたAgentDispatchContext
	 *  @param opeDate 運用日付
	 *  @param seikyKeiNo 請求契約番号
	 *  @return 判定結果　true：督促なし　false：督促あり
	*/
	public boolean chkTokusoku(CAANMsg inMsg,AgentDispatchContext inContext, String opeDate, String seikyKeiNo){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;

		long lDataCnt = 0L;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0231ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  COUNT(*) AS CNT_CHEK  ")
					.append(" FROM ")
					.append("     CH_T_TOKUSOKU CH0231 ")
					.append(" WHERE ")
					.append("     CH0231.SEIKY_KEI_NO     = ?  ")
					.append(" AND CH0231.TOKUSOKU_STAYMD <= ?  ")
					.append(" AND CH0231.TOKUSOKU_ENDYMD  > ?  ")
					.append(" AND CH0231.TOKUSOKU_STAT   != '00'  ")
					.append(" AND CH0231.MK_FLG           = '0' ");
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(請求契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, seikyKeiNo);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 2, opeDate);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, opeDate);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			if (rsltQuery.next())
			{
				lDataCnt = rsltQuery.getLong("CNT_CHEK");
			}

			// 督促ステータスを判定する
			if (lDataCnt > 0)
			{
				return false;
			}
			else
			{
				return true;
			}

		} catch(SQLException e) {
			inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * <p>
	 * 請求書払いを判定する
	 * </p>
	 *  @param inMsg    入力値の格納されたCBSMsg <br>
	 *  @param inContext Agentから渡されたAgentDispatchContext
	 *  @param opeDate 運用日付
	 *  @param seikyKeiNo 請求契約番号
	 *  @param seikyYm_04 請求年月（1ヶ月前）
	 *  @return 判定結果　true：請求書払いでない　false：請求書払い
	*/
	public boolean chkSeikysho(CAANMsg inMsg,AgentDispatchContext inContext, String opeDate, String seikyKeiNo, String seikyYm_04){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;

		long lDataCnt = 0L;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0051ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  COUNT(*) AS CNT_CHEK   ")
					.append(" FROM CH_T_SEIKY CH0051 ")
					.append(" WHERE CH0051.SEIKY_KEI_NO = ?  ")
					.append(" AND   CH0051.SEIKY_YM = ?  ")
					.append(" AND   CH0051.SEIKY_STAT = '020' ")
					.append(" AND   CH0051.SEIKY_SBT_CD = '0' ")
					.append(" AND   CH0051.SEIKY_WAY_CD = '1' ")
					.append(" AND   CH0051.MK_FLG = '0' ");
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(請求契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, seikyKeiNo);
			// パラメータの設定(請求年月（1ヶ月前）を指定)
			CAANJDBCUtil.setParam(pstmt, 2, seikyYm_04);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			if (rsltQuery.next())
			{
				lDataCnt = rsltQuery.getLong("CNT_CHEK");
			}

			// 請求方法コードを判定する
			if (lDataCnt > 0)
			{
				return false;
			}
			else
			{
				return true;
			}

		} catch(SQLException e) {
			inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECH0011B015CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
}
