/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK3401B010TPDA
*	ソースファイル名：JSYejbEKK3401B010TPDA.java
*	作成者			：EK954045
*	日付			：2022年12月15日
*＜機能概要＞
*	支払方法変更受付情報一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	新規作成  2022/12/15  FJ)西窪     ANK-4329-00-00_クレジットカード認証時の3Dセキュア対応
*	v64.00.00 2023/01/26  FJ)西窪	【ANK-4348-00-00】mineo譲渡後支払方法変更対応
*	v71.00.00 2024/08/23  FJ)謝		【#84913】KKW22701　支払方法変更一覧画面への画面遷移が遅い
********************************************************************************/

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 eo.ejb.cbs.cbsmsg.EKK3401B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3401B010CBSMsg1List;
import eo.ejb.cbm.entity.KK3401ETMsg;
import eo.ejb.common.JKKModelCommon;

/**
*
*  テンプレートDBアクセス部品　EKK3401B010_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKK3401B010TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEKK3401B010TPDA()	{
	}
	
	/**
	*   EKK3401B010_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt1 = null;	// 一覧照会結果
		
		// リザルトセット
		ResultSet rsltQuery1 = null;		// 一覧照会結果
		
		int iTotalSearchNum = 0;			// 総検索数
		int iTotalPageNum = 0;				// 総ページ数
		int iDisplayNum = 0;				// 表示件数
		int iMaxSearchNum = 0;				// 最大検索件数
		int iDisplayPageNum = 0;			// 表示ページ番号
		int iArrayCopyStart = 0;			// 取得範囲先頭
		int iArrayCopyCount = 0;			// 取得件数
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK3401ETMsg.getTableName());
			
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  ")
			.append(" KK3401.CRECARD_SHOSA_MSKM_DAY,  ")
			.append(" KK3401.PAYWAYCHUK_NO,  ")
			.append(" KK3401.CRECARD_MSKM_SBT_CD, ")
			.append(" (SELECT  ")
			.append("     CD00.CD_DIV_NM  ")
			.append(" FROM  ")
			.append("     ZM_M_CD_NM_KANRI CD00  ")
			.append(" WHERE  ")
			.append("     CD00.CD_SBT_CD = 'CD01800'  AND  ")
			.append("     CD00.CD_DIV = KK3401.CRECARD_MSKM_SBT_CD  AND  ")
			.append("     CD00.CD_TSTAYMD <= ?  AND  ")
			.append("     CD00.CD_TENDYMD >= ?  AND  ")
			.append("     CD00.MK_FLG = '0'  ")
			.append("  ) CRECARD_MSKM_SBT_NM,  ")
			.append(" KK3401.CRECARD_SHOSA_STAT, ")
			.append(" (SELECT  ")
			.append("     CD00.CD_DIV_NM  ")
			.append(" FROM  ")
			.append("     ZM_M_CD_NM_KANRI CD00  ")
			.append(" WHERE  ")
			.append("     CD00.CD_SBT_CD = 'CD01799'  AND  ")
			.append("     CD00.CD_DIV = KK3401.CRECARD_SHOSA_STAT  AND  ")
			.append("     CD00.CD_TSTAYMD <= ?  AND  ")
			.append("     CD00.CD_TENDYMD >= ?  AND  ")
			.append("     CD00.MK_FLG = '0'  ")
			.append("  ) CRECARD_SHOSA_STAT_NM,  ")
			.append(" KK3401.EOID, ")
			.append(" KK3401.SEIKY_KEI_NO, ")
			.append(" KK3401.SVC_KEI_NO , ")
			.append(" CK0011.CUST_NM, ")
			.append(" CK0011.CUST_KANA, ")
			.append(" KK3401.CHK_JTN_CUST_NM, ")
			.append(" KK3401.CHK_JTN_CUST_KANA, ")
			.append(" KK3401.CRECARD_NM_ROMAJI, ")
			.append(" KK3401.CRDT_ISSUER_DIV, ")
			.append(" KK3401.CARD_MEIGIN_CKRLT_CD, ")
			.append(" KK0081.SVC_KEI_STAT, ")
			.append(" CK0011.SYSID, ")
            .append(" (SELECT MAX(KK0491_02.UPD_DTM)  ")
            .append("   FROM   KK_T_SEIKY_KEI KK0491_02  ")
			// ANK-4348-00-00 MOD START
            //.append("   WHERE  KK0491_02.SEIKY_KEI_NO = KK0491.SEIKY_KEI_NO) UPD_DTM  ")
            .append("   WHERE  KK0491_02.SEIKY_KEI_NO = KK0491.SEIKY_KEI_NO) UPD_DTM,  ")
            .append(" (SELECT MAX(KK3401_02.UPD_DTM)  ")
            .append("   FROM   KK_T_PAYWAYCHUK_INFO KK3401_02  ")
            .append("   WHERE  KK3401_02.PAYWAYCHUK_NO = KK3401.PAYWAYCHUK_NO) UPD_DTM_PAYWAY  ")
            // ANK-4348-00-00 MOD END
			.append(" FROM KK_T_PAYWAYCHUK_INFO KK3401  ")
			.append("     INNER JOIN KK_T_SVC_KEI KK0081 ")
			.append("         ON  KK3401.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
			.append("     INNER JOIN CK_T_CUST CK0011 ")
			.append("         ON  KK0081.SYSID = CK0011.SYSID ")
			.append("     INNER JOIN KK_T_SEIKY_KEI KK0491 ")
			.append("         ON  KK3401.SEIKY_KEI_NO = KK0491.SEIKY_KEI_NO ")
			.append("     WHERE  ")
// #84913 MOD START
//			.append("     (KK3401.PAYWAYCHUK_NO, KK3401.GENE_ADD_DTM) =  ")
			.append("     KK3401.GENE_ADD_DTM =  ")
// #84913 MOD END
			.append("     (SELECT  ")
// #84913 MOD START
//			.append("       KK3401_GENE.PAYWAYCHUK_NO, MAX(KK3401_GENE.GENE_ADD_DTM) AS KK3401_MAX ")
			.append("       MAX(KK3401_GENE.GENE_ADD_DTM) AS KK3401_MAX ")
// #84913 MOD END
			.append("      FROM  ")
			.append("       KK_T_PAYWAYCHUK_INFO KK3401_GENE  ")
			.append("      WHERE  ")
			.append("       KK3401_GENE.PAYWAYCHUK_NO = KK3401.PAYWAYCHUK_NO AND ")
			.append("       KK3401_GENE.MK_FLG = '0' ")
// #84913 DEL START
//			.append("       GROUP BY KK3401_GENE.PAYWAYCHUK_NO ")
// #84913 DEL END
			.append("      ) ")
			.append("     AND (KK0081.SVC_KEI_NO, KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) = ")
			.append("         ( ")
			.append("             SELECT ")
			.append("                 KK0081_GENE.SVC_KEI_NO, MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ")
			.append("             FROM ")
			.append("                 KK_T_SVC_KEI KK0081_GENE ")
			.append("             WHERE  ")
			.append("                 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 ")
			.append("         ) ")
			.append("     AND (KK0491.SEIKY_KEI_NO, KK0491.RSV_APLY_YMD || KK0491.GENE_ADD_DTM) = ")
			.append("         ( ")
			.append("             SELECT ")
// #84913 MOD START
//			.append("                 KK0491.SEIKY_KEI_NO, MAX(KK0491_GENE.RSV_APLY_YMD || KK0491_GENE.GENE_ADD_DTM) AS KK0491_MAX ")
			.append("                 KK0491_GENE.SEIKY_KEI_NO, MAX(KK0491_GENE.RSV_APLY_YMD || KK0491_GENE.GENE_ADD_DTM) AS KK0491_MAX ")
// #84913 MOD END
			.append("             FROM ")
			.append("                 KK_T_SEIKY_KEI KK0491_GENE ")
			.append("             WHERE ")
			.append("                 KK0491_GENE.SEIKY_KEI_NO = KK0491.SEIKY_KEI_NO ")
			.append("                 AND KK0491_GENE.RSV_APLY_YMD <= ? ")
			.append("                 AND KK0491_GENE.RSV_APLY_CD = '2' ")
			.append("                 AND KK0491_GENE.MK_FLG = '0' ")
			.append("                 GROUP BY KK0491_GENE.SEIKY_KEI_NO ")
			.append("     ) ")
			.append("     AND (CK0011.SYSID, CK0011.RSV_APLY_YMD || CK0011.GENE_ADD_DTM) = ")
			.append("         ( ")
			.append("             SELECT ")
			.append("                 CK0011_GENE.SYSID, MAX(CK0011_GENE.RSV_APLY_YMD || CK0011_GENE.GENE_ADD_DTM) AS CK0011_MAX ")
			.append("             FROM ")
			.append("                 CK_T_CUST CK0011_GENE ")
			.append("             WHERE ")
			.append("                 CK0011_GENE.SYSID = CK0011.SYSID ")
			.append("                 AND CK0011_GENE.RSV_APLY_YMD <= ? ")
			.append("                 AND CK0011_GENE.RSV_APLY_CD = '2' ")
			.append("                 AND CK0011_GENE.MK_FLG = '0' ")
			.append("                 GROUP BY CK0011_GENE.SYSID ")
			.append("         ) ")
			.append("  ");
			
			
			// ＫＥＹ＿クレジットカード照査申込日ＦＲＯＭ
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_MSKM_DAY_FROM) != null) 
			{
				sql_Buff.append("     AND   KK3401.CRECARD_SHOSA_MSKM_DAY >= ? ");
			}
			// ＫＥＹ＿クレジットカード照査申込日ＴＯ
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_MSKM_DAY_TO) != null) 
			{
				sql_Buff.append("     AND   KK3401.CRECARD_SHOSA_MSKM_DAY <= ? ");
			}
			// ＫＥＹ＿クレジットカード照査ステータス
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_STAT) != null)
			{
				String status = (String) inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_STAT);
				// ＫＥＹ＿クレジットカード照査ステータスをカンマ区切りで分割する
				String[] statusSplit = status.split(",");
				// 分割後の件数を取得
				int statusCount = statusSplit.length;					
				// クレジットカード照査ステータスのIN句生成
				sql_Buff.append(" AND   KK3401.CRECARD_SHOSA_STAT IN (");
				for (int i = 0 ; i < statusCount ; i++)
				{
					
					if (i == 0)
					{
						// 1件目はカンマ不要
						sql_Buff.append("'" + statusSplit[i] + "'");
					}
					else
					{
						// 2件目以降は頭にカンマを打つ
						sql_Buff.append(",'" + statusSplit[i] + "'");
					}
				}
				sql_Buff.append(")");
			}
			// ＫＥＹ＿ＥＯＩＤ
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_EOID) != null) 
			{
				sql_Buff.append("     AND   KK3401.EOID = ? ");
			}
			// ＫＥＹ＿サービス契約番号
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_SVC_KEI_NO) != null) 
			{
				sql_Buff.append("     AND   KK3401.SVC_KEI_NO = ? ");
			}
			// ＫＥＹ＿クレジットカード申込種別コード
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_MSKM_SBT_CD) != null) 
			{
				sql_Buff.append("     AND   KK3401.CRECARD_MSKM_SBT_CD = ? ");
			}
			// ＫＥＹ＿請求契約番号
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_SEIKY_KEI_NO) != null) 
			{
				sql_Buff.append("     AND   KK3401.SEIKY_KEI_NO = ? ");
			}

			
			// ※ソート条件は後続で設定する。
			
			if ( "1".equals( inMsg.getObject(EKK3401B010CBSMsg.FUNC_CODE).toString() ) )
			{
				// 照会前に照会結果件数確認する
				checkSerchCnt(inMsg, inContext, con1, sql_Buff);
				
				// パラメータの設定
				// パラメータの最大検索件数がnullでない場合、最大検索件数の設定
				if (!inMsg.isNull(EKK3401B010CBSMsg.MAX_SEARCH_NUM))
				{
					iMaxSearchNum = Integer.parseInt(inMsg.getString(EKK3401B010CBSMsg.MAX_SEARCH_NUM));
				}
				// パラメータの表示件数がnullでない場合、表示件数の設定
				if (!inMsg.isNull(EKK3401B010CBSMsg.DISPLAY_NUM))
				{
					iDisplayNum = Integer.parseInt(inMsg.getString(EKK3401B010CBSMsg.DISPLAY_NUM));
				}
				// パラメータの表示ページ番号がnullでない場合、表示ページ番号の設定
				if (!inMsg.isNull(EKK3401B010CBSMsg.DISPLAY_PAGE_NUM))
				{
					iDisplayPageNum = Integer.parseInt(inMsg.getString(EKK3401B010CBSMsg.DISPLAY_PAGE_NUM));
				}
				
				// =====総検索件数と総ページ数の設定=====
				// 総検索件数の設定
				iTotalSearchNum = Integer.parseInt(inMsg.getString(EKK3401B010CBSMsg.TOTAL_SEARCH_NUM));
				// 総ページ数の設定
				// 表示件数が0の場合
				if (0 == iDisplayNum) 
				{
					iTotalPageNum = 1;
				}
				// 検索件数/表示件数の余りがない場合
				else if (0 == iTotalSearchNum % iDisplayNum)
				{
					iTotalPageNum = iTotalSearchNum / iDisplayNum;
				}
				else
				{
					iTotalPageNum = iTotalSearchNum / iDisplayNum + 1;
				}
				
				inMsg.set(EKK3401B010CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(iTotalSearchNum));
				inMsg.set(EKK3401B010CBSMsg.TOTAL_PAGE_NUM, String.valueOf(iTotalPageNum));
				
				// =====検索エラーの設定=====
				// 総検索件数が0の場合
				if(0 == iTotalSearchNum)
				{
					inMsg.set(EKK3401B010CBSMsg.SEARCH_ERR_FLG , "1");
					return;
				}
				// 総検索件数が最大検索件数より大きい場合(最大検索件数超え)
				else if(0 != iMaxSearchNum && iTotalSearchNum > iMaxSearchNum)
				{
					inMsg.set(EKK3401B010CBSMsg.SEARCH_ERR_FLG , "2");
					return;
				}
				// 表示ページに該当するデータがない場合
				else if(iTotalPageNum < iDisplayPageNum)
				{
					inMsg.set(EKK3401B010CBSMsg.SEARCH_ERR_FLG , "3");
					return;
				}
			}
			
			// ソート条件を設定
			setOrderBy(inMsg, sql_Buff);
			
			//prepareStatementにSQL文をセット
			pstmt1 = con1.prepareStatement(sql_Buff.toString());
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			setParam(pstmt1, inMsg);
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// ResultSetの取得
			rsltQuery1 = pstmt1.executeQuery();
			
			// EKK3401B010CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EKK3401B010CBSMsg1List.CRECARD_SHOSA_MSKM_DAY
					, EKK3401B010CBSMsg1List.PAYWAYCHUK_NO
					, EKK3401B010CBSMsg1List.CRECARD_MSKM_SBT_CD
					, EKK3401B010CBSMsg1List.CRECARD_MSKM_SBT_NM
					, EKK3401B010CBSMsg1List.CRECARD_SHOSA_STAT
					, EKK3401B010CBSMsg1List.CRECARD_SHOSA_STAT_NM
					, EKK3401B010CBSMsg1List.EOID
					, EKK3401B010CBSMsg1List.SEIKY_KEI_NO
					, EKK3401B010CBSMsg1List.SVC_KEI_NO
					, EKK3401B010CBSMsg1List.CUST_NM
					, EKK3401B010CBSMsg1List.CUST_KANA
					, EKK3401B010CBSMsg1List.CHK_JTN_CUST_NM
					, EKK3401B010CBSMsg1List.CHK_JTN_CUST_KANA
					, EKK3401B010CBSMsg1List.CRECARD_NM_ROMAJI
					, EKK3401B010CBSMsg1List.CRDT_ISSUER_DIV
					, EKK3401B010CBSMsg1List.CARD_MEIGIN_CKRLT_CD
					, EKK3401B010CBSMsg1List.SVC_KEI_STAT
					, EKK3401B010CBSMsg1List.SYSID
					, EKK3401B010CBSMsg1List.UPD_DTM
					, EKK3401B010CBSMsg1List.UPD_DTM_PAYWAY
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery1,msgKeyList1,"eo.ejb.cbs.cbsmsg.EKK3401B010CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK3401B010CBSMsg1List", outMsg1);
			
			if ( "1".equals( inMsg.getObject(EKK3401B010CBSMsg.FUNC_CODE).toString() ) )
			{
				// ページング関連処理
				CAANMsg[] outMsg2 = null;
				
				// 対象データの取得
				if(null == inMsg.getString(EKK3401B010CBSMsg.SEARCH_ERR_FLG))
				{
					// 取得範囲の設定
					// 取得範囲先頭の設定
					iArrayCopyStart = iDisplayNum * (iDisplayPageNum - 1);
					// 取得範囲末尾の設定
					// 表示件数が指定されていない場合
					if (0 == iDisplayNum)
					{
						// 取得件数に総検索件数を設定
						iArrayCopyCount = iTotalSearchNum;
					}
					// 表示ページ数が最終ページかつ総検索件数/表示件数の余りがある場合
					else if(iTotalPageNum == iDisplayPageNum && 0 < iTotalSearchNum % iDisplayNum)
					{
						// 取得件数に総検索数/表示件数の余りを設定
						iArrayCopyCount = iTotalSearchNum % iDisplayNum;
					}
					// 表示ページ数が最終ページでないまたは総検索件数/表示件数の余りがない場合
					else
					{
						// 取得件数に総検索数/表示件数を設定
						iArrayCopyCount = iDisplayNum;
					}
					
					// ページング範囲のデータを取得
					outMsg2 = new CAANMsg[iArrayCopyCount];
					System.arraycopy(outMsg1, iArrayCopyStart, outMsg2, 0, iArrayCopyCount);
					
					// inMsg(CBSMsg)に取得した明細を上書きしてセットする
					inMsg.set("EKK3401B010CBSMsg1List", outMsg2);
				}
			}
		} catch(SQLException e) {
			inMsg.set(EKK3401B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery1 != null){
					rsltQuery1.close();
				}
				if(pstmt1 != null){
					pstmt1.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(EKK3401B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * ORDER BY句の追加設定
	 * @param inMsg 入力値の格納されたCBSMsg
	 * @param sql SQL文
	 */
	private void setOrderBy(CAANMsg inMsg, StringBuffer sql)
	{
		sql.append(" ORDER BY ")
		.append(" KK3401.CRECARD_SHOSA_MSKM_DAY ASC, ")
		.append(" KK3401.CRECARD_MSKM_SBT_CD ASC, ")
		.append(" KK3401.CRECARD_SHOSA_STAT ASC, ")
		.append(" KK3401.EOID ASC, ")
		.append(" KK3401.SEIKY_KEI_NO ASC, ")
		.append(" KK3401.SVC_KEI_NO ASC ");
		
	}

	/**
	 * 照会結果件数を取得します。
	 * 
	 * @param inMsg
	 * @param inContext
	 * @param con1 
	 * @param sql_Buff
	 */
	private void checkSerchCnt(CAANMsg inMsg, AgentDispatchContext inContext, Connection con1, StringBuffer sql_Buff)
	{
		
		PreparedStatement pstmtCnt = null;	// 一覧照会件数
		ResultSet rsltQueryCnt = null;		// 一覧照会件数
		
		try{
			// SQL文_基本部1 で作成したSQLをベースに、照会結果件数を取得するSQLを作成
			StringBuffer sql_Buff_cnt = new StringBuffer();
			sql_Buff_cnt.append("SELECT COUNT(*) AS CNT FROM (")
						.append(sql_Buff.toString())
						.append(") TBL_CNT ");
			
			// ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff_cnt);
			// prepareStatementにSQL文をセット
			pstmtCnt = con1.prepareStatement(sql_Buff_cnt.toString());
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			setParam(pstmtCnt, inMsg);
			
			// ResultSetの取得
			rsltQueryCnt = pstmtCnt.executeQuery();
			rsltQueryCnt.next();
			
			String[] msgKeyListForPaging = {EKK3401B010CBSMsg.TOTAL_SEARCH_NUM};
			mapMessage(rsltQueryCnt, msgKeyListForPaging, inMsg);
			
		} catch(SQLException e) {
			inMsg.set(EKK3401B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQueryCnt != null){
					rsltQueryCnt.close();
				}
				if(pstmtCnt != null){
					pstmtCnt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(EKK3401B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}

	/**
	 * パラメータの設定を行います。
	 * <br/>
	 * @param pstmt       プリペアステートメント
	 * @param inMsg       入力値の格納されたCBSMsg
	 * @return 最後に設定したパラメータの番号
	 * @throws SQLException 例外
	 */
	private int setParam(PreparedStatement pstmt, CAANMsg inMsg) throws SQLException
	{
		int cnt = 1;
		
		// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
		if ( "1".equals( inMsg.getString(EKK3401B010CBSMsg.FUNC_CODE) ) )
		{
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			CAANJDBCUtil.setParam(pstmt, cnt++, JKKModelCommon.getOpeDate(inMsg));
			
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_MSKM_DAY_FROM) != null) 
			{
				// パラメータの設定(ＫＥＹ＿クレジットカード照査申込日ＦＲＯＭ)
				CAANJDBCUtil.setParam(pstmt, cnt++, inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_MSKM_DAY_FROM));
			}
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_MSKM_DAY_TO) != null) 
			{
				// パラメータの設定(ＫＥＹ＿クレジットカード照査申込日ＴＯ)
				CAANJDBCUtil.setParam(pstmt, cnt++, inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_SHOSA_MSKM_DAY_TO));
			}
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_EOID) != null) 
			{
				// パラメータの設定(ＫＥＹ＿ＥＯＩＤ)
				CAANJDBCUtil.setParam(pstmt, cnt++, inMsg.getObject(EKK3401B010CBSMsg.KEY_EOID));
			}
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_SVC_KEI_NO) != null) 
			{
				// パラメータの設定(ＫＥＹ＿サービス契約番号)
				CAANJDBCUtil.setParam(pstmt, cnt++, inMsg.getObject(EKK3401B010CBSMsg.KEY_SVC_KEI_NO));
			}
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_MSKM_SBT_CD) != null) 
			{
				// パラメータの設定(ＫＥＹ＿クレジットカード申込種別コード)
				CAANJDBCUtil.setParam(pstmt, cnt++, inMsg.getObject(EKK3401B010CBSMsg.KEY_CRECARD_MSKM_SBT_CD));
			}
			if (inMsg.getObject(EKK3401B010CBSMsg.KEY_SEIKY_KEI_NO) != null) 
			{
				// パラメータの設定(ＫＥＹ＿請求契約番号)
				CAANJDBCUtil.setParam(pstmt, cnt++, inMsg.getObject(EKK3401B010CBSMsg.KEY_SEIKY_KEI_NO));
			}
		}
		
		return cnt;
	}
}
