/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK3511B010TPDA
*	ソースファイル名：JSYejbEKK3511B010TPDA.java
*	作成者			：FJ田中
*	日付			：2023年07月05日
*＜機能概要＞
*	標準工事費総額通知書情報一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v67.00.00	2023/07/05	FJ田中		新規作成
*	v67.00.01	2023/07/13	FJ田中		「消費税合計額・金額」修正
*
********************************************************************************/

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.TU0021ETMsg;
import eo.ejb.cbs.cbsmsg.EKK3511B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3511B010CBSMsg1List;
import eo.ejb.common.JTUModelCommon;

/**
*
*  テンプレートDBアクセス部品　EKK3511B010_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*  @author FJ
*/
public class JSYejbEKK3511B010TPDA extends CAANSQLFacility implements TemplateDBAccessHandler
{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEKK3511B010TPDA()	
	{
	}
	
	/**
	*   EKK3511B010_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @param inContext
	*   @return void
	*/
	public void invoke(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		CAANMsg inMsgList = new CAANMsg("eo.ejb.cbs.cbsmsg.EKK3511B010CBSMsg1List");
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/**
		 * パラメータセット用
		 */
		int iIndex = 1;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(TU0021ETMsg.getTableName());
			
			/**
			 * SQL文作成
			 */
			// 判別：サービス契約
			StringBuffer sqlCheck1Select = new StringBuffer();
			StringBuffer sqlCheck1From = new StringBuffer();
			
			sqlCheck1Select.append("SELECT KK0081.PRC_GRP_CD ");
			sqlCheck1From.append("FROM KK_T_SVC_KEI KK0081 ")
				.append("WHERE ")
				.append("  KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = ")
				.append("    ( SELECT ")
				.append("      MAX(KK0081.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.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の指定されたパラメータカラムに 指定された値を設定
			iIndex = 1;
			
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));
			CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3511B010CBSMsgの明細にセットする項目
			String[] msgKeyListCheck1Cnt = {
					EKK3511B010CBSMsg.TOTAL_SEARCH_NUM
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListCheck1Cnt, inMsg);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}
			
			if ((Integer.parseInt(inMsg.getString(EKK3511B010CBSMsg.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の指定されたパラメータカラムに 指定された値を設定
				iIndex = 1;
				
				// パラメータの設定(工事費割賦契約番号、世代登録年月日時分秒を指定)
				CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));
				CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));

				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3511B010CBSMsgの明細にセットする項目
				String[] msgKeyListCheck1 = {
						EKK3511B010CBSMsg1List.PRC_GRP_CD
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListCheck1, inMsgList);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				
				if("10".equals(inMsgList.getString(EKK3511B010CBSMsg1List.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 KK_T_KAISEN_TG_SVKEI KK0241 ")
						.append("LEFT OUTER JOIN KK_T_SVKEI_KAISEN_UW KK0251 ")
						.append("  ON KK0251.SVC_KEI_KAISEN_UCWK_NO = KK0241.SVC_KEI_KAISEN_UCWK_NO ")
						.append("LEFT OUTER JOIN 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の指定されたパラメータカラムに 指定された値を設定
					iIndex = 1;
					
					// パラメータの設定(工事費割賦契約番号、世代登録年月日時分秒を指定)
					CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));

					/**
					 * SQL文実行
					 */
					// ResultSetの取得
					rsltQuery = pstmt.executeQuery();
					
					// EKK3511B010CBSMsgの明細にセットする項目
					String[] msgKeyListCheck2 = {
							EKK3511B010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO,
							EKK3511B010CBSMsg1List.MANSION_BUKKEN_NO,
							EKK3511B010CBSMsg1List.MANSION_BUKKEN_CD
					};
					
					/**
					 * 結果取得
					 */
					rsltQuery.next();
					mapMessage(rsltQuery, msgKeyListCheck2, inMsgList);
					
					// 資源の解放
					if(rsltQuery != null)
					{
						rsltQuery.close();
					}
					if(pstmt != null)
					{
						pstmt.close();
					}

					if (inMsgList.getString(EKK3511B010CBSMsg1List.MANSION_BUKKEN_NO) != null && 
							!"002".equals(inMsgList.getString(EKK3511B010CBSMsg1List.MANSION_BUKKEN_CD)))
					{
						// ホームタイプ／メゾンタイプ以外は対象外
						inMsg.set(EKK3511B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
						return;
					}
				}
				else if(!"02".equals(inMsgList.getString(EKK3511B010CBSMsg1List.PRC_GRP_CD)) && 
						!"03".equals(inMsgList.getString(EKK3511B010CBSMsg1List.PRC_GRP_CD))) 
				{
					// "02","03","10"以外は対象外
					inMsg.set(EKK3511B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}
			}
			else
			{
				// サービス契約がない場合、エラーフラグに"3"を設定して処理終了
				inMsg.set(EKK3511B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
				return;
			}

			// 工事費割賦契約
			StringBuffer sqlKapCurrentSelect = new StringBuffer();
			StringBuffer sqlKapCurrentFrom = new StringBuffer();
			StringBuffer sqlKapCurrentWhere = new StringBuffer();

			sqlKapCurrentSelect.append("SELECT ")
				.append("  KK_T_KOJIHI_KAP_KEI.KOJIHI_KAP_KEI_NO ")
				.append("  , KK_T_KOJIHI_KAP_KEI.GENE_ADD_DTM ")
				.append("  , KK_T_KOJIHI_KAP_KEI.FIRST_SEIKY_SVC_KEI_NO ")
				.append("  , KK_T_KOJIHI_KAP_KEI.KAP_KEI_CHRG_STAYMD ")
				.append("  , KK_T_KOJIHI_KAP_KEI.SVC_KEI_KAISEN_UCWK_NO ")
				.append("  , KK_T_KOJIHI_KAP_KEI.MSKM_DTL_NO ")
				.append("  , KK_T_KOJIHI_KAP_KEI.KAP_PLAN_CD ");
			sqlKapCurrentFrom.append("FROM ")
				.append("  KK_T_KAISEN_TG_SVKEI ")
				.append("  INNER JOIN KK_T_KOJIHI_KAP_KEI ")
				.append("    ON KK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO = KK_T_KOJIHI_KAP_KEI.SVC_KEI_KAISEN_UCWK_NO ");
			sqlKapCurrentWhere.append("WHERE ")
				.append("  ( ( KK_T_KAISEN_TG_SVKEI.KAISEN_UCWK_USE_ENDYMD = TO_CHAR(TO_DATE( ? ,'YYYYMMDD') - 1, 'YYYYMMDD') ")
				.append("      AND KK_T_KAISEN_TG_SVKEI.UPD_UNYO_YMD = ? ) ")
				.append("    OR ")
				.append("    ( KK_T_KAISEN_TG_SVKEI.KAISEN_UCWK_USE_STAYMD <= ? ")
				.append("      AND KK_T_KAISEN_TG_SVKEI.KAISEN_UCWK_USE_ENDYMD >= ? ) ) ")
				.append("  AND KK_T_KAISEN_TG_SVKEI.SVC_KEI_NO = ? ")
				.append("  AND KK_T_KAISEN_TG_SVKEI.MK_FLG = '0' ")
				.append("  AND KK_T_KOJIHI_KAP_KEI.KAP_KEI_STAT <> '920' ")
				.append("  AND KK_T_KOJIHI_KAP_KEI.MK_FLG = '0' ")
				.append("  AND KK_T_KOJIHI_KAP_KEI.GENE_ADD_DTM = ")
				.append("    (SELECT MAX(GENE_ADD_DTM) ")
				.append("      FROM KK_T_KOJIHI_KAP_KEI ")
				.append("      WHERE SVC_KEI_KAISEN_UCWK_NO = KK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO ")
				.append("        AND KAP_KEI_STAT <> '920' ")
				.append("        AND 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の指定されたパラメータカラムに 指定された値を設定
			iIndex = 1;
			
			CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3511B010CBSMsgの明細にセットする項目
			String[] msgKeyListCurrentCnt = {
					EKK3511B010CBSMsg.TOTAL_SEARCH_NUM
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListCurrentCnt, inMsg);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}
			
			if ((Integer.parseInt(inMsg.getString(EKK3511B010CBSMsg.TOTAL_SEARCH_NUM))) > 0)
			{
				// 検索件数が1件以上の場合、データを取得
				StringBuffer sqlKapCurrent = new StringBuffer();
				sqlKapCurrent.append(sqlKapCurrentSelect)
					.append(sqlKapCurrentFrom)
					.append(sqlKapCurrentWhere);
				
				//prepareStatementにSQL文をセット
				pstmt = con1.prepareStatement(sqlKapCurrent.toString());

				// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
				iIndex = 1;
				
				CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));

				//ログ出力(SQL文の出力)
				JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlCurrentCnt);

				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3511B010CBSMsgの明細にセットする項目
				String[] msgKeyListCurrentList = {
						EKK3511B010CBSMsg1List.KOJIHI_KAP_KEI_NO,
						EKK3511B010CBSMsg1List.GENE_ADD_DTM,
						EKK3511B010CBSMsg1List.FIRST_SEIKY_SVC_KEI_NO,
						EKK3511B010CBSMsg1List.KAP_KEI_CHRG_STAYMD,
						EKK3511B010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO,
						EKK3511B010CBSMsg1List.MSKM_DTL_NO,
						EKK3511B010CBSMsg1List.KAP_PLAN_CD
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListCurrentList, inMsgList);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
			}
			else
			{
				StringBuffer sqlKapPastSelect = new StringBuffer();
				StringBuffer sqlKapPastFrom = new StringBuffer();
				StringBuffer sqlKapPastWhere = new StringBuffer();

				// 工事費割賦契約(過去)
				sqlKapPastSelect.append("SELECT ")
					.append("  KK_T_KOJIHI_KAP_KEI.KOJIHI_KAP_KEI_NO ")
					.append("  , KK_T_KOJIHI_KAP_KEI.GENE_ADD_DTM ")
					.append("  , KK_T_KOJIHI_KAP_KEI.FIRST_SEIKY_SVC_KEI_NO ")
					.append("  , KK_T_KOJIHI_KAP_KEI.KAP_KEI_CHRG_STAYMD ")
					.append("  , KK_T_KOJIHI_KAP_KEI.SVC_KEI_KAISEN_UCWK_NO ")
					.append("  , KK_T_KOJIHI_KAP_KEI.MSKM_DTL_NO ")
					.append("  , KK_T_KOJIHI_KAP_KEI.KAP_PLAN_CD ");
				sqlKapPastFrom.append("FROM ")
					.append("  KK_T_KAISEN_TG_SVKEI ")
					.append("  INNER JOIN KK_T_KOJIHI_KAP_KEI ")
					.append("    ON KK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO = KK_T_KOJIHI_KAP_KEI.SVC_KEI_KAISEN_UCWK_NO ");
				sqlKapPastWhere.append("WHERE ")
					.append("  KK_T_KAISEN_TG_SVKEI.KAISEN_UCWK_USE_ENDYMD <= ? ")
					.append("  AND KK_T_KAISEN_TG_SVKEI.SVC_KEI_NO = ? ")
					.append("  AND KK_T_KAISEN_TG_SVKEI.MK_FLG = '0' ")
					.append("  AND KK_T_KOJIHI_KAP_KEI.KAP_KEI_STAT <> '920' ")
					.append("  AND KK_T_KOJIHI_KAP_KEI.MK_FLG = '0' ")
					.append("  AND KK_T_KOJIHI_KAP_KEI.GENE_ADD_DTM = ")
					.append("    (SELECT MAX(GENE_ADD_DTM) ")
					.append("      FROM KK_T_KOJIHI_KAP_KEI ")
					.append("      WHERE SVC_KEI_KAISEN_UCWK_NO = KK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO ")
					.append("        AND KAP_KEI_STAT <> '920' ")
					.append("        AND 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の指定されたパラメータカラムに 指定された値を設定
				iIndex = 1;
				
				CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
				CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));
				
				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3511B010CBSMsgの明細にセットする項目
				String[] msgKeyListPastCnt = {
						EKK3511B010CBSMsg.TOTAL_SEARCH_NUM
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListPastCnt, inMsg);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if ((Integer.parseInt(inMsg.getString(EKK3511B010CBSMsg.TOTAL_SEARCH_NUM))) > 0)
				{
					// 検索件数が1件以上の場合、データを取得
					StringBuffer sqlKapPast = new StringBuffer();
					sqlKapPast.append(sqlKapPastSelect)
						.append(sqlKapPastFrom)
						.append(sqlKapPastWhere);
					
					//prepareStatementにSQL文をセット
					pstmt = con1.prepareStatement(sqlKapPast.toString());

					// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
					iIndex = 1;
					
					CAANJDBCUtil.setParam(pstmt, iIndex++, JTUModelCommon.getOpeDate(inMsg, null));
					CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));

					//ログ出力(SQL文の出力)
					JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlPastCnt);

					/**
					 * SQL文実行
					 */
					// ResultSetの取得
					rsltQuery = pstmt.executeQuery();
					
					// EKK3511B010CBSMsgの明細にセットする項目
					String[] msgKeyListPastList = {
							EKK3511B010CBSMsg1List.KOJIHI_KAP_KEI_NO,
							EKK3511B010CBSMsg1List.GENE_ADD_DTM,
							EKK3511B010CBSMsg1List.FIRST_SEIKY_SVC_KEI_NO,
							EKK3511B010CBSMsg1List.KAP_KEI_CHRG_STAYMD,
							EKK3511B010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO,
							EKK3511B010CBSMsg1List.MSKM_DTL_NO,
							EKK3511B010CBSMsg1List.KAP_PLAN_CD
					};
					
					/**
					 * 結果取得
					 */
					rsltQuery.next();
					mapMessage(rsltQuery, msgKeyListPastList, inMsgList);
					
					// 資源の解放
					if(rsltQuery != null)
					{
						rsltQuery.close();
					}
					if(pstmt != null)
					{
						pstmt.close();
					}
				}
				else
				{
					// 工事費割賦契約がない場合、エラーフラグに"3"を設定して処理終了
					inMsg.set(EKK3511B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}
			}

			// 申込明細
			StringBuffer sqlMskm = new StringBuffer();
			sqlMskm.append("SELECT MSKMSHO_DTL_NO ")
				.append("FROM KK_T_MSKM_DTL ")
				.append("WHERE MSKM_DTL_NO = ? ")
				.append("  AND MK_FLG = '0' ")
				.append("  AND GENE_ADD_DTM = ")
				.append("  (SELECT MAX(GENE_ADD_DTM) ")
				.append("    FROM KK_T_MSKM_DTL ")
				.append("    WHERE MSKM_DTL_NO = ? ")
				.append("      AND MK_FLG = '0') ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlMskm.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlMskm);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			iIndex = 1;
			
			// パラメータの設定(工事費割賦契約番号、世代登録年月日時分秒を指定)
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3511B010CBSMsg1List.MSKM_DTL_NO));
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3511B010CBSMsg1List.MSKM_DTL_NO));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3511B010CBSMsgの明細にセットする項目
			String[] msgKeyListMskmList = {
					EKK3511B010CBSMsg1List.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 KU_T_KOJIAK.KOJIAK_JSSI_YMD ")
				.append("FROM KK_T_SVC_KEI ")
				.append("LEFT OUTER JOIN KU_T_MSKM_DTL_KOJIAK ")
				.append("  ON KU_T_MSKM_DTL_KOJIAK.MSKM_DTL_NO = KK_T_SVC_KEI.MSKM_DTL_NO ")
				.append("  AND KU_T_MSKM_DTL_KOJIAK.MK_FLG = '0' ")
				.append("LEFT OUTER JOIN KU_T_KOJIAK ")
				.append("  ON KU_T_KOJIAK.KOJIAK_NO = KU_T_MSKM_DTL_KOJIAK.KOJIAK_NO ")
				.append("  AND KU_T_KOJIAK.MK_FLG = '0' ")
				.append("WHERE KK_T_SVC_KEI.MK_FLG = '0' ")
				.append("AND KK_T_SVC_KEI.SVC_KEI_NO = ? ")
				.append("  AND (KK_T_SVC_KEI.RSV_APLY_YMD || KK_T_SVC_KEI.GENE_ADD_DTM) = ")
				.append("  (SELECT MIN(RSV_APLY_YMD || GENE_ADD_DTM) ")
				.append("    FROM KK_T_SVC_KEI ")
				.append("    WHERE SVC_KEI_NO = ?) ")
				.append("  AND KU_T_MSKM_DTL_KOJIAK.MSKM_DTL_KOJIAK_TSTAYMD = ")
				.append("    (SELECT MAX(MSKM_DTL_KOJIAK_TSTAYMD) ")
				.append("    FROM KU_T_MSKM_DTL_KOJIAK ")
				.append("    WHERE KU_T_MSKM_DTL_KOJIAK.MSKM_DTL_NO = KK_T_SVC_KEI.MSKM_DTL_NO) ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlKojiak.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlKojiak);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			iIndex = 1;
			
			// パラメータの設定(工事費割賦契約番号、世代登録年月日時分秒を指定)
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsg.getObject(EKK3511B010CBSMsg.KEY_SVC_KEI_NO));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3511B010CBSMsgの明細にセットする項目
			String[] msgKeyListKojiakList = {
					EKK3511B010CBSMsg1List.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("  KAP_PLAN_TTL_AMNT STDARD_KOJIHI_DTL_PRC ")
				.append("  ,KAP_PLAN_TTL_AMNT STDARD_KOJIHI_GK_PRC ")
				.append("  ,KAP_HAMBAI_FORM_CD ")
				.append("FROM KK_M_KAP_PLAN ")
				.append("WHERE KAP_PLAN_CD = ? ")
				.append("  AND MK_FLG = '0' ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlKapPlan.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlKapPlan);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			iIndex = 1;
			
			// パラメータの設定
			CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3511B010CBSMsg1List.KAP_PLAN_CD));

			/**
			 * SQL文実行
			 */
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3511B010CBSMsgの明細にセットする項目
			String[] msgKeyListKapPlanList = {
					EKK3511B010CBSMsg1List.STDARD_KOJIHI_DTL_PRC,
					EKK3511B010CBSMsg1List.STDARD_KOJIHI_GK_PRC,
					EKK3511B010CBSMsg1List.KAP_HAMBAI_FORM_CD
			};
			
			/**
			 * 結果取得
			 */
			rsltQuery.next();
			mapMessage(rsltQuery, msgKeyListKapPlanList, inMsgList);
			
			// 資源の解放
			if(rsltQuery != null)
			{
				rsltQuery.close();
			}
			if(pstmt != null)
			{
				pstmt.close();
			}

			// 税率
			if (inMsgList.getObject(EKK3511B010CBSMsg1List.KOJI_FIN_YMD) != null) {
				StringBuffer sqlTaxSelect = new StringBuffer();
				StringBuffer sqlTaxFrom = new StringBuffer();
				sqlTaxSelect.append("SELECT TAX_RT ");
				sqlTaxFrom.append("FROM AC_M_TAX_RT ")
					.append("WHERE UZEI_SZEI_SKBT_CD = '1' ")
					.append("  AND MK_FLG = '0' ")
					.append("  AND TAX_RT_TSTAYMD = ")
					.append("  (SELECT MAX(TAX_RT_TSTAYMD) ")
					.append("    FROM AC_M_TAX_RT ")
					.append("    WHERE UZEI_SZEI_SKBT_CD = '1' ")
					.append("      AND TAX_RT_TSTAYMD <= ? ")
					.append("      AND 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の指定されたパラメータカラムに 指定された値を設定
				iIndex = 1;
				
				// パラメータの設定
				CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3511B010CBSMsg1List.KOJI_FIN_YMD));
	
				/**
				 * SQL文実行
				 */
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// EKK3511B010CBSMsgの明細にセットする項目
				String[] msgKeyListTaxCnt = {
						EKK3511B010CBSMsg.TOTAL_SEARCH_NUM
				};
				
				/**
				 * 結果取得
				 */
				rsltQuery.next();
				mapMessage(rsltQuery, msgKeyListTaxCnt, inMsg);
				
				// 資源の解放
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				
				if ((Integer.parseInt(inMsg.getString(EKK3511B010CBSMsg.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の指定されたパラメータカラムに 指定された値を設定
					iIndex = 1;
					
					// パラメータの設定
					CAANJDBCUtil.setParam(pstmt, iIndex++, inMsgList.getObject(EKK3511B010CBSMsg1List.KOJI_FIN_YMD));
		
					/**
					 * SQL文実行
					 */
					// ResultSetの取得
					rsltQuery = pstmt.executeQuery();
					
					// EKK3511B010CBSMsgの明細にセットする項目
					String[] msgKeyListTaxList = {
							EKK3511B010CBSMsg1List.STAX_GK_RT
					};
					
					/**
					 * 結果取得
					 */
					rsltQuery.next();
					mapMessage(rsltQuery, msgKeyListTaxList, inMsgList);
					
					// 資源の解放
					if(rsltQuery != null)
					{
						rsltQuery.close();
					}
					if(pstmt != null)
					{
						pstmt.close();
					}
					
					// 消費税合計額・金額
					if (inMsgList.getObject(EKK3511B010CBSMsg1List.STAX_GK_RT) != null && 
							inMsgList.getObject(EKK3511B010CBSMsg1List.STDARD_KOJIHI_GK_PRC) != null)
					{
						int stdardKojihiGkPrc = Integer.valueOf((String) inMsgList.getObject(EKK3511B010CBSMsg1List.STDARD_KOJIHI_GK_PRC));
						int staxGkRt = Integer.valueOf((String) inMsgList.getObject(EKK3511B010CBSMsg1List.STAX_GK_RT));
						// ANK-4401-00-01 MOD START
						//int staxGkPrc = stdardKojihiGkPrc * 100 / (100 + staxGkRt);
						int staxGkPrc = stdardKojihiGkPrc - (stdardKojihiGkPrc * 100 / (100 + staxGkRt));
						// ANK-4401-00-01 MOD END
						inMsgList.set(EKK3511B010CBSMsg1List.STAX_GK_PRC, String.valueOf(staxGkPrc));
					}
				}
			}
			
			ArrayList<Object> rsltMsgList = new ArrayList<Object>();
			rsltMsgList.add(inMsgList);
			
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK3511B010CBSMsg1List", (CAANMsg[])rsltMsgList.toArray(new CAANMsg[0]));

		}
		catch(SQLException e) 
		{
			inMsg.set(EKK3511B010CBSMsg.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(EKK3511B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
}
