/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK3131B070TPDA
*	ソースファイル名：JSYejbEKK3131B070TPDA.java
*	作成者			：EK967885
*	日付			：2023年08月07日
*＜機能概要＞
*	標準工事費総額通知書情報一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	v67.00.00	2023/08/10	FJ田中		IT1-2023-0000030 障害対応
*	v67.00.01	2023/08/17	FJ田中		IT1-2023-0000038 障害対応
*
********************************************************************************/

package eo.ejb.cbs.sqlf;

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

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

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbm.entity.KK3131ETMsg;
import eo.ejb.cbs.cbsmsg.EKK3131B070CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3131B070CBSMsg1List;
import eo.ejb.common.JTUModelCommon;

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

		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK3131ETMsg.getTableName());
			
			/**
			 * SQL文作成
			 */
			// 判別：サービス契約
			StringBuffer sqlCheck1Select = new StringBuffer();
			StringBuffer sqlCheck1From = new StringBuffer();
			
			sqlCheck1Select.append("SELECT ")
				.append("    KK0081.PRC_GRP_CD ");
			sqlCheck1From.append("FROM ")
				.append("    KK_T_SVC_KEI KK0081 ")
				.append("WHERE ")
				.append("  KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = ")
				.append("    ( SELECT ")
				// IT1-2023-0000038 MOD START
//				.append("      MAX(KK0081.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ")
				.append("      MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ")
				// IT1-2023-0000038 MOD END
				.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.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' ) ");

			//件数取得SQL
			StringBuffer sqlCheck1Cnt = new StringBuffer();
			sqlCheck1Cnt.append(" SELECT ")
				.append("  COUNT(*) AS CNT ")
				.append(sqlCheck1From);
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlCheck1Cnt.toString());
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));
			CAANJDBCUtil.setParam(pstmt, 2, JTUModelCommon.getOpeDate(inMsg, null));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3131B070CBSMsgの明細にセットする項目
			String[] msgKeyListCheck1Cnt = {
					EKK3131B070CBSMsg.TOTAL_SEARCH_NUM
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListCheck1Cnt, inMsg);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}
			
			if ((Integer.parseInt(inMsg.getString(EKK3131B070CBSMsg.TOTAL_SEARCH_NUM))) > 0)
			{
				// 検索件数が1件以上の場合、データを取得
				StringBuffer sqlCheck1 = new StringBuffer();
				sqlCheck1.append(sqlCheck1Select)
					.append(sqlCheck1From);
			
				//prepareStatementにSQL文をセット
				pstmt = con1.prepareStatement(sqlCheck1.toString());
				
				//ログ出力(SQL文の出力)
				JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlCheck1);
				
				// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
				// パラメータの設定(サービス契約番号、運用日付を指定)
				CAANJDBCUtil.setParam(pstmt, 1, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));
				CAANJDBCUtil.setParam(pstmt, 2, JTUModelCommon.getOpeDate(inMsg, null));

				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3131B070CBSMsgの明細にセットする項目
				String[] msgKeyListCheck1 = {
						EKK3131B070CBSMsg1List.PRC_GRP_CD
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListCheck1, inMsgList);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				
				if("10".equals(inMsgList.getString(EKK3131B070CBSMsg1List.PRC_GRP_CD))) 
				{
					// "10"(ｅｏ光電話) の場合、サービスタイプをチェック
					StringBuffer sqlCheck2 = new StringBuffer();
					sqlCheck2.append("SELECT ")
						.append("    KK0241.SVC_KEI_KAISEN_UCWK_NO ")
						.append("    ,KK0251.MANSION_BUKKEN_NO ")
						.append("    ,KK0861.MANSION_BUKKEN_CD ")
						.append("FROM ")
						.append("    KK_T_KAISEN_TG_SVKEI KK0241 ")
						.append("LEFT OUTER JOIN ")
						.append("    KK_T_SVKEI_KAISEN_UW KK0251 ")
						.append("    ON KK0251.SVC_KEI_KAISEN_UCWK_NO = KK0241.SVC_KEI_KAISEN_UCWK_NO ")
						.append("LEFT OUTER JOIN ")
						.append("    KK_T_MANSION_BUKKEN KK0861 ")
						.append("    ON KK0861.MANSION_BUKKEN_NO = KK0251.MANSION_BUKKEN_NO ")
						.append("    AND KK0861.MK_FLG = '0' ")
						.append("WHERE ")
						.append("    KK0241.SVC_KEI_NO = ? ")
						.append("    AND KK0241.MK_FLG = '0' ")
						.append("    AND KK0251.GENE_ADD_DTM = ")
						.append("    (   SELECT MAX(KK0251_GENE.GENE_ADD_DTM) AS MSKM_DTL_MAX ")
						.append("        FROM  KK_T_SVKEI_KAISEN_UW KK0251_GENE ")
						.append("        WHERE  KK0251_GENE.SVC_KEI_KAISEN_UCWK_NO = KK0251.SVC_KEI_KAISEN_UCWK_NO ")
						.append("        AND    KK0251_GENE.MK_FLG = '0') ");


					//prepareStatementにSQL文をセット
					pstmt = con1.prepareStatement(sqlCheck2.toString());
					
					//ログ出力(SQL文の出力)
					JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlCheck2);
					
					// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
					// パラメータの設定(サービス契約番号を指定)
					CAANJDBCUtil.setParam(pstmt, 1, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));

					/**
					 * SQL文実行
					 */
					// ResultSetの取得
					rsltQuery = pstmt.executeQuery();
					
					// EKK3131B070CBSMsgの明細にセットする項目
					String[] msgKeyListCheck2 = {
							EKK3131B070CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO,
							EKK3131B070CBSMsg1List.MANSION_BUKKEN_NO,
							EKK3131B070CBSMsg1List.MANSION_BUKKEN_CD
					};
					
					/**
					 * 結果取得
					 */
					rsltQuery.next();
					mapMessage(rsltQuery, msgKeyListCheck2, inMsgList);
					
					// 資源の解放
					if(rsltQuery != null)
					{
						rsltQuery.close();
					}
					if(pstmt != null)
					{
						pstmt.close();
					}

					if (inMsgList.getString(EKK3131B070CBSMsg1List.MANSION_BUKKEN_NO) != null && 
							!"002".equals(inMsgList.getString(EKK3131B070CBSMsg1List.MANSION_BUKKEN_CD)))
					{
						// ホームタイプ／メゾンタイプ以外は対象外
						inMsg.set(EKK3131B070CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
						return;
					}
				}
				else if(!"02".equals(inMsgList.getString(EKK3131B070CBSMsg1List.PRC_GRP_CD)) && 
						!"03".equals(inMsgList.getString(EKK3131B070CBSMsg1List.PRC_GRP_CD))) 
				{
					// "02","03","10"以外は対象外
					inMsg.set(EKK3131B070CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}
			}
			else
			{
				// サービス契約がない場合、エラーフラグに"3"を設定して処理終了
				inMsg.set(EKK3131B070CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
				return;
			}

			// 工事費割賦契約
			StringBuffer sqlKapCurrentSelect = new StringBuffer();
			StringBuffer sqlKapCurrentFrom = new StringBuffer();
			StringBuffer sqlKapCurrentWhere = new StringBuffer();

			// SQL文_基本部1
			sqlKapCurrentSelect.append(" SELECT  ")
					.append("     KK3131.KOJIHI_KAP_KEI_NO  ")
					.append("     , KK3131.GENE_ADD_DTM  ")
					.append("     , KK3131.FIRST_SEIKY_SVC_KEI_NO  ")
					.append("     , KK3131.KAP_KEI_CHRG_STAYMD  ")
					.append("     , KK3131.SVC_KEI_KAISEN_UCWK_NO  ")
					.append("     , KK3131.MSKM_DTL_NO  ")
		// IT1-2023-0000030 MOD START
//					.append("     , KK3131.KAP_PLAN_CD  ");
					.append("     , KK3131.KAP_PLAN_CD  ")
					.append("     , KK3131.KAP_KEI_STAT  ");
		// IT1-2023-0000030 MOD END
			sqlKapCurrentFrom.append(" FROM  ")
					.append("     KK_T_KAISEN_TG_SVKEI KK0241  ")
					.append(" INNER JOIN  ")
					.append("     KK_T_KOJIHI_KAP_KEI KK3131  ")
					.append("     ON KK0241.SVC_KEI_KAISEN_UCWK_NO = KK3131.SVC_KEI_KAISEN_UCWK_NO  ");
			// SQL文_個別部1
			if ( "1".equals( inMsg.getObject(EKK3131B070CBSMsg.FUNC_CODE).toString() ) ) {
				sqlKapCurrentWhere.append(" WHERE  ")
						.append("     ( ( KK0241.KAISEN_UCWK_USE_ENDYMD = TO_CHAR(TO_DATE( ? ,'YYYYMMDD') - 1, 'YYYYMMDD')  ")
						.append("         AND KK0241.UPD_UNYO_YMD = ? )  ")
						.append("       OR  ")
						.append("       ( KK0241.KAISEN_UCWK_USE_STAYMD <= ?  ")
						.append("         AND KK0241.KAISEN_UCWK_USE_ENDYMD >= ? ) )  ")
						.append("     AND KK0241.SVC_KEI_NO = ?  ")
						.append("     AND KK0241.MK_FLG = '0'  ")
		// IT1-2023-0000030 DEL START
//						.append("     AND KK3131.KAP_KEI_STAT <> '920'  ")
		// IT1-2023-0000030 DEL END
						.append("     AND KK3131.MK_FLG = '0'  ")
						.append("     AND KK3131.GENE_ADD_DTM =  ")
						.append("       (SELECT MAX(KK3131_01.GENE_ADD_DTM)  ")
						.append("         FROM KK_T_KOJIHI_KAP_KEI KK3131_01  ")
						.append("         WHERE KK3131_01.SVC_KEI_KAISEN_UCWK_NO = KK0241.SVC_KEI_KAISEN_UCWK_NO  ")
		// IT1-2023-0000030 DEL START
//						.append("           AND KK3131_01.KAP_KEI_STAT <> '920'  ")
		// IT1-2023-0000030 DEL END
						.append("           AND KK3131_01.MK_FLG = '0' )  ");
			}

			//件数取得SQL
			StringBuffer sqlCurrentCnt = new StringBuffer();
			sqlCurrentCnt.append(" SELECT ")
				.append("  COUNT(*) AS CNT ")
				.append(sqlKapCurrentFrom)
				.append(sqlKapCurrentWhere);
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlCurrentCnt.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlCurrentCnt);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(運用日付、サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, 2, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, 3, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, 4, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, 5, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3131B070CBSMsgの明細にセットする項目
			String[] msgKeyListCurrentCnt = {
					EKK3131B070CBSMsg.TOTAL_SEARCH_NUM
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListCurrentCnt, inMsg);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}
			
			if ((Integer.parseInt(inMsg.getString(EKK3131B070CBSMsg.TOTAL_SEARCH_NUM))) > 0)
			{
				// 検索件数が1件以上の場合、データを取得
				StringBuffer sqlKapCurrent = new StringBuffer();
				sqlKapCurrent.append(sqlKapCurrentSelect)
					.append(sqlKapCurrentFrom)
					.append(sqlKapCurrentWhere);
				
				//prepareStatementにSQL文をセット
				pstmt = con1.prepareStatement(sqlKapCurrent.toString());

				// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
				// パラメータの設定(運用日付、サービス契約番号を指定)
				CAANJDBCUtil.setParam(pstmt, 1, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, 2, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, 3, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, 4, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, 5, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));

				//ログ出力(SQL文の出力)
				JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlCurrentCnt);

				// IT1-2023-0000038 DEL START
//				// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
//				if ( "1".equals( inMsg.getString(EKK3131B070CBSMsg.FUNC_CODE) ) ) {
//					// パラメータの設定(ＫＥＹ＿サービス契約番号を指定)
//					CAANJDBCUtil.setParam(pstmt, 1, JTUModelCommon.getOpeDate(inMsg, null));
//					CAANJDBCUtil.setParam(pstmt, 2, JTUModelCommon.getOpeDate(inMsg, null));
//					CAANJDBCUtil.setParam(pstmt, 3, JTUModelCommon.getOpeDate(inMsg, null));
//					CAANJDBCUtil.setParam(pstmt, 4, JTUModelCommon.getOpeDate(inMsg, null));
//					CAANJDBCUtil.setParam(pstmt, 5, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));
//				}
				// IT1-2023-0000038 DEL END
				
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3131B070CBSMsgの明細にセットする項目
				String[] msgKeyList1 = {
						  EKK3131B070CBSMsg1List.KOJIHI_KAP_KEI_NO
						, EKK3131B070CBSMsg1List.GENE_ADD_DTM
						, EKK3131B070CBSMsg1List.FIRST_SEIKY_SVC_KEI_NO
						, EKK3131B070CBSMsg1List.KAP_KEI_CHRG_STAYMD
						, EKK3131B070CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO
						, EKK3131B070CBSMsg1List.MSKM_DTL_NO
						, EKK3131B070CBSMsg1List.KAP_PLAN_CD
		// IT1-2023-0000030 ADD START
						, EKK3131B070CBSMsg1List.KAP_KEI_STAT
		// IT1-2023-0000030 ADD END
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyList1, inMsgList);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				
		// IT1-2023-0000030 ADD START
				if ("920".equals(inMsgList.getObject(EKK3131B070CBSMsg1List.KAP_KEI_STAT)))
				{
					// 取得した工事費割賦契約がキャンセル済みの場合、エラーフラグに"3"を設定して処理終了
					inMsg.set(EKK3131B070CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}
		// IT1-2023-0000030 ADD END
			}
			else
			{
				StringBuffer sqlKapPastSelect = new StringBuffer();
				StringBuffer sqlKapPastFrom = new StringBuffer();
				StringBuffer sqlKapPastWhere = new StringBuffer();

				// 工事費割賦契約(過去)
				sqlKapPastSelect.append("SELECT ")
					.append("    KK3131.KOJIHI_KAP_KEI_NO ")
					.append("    , KK3131.GENE_ADD_DTM ")
					.append("    , KK3131.FIRST_SEIKY_SVC_KEI_NO ")
					.append("    , KK3131.KAP_KEI_CHRG_STAYMD ")
					.append("    , KK3131.SVC_KEI_KAISEN_UCWK_NO ")
					.append("    , KK3131.MSKM_DTL_NO ")
		// IT1-2023-0000030 MOD START
//					.append("    , KK3131.KAP_PLAN_CD ");
					.append("    , KK3131.KAP_PLAN_CD  ")
					.append("    , KK3131.KAP_KEI_STAT  ");
		// IT1-2023-0000030 MOD END
				sqlKapPastFrom.append("FROM ")
					.append("    KK_T_KAISEN_TG_SVKEI KK0241 ")
					.append("INNER JOIN KK_T_KOJIHI_KAP_KEI KK3131 ")
					.append("    ON KK0241.SVC_KEI_KAISEN_UCWK_NO = KK3131.SVC_KEI_KAISEN_UCWK_NO ");
				sqlKapPastWhere.append("WHERE ")
					.append("    KK0241.KAISEN_UCWK_USE_ENDYMD <= ? ")
					.append("    AND KK0241.SVC_KEI_NO = ? ")
					.append("    AND KK0241.MK_FLG = '0' ")
		// IT1-2023-0000030 DEL START
//					.append("    AND KK3131.KAP_KEI_STAT <> '920' ")
		// IT1-2023-0000030 DEL END
					.append("    AND KK3131.MK_FLG = '0' ")
					.append("    AND KK3131.GENE_ADD_DTM = ")
					.append("      (SELECT MAX(GENE_ADD_DTM) ")
					.append("        FROM KK_T_KOJIHI_KAP_KEI KK3131_01 ")
					.append("        WHERE KK3131_01.SVC_KEI_KAISEN_UCWK_NO = KK0241.SVC_KEI_KAISEN_UCWK_NO ")
		// IT1-2023-0000030 DEL START
//					.append("          AND KK3131_01.KAP_KEI_STAT <> '920' ")
		// IT1-2023-0000030 DEL END
					.append("          AND KK3131_01.MK_FLG = '0' ) ");


				//件数取得SQL
				StringBuffer sqlPastCnt = new StringBuffer();
				sqlPastCnt.append(" SELECT ")
					.append("  COUNT(*) AS CNT ")
					.append(sqlKapPastFrom)
					.append(sqlKapPastWhere);
				
				//prepareStatementにSQL文をセット
				pstmt = con1.prepareStatement(sqlPastCnt.toString());
				
				// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
				// パラメータの設定(運用日付、サービス契約番号を指定)
				CAANJDBCUtil.setParam(pstmt, 1, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, 2, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));
				
				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3131B070CBSMsgの明細にセットする項目
				String[] msgKeyListPastCnt = {
						EKK3131B070CBSMsg.TOTAL_SEARCH_NUM
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListPastCnt, inMsg);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if ((Integer.parseInt(inMsg.getString(EKK3131B070CBSMsg.TOTAL_SEARCH_NUM))) > 0)
				{
					// 検索件数が1件以上の場合、データを取得
					StringBuffer sqlKapPast = new StringBuffer();
					sqlKapPast.append(sqlKapPastSelect)
						.append(sqlKapPastFrom)
						.append(sqlKapPastWhere);
					
					//prepareStatementにSQL文をセット
					pstmt = con1.prepareStatement(sqlKapPast.toString());

					// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
					// パラメータの設定(運用日付、サービス契約番号を指定)
					CAANJDBCUtil.setParam(pstmt, 1, JTUModelCommon.getOpeDate(inMsg, null));
					CAANJDBCUtil.setParam(pstmt, 2, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));

					//ログ出力(SQL文の出力)
					JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlPastCnt);

					/**
					 * SQL文実行
					 */
					// ResultSetの取得
					rsltQuery = pstmt.executeQuery();
					
					// EKK3131B070CBSMsgの明細にセットする項目
					String[] msgKeyListPastList = {
							EKK3131B070CBSMsg1List.KOJIHI_KAP_KEI_NO,
							EKK3131B070CBSMsg1List.GENE_ADD_DTM,
							EKK3131B070CBSMsg1List.FIRST_SEIKY_SVC_KEI_NO,
							EKK3131B070CBSMsg1List.KAP_KEI_CHRG_STAYMD,
							EKK3131B070CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO,
							EKK3131B070CBSMsg1List.MSKM_DTL_NO,
		// IT1-2023-0000030 MOD START
//							EKK3131B070CBSMsg1List.KAP_PLAN_CD
							EKK3131B070CBSMsg1List.KAP_PLAN_CD,
							EKK3131B070CBSMsg1List.KAP_KEI_STAT
		// IT1-2023-0000030 MOD END
					};
					
					/**
					 * 結果取得
					 */
					rsltQuery.next();
					mapMessage(rsltQuery, msgKeyListPastList, inMsgList);
					
					// 資源の解放
					if(rsltQuery != null)
					{
						rsltQuery.close();
					}
					if(pstmt != null)
					{
						pstmt.close();
					}
					
		// IT1-2023-0000030 ADD START
					if ("920".equals(inMsgList.getObject(EKK3131B070CBSMsg1List.KAP_KEI_STAT)))
					{
						// 取得した工事費割賦契約がキャンセル済みの場合、エラーフラグに"3"を設定して処理終了
						inMsg.set(EKK3131B070CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
						return;
					}
		// IT1-2023-0000030 ADD END
				}
				else
				{
					// 工事費割賦契約がない場合、エラーフラグに"3"を設定して処理終了
					inMsg.set(EKK3131B070CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}
			}

			// 申込明細
			StringBuffer sqlMskm = new StringBuffer();
			sqlMskm.append("SELECT ")
				.append("    KK0021.MSKMSHO_DTL_NO ")
				.append("FROM ")
				.append("    KK_T_MSKM_DTL KK0021 ")
				.append("WHERE ")
				.append("    KK0021.MSKM_DTL_NO = ? ")
				.append("    AND KK0021.MK_FLG = '0' ")
				.append("    AND KK0021.GENE_ADD_DTM = ")
				.append("    (SELECT MAX(KK0021_01.GENE_ADD_DTM) ")
				.append("      FROM KK_T_MSKM_DTL KK0021_01 ")
				// IT1-2023-0000038 MOD START
//				.append("      WHERE KK0021_01.MSKM_DTL_NO = ? ")
				.append("      WHERE KK0021_01.MSKM_DTL_NO = KK0021.MSKM_DTL_NO ")
				// IT1-2023-0000038 MOD END
				.append("        AND KK0021_01.MK_FLG = '0') ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlMskm.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlMskm);
			
			// パラメータの設定(申込明細番号を指定)
			CAANJDBCUtil.setParam(pstmt, 1, inMsgList.getObject(EKK3131B070CBSMsg1List.MSKM_DTL_NO));
			// IT1-2023-0000038 DEL START
//			CAANJDBCUtil.setParam(pstmt, 2, inMsgList.getObject(EKK3131B070CBSMsg1List.MSKM_DTL_NO));
			// IT1-2023-0000038 DEL END

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3131B070CBSMsgの明細にセットする項目
			String[] msgKeyListMskmList = {
					EKK3131B070CBSMsg1List.MSKM_NO
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListMskmList, inMsgList);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}

			// 工事案件
			StringBuffer sqlKojiak = new StringBuffer();
			sqlKojiak.append("SELECT ")
				.append("    KU0011.KOJIAK_JSSI_YMD ")
				.append("FROM ")
				.append("    KK_T_SVC_KEI KK0081 ")
				.append("LEFT OUTER JOIN ")
				.append("    KU_T_MSKM_DTL_KOJIAK KU0091 ")
				.append("    ON KU0091.MSKM_DTL_NO = KK0081.MSKM_DTL_NO ")
				.append("    AND KU0091.MK_FLG = '0' ")
				.append("LEFT OUTER JOIN ")
				.append("    KU_T_KOJIAK KU0011 ")
				.append("    ON KU0011.KOJIAK_NO = KU0091.KOJIAK_NO ")
				.append("    AND KU0011.MK_FLG = '0' ")
				.append("WHERE ")
				.append("    KK0081.MK_FLG = '0' ")
				.append("    AND KK0081.SVC_KEI_NO = ? ")
				.append("      AND (KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) = ")
				.append("      (SELECT MIN(KK0081_01.RSV_APLY_YMD || KK0081_01.GENE_ADD_DTM) ")
				.append("        FROM KK_T_SVC_KEI KK0081_01 ")
				// IT1-2023-0000038 MOD START
//				.append("        WHERE KK0081_01.SVC_KEI_NO = ?) ")
				.append("        WHERE KK0081_01.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
				.append("          AND KK0081_01.RSV_APLY_CD = '2' ")
				.append("          AND KK0081_01.MK_FLG = '0' ) ")
				// IT1-2023-0000038 MOD END
				.append("      AND KU0091.MSKM_DTL_KOJIAK_TSTAYMD = ")
				.append("        (SELECT MAX(KU0091_01.MSKM_DTL_KOJIAK_TSTAYMD) ")
				.append("        FROM KU_T_MSKM_DTL_KOJIAK KU0091_01 ")
				// IT1-2023-0000038 MOD START
//				.append("        WHERE KU0091_01.MSKM_DTL_NO = KK0081.MSKM_DTL_NO) ");
				.append("        WHERE KU0091_01.MSKM_DTL_NO = KU0091.MSKM_DTL_NO ")
				.append("          AND KU0091_01.MK_FLG = '0' ) ");
				// IT1-2023-0000038 MOD END

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlKojiak.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlKojiak);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(サービス契約番号を指定)
			// IT1-2023-0000030 MOD START
//			CAANJDBCUtil.setParam(pstmt, 1, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));
//			CAANJDBCUtil.setParam(pstmt, 2, inMsg.getObject(EKK3131B070CBSMsg.KEY_SVC_KEI_NO));
			int iIndex = 1;

			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3131B070CBSMsg1List.FIRST_SEIKY_SVC_KEI_NO));
			// IT1-2023-0000038 DEL START
//			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3131B070CBSMsg1List.FIRST_SEIKY_SVC_KEI_NO));
			// IT1-2023-0000038 DEL END
			// IT1-2023-0000030 MOD END

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3131B070CBSMsgの明細にセットする項目
			String[] msgKeyListKojiakList = {
					EKK3131B070CBSMsg1List.KOJI_FIN_YMD
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListKojiakList, inMsgList);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}

			// 割賦プラン
			StringBuffer sqlKapPlan = new StringBuffer();
			sqlKapPlan.append("SELECT ")
				.append("    KK2521.KAP_PLAN_TTL_AMNT STDARD_KOJIHI_DTL_PRC ")
				.append("    , KK2521.KAP_PLAN_TTL_AMNT STDARD_KOJIHI_GK_PRC ")
				.append("    , KK2521.KAP_HAMBAI_FORM_CD ")
				.append("FROM ")
				.append("    KK_M_KAP_PLAN KK2521 ")
				.append("WHERE ")
				.append("    KK2521.KAP_PLAN_CD = ? ")
				// IT1-2023-0000038 ADD START
				.append("    AND KK2521.RSV_APLY_YMD || KK2521.GENE_ADD_DTM = ")
				.append("    ( SELECT MAX(KK2521_GENE.RSV_APLY_YMD || KK2521_GENE.GENE_ADD_DTM) AS KK2521_MAX ")
				.append("        FROM KK_M_KAP_PLAN KK2521_GENE ")
				.append("       WHERE KK2521_GENE.KAP_PLAN_CD = KK2521.KAP_PLAN_CD ")
				.append("         AND KK2521_GENE.RSV_APLY_YMD <= ? ")
				.append("         AND KK2521_GENE.MK_FLG = '0' ) ")
				// IT1-2023-0000038 ADD END
				.append("    AND KK2521.MK_FLG = '0' ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlKapPlan.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlKapPlan);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			// パラメータの設定(割賦プランコードを指定)
			// IT1-2023-0000038 MOD START
//			CAANJDBCUtil.setParam(pstmt, 1, inMsgList.getObject(EKK3131B070CBSMsg1List.KAP_PLAN_CD));
			iIndex = 1;

			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3131B070CBSMsg1List.KAP_PLAN_CD));
			CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
			// IT1-2023-0000038 MOD END

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3131B070CBSMsgの明細にセットする項目
			String[] msgKeyListKapPlanList = {
					EKK3131B070CBSMsg1List.STDARD_KOJIHI_DTL_PRC,
					EKK3131B070CBSMsg1List.STDARD_KOJIHI_GK_PRC,
					EKK3131B070CBSMsg1List.KAP_HAMBAI_FORM_CD
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListKapPlanList, inMsgList);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}

			// 税率
			if (inMsgList.getObject(EKK3131B070CBSMsg1List.KOJI_FIN_YMD) != null) {
				StringBuffer sqlTaxSelect = new StringBuffer();
				StringBuffer sqlTaxFrom = new StringBuffer();
				sqlTaxSelect.append("SELECT ")
					.append("    AC0271.TAX_RT ");
				sqlTaxFrom.append("FROM ")
					.append("    AC_M_TAX_RT AC0271 ")
					.append("WHERE ")
					.append("    AC0271.UZEI_SZEI_SKBT_CD = '1' ")
					.append("    AND AC0271.MK_FLG = '0' ")
					.append("    AND AC0271.TAX_RT_TSTAYMD = ")
					.append("    (SELECT MAX(AC0271_01.TAX_RT_TSTAYMD) ")
					.append("      FROM AC_M_TAX_RT AC0271_01 ")
					.append("      WHERE AC0271_01.UZEI_SZEI_SKBT_CD = '1' ")
					.append("        AND AC0271_01.TAX_RT_TSTAYMD <= ? ")
					.append("        AND AC0271_01.MK_FLG = '0') ");
				//件数取得SQL
				StringBuffer sqlTaxCnt = new StringBuffer();
				sqlTaxCnt.append(" SELECT ")
					.append("  COUNT(*) AS CNT ")
					.append(sqlTaxFrom);
				
				//prepareStatementにSQL文をセット
				pstmt = con1.prepareStatement(sqlTaxCnt.toString());
				
				// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
				// パラメータの設定(工事年月日を指定)
				CAANJDBCUtil.setParam(pstmt, 1, inMsgList.getObject(EKK3131B070CBSMsg1List.KOJI_FIN_YMD));
	
				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3131B070CBSMsgの明細にセットする項目
				String[] msgKeyListTaxCnt = {
						EKK3131B070CBSMsg.TOTAL_SEARCH_NUM
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListTaxCnt, inMsg);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				
				if ((Integer.parseInt(inMsg.getString(EKK3131B070CBSMsg.TOTAL_SEARCH_NUM))) > 0)
				{
					// 検索件数が1件以上の場合、データを取得
					StringBuffer sqlTax = new StringBuffer();
					sqlTax.append(sqlTaxSelect)
						.append(sqlTaxFrom);
	
					//prepareStatementにSQL文をセット
					pstmt = con1.prepareStatement(sqlTax.toString());
					
					//ログ出力(SQL文の出力)
					JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlTax);
					
					// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
					// パラメータの設定(工事完了年月日を指定)
					CAANJDBCUtil.setParam(pstmt, 1, inMsgList.getObject(EKK3131B070CBSMsg1List.KOJI_FIN_YMD));
		
					/**
					 * SQL文実行
					 */
					// ResultSetの取得
					rsltQuery = pstmt.executeQuery();
					
					// EKK3131B070CBSMsgの明細にセットする項目
					String[] msgKeyListTaxList = {
							EKK3131B070CBSMsg1List.STAX_GK_RT
					};
					
					/**
					 * 結果取得
					 */
					rsltQuery.next();
					mapMessage(rsltQuery, msgKeyListTaxList, inMsgList);
					
					// 資源の解放
					if(rsltQuery != null)
					{
						rsltQuery.close();
					}
					if(pstmt != null)
					{
						pstmt.close();
					}
					
					// 消費税合計額・金額
					if (inMsgList.getObject(EKK3131B070CBSMsg1List.STAX_GK_RT) != null && 
							inMsgList.getObject(EKK3131B070CBSMsg1List.STDARD_KOJIHI_GK_PRC) != null)
					{
						int stdardKojihiGkPrc = Integer.valueOf((String) inMsgList.getObject(EKK3131B070CBSMsg1List.STDARD_KOJIHI_GK_PRC));
						int staxGkRt = Integer.valueOf((String) inMsgList.getObject(EKK3131B070CBSMsg1List.STAX_GK_RT));
						int staxGkPrc = stdardKojihiGkPrc - (stdardKojihiGkPrc * 100 / (100 + staxGkRt));
						inMsgList.set(EKK3131B070CBSMsg1List.STAX_GK_PRC, String.valueOf(staxGkPrc));
					}
				}
			}
			
			ArrayList<Object> rsltMsgList = new ArrayList<Object>();
			rsltMsgList.add(inMsgList);
			
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK3131B070CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));

		} catch(SQLException e) {
			inMsg.set(EKK3131B070CBSMsg.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(EKK3131B070CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
}
