/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK2781B001TPDA
*	ソースファイル名：JSYejbEKK2781B001TPDA.java
*	作成者			：EK911025
*	日付			：2013年02月26日
*＜機能概要＞
*	初期設定サポート手配情報一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	 v4.00.00	2013/02/26	FJ)寺園		ST4-2012-0000181
*	 v5.00.01	2013/09/25	FJ)鳩本		OM-2013-0002434
*	 v5.00.02	2013/12/04	FJ)石橋		【OM-2013-0001870】対応
*	 v5.00.03	2014/01/13	FJ)古内		【OM-2013-0001870】対応
********************************************************************************/

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 java.util.List;

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.KK2781ETMsg;
import eo.ejb.cbs.cbsmsg.EKK2781B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2781B001CBSMsg1List;
import eo.ejb.common.JKKModelCommon;

/**
*
*  テンプレートDBアクセス部品　EKK2781B001_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKK2781B001TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEKK2781B001TPDA()	{
	}
	
	/**
	*   EKK2781B001_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
		PreparedStatement pstmtCount = null;
		/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
		PreparedStatement pstmt = null;
		
		// リザルトセット
		/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
		ResultSet rsltQueryCount = null;
		/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
		ResultSet rsltQuery = null;
		
		// パラメータのカウント
		int iPCnt = 1;

		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK2781ETMsg.getTableName());
			
			List<Object> bindList = new ArrayList<Object>();
			// SQL文_基本部1
			/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
//			StringBuilder sqlCount_Buff = new StringBuilder();
//			sqlCount_Buff.append("SELECT COUNT(*) AS CNT ");
			
			StringBuilder sqlSelect = new StringBuilder();
			sqlSelect.append("SELECT WK.SVC_KEI_NO,")
					 .append(      " WK.MSKMSHO_NO,")
					 .append(      " (SELECT CK0011.CUST_NM")
					 .append(         " FROM CK_T_CUST CK0011")
					 .append(        " WHERE CK0011.SYSID = WK.SYSID")
					 .append(          " AND (CK0011.SYSID, CK0011.RSV_APLY_YMD || CK0011.GENE_ADD_DTM) =")
					 .append(                     " (SELECT CK0011_GENE.SYSID, MAX(CK0011_GENE.RSV_APLY_YMD || CK0011_GENE.GENE_ADD_DTM)")
					 .append(                        " FROM CK_T_CUST CK0011_GENE")
					 .append(                       " WHERE 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)) AS CUST_NM,")
					 .append(      " WK.MSKM_YMD,")
					 .append(      " WK.WRIB_SVC_KEI_NO,")
					 .append(      " WK.SVC_DSL_YMD,")
					 .append(      " WK.LOOPBACK_TEST_FIN_YMD,")
					 .append(      " WK.SVC_STA_YMD,")
					 .append(      " WK.SUPPORT_FIN_YMD,")
					 .append(      " WK.SUPPORT_NO,")
					 .append(      " WK.ADD_DTM,")
					 .append(      " WK.UPD_DTM,")
					 .append(      " WK.WRIB_SVC_KEI_STAT");
			
			StringBuilder sqlCondition = new StringBuilder();
			sqlCondition.append(" FROM (SELECT KK2781.SVC_KEI_NO,")
						.append(             " KK2781.MSKMSHO_NO,")
						.append(             " KK2781.SYSID,")
						.append(             " KK2781.MSKM_YMD,")
						.append(makeWribQuery(inMsg, "WRIB_SVC_KEI_NO", bindList)).append(" AS WRIB_SVC_KEI_NO,")
						.append(makeWribQuery(inMsg, "SVC_DSL_YMD", bindList)).append(" AS SVC_DSL_YMD,")
						.append(             " KK2781.LOOPBACK_TEST_FIN_YMD,")
						.append(             " KK2781.SVC_STA_YMD,")
						.append(             " KK0631_01.SUPPORT_FIN_YMD,")
						.append(             " KK0631_01.SUPPORT_NO,")
						.append(             " KK0631_01.ADD_DTM,")
						.append(             " KK0631_01.UPD_DTM,")
						.append(makeWribQuery(inMsg, "WRIB_SVC_KEI_STAT", bindList)).append(" AS WRIB_SVC_KEI_STAT")
						.append(        " FROM KK_T_SSSP_SCTGCST_WK KK2781")
						.append(        " LEFT OUTER JOIN (SELECT KK0631.SVC_KEI_NO,")
						.append(                                " KK0631.SUPPORT_FIN_YMD,")
						.append(                                " KK0631.SUPPORT_NO,")
						.append(                                " KK0631.ADD_DTM,")
						.append(                                " KK0631.UPD_DTM,")
						.append(                                " row_number() over(partition by KK0631.SVC_KEI_NO order by NVL(KK0631.SUPPORT_FIN_YMD,'20991231') DESC, KK0631.SUPPORT_NO DESC) rnum")
						.append(                           " FROM KK_T_SUPPORT KK0631")
						.append(                          " WHERE KK0631.SUPPORT_CD = '04'")
						.append(                            " AND KK0631.MK_FLG = '0'");
			
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG))
			{
				// ＫＥＹ＿サポート完了年月日フラグ＝"2"の場合、検索条件を追加
				if ("2".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG)))
				{
					// ＫＥＹ＿サポート完了年月日（自）設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM))
					{
						sqlCondition.append(" AND KK0631.SUPPORT_FIN_YMD >= ? ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM));
					}
					// ＫＥＹ＿サポート完了年月日（至）設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND KK0631.SUPPORT_FIN_YMD <= ? ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO));
					}
				}
				// ＫＥＹ＿サポート完了年月日フラグ＝"3"の場合、検索条件を追加
				if ("3".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG)))
				{
					// ＫＥＹ＿サポート完了年月日（自）（至）共に設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND (KK0631.SUPPORT_FIN_YMD IS NULL ")
									.append(         " OR (KK0631.SUPPORT_FIN_YMD >= ? AND KK0631.SUPPORT_FIN_YMD <= ?)) ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM));
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO));
					}
					// ＫＥＹ＿サポート完了年月日（自）のみ設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM) && inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND (KK0631.SUPPORT_FIN_YMD IS NULL OR (KK0631.SUPPORT_FIN_YMD >= ?)) ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM));
					}
					// ＫＥＹ＿サポート完了年月日（至）のみ設定時、検索条件を追加
					if (inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND (KK0631.SUPPORT_FIN_YMD IS NULL OR (KK0631.SUPPORT_FIN_YMD <= ?)) ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO));
					}
				}
			}
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG))
			{
				// ＫＥＹ＿登録年月日フラグ（サポート）＝"2"または"3"の場合、検索条件を追加
				if ("2".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG)) ||
						"3".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG)))
				{
					// ＫＥＹ＿登録日年月日（サポート）（自）設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM))
					{
						sqlCondition.append("   AND  KK0631.ADD_DTM >= ? ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM) + "000000000");
					}
					// ＫＥＹ＿登録日年月日（サポート）（至）設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO))
					{
						sqlCondition.append("   AND  KK0631.ADD_DTM <= ? ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO) + "999999999");
					}
				}
			}
			
			sqlCondition.append(                        " ) KK0631_01")
						.append(                      " ON  KK0631_01.SVC_KEI_NO = KK2781.SVC_KEI_NO")
						.append(                     " AND  KK0631_01.rnum = 1")
						.append(       " WHERE KK2781.MK_FLG = '0'");
			
			// ＫＥＹ＿ループバックテスト完了年月日フラグ＝"1"の場合、検索条件を追加
			if ("1".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FLG)))
			{
				// ＫＥＹ＿ループバックテスト完了年月日（自）（至）共に設定時、検索条件を追加
				if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO))
				{
					sqlCondition.append(" AND ((KK2781.LOOPBACK_TEST_FIN_YMD >= ? AND KK2781.LOOPBACK_TEST_FIN_YMD <= ?) ")
								.append(      " OR (KK2781.SVC_STA_YMD >= ? AND KK2781.SVC_STA_YMD  <= ?)) ");
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM));
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO));
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM));
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO));
				}
				// ＫＥＹ＿ループバックテスト完了年月日（自）のみ設定時、検索条件を追加
				if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM) && inMsg.isNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO))
				{
					sqlCondition.append(" AND (KK2781.LOOPBACK_TEST_FIN_YMD >= ? OR KK2781.SVC_STA_YMD >= ?) ");
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM));
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM));
				}
				// ＫＥＹ＿ループバックテスト完了年月日（至）のみ設定時、検索条件を追加
				if (inMsg.isNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO))
				{
					sqlCondition.append(" AND (KK2781.LOOPBACK_TEST_FIN_YMD <= ? OR KK2781.SVC_STA_YMD <= ?) ");
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO));
					bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO));
				}
			}
			// ＫＥＹ＿サービス契約番号設定時、検索条件を追加
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SVC_KEI_NO))
			{
				sqlCondition.append(" AND KK2781.SVC_KEI_NO = ? ");
				bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SVC_KEI_NO));
			}
			// ＫＥＹ＿申込書番号設定時、検索条件を追加
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_MSKMSHO_NO))
			{
				sqlCondition.append(" AND KK2781.MSKMSHO_NO = ? ");
				bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_MSKMSHO_NO));
			}
			
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG))
			{
				// ＫＥＹ＿サポート完了年月日フラグ＝"1"の場合、検索条件を追加
				if ("1".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG)))
				{
					sqlCondition.append(" AND KK0631_01.SUPPORT_FIN_YMD IS NULL ");
				}
				// ＫＥＹ＿サポート完了年月日フラグ＝"2"の場合、検索条件を追加
				if ("2".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG)))
				{
					sqlCondition.append(" AND KK0631_01.SUPPORT_NO IS NOT NULL ");
				}
				// ＫＥＹ＿サポート完了年月日フラグ＝"3"の場合、検索条件を追加
				if ("3".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG)))
				{
					sqlCondition.append(" AND NOT EXISTS (SELECT 1")
								.append(                  " FROM KK_T_SUPPORT KK0631")
								.append(                 " WHERE KK0631.SVC_KEI_NO = KK2781.SVC_KEI_NO")
								.append(                   " AND KK0631.MK_FLG = '0'")
								.append(                   " AND  KK0631_01.SUPPORT_NO IS NULL");
					// ＫＥＹ＿サポート完了年月日（自）（至）共に設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND (KK0631.SUPPORT_FIN_YMD < ? OR KK0631.SUPPORT_FIN_YMD > ?)");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM));
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO));
					}
					// ＫＥＹ＿サポート完了年月日（自）のみ設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM) && inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND KK0631.SUPPORT_FIN_YMD < ? ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM));
					}
					// ＫＥＹ＿サポート完了年月日（至）のみ設定時、検索条件を追加
					if (inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO))
					{
						sqlCondition.append(" AND KK0631.SUPPORT_FIN_YMD > ? ");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO));
					}
					sqlCondition.append(" )");
				}
			}
			
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG))
			{
				// ＫＥＹ＿登録年月日フラグ（サポート）＝"1"の場合、検索条件を追加
				if ("1".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG)))
				{
					sqlCondition.append(" AND KK0631_01.ADD_DTM IS NULL ");
				}
				// ＫＥＹ＿登録年月日フラグ（サポート）＝"2"の場合、検索条件を追加
				if ("2".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG)))
				{
					sqlCondition.append(" AND KK0631_01.SUPPORT_NO IS NOT NULL ");
				}
				// ＫＥＹ＿登録年月日フラグ（サポート）＝"3"の場合、検索条件を追加
				if ("3".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG)))
				{
					sqlCondition.append(" AND NOT EXISTS ( SELECT 1 ")
								.append(                   " FROM KK_T_SUPPORT KK0631 ")
								.append(                  " WHERE KK0631.SVC_KEI_NO = KK2781.SVC_KEI_NO ")
								.append(                    " AND KK0631.MK_FLG = '0' ")
								.append(                    " AND  KK0631_01.SUPPORT_NO IS NULL ");
					// ＫＥＹ＿登録日年月日（サポート）（自）（至）共に設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO))
					{
						sqlCondition.append(" AND (KK0631.ADD_DTM < ? OR KK0631.ADD_DTM > ?)");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM) + "000000000");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO) + "999999999");
					}
					// ＫＥＹ＿登録日年月日（サポート）（自）のみ設定時、検索条件を追加
					if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM) && inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO))
					{
						sqlCondition.append(" AND KK0631.ADD_DTM < ?");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM) + "000000000");
					}
					// ＫＥＹ＿登録日年月日（サポート）（至）のみ設定時、検索条件を追加
					if (inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM) && !inMsg.isNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO))
					{
						sqlCondition.append(" AND KK0631.ADD_DTM > ?");
						bindList.add(inMsg.getObject(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO) + "999999999");
					}
					sqlCondition.append(" )");
				}
			}
			sqlCondition.append(" ) WK");
			// ＫＥＹ＿ファミリーパック有無フラグ＝設定時、検索条件を追加
			if (!inMsg.isNull(EKK2781B001CBSMsg.KEY_FAMIPA_UM_FLG))
			{
				sqlCondition.append(" WHERE");
				// ＫＥＹ＿ファミリーパック有無フラグ＝"1"の場合、検索条件を追加
				if ("1".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_FAMIPA_UM_FLG)))
				{
					sqlCondition.append(" WK.WRIB_SVC_KEI_NO IS NOT NULL ");
					sqlCondition.append(" AND WK.WRIB_SVC_KEI_STAT NOT IN ('910','920') ");
				}
				// ＫＥＹ＿ファミリーパック有無フラグ＝"2"の場合、検索条件を追加
				if ("2".equals(inMsg.getObject(EKK2781B001CBSMsg.KEY_FAMIPA_UM_FLG)))
				{
					sqlCondition.append(" ((WK.WRIB_SVC_KEI_NO IS NULL) OR (WK.WRIB_SVC_KEI_NO IS NOT NULL AND WK.WRIB_SVC_KEI_STAT ='920' ))");
				}
			}
			sqlCondition.append(" ORDER BY WK.SVC_KEI_NO ASC");
			
//			//prepareStatementにSQL文をセット
//			pstmtCount = con1.prepareStatement(sqlCount_Buff.toString() + sqlCondition.toString());
//			
//			//ログ出力(SQL文の出力)
//			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlCount_Buff + sqlCondition.toString());
//			
//			iPCnt = 1;
//			for (Object obj : bindList)
//			{
//				CAANJDBCUtil.setParam(pstmtCount, iPCnt++, obj);
//			}
//			
//			// ResultSetの取得
//			rsltQueryCount = pstmtCount.executeQuery();
//
//			// 総検索件数を取得する
//			long lDataCnt = 0L;
//			if (rsltQueryCount.next()) {
//				lDataCnt = rsltQueryCount.getLong("CNT");
//			}
//
//			inMsg.set(EKK2781B001CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(lDataCnt));
//
//			// 最大取得件数
//			long lMaxNum = inMsg.getStringAsLong(EKK2781B001CBSMsg.MAX_SEARCH_NUM);
//
//			// データ取得件数が0件の場合エラー
//			if (0L == lDataCnt) {
//				inMsg.set(EKK2781B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
//				return;
//			}
//	
//			// 最大取得件数を超えた場合エラー
//			if (lDataCnt > lMaxNum) {
//				inMsg.set(EKK2781B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
//				return;
//			}

			/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sqlSelect.toString() + sqlCondition.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sqlSelect.toString() + sqlCondition.toString());
			
			iPCnt = 1;
			CAANJDBCUtil.setParam(pstmt, iPCnt++, JKKModelCommon.getOpeDate(inMsg));
			for (Object obj : bindList)
			{
				CAANJDBCUtil.setParam(pstmt, iPCnt++, obj);
			}
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK2781B001CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EKK2781B001CBSMsg1List.SVC_KEI_NO
					, EKK2781B001CBSMsg1List.MSKMSHO_NO
					, EKK2781B001CBSMsg1List.CUST_NM
					, EKK2781B001CBSMsg1List.MSKM_YMD
					, EKK2781B001CBSMsg1List.WRIB_SVC_KEI_NO
					, EKK2781B001CBSMsg1List.SVC_DSL_YMD
					, EKK2781B001CBSMsg1List.LOOPBACK_TEST_FIN_YMD
					, EKK2781B001CBSMsg1List.SVC_STA_YMD
					, EKK2781B001CBSMsg1List.SUPPORT_FIN_YMD
					, EKK2781B001CBSMsg1List.SUPPORT_NO
					, EKK2781B001CBSMsg1List.KK0631_ADD_DTM
					, EKK2781B001CBSMsg1List.KK0631_UPD_DTM
					, EKK2781B001CBSMsg1List.WRIB_SVC_KEI_STAT
			};
			
			// 最大取得件数
			long lMaxNum = inMsg.getStringAsLong(EKK2781B001CBSMsg.MAX_SEARCH_NUM);
			
			long lDataCnt = 0L;
			ArrayList<CAANMsg> rsltMsgList = new ArrayList<CAANMsg>();
			while (rsltQuery.next()) {
				CAANMsg rsltMsg = new CAANMsg("eo.ejb.cbs.cbsmsg.EKK2781B001CBSMsg1List");
				mapMessage(rsltQuery, msgKeyList1, rsltMsg);
				rsltMsgList.add(rsltMsg);
				lDataCnt++;
				if (lDataCnt > lMaxNum) {
					break;
				}
			}
			
			inMsg.set(EKK2781B001CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(lDataCnt));
			
			// データ取得件数が0件の場合エラー
			if (0L == lDataCnt) {
				inMsg.set(EKK2781B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
				return;
			}
			
			// 最大取得件数を超えた場合エラー
			if (lDataCnt > lMaxNum) {
				inMsg.set(EKK2781B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
				return;
			}
			
			// 明細に処理結果(ResultSet)をマッピング
			// CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EKK2781B001CBSMsg1List",0);
			CAANMsg[] outMsg1 = rsltMsgList.toArray(new CAANMsg[rsltMsgList.size()]);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK2781B001CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(EKK2781B001CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
				if(rsltQueryCount != null){
					rsltQueryCount.close();
				}
				if(pstmtCount != null){
					pstmtCount.close();
				}
				/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(EKK2781B001CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	private String makeWribQuery(CAANMsg inMsg, String wribSvcKeiSelectItem, List<Object> bindList)
	{
		StringBuilder strbuild = new StringBuilder();
		
		strbuild.append("(SELECT KK0451.").append(wribSvcKeiSelectItem)
				.append(  " FROM KK_T_WRISVC_TG_KEI KK0481")
				.append(  " INNER JOIN KK_T_WRIB_SVC_KEI KK0451")
				.append(          " ON KK0481.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO")
				.append(         " AND (KK0451.WRIB_SVC_KEI_NO, KK0451.RSV_APLY_YMD || KK0451.GENE_ADD_DTM) =")
				.append(                   " (SELECT KK0451_GENE.WRIB_SVC_KEI_NO, MAX(KK0451_GENE.RSV_APLY_YMD || KK0451_GENE.GENE_ADD_DTM) AS KK0451_MAX")
				.append(                      " FROM KK_T_WRIB_SVC_KEI KK0451_GENE")
				.append(                     " WHERE KK0451_GENE.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO")
				.append(                       " AND KK0451_GENE.RSV_APLY_YMD <= ?")
				.append(                       " AND KK0451_GENE.RSV_APLY_CD = '2'")
				.append(                       " AND KK0451_GENE.MK_FLG = '0'")
				.append(                     " GROUP BY KK0451_GENE.WRIB_SVC_KEI_NO)")
				.append( " WHERE KK0481.SVC_KEI_NO = KK2781.SVC_KEI_NO")
				.append(   " AND KK0481.WRIB_SVC_KEI_NO = (SELECT MAX(KK0481_WORK.WRIB_SVC_KEI_NO)")
				.append(                                   " FROM KK_T_WRISVC_TG_KEI KK0481_WORK")
				.append(                                  " WHERE KK0481_WORK.SVC_KEI_NO = KK0481.SVC_KEI_NO")
				.append(                                    " AND KK0481_WORK.MK_FLG='0'")
				.append(                                    " AND EXISTS(SELECT *")
				.append(                                                 " FROM KK_T_WRIB_SVC_KEI KK0451")
				.append(                                                " WHERE KK0481_WORK.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO")
				.append(                                                  " AND (KK0451.WRIB_SVC_KEI_NO, KK0451.RSV_APLY_YMD || KK0451.GENE_ADD_DTM) =")
				.append(                                                             " (SELECT KK0451_GENE.WRIB_SVC_KEI_NO, MAX(KK0451_GENE.RSV_APLY_YMD || KK0451_GENE.GENE_ADD_DTM) AS KK0451_MAX")
				.append(                                                                " FROM KK_T_WRIB_SVC_KEI KK0451_GENE")
				.append(                                                               " WHERE KK0451_GENE.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO")
				.append(                                                                 " AND KK0451_GENE.RSV_APLY_YMD <= ?")
				.append(                                                                 " AND KK0451_GENE.RSV_APLY_CD = '2'")
				.append(                                                                 " AND KK0451_GENE.MK_FLG = '0'")
				.append(                                                               " GROUP BY KK0451_GENE.WRIB_SVC_KEI_NO)")
				.append(                                                  " AND EXISTS(SELECT *")
				.append(                                                               " FROM KK_M_WRIB_SVC KK0841")
				.append(                                                              " WHERE KK0841.WRIB_SVC_CD = KK0451.WRIB_SVC_CD")
				.append(                                                                " AND (KK0841.WRIB_SVC_CD, KK0841.RSV_APLY_YMD || KK0841.GENE_ADD_DTM) =")
				.append(                                                                           " (SELECT KK0841_GENE.WRIB_SVC_CD, MAX(KK0841_GENE.RSV_APLY_YMD || KK0841_GENE.GENE_ADD_DTM) AS KK0841_MAX")
				.append(                                                                              " FROM KK_M_WRIB_SVC KK0841_GENE")
				.append(                                                                             " WHERE KK0841_GENE.WRIB_SVC_CD = KK0841.WRIB_SVC_CD")
				.append(                                                                               " AND KK0841_GENE.RSV_APLY_YMD <= ?")
				.append(                                                                               " AND KK0841_GENE.MK_FLG = '0'")
				.append(                                                                             " GROUP BY KK0841_GENE.WRIB_SVC_CD)")
				.append(                                                                " AND KK0841.WRIB_TYPE_CD = '20'))))");
		
		bindList.add(JKKModelCommon.getOpeDate(inMsg));
		bindList.add(JKKModelCommon.getOpeDate(inMsg));
		bindList.add(JKKModelCommon.getOpeDate(inMsg));
		
		return strbuild.toString();
	}
}
