/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK0671B001TPDA
*	ソースファイル名：JSYejbEKK0671B001TPDA.java
*	作成者			：EK911015
*	日付			：2012年07月03日
*＜機能概要＞
*	はぴeポイント契約一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ5.00.00    2013/09/25  FJ）寺園    OM-2013-0002487
*	ｖ8.00.00    2014/03/11  FJ）寺園    OM-2014-0000094
*	ｖ8.00.01    2014/03/14  FJ）小島    OM-2014-0000094
*	ｖ10.00.00   2014/09/30  FJ）寺園    OM-2014-0003064
*	ｖ11.00.00   2014/10/02  FJ）寺園    ANK-2306-09-00
*	ｖ25.00.00   2016/07/15  FJ）三宅    OM-2016-0001769
*
********************************************************************************/

package eo.ejb.cbs.sqlf;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANSQLFacility;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateDBAccessHandler;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0671B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0671B001CBSMsg1List;
import eo.ejb.cbm.entity.KK0671ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKejbPagingUtil;
import eo.ejb.common.JZMModelCommon;

/**
*
*  テンプレートDBアクセス部品　EKK0671B001_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKK0671B001TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEKK0671B001TPDA() {
	}
	
	/**
	*   EKK0671B001_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt_Count = null;
		PreparedStatement pstmt_Page = null;
		
		// リザルトセット
		ResultSet rsltQuery_Count = null;
		ResultSet rsltQuery_Page = null;

		// バインド変数設定順制御用変数
		int iParamCntr = 0;

		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0671ETMsg.getTableName());
			
			// SQL文の作成(件数取得用)
			// (1)
			StringBuffer sql_BuffCount = new StringBuffer();
			sql_BuffCount.append(" SELECT  ")
			.append("     COUNT(*) AS CNT  ");

			// SQL文の作成(ページングヘッダ)
			// (2)
			StringBuffer sql_BuffPageHeader = new StringBuffer();
// v25.00.00 MOD START
//			sql_BuffPageHeader.append("SELECT *  ")
//			.append("FROM (  ")
//			.append("    SELECT ALL_SELECT.*, ROWNUM AS LINE  ")
//			.append("    FROM (  ");

			if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
					 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
			{
				sql_BuffPageHeader.append("SELECT *  ")
				.append("FROM (  ")
				.append("    SELECT ALL_SELECT.*, ROWNUM AS LINE  ")
				.append("    FROM (  ");
			}
			else
			{
				sql_BuffPageHeader.append("SELECT ")
				.append("    PAGE_SELECT.HAPIE_NO ")
				.append("   ,PAGE_SELECT.HAPIE_POINT_KEI_STAT ")
				.append("   ,PAGE_SELECT.HAPIE_POINT_KEI_STAT_NM  ")
				.append("   ,PAGE_SELECT.HAPIEK_JDG_REQ_JI_STI_ID ")
				.append("   ,CASE WHEN PAGE_SELECT.SYSID IS  NULL THEN '' ")
				.append("    ELSE")
				.append("        (SELECT CK0011_01.EOID ")
				.append("         FROM CK_T_CUST CK0011_01 ")
				.append("         WHERE CK0011_01.SYSID = PAGE_SELECT.SYSID ")
				.append("         AND")
				.append("               (CK0011_01.SYSID, CK0011_01.RSV_APLY_YMD || CK0011_01.GENE_ADD_DTM) = ( ")
				.append("                   SELECT CK0011_GENE.SYSID,")
				.append("                          MAX(CK0011_GENE.RSV_APLY_YMD || CK0011_GENE.GENE_ADD_DTM) AS ")
				.append("                   FROM CK_T_CUST CK0011_GENE")
				.append("                   WHERE CK0011_GENE.SYSID = CK0011_01.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("    END AS EOID ")
				.append("   ,PAGE_SELECT.SYSID ")
				.append("   ,PAGE_SELECT.HAPIE_MEMBER_CARD_NM ")
				.append("   ,PAGE_SELECT.HAPIE_MEMBER_BIRTHD ")
				.append("   ,PAGE_SELECT.HAPIE_MEMBER_TELNO ")
				.append("   ,PAGE_SELECT.HAPIE_MEMBER_PCD ")
				.append("   ,PAGE_SELECT.HAPIE_MEMBER_AD ")
				.append("   ,PAGE_SELECT.POINT_KEI_JDG_REQ_YMD ")
				.append("   ,PAGE_SELECT.HAPIE_POINT_KEI_HOSEI_YMD ")
				.append("   ,PAGE_SELECT.POINT_KEI_SKEKKA_SND_YMD ")
				.append("   ,PAGE_SELECT.POINT_KEI_SKEKKA_CD ")
				.append("   ,PAGE_SELECT.POINT_KEI_SKEKKA_CD_NM  ")
				.append("   ,PAGE_SELECT.POINT_KEI_SKEKKA_RSN_CD ")
				.append("   ,PAGE_SELECT.POINT_KEI_SKEKKA_RSN_CD_NM  ")
				.append("   ,PAGE_SELECT.HAPIE_POINT_KEI_NO ")
				.append("   ,PAGE_SELECT.SVC_STAYMD ")
				.append("   ,PAGE_SELECT.SVC_ENDYMD ")
				.append("   ,PAGE_SELECT.POINT_KEI_JUDGE_YMD ")
				.append("   ,PAGE_SELECT.HAPIE_MEMBER_CARD_NM_KANA ")
				.append("   ,PAGE_SELECT.HAPIEPOINT_KEI_HSK_BIKO ")
				.append("   ,PAGE_SELECT.UPD_DTM ")
				.append("   ,PAGE_SELECT.SKSN_TRGT_SVKEI_SKEKKA_CD ")
				.append("   ,PAGE_SELECT.HAPIEPOINT_KEI_CHG_MEMO ")
				.append("   ,PAGE_SELECT.LINE ")
				.append("FROM (  ")
				.append("    SELECT ALL_SELECT.*, ROWNUM AS LINE  ")
				.append("    FROM (  ");
			}
// v25.00.00 MOD END

			// SQL文_基本部1
			// (3)
			StringBuffer sql_BuffSelect = new StringBuffer();
			sql_BuffSelect.append(" SELECT  KK0671.HAPIE_NO ")
					.append("        ,KK0671.HAPIE_POINT_KEI_STAT ")
					.append("        ,(SELECT ZM0171_01.CD_DIV_NM  ")
					.append("          FROM  ZM_M_CD_NM_KANRI ZM0171_01 ")
					.append("          WHERE ZM0171_01.CD_SBT_CD = 'CD00596' ")
					.append("            AND ZM0171_01.CD_DIV = KK0671.HAPIE_POINT_KEI_STAT ")
					.append("            AND ZM0171_01.MK_FLG = '0') AS HAPIE_POINT_KEI_STAT_NM  ")
// v25.00.00 MOD START
//					.append("        ,KK0671.HAPIEK_JDG_REQ_JI_STI_ID ")
//					.append("        ,CK0011.EOID ")
//					.append("        ,KK0671.SYSID ")
					.append("        ,KK0671.HAPIEK_JDG_REQ_JI_STI_ID ");
					if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
							 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
					{
						sql_BuffSelect.append("        ,CK0011.EOID ");
					}
					sql_BuffSelect.append("        ,KK0671.SYSID ")
// v25.00.00 MOD END
					
					.append("        ,KK0671.HAPIE_MEMBER_CARD_NM ")
					.append("        ,KK0671.HAPIE_MEMBER_BIRTHD ")
					.append("        ,KK0671.HAPIE_MEMBER_TELNO ")
					.append("        ,KK0671.HAPIE_MEMBER_PCD ")
					.append("        ,KK0671.HAPIE_MEMBER_AD ")
					.append("        ,KK0671.POINT_KEI_JDG_REQ_YMD ")
					.append("        ,KK0671.HAPIE_POINT_KEI_HOSEI_YMD ")
					.append("        ,KK0671.POINT_KEI_SKEKKA_SND_YMD ")
					.append("        ,KK0671.POINT_KEI_SKEKKA_CD ")
					.append("        ,(SELECT ZM0171_02.CD_DIV_NM  ")
					.append("          FROM  ZM_M_CD_NM_KANRI ZM0171_02  ")
					.append("          WHERE ZM0171_02.CD_SBT_CD = 'CD00597'  ")
					.append("            AND ZM0171_02.CD_DIV = KK0671.POINT_KEI_SKEKKA_CD  ")
					.append("            AND ZM0171_02.MK_FLG = '0') AS POINT_KEI_SKEKKA_CD_NM  ")
					.append("        ,KK0671.POINT_KEI_SKEKKA_RSN_CD ")
					.append("        ,(SELECT ZM0171_03.CD_DIV_NM  ")
					.append("          FROM  ZM_M_CD_NM_KANRI ZM0171_03  ")
					.append("          WHERE ZM0171_03.CD_SBT_CD = 'CD00598'  ")
					.append("            AND ZM0171_03.CD_DIV = KK0671.POINT_KEI_SKEKKA_RSN_CD  ")
					.append("            AND ZM0171_03.MK_FLG = '0') AS POINT_KEI_SKEKKA_RSN_CD_NM  ")
					.append("        ,KK0671.HAPIE_POINT_KEI_NO ")
					.append("        ,KK0671.SVC_STAYMD ")
					.append("        ,KK0671.SVC_ENDYMD ")
					.append("        ,KK0671.POINT_KEI_JUDGE_YMD ")
					.append("        ,KK0671.HAPIE_MEMBER_CARD_NM_KANA ")
					.append("        ,KK0671.HAPIEPOINT_KEI_HSK_BIKO ")
					.append("        ,KK0671.UPD_DTM ");
			if ( "4".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString()))
			{
				sql_BuffSelect.append("        ,KK0681.SKSN_TRGT_SVKEI_SKEKKA_CD ");
			}
			else
			{
				sql_BuffSelect.append("        ,NULL SKSN_TRGT_SVKEI_SKEKKA_CD ");
			}
			/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add start ++++++++++ */
			sql_BuffSelect
					.append("        ,KK0671.HAPIEPOINT_KEI_CHG_MEMO ");
			/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add end ++++++++++ */

			// SQL文_基本部2
			// (4)
			StringBuffer sql_BuffFrom = new StringBuffer();
			
// v25.00.00 MOD START
//			sql_BuffFrom.append(" FROM KK_T_HAPIE_POINT_KEI KK0671 ")
//			.append(" LEFT OUTER JOIN ")
//			.append("      (SELECT * ")
//			.append("       FROM   CK_T_CUST CK0011_01 ")
//			.append("       WHERE  (CK0011_01.SYSID, CK0011_01.RSV_APLY_YMD || CK0011_01.GENE_ADD_DTM) = ")
//			.append("             (SELECT  CK0011_GENE.SYSID, MAX(CK0011_GENE.RSV_APLY_YMD || CK0011_GENE.GENE_ADD_DTM) AS CK0011_MAX ")
//			.append("              FROM  CK_T_CUST CK0011_GENE ")
//			.append("              WHERE CK0011_GENE.SYSID = CK0011_01.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("      ) CK0011 ")
//			.append("         ON CK0011.SYSID = KK0671.SYSID ");
			if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
					 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
			{
				sql_BuffFrom.append(" FROM KK_T_HAPIE_POINT_KEI KK0671 ")
						.append(" LEFT OUTER JOIN ")
						.append("      (SELECT * ")
						.append("       FROM   CK_T_CUST CK0011_01 ")
						.append("       WHERE  (CK0011_01.SYSID, CK0011_01.RSV_APLY_YMD || CK0011_01.GENE_ADD_DTM) = ")
						.append("             (SELECT  CK0011_GENE.SYSID, MAX(CK0011_GENE.RSV_APLY_YMD || CK0011_GENE.GENE_ADD_DTM) AS CK0011_MAX ")
						.append("              FROM  CK_T_CUST CK0011_GENE ")
						.append("              WHERE CK0011_GENE.SYSID = CK0011_01.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("      ) CK0011 ")
						.append("         ON CK0011.SYSID = KK0671.SYSID ");
			}
			else
			{
				sql_BuffFrom.append(" FROM KK_T_HAPIE_POINT_KEI KK0671 ");
			}
// v25.00.00 MOD END
			
			if ( "4".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString()))
			{
/* ++++++++++ v10.00.00 【OM-2014-0003064 】mod start ++++++++++ */
//				sql_BuffFrom.append(" INNER JOIN KK_T_HAPIEK_TG_SVKEI KK0681 ")
//						.append("         ON KK0671.HAPIE_POINT_KEI_NO = KK0681.HAPIE_POINT_KEI_NO ");
				sql_BuffFrom.append(" LEFT OUTER JOIN KK_T_HAPIEK_TG_SVKEI KK0681 ")
						.append("         ON KK0671.HAPIE_POINT_KEI_NO = KK0681.HAPIE_POINT_KEI_NO ")
						.append("        AND (KK0681.SKSN_TRGT_SVKEI_HOSEI_CD IS NULL  OR  KK0681.SKSN_TRGT_SVKEI_HOSEI_CD = '1') ")
						.append("        AND KK0681.MK_FLG = '0' ");
/* ++++++++++ v10.00.00 【OM-2014-0003064 】mod end ++++++++++ */
			}
						
			// SQL文_個別部1
			// (5)
			StringBuffer sql_BuffWhere = new StringBuffer();
			if ( "1".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"2".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"3".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"4".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() )) {
				sql_BuffWhere.append(" WHERE KK0671.MK_FLG = '0' ");

				// サービスIF入力値「ＫＥＹ＿はぴｅ番号」が指定された場合
				if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_HAPIE_NO))
				{
					sql_BuffWhere.append("   AND KK0671.HAPIE_NO = ?  ");
				}
	
				// サービスIF入力値「ＫＥＹ＿ＳＹＳＩＤ」が指定された場合
				if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
				{
					sql_BuffWhere.append("   AND KK0671.SYSID = ?  ");
				}
				
				// サービスIF入力値「ＫＥＹ＿処理対象年月」が指定された場合
				if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_TRN_TG_YM))
				{
					sql_BuffWhere.append("   AND KK0671.POINT_KEI_JDG_REQ_YMD LIKE ?  ")
					// エスケープ付与
					.append(JZMModelCommon.ESCAPE_SQL_STRING);
				}

				// サービスIF入力値「ＫＥＹ＿処理対象時期」が指定された場合
				if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_TRN_TG_JK))
				{
					sql_BuffWhere.append("   AND KK0671.POINT_KEI_JDG_REQ_TG_JK_CD = ?  ");
				}

				// サービスIF入力値「ＫＥＹ＿ｅｏＩＤ」が指定されている、かつ「ＫＥＹ＿ＳＹＳＩＤ」が指定されていない場合
				if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
						 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
				{
					sql_BuffWhere.append("            AND CK0011.EOID = ?  ");
				}

				/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add start ++++++++++ */
				// サービスIF入力値「ＫＥＹ＿サービス契約番号」が指定された場合
				if ( "4".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
					if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SVC_KEI_NO))
					{
						sql_BuffWhere.append("   AND KK0681.SKSN_TRGT_SVC_KEI_NO = ?  ");
					}
				}
				else if ( "1".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE)) ||
						"2".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
					if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SVC_KEI_NO))
					{
						sql_BuffWhere.append("   AND EXISTS ( ")
						 .append("               SELECT 1  ")
						 .append("               FROM KK_T_HAPIEK_TG_SVKEI KK0681  ")
						 .append("               WHERE KK0681.HAPIE_POINT_KEI_NO = KK0671.HAPIE_POINT_KEI_NO  ")
						 .append("               AND   KK0681.SKSN_TRGT_SVC_KEI_NO = ?  ")
						 .append("               AND   KK0681.MK_FLG = '0' ")
						 .append("              ) ");
					}
				}
				else if ( "3".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
						sql_BuffWhere.append("   AND EXISTS ( ")
						 .append("               SELECT 1  ")
						 .append("               FROM KK_T_HAPIEK_TG_SVKEI KK0681  ")
						 .append("               WHERE KK0681.HAPIE_POINT_KEI_NO = KK0671.HAPIE_POINT_KEI_NO  ");
					if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SVC_KEI_NO))
					{
						sql_BuffWhere
						 .append("               AND   KK0681.SKSN_TRGT_SVC_KEI_NO = ?  ");
					}
						sql_BuffWhere
						 .append("               AND   KK0681.SKSN_TRGT_SVKEI_SKEKKA_CD = '00' ")
						 .append("               AND   KK0681.MK_FLG = '0' ")
						 .append("              ) ");
				}
				/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add end ++++++++++ */
				
				if ( "1".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
					// 入力値ではない、後続処理で運用日の前月1日を設定している
					sql_BuffWhere.append("   AND KK0671.POINT_KEI_JDG_REQ_YMD >= ?  ");
				}

				/* ++++++++++ v11.00.00 【ANK-2306-09-00 】del start ++++++++++ */
//				if ( "3".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
//					sql_BuffWhere.append("   AND EXISTS ( ")
//								 .append("               SELECT 1  ")
//								 .append("               FROM KK_T_HAPIEK_TG_SVKEI KK0681  ")
//								 .append("               WHERE KK0681.HAPIE_POINT_KEI_NO = KK0671.HAPIE_POINT_KEI_NO  ")
//								 .append("               AND   KK0681.SKSN_TRGT_SVKEI_SKEKKA_CD = '00' ")
//								 .append("               AND   KK0681.MK_FLG = '0' ")
//								 .append("              ) ");
//				}
				/* ++++++++++ v11.00.00 【ANK-2306-09-00 】del end ++++++++++ */
				
/* ++++++++++ v10.00.00 【OM-2014-0003064 】del start ++++++++++ */
//				if ("4".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE)))
//				{
//					sql_BuffWhere.append("   AND KK0681.MK_FLG = '0' ");
//				}
/* ++++++++++ v10.00.00 【OM-2014-0003064 】del end ++++++++++ */
			}

			// SQL文_ORDER BY部
			// (6)
			StringBuffer sql_BuffOrder = new StringBuffer();
			sql_BuffOrder.append(" ORDER BY KK0671.HAPIE_NO ASC ");
			
			if ( "4".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) 
			{
				sql_BuffOrder.append(" ,HAPIE_POINT_KEI_NO ASC ");
			}
			
			// SQL文の作成(ページングフッタ)
			// (7)	
			StringBuffer sql_BuffPageFooter = new StringBuffer();
				sql_BuffPageFooter.append(" ) ALL_SELECT ")
								.append(" ) PAGE_SELECT ")
								.append(" WHERE PAGE_SELECT.LINE BETWEEN ? AND ? ")
								.append(" ORDER BY PAGE_SELECT.LINE ASC ");

			// SQL文の組立て(件数取得用) (1) + (4) + (5)
			StringBuffer sql_getCount = new StringBuffer();
				sql_getCount.append(sql_BuffCount)
							.append(sql_BuffFrom)
							.append(sql_BuffWhere);

			//prepareStatementにSQL文をセット
			pstmt_Count = con1.prepareStatement(sql_getCount.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_getCount);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ( "1".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"2".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"3".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"4".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() )) {
// v25.00.00 MOD START
				if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
						 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
				{
					// EOIDの条件設定あり
					setPramForCount(inMsg, pstmt_Count, iParamCntr, "1");
				}
				else
				{
					// EOIDの条件設定なし
					setPramForCount(inMsg, pstmt_Count, iParamCntr, "0");
				}
// v25.00.00 MOD END
			}

			// ResultSetの取得
			rsltQuery_Count = pstmt_Count.executeQuery();

			// 総検索件数を取得する
			Long iDataCnt = 0L;
			if (rsltQuery_Count.next())
			{
				iDataCnt = rsltQuery_Count.getLong("CNT");
			}
			
			// 表示件数
			Long iDispNum = inMsg.getStringAsLong(EKK0671B001CBSMsg.DISPLAY_NUM);
			
			// 表示ページ数
			Long iDispPage = inMsg.getStringAsLong(EKK0671B001CBSMsg.DISPLAY_PAGE_NUM);
			
			// 最大取得件数
			Long lMaxNum = inMsg.getStringAsLong(EKK0671B001CBSMsg.MAX_SEARCH_NUM);
			
			// 総ページ数
			String strMaxPage = JKKejbPagingUtil.calcTotalPage(iDataCnt, iDispNum);
			
			// 共通部に値を設定する
			// 総検索件数
			inMsg.set(EKK0671B001CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(iDataCnt));
			
			// 総ページ数
			inMsg.set(EKK0671B001CBSMsg.TOTAL_PAGE_NUM, strMaxPage);
			
			// エラーチェック処理
			// データ取得件数が0件の場合エラー
			if (0L == iDataCnt)
			{
				inMsg.set(EKK0671B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
				return;
			}
			// 最大取得件数を超えた場合エラー
			if (iDataCnt > lMaxNum)
			{
				inMsg.set(EKK0671B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
				return;
			}

			// SQL文の組立て(項目取得・ページング用)(1) + (3) + (4) + (5) + (6) + (7)
			StringBuffer sql_getPage = new StringBuffer();
				sql_getPage.append(sql_BuffPageHeader)
						.append(sql_BuffSelect)
						.append(sql_BuffFrom)
						.append(sql_BuffWhere)
						.append(sql_BuffOrder)
						.append(sql_BuffPageFooter);

			// prepareStatementにSQL文をセット
			pstmt_Page = con1.prepareStatement(sql_getPage.toString());

			// ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_getPage);

			// 検索対象を算出する
			long[] iPages = JKKejbPagingUtil.calcSearchRows(iDispPage, iDispNum);
			long iRowSta = iPages[0];
			long iRowEnd = iPages[1];

			// バインド変数設定順制御用変数の初期化
			iParamCntr = 0;

			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ( "1".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"2".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"3".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() ) ||
					"4".equals( inMsg.getObject(EKK0671B001CBSMsg.FUNC_CODE).toString() )) {
				
				// パラメータの設定
				iParamCntr = setPram(inMsg, pstmt_Page, iParamCntr);
				// パラメータの設定(検索開始行を指定)
				CAANJDBCUtil.setParam(pstmt_Page, ++iParamCntr, iRowSta);
				// パラメータの設定(検索終了行を指定)
				CAANJDBCUtil.setParam(pstmt_Page, ++iParamCntr, iRowEnd);
			}

			// ResultSetの取得
			rsltQuery_Page = pstmt_Page.executeQuery();			
			
			// EKK0671B001CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EKK0671B001CBSMsg1List.HAPIE_NO
					, EKK0671B001CBSMsg1List.HAPIE_POINT_KEI_STAT
					, EKK0671B001CBSMsg1List.HAPIE_POINT_KEI_STAT_NM
					, EKK0671B001CBSMsg1List.HAPIEK_JDG_REQ_JI_STI_ID
					, EKK0671B001CBSMsg1List.EOID
					, EKK0671B001CBSMsg1List.SYSID
					, EKK0671B001CBSMsg1List.HAPIE_MEMBER_CARD_NM
					, EKK0671B001CBSMsg1List.HAPIE_MEMBER_BIRTHD
					, EKK0671B001CBSMsg1List.HAPIE_MEMBER_TELNO
					, EKK0671B001CBSMsg1List.HAPIE_MEMBER_PCD
					, EKK0671B001CBSMsg1List.HAPIE_MEMBER_AD
					, EKK0671B001CBSMsg1List.POINT_KEI_JDG_REQ_YMD
					, EKK0671B001CBSMsg1List.HAPIE_POINT_KEI_HOSEI_YMD
					, EKK0671B001CBSMsg1List.POINT_KEI_SKEKKA_SND_YMD
					, EKK0671B001CBSMsg1List.POINT_KEI_SKEKKA_CD
					, EKK0671B001CBSMsg1List.POINT_KEI_SKEKKA_CD_NM
					, EKK0671B001CBSMsg1List.POINT_KEI_SKEKKA_RSN_CD
					, EKK0671B001CBSMsg1List.POINT_KEI_SKEKKA_RSN_CD_NM
					, EKK0671B001CBSMsg1List.HAPIE_POINT_KEI_NO
					, EKK0671B001CBSMsg1List.SVC_STAYMD
					, EKK0671B001CBSMsg1List.SVC_ENDYMD
					, EKK0671B001CBSMsg1List.POINT_KEI_JUDGE_YMD
					, EKK0671B001CBSMsg1List.HAPIE_MEMBER_CARD_NM_KANA
					, EKK0671B001CBSMsg1List.HAPIEPOINT_KEI_HSK_BIKO
					, EKK0671B001CBSMsg1List.UPD_DTM
					, EKK0671B001CBSMsg1List.SKSN_TRGT_SVKEI_SKEKKA_CD
					/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add start ++++++++++ */
					, EKK0671B001CBSMsg1List.HAPIEPOINT_KEI_CHG_MEMO
					/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add end ++++++++++ */
					
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery_Page,msgKeyList1,"eo.ejb.cbs.cbsmsg.EKK0671B001CBSMsg1List",0);

			// 取得結果が0件の場合は表示ページ該当なしエラー
			if (0L == outMsg1.length)
			{
				inMsg.set(EKK0671B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
				return;
			}

			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK0671B001CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(EKK0671B001CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery_Count != null){
					rsltQuery_Count.close();
				}
				if(rsltQuery_Page != null){
					rsltQuery_Page.close();
				}
				if(pstmt_Count != null){
					pstmt_Count.close();
				}
				if(pstmt_Page != null){
					pstmt_Page.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(EKK0671B001CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}

	/**
	 * <p>
	 * パラメータの設定を行います。
	 * </p>
	 * @param inMsg 入力値の格納されたCBSMsg
	 * @param pstmt プリペアステートメント
	 * @param iParamCntr パラメータのカウント
	 * @return iParamCntr パラメータのカウント
	 * @exception SQLException
	*/
	private int setPram(CAANMsg inMsg, PreparedStatement pstmt, int iParamCntr) throws SQLException
	{
		// パラメータの設定(運用日付を指定)
		CAANJDBCUtil.setParam(pstmt, ++iParamCntr, JKKModelCommon.getOpeDate(inMsg));

		// サービスIF入力値「ＫＥＹ＿はぴｅ番号」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_HAPIE_NO))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_HAPIE_NO));
		}

		// サービスIF入力値「ＫＥＹ＿ＳＹＳＩＤ」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_SYSID));
		}

		// サービスIF入力値「ＫＥＹ＿処理対象年月」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_TRN_TG_YM))
		{
			// LIKE検索文字列置き換え処理
			String wkTrnTgYm = JZMModelCommon.replaceLikeValue(inMsg.getObject(EKK0671B001CBSMsg.KEY_TRN_TG_YM));
			
			// 前方一致
			wkTrnTgYm = wkTrnTgYm + "%";
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, wkTrnTgYm);
		}

		// サービスIF入力値「ＫＥＹ＿処理対象時期」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_TRN_TG_JK))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_TRN_TG_JK));
		}

		// サービスIF入力値「ＫＥＹ＿ｅｏＩＤ」が指定されている、かつ「ＫＥＹ＿ＳＹＳＩＤ」が指定されていない場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
				 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_EOID));
		}

		/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add start ++++++++++ */
		// サービスIF入力値「ＫＥＹ＿サービス契約番号」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SVC_KEI_NO))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_SVC_KEI_NO));
		}
		/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add end ++++++++++ */
		
		if ( "1".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
			// 運用日の前月1日を作る
			try
			{
				String BefOpeDate = JKKModelCommon.addMonth(JKKModelCommon.getOpeDate(inMsg), -1);
				String year = JKKModelCommon.toYearFromYmd(BefOpeDate);
				String month = JKKModelCommon.toMonthFromYmd(BefOpeDate);
				StringBuffer sb = new StringBuffer();
				sb.append(year).append("/").append(month).append("/").append("01");
				CAANJDBCUtil.setParam(pstmt, ++iParamCntr, sb.toString());
			}
			catch (ParseException e)
			{
				inMsg.set(EKK0671B001CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
		return iParamCntr;
	}

// v25.00.00 ADD START（カウント用のバインド設定）
	/**
	 * <p>
	 * パラメータの設定を行います。
	 * </p>
	 * @param inMsg 入力値の格納されたCBSMsg
	 * @param pstmt プリペアステートメント
	 * @param iParamCntr パラメータのカウント
	 * @param eoidJknUmu eoIDの条件設定有無（0:無 1:有）
	 * @return iParamCntr パラメータのカウント
	 * @exception SQLException
	*/
	private int setPramForCount(CAANMsg inMsg, PreparedStatement pstmt, int iParamCntr, String eoidJknUmu) throws SQLException
	{
		if("1".equals(eoidJknUmu))
		{
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, JKKModelCommon.getOpeDate(inMsg));
		}
		
		// サービスIF入力値「ＫＥＹ＿はぴｅ番号」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_HAPIE_NO))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_HAPIE_NO));
		}

		// サービスIF入力値「ＫＥＹ＿ＳＹＳＩＤ」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_SYSID));
		}

		// サービスIF入力値「ＫＥＹ＿処理対象年月」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_TRN_TG_YM))
		{
			// LIKE検索文字列置き換え処理
			String wkTrnTgYm = JZMModelCommon.replaceLikeValue(inMsg.getObject(EKK0671B001CBSMsg.KEY_TRN_TG_YM));
			
			// 前方一致
			wkTrnTgYm = wkTrnTgYm + "%";
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, wkTrnTgYm);
		}

		// サービスIF入力値「ＫＥＹ＿処理対象時期」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_TRN_TG_JK))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_TRN_TG_JK));
		}

		// サービスIF入力値「ＫＥＹ＿ｅｏＩＤ」が指定されている、かつ「ＫＥＹ＿ＳＹＳＩＤ」が指定されていない場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_EOID)
				 && inMsg.isNull(EKK0671B001CBSMsg.KEY_SYSID))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_EOID));
		}

		/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add start ++++++++++ */
		// サービスIF入力値「ＫＥＹ＿サービス契約番号」が指定された場合
		if(!inMsg.isNull(EKK0671B001CBSMsg.KEY_SVC_KEI_NO))
		{
			CAANJDBCUtil.setParam(pstmt, ++iParamCntr, inMsg.getString(EKK0671B001CBSMsg.KEY_SVC_KEI_NO));
		}
		/* ++++++++++ v11.00.00 【ANK-2306-09-00 】add end ++++++++++ */
		
		if ( "1".equals( inMsg.getString(EKK0671B001CBSMsg.FUNC_CODE))) {
			// 運用日の前月1日を作る
			try
			{
				String BefOpeDate = JKKModelCommon.addMonth(JKKModelCommon.getOpeDate(inMsg), -1);
				String year = JKKModelCommon.toYearFromYmd(BefOpeDate);
				String month = JKKModelCommon.toMonthFromYmd(BefOpeDate);
				StringBuffer sb = new StringBuffer();
				sb.append(year).append("/").append(month).append("/").append("01");
				CAANJDBCUtil.setParam(pstmt, ++iParamCntr, sb.toString());
			}
			catch (ParseException e)
			{
				inMsg.set(EKK0671B001CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
		return iParamCntr;
	}
// v25.00.00 ADD END
}
