/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEDK0301B020TPDA
*	ソースファイル名：JSYejbEDK0301B020TPDA.java
*	作成者			：EK909139
*	日付			：2011年06月23日
*＜機能概要＞
*	SQLFacility
*	テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*   ｖ10.00.00  2014/10/08  FJ)中野     IT1-2014-0000321
*	ｖ23.00.00	2016/02/29	FJ)藤本		【OM-2016-0000500】性能改善
*
********************************************************************************/

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 static eo.common.util.JDKCommonUtil.*;
import static eo.common.constant.JPCModelConstant.*;
import static eo.ejb.common.JDKModelCommon.cd;
import eo.ejb.cbs.cbsmsg.EDK0301B020CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301B020CBSMsg1List;
import eo.ejb.cbm.entity.DK0031ETMsg;
import eo.ejb.common.JDKModelCommon;
import static eo.ejb.common.JDKModelCommon.*;
import static eo.common.constant.JZM0171Constant.*;

/**
*
*  テンプレートDBアクセス部品　EDK0301B020_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*  @author 富士通
*/
public class JSYejbEDK0301B020TPDA extends CAANSQLFacility implements TemplateDBAccessHandler
{
	
	private static final String[] msgKeyList2 = {
			EDK0301B020CBSMsg1List.HMPIN_KIKI_NO
			, EDK0301B020CBSMsg1List.HMPIN_KIKI_STAT
			, EDK0301B020CBSMsg1List.HMPIN_KIKI_STAT_NM
			, EDK0301B020CBSMsg1List.SOKO_CD
			, EDK0301B020CBSMsg1List.SOKO_NM
			, EDK0301B020CBSMsg1List.HMPIN_SBT_CD
			, EDK0301B020CBSMsg1List.HMPIN_SBT_NM
			, EDK0301B020CBSMsg1List.HMPIN_UK_YMD
			, EDK0301B020CBSMsg1List.TAKNKIKI_MODEL_CD
			, EDK0301B020CBSMsg1List.KIKI_SEIZO_NO
			, EDK0301B020CBSMsg1List.SHUKKA_LOT_NO
			, EDK0301B020CBSMsg1List.SVC_KEI_NO
			, EDK0301B020CBSMsg1List.SVC_END_YMD
			, EDK0301B020CBSMsg1List.KOJIAK_NO
			, EDK0301B020CBSMsg1List.TK_SBT_CD
			, EDK0301B020CBSMsg1List.TK_SBT_CD_NM
			, EDK0301B020CBSMsg1List.HMPIN_RSN_CD
			, EDK0301B020CBSMsg1List.HMPIN_RSN_NM
			, EDK0301B020CBSMsg1List.HMPIN_RSN_MEMO
			, EDK0301B020CBSMsg1List.GDS_STAT_CD
			, EDK0301B020CBSMsg1List.GDS_STAT_NM
			, EDK0301B020CBSMsg1List.HMPINSHA_PCD
			, EDK0301B020CBSMsg1List.HMPINSHA_STATE_NM
			, EDK0301B020CBSMsg1List.HMPINSHA_CITY_NM
			, EDK0301B020CBSMsg1List.HMPINSHA_OAZTSU_NM
			, EDK0301B020CBSMsg1List.HMPINSHA_AZCHO_NM
			, EDK0301B020CBSMsg1List.HMPINSHA_BNCHIGO
			, EDK0301B020CBSMsg1List.HMPINSHA_ADRTTM
			, EDK0301B020CBSMsg1List.HMPINSHA_ADRRM
			, EDK0301B020CBSMsg1List.HMPINSHA_TELNO
			, EDK0301B020CBSMsg1List.HMPINSHA_NM
			, EDK0301B020CBSMsg1List.KEISHA_NM
			, EDK0301B020CBSMsg1List.RENT_DSL_MSKMSHO_UM
			, EDK0301B020CBSMsg1List.RENT_DSL_MSKMSHO_UM_NM
			, EDK0301B020CBSMsg1List.WMS_HMPIN_NO
			, EDK0301B020CBSMsg1List.WMS_REC_SEQ
			, EDK0301B020CBSMsg1List.HMPIN_UPD_DTM
			, EDK0301B020CBSMsg1List.KKTK_SVC_KEI_NO
			, EDK0301B020CBSMsg1List.KKTK_SVC_GENE_ADD_DTM
			, EDK0301B020CBSMsg1List.HMPIN_DIV
			, EDK0301B020CBSMsg1List.KIKI_CHG_NO
	};
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEDK0301B020TPDA()
	{
	}
	
	/**
	*   EDK0301B020_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @param inContext コンテキスト
	*/
	public void invoke(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		if ("1".equals(inMsg.getString(EDK0301B020CBSMsg.FUNC_CODE))) 
		{
			invokeFindLimited(inMsg, inContext);
		}
		else if ("2".equals(inMsg.getString(EDK0301B020CBSMsg.FUNC_CODE)))
		{
			invokeFindAll(inMsg, inContext);
		}
	}

	/**
	*   EDK0301B020_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @param inContext コンテキスト
	*/
	public void invokeFindLimited(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmtForCount = null;
		PreparedStatement pstmtForFetch = null;
		
		// リザルトセット
		ResultSet rsltQueryForCount = null;
		ResultSet rsltQueryForFetch = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try
		{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0031ETMsg.getTableName());
			
			String sql = makeSqlForCount(makeSql(inMsg, inContext, 1));
			//prepareStatementにSQL文をセット
			pstmtForCount = con1.prepareStatement(sql);
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			setParameters(pstmtForCount, inMsg);
			
			// ResultSetの取得
			rsltQueryForCount = pstmtForCount.executeQuery();
			
			// EDK0301B020CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					EDK0301B020CBSMsg.TOTAL_SEARCH_NUM
			};
			
			rsltQueryForCount.next();
			mapMessage(rsltQueryForCount, msgKeyList1, inMsg);
			
			// 総ページ数設定
			int iTotal = Integer.parseInt(inMsg.getString(EDK0301B020CBSMsg.TOTAL_SEARCH_NUM));
			int iDispNum = Integer.parseInt(inMsg.getString(EDK0301B020CBSMsg.DISPLAY_NUM));
			int iSearchDivDisp =  iTotal / iDispNum;
			int iRest =  iTotal % iDispNum;
			// 割り切れない場合は総ページ数を増やす
			if (0 != iRest)
			{
				iSearchDivDisp = iSearchDivDisp + 1;
			}
			inMsg.set(EDK0301B020CBSMsg.TOTAL_PAGE_NUM, Integer.toString(iSearchDivDisp));
			
			// 検索件数が0件の場合、エラーフラグに"1"を設定して処理終了
			if (0 == (Integer.parseInt(inMsg.getString(EDK0301B020CBSMsg.TOTAL_SEARCH_NUM))))
			{
				inMsg.set(EDK0301B020CBSMsg.SEARCH_ERR_FLG, SEARCH_ERR_FLG_ZERO);
				return;
			}
			// 検索件数が最大検索件数を超えた場合、エラーフラグに"2"を設定して処理終了
			if (Integer.parseInt(inMsg.getString(EDK0301B020CBSMsg.MAX_SEARCH_NUM))
					< (Integer.parseInt(inMsg.getString(EDK0301B020CBSMsg.TOTAL_SEARCH_NUM))))
			{
				inMsg.set(EDK0301B020CBSMsg.SEARCH_ERR_FLG, SEARCH_ERR_FLG_OVERMAX);
				return;
			}
			// 表示ページに該当するデータがない場合、エラーフラグに"3"を設定して処理終了
			int iDispPageNum = Integer.parseInt(inMsg.getString(EDK0301B020CBSMsg.DISPLAY_PAGE_NUM));
			int iStartNum = iDispNum * (iDispPageNum - 1) + 1;
			int iEndNum = iDispNum * iDispPageNum;
			if (iSearchDivDisp < iDispPageNum)
			{
				inMsg.set(EDK0301B020CBSMsg.SEARCH_ERR_FLG, SEARCH_ERR_FLG_NODATA);
				return;
			}
			
			// 20160229 OM-2016-0000500 性能改善 MOD START
//			sql = makeSqlForRealm(makeSql(inMsg, inContext), "col", "row_num");
			sql = makeSql(inMsg, inContext)
				+ " WHERE DK0301.ROW_NUMBER BETWEEN ? AND ? "
				+ " ORDER BY DK0301.ROW_NUMBER ";
			// 20160229 OM-2016-0000500 性能改善 MOD END
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			pstmtForFetch = con1.prepareStatement(sql);
			int index = setParameters(pstmtForFetch, inMsg);
			
			// ページング項目（検索処理パターン）
			// パラメータの設定(画面表示データ開始レコード行を指定)
			CAANJDBCUtil.setParam(pstmtForFetch, index++, iStartNum);
			// パラメータの設定(画面表示データ終了レコード行を指定)
			CAANJDBCUtil.setParam(pstmtForFetch, index++, iEndNum);
			
			
			// ResultSetの取得
			rsltQueryForFetch = pstmtForFetch.executeQuery();
			
			// EDK0301B020CBSMsgの明細にセットする項目

			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQueryForFetch, msgKeyList2, "eo.ejb.cbs.cbsmsg.EDK0301B020CBSMsg1List", 0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0301B020CBSMsg1List", outMsg1);
			

		}
		catch(SQLException e)
		{
			inMsg.set(EDK0301B020CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			// 資源の解放
			try
			{
				SQLException e = JDKModelCommon.close(pstmtForCount, pstmtForFetch, rsltQueryForCount, rsltQueryForFetch);
				if(con1 != null){
					closeConnection(con1);
				}
				if (e != null)
				{
					throw e;
				}
			}
			catch(SQLException e)
			{
				inMsg.set(EDK0301B020CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	*   EDK0301B020_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @param inContext コンテキスト
	*/
	public void invokeFindAll(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try
		{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0031ETMsg.getTableName());
			
			// 20160229 OM-2016-0000500 性能改善 MOD START
//			String sql = makeSql(inMsg, inContext);
			String sql = makeSql(inMsg, inContext)
					   + " ORDER BY DK0301.ROW_NUMBER ";
			// 20160229 OM-2016-0000500 性能改善 MOD END
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			pstmt = con1.prepareStatement(sql);
			setParameters(pstmt, inMsg);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery, msgKeyList2, "eo.ejb.cbs.cbsmsg.EDK0301B020CBSMsg1List", 0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0301B020CBSMsg1List", outMsg1);
			
			// 検索件数が0件の場合、エラーフラグに"1"を設定して処理終了
			if (0 == (outMsg1.length))
			{
				inMsg.set(EDK0301B020CBSMsg.SEARCH_ERR_FLG, SEARCH_ERR_FLG_ZERO);
				return;
			}

		} 
		catch(SQLException e)
		{
			inMsg.set(EDK0301B020CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally 
		{
			// 資源の解放
			try
			{
				SQLException e = JDKModelCommon.close(pstmt, rsltQuery);
				if(con1 != null){
					closeConnection(con1);
				}
				if (e != null)
				{
					throw e;
				}
			}
			catch(SQLException e)
			{
				inMsg.set(EDK0301B020CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	
	/**
	 * SQLを生成する
	 * @param inMsg インプットデータ
	 * @param inContext コンテキスト
	 * @return SQL
	 */
	private String makeSql(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		return makeSql(inMsg, inContext, 0);
	}
	/**
	 * SQLを生成する
	 * @param inMsg インプットデータ
	 * @param inContext コンテキスト
	 * @param inContext 
	 * @return SQL
	 */
	private String makeSql(CAANMsg inMsg, AgentDispatchContext inContext, int serchType)
	{
		// SQL文_基本部1
		StringBuffer sql_Buff = new StringBuffer();
		sql_Buff.append(" SELECT ")
				.append("   DK0301.HMPIN_KIKI_NO col_HMPIN_KIKI_NO, ")
				.append("   DK0301.HMPIN_KIKI_STAT col_HMPIN_KIKI_STAT, ")
				.append(    cd(CD00296, "DK0301.HMPIN_KIKI_STAT", COMMA.RIGHT, "col_HMPIN_KIKI_STAT_NM"))
				.append("   DK0301.SOKO_CD col_SOKO_CD, ")
				.append("   (SELECT SOKO.SOKO_NM ")
				.append("      FROM DK_M_SOKO SOKO")
				.append("     WHERE DK0301.SOKO_CD = SOKO.SOKO_CD ")
				.append("       AND SOKO.SOKO_TSTAYMD <= ? ")
				.append("       AND SOKO.MK_FLG = '0' ")
				.append("    ) col_SOKO_NM, ")
				.append("   DK0301.HMPIN_SBT_CD col_HMPIN_SBT_CD, ")
				.append(    cd(CD00292, "DK0301.HMPIN_SBT_CD", COMMA.RIGHT, "col_HMPIN_SBT_NM"))
				.append("   DK0301.HMPIN_KURAIRE_YMD col_HMPIN_UK_YMD, ")
				.append("   NVL (DK0301.TAKNKIKI_MODEL_CD, DK0301.HUZOKUHIN_MODEL_CD) col_TAKNKIKI_MODEL_CD, ")
				.append("   DK0301.KIKI_SEIZO_NO col_KIKI_SEIZO_NO, ")
				.append("   DK0301.LOAD_SHKA_LOT_NO col_SHUKKA_LOT_NO, ")
				.append("   DK0301.LOAD_OYA_SVKEI_NO col_SVC_KEI_NO, ")
				.append("   (SELECT KK0081.SVC_ENDYMD ")
				.append("      FROM KK_T_SVC_KEI KK0081 ")
				.append("     WHERE DK0301.LOAD_OYA_SVKEI_NO = KK0081.SVC_KEI_NO ")
				// 20160229 OM-2016-0000500 性能改善 MOD START
//				.append("       AND DK0301.KK0081_KEY = KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM ")
				.append("       AND KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM ")
				.append("           = (SELECT MAX(KK0081_GEN.RSV_APLY_YMD || KK0081_GEN.GENE_ADD_DTM) ")
				.append("                FROM KK_T_SVC_KEI KK0081_GEN ")
				.append("               WHERE KK0081_GEN.SVC_KEI_NO = DK0301.LOAD_OYA_SVKEI_NO ")
				.append("                 AND KK0081_GEN.RSV_APLY_YMD <= ? ")
				.append("                 AND KK0081_GEN.MK_FLG = '0') ")
				// 20160229 OM-2016-0000500 性能改善 MOD END
				.append("    ) col_SVC_END_YMD, ")
				.append("   DK0301.KOJIAK_NO col_KOJIAK_NO, ")
				.append("   DK0301.TK_SBT_CD col_TK_SBT_CD, ")
				.append(    cd(CD00212, "DK0301.TK_SBT_CD", COMMA.RIGHT, "col_TK_SBT_CD_NM"))
				.append("   DK0301.HMPIN_RSN_CD col_HMPIN_RSN_CD, ")
				.append(    cd(CD00293, "DK0301.HMPIN_RSN_CD", COMMA.RIGHT, "col_HMPIN_RSN_NM"))
				.append("   DK0301.HMPIN_RSN_MEMO col_HMPIN_RSN_MEMO, ")
				.append("   DK0301.GDS_STAT_CD col_GDS_STAT_CD, ")
				.append(    cd(CD00274, "DK0301.GDS_STAT_CD", COMMA.RIGHT, "col_GDS_STAT_NM"))
				.append("   DK0301.HMPINSHA_PCD col_HMPINSHA_PCD, ")
				.append("   DK0301.HMPINSHA_STATE_NM col_HMPINSHA_STATE_NM, ")
				.append("   DK0301.HMPINSHA_CITY_NM col_HMPINSHA_CITY_NM, ")
				.append("   DK0301.HMPINSHA_OAZTSU_NM col_HMPINSHA_OAZTSU_NM, ")
				.append("   DK0301.HMPINSHA_AZCHO_NM col_HMPINSHA_AZCHO_NM, ")
				.append("   DK0301.HMPINSHA_BNCHIGO col_HMPINSHA_BNCHIGO, ")
				.append("   DK0301.HMPINSHA_ADRTTM col_HMPINSHA_ADRTTM, ")
				.append("   DK0301.HMPINSHA_ADRRM col_HMPINSHA_ADRRM, ")
				.append("   DK0301.HMPINSHA_TELNO col_HMPINSHA_TELNO, ")
				.append("   DK0301.HMPINSHA_NM col_HMPINSHA_NM, ")
				.append("   DK0301.HMPIN_MT_KSH_NM col_KEISHA_NM, ")
				.append("   DK0301.RENT_DSL_MSKMSHO_UM col_RENT_DSL_MSKMSHO_UM, ")
				// IT1-2014-0000321 MOD START  
				// .append(    cd(CD00002, "DK0301.RENT_DSL_MSKMSHO_UM", COMMA.RIGHT, "col_RENT_DSL_MSKMSHO_UM_NM"))
				.append(    cd(CD01598, "DK0301.RENT_DSL_MSKMSHO_UM", COMMA.RIGHT, "col_RENT_DSL_MSKMSHO_UM_NM"))
				// IT1-2014-0000321 MOD END
				.append("   DK0301.WMS_HMPIN_NO col_WMS_HMPIN_NO, ")
				.append("   DK0301.WMS_REC_SEQ col_WMS_REC_SEQ, ")
				.append("   DK0301.UPD_DTM col_HMPIN_UPD_DTM, ")
				.append("   DK0301.KKTK_SVC_KEI_NO col_KKTK_SVC_KEI_NO, ")
				.append("    ( SELECT KK0341.GENE_ADD_DTM ")
				.append("        FROM KK_T_KKTK_SVC_KEI KK0341 ")
				.append("       WHERE DK0301.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO ")
				// 20160229 OM-2016-0000500 性能改善 MOD START
//				.append("         AND DK0301.KK0341_KEY = KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM ")
				.append("         AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM ")
				.append("             = (SELECT MAX(KK0341_GEN.RSV_APLY_YMD || KK0341_GEN.GENE_ADD_DTM) ")
				.append("                  FROM KK_T_KKTK_SVC_KEI KK0341_GEN ")
				.append("                 WHERE KK0341_GEN.KKTK_SVC_KEI_NO = DK0301.KKTK_SVC_KEI_NO ")
				.append("                   AND KK0341_GEN.KIKI_CHG_NO = DK0301.KIKI_CHG_NO ")
				.append("                   AND KK0341_GEN.RSV_APLY_YMD <= ? ")
				.append("                   AND KK0341_GEN.MK_FLG = '0') ")
				// 20160229 OM-2016-0000500 性能改善 MOD END
				.append("    ) col_ADD_GENE_DTM, ")
				.append("   DK0301.HMPIN_DIV col_HMPIN_DIV, ")
				.append("   DK0301.KIKI_CHG_NO col_KIKI_CHG_NO ")
				.append(" FROM (")
				.append("   SELECT ")
				.append("      DK0301_TMP.HMPIN_KIKI_NO ")
				.append("     ,DK0301_TMP.HMPIN_KIKI_STAT  ")
				.append("     ,DK0301_TMP.SOKO_CD  ")
				.append("     ,DK0301_TMP.HMPIN_SBT_CD  ")
				.append("     ,DK0301_TMP.HMPIN_KURAIRE_YMD  ")
				.append("     ,DK0301_TMP.TAKNKIKI_MODEL_CD ")
				.append("     ,DK0301_TMP.HUZOKUHIN_MODEL_CD ")
				.append("     ,DK0301_TMP.KIKI_SEIZO_NO  ")
				.append("     ,DK0301_TMP.LOAD_SHKA_LOT_NO  ")
				.append("     ,DK0301_TMP.LOAD_OYA_SVKEI_NO  ")
				.append("     ,DK0301_TMP.KOJIAK_NO  ")
				.append("     ,DK0301_TMP.TK_SBT_CD  ")
				.append("     ,DK0301_TMP.HMPIN_RSN_CD  ")
				.append("     ,DK0301_TMP.HMPIN_RSN_MEMO  ")
				.append("     ,DK0301_TMP.GDS_STAT_CD  ")
				.append("     ,DK0301_TMP.HMPINSHA_PCD  ")
				.append("     ,DK0301_TMP.HMPINSHA_STATE_NM  ")
				.append("     ,DK0301_TMP.HMPINSHA_CITY_NM  ")
				.append("     ,DK0301_TMP.HMPINSHA_OAZTSU_NM  ")
				.append("     ,DK0301_TMP.HMPINSHA_AZCHO_NM  ")
				.append("     ,DK0301_TMP.HMPINSHA_BNCHIGO  ")
				.append("     ,DK0301_TMP.HMPINSHA_ADRTTM  ")
				.append("     ,DK0301_TMP.HMPINSHA_ADRRM  ")
				.append("     ,DK0301_TMP.HMPINSHA_TELNO  ")
				.append("     ,DK0301_TMP.HMPINSHA_NM  ")
				.append("     ,DK0301_TMP.HMPIN_MT_KSH_NM  ")
				.append("     ,DK0301_TMP.RENT_DSL_MSKMSHO_UM  ")
				.append("     ,DK0301_TMP.WMS_HMPIN_NO  ")
				.append("     ,DK0301_TMP.WMS_REC_SEQ  ")
				.append("     ,DK0301_TMP.UPD_DTM  ")
				.append("     ,DK0301_TMP.KKTK_SVC_KEI_NO  ")
				.append("     ,DK0301_TMP.HMPIN_DIV  ")
				.append("     ,DK0301_TMP.KIKI_CHG_NO  ")
				// 20160229 OM-2016-0000500 性能改善 DEL START
//				.append("     ,(SELECT MAX(KK0081_GEN.RSV_APLY_YMD || KK0081_GEN.GENE_ADD_DTM) ")
//				.append("              FROM KK_T_SVC_KEI KK0081_GEN ")
//				.append("             WHERE KK0081_GEN.SVC_KEI_NO = DK0301_TMP.LOAD_OYA_SVKEI_NO ")
//				.append("               AND KK0081_GEN.RSV_APLY_YMD <= ? ")
////				.append("               AND KK0081_GEN.RSV_APLY_CD = '2' ")
//				.append("               AND KK0081_GEN.MK_FLG = '0') KK0081_KEY ")
//				.append("     ,(SELECT MAX(KK0341_GEN.RSV_APLY_YMD || KK0341_GEN.GENE_ADD_DTM) ")
//				.append("              FROM KK_T_KKTK_SVC_KEI KK0341_GEN ")
//				.append("             WHERE KK0341_GEN.KKTK_SVC_KEI_NO = DK0301_TMP.KKTK_SVC_KEI_NO ")
//				.append("               ANd KK0341_GEN.KIKI_CHG_NO = DK0301_TMP.KIKI_CHG_NO ")
//				.append("               AND KK0341_GEN.RSV_APLY_YMD <= ? ")
////				.append("               AND KK0341_GEN.RSV_APLY_CD = '2' ")
//				.append("               AND KK0341_GEN.MK_FLG = '0') KK0341_KEY ")
				// 20160229 OM-2016-0000500 性能改善 DEL END
				// 20160229 OM-2016-0000500 性能改善 ADD START
				.append("     ,ROW_NUMBER() OVER(ORDER BY ");
				if ("0".equals(inMsg.getString(EDK0301B020CBSMsg.KEY_HMPIN_CHSHT_JOKEN_CD)))
				{
					sql_Buff.append("   DK0301_TMP.SOKO_CD ASC")
							.append(" , DK0301_TMP.HMPIN_KURAIRE_YMD ASC")
							.append(" , DK0301_TMP.LOAD_OYA_SVKEI_NO ASC ")
							.append(" , NVL(DK0301_TMP.TAKNKIKI_MODEL_CD, DK0301_TMP.HUZOKUHIN_MODEL_CD) ASC ");
				}
				else
				{
					sql_Buff.append("   DK0301_TMP.SOKO_CD ASC ")
							.append(" , DK0301_TMP.HMPIN_KURAIRE_YMD DESC ")
							.append(" , DK0301_TMP.LOAD_OYA_SVKEI_NO ASC ")
							.append(" , NVL(DK0301_TMP.TAKNKIKI_MODEL_CD, DK0301_TMP.HUZOKUHIN_MODEL_CD) ASC ");
				}
				sql_Buff.append("     ) ROW_NUMBER ")
				// 20160229 OM-2016-0000500 性能改善 ADD END
				.append("  FROM DK_T_HMPIN_KIKI DK0301_TMP ")
				.append(" WHERE DK0301_TMP.MK_FLG = '0' ")
				.append("   AND DK0301_TMP.HMPIN_KIKI_STAT = ? ");
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_SOKO_CD,                    "DK0301_TMP.SOKO_CD = ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_SBT_CD,               "DK0301_TMP.HMPIN_SBT_CD = ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_SVC_KEI_NO,                 "DK0301_TMP.LOAD_OYA_SVKEI_NO = ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_ANKEN_NO,                   "DK0301_TMP.KOJIAK_NO = ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_TAKNKIKI_MODEL_CD,          "NVL(DK0301_TMP.TAKNKIKI_MODEL_CD, DK0301_TMP.HUZOKUHIN_MODEL_CD) = ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_KIKI_SEIZO_NO,              "DK0301_TMP.KIKI_SEIZO_NO = ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_UK_YMD_FROM,          "DK0301_TMP.HMPIN_KURAIRE_YMD >= ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_UK_YMD_TO,            "DK0301_TMP.HMPIN_KURAIRE_YMD <= ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_FROM, "DK0301_TMP.HMPIN_KIKI_SHONIN_YMD >= ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_TO,   "DK0301_TMP.HMPIN_KIKI_SHONIN_YMD <= ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_CL_YMD_FROM,     "DK0301_TMP.HMPIN_KIKI_CL_YMD >= ?", inMsg, sql_Buff);
		appendSqlIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_CL_YMD_TO,       "DK0301_TMP.HMPIN_KIKI_CL_YMD <= ?", inMsg, sql_Buff);
		
		//検索件数取得用SQLの場合
		if(serchType == 1)
		{
			sql_Buff.append(makeSqlForRownum(inMsg, EDK0301B020CBSMsg.MAX_SEARCH_NUM));
		}
			
		sql_Buff.append(" ) DK0301 ");
		// 20160229 OM-2016-0000500 性能改善 DEL START
//		sql_Buff.append(" ORDER BY  ");
//		if ("0".equals(inMsg.getString(EDK0301B020CBSMsg.KEY_HMPIN_CHSHT_JOKEN_CD)))
//		{
//			sql_Buff.append("   DK0301.SOKO_CD ASC")
//					.append(" , DK0301.HMPIN_KURAIRE_YMD ASC")
//					.append(" , DK0301.LOAD_OYA_SVKEI_NO ASC ")
//					.append(" , NVL(DK0301.TAKNKIKI_MODEL_CD, DK0301.HUZOKUHIN_MODEL_CD) ASC ");
//		}
//		else
//		{
//			sql_Buff.append("   DK0301.SOKO_CD ASC ")
//					.append(" , DK0301.HMPIN_KURAIRE_YMD DESC ")
//					.append(" , DK0301.LOAD_OYA_SVKEI_NO ASC ")
//					.append(" , NVL(DK0301.TAKNKIKI_MODEL_CD, DK0301.HUZOKUHIN_MODEL_CD) ASC ");
//		}
		// 20160229 OM-2016-0000500 性能改善 DEL END
		
		return sql_Buff.toString();
	}
	
	/**
	 * SQLにパラメータを設定します。
	 * @param pstmt ステートメント
	 * @param inMsg メッセージ
	 * @throws SQLException 例外発生時
	 * @return パラメータの最終インデックス
	 */
	private int setParameters(PreparedStatement pstmt, CAANMsg inMsg) throws SQLException
	{
		// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
		int index = 1;
		// パラメータの設定(ＫＥＹ＿運用日付を指定)
		while (index <= 9)
		{
			index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_UNYO_YMD, index, inMsg, pstmt);
		}
		// パラメータの設定(ＫＥＹ＿返品抽出条件コードを指定)
		if ("0".equals(inMsg.getString(EDK0301B020CBSMsg.KEY_HMPIN_CHSHT_JOKEN_CD)))
		{
			CAANJDBCUtil.setParam(pstmt, index++, "002");
		}
		else if ("1".equals(inMsg.getString(EDK0301B020CBSMsg.KEY_HMPIN_CHSHT_JOKEN_CD)))
		{
			CAANJDBCUtil.setParam(pstmt, index++, "003");
		}
		
		// パラメータの設定(ＫＥＹ＿倉庫コードを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_SOKO_CD, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿返品種別コードを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_SBT_CD, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿サービス契約番号を指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_SVC_KEI_NO, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿案件番号を指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_ANKEN_NO, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿宅内機器型式コードを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_TAKNKIKI_MODEL_CD, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿機器製造番号を指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_KIKI_SEIZO_NO, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿返品日ＦＲＯＭを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_UK_YMD_FROM, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿返品日ＴＯを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_UK_YMD_TO, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿承認日ＦＲＯＭを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_FROM, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿承認日ＴＯを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_TO, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿取消日ＦＲＯＭを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_CL_YMD_FROM, index, inMsg, pstmt);
		// パラメータの設定(ＫＥＹ＿取消日ＴＯを指定)
		index = appendParamIfAnyInput(EDK0301B020CBSMsg.KEY_HMPIN_KIKI_CL_YMD_TO, index, inMsg, pstmt);
		
		return index;
	}
}

