/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKUejbNumberParts
*	ソースファイル名：JKUejbNumberParts.java
*	作成者			：富士通
*	日付			：2011年03月14日
*＜機能概要＞
*	工事受付採番部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/03/14	富士通		新規作成
*	v4.00.00	2012/06/13	FJ)日根		【ANK-0397-00-00】申込書番号の発番検討における対応について
*	v5.00.00	2013/09/14	FJ)高橋		【OM-2013-0002082】
*
**********************************************************************/

package eo.ejb.common.edit;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbSucceedDataAccess;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JKUStrConst;
import eo.common.util.JKUKojiakNoNP;
import eo.ejb.cbm.entity.KK2601ETMsg;
import eo.ejb.cbm.entity.KK2601LE;
import eo.ejb.cbm.entity.KU0011ETMsg;
import eo.ejb.common.JPCModelCommon;
import eo.ejb.common.entity.JPCejbEntityChecker;

/**
 * <p>
 * 工事受付採番部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKUejbNumberParts extends JKUejbNumberPartsBase
{

	/** 引継データアクセスキー(工事案件番号) */
	private static final String KEY_KOJIAK_NO = "KOJIAK_NO";
	
	/** 工事案件番号の採番に使用するSIFメッセージキャリアの項目定数 */
	private static final String MKMSDTL_NO = "mkmsdtl_no";

	/**
	 * コンストラクタです。
	 */
	private JKUejbNumberParts()
	{
	}

	/**
	 * <p>
	 * 工事案件番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 採番された工事案件番号
	 * @throws CAANException 
	 */
	public static String getKojiakNo(CAANMsg inMsg, AgentDispatchContext inContext) throws CAANException
	{
		// 申込書明細番号を取得する
		String mkmsDtlNo = inMsg.getString(MKMSDTL_NO);
		
		return getKojiakNoString(mkmsDtlNo, inMsg);
	}
	
	/**
	 * 工事案件番号の採番を行います。
	 * @param mkmsDtlNo		採番に使用する申込書明細番号
	 * @param inCBSMsg		CBSメッセージ
	 * @return	採番された工事案件番号
	 * @throws CAANException 
	 */
	public static String getKojiakNoString(String mkmsDtlNo, CAANMsg inCBSMsg) throws CAANException
	{
		// 引継データの取得
		String value = (String)JSYejbSucceedDataAccess.getSucceedData(KEY_KOJIAK_NO);

		if (value != null)
		{
			// 引継データが設定されている場合はまま返却
			return value;
		}
		
		// 採番処理
		boolean isExists = true;

		// 工事案件番号
		CAANMsg tmpCAANMsg = new CAANMsg(KU0011ETMsg.class.getName());
		CAANMsg tmpCAANMsgKK2601 = new CAANMsg(KK2601ETMsg.class.getName());
		JPCejbEntityChecker instanceKojiak = new JPCejbEntityChecker(KU0011ETMsg.class.getName());
		JKUKojiakNoNP kojiakNoNP = new JKUKojiakNoNP();
		
		// 工事案件番号検索
		// 初回は申込書番号を用いて検索を行う
		String kojiakNo = mkmsDtlNo;
		while (isExists)
		{
			// 工事案件番号検索
			tmpCAANMsg.set("KOJIAK_NO", kojiakNo);
			tmpCAANMsgKK2601.set(KK2601ETMsg.KOJIAK_NO, kojiakNo);
			tmpCAANMsgKK2601.set(KK2601ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
			isExists = instanceKojiak.isExistingPrimaryKey(tmpCAANMsg, KU0011ETMsg.class.getName());
			CAANMsg[] outETMsg = new KK2601LE().findByCondition(tmpCAANMsgKK2601);
			if (!isExists && outETMsg.length == 0)
			{
				// 存在していない場合は、その工事案件番号を採用する
				value = kojiakNo;
				break;
			}
			else
			{
				isExists = true;
			}
			// 存在している場合は、工事案件番号採番部品を呼び出し次候補の工事案件番号を取得する
			kojiakNo = kojiakNoNP.getKojiakNo(mkmsDtlNo, kojiakNo);
		}
		
		// 引継データの設定
		JSYejbSucceedDataAccess.setSucceedData(KEY_KOJIAK_NO, value);

		return value;
	}
	
	/**
	 * <p>
	 * 先行設計番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 採番された先行設計番号
	 */
	public static String getSnkskiNo(CAANMsg inMsg)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_SNKSKI_NO, "", 12);
	}

	/**
	 * <p>
	 * 設定工事番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 採番された設定工事番号
	 */
	public static String getSetteKojiNo(CAANMsg inMsg)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_SETTE_KOJI_NO, "", 12);
		
	}

	/**
	 * <p>
	 * 工事案件対象宅内機器番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 採番された工事案件対象宅内機器番号
	 */
	public static String getKojiakTrgtTaknkikiNo(CAANMsg inMsg)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_KOJIAK_TRGT_TAKNKIKI_NO, "", 12);
		
	}

	/**
	 * <p>
	 * OLT設定変更番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 採番されたOLT設定変更番号
	 */
	public static String getOltSetChgeNo(CAANMsg inMsg)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_OLT_SET_CHGE_NO, "", 9);
		
	}

	/**
	 * <p>
	 * イーサネット帯域変更番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 採番されたイーサネット帯域変更番号
	 */
	public static String getEnetTikChgNo(CAANMsg inMsg)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_ENET_TIK_CHG_NO, "", 9);
		
	}

	/**
	 * <p>
	 * 工事関連受信情報番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 採番された工事関連受信情報番号
	 */
	public static String getKojiKnrnRcvInfoNo(CAANMsg inMsg)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_KOJI_KNRN_RCV_INFO_NO, "", 12);
		
	}

	/**
	 * <p>
	 * 工事会社配送依頼ワーク番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @return 採番された工事関連受信情報番号
	 */
	public static String getKochaiReqWkNo(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}
		
		// 採番処理
		return JPCModelCommon.getFormatedNextSeq(JKUStrConst.SEQ_KOCHAI_REQ_WK_NO, "", 12);
		
	}
	
}
