/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbECC0011B010TPDA
*	ソースファイル名：JSYejbECC0011B010TPDA.java
*	作成者			：EKek0071
*	日付			：2011年05月24日
*＜機能概要＞
*	SQLFacility
*	テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

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 com.fujitsu.futurity.model.base.CAANCastException;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import eo.common.util.JCCFrameworkException;
import eo.ejb.cbs.cbsmsg.ECC0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECC0011B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECC0011B010CBSMsg1List;
import eo.ejb.cbm.entity.CC0011ETMsg;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JZMModelCommon;

import java.util.ArrayList;

/**
*
*  テンプレートDBアクセス部品　ECC0011B010_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
/**
 * <p>
 * </p>
 * @author 富士通
 */
public class JSYejbECC0011B010TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbECC0011B010TPDA()	{
	}
	
	// メール受信ステータス
	static final String MIDOKU			 = "001";
	static final String KAIDOKU		 = "002";
	static final String HENSHINZUMI 	 = "003";
	static final String HIHYOUJI		 = "004";
	static final String SETTING_ON		 = "1";
	static final String SETTING_OFF	 = "0";
	static final String ERR_NO_DT		 = "1";
	static final String ERR_OVR_DT		 = "2";
	static final String ERR_NO_TRGT_DT	 = "3";
	static final String DEFAULT_TIME	 = "000000000";
	// パラメータ格納位置
	int paramIndex = 0;
	
	/**
	*   ECC0011B010_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CC0011ETMsg.getTableName());
			
			/*******************************
			 * データ件数チェック
			 * 条件に合致する全件数を取得
			 *******************************/
			
			// 取得データ件数
			long allDataNum = 0;
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT COUNT(CC0011TMP1.MAIL_RCV_NO) CNT")
					.append("   FROM ( ")
					.append("     SELECT CC0011.MAIL_RCV_NO")
					.append("       FROM CC_T_MAIL_RCV CC0011, ")
					.append("            CC_T_MLAD CC0131, ")
					.append("            CC_T_TEMP_FILE CC0031 ");
			// SQL文_個別部1
			if ( "1".equals( inMsg.getObject(ECC0011B010CBSMsg.FUNC_CODE).toString() ) ) {
 				sql_Buff.append(this.setCondition(inMsg))
						.append("     GROUP BY ")
						.append("       CC0011.MAIL_RCV_NO, ")
						.append("       CC0011.MAIL_RCV_STAT, ")
						.append("       CC0011.MAIL_RCV_CD, ")
						.append("       CC0011.MAIL_TITLE, ")
						.append("       CC0011.MAIL_RCV_DTM, ")
						.append("       CC0131.MLAD, ")
						.append("       CC0131.MLAD_DSP_NM, ")
						.append("       CC0031.MAIL_RCV_NO ")
						.append("     ORDER BY ")
						.append("       CC0011.MAIL_RCV_DTM DESC ")
 						.append("     )CC0011TMP1 ");
			}
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ( "1".equals( inMsg.getString(ECC0011B010CBSMsg.FUNC_CODE) ) ) {
				// パラメータ格納位置初期化
				this.paramIndex = 0;
				// パラメータ設定(絞り込み条件)
				this.getParamater1(inMsg, pstmt);
			}
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			try{
				// 抽出結果を確認し、
				// エラーフラグを設定
				if(rsltQuery.next()){
					// 総検索件数を退避
					allDataNum = rsltQuery.getLong("CNT");
					// 検索結果が0件の場合
					if(allDataNum == 0){
						// 「データ無し(:0)」を設定
						inMsg.set(ECC0011B010CBSMsg.SEARCH_ERR_FLG, ERR_NO_DT);
					// 共通部項目に指定されている最大検索件数を超えた場合
					}else if(rsltQuery.getLong("CNT") > Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.MAX_SEARCH_NUM))){
						// 「最大検索件数超え(:2)」を設定
						inMsg.set(ECC0011B010CBSMsg.SEARCH_ERR_FLG, ERR_OVR_DT);
					}
					// チェックの結果、エラーコードが設定されていた場合は、
					// 総検索件数、総ページ数を追加設定して処理を終了する。
					if(inMsg.getString(ECC0011B010CBSMsg.SEARCH_ERR_FLG) != null){
						// 共通項目設定
						this.setPageInfo(inMsg, allDataNum);
						return;
					}
				}
			}
			catch(NumberFormatException e){
				throw new CAANRuntimeException(e);
			}
			
			/*******************************
			 * メール受信一覧データ検索
			 *******************************/

			// SQL文_基本部1
			sql_Buff.delete(0,sql_Buff.length());
			sql_Buff.append("SELECT CC0011TMP2.MAIL_RCV_NO, ")
					.append("       CC0011TMP2.MAIL_RCV_STAT, ")
					.append("       (SELECT ZM0171.CD_DIV_NM ")
					.append("          FROM ZM_M_CD_NM_KANRI ZM0171 ")
					.append("         WHERE ZM0171.CD_SBT_CD = 'CD00787' ")
					.append("           AND ZM0171.CD_DIV = CC0011TMP2.MAIL_RCV_STAT ")
					.append("           AND ZM0171.CD_TSTAYMD < ? ")
					.append("           AND ZM0171.CD_TENDYMD > ? ")
					.append("           AND ZM0171.MK_FLG = '0' ")
					.append("        ) AS ZM0171TMP, ")
					.append("       CC0011TMP2.MAIL_RCV_CD, ")
					.append("       CC0011TMP2.MAIL_TITLE, ")
					.append("       CC0011TMP2.MAIL_RCV_DTM, ")
					.append("       CC0011TMP2.MLAD, ")
					.append("       CC0011TMP2.MLAD_DSP_NM, ")
					.append("       CC0011TMP2.FILE_UM ")
					.append(" FROM ( SELECT CC0011TMP1.MAIL_RCV_NO, ")
					.append("               CC0011TMP1.MAIL_RCV_STAT, ")
					.append("               CC0011TMP1.MAIL_RCV_CD, ")
					.append("               CC0011TMP1.MAIL_TITLE, ")
					.append("               CC0011TMP1.MAIL_RCV_DTM, ")
					.append("               CC0011TMP1.MLAD, ")
					.append("               CC0011TMP1.MLAD_DSP_NM, ")
					.append("               CC0011TMP1.FILE_UM, ")
					.append("               ROWNUM AS LINE ")
					.append("        FROM ( SELECT CC0011.MAIL_RCV_NO, ")
					.append("                      CC0011.MAIL_RCV_STAT, ")
					.append("                      CC0011.MAIL_RCV_CD, ")
					.append("                      CC0011.MAIL_TITLE, ")
					.append("                      CC0011.MAIL_RCV_DTM, ")
					.append("                      CC0131.MLAD, ")
					.append("                      CC0131.MLAD_DSP_NM, ")
					.append("                      DECODE(CC0031.MAIL_RCV_NO, null , '1', '0') AS FILE_UM ")
					.append("                 FROM CC_T_MAIL_RCV CC0011, ")
					.append("                      CC_T_MLAD CC0131, ")
					.append("                      CC_T_TEMP_FILE CC0031 ");
			// SQL文_個別部1
			if ( "1".equals( inMsg.getObject(ECC0011B010CBSMsg.FUNC_CODE).toString() ) ) {
				sql_Buff.append(this.setCondition(inMsg))
						.append("             GROUP BY CC0011.MAIL_RCV_NO, ")
						.append("                      CC0011.MAIL_RCV_STAT, ")
						.append("                      CC0011.MAIL_RCV_CD, ")
						.append("                      CC0011.MAIL_TITLE, ")
						.append("                      CC0011.MAIL_RCV_DTM, ")
						.append("                      CC0131.MLAD, ")
						.append("                      CC0131.MLAD_DSP_NM, ")
						.append("                      CC0031.MAIL_RCV_NO ")
						.append("             ORDER BY CC0011.MAIL_RCV_DTM DESC ")
						.append("             ) CC0011TMP1 ")
						.append("      ) CC0011TMP2 ")
						.append(" WHERE CC0011TMP2.LINE >= ? ")
						.append("   AND CC0011TMP2.LINE <= ? ");
			}
			
			
			//2012/03/21 prepareStatementをクローズする start
			if(null != pstmt)
			{
				pstmt.close();
			}
			//2012/03/21 prepareStatementをクローズする end
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ( "1".equals( inMsg.getString(ECC0011B010CBSMsg.FUNC_CODE) ) ) {
				// 運用日時取得
				String strOpeDate = "";
				// パラメータ格納位置初期化
				this.paramIndex = 0;
				
				try
				{
					// 運用日時を取得
					strOpeDate = inMsg.getString(JCCModelCommon.getOpeDate(inMsg, null));
				}
				catch(CAANCastException e)
				{
					throw new CAANRuntimeException(new JCCFrameworkException("運用日時の取得に失敗しました。",e));
				}
				
				// パラメータ設定(運用日時(FROM用)を指定)
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, strOpeDate);
				this.paramIndex++;
				// パラメータ設定(運用日時(TO用)を指定)
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, strOpeDate);
				this.paramIndex++;
				
				// パラメータ設定(絞り込み条件)
				this.getParamater1(inMsg, pstmt);
				// パラメータ設定(検索ページ範囲)
				this.getParamater2(inMsg, pstmt);
			}
			
			//2012/03/21 ResultSetをクローズする start
			if(null != rsltQuery)
			{
				rsltQuery.close();
			}
			//2012/03/21 ResultSetをクローズする start
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// ECC0011B010CBSMsgの明細にセットする項目
			String[] msgKeyList = {
					  ECC0011B010CBSMsg1List.MAIL_RCV_NO
					, ECC0011B010CBSMsg1List.MAIL_RCV_STAT
					, ECC0011B010CBSMsg1List.MAIL_RCV_STAT_NM
					, ECC0011B010CBSMsg1List.MAIL_RCV_CD
					, ECC0011B010CBSMsg1List.MAIL_TITLE
					, ECC0011B010CBSMsg1List.MAIL_RCV_DTM
					, ECC0011B010CBSMsg1List.SENDM_MLAD
					, ECC0011B010CBSMsg1List.SENDM_MLAD_DSP_NM
					, ECC0011B010CBSMsg1List.FILE_UM
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg2 = mapMessageList(rsltQuery,msgKeyList,"eo.ejb.cbs.cbsmsg.ECC0011B010CBSMsg1List",0);
			
			// 抽出結果を確認し、
			// エラーフラグを設定
			if(outMsg2.length == 0){
				// 「表示ページに該当するデータ無し(:3)」を設定
				inMsg.set(ECC0011B010CBSMsg.SEARCH_ERR_FLG, ERR_NO_TRGT_DT);
				// 共通項目設定
				this.setPageInfo(inMsg, allDataNum);
				return;
			}
			
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("ECC0011B010CBSMsg1List", outMsg2);
			
			// 共通項目設定
			this.setPageInfo(inMsg, allDataNum);
			
		} catch(SQLException e) {
			inMsg.set(ECC0011B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(ECC0011B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	
	/**
	*   SQLの抽出条件を組み立てます。<br>
	*   @param inMsg           入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	private String setCondition(CAANMsg inMsg){
		
		// WHERE条件格納用
		StringBuffer sbCondition = new StringBuffer();
		StringBuffer sbStatus = new StringBuffer();
		
		// 設定されているステータスを取得
		ArrayList<String> alMailRcvStat = this.chkMailRcvStat(inMsg);
		
		// メール受信コード
		sbCondition.append(" WHERE CC0011.MAIL_RCV_CD = ? ");
		
		// 設定されているステータスの
		// 件数に応じて文字列を組み立て
		if(alMailRcvStat.size() == 0){
			// NoOperation
		// ステータスが1件のみ
		}else if(alMailRcvStat.size() == 1){
			// 抽出条件組み立て
			sbCondition.append("   AND CC0011.MAIL_RCV_STAT = ? ");
		// ステータスが複数件
		}else if(alMailRcvStat.size() >= 2){
			sbCondition.append("   AND CC0011.MAIL_RCV_STAT IN (");
			// 受信ステータス分ステートメントを設定
			for(int i=0; i < alMailRcvStat.size(); i++){
				sbStatus.append(",?");
			}
			// 抽出条件組み立て
			sbCondition.append(sbStatus.toString().replaceFirst(",", ""));
			sbCondition.append(") ");
		}

		// メールタイトルの入力値が設定されていた場合
		if (inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_TITLE ) != null)
		{
			sbCondition.append("   AND CC0011.MAIL_TITLE LIKE ? ")
			// 2012/01/18 エスケープ付与 start
						.append(JZMModelCommon.ESCAPE_SQL_STRING);
			// 2012/01/18 エスケープ付与 end
		}
		// メール受信年月日(FROM)の入力値が設定されていた場合
		if (inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_YMD_FROM) != null)
		{
			sbCondition.append("   AND CC0011.MAIL_RCV_DTM >= ? ");
		}
		// メール受信年月日(TO)の入力値が設定されていた場合
		if (inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_YMD_TO) != null)
		{
			sbCondition.append("   AND CC0011.MAIL_RCV_DTM <= ? ");
		}
		// 送信元アドレスの入力値が設定されていた場合
		if (inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD) != null)
		{
			sbCondition.append("   AND CC0131.MLAD LIKE ? ")
			// 2012/01/18 エスケープ付与 start
						.append(JZMModelCommon.ESCAPE_SQL_STRING);
			// 2012/01/18 エスケープ付与 end

		}
		// 送信元アドレス表示名の入力値が設定されていた場合
		if (inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD_DSP_NM) != null)
		{
			sbCondition.append("   AND CC0131.MLAD_DSP_NM LIKE ? ")
			// 2012/01/18 エスケープ付与 start
						.append(JZMModelCommon.ESCAPE_SQL_STRING);
			// 2012/01/18 エスケープ付与 end

		}

		// メール受信ステータス名称
		sbCondition.append("   AND CC0131.MLAD_SET_FIELD_CD = '02' ");

		// 添付ファイルの値が"0"(有)の場合
		if ("0".equals(inMsg.getObject(ECC0011B010CBSMsg.KEY_FILE_UM)))
		{
			sbCondition.append("   AND CC0031.MAIL_RCV_NO IS NOT NULL ");
		}
		
		// 無効フラグ
		sbCondition.append("   AND CC0011.MK_FLG = '0' ");
		// メールアドレステーブルを外部結合
		sbCondition.append("   AND CC0011.MAIL_RCV_NO = CC0131.MAIL_RCV_NO(+) ");
		// 添付ファイルテーブルを外部結合
		sbCondition.append("   AND CC0011.MAIL_RCV_NO = CC0031.MAIL_RCV_NO(+) ");
		
		// 組み立てた抽出条件を返却
		return sbCondition.toString();
	}
	
	/**
	*   SQLパラメータ(絞り込み条件)を設定します。<br>
	*   @param inMsg           入力値の格納されたCBSMsg <br>
	*   @param pstmt           プリペアステートメント <br>
	*   @param paramIndex      パラメータ格納位置 <br>
	*   @return void
	*/
	private void getParamater1(CAANMsg inMsg, PreparedStatement pstmt){
		
		try{
			// パラメータの設定(ＫＥＹ＿メール受信コードを指定)
			CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_CD));
			this.paramIndex++;
			
			// 設定されているステータスを取得
			ArrayList<String> alMailRcvStat = this.chkMailRcvStat(inMsg);
			
			// 設定されているステータスの
			// 件数に応じて文字列を組み立て
			if(alMailRcvStat.size() == 0){
				// NoOperation
			// ステータスが1件のみ
			}else if(alMailRcvStat.size() == 1){
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, alMailRcvStat.get(0));
				this.paramIndex++;
			// ステータスが複数件
			}else if(alMailRcvStat.size() >= 2){
				// 先頭がカンマの場合は削除
				for(int i=0; i<alMailRcvStat.size();i++){
					// パラメータの設定(ＫＥＹ＿メール受信ステータスを指定)
					CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, alMailRcvStat.get(i));
					this.paramIndex++;
				}
			}
			
			// メールタイトルの入力値が設定されていた場合
			if (inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_TITLE ) != null)
			{
				// パラメータの設定(ＫＥＹ＿メールタイトルを指定)
				// LIKE検索文字列置き換え処理 2012/01/18 start
				//CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, "%" + inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_TITLE) + "%");
				String mailTitle = JZMModelCommon.replaceLikeValue(inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_TITLE));
				mailTitle = "%" + mailTitle + "%";
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, mailTitle);
				// LIKE検索文字列置き換え処理 2012/01/18 end
				this.paramIndex++;
			}
			// メール受信年月日(FROM)の入力値が設定されていた場合
			if (inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_YMD_FROM) != null)
			{
				// パラメータの設定(ＫＥＹ＿メール受信年月日（FROM）を指定)
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, 
						inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_YMD_FROM).toString() + DEFAULT_TIME);
				this.paramIndex++;
			}
			// メール受信年月日(TO)の入力値が設定されていた場合
			if (inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_YMD_TO) != null)
			{
				// パラメータの設定(ＫＥＹ＿メール受信年月日（TO）を指定)
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, 
						inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_YMD_TO).toString() + DEFAULT_TIME);
				this.paramIndex++;
			}
			// 送信元アドレスの入力値が設定されていた場合
			if (inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD) != null)
			{
				// パラメータの設定(ＫＥＹ＿送信元アドレスを指定)
				// LIKE検索文字列置き換え処理 2012/01/18 start
				//CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, "%" + inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD) + "%");
				String sndmMlad = JZMModelCommon.replaceLikeValue(inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD));
				sndmMlad = "%" + sndmMlad + "%";
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, sndmMlad);
				// LIKE検索文字列置き換え処理 2012/01/18 end
				this.paramIndex++;
			}
			// 送信元アドレス表示名の入力値が設定されていた場合
			if (inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD_DSP_NM) != null)
			{
				// パラメータの設定(ＫＥＹ＿送信元アドレス表示名を指定)
				// LIKE検索文字列置き換え処理 2012/01/18 start
				//CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, "%" + inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD) + "%");
				String sndmMladDspNm = JZMModelCommon.replaceLikeValue(inMsg.getObject(ECC0011B010CBSMsg.KEY_SENDM_MLAD_DSP_NM));
				sndmMladDspNm = "%" + sndmMladDspNm + "%";
				CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, sndmMladDspNm);
				// LIKE検索文字列置き換え処理 2012/01/18 end
				this.paramIndex++;
			}
			
		}catch(Exception e){
			inMsg.set(ECC0011B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
	}
	
	
	/**
	*   SQLパラメータ(検索ページ範囲)を設定します。<br>
	*   @param inMsg           入力値の格納されたCBSMsg <br>
	*   @param pstmt           プリペアステートメント <br>
	*   @param paramIndex      パラメータ格納位置 <br>
	*   @return void
	*/
	private void getParamater2(CAANMsg inMsg, PreparedStatement pstmt){
		
		try{
			
			// 画面表示データ開始レコード行
			long stratPageRow = 0;
			// 画面表示データ終了レコード行
			long endPageRow = 0;
			
			// サービスインターフェイス共通部項目.表示件数×
			// (サービスインターフェイス共通部.表示ページ番号-1)+1
			stratPageRow = Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_NUM)) * 
							(Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_PAGE_NUM))-1) + 1;
			
			// サービスインターフェイス共通部項目.表示件数×
			// サービスインターフェイス共通部.表示ページ番号
			endPageRow = Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_NUM)) * 
							Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_PAGE_NUM));
			
			// パラメータの設定(画面表示データ開始レコード行を指定)
			CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, stratPageRow);
			this.paramIndex++;
			// パラメータの設定(画面表示データ終了レコード行を指定)
			CAANJDBCUtil.setParam(pstmt, this.paramIndex + 1, endPageRow);
			this.paramIndex++;
			
		}catch(Exception e){
			inMsg.set(ECC0011B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	*   メール受信ステータスをリストへ設定し返却します。<br>
	*   @param inMsg           入力値の格納されたCBSMsg <br>
	*   @return strMailRcvStat  メール受信ステータス格納用リスト <br>
	*/
	private ArrayList<String> chkMailRcvStat(CAANMsg inMsg){
		
		try{
			// ＫＥＹ＿メール受信ステータスの組み立て用
			ArrayList<String> alMailRcvStat = new ArrayList<String>();
			
			// 未読
			if ( (SETTING_ON).equals(inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_STAT_MIDOKU)) ) {
				alMailRcvStat.add(MIDOKU);
			}
			// 既読
			if ( (SETTING_ON).equals(inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_STAT_KIDOKU)) ) {
				alMailRcvStat.add(KAIDOKU);
			}
			// 返信済
			if ( (SETTING_ON).equals(inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_STAT_HNSIN)) ) {
				alMailRcvStat.add(HENSHINZUMI);
			}
			// 非表示
			if ( (SETTING_ON).equals(inMsg.getObject(ECC0011B010CBSMsg.KEY_MAIL_RCV_STAT_HIDSP)) ) {
				alMailRcvStat.add(HIHYOUJI);
			}
			
			return alMailRcvStat;
		
		}catch(Exception e){
			inMsg.set(ECC0011B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	*   メール受信ステータスをリストへ設定し返却します。<br>
	*   @param inMsg           入力値の格納されたCBSMsg <br>
	*   @param allDataNum      取得データ件数 <br>
	*   @return void <br>
	*/
	private void setPageInfo(CAANMsg inMsg, long allDataNum){
		
		try{
			// 表示件数が0の場合は除算を通さない
			if(Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_NUM)) == 0){
				throw new CAANRuntimeException("表示件数に0が設定されています。");
			}
			
			// 総検索件数を設定
			inMsg.set(ECC0011B010CBSMsg.TOTAL_SEARCH_NUM, Long.toString(allDataNum));
			// 総ページ数を設定
			long allPageNum = allDataNum/Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_NUM));
			// 検索件数/表示件数の結果余りが生じる場合
			if(allDataNum % Long.parseLong(inMsg.getString(ECC0011B010CBSMsg.DISPLAY_NUM)) == 0){
				// 「検索件数/表示件数」を設定
				inMsg.set(ECC0011B010CBSMsg.TOTAL_PAGE_NUM, Long.toString(allPageNum));
			}
			else{
				// 「検索件数/表示件数(余りがある場合は＋1)」を設定
				inMsg.set(ECC0011B010CBSMsg.TOTAL_PAGE_NUM, Long.toString((allPageNum+1)));
			}
		
		}catch(Exception e){
			inMsg.set(ECC0011B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
	}
}
