/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKUbatSeqNoGenerator
*	ソースファイル名：JKUbatSeqNoGenerator.java
*	作成者			：富士通
*	日付			：2014年01月23日
*＜機能概要＞
*	シーケンス採番部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v7.00.00	2014/01/23	FJ			新規作成
*
**********************************************************************/
package eo.business.common;

import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;

import eo.business.util.table.JBSbatKU_T_OLT_SETE_CHG;
import eo.business.util.table.JBSbatKU_T_ENET_TIK_CHG;
import eo.common.constant.JKUStrConst;
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 JKUbatSeqNoGenerator
{
	
	/** SQL定義キー(KU_SELECT_005)*/
	private static final String KU_T_OLT_SETE_CHG_KU_SELECT_005 = "KU_SELECT_005";
	
	/** SQL定義キー(KU_SELECT_004)*/
	private static final String KU_T_ENET_TIK_CHG_KU_SELECT_004 = "KU_SELECT_004";
	/**
	 * OLT設定変更番号採番
	 * @param commonItem	バッチ共通パラメータ電文
	 * @param oltSeteChgObj	テーブルアクセスクラス(OLT設定変更)
	 * @return	採番されたOLT設定変更番号
	 * @throws Exception
	 */
	public static String getOltSeteChgNo(JBSbatCommonItem commonItem, JBSbatSQLAccess oltSeteChgObj) throws Exception
	{
		
		int loopCount = 0;
		String retStr = null;
		JBSbatCommonDBInterface whereMap = null;
		JBSbatCommonDBInterface resultMap = null;
		String setRsltCd = null;
		String mkFlg = null;
		
		while (true)
		{
			// ---タイムアウト処理
			
			if (loopCount >= JKUStrConst.MAX_NEXT_SEQ_COUNT) 
			{
				throw new TimeoutException();
			}
			
			// ---シーケンス取得
			
			// シーケンス取得
			retStr = JCCBatCommon.getNextSeq(commonItem, JKUStrConst.SEQ_OLT_SET_CHGE_NO);
			
			// ゼロ埋め処理
			retStr = JPCUtilCommon.fillZero(retStr, JKUStrConst.OLT_SET_CHGE_NO_LEN, false);
			
			// ---存在チェック
			
			// 条件設定
			whereMap = new JBSbatCommonDBInterface();
			whereMap.setValue(retStr.toString());
			
			// 検索実行
			oltSeteChgObj.selectBySqlDefine(whereMap, KU_T_OLT_SETE_CHG_KU_SELECT_005);
			resultMap = oltSeteChgObj.selectNext();
			
			// 結果が存在しない場合、処理を抜ける
			if (null == resultMap)
			{
				break;
			}
			
			// ---削除判定
			
			setRsltCd = resultMap.getString(JBSbatKU_T_OLT_SETE_CHG.SETTE_RSLT_CD);
			mkFlg = resultMap.getString(JBSbatKU_T_OLT_SETE_CHG.MK_FLG);
			
			// 存在した結果の無効フラグが無効の場合、削除
			if (JKUStrConst.MK_FLG_MUKO.equals(mkFlg))
			{
				whereMap.setValue(JBSbatKU_T_OLT_SETE_CHG.OLT_SET_CHGE_NO, retStr);
				oltSeteChgObj.deleteByPrimaryKeys(whereMap);
				break;
			}
			
			// 存在した結果の設定結果コードがOKの場合、削除
			if (JKUStrConst.CD01130_SET_FIN.equals(setRsltCd))
			{
				whereMap.setValue(JBSbatKU_T_OLT_SETE_CHG.OLT_SET_CHGE_NO, retStr);
				oltSeteChgObj.deleteByPrimaryKeys(whereMap);
				break;
			}
			else
			{
				loopCount++;
				continue;
			}
		}
		return retStr;
	}
	
	/**
	 * イーサネット帯域変更番号採番
	 * @param commonItem	バッチ共通パラメータ電文
	 * @param enetTikChgNoObj	テーブルアクセスクラス(イーサネット帯域変更)
	 * @return	採番されたイーサネット帯域変更番号
	 * @throws Exception
	 */
	public static String getEnetTikChgNo(JBSbatCommonItem commonItem, JBSbatSQLAccess enetTikChgObj) throws Exception
	{
		
		int loopCount = 0;
		String retStr = null;
		JBSbatCommonDBInterface whereMap = null;
		JBSbatCommonDBInterface resultMap = null;
		String setRsltCd = null;
		String mkFlg = null;
		
		while (true)
		{
			// ---タイムアウト処理
			
			if (loopCount >= JKUStrConst.MAX_NEXT_SEQ_COUNT) 
			{
				throw new TimeoutException();
			}
			
			// ---シーケンス取得
			
			// シーケンス取得
			retStr = JCCBatCommon.getNextSeq(commonItem, JKUStrConst.SEQ_ENET_TIK_CHG_NO);
			
			// ゼロ埋め処理
			retStr = JPCUtilCommon.fillZero(retStr, JKUStrConst.ENET_TIK_CHG_NO_LEN, false);
			
			// ---存在チェック
			
			// 条件設定
			whereMap = new JBSbatCommonDBInterface();
			whereMap.setValue(retStr.toString());
			
			// 検索実行
			enetTikChgObj.selectBySqlDefine(whereMap, KU_T_ENET_TIK_CHG_KU_SELECT_004); 
			resultMap = enetTikChgObj.selectNext();
			
			// 結果が存在しない場合、処理を抜ける
			if (null == resultMap)
			{
				break;
			}
			
			// ---削除判定
			
			setRsltCd = resultMap.getString(JBSbatKU_T_ENET_TIK_CHG.SETTE_RSLT_CD);
			mkFlg = resultMap.getString(JBSbatKU_T_ENET_TIK_CHG.MK_FLG);
			
			// 存在した結果の無効フラグが無効の場合、削除
			if (JKUStrConst.MK_FLG_MUKO.equals(mkFlg))
			{
				whereMap.setValue(JBSbatKU_T_ENET_TIK_CHG.ENET_TIK_CHG_NO, retStr);
				enetTikChgObj.deleteByPrimaryKeys(whereMap);
				break;
			}
			
			// 存在した結果の設定結果コードがOKまたは無効フラグが無効の場合、削除
			if (JKUStrConst.CD01130_SET_FIN.equals(setRsltCd))
			{
				whereMap.setValue(JBSbatKU_T_ENET_TIK_CHG.ENET_TIK_CHG_NO, retStr);
				enetTikChgObj.deleteByPrimaryKeys(whereMap);
				break;
			}
			else
			{
				loopCount++;
				continue;
			}
		}
		return retStr;
	}
}
