/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK3141C010TPMA
*	ソースファイル名：JEKK3141C010TPMA.java
*	作成者			：富士通
*	日付			：2018年04月08日
*＜機能概要＞
*	卸先事業者契約異動通知更新時の更新処理を呼び出す部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v37.00.00	2018/04/08	FJ)藤井		ANK-3366-00-00 eo光設備卸 初版発行
*
********************************************************************************/

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.common.JCMConstants;
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.ejb.cbm.entity.KK3141ETMsg;
import eo.ejb.cbm.entity.KK3141LE;
import eo.ejb.cbs.cbsmsg.EKK3141C010CBSMsg;
import eo.ejb.common.db.JKKejbDBAUtil;

/**
 * <p>
 *卸先事業者契約異動通知更新独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK3141C010TPMA implements TemplateMainHandler
{
	/**
	 *卸先事業者契約異動通知更新独自処理をします。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execDBAccess(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 検索条件の設定
		CAANMsg KK3141Msg = new CAANMsg(KK3141ETMsg.class.getName());
		KK3141Msg.set(KK3141ETMsg.ORSJGS_KEI_IDT_NO, inCBSMsg.getString(EKK3141C010CBSMsg.ORSJGS_KEI_IDT_NO));
		KK3141Msg.set(KK3141ETMsg.MK_FLG, "0");
		CAANMsg[] retMsg = null;

		try
		{
			retMsg = new KK3141LE().findByCondition(KK3141Msg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// 取得件数分、処理を行う
		for (int i = 0; i < retMsg.length; i++)
		{
		
			// 更新内容を設定
			retMsg[i].set(KK3141ETMsg.UPD_DTM, inCBSMsg.getString(EKK3141C010CBSMsg.OPERATEDATETIME));
			retMsg[i].set(KK3141ETMsg.UPD_OPEACNT, inCBSMsg.getString(EKK3141C010CBSMsg.OPERATORID));
			retMsg[i].set(KK3141ETMsg.ORSJGS_KEI_IDT_RSLT_CD, inCBSMsg.getString(EKK3141C010CBSMsg.ORSJGS_KEI_IDT_RSLT_CD));
			retMsg[i].set(KK3141ETMsg.ORSJGS_KEI_IDT_NG_RSN, inCBSMsg.getString(EKK3141C010CBSMsg.ORSJGS_KEI_IDT_NG_RSN));
			
			// update
			JKKejbDBAUtil dbu = new JKKejbDBAUtil(inCBSMsg);
			
			dbu.update(retMsg[i]);
		}
		
		// 出力項目の設定
		if(0 < retMsg.length)
		{
			inCBSMsg.set(EKK3141C010CBSMsg.UPD_DTM, inCBSMsg.getString(EKK3141C010CBSMsg.OPERATEDATETIME));
			inCBSMsg.set(EKK3141C010CBSMsg.UPD_OPEACNT, inCBSMsg.getString(EKK3141C010CBSMsg.OPERATORID));
		}
	}
	
	/**
	 * IKK3141D001_制約ＮＯ1チェック
	 *
	 * @param inETMsg チェック対象のETMsg(KK3141ETMsg)
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errFlag ERRフラグ
	 * @return int チェック結果
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK3141C010TPMA#execKRCK");

		Connection con = JSYejbConnection.getConnection(KK3141ETMsg.getTableName());

		PreparedStatement pstmtQuery = null;
		ResultSet rsltQuery = null;
		StringBuffer sqlQuery = new StringBuffer();

		try{

			// チェック条件定数
			// ＳＱＬ引数定義
			String joken1_2 = new String(inCBSMsg.getObject(EKK3141C010CBSMsg.ORSJGS_KEI_IDT_NO).toString());
			String joken2_2 = new String(inCBSMsg.getObject(EKK3141C010CBSMsg.UPD_DTM_BF).toString());

			// 条件文定義
			String joken_1 = KK3141ETMsg.getDBColumnName(KK3141ETMsg.ORSJGS_KEI_IDT_NO);
			joken_1 += " = ? ";

			// チェック条件
			if( !inCBSMsg.isNull(EKK3141C010CBSMsg.ORSJGS_KEI_IDT_NO)
					&& !inCBSMsg.isNull(EKK3141C010CBSMsg.UPD_DTM_BF)
			){
	
				// ＳＱＬ文の組み立て
				sqlQuery.append("SELECT UPD_DTM FROM ").append(KK3141ETMsg.getTableName()).append(" WHERE ")
					.append(joken_1);

				// ＳＱＬ文の解析
				pstmtQuery = con.prepareStatement(sqlQuery.toString());

				// パラメータの設定
				int para_idx = 1;
				if(joken1_2 != null){
					CAANJDBCUtil.setParam(pstmtQuery, para_idx++ , joken1_2);
				}

				// ＳＱＬ文の実行
				rsltQuery = pstmtQuery.executeQuery();

				if(rsltQuery.next()){
				// 判定条件
					if(!joken2_2.equals(rsltQuery.getString("UPD_DTM"))){
						inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
						inCBSMsg.set(EKK3141C010CBSMsg.UPD_DTM_BF_ERR, "EA");
					}
				}

			}

		} catch(SQLException e) {
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// このメソッドで確保した資源の解放
			try {
				if(rsltQuery != null) {
					rsltQuery.close();
				}
				if(pstmtQuery != null) {
					pstmtQuery.close();
				}
				if(con != null) {
					CAANConnectionMgr.getInstance().close(con);
				}
			} catch(SQLException e) {
				inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
		
		// 終了ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JEKK3141C010TPMA#execKRCK");
	}

	
}
