/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEDK0301B040TPDA
*	ソースファイル名：JSYejbEDK0301B040TPDA.java
*	作成者			：EK909139
*	日付			：2011年08月09日
*＜機能概要＞
*	返品データ一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ5.00.00	2013/11/06	富士通		SQL変更(性能障害対応）OM-2013-0003904
*	ｖ13.00.00	2015/03/23	FJ) 大山	IT1-2015-0000033 性能対応
*	ｖ14.00.00	2015/06/16	FJ)中山		【OM-2015-0001309】性能改善
*	ｖ23.00.00	2016/02/25	FJ)藤本		【OM-2016-0000501】性能改善
********************************************************************************/

package eo.ejb.cbs.sqlf;

import static eo.common.constant.JPCModelConstant.SEARCH_ERR_FLG_NODATA;
import static eo.common.constant.JPCModelConstant.SEARCH_ERR_FLG_OVERMAX;
import static eo.common.constant.JPCModelConstant.SEARCH_ERR_FLG_ZERO;
import static eo.common.util.JDKCommonUtil.appendParamIfAnyInput;
import static eo.common.util.JDKCommonUtil.appendSqlIfAnyInput;
import static eo.common.util.JDKCommonUtil.makeSqlForCount;

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.ejb.cbs.cbsmsg.EDK0301B040CBSMsg.*;
import eo.common.util.JDKCommonUtil;
import eo.ejb.cbs.cbsmsg.EDK0301B040CBSMsg1List;
import eo.ejb.cbm.entity.DK0301ETMsg;
import eo.ejb.common.JDKModelCommon;
import eo.ejb.common.JDKModelCommon.COMMA;
import static eo.ejb.common.JDKModelCommon.*;
import static eo.common.constant.JZM0171Constant.*;

/**
*
*  テンプレートDBアクセス部品　EDK0301B040_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEDK0301B040TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	// 商品状態の値のセパレータ
	private static final String GDS_COND_SEPARATOR = ";";
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEDK0301B040TPDA()	{
	}

	/**
	*   EDK0301B040_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		if ("1".equals(inMsg.getString(FUNC_CODE))) 
		{
			findLimited(inMsg, inContext);
		}
		else if ("2".equals(inMsg.getString(FUNC_CODE)))
		{
			findAll(inMsg, inContext);
		}
	}
	

	/**
	*   EDK0301B040_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	private void findLimited(CAANMsg inMsg,AgentDispatchContext inContext){

		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmtForCount = null;
		PreparedStatement pstmtForFetch = null;
		
		// リザルトセット
		ResultSet rsltQueryForCount = null;
		ResultSet rsltQueryForFetch = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0301ETMsg.getTableName());
			
			// SQL文_基本部1
			String sql = makeSqlForCount(makeSql(inMsg, inContext, 1));

			//prepareStatementにSQL文をセット
			pstmtForCount = con1.prepareStatement(sql.toString());
//OM-2015-0001309 MOD START
//			setParameters(pstmtForCount, inMsg);
			setParameters(pstmtForCount, inMsg, 1);
//OM-2015-0001309 MOD END
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			// ResultSetの取得
			rsltQueryForCount = pstmtForCount.executeQuery();
			
			// EDK0301B020CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					TOTAL_SEARCH_NUM
			};

			rsltQueryForCount.next();
			mapMessage(rsltQueryForCount, msgKeyList1, inMsg);

			// 総ページ数設定
			int iTotal = Integer.parseInt(inMsg.getString(TOTAL_SEARCH_NUM));
			int iDispNum = Integer.parseInt(inMsg.getString(DISPLAY_NUM));
			int iSearchDivDisp =  iTotal / iDispNum;
			int iRest =  iTotal % iDispNum;
			// 割り切れない場合は総ページ数を増やす
			if (0 != iRest)
			{
				iSearchDivDisp = iSearchDivDisp + 1;
			}
			inMsg.set(TOTAL_PAGE_NUM, Integer.toString(iSearchDivDisp));
			
			// 検索件数が0件の場合、エラーフラグに"1"を設定して処理終了
			if (0 == (Integer.parseInt(inMsg.getString(TOTAL_SEARCH_NUM))))
			{
				inMsg.set(SEARCH_ERR_FLG, SEARCH_ERR_FLG_ZERO);
				return;
			}
			// 検索件数が最大検索件数を超えた場合、エラーフラグに"2"を設定して処理終了
			if (Integer.parseInt(inMsg.getString(MAX_SEARCH_NUM))
					< (Integer.parseInt(inMsg.getString(TOTAL_SEARCH_NUM))))
			{
				inMsg.set(SEARCH_ERR_FLG, SEARCH_ERR_FLG_OVERMAX);
				return;
			}
			// 表示ページに該当するデータがない場合、エラーフラグに"3"を設定して処理終了
			int iDispPageNum = Integer.parseInt(inMsg.getString(DISPLAY_PAGE_NUM));
			int iStartNum = iDispNum * (iDispPageNum - 1) + 1;
			int iEndNum = iDispNum * iDispPageNum;
			if (iSearchDivDisp < iDispPageNum)
			{
				inMsg.set(SEARCH_ERR_FLG, SEARCH_ERR_FLG_NODATA);
				return;
			}

//OM-2015-0001309 MOD START
//			sql = makeSqlForRealm(makeSql(inMsg, inContext), "COL", "ROW_NUM");
			sql = this.makeSqlForRealm(makeSql(inMsg, inContext));
//OM-2015-0001309 MOD END

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			pstmtForFetch = con1.prepareStatement(sql);
//OM-2015-0001309 MOD START
//			int index = setParameters(pstmtForFetch, inMsg);
			int index = setParameters(pstmtForFetch, inMsg,
					setParamTimes(KEY_UNYO_YMD, 8, 1, inMsg, pstmtForFetch));
//OM-2015-0001309 MOD END
			
			// ページング項目（検索処理パターン）
			// パラメータの設定(画面表示データ開始レコード行を指定)
			CAANJDBCUtil.setParam(pstmtForFetch, index++, iStartNum);
			// パラメータの設定(画面表示データ終了レコード行を指定)
			CAANJDBCUtil.setParam(pstmtForFetch, index++, iEndNum);
			
			
			// ResultSetの取得
			rsltQueryForFetch = pstmtForFetch.executeQuery();
			
			// EDK0301B040CBSMsgの明細にセットする項目
			msgKeyList1 = new String[] {
					  EDK0301B040CBSMsg1List.HMPIN_KIKI_NO
					, EDK0301B040CBSMsg1List.HMPIN_KIKI_STAT
					, EDK0301B040CBSMsg1List.HMPIN_KIKI_STAT_NM
					, EDK0301B040CBSMsg1List.SOKO_CD
					, EDK0301B040CBSMsg1List.SOKO_NM
					, EDK0301B040CBSMsg1List.HMPIN_SBT_CD
					, EDK0301B040CBSMsg1List.HMPIN_SBT_NM
					, EDK0301B040CBSMsg1List.HMPIN_UK_YMD
					, EDK0301B040CBSMsg1List.TAKNKIKI_MODEL_CD
					, EDK0301B040CBSMsg1List.KIKI_SEIZO_NO
					, EDK0301B040CBSMsg1List.SHUKKA_LOT_NO
					, EDK0301B040CBSMsg1List.SHUKKA_YMD
					, EDK0301B040CBSMsg1List.SVC_KEI_NO
					, EDK0301B040CBSMsg1List.SVC_END_YMD
					, EDK0301B040CBSMsg1List.KOJIAK_NO
					, EDK0301B040CBSMsg1List.TK_SBT_CD
					, EDK0301B040CBSMsg1List.TK_SBT_CD_NM
					, EDK0301B040CBSMsg1List.HMPIN_RSN_CD
					, EDK0301B040CBSMsg1List.HMPIN_RSN_NM
					, EDK0301B040CBSMsg1List.HMPIN_RSN_MEMO
					, EDK0301B040CBSMsg1List.GDS_STAT_CD
					, EDK0301B040CBSMsg1List.GDS_STAT_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_PCD
					, EDK0301B040CBSMsg1List.HMPINSHA_STATE_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_CITY_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_OAZTSU_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_AZCHO_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_BNCHIGO
					, EDK0301B040CBSMsg1List.HMPINSHA_ADRTTM
					, EDK0301B040CBSMsg1List.HMPINSHA_ADRRM
					, EDK0301B040CBSMsg1List.HMPINSHA_TELNO
					, EDK0301B040CBSMsg1List.HMPINSHA_NM
					, EDK0301B040CBSMsg1List.RENT_DSL_MSKMSHO_UM
					, EDK0301B040CBSMsg1List.RENT_DSL_MSKMSHO_UM_NM
					, EDK0301B040CBSMsg1List.WMS_HMPIN_NO
					, EDK0301B040CBSMsg1List.WMS_REC_SEQ
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQueryForFetch,msgKeyList1,"eo.ejb.cbs.cbsmsg.EDK0301B040CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0301B040CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(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(STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	
	/**
	*   EDK0301B040_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	private void findAll(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0301ETMsg.getTableName());
			
			// SQL文_基本部1
			String sql = makeSql(inMsg, inContext);
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql.toString());
//OM-2015-0001309 MOD START
//			setParameters(pstmt, inMsg);
			setParameters(pstmt, inMsg, 1);
//OM-2015-0001309 MOD END
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EDK0301B040CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EDK0301B040CBSMsg1List.HMPIN_KIKI_NO
					, EDK0301B040CBSMsg1List.HMPIN_KIKI_STAT
					, EDK0301B040CBSMsg1List.HMPIN_KIKI_STAT_NM
					, EDK0301B040CBSMsg1List.SOKO_CD
					, EDK0301B040CBSMsg1List.SOKO_NM
					, EDK0301B040CBSMsg1List.HMPIN_SBT_CD
					, EDK0301B040CBSMsg1List.HMPIN_SBT_NM
					, EDK0301B040CBSMsg1List.HMPIN_UK_YMD
					, EDK0301B040CBSMsg1List.TAKNKIKI_MODEL_CD
					, EDK0301B040CBSMsg1List.KIKI_SEIZO_NO
					
					, EDK0301B040CBSMsg1List.SHUKKA_LOT_NO
					, EDK0301B040CBSMsg1List.SHUKKA_YMD
					, EDK0301B040CBSMsg1List.SVC_KEI_NO
					, EDK0301B040CBSMsg1List.SVC_END_YMD
					, EDK0301B040CBSMsg1List.KOJIAK_NO
					, EDK0301B040CBSMsg1List.TK_SBT_CD
					, EDK0301B040CBSMsg1List.TK_SBT_CD_NM
					, EDK0301B040CBSMsg1List.HMPIN_RSN_CD
					, EDK0301B040CBSMsg1List.HMPIN_RSN_NM
					, EDK0301B040CBSMsg1List.HMPIN_RSN_MEMO
					
					, EDK0301B040CBSMsg1List.GDS_STAT_CD
					, EDK0301B040CBSMsg1List.GDS_STAT_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_PCD
					, EDK0301B040CBSMsg1List.HMPINSHA_STATE_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_CITY_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_OAZTSU_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_AZCHO_NM
					, EDK0301B040CBSMsg1List.HMPINSHA_BNCHIGO
					, EDK0301B040CBSMsg1List.HMPINSHA_ADRTTM
					, EDK0301B040CBSMsg1List.HMPINSHA_ADRRM
					
					, EDK0301B040CBSMsg1List.HMPINSHA_TELNO
					, EDK0301B040CBSMsg1List.HMPINSHA_NM
					, EDK0301B040CBSMsg1List.RENT_DSL_MSKMSHO_UM
					, EDK0301B040CBSMsg1List.RENT_DSL_MSKMSHO_UM_NM
					, EDK0301B040CBSMsg1List.WMS_HMPIN_NO
					, EDK0301B040CBSMsg1List.WMS_REC_SEQ
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EDK0301B040CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0301B040CBSMsg1List", outMsg1);
			
			// 検索件数が0件の場合、エラーフラグに"1"を設定して処理終了
			if (0 == outMsg1.length)
			{
				inMsg.set(SEARCH_ERR_FLG, SEARCH_ERR_FLG_ZERO);
			}

		} catch(SQLException e) {
			inMsg.set(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(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 コンテキスト
	 * @return SQL
	 */
	private String makeSql(CAANMsg inMsg, AgentDispatchContext inContext, int serchType)
	{
		StringBuffer sql = new StringBuffer();

//OM-2015-0001309 MOD START
		sql.append(" SELECT ")
		.append("   KIKI.HMPIN_KIKI_NO COL_HMPIN_KIKI_NO, ")
		.append("   KIKI.HMPIN_KIKI_STAT COL_HMPIN_KIKI_STAT, ")
//		.append(    cd(CD00296, "KIKI.HMPIN_KIKI_STAT", COMMA.RIGHT, "COL_HMPIN_KIKI_STAT_NM"))
		.append("   NULL AS COL_HMPIN_KIKI_STAT_NM, ")
		.append("   KIKI.SOKO_CD COL_SOKO_CD, ")
//		.append("   SOKO.SOKO_NM COL_SOKO_NM, ")
		.append("   NULL AS COL_SOKO_NM, ")
		.append("   KIKI.HMPIN_SBT_CD COL_HMPIN_SBT_CD, ")
//		.append(    cd(CD00292, "KIKI.HMPIN_SBT_CD", COMMA.RIGHT, "COL_HMPIN_SBT_NM"))
		.append("   NULL AS COL_HMPIN_SBT_NM, ")
		.append("   KIKI.HMPIN_KURAIRE_YMD COL_HMPIN_UK_YMD, ")
		.append("   NVL (KIKI.TAKNKIKI_MODEL_CD, KIKI.HUZOKUHIN_MODEL_CD) COL_TAKNKIKI_MODEL_CD, ")
		.append("   KIKI.KIKI_SEIZO_NO COL_KIKI_SEIZO_NO, ")

		.append("   KIKI.LOAD_SHKA_LOT_NO COL_SHUKKA_LOT_NO, ")
//		.append(" ( SELECT HAISO.SHUKKA_YMD ")
//		.append("      FROM DK_T_HAISO HAISO ")
//		.append("     WHERE KIKI.LOAD_SHKA_LOT_NO = HAISO.SHUKKA_LOT_NO ")
//		.append("       AND HAISO.MK_FLG = '0' ) COL_SHUKKA_YMD, ")
		.append("   NULL AS COL_SHUKKA_YMD, ")
		.append("   KIKI.LOAD_OYA_SVKEI_NO COL_SVC_KEI_NO, ")
//		.append("   (SELECT KK0081.SVC_ENDYMD ")
//		.append("      FROM KK_T_SVC_KEI KK0081 ")
//		.append("     WHERE KIKI.LOAD_OYA_SVKEI_NO = KK0081.SVC_KEI_NO ")
//		.append("       AND KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = (SELECT MAX(KK0081_2.RSV_APLY_YMD || KK0081_2.GENE_ADD_DTM) ")
//		.append("                                                           FROM KK_T_SVC_KEI KK0081_2 ")
//		.append("                                                          WHERE KK0081_2.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
//		.append("                                                            AND KK0081_2.RSV_APLY_YMD <= ? ")
//		.append("                                                            AND KK0081_2.RSV_APLY_CD = '2' ")
//		.append("                                                            AND KK0081_2.MK_FLG = '0') ")
//		.append("   ) COL_SVC_ENDYMD, ")
		.append("   NULL AS COL_SVC_ENDYMD, ")
		.append("   KIKI.KOJIAK_NO COL_KOJIAK_NO, ")
		.append("   KIKI.TK_SBT_CD COL_TK_SBT_CD, ")
//		.append(    cd(CD00212, "KIKI.TK_SBT_CD", COMMA.RIGHT, "COL_TK_SBT_CD_NM"))
		.append("   NULL AS COL_TK_SBT_CD_NM, ")
		.append("   KIKI.HMPIN_RSN_CD COL_HMPIN_RSN_CD, ")
//		.append(    cd(CD00293, "KIKI.HMPIN_RSN_CD", COMMA.RIGHT, "COL_HMPIN_RSN_NM"))
		.append("   NULL AS COL_HMPIN_RSN_NM, ")
		.append("   KIKI.HMPIN_RSN_MEMO COL_HMPIN_RSN_MEMO, ")

		.append("   KIKI.GDS_STAT_CD COL_GDS_STAT_CD, ")
//		.append(    cd(CD00274, "KIKI.GDS_STAT_CD", COMMA.RIGHT, "COL_GDS_STAT_NM"))
		.append("   NULL AS COL_GDS_STAT_NM, ")
		.append("   KIKI.HMPINSHA_PCD COL_HMPINSHA_PCD, ")
		.append("   KIKI.HMPINSHA_STATE_NM COL_HMPINSHA_STATE_NM, ")
		.append("   KIKI.HMPINSHA_CITY_NM COL_HMPINSHA_CITY_NM, ")
		.append("   KIKI.HMPINSHA_OAZTSU_NM COL_HMPINSHA_OAZTSU_NM, ")
		.append("   KIKI.HMPINSHA_AZCHO_NM COL_HMPINSHA_AZCHO_NM, ")
		.append("   KIKI.HMPINSHA_BNCHIGO COL_HMPINSHA_BNCHIGO, ")
		.append("   KIKI.HMPINSHA_ADRTTM COL_HMPINSHA_ADRTTM, ")
		.append("   KIKI.HMPINSHA_ADRRM COL_HMPINSHA_ADRRM, ")

		.append("   KIKI.HMPINSHA_TELNO COL_HMPINSHA_TELNO, ")
		.append("   KIKI.HMPINSHA_NM COL_HMPINSHA_NM, ")
		.append("   KIKI.RENT_DSL_MSKMSHO_UM COL_RENT_DSL_MSKMSHO_UM, ")
//		.append(    cd(CD00002, "KIKI.RENT_DSL_MSKMSHO_UM", COMMA.RIGHT, "COL_RENT_DSL_MSKMSHO_UM_NM"))
		.append("   NULL AS COL_RENT_DSL_MSKMSHO_UM_NM, ")
		.append("   KIKI.WMS_HMPIN_NO COL_WMS_HMPIN_NO, ")
		.append("   KIKI.WMS_REC_SEQ COL_WMS_REC_SEQ, ")
		.append("   KIKI.UPD_DTM COL_HMPIN_UPD_DTM ")
//		.append("   FROM DK_T_HMPIN_KIKI KIKI ")
//		.append("   LEFT OUTER JOIN DK_M_SOKO SOKO ")
//		.append("     ON KIKI.SOKO_CD = SOKO.SOKO_CD ")
//		.append("     AND SOKO.SOKO_TSTAYMD <= ?")
//		.append("     AND SOKO.MK_FLG = '0' ")
//		.append("   INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411 ")
//		.append("     ON KIKI.TAKNKIKI_MODEL_CD = ZM0411.TAKNKIKI_MODEL_CD ")
//		.append("     AND ZM0411.MK_FLG = '0' ")
//		.append(" WHERE KIKI.MK_FLG = '0' ");
		.append("   FROM DK_T_HMPIN_KIKI KIKI ");
		if (!inMsg.isNull(KEY_TKKIKI_SBT_CD))
		{
			sql.append("   INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411 ")
			.append("     ON KIKI.TAKNKIKI_MODEL_CD = ZM0411.TAKNKIKI_MODEL_CD ")
			.append("     AND ZM0411.MK_FLG = '0' ");
		}
		sql.append(" WHERE KIKI.MK_FLG = '0' ");
//OM-2015-0001309 MOD END

		appendSearchCondition(inMsg, sql);
		appendSqlIfAnyInput(KEY_SOKO_CD,                    "KIKI.SOKO_CD = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_HMPIN_SBT_CD,               "KIKI.HMPIN_SBT_CD = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_SVC_KEI_NO,                 "KIKI.LOAD_OYA_SVKEI_NO = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_ANKEN_NO,                   "KIKI.KOJIAK_NO = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_TAKNKIKI_MODEL_CD,          "kiki.TAKNKIKI_MODEL_CD = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_KIKI_SEIZO_NO,              "KIKI.KIKI_SEIZO_NO = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_TKKIKI_SBT_CD,              "ZM0411.TAKNKIKI_SBT_CD = ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_HMPIN_UK_YMD_FROM,          "KIKI.HMPIN_KURAIRE_YMD >= ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_HMPIN_UK_YMD_TO,            "KIKI.HMPIN_KURAIRE_YMD <= ?", inMsg, sql);
		// 20160225 OM-2016-0000501 性能改善 MOD START
//		appendSqlIfAnyInput(KEY_HMPIN_KIKI_SHONIN_YMD_FROM, "KIKI.HMPIN_KIKI_SHONIN_YMD >= ?", inMsg, sql);
//		appendSqlIfAnyInput(KEY_HMPIN_KIKI_SHONIN_YMD_TO,   "KIKI.HMPIN_KIKI_SHONIN_YMD <= ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_HMPIN_KIKI_SHONIN_YMD_FROM, "KIKI.HMPIN_KIKI_SHONIN_YMD >= '" + inMsg.getString(KEY_HMPIN_KIKI_SHONIN_YMD_FROM) + "'", inMsg, sql);
		appendSqlIfAnyInput(KEY_HMPIN_KIKI_SHONIN_YMD_TO,   "KIKI.HMPIN_KIKI_SHONIN_YMD <= '" + inMsg.getString(KEY_HMPIN_KIKI_SHONIN_YMD_TO) + "'", inMsg, sql);
		// 20160225 OM-2016-0000501 性能改善 MOD END
		appendSqlIfAnyInput(KEY_HMPIN_KIKI_CL_YMD_FROM,     "KIKI.HMPIN_KIKI_CL_YMD >= ?", inMsg, sql);
		appendSqlIfAnyInput(KEY_HMPIN_KIKI_CL_YMD_TO,       "KIKI.HMPIN_KIKI_CL_YMD <= ?", inMsg, sql);

		if (!inMsg.isNull(KEY_GDS_STAT_CD))
		{
			String param = inMsg.getString(KEY_GDS_STAT_CD);
			String [] cds = param.split(GDS_COND_SEPARATOR);
			for (int i = 0 ; i < cds.length ; i++)
			{
				cds[i] = "?";
			}
			sql.append(String.format(" AND KIKI.GDS_STAT_CD IN (%s) ", JDKCommonUtil.join(",", cds)));
		}

		//検索件数取得用SQLの場合
		if(serchType == 1)
		{
			sql.append(JDKCommonUtil.makeSqlForRownum(inMsg, MAX_SEARCH_NUM));
		}
		else
		{
			sql.append(" ORDER BY  ")
			   .append(" KIKI.LOAD_OYA_SVKEI_NO , KIKI.WMS_HMPIN_NO ASC ");
		}

		return sql.toString();
	}
	
//OM-2015-0001309 MOD START
	
	/**
	 * SQLにパラメータを設定します。
	 * @param pstmt ステートメント
	 * @param inMsg メッセージ
	 * @param index パラメータの開始インデックス
	 * @throws SQLException 例外発生時
	 * @return パラメータの最終インデックス
	 */
//	private int setParameters(PreparedStatement pstmt, CAANMsg inMsg) throws SQLException
	private int setParameters(PreparedStatement pstmt, CAANMsg inMsg, int index) throws SQLException
	{
//		// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
//		int index = 1;
//
//		index = setParamTimes(KEY_UNYO_YMD, 8, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_SOKO_CD, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_HMPIN_SBT_CD, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_SVC_KEI_NO, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_ANKEN_NO, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_TAKNKIKI_MODEL_CD, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_KIKI_SEIZO_NO, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_TKKIKI_SBT_CD, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_HMPIN_UK_YMD_FROM, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_HMPIN_UK_YMD_TO, index, inMsg, pstmt);
		// 20160225 OM-2016-0000501 性能改善 DEL START
//		index = appendParamIfAnyInput(KEY_HMPIN_KIKI_SHONIN_YMD_FROM, index, inMsg, pstmt);
//		index = appendParamIfAnyInput(KEY_HMPIN_KIKI_SHONIN_YMD_TO, index, inMsg, pstmt);
		// 20160225 OM-2016-0000501 性能改善 DEL END
		index = appendParamIfAnyInput(KEY_HMPIN_KIKI_CL_YMD_FROM, index, inMsg, pstmt);
		index = appendParamIfAnyInput(KEY_HMPIN_KIKI_CL_YMD_TO, index, inMsg, pstmt);

		if (!inMsg.isNull(KEY_GDS_STAT_CD))
		{
			String param = inMsg.getString(KEY_GDS_STAT_CD);
			String [] cds = param.split(GDS_COND_SEPARATOR);
			
			for (String cd : cds)
			{
				CAANJDBCUtil.setParam(pstmt, index++, cd);
			}
		}
		
		return index;
	}
	
//OM-2015-0001309 MOD END
	
	/**
	 * 抽出条件のＳＱＬを生成します。
	 * @param inMsg メッセージ
	 * @param sql sqlのバッファ
	 */
	private void appendSearchCondition(CAANMsg inMsg, StringBuffer sql)
	{
		if (inMsg.isNull(KEY_HMPIN_CHSHT_JOKEN_CD))
		{
			return ;
		}
		
		String condition = inMsg.getString(KEY_HMPIN_CHSHT_JOKEN_CD);
		if ("1".equals(condition))
		{
			sql.append(" AND KIKI.HMPIN_KIKI_STAT = '003' ");
		}
		else if ("2".equals(condition))
		{
			sql.append(" AND KIKI.HMPIN_KIKI_STAT = '002' ")
				.append(" AND NOT EXISTS (SELECT 'X' FROM DK_T_HMPIN_ERR ERR  WHERE KIKI.HMPIN_KIKI_NO = ERR.HMPIN_KIKI_NO) ");
		}
		else if ("3".equals(condition))
		{
			sql.append(" AND KIKI.HMPIN_KIKI_STAT = '004' ");
		}
		else if ("4".equals(condition))
		{
			sql.append(" AND KIKI.HMPIN_KIKI_STAT = '002' ")
			.append(" AND EXISTS (SELECT 'X' FROM DK_T_HMPIN_ERR ERR  WHERE KIKI.HMPIN_KIKI_NO = ERR.HMPIN_KIKI_NO) ");
		}
	}
	
//OM-2015-0001309 ADD START
	
	/**
	 * 範囲検索用のSQLを生成します。
	 * <br>
	 * @param innersql 元のSQL
	 * @return 件数制限取得用のＳＱＬ
	 */
	private String makeSqlForRealm(String innersql)
	{
		StringBuffer sql = new StringBuffer();
		
		sql.append(" SELECT ")
			.append("   TAB_ORGSQL.COL_HMPIN_KIKI_NO, ")
			.append("   TAB_ORGSQL.COL_HMPIN_KIKI_STAT, ")
			.append(    cd(CD00296, "TAB_ORGSQL.COL_HMPIN_KIKI_STAT", COMMA.RIGHT, "COL_HMPIN_KIKI_STAT_NM"))
			.append("   TAB_ORGSQL.COL_SOKO_CD, ")
			.append(" ( SELECT SOKO_NM ")
			.append("     FROM DK_M_SOKO ")
			.append("    WHERE SOKO_CD = TAB_ORGSQL.COL_SOKO_CD ")
			.append("      AND SOKO_TSTAYMD <= ? ")
			.append("      AND MK_FLG = '0' ) COL_SOKO_NM, ")
			.append("   TAB_ORGSQL.COL_HMPIN_SBT_CD, ")
			.append(    cd(CD00292, "TAB_ORGSQL.COL_HMPIN_SBT_CD", COMMA.RIGHT, "COL_HMPIN_SBT_NM"))
			.append("   TAB_ORGSQL.COL_HMPIN_UK_YMD, ")
			.append("   TAB_ORGSQL.COL_TAKNKIKI_MODEL_CD, ")
			.append("   TAB_ORGSQL.COL_KIKI_SEIZO_NO, ")
			.append("   TAB_ORGSQL.COL_SHUKKA_LOT_NO, ")
			.append(" ( SELECT HAISO.SHUKKA_YMD ")
			.append("     FROM DK_T_HAISO HAISO ")
			.append("    WHERE HAISO.SHUKKA_LOT_NO = TAB_ORGSQL.COL_SHUKKA_LOT_NO ")
			.append("      AND HAISO.MK_FLG = '0') COL_SHUKKA_YMD, ")
			.append("   COL_SVC_KEI_NO, ")
			.append(" ( SELECT KK0081.SVC_ENDYMD ")
			.append("     FROM KK_T_SVC_KEI KK0081 ")
			.append("    WHERE KK0081.SVC_KEI_NO = TAB_ORGSQL.COL_SVC_KEI_NO ")
			.append("      AND (KK0081.SVC_KEI_NO,KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM) = ( ")
			.append("            SELECT KK0081_2.SVC_KEI_NO,MAX(KK0081_2.RSV_APLY_YMD || KK0081_2.GENE_ADD_DTM) ")
			.append("              FROM KK_T_SVC_KEI KK0081_2 ")
			.append("             WHERE KK0081_2.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
			.append("               AND KK0081_2.RSV_APLY_YMD <= ? ")
			.append("               AND KK0081_2.RSV_APLY_CD = '2' ")
			.append("               AND KK0081_2.MK_FLG = '0' ")
			.append("             GROUP BY KK0081_2.SVC_KEI_NO) ) COL_SVC_ENDYMD, ")
			.append("   TAB_ORGSQL.COL_KOJIAK_NO, ")
			.append("   TAB_ORGSQL.COL_TK_SBT_CD, ")
			.append(    cd(CD00212, "TAB_ORGSQL.COL_TK_SBT_CD", COMMA.RIGHT, "COL_TK_SBT_CD_NM"))
			.append("   TAB_ORGSQL.COL_HMPIN_RSN_CD, ")
			.append(    cd(CD00293, "TAB_ORGSQL.COL_HMPIN_RSN_CD", COMMA.RIGHT, "COL_HMPIN_RSN_NM"))
			.append("   TAB_ORGSQL.COL_HMPIN_RSN_MEMO, ")
			.append("   TAB_ORGSQL.COL_GDS_STAT_CD, ")
			.append(    cd(CD00274, "TAB_ORGSQL.COL_GDS_STAT_CD", COMMA.RIGHT, "COL_GDS_STAT_NM"))
			.append("   TAB_ORGSQL.COL_HMPINSHA_PCD, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_STATE_NM, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_CITY_NM, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_OAZTSU_NM, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_AZCHO_NM, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_BNCHIGO, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_ADRTTM, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_ADRRM, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_TELNO, ")
			.append("   TAB_ORGSQL.COL_HMPINSHA_NM, ")
			.append("   TAB_ORGSQL.COL_RENT_DSL_MSKMSHO_UM, ")
			.append(    cd(CD00002, "TAB_ORGSQL.COL_RENT_DSL_MSKMSHO_UM", COMMA.RIGHT, "COL_RENT_DSL_MSKMSHO_UM_NM"))
			.append("   TAB_ORGSQL.COL_WMS_HMPIN_NO, ")
			.append("   TAB_ORGSQL.COL_WMS_REC_SEQ, ")
			.append("   TAB_ORGSQL.COL_HMPIN_UPD_DTM ")
			.append(" FROM ( SELECT TAB_ORGSQL_INNER.*, rownum ROW_NUM ")
			.append("          FROM ( ")
			.append(innersql)
			.append("               ) TAB_ORGSQL_INNER ) TAB_ORGSQL ")
			.append(" WHERE TAB_ORGSQL.ROW_NUM BETWEEN ? AND ? ");
		
		return sql.toString();
	}
	
//OM-2015-0001309 ADD END

}
