/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK1681DBABase.java
*   ソースファイル名：JKKejbKK1681DBABase.java
*   作成者          ：富士通
*   日付            ：2011年12月12日
*＜機能概要＞
*   異動予約の制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v4.00.00    2013/02/27  FJ）藤本    新規作成
*   v4.00.01    2013/04/30  FJ）竹内    OT-2013-0000675
*   v5.00.00    2013/08/02  FJ）寺本    TG1-2013-0000723
*   v5.00.01    2013/08/06  FJ）沖田    IT1-2013-0001544
*   v5.00.02    2013/10/15  FJ) 沖田    OM-2013-0002398
*   v5.00.03    2013/10/16  FJ）寺本    OM-2013-0002398
*   v7.00.00    2013/11/18  FJ）沖田    ANK-1578-00-00
*	v14.00.00   2015/06/23  FJ）寺村    【OM-2015-0001537】異動登録（性能改善）
**********************************************************************/

package eo.ejb.common.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.JKKejbBusinessException;

/**
 * <p>
 * 異動予約の制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK1681DBABase extends JKKejbDBABase
{

	/**
	 * <p>
	 * 新しいJKKejbKK1681DBABaseを作成します。
	 * </p>
	 */
	public JKKejbKK1681DBABase()
	{
		super(KK1681ETMsg.class.getName());
	}

	/**
	 * <p>
	 * 世代を管理するカラム名を取得します。
	 * </p>
	 * @return 世代を管理するカラム名
	 */
	protected String getGenerationColumn()
	{
		return null;
	}

	/**
	 * <p>
	 * 無効状態を管理するカラム名を取得します。
	 * </p>
	 * @return 無効状態を管理するカラム名
	 */
	protected String getInvalidColumn()
	{
		return KK1681ETMsg.MK_FLG;
	}

	/**
	 * <p>
	 * 予約管理エンティティか判定します。
	 * </p>
	 * @return 予約管理エンティティの場合はtrue
	 */
	protected boolean isReserveMgr()
	{
		return true;
	}

	/**
	 * <p>
	 * 予約適用基準日となるカラム名を取得します。
	 * </p>
	 * @return 予約適用基準日となるカラム名
	 */
	protected String getCurrentColumn()
	{
		return KK1681ETMsg.RSV_APLY_YMD;
	}

	/**
	 * <p>
	 * 予約の状態を管理するエンティティか判定します。
	 * </p>
	 * @return 予約の状態を管理するエンティティの場合はtrue
	 */
	protected boolean isReserveStateMgr()
	{
		return false;
	}

	/**
	 * <p>
	 * 予約の状態を管理するカラム名を取得します。
	 * </p>
	 * @return 予約の状態を管理するカラム名
	 */
	protected String getReserveStateColumn()
	{
		return null;
	}

	/**
	 * <p>
	 * サービス契約番号をオプション引継先サービス契約番号として指定する異動予約明細を取得します。
	 * </p>
	 * @param svcKeiNo サービス契約番号
	 * @param searchJknMap 検索条件マップ(key：項目名、value：項目値リスト)<br>
	 *         異動予約.項目名 IN (項目値リスト)を検索条件とします。個別検索条件がない場合はNULLを設定すること。
	 * @param stdYmd 基準年月日
	 * @param searchPtn 検索パターン<br>
	 * "0"：予約状態によらず、全ての「異動予約」を取得する場合<br>
	 * "1"：予約手続中、または予約未反映の「異動予約」を取得する場合<br>
	 * "2"：予約反映済の「異動予約」を取得する場合<br>
	 * @return 異動予約明細
	 */
	public CAANMsg[] getKK1681byOpHktgiSkSvcKei(String svcKeiNo, HashMap<String, String[]> searchJknMap, String stdYmd, String searchPtn)
	{
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// バインド変数設定値保持用領域
		ArrayList<Object> arraylist = new ArrayList<Object>();
		// PreparedStatementのパラメータカウント
		int iPCnt = 0;

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK1681ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ").append(getSelectColumnListString(getSelectDBColumnList()));
			sql_Buff.append(" FROM   KK_T_IDO_RSV KK1681 ");
			// 異動区分=オプション引継
			// 現状では、異動予約詳細コード=オプション引継が設定されることはないため
			sql_Buff.append(" WHERE  IDO_DIV = '00003' ");
			sql_Buff.append(" AND    OP_HKTGI_SK_SVC_KEI_NO = ? ");
			arraylist.add(svcKeiNo);
			
			if ("0".equals(searchPtn))
			{
				// 予約状態によらず、全ての「異動予約」を取得する場合
				sql_Buff.append(" AND    KK1681.MK_FLG = '0' ");
			}
			else if ("1".equals(searchPtn))
			{
				// 予約手続中、または予約未反映の「異動予約」を取得する場合
				sql_Buff.append(" AND   (KK1681.IDO_RSV_STAT_CD IN ('00', '03') ");
				sql_Buff.append("     OR    (KK1681.IDO_RSV_STAT_CD = '04' AND KK1681.RSV_APLY_YMD > ?)) ");
				sql_Buff.append(" AND    KK1681.MK_FLG = '0' ");
				arraylist.add(stdYmd);
			}
			else if ("2".equals(searchPtn))
			{
				// 予約反映済の「異動予約」を取得する場合
				sql_Buff.append(" AND   (KK1681.IDO_RSV_STAT_CD = '01' ");
				sql_Buff.append("     OR    (KK1681.IDO_RSV_STAT_CD = '04' AND KK1681.RSV_APLY_YMD <= ?)) ");
				sql_Buff.append(" AND    KK1681.MK_FLG = '0' ");
				arraylist.add(stdYmd);
			}
			else
			{
				throw new JKKejbBusinessException("未定義の検索パターンです。");
			}
			
			// 検索条件マップが設定されている場合、IN句で検索条件を設定する。
			sql_Buff = addSearchJknSql(sql_Buff, "KK1681", searchJknMap, true);
			arraylist = addSearchJknParam(arraylist, searchJknMap);

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.println(JSYejbLog.DBACCESS, this.getClass(), sql_Buff);

			// バインド変数設定
			for (int iCnt = 0; iCnt < arraylist.size(); iCnt++)
			{
				// バインド変数に設定
				CAANJDBCUtil.setParam(pstmt, ++iPCnt, arraylist.get(iCnt));
			}

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 検索データの設定
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery, getSelectMsgColumnList(), 0);

			return outMsg1;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con1 != null)
				{
					CAANConnectionMgr.getInstance().close(con1);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 各種契約番号、SYSID、請求契約番号に紐づく異動予約明細を取得します。<br>
	 * ※各種契約とは、サービス契約、サービス契約内訳、オプションサービス契約、サブオプションサービス契約、
	 * 機器提供サービス契約、割引サービス契約を指す。
	 * </p>
	 * @param tgSkbtCd 対象識別コード
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param sbopSvcKeiNo サブオプションサービス契約番号
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param wribSvcKeiNo 割引サービス契約番号
	 * @param sysid SYSID
	 * @param sysidNew SYSID(併合/分割先)
	 * @param sysidJoinFlg SYSID併合/分割フラグ
	 * @param seikyKeiNo 請求契約番号
	 * @param seikyKeiNoNew 請求契約番号(併合/分割先)
	 * @param seikyJoinFlg 請求契約番号併合/分割フラグ
	 * @param svcKeiNoNew 引継先サービス契約番号
	 * @param stdYmd 基準年月日
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @return 異動予約明細
	 */
	public CAANMsg[] getKK1681byVariKei(String tgSkbtCd,
			String svcKeiNo, String svcKeiUcwkNo, String opSvcKeiNo, String sbopSvcKeiNo, String kktkSvcKeiNo, String wribSvcKeiNo,
			String sysid, String sysidNew, boolean sysidJoinFlg, String seikyKeiNo, String seikyKeiNoNew, boolean seikyJoinFlg,
			String svcKeiNoNew, String stdYmd, String kkopSvcKeiNo)
	{
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// バインド変数設定値保持用領域
		ArrayList<Object> arraylist = new ArrayList<Object>();
		// PreparedStatementのパラメータカウント
		int iPCnt = 0;

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK1681ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ").append(getSelectColumnListString(getSelectDBColumnList()));
			sql_Buff.append(" FROM   KK_T_IDO_RSV KK1681 ");
			sql_Buff.append(" WHERE  ");

			if (!JKKModelConst.TG_SKBT_CD_CK0011.equals(tgSkbtCd) && !JKKModelConst.TG_SKBT_CD_KK0491.equals(tgSkbtCd))
			{
				if (JKKModelConst.TG_SKBT_CD_KK0081.equals(tgSkbtCd))
				{
					if (svcKeiNoNew == null)
					{
						// 検索対象がサービス契約番号に紐付く異動予約
						sql_Buff.append("  KK1681.SVC_KEI_NO = ? ");
						arraylist.add(svcKeiNo);
					}
					else
					{
						// 検索対象がサービス契約番号、引継先サービス契約番号に紐付く異動予約
						sql_Buff.append("  KK1681.SVC_KEI_NO IN (?, ?) ");
						arraylist.add(svcKeiNo);
						arraylist.add(svcKeiNoNew);
					}
				}
				else if (JKKModelConst.TG_SKBT_CD_KK0161.equals(tgSkbtCd))
				{
					// 検索対象がサービス契約内訳番号に紐付く異動予約
					sql_Buff.append("  KK1681.SVC_KEI_UCWK_NO = ? ");
					arraylist.add(svcKeiUcwkNo);
				}
				else if (JKKModelConst.TG_SKBT_CD_KK0351.equals(tgSkbtCd))
				{
					// 検索対象がオプションサービス契約番号に紐付く異動予約
					sql_Buff.append("  KK1681.OP_SVC_KEI_NO = ? ");
					arraylist.add(opSvcKeiNo);
				}
				else if (JKKModelConst.TG_SKBT_CD_KK0401.equals(tgSkbtCd))
				{
					// 検索対象がサブオプションサービス契約番号に紐付く異動予約
					sql_Buff.append("  KK1681.SBOP_SVC_KEI_NO = ? ");
					arraylist.add(sbopSvcKeiNo);
				}
				else if (JKKModelConst.TG_SKBT_CD_KK0341.equals(tgSkbtCd))
				{
					// 検索対象が機器提供サービス契約番号に紐付く異動予約
					sql_Buff.append("  KK1681.KKTK_SVC_KEI_NO = ? ");
					arraylist.add(kktkSvcKeiNo);
				}
				else if (JKKModelConst.TG_SKBT_CD_KK0451.equals(tgSkbtCd))
				{
					// 検索対象が割引サービス契約番号に紐付く異動予約
					sql_Buff.append("  KK1681.WRIB_SVC_KEI_NO = ? ");
					arraylist.add(wribSvcKeiNo);
				}
				else if (JKKModelConst.TG_SKBT_CD_KK2811.equals(tgSkbtCd))
				{
					// 検索対象が機器オプションサービス契約番号に紐付く異動予約
					sql_Buff.append("  KK1681.KKOP_SVC_KEI_NO = ? ");
					arraylist.add(kkopSvcKeiNo);
				}
			}
			else {
				sql_Buff.append("   KK1681.IDO_RSV_NO IN ( ");

				if (JKKModelConst.TG_SKBT_CD_CK0011.equals(tgSkbtCd))
				{
					// 検索対象がSYSIDに紐付く異動予約
					if (sysidJoinFlg)
					{
						// 併合/分割時は元/先のSYSIDで予約を検索
						sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
						sql_Buff.append("     WHERE  KK1681_01.SYSID IN (?, ?) ");
						arraylist.add(sysid);
						arraylist.add(sysidNew);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
						sql_Buff.append("     WHERE  KK1681_02.HEIGO_SK_SYSID IN (?, ?) ");
						arraylist.add(sysid);
						arraylist.add(sysidNew);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03 ");
						sql_Buff.append("     WHERE  KK1681_03.BUNKATSU_SK_SYSID IN (?, ?) ");
						arraylist.add(sysid);
						arraylist.add(sysidNew);
					}
					else
					{
						// 併合/分割以外は現SYSIDで予約を検索
						sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
						sql_Buff.append("     WHERE  KK1681_01.SYSID = ? ");
						arraylist.add(sysid);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
						sql_Buff.append("     WHERE  KK1681_02.HEIGO_SK_SYSID = ? ");
						arraylist.add(sysid);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03 ");
						sql_Buff.append("     WHERE  KK1681_03.BUNKATSU_SK_SYSID = ? ");
						arraylist.add(sysid);
					}
				}
				else if (JKKModelConst.TG_SKBT_CD_KK0491.equals(tgSkbtCd))
				{
					// 検索対象が請求契約番号に紐付く異動予約
					if (seikyJoinFlg)
					{
						// 併合/分割時は元/先の請求契約番号で予約を検索
						sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
						sql_Buff.append("     WHERE  KK1681_01.SEIKY_KEI_NO IN (?, ?) ");
						arraylist.add(seikyKeiNo);
						arraylist.add(seikyKeiNoNew);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
						sql_Buff.append("     WHERE  KK1681_02.HEIGO_SK_SEIKY_KEI_NO IN (?, ?) ");
						arraylist.add(seikyKeiNo);
						arraylist.add(seikyKeiNoNew);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03 ");
						sql_Buff.append("     WHERE  KK1681_03.BUNKATSU_SK_SEIKY_KEI_NO IN (?, ?) ");
						arraylist.add(seikyKeiNo);
						arraylist.add(seikyKeiNoNew);
					}
					else
					{
						// 併合/分割以外は現請求契約番号で予約を検索
						sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
						sql_Buff.append("     WHERE  KK1681_01.SEIKY_KEI_NO = ? ");
						arraylist.add(seikyKeiNo);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
						sql_Buff.append("     WHERE  KK1681_02.HEIGO_SK_SEIKY_KEI_NO = ? ");
						arraylist.add(seikyKeiNo);

						sql_Buff.append("     UNION ");
						sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO ");
						sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03 ");
						sql_Buff.append("     WHERE  KK1681_03.BUNKATSU_SK_SEIKY_KEI_NO = ? ");
						arraylist.add(seikyKeiNo);
					}
				}
				sql_Buff.append(" ) ");
			}

			sql_Buff.append(" AND   (KK1681.IDO_RSV_STAT_CD IN ('00', '03') ");
			sql_Buff.append("     OR (KK1681.IDO_RSV_STAT_CD = '04' AND KK1681.RSV_APLY_YMD > ?)) ");
			sql_Buff.append(" AND    KK1681.MK_FLG = '0' ");
			arraylist.add(stdYmd);

			sql_Buff.append(" ORDER BY KK1681.IDO_RSV_DTL_CD, KK1681.RSV_APLY_YMD, KK1681.IDO_RSV_NO ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.println(JSYejbLog.DBACCESS, this.getClass(), sql_Buff);

			// バインド変数設定
			for (int iCnt = 0; iCnt < arraylist.size(); iCnt++)
			{
				// バインド変数に設定
				CAANJDBCUtil.setParam(pstmt, ++iPCnt, arraylist.get(iCnt));
			}

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 検索データの設定
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery, getSelectMsgColumnList(), 0);

			return outMsg1;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con1 != null)
				{
					CAANConnectionMgr.getInstance().close(con1);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 各種契約番号の契約配下の子契約に紐づく異動予約明細を取得します。<br>
	 * ※各種契約とは、サービス契約、サービス契約内訳、オプションサービス契約、サブオプションサービス契約、
	 * 機器提供サービス契約、割引サービス契約を指す。
	 * </p>
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param sbopSvcKeiNo サブオプションサービス契約番号
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param stdYmd 基準年月日
	 * @param searchPtn 検索パターン<br>
	 * "1"：「サービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合<br>
	 * "2"：「サービス契約内訳」配下の各種子契約に紐づく「異動予約」を取得する場合<br>
	 * "3"：「オプションサービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合<br>
	 * "4"：「サブオプションサービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合<br>
	 * "5"：「機器提供サービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合<br>
	 * @return 異動予約明細
	 */
	public CAANMsg[] getKK1681byVariKeiChild(String svcKeiNo, String svcKeiUcwkNo,
			String opSvcKeiNo, String sbopSvcKeiNo, String kktkSvcKeiNo, String stdYmd, String searchPtn)
	{
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// バインド変数設定値保持用領域
		ArrayList<Object> arraylist = new ArrayList<Object>();
		// PreparedStatementのパラメータカウント
		int iPCnt = 0;

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK1681ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ").append(getSelectColumnListString(getSelectDBColumnList()));
			sql_Buff.append(" FROM   KK_T_IDO_RSV KK1681 ");
			sql_Buff.append(" WHERE  KK1681.IDO_RSV_NO IN ( ");

			// 「サービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合
			if ("1".equals(searchPtn))
			{
				/* ----------------------------------------------------------------------------------------------------
				 * (1)「サービス契約」配下の「サービス契約内訳」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約→サービス契約内訳→異動予約
				sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
				sql_Buff.append("     WHERE  KK1681_01.SVC_KEI_UCWK_NO IN ( ");
				sql_Buff.append("         SELECT KK0161_01.SVC_KEI_UCWK_NO ");
				sql_Buff.append("         FROM   KK_T_SVC_KEI_UCWK KK0161_01 ");
				sql_Buff.append("         WHERE  KK0161_01.SVC_KEI_NO = ? ");
				sql_Buff.append("         AND    KK0161_01.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (2)「サービス契約」配下の「オプションサービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約                  →オプションサービス契約→異動予約
				// Aサービス契約→サービス契約内訳→オプションサービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
				sql_Buff.append("     WHERE  KK1681_02.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0351_02_1.OP_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_OP_SVC_KEI KK0351_02_1 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0351_02_1.OYA_KEI_SKBT_CD = '01' ");
				sql_Buff.append("         AND KK0351_02_1.SVC_KEI_NO = ? ");
				sql_Buff.append("         AND KK0351_02_1.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0351_02_2.OP_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_OP_SVC_KEI KK0351_02_2 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0351_02_2.OYA_KEI_SKBT_CD = '03' ");
				sql_Buff.append("         AND KK0351_02_2.SVC_KEI_UCWK_NO IN ( ");
				sql_Buff.append("                 SELECT KK0161_02.SVC_KEI_UCWK_NO ");
				sql_Buff.append("                 FROM   KK_T_SVC_KEI_UCWK KK0161_02 ");
				sql_Buff.append("                 WHERE  KK0161_02.SVC_KEI_NO = ? ");
				sql_Buff.append("                 AND    KK0161_02.MK_FLG = '0') ");
				sql_Buff.append("         AND KK0351_02_2.MK_FLG = '0' ");
				sql_Buff.append("         ) ");
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (3)「サービス契約」配下の「サブオプションサービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約                  →オプションサービス契約→サブオプションサービス契約→異動予約
				// Aサービス契約→サービス契約内訳→オプションサービス契約→サブオプションサービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03 ");
				sql_Buff.append("     WHERE  KK1681_03.SBOP_SVC_KEI_NO IN ( ");
// v14.00.00 2015/06/23 MOD START  
//				sql_Buff.append("         SELECT KK0401_03.SBOP_SVC_KEI_NO ");
				sql_Buff.append("         SELECT /*+ INDEX(KK0401_03 KK_T_SBOP_SVC_KEI_PK_01) */ KK0401_03.SBOP_SVC_KEI_NO ");
// v14.00.00 2015/06/23 MOD END  
				sql_Buff.append("         FROM   KK_T_SBOP_SVC_KEI KK0401_03 ");
				sql_Buff.append("         WHERE  KK0401_03.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("             SELECT KK0351_03_1.OP_SVC_KEI_NO ");
				sql_Buff.append("             FROM   KK_T_OP_SVC_KEI KK0351_03_1 ");
				sql_Buff.append("             WHERE ");
				sql_Buff.append("                 KK0351_03_1.OYA_KEI_SKBT_CD = '01' ");
				sql_Buff.append("             AND KK0351_03_1.SVC_KEI_NO = ? ");
				sql_Buff.append("             AND KK0351_03_1.MK_FLG = '0' ");
				sql_Buff.append("             UNION ");
				sql_Buff.append("             SELECT KK0351_03_2.OP_SVC_KEI_NO ");
				sql_Buff.append("             FROM   KK_T_OP_SVC_KEI KK0351_03_2 ");
				sql_Buff.append("             WHERE ");
				sql_Buff.append("                 KK0351_03_2.OYA_KEI_SKBT_CD = '03' ");
				sql_Buff.append("             AND KK0351_03_2.SVC_KEI_UCWK_NO IN ( ");
				sql_Buff.append("                     SELECT KK0161_03.SVC_KEI_UCWK_NO ");
				sql_Buff.append("                     FROM   KK_T_SVC_KEI_UCWK KK0161_03 ");
				sql_Buff.append("                     WHERE  KK0161_03.SVC_KEI_NO = ? ");
				sql_Buff.append("                     AND    KK0161_03.MK_FLG = '0') ");
				sql_Buff.append("             AND KK0351_03_2.MK_FLG = '0' ");
				sql_Buff.append("         ) ");
				sql_Buff.append("         AND    KK0401_03.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (4)「サービス契約」配下の「機器提供サービス契約」に紐づく「異動予約」の抽出
				 * ※現時点では、機器提供サービス契約.親契約識別コードが"01"(サービス契約)の場合だけでなく、
				 *   "03"(サービス契約内訳)、"04"(オプションサービス契約)の場合でも、
				 *   親「サービス契約」のサービス契約番号が設定されているため、以下のような検索条件となる。
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約→機器提供サービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_04.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_04 ");
				sql_Buff.append("     WHERE  KK1681_04.KKTK_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0341_04.KKTK_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_KKTK_SVC_KEI KK0341_04 ");
				sql_Buff.append("         WHERE  KK0341_04.OYA_KEI_SKBT_CD IN ('01', '03', '04') ");
				sql_Buff.append("         AND    KK0341_04.SVC_KEI_NO = ? ");
				sql_Buff.append("         AND    KK0341_04.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (5)「サービス契約」配下の「割引サービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約                                                                      →割引サービス契約→異動予約
				// Aサービス契約→サービス契約内訳                                                    →割引サービス契約→異動予約
				// Bサービス契約                  →オプションサービス契約                            →割引サービス契約→異動予約
				// Cサービス契約→サービス契約内訳→オプションサービス契約                            →割引サービス契約→異動予約
				// Dサービス契約                  →オプションサービス契約→サブオプションサービス契約→割引サービス契約→異動予約
				// Eサービス契約→サービス契約内訳→オプションサービス契約→サブオプションサービス契約→割引サービス契約→異動予約
				// Fサービス契約                                                →機器提供サービス契約→割引サービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_05.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_05 ");
				sql_Buff.append("     WHERE  KK1681_05.WRIB_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0481_05_1.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_1 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0481_05_1.TG_KEI_SKBT_CD = '01' ");
				sql_Buff.append("         AND KK0481_05_1.SVC_KEI_NO = ? ");
				sql_Buff.append("         AND KK0481_05_1.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0481_05_2.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_2 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0481_05_2.TG_KEI_SKBT_CD = '03' ");
				sql_Buff.append("         AND KK0481_05_2.SVC_KEI_UCWK_NO IN ( ");
				sql_Buff.append("                 SELECT KK0161_05.SVC_KEI_UCWK_NO ");
				sql_Buff.append("                 FROM   KK_T_SVC_KEI_UCWK KK0161_05 ");
				sql_Buff.append("                 WHERE  KK0161_05.SVC_KEI_NO = ? ");
				sql_Buff.append("                 AND    KK0161_05.MK_FLG = '0') ");
				sql_Buff.append("         AND    KK0481_05_2.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0481_05_3.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_3 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0481_05_3.TG_KEI_SKBT_CD = '04' ");
				sql_Buff.append("         AND KK0481_05_3.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("                 SELECT KK0351_05.OP_SVC_KEI_NO ");
				sql_Buff.append("                 FROM   KK_T_OP_SVC_KEI KK0351_05 ");
				sql_Buff.append("                 WHERE ");
				sql_Buff.append("                     KK0351_05.OYA_KEI_SKBT_CD = '01' ");
				sql_Buff.append("                 AND KK0351_05.SVC_KEI_NO = ? ");
				sql_Buff.append("                 AND    KK0351_05.MK_FLG = '0') ");
				sql_Buff.append("         AND    KK0481_05_3.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0481_05_4.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_4 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("            KK0481_05_4.TG_KEI_SKBT_CD = '04' ");
				sql_Buff.append("         AND KK0481_05_4.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("                 SELECT KK0351_05.OP_SVC_KEI_NO ");
				sql_Buff.append("                 FROM   KK_T_OP_SVC_KEI KK0351_05 ");
				sql_Buff.append("                 WHERE ");
				sql_Buff.append("                     KK0351_05.OYA_KEI_SKBT_CD = '03' ");
				sql_Buff.append("                 AND KK0351_05.SVC_KEI_UCWK_NO IN ( ");
				sql_Buff.append("                         SELECT KK0161_05.SVC_KEI_UCWK_NO ");
				sql_Buff.append("                         FROM   KK_T_SVC_KEI_UCWK KK0161_05 ");
				sql_Buff.append("                         WHERE  KK0161_05.SVC_KEI_NO = ? ");
				sql_Buff.append("                         AND    KK0161_05.MK_FLG = '0') ");
				sql_Buff.append("                 AND    KK0351_05.MK_FLG = '0') ");
				sql_Buff.append("         AND    KK0481_05_4.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0481_05_5.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_5 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0481_05_5.TG_KEI_SKBT_CD = '05' ");
				sql_Buff.append("         AND KK0481_05_5.SBOP_SVC_KEI_NO IN ( ");
				sql_Buff.append("                 SELECT KK0401_05.SBOP_SVC_KEI_NO ");
				sql_Buff.append("                 FROM   KK_T_SBOP_SVC_KEI KK0401_05 ");
				sql_Buff.append("                 WHERE  KK0401_05.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("                     SELECT KK0351_05.OP_SVC_KEI_NO ");
				sql_Buff.append("                     FROM   KK_T_OP_SVC_KEI KK0351_05 ");
				sql_Buff.append("                     WHERE ");
				sql_Buff.append("                         KK0351_05.OYA_KEI_SKBT_CD = '01' ");
				sql_Buff.append("                     AND KK0351_05.SVC_KEI_NO = ? ");
				sql_Buff.append("                     AND    KK0351_05.MK_FLG = '0') ");
				sql_Buff.append("                 AND    KK0401_05.MK_FLG = '0') ");
				sql_Buff.append("         AND    KK0481_05_5.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0481_05_6.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_6 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0481_05_6.TG_KEI_SKBT_CD = '05' ");
				sql_Buff.append("         AND KK0481_05_6.SBOP_SVC_KEI_NO IN ( ");
				sql_Buff.append("                 SELECT KK0401_05.SBOP_SVC_KEI_NO ");
				sql_Buff.append("                 FROM   KK_T_SBOP_SVC_KEI KK0401_05 ");
				sql_Buff.append("                 WHERE  KK0401_05.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("                     SELECT KK0351_05.OP_SVC_KEI_NO ");
				sql_Buff.append("                     FROM   KK_T_OP_SVC_KEI KK0351_05 ");
				sql_Buff.append("                     WHERE ");
				sql_Buff.append("                         KK0351_05.OYA_KEI_SKBT_CD = '03' ");
				sql_Buff.append("                     AND KK0351_05.SVC_KEI_UCWK_NO IN ( ");
				sql_Buff.append("                             SELECT KK0161_05.SVC_KEI_UCWK_NO ");
				sql_Buff.append("                             FROM   KK_T_SVC_KEI_UCWK KK0161_05 ");
				sql_Buff.append("                             WHERE  KK0161_05.SVC_KEI_NO = ? ");
				sql_Buff.append("                             AND    KK0161_05.MK_FLG = '0') ");
				sql_Buff.append("                     AND    KK0351_05.MK_FLG = '0') ");
				sql_Buff.append("                 AND    KK0401_05.MK_FLG = '0') ");
				sql_Buff.append("         AND    KK0481_05_6.MK_FLG = '0' ");
				sql_Buff.append("         UNION ");
				sql_Buff.append("         SELECT KK0481_05_7.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_05_7 ");
				sql_Buff.append("         WHERE ");
				sql_Buff.append("             KK0481_05_7.TG_KEI_SKBT_CD = '06' ");
				sql_Buff.append("         AND KK0481_05_7.KKTK_SVC_KEI_NO IN ( ");
				sql_Buff.append("                 SELECT KK0341_05.KKTK_SVC_KEI_NO ");
				sql_Buff.append("                 FROM   KK_T_KKTK_SVC_KEI KK0341_05 ");
				sql_Buff.append("                 WHERE  KK0341_05.OYA_KEI_SKBT_CD IN ('01', '03', '04') ");
				sql_Buff.append("                 AND    KK0341_05.SVC_KEI_NO = ? ");
				sql_Buff.append("                 AND    KK0341_05.MK_FLG = '0') ");
				sql_Buff.append("         AND    KK0481_05_7.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);
				arraylist.add(svcKeiNo);
			}
			// 「サービス契約内訳」配下の各種子契約に紐づく「異動予約」を取得する場合
			else if ("2".equals(searchPtn))
			{
				/* ----------------------------------------------------------------------------------------------------
				 * (1)「サービス契約内訳」配下の「オプションサービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約内訳→オプションサービス契約→異動予約
				sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
				sql_Buff.append("     WHERE  KK1681_01.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0351_01.OP_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_OP_SVC_KEI KK0351_01 ");
				sql_Buff.append("         WHERE  KK0351_01.OYA_KEI_SKBT_CD = '03' ");
				sql_Buff.append("         AND    KK0351_01.SVC_KEI_UCWK_NO = ? ");
				sql_Buff.append("         AND    KK0351_01.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiUcwkNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (2)「サービス契約内訳」配下の「サブオプションサービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約内訳→オプションサービス契約→サブオプションサービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
				sql_Buff.append("     WHERE  KK1681_02.SBOP_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0401_02.SBOP_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_SBOP_SVC_KEI KK0401_02 ");
				sql_Buff.append("         WHERE  KK0401_02.OP_SVC_KEI_NO IN ( ");
				sql_Buff.append("             SELECT KK0351_02.OP_SVC_KEI_NO ");
				sql_Buff.append("             FROM   KK_T_OP_SVC_KEI KK0351_02 ");
				sql_Buff.append("             WHERE  KK0351_02.OYA_KEI_SKBT_CD = '03' ");
				sql_Buff.append("             AND    KK0351_02.SVC_KEI_UCWK_NO = ? ");
				sql_Buff.append("             AND    KK0351_02.MK_FLG = '0' ");
				sql_Buff.append("         ) ");
				sql_Buff.append("         AND    KK0401_02.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiUcwkNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (3)「サービス契約内訳」配下の「機器提供サービス契約」に紐づく「異動予約」の抽出
				 * ※現時点では、機器提供サービス契約.親契約識別コードが"03"(サービス契約内訳)の場合だけでなく、
				 *   "04"(オプションサービス契約)の場合でも、
				 *   親「サービス契約内訳」のサービス契約内訳番号が設定されているため、以下のような検索条件となる。
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約内訳→機器提供サービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03 ");
				sql_Buff.append("     WHERE  KK1681_03.KKTK_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0341_03.KKTK_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_KKTK_SVC_KEI KK0341_03 ");
				sql_Buff.append("         WHERE  KK0341_03.OYA_KEI_SKBT_CD IN ('03', '04') ");
				sql_Buff.append("         AND    KK0341_03.SVC_KEI_UCWK_NO = ? ");
				sql_Buff.append("         AND    KK0341_03.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(svcKeiUcwkNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (4)「サービス契約内訳」配下の「割引サービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サービス契約内訳                                                    →割引サービス契約→異動予約
				// Aサービス契約内訳→オプションサービス契約                            →割引サービス契約→異動予約
				// Bサービス契約内訳→オプションサービス契約→サブオプションサービス契約→割引サービス契約→異動予約
				// Cサービス契約内訳                              →機器提供サービス契約→割引サービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_04_1.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_04_1  ");
				sql_Buff.append("     WHERE  KK1681_04_1.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_04.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_04  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_04.TG_KEI_SKBT_CD = '03'  ");
				sql_Buff.append("         AND KK0481_04.SVC_KEI_UCWK_NO = ?  ");
				sql_Buff.append("         AND KK0481_04.MK_FLG = '0'  ");
				sql_Buff.append("     )  ");
				sql_Buff.append("     UNION  ");
				sql_Buff.append("     SELECT KK1681_04_2.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_04_2  ");
				sql_Buff.append("     WHERE  KK1681_04_2.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_04.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_04  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_04.TG_KEI_SKBT_CD = '04'  ");
				sql_Buff.append("         AND KK0481_04.OP_SVC_KEI_NO IN (  ");
				sql_Buff.append("                 SELECT KK0351_04.OP_SVC_KEI_NO  ");
				sql_Buff.append("                 FROM   KK_T_OP_SVC_KEI KK0351_04  ");
				sql_Buff.append("                 WHERE  KK0351_04.OYA_KEI_SKBT_CD = '03'  ");
				sql_Buff.append("                 AND    KK0351_04.SVC_KEI_UCWK_NO = ?  ");
				sql_Buff.append("                 AND    KK0351_04.MK_FLG = '0')  ");
				sql_Buff.append("         AND KK0481_04.MK_FLG = '0'  ");
				sql_Buff.append("     )  ");
				sql_Buff.append("     UNION  ");
				sql_Buff.append("     SELECT KK1681_04_3.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_04_3  ");
				sql_Buff.append("     WHERE  KK1681_04_3.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_04.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_04  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_04.TG_KEI_SKBT_CD = '05'  ");
				sql_Buff.append("         AND KK0481_04.SBOP_SVC_KEI_NO IN (  ");
				sql_Buff.append("                 SELECT KK0401_04.SBOP_SVC_KEI_NO  ");
				sql_Buff.append("                 FROM   KK_T_SBOP_SVC_KEI KK0401_04  ");
				sql_Buff.append("                 WHERE  KK0401_04.OP_SVC_KEI_NO IN (  ");
				sql_Buff.append("                     SELECT KK0351_04.OP_SVC_KEI_NO  ");
				sql_Buff.append("                     FROM   KK_T_OP_SVC_KEI KK0351_04  ");
				sql_Buff.append("                     WHERE  KK0351_04.OYA_KEI_SKBT_CD = '03'  ");
				sql_Buff.append("                     AND    KK0351_04.SVC_KEI_UCWK_NO = ?  ");
				sql_Buff.append("                     AND    KK0351_04.MK_FLG = '0')  ");
				sql_Buff.append("                 AND    KK0401_04.MK_FLG = '0')  ");
				sql_Buff.append("         AND    KK0481_04.MK_FLG = '0' ");
				sql_Buff.append("     )  ");
				sql_Buff.append("     UNION  ");
				sql_Buff.append("     SELECT KK1681_04_4.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_04_4  ");
				sql_Buff.append("     WHERE  KK1681_04_4.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_04.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_04  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_04.TG_KEI_SKBT_CD = '06'  ");
				sql_Buff.append("         AND KK0481_04.KKTK_SVC_KEI_NO IN (  ");
				sql_Buff.append("                 SELECT KK0341_04.KKTK_SVC_KEI_NO  ");
				sql_Buff.append("                 FROM   KK_T_KKTK_SVC_KEI KK0341_04  ");
				sql_Buff.append("                 WHERE  KK0341_04.OYA_KEI_SKBT_CD IN ('03', '04')  ");
				sql_Buff.append("                 AND    KK0341_04.SVC_KEI_UCWK_NO = ?  ");
				sql_Buff.append("                 AND    KK0341_04.MK_FLG = '0')  ");
				sql_Buff.append("         AND    KK0481_04.MK_FLG = '0'  ");
				sql_Buff.append("     )  ");
				arraylist.add(svcKeiUcwkNo);
				arraylist.add(svcKeiUcwkNo);
				arraylist.add(svcKeiUcwkNo);
				arraylist.add(svcKeiUcwkNo);
			}
			// 「オプションサービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合
			else if ("3".equals(searchPtn))
			{
				/* ----------------------------------------------------------------------------------------------------
				 * (1)「オプションサービス契約」配下の「サブオプションサービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @オプションサービス契約→サブオプションサービス契約→異動予約
				sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
				sql_Buff.append("     WHERE  KK1681_01.SBOP_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0401_01.SBOP_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_SBOP_SVC_KEI KK0401_01 ");
				sql_Buff.append("         WHERE  KK0401_01.OP_SVC_KEI_NO  = ? ");
				sql_Buff.append("         AND    KK0401_01.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(opSvcKeiNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (2)「オプションサービス契約」配下の「機器提供サービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @オプションサービス契約→機器提供サービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
				sql_Buff.append("     WHERE  KK1681_02.KKTK_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0341_02.KKTK_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_KKTK_SVC_KEI KK0341_02 ");
				sql_Buff.append("         WHERE  KK0341_02.OYA_KEI_SKBT_CD = '04' ");
				sql_Buff.append("         AND    KK0341_02.OP_SVC_KEI_NO = ? ");
				sql_Buff.append("         AND    KK0341_02.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(opSvcKeiNo);

				/* ----------------------------------------------------------------------------------------------------
				 * (3)「オプションサービス契約」配下の「割引サービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @オプションサービス契約                            →割引サービス契約→異動予約
				// Aオプションサービス契約→サブオプションサービス契約→割引サービス契約→異動予約
				// Bオプションサービス契約      →機器提供サービス契約→割引サービス契約→異動予約
				sql_Buff.append("     UNION ");
				sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03  ");
				sql_Buff.append("     WHERE  KK1681_03.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_03.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_03  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_03.TG_KEI_SKBT_CD = '04'  ");
				sql_Buff.append("         AND KK0481_03.OP_SVC_KEI_NO = ?  ");
				sql_Buff.append("         AND KK0481_03.MK_FLG = '0'  ");
				sql_Buff.append("     )  ");
				sql_Buff.append("     UNION  ");
				sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03  ");
				sql_Buff.append("     WHERE  KK1681_03.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_03.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_03  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_03.TG_KEI_SKBT_CD = '05'  ");
				sql_Buff.append("         AND KK0481_03.SBOP_SVC_KEI_NO IN (  ");
				sql_Buff.append("                 SELECT KK0401_03.SBOP_SVC_KEI_NO  ");
				sql_Buff.append("                 FROM   KK_T_SBOP_SVC_KEI KK0401_03  ");
				sql_Buff.append("                 WHERE  KK0401_03.OP_SVC_KEI_NO = ?  ");
				sql_Buff.append("                 AND    KK0401_03.MK_FLG = '0')  ");
				sql_Buff.append("         AND KK0481_03.MK_FLG = '0'  ");
				sql_Buff.append("     )  ");
				sql_Buff.append("     UNION  ");
				sql_Buff.append("     SELECT KK1681_03.IDO_RSV_NO  ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_03  ");
				sql_Buff.append("     WHERE  KK1681_03.WRIB_SVC_KEI_NO IN (  ");
				sql_Buff.append("         SELECT KK0481_03.WRIB_SVC_KEI_NO  ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_03  ");
				sql_Buff.append("         WHERE  ");
				sql_Buff.append("             KK0481_03.TG_KEI_SKBT_CD = '06'  ");
				sql_Buff.append("         AND KK0481_03.KKTK_SVC_KEI_NO IN (  ");
				sql_Buff.append("                 SELECT KK0341_03.KKTK_SVC_KEI_NO  ");
				sql_Buff.append("                 FROM   KK_T_KKTK_SVC_KEI KK0341_03  ");
				sql_Buff.append("                 WHERE  KK0341_03.OYA_KEI_SKBT_CD = '04'  ");
				sql_Buff.append("                 AND    KK0341_03.OP_SVC_KEI_NO = ?  ");
				sql_Buff.append("                 AND    KK0341_03.MK_FLG = '0')  ");
				sql_Buff.append("         AND KK0481_03.MK_FLG = '0'  ");
				sql_Buff.append("     )  ");
				arraylist.add(opSvcKeiNo);
				arraylist.add(opSvcKeiNo);
				arraylist.add(opSvcKeiNo);
			}
			// 「サブオプションサービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合
			else if ("4".equals(searchPtn))
			{
				/* ----------------------------------------------------------------------------------------------------
				 * (1)「サブオプションサービス契約」配下の「割引サービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @サブオプションサービス契約→割引サービス契約→異動予約
				sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
				sql_Buff.append("     WHERE  KK1681_01.WRIB_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0481_01.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_01 ");
				sql_Buff.append("         WHERE  KK0481_01.TG_KEI_SKBT_CD = '05' ");
				sql_Buff.append("         AND    KK0481_01.SBOP_SVC_KEI_NO = ? ");
				sql_Buff.append("         AND    KK0481_01.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				arraylist.add(sbopSvcKeiNo);
			}
			// 「機器提供サービス契約」配下の各種子契約に紐づく「異動予約」を取得する場合
			else if ("5".equals(searchPtn))
			{
				/* ----------------------------------------------------------------------------------------------------
				 * (1)「機器提供サービス契約」配下の「割引サービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
				// @機器提供サービス契約→割引サービス契約→異動予約
				sql_Buff.append("     SELECT KK1681_01.IDO_RSV_NO ");
				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_01 ");
				sql_Buff.append("     WHERE  KK1681_01.WRIB_SVC_KEI_NO IN ( ");
				sql_Buff.append("         SELECT KK0481_01.WRIB_SVC_KEI_NO ");
				sql_Buff.append("         FROM   KK_T_WRISVC_TG_KEI KK0481_01 ");
				sql_Buff.append("         WHERE  KK0481_01.TG_KEI_SKBT_CD = '06' ");
				sql_Buff.append("         AND    KK0481_01.KKTK_SVC_KEI_NO = ? ");
				sql_Buff.append("         AND    KK0481_01.MK_FLG = '0' ");
				sql_Buff.append("     ) ");
				/* ----------------------------------------------------------------------------------------------------
				 * (2)「機器提供サービス契約」配下の「機器オプションサービス契約」に紐づく「異動予約」の抽出
				 * ---------------------------------------------------------------------------------------------------- */
//				sql_Buff.append("     UNION ");
//				sql_Buff.append("     SELECT KK1681_02.IDO_RSV_NO ");
//				sql_Buff.append("     FROM   KK_T_IDO_RSV KK1681_02 ");
//				sql_Buff.append("     WHERE  KK1681_02.KKOP_SVC_KEI_NO IN ( ");
//				sql_Buff.append("         SELECT KK2811_01.KKOP_SVC_KEI_NO ");
//				sql_Buff.append("         FROM   KK_T_KKOP_SVC_KEI KK2811_01 ");
//				sql_Buff.append("         WHERE  KK2811_01.KKTK_SVC_KEI_NO = ? ");
//				sql_Buff.append("         AND    KK2811_01.MK_FLG = '0' ");
//				sql_Buff.append("     ) ");
//				arraylist.add(kktkSvcKeiNo);
				arraylist.add(kktkSvcKeiNo);
			}
			// TODO パターン6は必要？
			// TODO 既存のパターン1〜5で機器オプションの異動予約の抽出も必要？
			
			else
			{
				throw new CAANRuntimeException("未定義の検索パターンです。");
			}

			sql_Buff.append(" ) ");
			sql_Buff.append(" AND   (KK1681.IDO_RSV_STAT_CD IN ('00', '03') ");
			sql_Buff.append("     OR (KK1681.IDO_RSV_STAT_CD = '04' AND KK1681.RSV_APLY_YMD > ?)) ");
			sql_Buff.append(" AND    KK1681.MK_FLG = '0' ");
			arraylist.add(stdYmd);

			sql_Buff.append(" ORDER BY KK1681.IDO_RSV_DTL_CD, KK1681.RSV_APLY_YMD, KK1681.IDO_RSV_NO ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.println(JSYejbLog.DBACCESS, this.getClass(), sql_Buff);

			// バインド変数設定
			for (int iCnt = 0; iCnt < arraylist.size(); iCnt++)
			{
				// バインド変数に設定
				CAANJDBCUtil.setParam(pstmt, ++iPCnt, arraylist.get(iCnt));
			}

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 検索データの設定
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery, getSelectMsgColumnList(), 0);

			return outMsg1;
		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con1 != null)
				{
					CAANConnectionMgr.getInstance().close(con1);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
	}

	/**
	 * <p>
	 * 異動予約情報（コース変更）を取得します。
	 * </p>
	 * @param svcKeiNo サービス契約番号
	 * @param opeDate 運用日付
	 * @return 対象のサービス契約番号に紐付く異動予約情報（コース変更）リスト
	 */
	public List<Map<String, String>> getIdoRsvCrsChgList(String svcKeiNo, String opeDate)
	{
		// コネクション
		Connection con = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;

		// リザルトセット
		ResultSet rsltQuery = null;

		// SQL文
		StringBuffer sbSql = new StringBuffer();

		sbSql.append(" SELECT KK1681.IDO_RSV_NO ");
		sbSql.append(" FROM   KK_T_IDO_RSV KK1681 ");
		sbSql.append(" WHERE  KK1681.SVC_KEI_NO = ? ");
		sbSql.append(" AND    KK1681.IDO_DIV = '00009' ");
		sbSql.append(" AND   (KK1681.IDO_RSV_STAT_CD IN ('00', '03') ");
		sbSql.append("        OR (KK1681.IDO_RSV_STAT_CD = '04' AND KK1681.RSV_APLY_YMD > ?)) ");
		sbSql.append(" AND    KK1681.MK_FLG = '0' ");

		try
		{

			//コネクション取得
			con = JSYejbConnection.getConnection(KK1681ETMsg.getTableName());

			//prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sbSql.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), sbSql);

			// バインド変数設定
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiNo);
			CAANJDBCUtil.setParam(pstmt, 2, opeDate);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			List<Map<String, String>> listRslt = new ArrayList<Map<String, String>>();

			// 取得結果をマップに格納
			while (rsltQuery.next())
			{
				Map<String, String> mapRslt = new HashMap<String, String>();

				mapRslt.put(KK1681ETMsg.IDO_RSV_NO, rsltQuery.getString(1));

				listRslt.add(mapRslt);
			}

			return listRslt;

		}
		catch (SQLException e)
		{
			throw new CAANRuntimeException(e);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
				if (con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException e)
			{
				throw new CAANRuntimeException(e);
			}
		}
	}

	/**
	 * <p>
	 * 機器提供サービス契約からサービス契約内訳に紐づくC-CASの異動予約情報を取得します。
	 * </p>
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param opeDate 運用日付
	 * @return C-CASの異動予約情報リスト
	 */
	public CAANMsg[] getIdoRsvCCas(String kktkSvcKeiNo, String opeDate)
	{
		// コネクション
		Connection con = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;

		// リザルトセット
		ResultSet rsltQuery = null;

		// SQL文
		StringBuffer sql_Buff = new StringBuffer();

		sql_Buff.append(" SELECT ").append(getSelectColumnListString(getSelectDBColumnList()));
		sql_Buff.append(" FROM   KK_T_IDO_RSV KK1681  ");
		sql_Buff.append(" WHERE  EXISTS ");
		sql_Buff.append("       (SELECT KK0341.KKTK_SVC_KEI_NO ");
		sql_Buff.append("        FROM   KK_T_KKTK_SVC_KEI KK0341 ");
		sql_Buff.append("        WHERE  KK0341.KKTK_SVC_KEI_NO = KK1681.KKTK_SVC_KEI_NO ");
		sql_Buff.append("        AND    KK0341.KIKI_CHG_NO = KK1681.NEW_KIKI_CHG_NO ");
		sql_Buff.append("        AND    KK0341.SVC_KEI_UCWK_NO IN  ");
		sql_Buff.append("              (SELECT KK0341_01.SVC_KEI_UCWK_NO ");
		sql_Buff.append("               FROM   KK_T_KKTK_SVC_KEI KK0341_01 ");
		sql_Buff.append("               WHERE  KK0341_01.KKTK_SVC_KEI_NO = ? ");
		sql_Buff.append("               AND    (KK0341_01.RSV_APLY_YMD > ? ");
		sql_Buff.append("                    OR KK0341_01.RSV_APLY_YMD IS NULL) ");
		sql_Buff.append("               AND    KK0341_01.MK_FLG = '0') ");
		sql_Buff.append("        AND    KK0341.KKTK_SVC_KEI_NO <> ? ");
		sql_Buff.append("        AND    KK0341.TAKNKIKI_SBT_CD = 'C0' ");
		sql_Buff.append("        AND    (KK0341.RSV_APLY_YMD > ? ");
		sql_Buff.append("             OR KK0341.RSV_APLY_YMD IS NULL) ");
		sql_Buff.append("        AND    KK0341.MK_FLG = '0') ");
		sql_Buff.append(" AND    KK1681.IDO_RSV_DTL_CD = '029' ");
		sql_Buff.append(" AND    KK1681.IDO_RSV_STAT_CD = '00' ");

		try
		{
			//コネクション取得
			con = JSYejbConnection.getConnection(KK1681ETMsg.getTableName());

			//prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), sql_Buff);

			// バインド変数設定
			CAANJDBCUtil.setParam(pstmt, 1, kktkSvcKeiNo);
			CAANJDBCUtil.setParam(pstmt, 2, opeDate);
			CAANJDBCUtil.setParam(pstmt, 3, kktkSvcKeiNo);
			CAANJDBCUtil.setParam(pstmt, 4, opeDate);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 検索データの設定
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery, getSelectMsgColumnList(), 0);

			return outMsg1;
		}
		catch (SQLException e)
		{
			throw new CAANRuntimeException(e);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
				if (con != null)
				{
					CAANConnectionMgr.getInstance().close(con);
				}
			}
			catch (SQLException e)
			{
				throw new CAANRuntimeException(e);
			}
		}
	}
}
