/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEFU0011B501TPDA
*	ソースファイル名：JSYejbEFU0011B501TPDA.java
*	作成者			：EK912024
*	日付			：2012年09月05日
*＜機能概要＞
*	エリアリクエスト一覧照会(複合検索)テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	v5.00		2013/09/20	FJ)坂東		【OM-2013-0002253】エリアリクエストと問合せ客の結合条件を修正
*	ｖ40.00.00	2019/01/04	FJ)三原		【ANK-3506-00-00】量販Webのエリアリクエスト機能追加
*
********************************************************************************/

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 eo.common.constant.JPCModelConstant;
import eo.common.util.JCCFrameworkException;
import eo.ejb.cbs.cbsmsg.EFU0011B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EFU0011B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1151B001CBSMsg;
import eo.ejb.cbm.entity.FU0011ETMsg;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JKKejbPagingUtil;
import eo.ejb.common.JZMModelCommon;

/**
*
*  テンプレートDBアクセス部品　EFU0011B501_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEFU0011B501TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/** 
	 * ソート区分用（昇順)
	 */
	private static final String SORT_ASC = "1";

	/** 
	 * ソート区分用（降順)
	 */
	private static final String SORT_DESC = "2";
	
	/** 
	 * ソート項目用（エリアリクエスト番号)
	 */
	private static final String SORT_AREA_REQ_NO = "1";

	/** 
	 * ソート項目用（現在工程コード)
	 */
	private static final String SORT_AREA_REQ_NOW_STEP_CD = "2";

	/** 
	 * ソート項目用（郵便番号)
	 */
	private static final String SORT_AREA_REQ_PCD = "3";
	
	/** 
	 * ソート項目用（住所)
	 */
	private static final String SORT_AREA_REEQ_ADD = "4";
	
	/** 
	 * ソート項目用（電話番号)
	 */
	private static final String SORT_PROSCST_TELNO = "5";
	
	/** 
	 * ソート項目用（メールアドレス)
	 */
	private static final String SORT_PROSCST_MLAD = "6";
	
	/** 
	 * ソート項目用（氏名)
	 */
	private static final String SORT_PROSCST_NM = "7";
	
	/** 
	 * ソート項目用（氏名(カナ))
	 */
	private static final String SORT_PROSCST_KANA = "8";
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEFU0011B501TPDA()	{
	}

	/**
	*   EFU0011B501_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 iPCnt = 1;
		int iPPage = 1;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(FU0011ETMsg.getTableName());
			
			// SQL文_基本部1　ページングヘッダ
			StringBuffer sql_Buff1 = new StringBuffer();
			sql_Buff1.append(" SELECT * ")
					.append(" FROM ( SELECT ALL_SELECT.*, ROWNUM AS LINE ")
					.append("        FROM ( ");

			// SQL文_基本部2　カウント用
			StringBuffer sql_Buff2 = new StringBuffer();
			sql_Buff2.append(" SELECT COUNT(*) AS CNT ");			
			
			// SQL文_基本部3　項目取得用
			StringBuffer sql_Buff = new StringBuffer();
			StringBuffer sql_Buff3 = new StringBuffer();
			sql_Buff3.append(" SELECT ")
					.append(" DISTINCT ")
					.append("     FU0011.AREA_REQ_NO, ")
					.append("     FU0011.AREA_REQ_PCD, ")
					.append("     FU0011.AREA_REQ_STATE_NM, ")
					.append("     FU0011.AREA_REQ_CITY_NM, ")
					.append("     FU0011.AREA_REQ_OAZTSU_NM, ")
					.append("     FU0011.AREA_REQ_AZCHO_NM, ")
					.append("     FU0011.AREA_REQ_AD_BNCHIGO, ")
					.append("     FU0011.AREA_REQ_ADRTTM, ")
					.append("     FU0011.AREA_REQ_ADRRM, ")
					.append("     FU0011.AREA_REQ_NOW_STEP_CD, ")
					.append("     (SELECT ZM0171.CD_DIV_NM FROM ZM_M_CD_NM_KANRI ZM0171 WHERE ZM0171.CD_SBT_CD = 'CD01516'  ")
					.append("     AND ZM0171.CD_DIV = FU0011.AREA_REQ_NOW_STEP_CD AND ? BETWEEN ZM0171.CD_TSTAYMD AND ZM0171.CD_TENDYMD AND ZM0171.MK_FLG = '0' ")
					.append("     ) AREA_REQ_NOW_STEP_CD_NM, ")
					.append("     CK0051.PROSCST_NM, ")
					.append("     CK0051.PROSCST_KANA, ")
					.append("     CK0051.PROSCST_TELNO, ")
					.append("     CK0051.PROSCST_MLAD, ")
					.append("     FU0011.UPD_DTM, ")
					.append("     FU0011.AREA_REQ_UK_YMD, ")
					.append("     FU0011.XZAHYO, ")
					.append("     FU0011.YZAHYO, ")
					// ANK-3506-00-00 MOD START
					//.append("     FU0011.ADD_DTM ");
					.append("     FU0011.ADD_DTM, ")
					.append("     CK0051.AREA_REQ_MOTO_SKBT_CD, ")
					.append("     CK0051.PROSCST_TRAT_CD ");
					// ANK-3506-00-00 MOD END

			// SQL文_基本部4　From句指定
			StringBuffer sql_Buff4 = new StringBuffer();
			// 2013/09/20 OM-2013-0002253 mod Start
//			sql_Buff4.append(" FROM ")
//				.append("     FU_T_AREA_REQ FU0011, ")
//				.append("     CK_T_PROSCST CK0051, ")
//				.append("     (SELECT FU0011_02.PROSCST_NO, CONCAT(FU0011_02.AREA_REQ_AZCHO_NM,FU0011_02.AREA_REQ_AD_BNCHIGO) AS CHOBN_NM FROM FU_T_AREA_REQ FU0011_02) FU0011_03 ")
//				.append(" WHERE ")
//				.append("     FU0011.PROSCST_NO = CK0051.PROSCST_NO ")
//				.append("     AND FU0011_03.PROSCST_NO = CK0051.PROSCST_NO ")
//				.append("     AND FU0011.PROSCST_NO = FU0011_03.PROSCST_NO ")
//				.append("     AND FU0011.MK_FLG = '0' ");
			
			sql_Buff4.append(" FROM ")
				.append("     FU_T_AREA_REQ FU0011 ")
				.append("     LEFT OUTER JOIN ")
				.append("     CK_T_PROSCST CK0051 ")
				.append("     ON   FU0011.PROSCST_NO = CK0051.PROSCST_NO ")
				.append("     INNER JOIN ")
				.append("     (SELECT FU0011_02.AREA_REQ_NO, FU0011_02.PROSCST_NO, CONCAT(FU0011_02.AREA_REQ_AZCHO_NM,FU0011_02.AREA_REQ_AD_BNCHIGO) AS CHOBN_NM FROM FU_T_AREA_REQ FU0011_02) FU0011_03 ")
				.append("     ON   FU0011.AREA_REQ_NO  = FU0011_03.AREA_REQ_NO ")
				.append(" WHERE ")
				.append("     FU0011.MK_FLG = '0' ");
			// 2013/09/20 OM-2013-0002253 mod End
			// SQL文_個別部1　Where句指定
			StringBuffer sql_Buff5 = new StringBuffer();
			
			
			//検索条件を追加（AREA_REQ_NO）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_NO)){
				String[] dchsTypeCds = inMsg.getString(EFU0011B501CBSMsg.KEY_AREA_REQ_NO).split(",");
				sql_Buff5.append("      AND    FU0011.AREA_REQ_NO IN ( ");
				
				for (int cnt = 0; cnt < dchsTypeCds.length; cnt++)
				{
					
					if (cnt > 0)
					{
						sql_Buff5.append(",");
					}
					
					sql_Buff5.append(" ? ");
				}
				
				sql_Buff5.append(" ) ");
			}
			//検索条件を追加（KEY_AREA_REQ_PCD）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_PCD))
			{
				sql_Buff5.append("     AND FU0011.AREA_REQ_PCD = ? ");
			}
			
			//検索条件を追加（AREA_REQ_STATE_NM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_STATE_NM))
			{
				sql_Buff5.append("     AND FU0011.AREA_REQ_STATE_NM = ? ");
			}
			
			//検索条件を追加（AREA_REQ_STATE_NM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_CITY_NM))
			{
				sql_Buff5.append("     AND FU0011.AREA_REQ_CITY_NM = ? ");
			}
			
			//検索条件を追加（AREA_REQ_OAZTSU_NM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_OAZTSU_NM))
			{
				sql_Buff5.append("     AND FU0011.AREA_REQ_OAZTSU_NM = ? ");
			}
			
			//検索条件を追加（AREA_REQ_ADRRM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM) || !inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO))
			{
				sql_Buff5.append("     AND FU0011_03.CHOBN_NM = CONCAT(?,?) ");
			}
			
			//検索条件を追加（AREA_REQ_ADRTTM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRTTM))
			{
				sql_Buff5.append("     AND FU0011.AREA_REQ_ADRTTM = ? ");
			}
			
			//検索条件を追加（AREA_REQ_ADRRM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRRM))
			{
				sql_Buff5.append("     AND FU0011.AREA_REQ_ADRRM = ? ");
			}
			
			//検索条件を追加（AREA_REQ_NOW_STEP_CD）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_NOW_STEP_CD))
			{
				String[] dchsTypeCds = inMsg.getString(EFU0011B501CBSMsg.KEY_AREA_REQ_NOW_STEP_CD).split(",");
				sql_Buff5.append("      AND    FU0011.AREA_REQ_NOW_STEP_CD IN ( ");
				
				for (int cnt = 0; cnt < dchsTypeCds.length; cnt++)
				{
					
					if (cnt > 0)
					{
						sql_Buff5.append(",");
					}
					
					sql_Buff5.append(" ? ");
				}
				
				sql_Buff5.append(" ) ");
			}
			
			//検索条件を追加（PROSCST_TELNO）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_TELNO))
			{
				sql_Buff5.append("     AND CK0051.PROSCST_TELNO = ? ");
			}
			
			//検索条件を追加（PROSCST_MLAD）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_MLAD))
			{
				sql_Buff5.append("     AND CK0051.PROSCST_MLAD = ? ");
			}

			//検索条件を追加（PROSCST_NM）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_NM))
			{
				sql_Buff5.append("     AND CK0051.PROSCST_NM LIKE ? ");

				//エスケープ付与
				sql_Buff5.append(JZMModelCommon.ESCAPE_SQL_STRING);
			}
				
			//検索条件を追加（PROSCST_KANA）
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_KANA))
			{
				sql_Buff5.append("     AND CK0051.PROSCST_KANA LIKE ? ");

				//エスケープ付与
				sql_Buff5.append(JZMModelCommon.ESCAPE_SQL_STRING);
			}
				

			// SQL文_個別部2　Order句指定
			StringBuffer sql_Buff6 = new StringBuffer();
			if ( "1".equals( inMsg.getObject(EFU0011B501CBSMsg.FUNC_CODE).toString() ) ) {
				// ＫＥＹ＿ソート項目Ｎｏによってソート条件を結合する。
		 		// ソート区分判定
				String strSortKbn = null;
				if (SORT_ASC.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_KBN)))
				{
					// ＫＥＹ＿ソート区分が"1"(昇順)の場合
					strSortKbn = " ASC ";
				}
				else if (SORT_DESC.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_KBN)))
				{
					// ＫＥＹ＿ソート区分が"2"(降順)の場合
					strSortKbn = " DESC ";
				}
				else
				{
					strSortKbn = "";
				}
				
				// ソート項目判定
				sql_Buff6.append("ORDER BY " );
				if(SORT_AREA_REQ_NO.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("FU0011.AREA_REQ_NO ")
					.append(strSortKbn);
				}
				else if(SORT_AREA_REQ_NOW_STEP_CD.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("FU0011.AREA_REQ_NOW_STEP_CD ")
					.append(strSortKbn);
				}
				else if(SORT_AREA_REQ_PCD.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("FU0011.AREA_REQ_PCD ")
					.append(strSortKbn);
				}
				else if(SORT_AREA_REEQ_ADD.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("FU0011.AREA_REQ_STATE_NM ")
					.append(strSortKbn)
					.append(",")
					.append("FU0011.AREA_REQ_CITY_NM ")
					.append(strSortKbn)
					.append(",")
					.append("FU0011.AREA_REQ_OAZTSU_NM ")
					.append(strSortKbn)
					.append(",")
					.append("FU0011.AREA_REQ_AZCHO_NM ")
					.append(strSortKbn)
					.append(",")
					.append("FU0011.AREA_REQ_AD_BNCHIGO ")
					.append(strSortKbn)
					.append(",")
					.append("FU0011.AREA_REQ_ADRTTM ")
					.append(strSortKbn)
					.append(",")
					.append("FU0011.AREA_REQ_ADRRM ")
					.append(strSortKbn);
				}
				else if(SORT_PROSCST_TELNO.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("CK0051.PROSCST_TELNO ")
					.append(strSortKbn);
				}
				else if(SORT_PROSCST_MLAD.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("CK0051.PROSCST_MLAD ")
					.append(strSortKbn);
				}
				else if(SORT_PROSCST_NM.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("CK0051.PROSCST_NM ")
					.append(strSortKbn);
				}
				else if(SORT_PROSCST_KANA.equals(inMsg.getObject(EFU0011B501CBSMsg.KEY_SORT_ITEM_NO)))
				{
					sql_Buff6.append("CK0051.PROSCST_KANA ")
					.append(strSortKbn);
				}
				else
				{
					// ソート項目が指定されていない場合のデフォルト
					sql_Buff6.append("FU0011.AREA_REQ_NO ASC ");
				
				}
			}

			if ( "2".equals( inMsg.getObject(EFU0011B501CBSMsg.FUNC_CODE).toString() ) ) {
				sql_Buff6.append(" ORDER BY ")
						.append("     FU0011.AREA_REQ_NO ASC ");
			}
			
			// SQL文_基本部5　ページングフッタ
			StringBuffer sql_Buff7 = new StringBuffer();
			sql_Buff7.append("    ) ALL_SELECT  ")
					.append(") PAGE_SELECT  ")
					.append("WHERE PAGE_SELECT.LINE BETWEEN ? AND ?  ")
					.append("ORDER BY PAGE_SELECT.LINE ASC  ");

			// パラメータ設定用に運用日時を取得
			String strOpeDate = "";
			try
			{
				strOpeDate = JCCModelCommon.getOpeDate(inMsg, null);
			}catch(Exception e)
			{
				throw new CAANRuntimeException(new JCCFrameworkException("運用日時の取得に失敗しました。",e));
			}

			// SQL文を組み立てる。カウント用
			StringBuffer sql_Count = new StringBuffer();
//			sql_Count
//			.append(sql_Buff2)
//			.append(sql_Buff4)
//			.append(sql_Buff5);
			if ( "1".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				sql_Count
				.append(sql_Buff2)
				.append(" FROM (")
				.append(sql_Buff3)	//Select列
				.append(sql_Buff4)	//From句
				.append(sql_Buff5)	//Where句
				.append(")");
			}
			if ( "2".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				sql_Count
				.append(sql_Buff2)
				.append(" FROM (")
				.append(sql_Buff3)	//Select列
				.append(sql_Buff4)	//From句
				.append(sql_Buff5)	//Where句
				.append(")");
			}


			//prepareStatementにSQL文をセット
			pstmt_Count = con1.prepareStatement(sql_Count.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Count);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定

			CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, strOpeDate);

			// パラメータの設定(ＫＥＹ＿エリアリクエスト番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_NO))
			{
				String[] dchsTypeCds = inMsg.getString(EFU0011B501CBSMsg.KEY_AREA_REQ_NO).split(",");
				
				for(String typeCd : dchsTypeCds)
				{
					CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, typeCd);
				}
				
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト郵便番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_PCD))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_PCD));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト都道府県名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_STATE_NM))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_STATE_NM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト市区町村名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_CITY_NM))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_CITY_NM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト大字通称名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_OAZTSU_NM))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_OAZTSU_NM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト字丁目名、ＫＥＹ＿エリアリクエスト番地号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM) || !inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO))
			{
				// パラメータの設定(ＫＥＹ＿エリアリクエスト字丁目名を指定)
				if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM))
				{
					CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM));
				}
				else
				{
					CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, "''");
				}
				
				// パラメータの設定(ＫＥＹ＿エリアリクエスト番地号を指定)
				if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO))
				{
					CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO));
				}
				else
				{
					CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, "''");
				}
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト建物名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRTTM))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRTTM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト部屋番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRRM))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRRM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト現在工程コードを指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_NOW_STEP_CD))
			{
				String[] dchsTypeCds = inMsg.getString(EFU0011B501CBSMsg.KEY_AREA_REQ_NOW_STEP_CD).split(",");
				
				for(String typeCd : dchsTypeCds)
				{
					CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, typeCd);
				}
			}

			// パラメータの設定(ＫＥＹ＿問合せ客電話番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_TELNO))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_TELNO));
			}

			// パラメータの設定(ＫＥＹ＿問合せ客メールアドレスを指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_MLAD))
			{
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_MLAD));
			}

			// パラメータの設定(ＫＥＹ＿問合せ客名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_NM))
			{
				String keyCustNm = JZMModelCommon.replaceLikeValue(inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_NM));
				keyCustNm = "%" + keyCustNm + "%";
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, (Object)keyCustNm);
			}

			// パラメータの設定(ＫＥＹ＿問合せ客カナ名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_KANA))
			{
				String keyCustNm = JZMModelCommon.replaceLikeValue(inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_KANA));
				keyCustNm = "%" + keyCustNm + "%";
				CAANJDBCUtil.setParam(pstmt_Count, iPCnt++, (Object)keyCustNm);
			}

			// ResultSetの取得
			rsltQuery_Count = pstmt_Count.executeQuery();
			
			// 総検索件数を取得する
			long lDataCnt = 0L;
			if (rsltQuery_Count.next())
			{
				lDataCnt = rsltQuery_Count.getLong("CNT");
			}
			
			long lDispNum = 0L;
			long lDispPage = 0L;
			if ( "1".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				// 表示件数
				lDispNum = inMsg.getStringAsLong(EFU0011B501CBSMsg.DISPLAY_NUM);
				
				// 表示ページ数
				lDispPage = inMsg.getStringAsLong(EFU0011B501CBSMsg.DISPLAY_PAGE_NUM);
				
				// 総ページ数
				String strMaxPage = JKKejbPagingUtil.calcTotalPage(lDataCnt, lDispNum);
				
				// 共通部に値を設定する
				inMsg.set(EFU0011B501CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(lDataCnt));   // 総検索件数
				inMsg.set(EFU0011B501CBSMsg.TOTAL_PAGE_NUM, strMaxPage);   // 総ページ数
			}
			if ( "2".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				// 共通部に値を設定する
				inMsg.set(EFU0011B501CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(lDataCnt));   // 総検索件数
			}
			
			// データ取得件数が0件の場合エラー
			if (0L == lDataCnt)
			{
				inMsg.set(EFU0011B501CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
				return;
			}
			
			if( "1".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) )
			{
				// 最大取得件数
				Long lMaxNum = inMsg.getStringAsLong(EFU0011B501CBSMsg.MAX_SEARCH_NUM);
	
				// 最大取得件数を超えた場合エラー
				if (lDataCnt > lMaxNum){
					inMsg.set(EFU0011B501CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
					return;
				}
			}

			
			// SQL文を組み立てる。一覧用
			StringBuffer sql_Page = new StringBuffer();
			if ( "1".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				sql_Page
				.append(sql_Buff1)	//ページング用ヘッダ
				.append(sql_Buff3)	//Select列
				.append(sql_Buff4)	//From句
				.append(sql_Buff5)	//Where句
				.append(sql_Buff6)	//Order句
				.append(sql_Buff7);	//ページング用フッタ
			}
			if ( "2".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				sql_Page
				.append(sql_Buff3)	//Select列
				.append(sql_Buff4)	//From句
				.append(sql_Buff5)	//Where句
				.append(sql_Buff6);	//Order句
			}

			//prepareStatementにSQL文をセット
			pstmt_Page = con1.prepareStatement(sql_Page.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Page);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			CAANJDBCUtil.setParam(pstmt_Page, iPPage++, strOpeDate);

			// パラメータの設定(ＫＥＹ＿エリアリクエスト番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_NO))
			{
				String[] dchsTypeCds = inMsg.getString(EFU0011B501CBSMsg.KEY_AREA_REQ_NO).split(",");
				
				for(String typeCd : dchsTypeCds)
				{
					CAANJDBCUtil.setParam(pstmt_Page, iPPage++, typeCd);
				}
				
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト郵便番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_PCD))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_PCD));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト都道府県名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_STATE_NM))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_STATE_NM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト市区町村名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_CITY_NM))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_CITY_NM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト大字通称名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_OAZTSU_NM))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_OAZTSU_NM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト字丁目名、ＫＥＹ＿エリアリクエスト番地号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM) || !inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO))
			{
				// パラメータの設定(ＫＥＹ＿エリアリクエスト字丁目名を指定)
				if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM))
				{
					CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_AZCHO_NM));
				}
				else
				{
					CAANJDBCUtil.setParam(pstmt_Page, iPPage++, "''");
				}
				
				// パラメータの設定(ＫＥＹ＿エリアリクエスト番地号を指定)
				if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO))
				{
					CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_AD_BNCHIGO));
				}
				else
				{
					CAANJDBCUtil.setParam(pstmt_Page, iPPage++, "''");
				}
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト建物名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRTTM))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRTTM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト部屋番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRRM))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_AREA_REQ_ADRRM));
			}

			// パラメータの設定(ＫＥＹ＿エリアリクエスト現在工程コードを指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_AREA_REQ_NOW_STEP_CD))
			{
				String[] dchsTypeCds = inMsg.getString(EFU0011B501CBSMsg.KEY_AREA_REQ_NOW_STEP_CD).split(",");
				
				for(String typeCd : dchsTypeCds)
				{
					CAANJDBCUtil.setParam(pstmt_Page, iPPage++, typeCd);
				}
			}

			// パラメータの設定(ＫＥＹ＿問合せ客電話番号を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_TELNO))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_TELNO));
			}

			// パラメータの設定(ＫＥＹ＿問合せ客メールアドレスを指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_MLAD))
			{
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_MLAD));
			}

			// パラメータの設定(ＫＥＹ＿問合せ客名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_NM))
			{
				String keyCustNm = JZMModelCommon.replaceLikeValue(inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_NM));
				keyCustNm = "%" + keyCustNm + "%";
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, (Object)keyCustNm);
			}

			// パラメータの設定(ＫＥＹ＿問合せ客カナ名を指定)
			if(!inMsg.isNull(EFU0011B501CBSMsg.KEY_PROSCST_KANA))
			{
				String keyCustNm = JZMModelCommon.replaceLikeValue(inMsg.getObject(EFU0011B501CBSMsg.KEY_PROSCST_KANA));
				keyCustNm = "%" + keyCustNm + "%";
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, (Object)keyCustNm);

			}
			if ( "1".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) ) {
				// 検索対象行を算出する
				long[] lPages = JKKejbPagingUtil.calcSearchRows(lDispPage, lDispNum);
				long lRowSta = lPages[0];
				long lRowEnd = lPages[1];


				// パラメータの設定(検索開始行を指定)
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, lRowSta);
				// パラメータの設定(検索終了行を指定)
				CAANJDBCUtil.setParam(pstmt_Page, iPPage++, lRowEnd);

			}
			// ResultSetの取得
			rsltQuery_Page = pstmt_Page.executeQuery();
			
			// EFU0011B501CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EFU0011B501CBSMsg1List.AREA_REQ_NO
					, EFU0011B501CBSMsg1List.AREA_REQ_PCD
					, EFU0011B501CBSMsg1List.AREA_REQ_STATE_NM
					, EFU0011B501CBSMsg1List.AREA_REQ_CITY_NM
					, EFU0011B501CBSMsg1List.AREA_REQ_OAZTSU_NM
					, EFU0011B501CBSMsg1List.AREA_REQ_AZCHO_NM
					, EFU0011B501CBSMsg1List.AREA_REQ_AD_BNCHIGO
					, EFU0011B501CBSMsg1List.AREA_REQ_ADRTTM
					, EFU0011B501CBSMsg1List.AREA_REQ_ADRRM
					, EFU0011B501CBSMsg1List.AREA_REQ_NOW_STEP_CD
					, EFU0011B501CBSMsg1List.AREA_REQ_NOW_STEP_CD_NM
					, EFU0011B501CBSMsg1List.PROSCST_NM
					, EFU0011B501CBSMsg1List.PROSCST_KANA
					, EFU0011B501CBSMsg1List.PROSCST_TELNO
					, EFU0011B501CBSMsg1List.PROSCST_MLAD
					, EFU0011B501CBSMsg1List.UPD_DTM
					, EFU0011B501CBSMsg1List.AREA_REQ_UK_YMD
					, EFU0011B501CBSMsg1List.XZAHYO
					, EFU0011B501CBSMsg1List.YZAHYO
					, EFU0011B501CBSMsg1List.ADD_DTM
					// ANK-3506-00-00 ADD START
					, EFU0011B501CBSMsg1List.AREA_REQ_MOTO_SKBT_CD
					, EFU0011B501CBSMsg1List.PROSCST_TRAT_CD
					// ANK-3506-00-00 ADD END
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery_Page,msgKeyList1,"eo.ejb.cbs.cbsmsg.EFU0011B501CBSMsg1List",0);

			// 取得結果が0件の場合は表示ページ該当なしエラー
			if( "1".equals( inMsg.getString(EFU0011B501CBSMsg.FUNC_CODE) ) && 0L == outMsg1.length)
			{
				inMsg.set(EKK1151B001CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
				return;
			}


			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EFU0011B501CBSMsg1List", outMsg1);
			
			

		} catch(SQLException e) {
			inMsg.set(EFU0011B501CBSMsg.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(EFU0011B501CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
}
