/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCHejbCH0201NumberParts
*	ソースファイル名：JCHejbCH0201NumberParts.java
*	作成者			：富士通
*	日付			：2011年03月14日
*＜機能概要＞
*	一時金採番部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/10	富士通		新規作成
*	v3.00.01	2012/05/07	FJ)鈴木		ANK-0024-04-00_お客さまID通知停止対応(請求明細変更)
*
**********************************************************************/

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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbs.cbsmsg.ECH0191B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0381D010CBSMsg;

/**
 * <p>
 * 会計異動の採番部品。
 * </p>
 * @author 富士通
 */
public class JCHejbCH0381NumberParts extends JCHejbNumberPartsBase
{

	/**
	 * コンストラクタです。
	 */
	public JCHejbCH0381NumberParts()
	{
	}

	/**
	 * <p>
	 * 会計異動の会計異動枝番を採番する。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 採番された一時金登録番号
	 */
	public static String getKaikIdoNo(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		String value = null;
		// コネクション
		Connection con1 = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		con1 = JSYejbConnection.getConnection("CH_T_KAIK_IDO");

		// リザルトセット
		ResultSet rsltQuery = null;
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		

		try {
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT MAX(CH0381.KAIK_IDO_SEQ) AS KAIK_IDO_SEQ")
					.append(" FROM CH_T_KAIK_IDO CH0381 ");
			// 条件
			sql_Buff.append(" WHERE CH0381.KAIK_IDO_YMD = ? ");

			// prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			int i = 1;
			
			// パラメータの設定(督促番号を指定)
			CAANJDBCUtil.setParam(pstmt , i++ , inMsg.getObject(ECH0381D010CBSMsg.KAIK_IDO_YMD));
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			Long longMaxKaikIdoSeq = 1l;

			if(rsltQuery.next()){
				String strKaikIdoSeq = rsltQuery.getString("KAIK_IDO_SEQ");
				// 取得できた場合、会計異動枝番の取得を行う。
				if (null == strKaikIdoSeq) {
					value = longMaxKaikIdoSeq.toString();
				} else {

					longMaxKaikIdoSeq = new Long(rsltQuery.getString("KAIK_IDO_SEQ")) ;
					// 最大の会計異動枝番に+1を行う。
					longMaxKaikIdoSeq = longMaxKaikIdoSeq + 1;
					value = longMaxKaikIdoSeq.toString();

				}
			}
		} catch (SQLException e) {
			inMsg.set(ECH0191B010CBSMsg.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){
				inMsg.set(ECH0381D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		
		}
		
		return value;
	}

	/**
	 * <p>
	 * 会計異動の会計異動枝番を採番する。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param kaikIdoYmd 会計異動年月日
	 * @return 採番された一時金登録番号
	 */
	public static String getKaikIdoNo(CAANMsg inMsg, AgentDispatchContext inContext, String kaikIdoYmd)
	{
		String value = null;
		// コネクション
		Connection con1 = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		con1 = JSYejbConnection.getConnection("CH_T_KAIK_IDO");

		// リザルトセット
		ResultSet rsltQuery = null;
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		

		try {
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT MAX(CH0381.KAIK_IDO_SEQ) AS KAIK_IDO_SEQ")
					.append(" FROM CH_T_KAIK_IDO CH0381 ");
			// 条件
			sql_Buff.append(" WHERE CH0381.KAIK_IDO_YMD = ? ");

			// prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			int i = 1;
			
			// パラメータの設定(督促番号を指定)
			CAANJDBCUtil.setParam(pstmt , i++ , kaikIdoYmd);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			Long longMaxKaikIdoSeq = 1l;

			if(rsltQuery.next()){
				String strKaikIdoSeq = rsltQuery.getString("KAIK_IDO_SEQ");
				// 取得できた場合、会計異動枝番の取得を行う。
				if (null == strKaikIdoSeq) {
					value = longMaxKaikIdoSeq.toString();
				} else {

					longMaxKaikIdoSeq = new Long(rsltQuery.getString("KAIK_IDO_SEQ")) ;
					// 最大の会計異動枝番に+1を行う。
					longMaxKaikIdoSeq = longMaxKaikIdoSeq + 1;
					value = longMaxKaikIdoSeq.toString();

				}
			}
		} catch (SQLException e) {
			inMsg.set("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){
				inMsg.set("status", StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		
		}
		
		return value;
	}

}
