/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK3101B020TPDA
*	ソースファイル名：JSYejbEKK3101B020TPDA.java
*	作成者			：EK918550
*	日付			：2017年10月19日
*＜機能概要＞
*	訪販申込実績一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ33.01.00	2017/10/18	FJ)舘山		【ANK-3307-00-00】訪販申込情報閲覧システム向けAPIへの工事進捗・キャンセル状況取得機能追加
*	ｖ33.01.01	2017/11/04	FJ)舘山		【ANK-3307-00-00】ＳＱＬ性能改善
*	v53.00.00	2021/05/13	FJ)永井		【ANK-4046-00-00】訪販申込情報閲覧システム向けAPIへの検索条件・連携項目追加対応
********************************************************************************/

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 java.util.ArrayList;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK3101B020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3101B020CBSMsg1List;
import eo.ejb.cbm.entity.KK3101ETMsg;
import eo.ejb.common.JKKModelCommon;

/**
*
*  テンプレートDBアクセス部品　EKK3101B020_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKK3101B020TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{

	/** eo光ネットサービスコード ホーム */
	private static final String OHNT_SVC_CD_HT = "1";
	/** eo光ネットサービスコード メゾン */
	private static final String OHNT_SVC_CD_MZ = "2";
	/** eo光ネットサービスコード マンション */
	private static final String OHNT_SVC_CD_MT = "3";
	
	/** 宅内調査実施年月日 */
	private static final String STEP_PRG_SBT_TK_CH_RSV = "2";
	/** 宅内工事完了予定年月日 */
	private static final String STEP_PRG_SBT_TK_KJ_RSV = "3";
	/** 工事案件実施年月日 */
	private static final String STEP_PRG_SBT_TK_KJ_FIX = "4";
	/** 機器出荷予定日 */
	private static final String STEP_PRG_SBT_KK_SP_RSV = "5";
	/** 開通希望日*/
	private static final String STEP_PRG_SBT_KT_KB_YMD = "6";
	/** サービス開始日*/
	private static final String STEP_PRG_SBT_SV_ST_YMD = "7";
	
	/** 工事種別 IP*/
	private static final String KOJI_SBT_IP = "IP";
	/** 工事種別 TV*/
	private static final String KOJI_SBT_TV = "TV";

	/** 最大検索件数を設定する */
	private static int MAX_RECORD_COUNT_PLUS_1 = 401;
	/** 有無（無）*/
	private static final String UM_NASHI = "0";
	/** 有無（有）*/
	private static final String UM_ARI = "1";

	/**
	 * コンストラクタ
	 */
	public JSYejbEKK3101B020TPDA()	{
	}
	
	/**
	*   EKK3101B020_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		// 検索パラメータ
		ArrayList<Object> paramList = new ArrayList<Object>();

		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			StringBuffer sql_Buff1 = new StringBuffer();
			StringBuffer sql_Buff2 = new StringBuffer();
			StringBuffer sql_Buff3 = new StringBuffer();

			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK3101ETMsg.getTableName());
			
			
			// SQL文の作成(件数取得用)
			StringBuffer sql_Buff4 = new StringBuffer();
			sql_Buff4.append(" SELECT  ")
					.append("     COUNT(*) AS CNT  ");
			
			// SQL文_基本部0
			StringBuffer sql_Buff0 = new StringBuffer();
			sql_Buff0.append(" SELECT /*EKK3101B020*/")
					.append("      KK3101.MSKMSHO_NO ")
					.append("     ,KK3101.MSKM_YMD ")
					.append("     ,( ")
					.append("        SELECT KK0061.AGNT_CD || ' ' || KK0061.AGNT_NM  ")
					.append("          FROM KK_M_AGNT KK0061  ")
					.append("           WHERE KK0061.AGNT_CD = KK0071_1.AGNT_CD")
					.append("             AND KK0061.GENE_ADD_DTM = ( ")
					.append("                 SELECT MAX(KK0061_GENE.GENE_ADD_DTM) MAX_GENE ")
					.append("                    FROM KK_M_AGNT KK0061_GENE")
					.append("                    WHERE KK0061_GENE.AGNT_CD = KK0071_1.AGNT_CD ")
					.append("                     AND ? BETWEEN KK0061_GENE.AGNT_TSTAYMD AND KK0061_GENE.AGNT_TENDYMD ")
					.append("                     AND KK0061_GENE.MK_FLG = '0'")
					.append("             ) ")
					.append("             AND KK0061.MK_FLG = '0'")
					.append("       ) AGNT_CD_1_2_CN                    ")
					.append("     ,( ")
					.append("        SELECT KK0061.AGNT_CD || ' ' || KK0061.AGNT_NM  ")
					.append("           FROM KK_M_AGNT KK0061  ")
					.append("           WHERE KK0061.AGNT_CD = KK0071_2.AGNT_CD")
					.append("             AND KK0061.GENE_ADD_DTM = (")
					.append("                 SELECT MAX(KK0061_GENE.GENE_ADD_DTM) MAX_GENE ")
					.append("                   FROM KK_M_AGNT KK0061_GENE")
					.append("                    WHERE KK0061_GENE.AGNT_CD = KK0071_2.AGNT_CD")
					.append("                     AND ? BETWEEN KK0061_GENE.AGNT_TSTAYMD AND KK0061_GENE.AGNT_TENDYMD ")
					.append("                     AND KK0061_GENE.MK_FLG = '0'")
					.append("             ) ")
					.append("             AND KK0061.MK_FLG = '0'")
					.append("      ) AGNT_CD_2_2_CN                    ")
					.append("     ,CK0011.CUST_NM                     ")
					.append("     ,KK0011.THNX_CALL_JSSI_YMD           ")
// ANK-4046-00-00 ADD START
					.append("     ,KK3101.MANSION_ID ")
// ANK-4046-00-00 ADD END
			;

			// SQL文_個別部1
			if ( "1".equals( inMsg.getObject(EKK3101B020CBSMsg.FUNC_CODE).toString() ) ) {

				// SQL文_基本部1
				sql_Buff1.append(" FROM ( ")
						.append(" SELECT ")
						.append("        KK3101_A.MSKMSHO_NO ")
						.append("       ,MIN(KK3101_A.MSKM_YMD) MSKM_YMD ")
						.append("       ,KK3101_A.MSKM_NO ")
						.append("       ,KK3101_A.SYSID ")
// ANK-4046-00-00 ADD START
						.append("       ,KK3101_A.MANSION_ID ")
// ANK-4046-00-00 ADD END
						.append(" FROM ")
// ▼▼▼ ANK-3307-00-00 2017/11/04 DEL START
//						.append("        KK_T_TSYRN_YO_MSJK KK3101_A ")
//						.append(" WHERE ")
//						.append("        KK3101_A.MK_FLG = '0' ");
// △△△ ANK-3307-00-00 2017/11/04 ADD START
// ▼▼▼ ANK-3307-00-00 2017/11/04 ADD START
						;
				
				if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET) || 
				 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL) || 
				 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV) || 
				 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC) || 
				 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO)) 
				{
					sql_Buff1.append("    ( ")
							.append("       SELECT DISTINCT KK0081_1.SVC_KEI_NO ")
							.append("       FROM KK_T_SVC_KEI KK0081_1 ")
							.append("       WHERE ") 
							.append("       ").append(getSQLForCancelCondition(inMsg))
							.append("    ) KK0081_A ")
							.append(" INNER JOIN ")
							.append("        KK_T_TSYRN_YO_MSJK KK3101_A ")
							.append("   ON ")
							.append("     KK3101_A.SVC_KEI_NO = KK0081_A.SVC_KEI_NO ")
							;
				}
				else 
				{
					sql_Buff1.append("        KK_T_TSYRN_YO_MSJK KK3101_A ")
							.append(" WHERE ")
							.append("        KK3101_A.MK_FLG = '0' ")
				;
				}
// △△△ ANK-3307-00-00 2017/11/04 ADD START
						
				// SQL文_個別条件A
				sql_Buff2 = createCondition2(inMsg, paramList);
								
				// SQL文_個別条件B
				sql_Buff3 = createCondition3(inMsg, paramList);
						 
				sql_Buff3.append(" GROUP BY ")
						.append("      KK3101_A.MSKMSHO_NO ")
						.append("    , KK3101_A.MSKM_NO ")
						.append("    , KK3101_A.SYSID ")
// ANK-4046-00-00 ADD START
						.append("    , KK3101_A.MANSION_ID ")
// ANK-4046-00-00 ADD END
						.append(" ) KK3101 ")
						.append(" INNER JOIN KK_T_MSKM KK0011 ")
						.append("   ON  KK0011.MSKM_NO = KK3101.MSKM_NO ")
						.append("  AND  (KK0011.MSKM_NO, KK0011.GENE_ADD_DTM) = (")
						.append("           SELECT KK0011_GENE.MSKM_NO, MAX(KK0011_GENE.GENE_ADD_DTM) MAX_GENE ")
						.append("             FROM KK_T_MSKM KK0011_GENE ")
						.append("              WHERE KK0011_GENE.MSKM_NO = KK3101.MSKM_NO ")
						.append("               AND KK0011_GENE.MK_FLG = '0'  ")
						.append("             GROUP BY KK0011_GENE.MSKM_NO ")
						.append("       ) ")
						.append("   AND KK0011.MK_FLG = '0' ")
						.append(" LEFT OUTER JOIN KK_T_MSKM_AGNT KK0071_1 ")
						.append("   ON KK0071_1.MSKM_NO = KK3101.MSKM_NO ") 
						.append("  AND KK0071_1.MSKM_AGNT_NO = '002' ")
						.append("  AND KK0071_1.MK_FLG = '0' ")
						.append(" LEFT OUTER JOIN KK_T_MSKM_AGNT KK0071_2 ")
						.append("   ON KK0071_2.MSKM_NO = KK3101.MSKM_NO ")
						.append("  AND KK0071_2.MSKM_AGNT_NO = '004' ")
						.append("  AND KK0071_2.MK_FLG = '0' ")
						.append(" INNER JOIN CK_T_CUST CK0011                 ")
						.append("   ON CK0011.SYSID = KK3101.SYSID ")
						.append("  AND CK0011.RSV_APLY_YMD || CK0011.GENE_ADD_DTM = ( ")
						.append("            SELECT MIN(CK0011_1.RSV_APLY_YMD || CK0011_1.GENE_ADD_DTM) AS KTSK_MIN ")
						.append("             FROM CK_T_CUST CK0011_1 ")
						.append("             WHERE CK0011_1.SYSID = KK0011.SYSID ")
						.append("               AND CK0011_1.CUST_NM IS NOT NULL")
						.append("               AND CK0011_1.RSV_APLY_YMD <= ?      ")
						.append("               AND CK0011_1.RSV_APLY_CD = '2' ")
						.append("               AND CK0011_1.MK_FLG = '0' ")
						.append("  ) ")
						.append("  AND CK0011.MK_FLG = '0' ");
							 
				
				// 運用日#3 (運用日１＆２は件数取得後に設定)
				paramList.add(JKKModelCommon.getOpeDate(inMsg));

				// SQL文_個別条件C
				StringBuffer sql_Buff3_1 = createCondition4(inMsg, paramList);
				sql_Buff3.append(sql_Buff3_1);
			}
			
			// 最大取得件数
			int maxNumP1 = MAX_RECORD_COUNT_PLUS_1;
			if (!inMsg.isNull(EKK3101B020CBSMsg.MAX_SEARCH_NUM))
			{
				maxNumP1 = inMsg.getStringAsInt(EKK3101B020CBSMsg.MAX_SEARCH_NUM) + 1;
			}
			
			// SQL文の組立て(項目取得)
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(sql_Buff0)
					.append(sql_Buff1)
					.append(sql_Buff2)
					.append(sql_Buff3);

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// パラメターの追加：運用日#1
			paramList.add(0, JKKModelCommon.getOpeDate(inMsg));
			// パラメターの追加：運用日#2
			paramList.add(0, JKKModelCommon.getOpeDate(inMsg));
			// パラメータを設定
			setParameter(pstmt, paramList);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EKK3101B020CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EKK3101B020CBSMsg1List.UK_NO
					, EKK3101B020CBSMsg1List.MSKM_YMD
					, EKK3101B020CBSMsg1List.TRAT_CD_1
					, EKK3101B020CBSMsg1List.TRAT_CD_2
					, EKK3101B020CBSMsg1List.CUST_NM
					, EKK3101B020CBSMsg1List.THNX_CALL_JSSI_YMD
// ANK-4046-00-00 ADD START
					, EKK3101B020CBSMsg1List.MID
// ANK-4046-00-00 ADD END
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EKK3101B020CBSMsg1List", maxNumP1);

			// 検索件数が上限を超えたらエラーとする
			if (outMsg1 != null && outMsg1.length == maxNumP1)
			{
				inMsg.set(EKK3101B020CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
				return ;
			}
			
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK3101B020CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(EKK3101B020CBSMsg.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(EKK3101B020CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	
	/**
	 * パラメータを設定する。
	 * @param pstmt
	 * @param params
	 * @throws SQLException
	 */
	private void setParameter(PreparedStatement pstmt, ArrayList<Object> params) throws SQLException {
		
		for (int i=0; i < params.size(); i++)
		{
			CAANJDBCUtil.setParam(pstmt, i+1, params.get(i));
			
		}
	}

	/**
	 * 入力パラメータにより可変となるＳＱＬを返す。
	 * この条件文は申込明細に対して直接条件を記載できる。
	 * <br>
	 * @param inMsg
	 * @param paramList
	 * @return SQL条件文字列を返す
	 */
	private StringBuffer createCondition2(CAANMsg inMsg, ArrayList<Object> paramList)
	{
		// SQL文_個別条件A
		StringBuffer sql_Buff2 = new StringBuffer();
							
		//個別条件（１）
		//ＫＥＹ＿申込年月日_FROM、ＫＥＹ＿申込年月日_TOの設定判定
		if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_FROM) && !inMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_TO)){
	
			sql_Buff2.append("   AND KK3101_A.MSKM_YMD BETWEEN ? AND ?");
			
			// 申込年月日From/Toをリストに追加
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_MSKM_YMD_FROM));	// 申込年月日From
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_MSKM_YMD_TO));		// 申込年月日To
		}
		
		//個別条件（３）
		// ＫＥＹ＿受付番号の設定判定
		if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_UK_NO)){
			
			sql_Buff2.append("  AND KK3101_A.MSKMSHO_NO = ? ");
			
			// 受付番号をリストに追加
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_UK_NO));	// 受付番号
		}
		
		 //個別条件（４）
		// ＫＥＹ＿MIDの設定判定
		 if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_MID)){
			
			 sql_Buff2.append(" AND KK3101_A.MANSION_ID = ? ");
	
		 	// MIDをリストに追加
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_MID));	// MID
		 }
		
		//個別条件（９）
		//  ＫＥＹ＿eo光ネットサービスコードの設定判定
		if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_EOHNT_SVC_CD)){
			
			sql_Buff2.append("   AND KK3101_A.MSKMSHO_SBT_CD = ");
			 
		 	if( OHNT_SVC_CD_HT.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_EOHNT_SVC_CD)))
			{
		 		sql_Buff2.append("'1' ");
		 	} 
		 	else if( OHNT_SVC_CD_MZ.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_EOHNT_SVC_CD)))
			{
		 		sql_Buff2.append("'3' ");
		 	}
		 	else if( OHNT_SVC_CD_MT.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_EOHNT_SVC_CD)))
			{
		 		sql_Buff2.append("'2' ");
		 	}
		}
		
		// 個別条件（１１）
		// ＫＥＹ＿お客さま氏名（カナ）
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CUST_KANA)){
			
			sql_Buff2.append(" AND KK3101_A.CUST_KANA LIKE '")
					.append(inMsg.getString(EKK3101B020CBSMsg.KEY_CUST_KANA) + "%'");
		}
		
		// 個別条件（１２）
		// ＫＥＹ＿電話番号
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_TELNO)){
			
			sql_Buff2.append(" AND KK3101_A.KEISHA_TELNO = ? ");
			
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_TELNO));
		}
	
		// 個別条件（１３） 
		// ＫＥＹ＿キャンセル除外申請日_FROM、ＫＥＹ＿キャンセル除外申請日_TOが指定されている場合
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM) && 
				!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO))
		{
			sql_Buff2.append(" AND KK3101_A.MSKM_CNCL_JGI_SNN_SHIN_YMD BETWEEN ? AND ? ");
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM));
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO));
		}
		
		// 個別条件（１４） 
		// ＫＥＹ＿キャンセル除外承認有無
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SNN_UM))
		{
			if (UM_NASHI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_CNCL_JGI_SNN_UM)))
			{
				sql_Buff2.append(" AND KK3101_A.MSKM_CNCL_JGI_SNN_YMD IS NULL ");
			}
			else if (UM_ARI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_CNCL_JGI_SNN_UM)))
			{
				sql_Buff2.append(" AND KK3101_A.MSKM_CNCL_JGI_SNN_YMD IS NOT NULL ");
			}
		}
		
		// 個別条件（１５） 
		// ＫＥＹ＿キャンセル除外否認有無
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_HNN_UM))
		{
			if (UM_NASHI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_CNCL_JGI_HNN_UM)))
			{
				sql_Buff2.append(" AND KK3101_A.MSKM_CNCL_JGI_HNN_YMD IS NULL ");
			}
			else if (UM_ARI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_CNCL_JGI_HNN_UM)))
			{
				sql_Buff2.append(" AND KK3101_A.MSKM_CNCL_JGI_HNN_YMD IS NOT NULL ");
			}
		}

		// 個別条件（Ｘ） 
		// キャンセル条件／工事条件が設定されている際、対象の料金Ｇのみ検索対象を絞り込む
		ArrayList<String> prcGrpList = new ArrayList<String>();

		if( STEP_PRG_SBT_TK_CH_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) ||  /** 宅内調査実施年月日 */
			STEP_PRG_SBT_TK_KJ_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) ||  /** 宅内工事完了予定年月日 */
			STEP_PRG_SBT_TK_KJ_FIX.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) ||  /** 工事案件実施年月日 */
			STEP_PRG_SBT_SV_ST_YMD.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)))    /** サービス開始日*/
		{
		 	// 工事種別毎の検索する範囲を限定する
			if (KOJI_SBT_IP.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_KOJI_SBT)))
			{
				prcGrpList.add("02");
				prcGrpList.add("03");
				prcGrpList.add("04");
				prcGrpList.add("10");
			}
			else 
			{
				prcGrpList.add("11");
				prcGrpList.add("12");
				prcGrpList.add("13");
			}
		}
		else if (STEP_PRG_SBT_KK_SP_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) || /** 機器出荷予定日 */
				  STEP_PRG_SBT_KT_KB_YMD.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)))   /** 開通希望日*/
		{
			// マンションのみ対象とする
			prcGrpList.add("04");
			prcGrpList.add("10");
		}
		else
		{
			// ネットのキャンセル日が指定されている場合
			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET))
			{
				prcGrpList.add("02");
				prcGrpList.add("03");
				prcGrpList.add("04");
			}
			// 電話のキャンセル日が指定されている場合
			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL))
			{
				prcGrpList.add("10");
			}
			// ＴＶのキャンセル日が指定されている場合
			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV))
			{
				prcGrpList.add("11");
				prcGrpList.add("12");
				prcGrpList.add("13");
			}
			// eo電気のキャンセル日が指定されている場合
			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC))
			{
				prcGrpList.add("17");
			}
			// MVNOのキャンセル日が指定されている場合
			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO))
			{
				prcGrpList.add("51");
			}
		}
		
		// 料金グループコードが設定されている場合、条件に加える。
		if (prcGrpList.size() > 0)
		{
			sql_Buff2.append(" AND KK3101_A.PRC_GRP_CD IN (");
			StringBuilder sb = new StringBuilder();
			for (String code : prcGrpList)
			{
				if (sb.length() > 0)
				{
					sb.append(",");
				}
				sb.append("'").append(code).append("'");
			}
			sql_Buff2.append(sb).append(") ");
		}
	
		return sql_Buff2;
	}
	
	/**
	 * 入力パラメータにより可変となるＳＱＬを返す。
	 * この条件文は申込明細以外の条件を返す。
	 * <br>
	 * @param inMsg
	 * @param paramList
	 * @return SQL条件文字列を返す
	 */
	private StringBuffer createCondition3(CAANMsg inMsg, ArrayList<Object> paramList)
	{
		
		// SQL文_個別条件B
		StringBuffer sql_Buff3 = new StringBuffer();

		//個別条件（５）
		// ＫＥＹ＿工程進捗種別 = 2, 3, 4 が指定されている場合
		if( STEP_PRG_SBT_TK_CH_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) || 
			STEP_PRG_SBT_TK_KJ_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) ||
			STEP_PRG_SBT_TK_KJ_FIX.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
			
			 
			// EXISTS句
			sql_Buff3.append(" AND ");
			
			sql_Buff3.append(" EXISTS (")
					.append("    SELECT 1 ")
					.append("      FROM KU_T_KOJIAK KU0011 ")
					.append("      INNER JOIN KU_T_MSKM_DTL_KOJIAK KU0091 ")
					.append("         ON KU0091.KOJIAK_NO = KU0011.KOJIAK_NO")
					.append("        AND KU0091.MSKM_DTL_KOJIAK_TSTAYMD <= ?")
					.append("        AND KU0091.MSKM_DTL_KOJIAK_TENDYMD >= ?")
					.append("        AND KU0091.MK_FLG = '0'")
					.append("      WHERE KU0011.MK_FLG = 0")
					.append("        AND KU0091.MSKM_DTL_NO = KK3101_A.MSKM_DTL_NO")
					.append("        AND KU0011.PRC_GRP_CD IN ( ");
				
		 	// 工事種別毎の検索する範囲を限定する
			if (KOJI_SBT_IP.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_KOJI_SBT)))
	 			sql_Buff3.append("'02','03','04','10'" );
			else
	 			sql_Buff3.append("'11','12','13'" );
	 		
	 		sql_Buff3.append(" )");
			 		
	 		// 宅内調査実施年月日
	 		if(STEP_PRG_SBT_TK_CH_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
	 			sql_Buff3.append("        AND KU0011.TAKCHO_JSSI_YMD BETWEEN ? AND ?" );
	 		}
	 		// 宅内工事完了予定年月日
	 		if(STEP_PRG_SBT_TK_KJ_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
	 			sql_Buff3.append("        AND KU0011.TAKNI_KOJI_FIN_RSV_YMD BETWEEN ? AND ?" );
	 		}
	 		// 工事案件実施年月日
	 		if(STEP_PRG_SBT_TK_KJ_FIX.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
	 			sql_Buff3.append("        AND KU0011.KOJIAK_JSSI_YMD BETWEEN ? AND ?" );
	 		}
	 		sql_Buff3.append(" ) ");

			// 運用日
			paramList.add(JKKModelCommon.getOpeDate(inMsg));
			paramList.add(JKKModelCommon.getOpeDate(inMsg));
	 		// 工程進捗日付From/To
	 		paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_FROM));
	 		paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_TO));
		}
						
		//個別条件（６）
		// ＫＥＹ＿工程進捗種別 = 5 が指定されている場合
		if( STEP_PRG_SBT_KK_SP_RSV.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
			 
			// EXISTS句
			sql_Buff3.append(" AND ");
				
			sql_Buff3.append(" EXISTS (")
					.append("    SELECT 1")
					.append("        FROM KK_T_KKTK_SVC_KEI KK0341")
					.append("        LEFT OUTER JOIN KK_T_KAISEN_TG_SVKEI KK0241 ")
					.append("           ON KK0241.SVC_KEI_KAISEN_UCWK_NO = KK0341.SVC_KEI_KAISEN_UCWK_NO")
					.append("          AND ? BETWEEN KK0241.KAISEN_UCWK_USE_STAYMD AND KK0241.KAISEN_UCWK_USE_ENDYMD")
					.append("          AND KK0241.MK_FLG = '0'")
					.append("        INNER JOIN KK_T_SVC_KEI KK0081_05 ")
					.append("           ON (KK0081_05.SVC_KEI_NO = KK0341.SVC_KEI_NO ")
					.append("           OR  KK0081_05.SVC_KEI_NO = KK0241.SVC_KEI_NO )")
					.append("          AND KK0081_05.RSV_APLY_YMD || KK0081_05.GENE_ADD_DTM = (")
					.append("               SELECT MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX")
					.append("                 FROM KK_T_SVC_KEI KK0081_GENE")
					.append("                 WHERE KK0081_GENE.SVC_KEI_NO = KK0081_05.SVC_KEI_NO")
					.append("                   AND KK0081_GENE.RSV_APLY_YMD <= ?")
					.append("                   AND KK0081_GENE.RSV_APLY_CD = '2' ")
					.append("                   AND KK0081_GENE.MK_FLG = '0')")
	 				.append("          AND KK0081_05.PRC_GRP_CD in ('04', '10') ")
					.append("          AND KK0081_05.MK_FLG = '0'")
					.append("        INNER JOIN KK_T_TK_HOSHIKI_KEI KK0891")
					.append("           ON KK0891.TK_HOSHIKI_KEI_NO = KK0081_05.TK_HOSHIKI_KEI_NO ")
					.append("          AND KK0891.MK_FLG = '0'")
					.append("        WHERE KK0341.MK_FLG = '0'")
					.append("          AND KK0341.KKTK_SVC_KEI_NO IN (")
					.append("               SELECT KK0341_SUM.KKTK_SVC_KEI_NO")
					.append("                FROM KK_T_KKTK_SVC_KEI KK0341_SUM")
					.append("                WHERE KK0341_SUM.MSKM_DTL_NO = KK3101_A.MSKM_DTL_NO")
					.append("                  AND KK0341_SUM.MK_FLG = '0'")
					.append("          )")
					.append("          AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM = (")
					.append("               SELECT MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX")
					.append("                 FROM KK_T_KKTK_SVC_KEI KK0341_GENE")
					.append("                 WHERE KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO")
					.append("                   AND KK0341_GENE.RSV_APLY_YMD <= ?")
					.append("                   AND KK0341_GENE.RSV_APLY_CD = '2' ")
					.append("                   AND KK0341_GENE.MK_FLG = '0'")
					.append("          )")
					.append("          AND KK0891.TK_HOSHIKI_CD IN ('001','003','004','005','006','007','010')")
					.append("          AND KK0341.HAISO_REQ_SHITEI_YMD BETWEEN ? AND ?")
					.append("   )");

			// 運用日
			paramList.add(JKKModelCommon.getOpeDate(inMsg));
			paramList.add(JKKModelCommon.getOpeDate(inMsg));
			paramList.add(JKKModelCommon.getOpeDate(inMsg));
			// 工程進捗日付From/To
	 		paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_FROM));
	 		paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_TO));
		}
		
		//個別条件（７）
		// ＫＥＹ＿工程進捗種別 = 6,7 が指定されている場合
		if( STEP_PRG_SBT_KT_KB_YMD.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) ||
			STEP_PRG_SBT_SV_ST_YMD.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
			 
			// EXISTS句
			sql_Buff3.append(" AND ");
		
			sql_Buff3.append(" EXISTS (")
					.append("    SELECT 1")
					.append("        FROM KK_T_SVC_KEI KK0081")
					.append("        LEFT OUTER JOIN KK_T_TK_HOSHIKI_KEI KK0891")
					.append("           ON KK0891.TK_HOSHIKI_KEI_NO = KK0081.TK_HOSHIKI_KEI_NO")
					.append("          AND KK0891.MK_FLG = '0'")
					.append("        WHERE KK0081.MK_FLG = '0'")
					.append("          AND KK0081.SVC_KEI_NO = KK3101_A.SVC_KEI_NO")
					.append("          AND KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = (")
					.append("               SELECT MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX")
					.append("                 FROM KK_T_SVC_KEI KK0081_GENE")
					.append("                 WHERE KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO")
					.append("                   AND KK0081_GENE.RSV_APLY_YMD <= ?")
					.append("                   AND KK0081_GENE.RSV_APLY_CD = '2' ")
					.append("                   AND KK0081_GENE.MK_FLG = '0')");
					
// ▼▼▼ ANK-3307-00-00 2017/11/04 DEL START
//	 		// キャンセルが存在する場合は条件を追加する
//			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO)) 
//			{
//				// キャンセル・解約済のデータのみ対象とする
//				sql_Buff3.append("          AND KK0081.SVC_KEI_STAT IN ('910','920') ")
//						 .append("          AND KK0081.SVC_STA_YMD IS NULL ");
//			}
// △△△ ANK-3307-00-00 2017/11/04 DEL END

			// サービス開始希望日
	 		if(STEP_PRG_SBT_KT_KB_YMD.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
	 			sql_Buff3.append("    AND (KK0891.TK_HOSHIKI_CD IN ('001','003','004','005','006','007','010')" )
	 					.append("           AND KK0081.PRC_GRP_CD IN ('04', '10') ")
	 					.append("           AND KK0081.SVC_USE_STA_KIBO_YMD BETWEEN ? AND ?  )");
	 		}
	 		// サービス開始日
	 		if(STEP_PRG_SBT_SV_ST_YMD.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT))){
			 	// 工事種別毎の検索する範囲を限定する
				if (KOJI_SBT_IP.equals(inMsg.getObject(EKK3101B020CBSMsg.KEY_KOJI_SBT)))
		 			sql_Buff3.append("    AND KK0081.PRC_GRP_CD IN ('02','03','04','10')" );
				else
		 			sql_Buff3.append("    AND KK0081.PRC_GRP_CD IN ('11','12','13')" );
	 			sql_Buff3.append("    AND KK0081.SVC_STA_YMD BETWEEN ? AND ?" );
	 		}
	 		sql_Buff3.append("          )");

			// 運用日
			paramList.add(JKKModelCommon.getOpeDate(inMsg));
	 		// 工程進捗日付From/To
	 		paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_FROM));
	 		paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_TO));
		}
// ▼▼▼ ANK-3307-00-00 2017/11/04 DEL START
//		else 
//		{
//			// キャンセルが存在する場合，キャンセルのデータが存在するものだけを抽出する
//			if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC) || 
//					 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO)) 
//			{
//				// EXISTS句
//				sql_Buff3.append(" AND ");
//		
//				sql_Buff3.append(" EXISTS (")
//						.append("    SELECT 1")
//						.append("        FROM KK_T_SVC_KEI KK0081")
//						.append("        WHERE KK0081.MK_FLG = '0'")
//						.append("          AND KK0081.SVC_KEI_STAT IN ('910','920') ")
//						.append("          AND KK0081.SVC_STA_YMD IS NULL ")
//						.append("          AND KK0081.SVC_KEI_NO = KK3101_A.SVC_KEI_NO ")
//						.append("   )");
//			}
//		}
// △△△ ANK-3307-00-00 2017/11/04 DEL END
		
		//個別条件（１２）
		// ＫＥＹ＿サンキューコール実施有無
		if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_THNX_CALL_JSSI_UM))
		{
			// EXISTS句
			sql_Buff3.append(" AND ");
			
// ▼▼▼ ANK-3307-00-00 ADD START 
			if (UM_NASHI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_THNX_CALL_JSSI_UM)))
			{
				sql_Buff3.append("NOT");
			}
// △△△ ANK-3307-00-00 ADD END
			sql_Buff3.append(" EXISTS (")
					.append("    SELECT 1")
					.append("        FROM KK_T_MSKM KK0011 ")
					.append("        WHERE KK0011.MSKM_NO = KK3101_A.MSKM_NO ")
// ▼▼▼ ANK-3307-00-00 DEL START
//					.append("          AND  (KK0011.MSKM_NO, KK0011.GENE_ADD_DTM) = (")
//					.append("           SELECT KK0011_GENE.MSKM_NO, MAX(KK0011_GENE.GENE_ADD_DTM) MAX_GENE ")
//					.append("             FROM KK_T_MSKM KK0011_GENE ")
//					.append("              WHERE KK0011_GENE.MSKM_NO = KK3101_A.MSKM_NO ")
//					.append("               AND KK0011_GENE.MK_FLG = '0'  ")
//					.append("             GROUP BY KK0011_GENE.MSKM_NO ")
//					.append("          ) ")
// △△△ ANK-3307-00-00 DEL END
// ▼▼▼ ANK-3307-00-00 ADD START 
					.append("          AND KK0011.THNX_CALL_JSSI_YMD IS NOT NULL")
// △△△ ANK-3307-00-00 ADD END
					.append("          AND KK0011.MK_FLG = '0' ")
					;
// ▼▼▼ ANK-3307-00-00 DEL START
//			if (UM_NASHI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_THNX_CALL_JSSI_UM)))
//			{
//				sql_Buff3.append("          AND KK0011.THNX_CALL_JSSI_YMD IS NULL");
//			}
//			else if (UM_ARI.equals(inMsg.getString(EKK3101B020CBSMsg.KEY_THNX_CALL_JSSI_UM)))
//			{
//				sql_Buff3.append("          AND KK0011.THNX_CALL_JSSI_YMD IS NOT NULL");
//			}
// △△△ ANK-3307-00-00 DEL END
			sql_Buff3.append("   )");
		}
		
		return sql_Buff3;
	}
	
	/**
	 * 入力パラメータにより可変となるＳＱＬを返す。
	 * この条件文は申込書番号、申込番号、お客様の条件を返す。
	 * <br>
	 * @param inMsg
	 * @param paramList
	 * @return SQL条件文字列を返す
	 */
	private StringBuffer createCondition4(CAANMsg inMsg, ArrayList<Object> paramList)
	{
		// SQL文_個別条件B
		StringBuffer sql_Buff4 = new StringBuffer();
		
		
		//個別条件（２）
		// ＫＥＹ＿取扱コード
		if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_TRAT_CD)) {
			
			// EXISTS句
			if(sql_Buff4.length() > 0) 
			{
				sql_Buff4.append(" AND ");
			} 
			else 
			{
				sql_Buff4.append(" WHERE ");
			}

			sql_Buff4.append(" EXISTS (")
					 .append("    SELECT 1 ")
					 .append("      FROM KK_T_MSKM_AGNT KK0071_0")
					 .append("      WHERE KK0071_0.MSKM_NO = KK3101.MSKM_NO ")
					 .append("        AND KK0071_0.AGNT_CD IN (");

			// カンマ区切りの文字列を分解する。
			String[] codeList = inMsg.getString(EKK3101B020CBSMsg.KEY_TRAT_CD).split(",");
			
			StringBuffer sb = new StringBuffer();
			for (String val : codeList)
			{
				// 空文は削除
				if (val != null && val.length() > 0) 
				{
					if (sb.length() > 0)
					{
						sb.append(",");
					}
					sb.append("'").append(val).append("'");
				}
			}
			sql_Buff4.append(sb).append(")")
					 .append("        AND KK0071_0.MSKM_AGNT_NO IN ('002', '004')")
					 .append("        AND KK0071_0.MK_FLG = '0'")
					 .append(" )");
		}

		//個別条件（８）
	 	//  各サービスのキャンセル期間の設定判定
		if (!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET) || 
			 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL) || 
			 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV) || 
			 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC) || 
			 !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO)) {

			if(sql_Buff4.length() > 0){
				sql_Buff4.append(" AND ");
			}else{
				sql_Buff4.append(" WHERE ");
			}
			sql_Buff4.append("  EXISTS (")
					.append("    SELECT MAX(NET_C_DATE) M_NET_C_DT, MAX(TEL_C_DATE) M_TEL_C_DT, MAX(TV_C_DATE) M_TV_C_DT, MAX(EL_C_DATE) M_EL_C_DT, MAX(MN_C_DATE) M_MN_C_DT")
					.append("        FROM (")
					.append("         SELECT KK0081.SVC_KEI_NO")
// ▼▼▼ ANK-3307-00-00 2017/11/04 Modify START
//					.append("               ,DECODE(KK0081.SVC_CD, '01', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_ENDYMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) NET_C_DATE")
//					.append("               ,DECODE(KK0081.SVC_CD, '02', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_ENDYMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) TEL_C_DATE")
//					.append("               ,DECODE(KK0081.SVC_CD, '03', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_ENDYMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) TV_C_DATE")
//					.append("               ,DECODE(KK0081.SVC_CD, '05', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_ENDYMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) EL_C_DATE")
//					.append("               ,DECODE(KK0081.SVC_CD, '51', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_ENDYMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) MN_C_DATE")
					.append("               ,DECODE(KK0081.SVC_CD, '01', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_DSL_YMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) NET_C_DATE")
					.append("               ,DECODE(KK0081.SVC_CD, '02', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_DSL_YMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) TEL_C_DATE")
					.append("               ,DECODE(KK0081.SVC_CD, '03', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_DSL_YMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) TV_C_DATE")
					.append("               ,DECODE(KK0081.SVC_CD, '05', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_DSL_YMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) EL_C_DATE")
					.append("               ,DECODE(KK0081.SVC_CD, '51', DECODE(KK0081.SVC_KEI_STAT, '910', KK0081.SVC_DSL_YMD, '920', KK0081.SVC_CANCEL_YMD, NULL), NULL) MN_C_DATE")
// △△△ ANK-3307-00-00 2017/11/04 Modify START
					.append("           FROM KK_T_SVC_KEI KK0081")
					.append("           WHERE ")
					.append("                KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = (")
					.append("                  SELECT MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX")
					.append("                    FROM KK_T_SVC_KEI KK0081_GENE")
					.append("                    WHERE KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO")
					.append("                     AND KK0081_GENE.RSV_APLY_YMD <= ?")
					.append("                     AND KK0081_GENE.RSV_APLY_CD = '2'")
					.append("                     AND KK0081_GENE.MK_FLG = '0'")
					.append("                )")
					.append("            AND KK0081.MK_FLG = '0'")
					.append("            AND KK0081.SVC_KEI_STAT IN ('910','920')")
					.append("            AND KK0081.SVC_STA_YMD IS NULL")
					.append("         ) KK0081_S")
					.append("         WHERE KK0081_S.SVC_KEI_NO IN (")
					.append("                   SELECT KK0081_SUM.SVC_KEI_NO")
					.append("                    FROM KK_T_SVC_KEI KK0081_SUM")
					.append("                    WHERE KK0081_SUM.MSKM_DTL_NO IN ")
					.append("                           (SELECT KK0021_03.MSKM_DTL_NO")
					.append("                            FROM KK_T_MSKM_DTL KK0021_03 ")
					.append("                            WHERE (KK0021_03.MSKMSHO_NO IS NOT NULL AND KK0021_03.MSKMSHO_NO = KK3101.MSKMSHO_NO)")
					.append("                               OR (KK0021_03.DOJI_MSKM_EOH_MSKMSHO_NO IS NOT NULL AND KK0021_03.DOJI_MSKM_EOH_MSKMSHO_NO = KK3101.MSKMSHO_NO))")
					.append("                      AND KK0081_SUM.MK_FLG = '0'")
					.append("        )");

			
			// 運用日
			paramList.add(JKKModelCommon.getOpeDate(inMsg));

			ArrayList<String> conditions = new ArrayList<String>();
		 	
			// キャンセル日（NET）
			if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET)  || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET))
			{
				conditions.add("MAX(NET_C_DATE) >= ? AND MAX(NET_C_DATE) <= ?");
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET));
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET));
			}
			// キャンセル日（TEL）
			if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL))
			{
				conditions.add(" MAX(TEL_C_DATE) >= ? AND MAX(TEL_C_DATE) <= ?");
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL));
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL));
			}
			// キャンセル日（TV）
			if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV))
			{
				conditions.add(" MAX(TV_C_DATE) >= ? AND MAX(TV_C_DATE) <= ?");
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV));
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV));
			}
			// キャンセル日(eo電気)
			if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC))
			{
				conditions.add("MAX(EL_C_DATE) >= ? AND MAX(EL_C_DATE) <= ?");
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC));
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC));
			}
			// キャンセル日(MVNO）
			if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO))
			{
				conditions.add(" MAX(MN_C_DATE) >= ? AND MAX(MN_C_DATE) <= ?");
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO));
				paramList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO));
			}

			// 条件を組み立てる
			for (int i=0; i < conditions.size(); i++)
			{
				if (i == 0) 
				{
					sql_Buff4.append(" HAVING ");
				}
				else
				{
					sql_Buff4.append(" AND ");
				}
				sql_Buff4.append(conditions.get(i));
			}
			sql_Buff4.append("  )");
		}

// ANK-4046-00-00 ADD START
		// 個別条件（１６）
		// ＫＥＹ＿受付日_FROM、ＫＥＹ＿受付日_TOが指定されている場合
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_UK_YMD_FROM) && 
				!inMsg.isNull(EKK3101B020CBSMsg.KEY_UK_YMD_TO))
		{
			if(sql_Buff4.length() > 0){
				sql_Buff4.append(" AND ");
			}else{
				sql_Buff4.append(" WHERE ");
			}
			sql_Buff4.append(" KK0011.MSKMSHO_ARIV_YMD BETWEEN ? AND ? ");
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_UK_YMD_FROM));
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_UK_YMD_TO));
		}
		// 個別条件（１７）
		//  ＫＥＹ＿受付種別が指定されている場合
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_UK_SBT))
		{
			if(sql_Buff4.length() > 0){
				sql_Buff4.append(" AND ");
			}else{
				sql_Buff4.append(" WHERE ");
			}
			sql_Buff4.append("  EXISTS (")
					.append("    SELECT 1")
					.append("        FROM KK_T_MSKM_DTL KK0021_04")
					.append("        WHERE (KK0021_04.MSKMSHO_NO IS NOT NULL AND KK0021_04.MSKMSHO_NO = KK3101.MSKMSHO_NO)")
					.append("          AND (KK0021_04.MSKM_DTL_NO, KK0021_04.GENE_ADD_DTM) in (")
					.append("                SELECT KK0021_GENE.MSKM_DTL_NO, MAX(KK0021_GENE.GENE_ADD_DTM) MAX_GENE")
					.append("                  FROM KK_T_MSKM_DTL KK0021_GENE")
					.append("                  WHERE (KK0021_GENE.MSKMSHO_NO IS NOT NULL AND KK0021_GENE.MSKMSHO_NO = KK3101.MSKMSHO_NO)")
					.append("                     AND KK0021_GENE.MK_FLG = '0'  ")
					.append("                  GROUP BY KK0021_GENE.MSKM_DTL_NO")
					.append("          )")
					.append("          AND KK0021_04.MK_FLG = '0'")
					.append("          AND KK0021_04.MKM_UK_SBT_CD = ?")
					.append("   )");
			paramList.add(inMsg.getObject(EKK3101B020CBSMsg.KEY_UK_SBT));
		}
// ANK-4046-00-00 ADD END
		return sql_Buff4;
	}

	/**
	 * 値を取得する。
	 * <br>
	 * @param inMsg メッセージ
	 * @param key1 優先的に取得するキー
	 * @param key2 key1に値が存在しない場合に取得するキー
	 * @return 取得データ
	 */
	private Object getObject(CAANMsg inMsg, String key1, String key2)
	{
		if (inMsg.isNull(key1))
			return inMsg.getObject(key2);
		else
			return inMsg.getObject(key1);
			
	}
	
// ▼▼▼ ANK-3307-00-00 2017-11-06 ADD START
	/**
	 * キャンセル条件のSQLを返却する
	 * <br>
	 * @param inMsg メッセージ
	 * @return キャンセル日の条件
	 */
	private String getSQLForCancelCondition(CAANMsg inMsg)
	{
		// キャンセル期間リスト
		ArrayList<Object> fromList = new ArrayList<Object>();
		ArrayList<Object> toList = new ArrayList<Object>();
		
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET)  || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET))
		{
			fromList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET)); 
			toList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET));
		}
		// キャンセル日（TEL）
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL))
		{
			fromList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL));
			toList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL));
		}
		// キャンセル日（TV）
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV))
		{
			fromList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV));
			toList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV));
		}
		// キャンセル日(eo電気)
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC))
		{
			fromList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC));
			toList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC));
		}
		// キャンセル日(MVNO）
		if(!inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO) || !inMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO))
		{
			fromList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO));
			toList.add(getObject(inMsg, EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO, EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO));
		}

		StringBuilder sql1 = new StringBuilder();

		for (int i=0; i < fromList.size(); i++)
		{
			if (i != 0)
			{
				sql1.append(" OR ");
			}
			sql1.append("  KK0081_1.SVC_CANCEL_YMD BETWEEN '").append(fromList.get(i)).append("' AND '").append(toList.get(i)).append("' ")
				.append(" OR ")
				.append("  KK0081_1.SVC_DSL_YMD BETWEEN '").append(fromList.get(i)).append("' AND '").append(toList.get(i)).append("' ");
		}

		return sql1.toString();
	}
// △△△ ANK-3307-00-00 2017-11-06 ADD END
}
