/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSCbatSrinfKanriNoGenerator
*	ソースファイル名：JSCbatSrinfKanriNoGenerator.java
*	作成者			：富士通
*	日付			：2012年10月05日
*＜機能概要＞
*	送受信情報管理番号採番部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/10/05	FJ			新規作成
*
**********************************************************************/
package eo.business.common;

import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;

import eo.business.util.table.JBSbatSC_T_EM_ODR_SRINF;
import eo.common.constant.JSCStrConstant;
import eo.common.util.JPCUtilCommon;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;

/**
 * <p>
 * 送受信情報管理番号採番部品クラスです。
 * </p>
 * @author 富士通
 */
public class JSCbatSrinfKnrNoGenerator
{
	
	/**
	 * 送受信管理番号採番(ＥＭ)
	 * @param commonItem	バッチ共通パラメータ電文
	 * @param emOrderObj	テーブルアクセスクラス(ＥＭオーダ送受信情報)
	 * @return	採番された送受信管理番号（ＥＭ用）
	 * @throws Exception
	 */
	public static String getEmOrdSRInfNo(JBSbatCommonItem commonItem, JBSbatSQLAccess emOrderObj) throws Exception
	{
		String retStr = null;
		int loopCount = 0;
		JBSbatCommonDBInterface whereMap = null;
		JBSbatCommonDBInterface resultMap = null;
		String sodStat = null;
		
		while (true)
		{
			// ---タイムアウト処理
			
			if (loopCount >= JSCStrConstant.MAX_NEXT_SEQ_COUNT) 
			{
				throw new TimeoutException();
			}
			
			// ---シーケンス取得
			
			// シーケンス取得
			retStr = JCCBatCommon.getNextSeq(commonItem, JSCStrConstant.ORA_SEQ_SRINF_KANRI_NO_EM);
			
			// ゼロ埋め処理
			retStr = JPCUtilCommon.fillZero(retStr, JSCStrConstant.SRINF_KANRI_NO_LEN, false);
			
			// ---存在チェック
			
			// 条件設定
			whereMap = new JBSbatCommonDBInterface();
			whereMap.setValue(JBSbatSC_T_EM_ODR_SRINF.SRINF_KANRI_NO, retStr);
			
			// 検索実行
			resultMap = emOrderObj.selectByPrimaryKeys(whereMap);
			
			// 結果が存在しない場合
			if (null == resultMap)
			{
				break;
			}
			
			// ---検索結果の削除処理
			
			// ステータスチェック
			sodStat = resultMap.getString(JBSbatSC_T_EM_ODR_SRINF.SOD_STAT);
			
			if (!(JSCStrConstant.SOD_STAT_ACK_NORMAL.equals(sodStat)
					|| JSCStrConstant.SOD_STAT_REAPPLIED.equals(sodStat))) 
			{
				loopCount++;
				continue;
			}
			
			// 削除実行
			emOrderObj.deleteByPrimaryKeys(whereMap);
			break;
		}
		return retStr;
	}
}
