/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JDKejbDK0171C100Check
*	ソースファイル名：JDKejbDK0171C100Check.java
*	作成者			：EK909731
*	日付			：2011年08月03日
*＜機能概要＞
*	物流保全完了チェック部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/
package eo.ejb.common.entity;

import java.util.ArrayList;
import java.util.List;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.DK0171ETMsg;
import eo.ejb.cbm.entity.DK0171LE;
import eo.ejb.cbm.entity.DK0351ETMsg;
import eo.ejb.cbm.entity.DK0351LE;

/**
 * <p>
 * 物流保全完了チェック部品クラスです。
 * </p>

 * @author 富士通
 */
public class JDKejbDK0171KRCK 
{

	/** 物流保全番号キー */
	private static final String KEY_BTRYHOZN_NO = "BTRYHOZN_NO";

	/** 物流保存ステータス：受付済み */
	private static final String BTRYHOZN_STAT_UKTK = "001";
	/** 物流保存ステータス：メーカー修理完了済み */
	private static final String BTRYHOZN_STAT_MK_SR_KNR = "003";

	/** 物流保全対応コード：修理受付済み */
	private static final String BTRYHOZN_TAIO_CD_SHURI_UKTK = "01";
	/** 物流保全対応コード：依頼者引渡し済み */
	private static final String BTRYHOZN_TAIO_CD_IRI_HKWTS = "08";
	/** 物流保全対応コード：新品SOD登録済み */
	private static final String BTRYHOZN_TAIO_CD_SNPN_SOD_TRK = "04";

	/** 物流保全対応コード：修理品受取済 */
	private static final String BTRYHOZN_TAIO_CD_SHURI_UKTR = "05";
	/** 物流保全対応コード：機器メーカー修理完了済 */
	private static final String BTRYHOZN_TAIO_CD_MAKER_FIN = "07";


	/**
	 * コンストラクタです。
	 */
	private JDKejbDK0171KRCK()
	{
	}

	/**
	 * <p>
	 * 物流保全ステータスのチェックを行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return チェック結果
	 */
	public static boolean checkBtryhoznStat(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// 物流保全番号を取得
		Object btryhoznNo = inMsg.getObject(KEY_BTRYHOZN_NO);

		if (null == btryhoznNo)
		{
			return false;
		}

		// 物流保全ステータスの取得
		String btryhoznStat = getBtryhoznStat(inMsg, btryhoznNo.toString());

		// 物流保全ステータスが "001" or "003"以外の場合は trueで処理終了
		if (btryhoznStat == null || !(btryhoznStat.equals(BTRYHOZN_STAT_UKTK) || btryhoznStat.equals(BTRYHOZN_STAT_MK_SR_KNR)))
		{
			return true;
		}

		// 物流保全対応記録から物流保全対応コードを取得する
		List<String> btryhoznTaioCdList = new ArrayList<String>();
		if (btryhoznStat.equals(BTRYHOZN_STAT_UKTK))
		{
			btryhoznTaioCdList.add(BTRYHOZN_TAIO_CD_SHURI_UKTK);
			btryhoznTaioCdList.add(BTRYHOZN_TAIO_CD_SNPN_SOD_TRK);
			btryhoznTaioCdList.add(BTRYHOZN_TAIO_CD_SHURI_UKTR);
		}

		if (btryhoznStat.equals(BTRYHOZN_STAT_MK_SR_KNR))
		{
			btryhoznTaioCdList.add(BTRYHOZN_TAIO_CD_MAKER_FIN);
			btryhoznTaioCdList.add(BTRYHOZN_TAIO_CD_IRI_HKWTS);
		}
		String btryhoznTaioCd = getBtryhoznTaioCd(inMsg, btryhoznNo.toString(), btryhoznTaioCdList);

		return (btryhoznTaioCd != null);
	}
	
	/**
	 * 物流保全ステータスを取得します
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param btryhoznNo 物流保全番号
	 * @return 物流保全ステータス
	 */
	private static String getBtryhoznStat(CAANMsg inMsg, String btryhoznNo)
	{

		CAANMsg inETMsg = new CAANMsg(DK0171ETMsg.class.getName());
		inETMsg.set(DK0171ETMsg.BTRYHOZN_NO, btryhoznNo);
		inETMsg.set(DK0171ETMsg.MK_FLG, "0");
		
		CAANMsg[] ret0171 = null;

		try
		{
			DK0171LE le = new DK0171LE();
			ret0171 = le.findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		if (ret0171.length == 0) 
		{
			return null;
		}
		else 
		{
			return ret0171[0].getString(DK0171ETMsg.BTRYHOZN_STAT);
		}
	}

	/**
	 * 物流保全対応コードを取得します
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param btryhoznNo 物流保全番号
	 * @param btryhoznTaioCdList 物流保全対応コード
	 * @return 物流保全対応コード
	 */
	private static String getBtryhoznTaioCd(CAANMsg inMsg, String btryhoznNo, List<String> btryhoznTaioCdList)
	{

		CAANMsg inETMsg = new CAANMsg(DK0351ETMsg.class.getName());
		inETMsg.set(DK0351ETMsg.BTRYHOZN_NO, btryhoznNo);
		inETMsg.set(DK0351ETMsg.MK_FLG, "0");

		CAANMsg[] ret0351 = null;

		try
		{
			DK0351LE le = new DK0351LE();
			ret0351 = le.findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		if (ret0351.length == 0) 
		{
			return null;
		}

		String  btryhoznTaioCd = null;
		for (int i = 0; i < ret0351.length; i++)
		{
			btryhoznTaioCd = ret0351[i].getString(DK0351ETMsg.BTRYHOZN_TAIO_CD);
			for (String buff : btryhoznTaioCdList) 
			{
				if (buff.equals(btryhoznTaioCd))
				{
					return buff;
				}
			}
			
		}

		return null;
	}


}
