/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK0161Edit
*	ソースファイル名：JKKejbKK0161Edit.java
*	作成者			：富士通
*	日付			：2011年06月15日
*＜機能概要＞
*	サービス契約内訳世代登録年月日時分秒取得部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/15	富士通		新規作成
*   v4.00.00    2013/04/10  FJ）寺園    IT2-2013-0000251
*   v4.00.01    2013/05/07  FJ)竹内     IT1-2013-0001173
*   v5.00.00    2013/10/31  FJ）寺園    OM-2013-0003686
*   v6.00.00    2013/10/31  FJ）大山    IT2-2013-0000811
*   v6.00.01    2013/12/04  FJ）宇野    OM-2013-0004529
*   v8.00.00	2014/03/24	FJ）松枝	OM-2014-0000286   
*
**********************************************************************/

package eo.ejb.common.edit;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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 com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0161ETMsg;
import eo.ejb.cbm.entity.KK0171ETMsg;
import eo.ejb.cbm.entity.KK0191ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.db.JKKejbKK0161DBABase;
import eo.ejb.common.db.JKKejbKK0171DBABase;
import eo.ejb.common.db.JKKejbKK0191DBABase;

/**
 * <p>
 * サービス契約内訳のカレントレコードの世代登録年月日時分秒を取得する部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0161Edit extends JKKejbKK0161DBABase
{

	/** 番ポ有無(有) */
	private static final String BANPO_ON = "1";

	/**
	 * コンストラクタです。
	 */
	public JKKejbKK0161Edit()
	{
	}

	/**
	 * <p>
	 * サービス契約内訳のカレントレコードの世代登録年月日時分秒を取得を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiucwkno 検索対象となるサービス契約内訳番号
	 * @return 指定されたサービス契約内訳番号に紐付くカレントレコードの世代登録年月日時分秒
	 */
	public Object getCurrentGeneAddDtm(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiucwkno)
	{

		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0161ETMsg.class.getName());
		inETMsg.set(KK0161ETMsg.SVC_KEI_UCWK_NO, svcKeiucwkno);
		inETMsg.set(KK0161ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約内訳のカレント検索を行う
		CAANMsg ret0161C = super.findByCurrent(inETMsg);

		// 検索結果が0件の場合
		if (null == ret0161C)
		{
			return null;
		}

		Object value = ret0161C.getObject(KK0161ETMsg.GENE_ADD_DTM);

		return value;
	}
	
	/**
	 * <p>
	 * サービス契約内訳<eo光ネット>-ISP認証IDの設定を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inSvcKeiUcwkNo サービス契約内訳番号
	 * @param inIdoDiv 異動区分
	 * @param inAdchgIdoDtlCd 住所変更異動詳細コード
	 * @param ispNinshoId ISP認証ID
	 * @return 項目に設定するべき値
	 */
	public Object setIspNinshoId(CAANMsg inMsg, AgentDispatchContext inContext, Object inSvcKeiUcwkNo, Object inIdoDiv, Object ispNinshoId, Object inAdchgIdoDtlCd)
	{
		// ISP認証IDが設定されている場合それを返却する。
		if (null != ispNinshoId)
		{
			return ispNinshoId;
		}

		return JKKModelCommon.getIspNinshoIdEditKK0171(inMsg, inContext, inSvcKeiUcwkNo, inIdoDiv, inAdchgIdoDtlCd);
	}
	
	/**
	 * <p>
	 * サービス契約内訳<eo光ネット>-ISP認証IDパスワードの設定を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inSvcKeiUcwkNo サービス契約内訳番号
	 * @param ispNinshoIdPwd ISP認証IDパスワード
	 * @param inIdoDiv 異動区分
	 * @param inAdchgIdoDtlCd 異動予約詳細コード
	 * @return 項目に設定するべき値
	 */
	public Object setIspNinshoIdPwd(CAANMsg inMsg, AgentDispatchContext inContext, Object inSvcKeiUcwkNo, Object ispNinshoIdPwd, Object inIdoDiv, Object inAdchgIdoDtlCd)
	{
		// ISP認証IDパスワードが設定されている場合それを返却する。
		if (null != ispNinshoIdPwd)
		{
			return ispNinshoIdPwd;
		}
		
		String value = null;
		String svcKeiNo = null;
		
		// 対象のサービス内訳契約番号でカレント検索を行う
		CAANMsg ret0161 = new JKKejbKK0161DBABase().getKK0161Current((String) inSvcKeiUcwkNo, JKKModelCommon.getOpeDate(inMsg));
		
		svcKeiNo = ret0161.getString(KK0161ETMsg.SVC_KEI_NO);

		// 引継ぎ
		// 異動区分が"コース変更"、または異動区分が"住所変更・登録"かつ異動詳細コードが"コース変更"の場合、旧ISP認証IDパスワードを取得する
		if (JKKModelConst.IDO_DIV_COURSE_CHG.equals(inIdoDiv)
				|| (JKKModelConst.IDO_DIV_ADCHG_ADD.equals(inIdoDiv) && JKKModelConst.IDO_RSV_DTL_CD_COURSECHG.equals(inAdchgIdoDtlCd)))
		{
			value = getOldIspNinshoIdPwd(inMsg, svcKeiNo, (String) inSvcKeiUcwkNo);
		}
		
		// ISP認証IDパスワードを採番する
		if(value == null)
		{
			value = (String) JKKModelCommon.getIspNinshoIdPwdKK0171(inMsg, inContext);
		}
		return value;
	}
	
	/**
	 * <p>
	 * サービス契約内訳<eo光ネット>-初期ISP認証IDパスワードの設定を行います。
	 * <br>
	 * カレントレコードを取得し、初期ISP認証IDパスワードが設定されていれば、カレントレコードの初期ISP認証IDパスワードを返却する。
	 * 上記以外の場合、初期ISP認証IDパスワードを新たに採番して返却する。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inSvcKeiUcwkNo サービス契約内訳番号
	 * @param inIdoDiv 異動区分
	 * @param inAdchgIdoDtlCd 異動予約詳細コード
	 * @return 項目に設定するべき値
	 */
	public Object getShkIspNinshoIdPwd(CAANMsg inMsg, AgentDispatchContext inContext, Object inSvcKeiUcwkNo, Object inIdoDiv, Object inAdchgIdoDtlCd)
	{

		String value = null;
		String svcKeiNo = null;
		
		// 対象のサービス内訳契約番号でカレント検索を行う
		CAANMsg ret0161 = new JKKejbKK0161DBABase().getKK0161Current((String) inSvcKeiUcwkNo, JKKModelCommon.getOpeDate(inMsg));
		
		svcKeiNo = ret0161.getString(KK0161ETMsg.SVC_KEI_NO);
		
		// 異動区分が"コース変更"、または異動区分が"住所変更・登録"かつ異動詳細コードが"コース変更"の場合、旧初期ISP認証IDパスワードを取得する
		if (JKKModelConst.IDO_DIV_COURSE_CHG.equals(inIdoDiv)
				|| (JKKModelConst.IDO_DIV_ADCHG_ADD.equals(inIdoDiv) && JKKModelConst.IDO_RSV_DTL_CD_COURSECHG.equals(inAdchgIdoDtlCd)))
		{
			value = getOldShkIspNinshoIdPwd(inMsg, svcKeiNo, (String) inSvcKeiUcwkNo);
		}
		// 初期ISP認証IDパスワードを採番する
		if(value == null)
		{
			value = (String) JKKModelCommon.getIspNinshoIdPwdKK0171(inMsg, inContext);
		}
		return value;
	}
	
	/**
	 * <p>
	 * サービス契約内訳<eo光電話>の電話番号の設定を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiucwkno 検索対象となるサービス契約内訳番号
	 * @return 項目に設定するべき値
	 */
	public Object setTelNo(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiucwkno)
	{

		// カレント検索用のメッセージを作成
		CAANMsg kk0191 = new CAANMsg(KK0191ETMsg.class.getName());
		kk0191.set(KK0191ETMsg.SVC_KEI_UCWK_NO, svcKeiucwkno);

		// サービス契約内訳<eo光電話>のカレント検索を行う
		CAANMsg ret0191 = new JKKejbKK0191DBABase().findByCurrent(kk0191);

		// 検索結果が0件の場合
		if (null == ret0191)
		{
			return null;
		}
		
		// 番ポ有無が"有"の場合
		if (BANPO_ON.equals(ret0191.getString(KK0191ETMsg.BMP_UM)))
		{
			return ret0191.getString(KK0191ETMsg.TELNO);
		}

		return null;
	}

	/**
	 * <p>
	 * サービス提供中（解約前／休止中前）の違約金発生コードを取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiUcwkNo サービス契約内訳番号 
	 * @param svcKeiUcwkStat サービス契約内訳ステータス 
	 * @return 違約金発生コード
	 * @throws SQLException 
	 */
	public String getPnltyHasseiCdMae(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiUcwkNo, Object svcKeiUcwkStat) 
	{
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// 返却用変数
		String pnltyHasseiCd = null;

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0161ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT KK0161.PNLTY_HASSEI_CD ");
			sql_Buff.append(" FROM   KK_T_SVC_KEI_UCWK KK0161 ");
			sql_Buff.append(" WHERE  KK0161.SVC_KEI_UCWK_NO = ? ");
			sql_Buff.append(" AND    (KK0161.SVC_KEI_UCWK_NO, KK0161.RSV_APLY_YMD || KK0161.GENE_ADD_DTM) = ");
			sql_Buff.append("        (SELECT KK0161_GENE.SVC_KEI_UCWK_NO, MAX(KK0161_GENE.RSV_APLY_YMD || KK0161_GENE.GENE_ADD_DTM) AS KK0161_MAX ");
			sql_Buff.append("         FROM   KK_T_SVC_KEI_UCWK KK0161_GENE ");
			sql_Buff.append("         WHERE  KK0161_GENE.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ");
			sql_Buff.append(" AND    KK0161_GENE.SVC_KEI_UCWK_STAT = ? ");
			sql_Buff.append(" AND    KK0161_GENE.RSV_APLY_YMD <= ? ");
			sql_Buff.append(" AND    KK0161_GENE.RSV_APLY_CD = '2' ");
			sql_Buff.append(" AND    KK0161_GENE.MK_FLG = '0' ");
			sql_Buff.append(" GROUP BY KK0161_GENE.SVC_KEI_UCWK_NO) ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);

			// パラメータの設定(サービス契約内訳番号)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiUcwkNo);
			// パラメータの設定(サービス契約内訳ステータス)
			CAANJDBCUtil.setParam(pstmt, 2, svcKeiUcwkStat);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 違約金発生コードを取得する
			if (rsltQuery.next())
			{
				pnltyHasseiCd = rsltQuery.getString("PNLTY_HASSEI_CD");
			}

		}
		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);
			}
		}
		return pnltyHasseiCd;
	}
	

	/**
	 * <p>
	 * 旧ISP認証IDパスワードを取得する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param svcKeiNo 処理対象の「サービス契約内訳」の親「サービス契約」のサービス契約番号
	 * @param svcKeiUcwkNo 処理対象の「サービス契約内訳」のサービス契約内訳番号
	 * @return 検索結果のレコード
	 */
	private String getOldIspNinshoIdPwd(CAANMsg inCBSMsg, String svcKeiNo, String svcKeiUcwkNo)
	{
		CAANMsg[] kk0161MsgList = new JKKejbKK0161DBABase().getKK0161bySvcKei(svcKeiNo, null, JKKModelCommon.getOpeDate(inCBSMsg));
		
		for (CAANMsg kk0161Msg : kk0161MsgList)
		{
			// 入力値のサービス契約内訳番号の「サービス契約内訳」は対象外
			if (svcKeiUcwkNo.equals(kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO)))
			{
				continue;
			}
			
			// サービス契約内訳ステータスが"照査済"、"締結済"、"サービス提供中"の場合
			String svcKeiUcwkStat = kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_STAT);
			if (JKKModelConst.SVC_KEI_STAT_SHOSA_ZM.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_CNC_ZM.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_SVCTK_CHU.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_PAUSE_STP_CHU.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_STP_CHU.equals(svcKeiUcwkStat))
			{
				CAANMsg ret0171 = new JKKejbKK0171DBABase().getKK0171Primary(
						kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO), kk0161Msg.getString(KK0161ETMsg.GENE_ADD_DTM));
				
				// ISP認証IDパスワードが設定されていない場合
				if (null == ret0171.getString(KK0171ETMsg.ISP_NINSHO_ID_PWD))
				{
					return null;
				}
				return ret0171.getString(KK0171ETMsg.ISP_NINSHO_ID_PWD);
			}
		}
		return null;
	}

	/**
	 * <p>
	 * 旧初期ISP認証IDパスワードを取得する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param svcKeiNo 処理対象の「サービス契約内訳」の親「サービス契約」のサービス契約番号
	 * @param svcKeiUcwkNo 処理対象の「サービス契約内訳」のサービス契約内訳番号
	 * @return 検索結果のレコード
	 */
	private String getOldShkIspNinshoIdPwd(CAANMsg inCBSMsg, String svcKeiNo, String svcKeiUcwkNo)
	{
		CAANMsg[] kk0161MsgList = new JKKejbKK0161DBABase().getKK0161bySvcKei(svcKeiNo, null, JKKModelCommon.getOpeDate(inCBSMsg));
		
		for (CAANMsg kk0161Msg : kk0161MsgList)
		{
			// 入力値のサービス契約内訳番号の「サービス契約内訳」は対象外
			if (svcKeiUcwkNo.equals(kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO)))
			{
				continue;
			}
			
			// サービス契約内訳ステータスが"照査済"、"締結済"、"サービス提供中"の場合
			String svcKeiUcwkStat = kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_STAT);
			if (JKKModelConst.SVC_KEI_STAT_SHOSA_ZM.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_CNC_ZM.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_SVCTK_CHU.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_PAUSE_STP_CHU.equals(svcKeiUcwkStat)
					|| JKKModelConst.SVC_KEI_STAT_STP_CHU.equals(svcKeiUcwkStat))
			{
				CAANMsg ret0171 = new JKKejbKK0171DBABase().getKK0171Primary(
						kk0161Msg.getString(KK0161ETMsg.SVC_KEI_UCWK_NO), kk0161Msg.getString(KK0161ETMsg.GENE_ADD_DTM));
				
				// 初期ISP認証IDパスワードが設定されていない場合
				if (null == ret0171.getString(KK0171ETMsg.SHK_ISP_NINSHO_ID_PWD))
				{
					return null;
				}
				return ret0171.getString(KK0171ETMsg.SHK_ISP_NINSHO_ID_PWD);
			}
		}
		return null;
	}

	/**
	 * <p>
	 * サービス停止解除年月日の編集を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiUcwkNo 検索対象のサービス契約内訳番号
	 * @param kaihkYmd 回復年月日
	 * @return サービス停止解除年月日
	 */
	public String getSvcStpRlsYmd(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiUcwkNo, Object kaihkYmd)
	{
		String value = null;
		
		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0161ETMsg.class.getName());
		inETMsg.set(KK0161ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		inETMsg.set(KK0161ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約内訳のカレント検索を行う
		CAANMsg outETMsg = super.findByCurrent(inETMsg);

		// 検索結果が0件の場合
		if (null == outETMsg)
		{
			return null;
		}

		// 利用停止中（カレント．サービス停止年月日≠NULLかつカレント．サービス停止解除年月日＝NULL）の場合
		if (!outETMsg.isNull(KK0161ETMsg.SVC_STP_YMD) && outETMsg.isNull(KK0161ETMsg.SVC_STP_RLS_YMD))
		{
			value = kaihkYmd.toString();
		}
		else
		{
			value = outETMsg.getString(KK0161ETMsg.SVC_STP_RLS_YMD);
		}
		return value;
	}

	/**
	 * <p>
	 * サービス停止解除理由コードの編集を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiUcwkNo 検索対象のサービス契約内訳番号
	 * @return サービス停止解除理由コード
	 */
	public String getSvcStpRlsRsnCd(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiUcwkNo)
	{
		String value = null;
		
		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0161ETMsg.class.getName());
		inETMsg.set(KK0161ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		inETMsg.set(KK0161ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約内訳のカレント検索を行う
		CAANMsg outETMsg = super.findByCurrent(inETMsg);

		// 検索結果が0件の場合
		if (null == outETMsg)
		{
			return null;
		}

		// 利用停止中（カレント．サービス停止年月日≠NULLかつカレント．サービス停止解除年月日＝NULL）の場合
		if (!outETMsg.isNull(KK0161ETMsg.SVC_STP_YMD) && outETMsg.isNull(KK0161ETMsg.SVC_STP_RLS_YMD))
		{
			value = JKKModelConst.SVC_STP_RLS_RSN_CD_SKK;
		}
		else
		{
			value = outETMsg.getString(KK0161ETMsg.SVC_STP_RLS_RSN_CD);
		}
		return value;
	}
	
	/**
	 * <p>
	 * 指定したステータスの最新のサービス契約のカラムを取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiUcwkNo サービス契約内訳番号 
	 * @param svcKeiUcwkStat サービス契約内訳ステータス 
	 * @param columnName 取得するカラム名
	 * @return 返却値
	 * @throws SQLException 
	 */
	public String getColumnByStat(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiUcwkNo, Object svcKeiUcwkStat, String columnName) 
	{
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// 返却用変数
		String value = null;

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0161ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ").append(columnName).append(" ");
			sql_Buff.append(" FROM   KK_T_SVC_KEI_UCWK KK0161 ");
			sql_Buff.append(" WHERE  KK0161.SVC_KEI_UCWK_NO = ? ");
			sql_Buff.append(" AND    (KK0161.SVC_KEI_UCWK_NO, KK0161.RSV_APLY_YMD || KK0161.GENE_ADD_DTM) = ");
			sql_Buff.append("        (SELECT KK0161_GENE.SVC_KEI_UCWK_NO, MAX(KK0161_GENE.RSV_APLY_YMD || KK0161_GENE.GENE_ADD_DTM) AS KK0161_MAX ");
			sql_Buff.append("         FROM   KK_T_SVC_KEI_UCWK KK0161_GENE ");
			sql_Buff.append("         WHERE  KK0161_GENE.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ");
			sql_Buff.append(" AND    KK0161_GENE.SVC_KEI_UCWK_STAT = ? ");
			sql_Buff.append(" AND    KK0161_GENE.RSV_APLY_YMD <= ? ");
			sql_Buff.append(" AND    KK0161_GENE.RSV_APLY_CD = '2' ");
			sql_Buff.append(" AND    KK0161_GENE.MK_FLG = '0' ");
			sql_Buff.append(" GROUP BY KK0161_GENE.SVC_KEI_UCWK_NO) ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);

			// パラメータの設定(サービス契約内訳番号)
			CAANJDBCUtil.setParam(pstmt, 1, svcKeiUcwkNo);
			// パラメータの設定(サービス契約内訳ステータス)
			CAANJDBCUtil.setParam(pstmt, 2, svcKeiUcwkStat);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, 3, JKKModelCommon.getOpeDate(inMsg));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 指定したカラムを取得する
			if (rsltQuery.next())
			{
				value = rsltQuery.getString(columnName);
			}

		}
		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);
			}
		}
		return value;
	}
	
	/**
	 * <p>
	 * サービス契約内訳ステータスに応じてカレント引継を行うか判定します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param svcKeiUcwkNo 検索対象のサービス契約内訳番号
	 * @return 受付済、照査済、締結済であればfalse、それ以外の場合true
	 */
	public boolean isStatCurrent(CAANMsg inMsg, AgentDispatchContext inContext, Object svcKeiUcwkNo)
	{
				
		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0161ETMsg.class.getName());
		inETMsg.set(KK0161ETMsg.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		inETMsg.set(KK0161ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// サービス契約内訳のカレント検索を行う
		CAANMsg outETMsg = super.findByCurrent(inETMsg);
		
		if(outETMsg == null){
			return false;
		}
		String stat = outETMsg.getString(KK0161ETMsg.SVC_KEI_UCWK_STAT);
		
		if (JKKModelConst.SVC_KEI_STAT_UK_ZM.equals(stat) || 
				JKKModelConst.SVC_KEI_STAT_SHOSA_ZM.equals(stat) || 
				JKKModelConst.SVC_KEI_STAT_CNC_ZM.equals(stat))
		{
			return false;
		}
		return true;
	}
}
