/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK3111B010TPDA
*	ソースファイル名：JSYejbEKK3111B010TPDA.java
*	作成者			：EK944140
*	日付			：2017年09月20日
*＜機能概要＞
*	解約レター登録一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*  ｖ33.00.00   2017/12/06  FJ)三原     【ANK-3346-00-00】【解約レター機能関連】改善要望　Ｓｔｅｐ１
*  v52.00.00   2021/02/08  GDC)ニール     【ANK-3909-00-00】解約レター電子化
*  v59.00.00   2022/04/14   FJ)平野     【ANK-4245-00-00】【eo】ローゼット化対応フォロー案件
********************************************************************************/

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.ejb.cbs.cbsmsg.EKK3111B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3111B010CBSMsg1List;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.common.JKKejbPagingUtil;

/**
*
*  テンプレートDBアクセス部品　EKK3111B010_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKK3111B010TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEKK3111B010TPDA()	{
	}
	/** ＫＥＹ＿ソート項目No_NULL */
	private static final String SORT_NO_NULL = "KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID , SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD  ";
	
	/**
	*   EKK3111B010_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt_Page = null;
		// プリペアステートメント
		PreparedStatement pstmt_Count = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		// リザルトセット
		ResultSet rsltQuery_Count = null;
		
		// パラメータのカウント
		int iPCnt = 1;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());

			// INPUT情報取得
			//ＫＥＹ＿SYSID
			String key_sysid = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_SYSID);
			//ＫＥＹ＿請求契約番号
			String key_seiky_kei_no = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_SEIKY_KEI_NO);
			//ＫＥＹ＿お客さまID
			String key_svc_kei_no = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_SVC_KEI_NO);
			//ＫＥＹ＿レター登録年月日（自）
			String key_letter_add_ymd_from = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_LETTER_ADD_YMD_FROM);
			//ＫＥＹ＿レター登録年月日（至）
			String key_letter_add_ymd_to = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_LETTER_ADD_YMD_TO);
			// ANK-3346-00-00 ADD START
			//ＫＥＹ＿登録者ID
			String key_add_user_id = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_ADD_USER_ID);
			// ANK-3346-00-00 ADD END
			//ＫＥＹ＿発行区分
			String key_hak_div = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_HAK_DIV);
			//ＫＥＹ＿照合済
			String key_shogo_flg = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_SHOGO_FLG);
			//ＫＥＹ＿未送信
			String key_mi_send = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_MI_SEND);
			//ＫＥＹ＿レター発行要
			String key_letter_hak_y = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_LETTER_HAK_Y);
			//ＫＥＹ＿ソート項目No
			String key_sort_item_no = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_SORT_ITEM_NO);
			//ＫＥＹ＿ソート区分
			String key_sort_kbn = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_SORT_KBN);
			
			
			// ANK-3909-00-00 ADD START
			String key_after_shogo_stat_flg = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_AFTER_SHOGO_STAT_FLG);
			String key_mypage_dsp_naiyo_flg = (String)inMsg.getString(EKK3111B010CBSMsg.KEY_MYPAGE_DSP_NAIYO_FLG);
			// ANK-3909-00-00 ADD END
			
			// SQL文_カウント件数取得
			// ※最大検索件数を超えた場合、検索エラーフラグに"2"を設定する
			StringBuffer sql_Buff_Select_Count = new StringBuffer();
			sql_Buff_Select_Count.append(" SELECT /*EKK3111B010*/ COUNT(*) AS CNT ");
			
			// SQL文_ページング情報取得1
			StringBuffer sql_Buff_Select_Page_Head = new StringBuffer();
			sql_Buff_Select_Page_Head.append(" SELECT /*EKK3111B010*/ * ")
									 .append("  FROM ( SELECT ALL_SELECT.*, ROWNUM AS LINE ")
									 .append("   FROM ( ");

			// SQL文_ページング情報取得2
			StringBuffer sql_Buff_Select_Foot = new StringBuffer();
			sql_Buff_Select_Foot.append("   ) ALL_SELECT ")
								.append("  ) PAGE_SELECT ")
								.append(" WHERE PAGE_SELECT.LINE BETWEEN ? AND ?  ")
								.append(" ORDER BY PAGE_SELECT.LINE ASC ");

			// SQL文_SQLベース（SELECT句）
			StringBuffer sql_Buff_Select_Base = new StringBuffer();
			sql_Buff_Select_Base.append("  SELECT ")
								.append("   KK3111.DSL_LETTER_ADD_NO ")
								.append("  , KK3111.DSL_LETTER_STAT ")
								.append("  , KK3111.DSL_LETTER_HAK_DIV ")
								.append("  ,   ( ")
								.append("       SELECT ")
								.append("             ZM0171_01.CD_DIV_NM ")
								.append("        FROM ")
								.append("             ZM_M_CD_NM_KANRI ZM0171_01 ")
								.append("        WHERE ")
								.append("             ZM0171_01.CD_SBT_CD = 'CD01722' AND ")
								.append("             ZM0171_01.CD_DIV = KK3111.DSL_LETTER_HAK_DIV AND ")
								.append("             ZM0171_01.MK_FLG = '0' ")
								.append("      )DSL_LETTER_HAK_DIV_NM ")
								.append("  , KK3111.DSL_LETTER_HAK_YH ")
								.append("  , KK3111.DSL_LETTER_ADD_YMD ")
								.append("  , KK3111.DSL_LETTER_SND_YMD ")
								.append("  , KK3111.DSL_LETTER_CL_YMD ")
								.append("  , KK3111.DSL_LETTER_SHOGO_FLG ")
								.append("  ,( ")
								.append("       SELECT ")
								.append("             ZM0171_02.CD_DIV_NM ")
								.append("        FROM ")
								.append("             ZM_M_CD_NM_KANRI ZM0171_02 ")
								.append("        WHERE ")
								.append("             ZM0171_02.CD_SBT_CD = 'CD01724' AND ")
								.append("             ZM0171_02.CD_DIV = KK3111.DSL_LETTER_SHOGO_FLG AND ")
								.append("             ZM0171_02.MK_FLG = '0' ")
								.append("      )DSL_LETTER_SHOGO_FLG_NM ")
								.append("  , ")
								.append("  CASE WHEN KK3111.NET_SEIKY_KEI_NO IS NOT NULL THEN KK3111.NET_SEIKY_KEI_NO ")
								.append("       WHEN KK3111.TEL_SEIKY_KEI_NO IS NOT NULL THEN KK3111.TEL_SEIKY_KEI_NO ")
								.append("  ELSE KK3111.TV_SEIKY_KEI_NO END AS SEIKY_KEI_NO ")
								.append("  , KK3111.SYSID ")
								.append("  , KK3111.NET_SVC_KEI_NO ")
								.append("  , KK3111.TEL_SVC_KEI_NO ")
								.append("  , KK3111.TV_SVC_KEI_NO ")
								.append("  , KK3111.DSL_LETTER_SOHUS_STATE_NM ")
								// ANK-3346-00-00 ADD START
								.append("  ,( ")
								.append("       SELECT ")
								.append("             ZM0051.USER_NM ")
								.append("        FROM ")
								.append("             ZM_M_USER ZM0051 ")
								.append("        WHERE ")
								.append("             ZM0051.USER_ID = KK3111.ADD_OPEACNT AND ")
								.append("             ZM0051.MK_FLG = '0' ")
								.append("      )ADD_USER_NM ")
								.append("  ,KK3111.ADD_OPEACNT ")
								// ANK-3346-00-00 ADD END
								.append("  , KK3111.UPD_DTM ")
								// ANK-4245-00-00 ADD START
								.append("  , KK3111.SVC_KEI_KAISEN_UCWK_NO ")
								// ANK-4245-00-00 ADD END
								.append("    ");
			// SQL文_SQLベース（FROM句）
			StringBuffer sql_Buff_From_Base = new StringBuffer();
			  sql_Buff_From_Base.append(" FROM ")
								.append("   KK_T_DSL_LETTER_ADD KK3111 ");

			// SQL文_SQLベース（WHERE句） 
			StringBuffer sql_Buff_Where_Base = new StringBuffer();
			sql_Buff_Where_Base = setWhereBase(sql_Buff_Where_Base 
											   , key_sysid 
											   , key_seiky_kei_no 
											   , key_svc_kei_no 
											   , key_letter_add_ymd_from 
											   , key_letter_add_ymd_to
											   // ANK-3346-00-00 ADD START
											   , key_add_user_id
											   // ANK-3346-00-00 ADD END
											   , key_hak_div
											   , key_shogo_flg 
											   , key_mi_send
											   //  ANK-3909-00-00 DEL START
											   // , key_letter_hak_y);
											   //  ANK-3909-00-00 DEL END
											   // ANK-3909-00-00 ADD START
											   , key_letter_hak_y
											   , key_after_shogo_stat_flg
											   , key_mypage_dsp_naiyo_flg
											   // ANK-3909-00-00 ADD END
											   );
			// SQL文_SQLベース（ORDER BY句）
			StringBuffer sql_Buff_OrderBy_Base = new StringBuffer();
			sql_Buff_OrderBy_Base = setOrderByBase(sql_Buff_OrderBy_Base, key_sort_item_no, key_sort_kbn);
			
			//* -----------------カウント数を取得-------------------*//	
			// SQL組み立て_件数情報を取得
			StringBuffer sql_Count = new StringBuffer();
			sql_Count.append(sql_Buff_Select_Count)  // 件数取得
					 .append(sql_Buff_From_Base)     // 取得スキーマ
					 .append(sql_Buff_Where_Base);   // 条件
			
			//prepareStatementにSQL文をセット
			pstmt_Count = con1.prepareStatement(sql_Count.toString());
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Count);
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ("1".equals(inMsg.getString(EKK3111B010CBSMsg.FUNC_CODE)))
			{
				setPramWhere(pstmt_Count
							, iPCnt , key_sysid
							, key_seiky_kei_no , key_svc_kei_no
							, key_letter_add_ymd_from , key_letter_add_ymd_to
							// ANK-3346-00-00 ADD START
							, key_add_user_id
							// ANK-3346-00-00 ADD END
							, key_hak_div , key_shogo_flg 
							, key_mi_send , key_letter_hak_y);
			}		   
			// ResultSetの取得
			rsltQuery_Count = pstmt_Count.executeQuery();
			// 総検索件数を取得する
			Long lDataCnt = 0L;
			if (rsltQuery_Count.next())
			{
				lDataCnt = rsltQuery_Count.getLong("CNT");
			}
			// 表示件数
			long lDispNum = inMsg.getStringAsLong(EKK3111B010CBSMsg.DISPLAY_NUM);
			
			// 表示ページ数
			long lDispPage = inMsg.getStringAsLong(EKK3111B010CBSMsg.DISPLAY_PAGE_NUM);
			
			// 最大取得件数
			long lMaxNum = inMsg.getStringAsLong(EKK3111B010CBSMsg.MAX_SEARCH_NUM);
			
			// 総ページ数
			String strMaxPage = JKKejbPagingUtil.calcTotalPage(lDataCnt, lDispNum);
			
			// 共通部に値を設定する
			inMsg.set(EKK3111B010CBSMsg.TOTAL_SEARCH_NUM, String.valueOf(lDataCnt));   // 総検索件数
			inMsg.set(EKK3111B010CBSMsg.TOTAL_PAGE_NUM, strMaxPage);   // 総ページ数
			
			if (0 == lDataCnt)
			{
				inMsg.set(EKK3111B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
				return;
			}
			// 取得件数が10000件超えるの場合、エラーを設定する
			if(lDataCnt > lMaxNum)
			{
				inMsg.set(EKK3111B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
				return;
			}
			
			//* -----------------ページング情報を取得-------------------*//	
			// SQL組み立て_情報を取得
			StringBuffer sql_search = new StringBuffer();
			sql_search.append(sql_Buff_Select_Page_Head)  // ページングヘッダ
					  .append(sql_Buff_Select_Base)       // 項目取得
					  .append(sql_Buff_From_Base)         // 取得スキーマ
					  .append(sql_Buff_Where_Base)        // 条件
					  .append(sql_Buff_OrderBy_Base)      // ソート項目
					  .append(sql_Buff_Select_Foot);      // ページングフッタ
			
			//prepareStatementにSQL文をセット
			pstmt_Page = con1.prepareStatement(sql_search.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_search);
			
			// 検索対象行を算出する
			long[] lPages = JKKejbPagingUtil.calcSearchRows(lDispPage, lDispNum);
			long lRowSta = lPages[0];
			long lRowEnd = lPages[1];
			
			iPCnt = 1;
			// Where句のパラーメタ情報設定する
			iPCnt = setPramWhere(pstmt_Page
					, iPCnt , key_sysid
					, key_seiky_kei_no , key_svc_kei_no
					, key_letter_add_ymd_from , key_letter_add_ymd_to
					// ANK-3346-00-00 ADD START
					, key_add_user_id
					// ANK-3346-00-00 ADD END
					, key_hak_div , key_shogo_flg 
					, key_mi_send , key_letter_hak_y);
			
			// ページングのパラーメタ情報設定
			// パラメータの設定(検索開始行を指定)
			CAANJDBCUtil.setParam(pstmt_Page, iPCnt++, lRowSta);
			// パラメータの設定(検索終了行を指定)
			CAANJDBCUtil.setParam(pstmt_Page, iPCnt++, lRowEnd);
			
			// ResultSetの取得
			rsltQuery = pstmt_Page.executeQuery();
			
			// EKK3111B010CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					EKK3111B010CBSMsg1List.DSL_LETTER_ADD_NO  
					, EKK3111B010CBSMsg1List.DSL_LETTER_STAT  
					, EKK3111B010CBSMsg1List.DSL_LETTER_HAK_DIV  
					, EKK3111B010CBSMsg1List.DSL_LETTER_HAK_DIV_NM  
					, EKK3111B010CBSMsg1List.DSL_LETTER_HAK_YH  
					, EKK3111B010CBSMsg1List.DSL_LETTER_ADD_YMD  
					, EKK3111B010CBSMsg1List.DSL_LETTER_SND_YMD  
					, EKK3111B010CBSMsg1List.DSL_LETTER_CL_YMD  
					, EKK3111B010CBSMsg1List.DSL_LETTER_SHOGO_FLG  
					, EKK3111B010CBSMsg1List.DSL_LETTER_SHOGO_FLG_NM  
					, EKK3111B010CBSMsg1List.SEIKY_KEI_NO  
					, EKK3111B010CBSMsg1List.SYSID  
					, EKK3111B010CBSMsg1List.NET_SVC_KEI_NO  
					, EKK3111B010CBSMsg1List.TEL_SVC_KEI_NO  
					, EKK3111B010CBSMsg1List.TV_SVC_KEI_NO  
					, EKK3111B010CBSMsg1List.DSL_LETTER_SOHUS_STATE_NM  
					// ANK-3346-00-00 ADD START
					, EKK3111B010CBSMsg1List.ADD_USER_NM
					, EKK3111B010CBSMsg1List.ADD_OPEACNT	
					// ANK-3346-00-00 ADD END
					, EKK3111B010CBSMsg1List.UPD_DTM 
					// ANK-4245-00-00 ADD START
					, EKK3111B010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO
					// ANK-4245-00-00 ADD END
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EKK3111B010CBSMsg1List",0);
			// 取得結果が0件の場合は表示ページ該当なしエラー
			if (0 >= outMsg1.length)
			{
				inMsg.set(EKK3111B010CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
				return;
			}
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK3111B010CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(EKK3111B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery_Count != null )
				{
					rsltQuery_Count.close();
				}
				if (pstmt_Count != null)
				{
					pstmt_Count.close();
				}
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt_Page != null){
					pstmt_Page.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
				
				
			}catch(SQLException e){
				inMsg.set(EKK3111B010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}

	
	/**
	 * <p>
	 * パラメータの設定を行います。
	 * </p>
	 * @param sql_Buff_Where_Base パラメータのWHERE句
	 * @param key_sysid SYSID
	 * @param key_seiky_kei_no パラメータの請求契約番号
	 * @param key_svc_kei_no パラメータのサービス契約番号
	 * @param key_letter_add_ymd_from パラメータのレター登録年月日（自）
	 * @param key_letter_add_ymd_to パラメータのレター登録年月日（至）
	 * @param key_add_user_id パラメータの登録者ID
	 * @param key_hak_div パラメータの発行区分
	 * @param key_shogo_flg パラメータの照合済
	 * @param key_mi_send パラメータの未送信フラグ
	 * @param key_letter_hak_y パラメータのレター発行要フラグ
	 * @return sql_Buff_Where_Base パラメータのWHERE句
	 * @exception SQLException
	*/
	private StringBuffer setWhereBase(StringBuffer sql_Buff_Where_Base
									  , String key_sysid 
									  , String key_seiky_kei_no
									  , String key_svc_kei_no
									  , String key_letter_add_ymd_from 
									  , String key_letter_add_ymd_to
									  // ANK-3346-00-00 ADD START
									  , String key_add_user_id
									  // ANK-3346-00-00 ADD END
									  , String key_hak_div
									  , String key_shogo_flg 
									  , String key_mi_send
									  // ANK-3909-00-00 DEL START
									  // , String key_letter_hak_y) throws SQLException;
									  // ANK-3909-00-00 DEL END
									  // ANK-3909-00-00 ADD START
									  , String key_letter_hak_y
									  , String key_after_shogo_stat_flg
									  , String key_mypage_dsp_naiyo_flg
									  // ANK-3909-00-00 ADD END
									  ) throws SQLException
	{
		sql_Buff_Where_Base.append(" WHERE ")
						   .append("     KK3111.MK_FLG = '0' ");
		if (!checkPramNull(key_sysid))
		{
			sql_Buff_Where_Base.append(" AND KK3111.SYSID = ?  ");
		}
		if (!checkPramNull(key_seiky_kei_no))
		{
				sql_Buff_Where_Base.append(" AND (KK3111.NET_SEIKY_KEI_NO = ?  ")
				   .append("  OR KK3111.TEL_SEIKY_KEI_NO  = ?  ")
				   .append("  OR KK3111.TV_SEIKY_KEI_NO   = ? )");
				
		}
		if (!checkPramNull(key_svc_kei_no))
		{
			sql_Buff_Where_Base.append(" AND (KK3111.NET_SVC_KEI_NO =  ?   ")
							   .append("  OR KK3111.TEL_SVC_KEI_NO  =  ?   ")
							   .append("  OR KK3111.TV_SVC_KEI_NO   =  ? ) ");
		}
		if (!checkPramNull(key_letter_add_ymd_from))
		{
			sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_ADD_YMD >= ? ");
		}
		if (!checkPramNull(key_letter_add_ymd_to))
		{
			sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_ADD_YMD <=  ? ");
		}
		// ANK-3346-00-00 ADD START
		if (!checkPramNull(key_add_user_id))
		{
			sql_Buff_Where_Base.append(" AND KK3111.ADD_OPEACNT =  ? ");
		}	
		// ANK-3346-00-00 ADD END
		if (!checkPramNull(key_hak_div))
		{
			sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_HAK_DIV =  ?  ");
		}
		if (!checkPramNull(key_shogo_flg))
		{
			// 照合済み：チェックの場合"1", それ以外"0"で設定される
			if("1".equals(key_shogo_flg))
			{
				sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_SHOGO_FLG = '1' ");
			}
		}
		if (!checkPramNull(key_mi_send))
		{
			// 未送信：チェックの場合"1", それ以外"0"で設定される
			if("1".equals(key_mi_send))
			{
				sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_STAT IN ('000','010') ");
			}
		}
		if (!checkPramNull(key_letter_hak_y))
		{
			// レター発行：チェックの場合"1", それ以外"0"で設定される
			if("1".equals(key_letter_hak_y))
			{
				sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_HAK_YH= '1' ");
			}
		}
		
		// ANK-3909-00-00 ADD START
		if (!checkPramNull(key_after_shogo_stat_flg))
		{
			// レター発行：チェックの場合"1", それ以外"0"で設定される
			if("1".equals(key_after_shogo_stat_flg))
			{
				sql_Buff_Where_Base.append(" AND KK3111.DSL_LETTER_STAT IN ('010','020','100')");
			}
		}

		if (!checkPramNull(key_mypage_dsp_naiyo_flg))
		{
			// レター発行：チェックの場合"1", それ以外"0"で設定される
			if("1".equals(key_mypage_dsp_naiyo_flg))
			{
				sql_Buff_Where_Base.append(" AND KK3111.MYPAGE_DSP_NAIYO IS NOT NULL");
			}
		}
		
		
		// ANK-3909-00-00 ADD END
		return sql_Buff_Where_Base;
	}

	/**
	 * <p>
	 * パラメータの設定を行います。
	 * </p>
	 * @param sql_Buff_OrderBy_Base パラメータのORDER BY句
	 * @param key_sort_item_no ソート項目
	 * @return sql_Buff_OrderBy_Base パラメータのORDER BY句
	 * @exception SQLException
	*/
	private StringBuffer setOrderByBase(StringBuffer sql_Buff_OrderBy_Base
									  , String key_sort_item_no , String key_sort_kbn
									  ) throws SQLException
	{

		// ソート項目がNULLの場合
		if (checkPramNull(key_sort_item_no))
		{
			sql_Buff_OrderBy_Base.append(" ORDER BY  ");
			sql_Buff_OrderBy_Base.append(SORT_NO_NULL);
		}
		else
		{
			// 昇順降順の取得
			String strSortOrder = null;
			// 降順の場合
			if("2".equals(key_sort_kbn)){
				strSortOrder = " DESC ";
			// 上記以外は昇順とする（設計書の指定は1）
			} else {
				strSortOrder = " ASC ";
			}
			
			//1_解約レター登録番号
			if("1".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append("  KK3111.DSL_LETTER_ADD_NO ")
									 .append(strSortOrder)
									 .append(", KK3111.SYSID , SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD");
			}
			
			//2_解約レター発行区分
			if("2".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" KK3111.DSL_LETTER_HAK_DIV ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID,SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD");
			}
			
			//3_解約レター登録年月日
			if("3".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" KK3111.DSL_LETTER_ADD_YMD ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID , SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_SND_YMD");
			}
			
			//4_解約レター送信年月日
			if("4".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" KK3111.DSL_LETTER_SND_YMD ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID , SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD");
			}
			
			//5_解約レター照合済フラグ
			if("5".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" KK3111.DSL_LETTER_SHOGO_FLG ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID , SEIKY_KEI_NO , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD");
			}
			
			//6_請求契約番号
			if("6".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" SEIKY_KEI_NO ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD");
			}
			
			//7_SYSID
			if("7".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" KK3111.SYSID ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD");
			}

			// ANK-3346-00-00 ADD START
			//8_登録オペレータアカウント
			if("8".equals(key_sort_item_no))
			{
				sql_Buff_OrderBy_Base.append(" ORDER BY  ");
				sql_Buff_OrderBy_Base.append(" KK3111.ADD_OPEACNT ")
									 .append(strSortOrder)
									 .append(", KK3111.DSL_LETTER_ADD_NO , KK3111.DSL_LETTER_ADD_NO , KK3111.SYSID , SEIKY_KEI_NO , KK3111.DSL_LETTER_SHOGO_FLG , KK3111.DSL_LETTER_ADD_YMD , KK3111.DSL_LETTER_SND_YMD");
			}
			// ANK-3346-00-00 ADD END

		}
		
		return sql_Buff_OrderBy_Base;
	}
	
	/**
	 * <p>
	 * パラメータの設定を行います。
	 * </p>
	 * @param pstmt パラメータ
	 * @param iPCnt カウント
	 * @param key_sysid SYSID
	 * @param key_seiky_kei_no パラメータの請求契約番号
	 * @param key_svc_kei_no パラメータのサービス契約番号
	 * @param key_letter_add_ymd_from パラメータのレター登録年月日（自）
	 * @param key_letter_add_ymd_to パラメータのレター登録年月日（至）
	 * @param key_add_user_id パラメータの登録者ID
	 * @param key_hak_div パラメータの発行区分
	 * @param key_shogo_flg パラメータの照合済
	 * @param key_mi_send パラメータの未送信フラグ
	 * @param key_letter_hak_y パラメータのレター発行要フラグ
	 * @return sql_Buff_Where_Base パラメータのWHERE句
	 * @exception SQLException
	*/
	private int setPramWhere(PreparedStatement pstmt
							  , int iPCnt
							  , String key_sysid
							  , String key_seiky_kei_no
							  , String key_svc_kei_no
							  , String key_letter_add_ymd_from 
							  , String key_letter_add_ymd_to
							  // ANK-3346-00-00 ADD START
							  , String key_add_user_id
							  // ANK-3346-00-00 ADD END
							  , String key_hak_div
							  , String key_shogo_flg 
							  , String key_mi_send
							  , String key_letter_hak_y) throws SQLException
	{
		if (!checkPramNull(key_sysid))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_sysid);
		}
		if (!checkPramNull(key_seiky_kei_no))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_seiky_kei_no);
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_seiky_kei_no);
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_seiky_kei_no);
		}
		if (!checkPramNull(key_svc_kei_no))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_svc_kei_no);
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_svc_kei_no);
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_svc_kei_no);
		}
		if (!checkPramNull(key_letter_add_ymd_from))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_letter_add_ymd_from);
		}
		if (!checkPramNull(key_letter_add_ymd_to))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_letter_add_ymd_to);
		}
		// ANK-3346-00-00 ADD START
		if (!checkPramNull(key_add_user_id))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_add_user_id);
		}
		// ANK-3346-00-00 ADD END
		if (!checkPramNull(key_hak_div))
		{
			CAANJDBCUtil.setParam(pstmt, iPCnt++, key_hak_div);
		}
		//照合済みフラグ、未送信フラグ、レター発行要フラグが設定される場合、
		//パラメータの設定不要（Where句で固定値を設定しているため）
		
		return iPCnt;
	}
	/**
	 * <p>
	 * パラメータの設定を行います。
	 * </p>
	 * @param param パラメータ
	 * @return checkPramNull チェック結果（true/false）
	 * @exception SQLException
	*/
	private Boolean checkPramNull(String param) throws SQLException
	{
		Boolean checkParamNull = false;
		if (param == null )
		{
			checkParamNull = true;
		}
		return checkParamNull;
	}
}
