/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEDK0171B010TPDA
*	ソースファイル名：JSYejbEDK0171B010TPDA.java
*	作成者			：EK909139
*	日付			：2011年09月14日
*＜機能概要＞
*	修理受付一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ7.00.00	2013/11/11	FJ）塚田	ANK-1578-00-00(多機能ルータ対応)
*	ｖ8.00.00   2014/05/02  FJ)窪田     OM-2014-0001719
*	v19.00.00	2015/10/27	FJ) 藤本	【OM-2015-0002779】リソース最適化_オンラインSQL指摘0824（EDK0171B010_修理受付一覧照会）
********************************************************************************/

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.constant.JPCModelConstant.*;
import static eo.common.util.JDKCommonUtil.*;
import static eo.ejb.cbs.cbsmsg.EDK0171B010CBSMsg.*;
import static eo.ejb.cbs.cbsmsg.EDK0171B010CBSMsg1List.*;
import static eo.ejb.cbs.cbsmsg.EDK0301B040CBSMsg.FUNC_CODE;
import eo.ejb.cbm.entity.DK0171ETMsg;
import eo.ejb.common.JDKModelCommon;
import eo.ejb.common.JDKModelCommon.COMMA;
import static eo.ejb.common.JDKModelCommon.*;
import static eo.common.constant.JZM0171Constant.*; 

/**
*
*  テンプレートDBアクセス部品　EDK0171B010_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEDK0171B010TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	
	private static final String[] msgKeyList1 = {
			  BTRYHOZN_NO
			, SVKEI_NO
			, SHURI_UK_DAY
			, MDL_NO
			, SEIZO_NO
			, KEISHA_NM
			, BTRYHOZN_STAT
			, SHURI_JOKYO_NM
			, SYSID
			, CUST_SHURI_REQ_HYO_NO
			, BTRYHOZN_CD
			, BTRYHOZN_CD_NM
			, CUST_KIKI_SHOGAI_SKK_NYO
			, BTRYHOZN_TAIO_YMD
			, BTRYHOZN_TAIO_CD
			, BTRYHOZN_TAIO_NM
	};
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEDK0171B010TPDA()	{
	}

	/**
	*   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);
		}
	}

	
	/**
	*   EDK0171B010_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public 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(DK0171ETMsg.getTableName());

			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 MOD START
//			String sql = makeSqlForCount(makeSql(inMsg));
			// 最大検索件数＋1件までのデータをカウントする
			String sql = makeSqlForCount("SELECT 1 FROM ("
										+ makeSql(inMsg, true)
										+ ") WHERE ROWNUM <= "
										+ String.valueOf(Integer.parseInt(inMsg.getString(MAX_SEARCH_NUM)) + 1));
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 MOD END

			//prepareStatementにSQL文をセット
			pstmtForCount = con1.prepareStatement(sql);

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			setParameters(inMsg, pstmtForCount);

			// ResultSetの取得
			rsltQueryForCount = pstmtForCount.executeQuery();

			rsltQueryForCount.next();
			mapMessage(rsltQueryForCount, new String [] {TOTAL_SEARCH_NUM}, 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;
			}

			sql = makeSqlForRealm(makeSql(inMsg), "COL", "ROW_NUM");

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			pstmtForFetch = con1.prepareStatement(sql);
			int index = setParameters(inMsg, pstmtForFetch);
			
			// ページング項目（検索処理パターン）
			// パラメータの設定(画面表示データ開始レコード行を指定)
			CAANJDBCUtil.setParam(pstmtForFetch, index++, iStartNum);
			// パラメータの設定(画面表示データ終了レコード行を指定)
			CAANJDBCUtil.setParam(pstmtForFetch, index++, iEndNum);
			
			// ResultSetの取得
			rsltQueryForFetch = pstmtForFetch.executeQuery();
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQueryForFetch,msgKeyList1,"eo.ejb.cbs.cbsmsg.EDK0171B010CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0171B010CBSMsg1List", 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);
			}
		}
	}
	
	/**
	*   EDK0171B010_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void findAll(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0171ETMsg.getTableName());
			
			String sql = makeSql(inMsg);
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql);
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql);

			setParameters(inMsg, pstmt);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EDK0171B010CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0171B010CBSMsg1List", outMsg1);

			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);
			}
		}
	}
	
	// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD START
	/**
	 * 一覧取得SQL文を作成して返します。
	 * <br>
	 * @param inMsg 入力値の格納されたCBSMsg
	 * @return SQL文
	 */
	private String makeSql (CAANMsg inMsg)
	{
		return makeSql(inMsg, false);
	}
	// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD END

	// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 MOD START
//	private String makeSql (CAANMsg inMsg)
	/**
	 * SQL文を作成して返します。
	 * <br>
	 * @param inMsg 入力値の格納されたCBSMsg
	 * @param isCountSql 件数取得SQLかどうか
	 * @return SQL文
	 */
	private String makeSql (CAANMsg inMsg, boolean isCountSql)
	// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 MOD END
	{
		StringBuffer sql_Buff = new StringBuffer();

		if (inMsg.isNull(KEY_SVKEI_NO))
		{
			sql_Buff.append(" SELECT")
					.append("    DK0171.BTRYHOZN_NO COL_BTRYHOZN_NO,")
					.append(     svcKeiNoFor2("DK0171", "COL_SVC_KEI_NO", "SUBSTR(DK0171.BTRYHOZN_UK_DTM,1,8)", COMMA.RIGHT, "SUBSTR(DK0171.BTRYHOZN_UK_DTM,1,8)"))
					.append("    SUBSTR(DK0171.BTRYHOZN_UK_DTM,1,8) COL_BTRYHOZN_UK_YMD,")
					.append("    NVL(DK0171.HUZOKUHIN_MODEL_CD, DK0171.TAKNKIKI_MODEL_CD) COL_MODEL_CD,")
					.append("    DK0171.KIKI_SEIZO_NO COL_KIKI_SEIZO_NO,")
					.append("    CK0011.CUST_NM COL_CUST_NM,")
					.append("    DK0171.BTRYHOZN_STAT COL_BTRYHOZN_STAT,")
					.append("    DK0171.BTRYHOZN_STAT_NM COL_BTRYHOZN_STAT_NM,")
					.append("    DK0171.SYSID COL_SYSID,")
					.append("    DK0171.CUST_SHURI_REQ_HYO_NO COL_CUST_SHURI_REQ_HYO_NO,")
					.append("    DK0171.BTRYHOZN_CD COL_BTRYHOZN_CD,")
					.append("    DK0171.BTRYHOZN_CD_NM COL_BTRYHOZN_CD_NM,")
					.append("    DK0171.CUST_KIKI_SHOGAI_SKK_NYO COL_CUST_KIKI_SHOGAI_SKK_NYO,")
					.append("    DK0171.BTRYHOZN_TAIO_YMD COL_BTRYHOZN_TAIO_YMD,")
					.append("    (SELECT")
					.append("        MAX(DK0351_SUB_2.BTRYHOZN_TAIO_CD)")
					.append("    FROM DK_T_BTRYHOZN_TIOKRK DK0351_SUB_2")
					.append("    WHERE DK0351_SUB_2.BTRYHOZN_NO = DK0171.BTRYHOZN_NO")
					.append("        AND DK0351_SUB_2.BTRYHOZN_TAIO_YMD = DK0171.BTRYHOZN_TAIO_YMD")
					.append("        AND DK0351_SUB_2.MK_FLG = '0') COL_BTRYHOZN_TAIO_CD,")
					.append(     cd(CD00271, "( SELECT" +
							"        MAX(DK0351_SUB_2.BTRYHOZN_TAIO_CD)" +
							"    FROM DK_T_BTRYHOZN_TIOKRK DK0351_SUB_2" +
							"    WHERE DK0351_SUB_2.BTRYHOZN_NO = DK0171.BTRYHOZN_NO" +
							"        AND DK0351_SUB_2.BTRYHOZN_TAIO_YMD = DK0171.BTRYHOZN_TAIO_YMD" +
							"        AND DK0351_SUB_2.MK_FLG = '0')", COMMA.NONE, "COL_BTRYHOZN_TAIO_NM"))
					.append(" FROM")
					.append("    (SELECT")
					.append("        DK0171_SUB_1.BTRYHOZN_NO,")
					.append("        BTRYHOZN_UK_DTM,")
					.append("        DK0171_SUB_1.BTRYHOZN_STAT,")
					.append(         cd(CD00277, "DK0171_SUB_1.BTRYHOZN_STAT", COMMA.RIGHT, "BTRYHOZN_STAT_NM"))
					.append("        DK0171_SUB_1.CUST_SHURI_REQ_HYO_NO,")
					.append("        DK0171_SUB_1.BTRYHOZN_CD,")
					.append(         cd(CD00489, "DK0171_SUB_1.BTRYHOZN_CD", COMMA.RIGHT, "BTRYHOZN_CD_NM"))
					.append("        DK0171_SUB_1.CUST_KIKI_SHOGAI_SKK_NYO,")
					.append("        (SELECT")
					.append("            MAX(DK0351_SUB_1.BTRYHOZN_TAIO_YMD)")
					.append("        FROM DK_T_BTRYHOZN_TIOKRK DK0351_SUB_1")
					.append("        WHERE DK0351_SUB_1.BTRYHOZN_NO = DK0171_SUB_1.BTRYHOZN_NO")
					.append("            AND DK0351_SUB_1.MK_FLG = '0') BTRYHOZN_TAIO_YMD,")
					.append("        DK0171_SUB_1.KKTK_SVC_KEI_NO,")
					.append("        DK0171_SUB_1.KIKI_CHG_NO,")
					.append("        KK0341.OYA_KEI_SKBT_CD,")
					.append("        KK0341.TAKNKIKI_SBT_CD,")
					.append("        KK0341.SVC_KEI_KAISEN_UCWK_NO,")
					.append("        KK0341.SVC_KEI_NO,")
					.append("        KK0341.KIKI_SEIZO_NO,")
					.append("        KK0341.HUZOKUHIN_MODEL_CD,")
					.append("        KK0341.TAKNKIKI_MODEL_CD,")
					.append("        KK0341.SYSID")
					.append("    FROM DK_T_BTRYHOZN DK0171_SUB_1")
					.append(     joinKKTKSvc("KK0341", "DK0171_SUB_1", "KKTK_SVC_KEI_NO", "KIKI_CHG_NO", "INNER"));

			// SYSID
			appendSqlIfAnyInput(KEY_SYSID, "KK0341.SYSID = ?", inMsg, sql_Buff);
			// 新規申込番号
			appendSqlIfAnyInput(KEY_MSKM_NO, "EXISTS (SELECT 'x' FROM KK_T_MSKM_DTL WHERE MSKM_NO = ? AND MSKM_DTL_NO = KK0341.MSKM_DTL_NO AND MK_FLG = '0')", inMsg, sql_Buff);
			// 型番号
			appendSqlIfAnyInput(KEY_MDL_NO, "NVL(KK0341.TAKNKIKI_MODEL_CD, KK0341.HUZOKUHIN_MODEL_CD) = ?", inMsg, sql_Buff);
			// 製造番号
			appendSqlIfAnyInput(KEY_SEIZO_NO, "KK0341.KIKI_SEIZO_NO = ?", inMsg, sql_Buff);

			sql_Buff.append("    WHERE DK0171_SUB_1.MK_FLG = '0'");

			// 修理受付日（From）
			appendSqlIfAnyInput(KEY_SHURI_UK_STA, "DK0171_SUB_1.BTRYHOZN_UK_DTM >= ? || '000000000'", inMsg, sql_Buff);
			// 修理受付日（To）
			appendSqlIfAnyInput(KEY_SHURI_UK_END, "DK0171_SUB_1.BTRYHOZN_UK_DTM <= ? || '999999999'", inMsg, sql_Buff);
			// 修理状況
			appendSqlIfAnyInput(KEY_SHURI_JOKYO, "DK0171_SUB_1.BTRYHOZN_STAT = ?", inMsg, sql_Buff);
			// 修理区分
			appendSqlIfAnyInput(KEY_TRAN_DIV, "DK0171_SUB_1.BTRYHOZN_CD = ?", inMsg, sql_Buff);

			sql_Buff.append("    ) DK0171");

			sql_Buff.append( innerJoinToGen("CK_T_CUST", "CK0011", "DK0171", "SYSID"))
					.append(" INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411")
					.append("    ON ZM0411.TAKNKIKI_MODEL_CD = DK0171.TAKNKIKI_MODEL_CD")
					.append("    AND ZM0411.MK_FLG = '0'");

			// メーカー名
			appendSqlIfAnyInput(KEY_MAKER_CD, "ZM0411.MAKER_CD = ?", inMsg, sql_Buff);

			sql_Buff.append(" LEFT OUTER JOIN DK_T_HMPIN_KIKI DK0301")
					.append("    ON DK0301.BTRYHOZN_NO = DK0171.BTRYHOZN_NO")
					.append("    AND DK0301.HMPIN_DIV <> '3'")
					.append("    AND DK0301.MK_FLG = '0'");

			// 動作確認コード
			if (!inMsg.isNull(KEY_DOSA_KKNIN_DIV))
			{
				sql_Buff.append(" WHERE");
				appendSqlIfAnyInput(KEY_DOSA_KKNIN_DIV, "DK0301.DOSA_CFM_CD = ?", inMsg, sql_Buff, false);
			}

			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD START
			if (!isCountSql)
			{
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD END
				sql_Buff.append(" ORDER BY DK0171.BTRYHOZN_UK_DTM,")
						.append("    DK0171.KKTK_SVC_KEI_NO");
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD START
			}
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD END
		}
		else
		{
			sql_Buff.append(" SELECT")
					.append("    DK0171.BTRYHOZN_NO COL_BTRYHOZN_NO,")
					.append(     svcKeiNoFor2("DK0171", "COL_SVC_KEI_NO", "SUBSTR(DK0171.BTRYHOZN_UK_DTM,1,8)", COMMA.RIGHT, "SUBSTR(DK0171.BTRYHOZN_UK_DTM,1,8)"))
					.append("    SUBSTR(DK0171.BTRYHOZN_UK_DTM,1,8) COL_BTRYHOZN_UK_YMD,")
					.append("    NVL(DK0171.HUZOKUHIN_MODEL_CD, DK0171.TAKNKIKI_MODEL_CD) COL_MODEL_CD,")
					.append("    DK0171.KIKI_SEIZO_NO COL_KIKI_SEIZO_NO,")
					.append("    CK0011.CUST_NM COL_CUST_NM,")
					.append("    DK0171.BTRYHOZN_STAT COL_BTRYHOZN_STAT,")
					.append("    DK0171.BTRYHOZN_STAT_NM COL_BTRYHOZN_STAT_NM,")
					.append("    DK0171.SYSID COL_SYSID,")
					.append("    DK0171.CUST_SHURI_REQ_HYO_NO COL_CUST_SHURI_REQ_HYO_NO,")
					.append("    DK0171.BTRYHOZN_CD COL_BTRYHOZN_CD,")
					.append("    DK0171.BTRYHOZN_CD_NM COL_BTRYHOZN_CD_NM,")
					.append("    DK0171.CUST_KIKI_SHOGAI_SKK_NYO COL_CUST_KIKI_SHOGAI_SKK_NYO,")
					.append("    DK0171.BTRYHOZN_TAIO_YMD COL_BTRYHOZN_TAIO_YMD,")
					.append("    (SELECT")
					.append("        MAX(DK0351_SUB_2.BTRYHOZN_TAIO_CD)")
					.append("    FROM DK_T_BTRYHOZN_TIOKRK DK0351_SUB_2")
					.append("    WHERE DK0351_SUB_2.BTRYHOZN_NO = DK0171.BTRYHOZN_NO")
					.append("        AND DK0351_SUB_2.BTRYHOZN_TAIO_YMD = DK0171.BTRYHOZN_TAIO_YMD")
					.append("        AND DK0351_SUB_2.MK_FLG = '0') COL_BTRYHOZN_TAIO_CD,")
					.append(     cd(CD00271, "( SELECT" +
							"        MAX(DK0351_SUB_2.BTRYHOZN_TAIO_CD)" +
							"    FROM DK_T_BTRYHOZN_TIOKRK DK0351_SUB_2" +
							"    WHERE DK0351_SUB_2.BTRYHOZN_NO = DK0171.BTRYHOZN_NO" +
							"        AND DK0351_SUB_2.BTRYHOZN_TAIO_YMD = DK0171.BTRYHOZN_TAIO_YMD" +
							"        AND DK0351_SUB_2.MK_FLG = '0')", COMMA.NONE, "COL_BTRYHOZN_TAIO_NM"))
					.append(" FROM")
					.append("    (SELECT")
					.append("        DK0171_SUB_1.BTRYHOZN_NO,")
					.append("        BTRYHOZN_UK_DTM,")
					.append("        DK0171_SUB_1.BTRYHOZN_STAT,")
					.append(         cd(CD00277, "DK0171_SUB_1.BTRYHOZN_STAT", COMMA.RIGHT, "BTRYHOZN_STAT_NM"))
					.append("        DK0171_SUB_1.CUST_SHURI_REQ_HYO_NO,")
					.append("        DK0171_SUB_1.BTRYHOZN_CD,")
					.append(         cd(CD00489, "DK0171_SUB_1.BTRYHOZN_CD", COMMA.RIGHT, "BTRYHOZN_CD_NM"))
					.append("        DK0171_SUB_1.CUST_KIKI_SHOGAI_SKK_NYO,")
					.append("        (SELECT")
					.append("            MAX(DK0351_SUB_1.BTRYHOZN_TAIO_YMD)")
					.append("        FROM DK_T_BTRYHOZN_TIOKRK DK0351_SUB_1")
					.append("        WHERE DK0351_SUB_1.BTRYHOZN_NO = DK0171_SUB_1.BTRYHOZN_NO")
					.append("            AND DK0351_SUB_1.MK_FLG = '0') BTRYHOZN_TAIO_YMD,")
					.append("        DK0171_SUB_1.KKTK_SVC_KEI_NO,")
					.append("        DK0171_SUB_1.KIKI_CHG_NO,")
					.append("        KK0341.OYA_KEI_SKBT_CD,")
					.append("        KK0341.TAKNKIKI_SBT_CD,")
					.append("        KK0341.SVC_KEI_KAISEN_UCWK_NO,")
					.append("        KK0341.SVC_KEI_NO,")
					.append("        KK0341.KIKI_SEIZO_NO,")
					.append("        KK0341.HUZOKUHIN_MODEL_CD,")
					.append("        KK0341.TAKNKIKI_MODEL_CD,")
					.append("        KK0341.SYSID")
					.append("    FROM")
					.append("        (SELECT")
					.append("            DK0171_TMP.BTRYHOZN_NO")
					.append("        FROM KK_T_SVC_KEI KK0081")
					.append("        INNER JOIN KK_T_KAISEN_TG_SVKEI KK0241")
					.append("            ON KK0081.SVC_KEI_NO = KK0241.SVC_KEI_NO")
					.append("            AND KK0241.MK_FLG = '0'")
					.append("        INNER JOIN KK_T_KKTK_SVC_KEI KK0341")
					.append("            ON KK0241.SVC_KEI_KAISEN_UCWK_NO = KK0341.SVC_KEI_KAISEN_UCWK_NO")
					.append("            OR KK0341.SVC_KEI_NO = ?")
					.append("            AND KK0341.MK_FLG = '0'")
					.append("        INNER JOIN DK_T_BTRYHOZN DK0171_TMP")
					.append("            ON KK0341.KKTK_SVC_KEI_NO = DK0171_TMP.KKTK_SVC_KEI_NO")
					.append("            AND KK0341.KIKI_CHG_NO = DK0171_TMP.KIKI_CHG_NO")
					.append("            AND DK0171_TMP.MK_FLG = '0'")
					.append("        WHERE KK0081.SVC_KEI_NO = ?")
					.append("            AND KK0081.MK_FLG = '0'")
					.append("        GROUP BY DK0171_TMP.BTRYHOZN_NO")
					.append("        ) SVC_KEI_ALL_BTRYHOZN")
					.append("    INNER JOIN  DK_T_BTRYHOZN DK0171_SUB_1")
					.append("        ON DK0171_SUB_1.BTRYHOZN_NO = SVC_KEI_ALL_BTRYHOZN.BTRYHOZN_NO")
					.append("        AND DK0171_SUB_1.MK_FLG = '0'");

			// 修理受付日（From）
			appendSqlIfAnyInput(KEY_SHURI_UK_STA, "DK0171_SUB_1.BTRYHOZN_UK_DTM >= ? || '000000000'", inMsg, sql_Buff);
			// 修理受付日（To）
			appendSqlIfAnyInput(KEY_SHURI_UK_END, "DK0171_SUB_1.BTRYHOZN_UK_DTM <= ? || '999999999'", inMsg, sql_Buff);
			// 修理状況
			appendSqlIfAnyInput(KEY_SHURI_JOKYO, "DK0171_SUB_1.BTRYHOZN_STAT = ?", inMsg, sql_Buff);
			// 処理区分
			appendSqlIfAnyInput(KEY_TRAN_DIV, "DK0171_SUB_1.BTRYHOZN_CD = ?", inMsg, sql_Buff);

			sql_Buff.append(    joinKKTKSvc("KK0341", "DK0171_SUB_1", "KKTK_SVC_KEI_NO", "KIKI_CHG_NO", "INNER"));

			// SYSID
			appendSqlIfAnyInput(KEY_SYSID, "KK0341.SYSID = ?", inMsg, sql_Buff);
			// 新規申込番号
			appendSqlIfAnyInput(KEY_MSKM_NO, "EXISTS (SELECT 'x' FROM KK_T_MSKM_DTL WHERE MSKM_NO = ? AND MSKM_DTL_NO = KK0341.MSKM_DTL_NO AND MK_FLG = '0')", inMsg, sql_Buff);
			// 型番号
			appendSqlIfAnyInput(KEY_MDL_NO, "NVL(KK0341.TAKNKIKI_MODEL_CD, KK0341.HUZOKUHIN_MODEL_CD) = ?", inMsg, sql_Buff);
			// 製造番号
			appendSqlIfAnyInput(KEY_SEIZO_NO, "KK0341.KIKI_SEIZO_NO = ?", inMsg, sql_Buff);

			sql_Buff.append("    ) DK0171");

			sql_Buff.append( innerJoinToGen("CK_T_CUST", "CK0011", "DK0171", "SYSID"))
					.append(" INNER JOIN ZM_M_TAKNKIKI_MODEL ZM0411")
					.append("    ON ZM0411.TAKNKIKI_MODEL_CD = DK0171.TAKNKIKI_MODEL_CD")
					.append("    AND ZM0411.MK_FLG = '0'");

			// メーカー名
			appendSqlIfAnyInput(KEY_MAKER_CD, "ZM0411.MAKER_CD = ?", inMsg, sql_Buff);

			sql_Buff.append(" LEFT OUTER JOIN DK_T_HMPIN_KIKI DK0301")
					.append("    ON DK0301.BTRYHOZN_NO = DK0171.BTRYHOZN_NO")
					.append("    AND DK0301.HMPIN_DIV <> '3'")
					.append("    AND DK0301.MK_FLG = '0'");

			// 動作確認コード
			if (!inMsg.isNull(KEY_DOSA_KKNIN_DIV))
			{
				sql_Buff.append(" WHERE");
				appendSqlIfAnyInput(KEY_DOSA_KKNIN_DIV, "DK0301.DOSA_CFM_CD = ?", inMsg, sql_Buff, false);
			}

			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD START
			if (!isCountSql)
			{
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD END
				sql_Buff.append(" ORDER BY DK0171.BTRYHOZN_UK_DTM,")
						.append("    DK0171.KKTK_SVC_KEI_NO");
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD START
			}
			// 20151027 OM-2015-0002779 リソース最適化_オンラインSQL指摘0824 ADD END
		}

		return sql_Buff.toString();
	}
	
	
	private int setParameters (CAANMsg inMsg, PreparedStatement pstmt) throws SQLException {
		int index = 1;
		if (inMsg.isNull(KEY_SVKEI_NO))
		{
			index = setParamTimes(KEY_UNYO_YMD, 3, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_SYSID, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_MSKM_NO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_MDL_NO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SEIZO_NO, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_SHURI_UK_STA, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SHURI_UK_END, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SHURI_JOKYO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_TRAN_DIV, index, inMsg, pstmt);

			index = setParamTimes(KEY_UNYO_YMD, 1, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_MAKER_CD, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_DOSA_KKNIN_DIV, index, inMsg, pstmt);
		}
		else
		{
			index = setParamTimes(KEY_UNYO_YMD, 3, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_SVKEI_NO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SVKEI_NO, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_SHURI_UK_STA, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SHURI_UK_END, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SHURI_JOKYO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_TRAN_DIV, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_SYSID, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_MSKM_NO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_MDL_NO, index, inMsg, pstmt);
			index = appendParamIfAnyInput(KEY_SEIZO_NO, index, inMsg, pstmt);

			index = setParamTimes(KEY_UNYO_YMD, 1, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_MAKER_CD, index, inMsg, pstmt);

			index = appendParamIfAnyInput(KEY_DOSA_KKNIN_DIV, index, inMsg, pstmt);
		}

		return index;
	}
}
