/*********************************************************************
*   All Right reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEAC0591D010TPMA
*   ソースファイル名：JEAC0591D010TPMA.java
*   作成者          ：富士通
*   日付            ：2012年05月15日
*＜機能概要＞
*   通信量情報明細登録顧客独自処理部品
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v3.00.00    2012/05/15  富士通      新規作成
*   v9.00.00    2014/07/01  FJ)小野     【OM-2014-0002090】FTTH通信明細、FTTH通信合計のインデックス変更に伴うオンライン機能対応。
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

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.CAANException;
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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.common.constant.JACStrConst;
import eo.common.util.JCRUtilCommon;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EAC0591D010CBSMsg;
import eo.ejb.common.JPCModelCommon;

/**
 * <p>
 * 通信量情報明細登録顧客独自処理部品
 * </p>
 * @author 富士通
 */
public class JEAC0591D010TPMA implements TemplateMainHandler {
	
	/**
	 * コンストラクタです。
	 */
	public JEAC0591D010TPMA()
	{
		super();
	}
	
	/**
	 * <p>
	 * 通信量情報明細登録顧客独自処理部品 <br>
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public static void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext) throws CAANException
	{
		/** (1) データ取得年月日妥当性判定処理 */
		
		// 以下の条件でサービス契約からサービス課金開始年月日を取得する。
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/
		
		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ")
					.append("     KK0081.SVC_CHRG_STAYMD ")
					.append(" FROM ")
					.append("     KK_T_SVC_KEI KK0081 ")
					.append(" WHERE ")
					.append("     KK0081.SVC_KEI_NO = ? ")
					.append(" AND KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = ")
					.append("          ( SELECT ")
					.append("                MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) KK0081_MAX ")
					.append("            FROM ")
					.append("                KK_T_SVC_KEI KK0081_GENE ")
					.append("            WHERE ")
					.append("                KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
					.append("            AND KK0081_GENE.RSV_APLY_YMD <= ? ")
					.append("            AND KK0081_GENE.RSV_APLY_CD = ? ")
					.append("            AND KK0081_GENE.MK_FLG = ? ) ");
			
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, JEAC0591D010TPMA.class, sql_Buff);
			
			// バインド変数の設定
			int i = 1;
			
			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, i++, inCBSMsg.getObject(EAC0591D010CBSMsg.SVC_KEI_NO));
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, i++, JPCModelCommon.getOpeDate(inCBSMsg, inContext, null));
			// パラメータの設定(予約適用コードを指定)
			CAANJDBCUtil.setParam(pstmt, i++, JACStrConst.RSV_APLY_CD_FIX);
			// パラメータの設定(無効フラグを指定)
			CAANJDBCUtil.setParam(pstmt, i++, JACStrConst.MK_FLG_YK);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			while(rsltQuery.next()){
				// サービス課金開始年月日を取得し判定する。
				String sSVC_CHRG_STAYMD = rsltQuery.getString(KK0081ETMsg.SVC_CHRG_STAYMD);

				if (!JCRUtilCommon.isNull(sSVC_CHRG_STAYMD))
				{
					int iSvcChrgStaYMD = Integer.parseInt(sSVC_CHRG_STAYMD);
					
					// データ取得年月日を取得
					String sDataStkuYMD = inCBSMsg.getString(EAC0591D010CBSMsg.DATA_STKU_YMD);
					
					int iDataStkuYMD = Integer.parseInt(sDataStkuYMD);
					
					// データ取得年月日 < サービス課金開始年月日の場合エラー
					if(iDataStkuYMD < iSvcChrgStaYMD){
						inCBSMsg.set(EAC0591D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
						inCBSMsg.set(EAC0591D010CBSMsg.DATA_STKU_YMD, "EB");
						return;
					}
				}

			}
			
		} catch(SQLException e) {
			inCBSMsg.set(EAC0591D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					CAANConnectionMgr.getInstance().close(con1);
				}
			}catch(SQLException e){
				inCBSMsg.set(EAC0591D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
		
	}
}
