/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0671C070KRCK
*   ソースファイル名：JEKK0671C070KRCK.java
*	作成者			：富士通
*	日付			：2014年10月02日
*＜機能概要＞
*   はぴeポイント契約内容補正の関連制約部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
	ｖ11.00.00  2014/10/02  FJ）寺園    ANK-2306-11-00
	ｖ11.00.01  2014/10/27  FJ）寺園    IT1-2014-0000349
*
**********************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.CK0011ETMsg;
import eo.ejb.cbm.entity.CK0011LE;
import eo.ejb.cbs.cbsmsg.EKK0671C070CBSMsg;

/**
 * <p>
 * はぴeポイント契約内容補正の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0671C070KRCK
{

	/** 関連チェックエラーフラグ&エラー返却項目(はぴeポイント契約審査依頼時指定ID存在チェック) */
	private static final String[] KRCK_HAPIEK_JDG_REQ_JI_STI_ID_EXISTS_ERR = {"WA", EKK0671C070CBSMsg.HAPIEK_JDG_REQ_JI_STI_ID_ERR};

	/** 機能コード（2：チェックのみ） */
	private static final String FUNC_CODE_CHK_ONLY = "2";
	
	/**
	 * <p>
	 * 新しいJEKK0671C070KRCKを作成します。
	 * </p>
	 */
	public JEKK0671C070KRCK()
	{
	}

	/**
	 * <p>
	 * はぴeポイント契約内容補正の関連制約チェックを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// はぴeポイント契約審査依頼時指定ID
		String hapiekJdgReqJiStiId = inCBSMsg.getString(EKK0671C070CBSMsg.HAPIEK_JDG_REQ_JI_STI_ID);

		// 機能コードが"2"(チェックのみ)の場合、以下のチェックを行う
		if (FUNC_CODE_CHK_ONLY.equals(inCBSMsg.getObject(EKK0671C070CBSMsg.FUNC_CODE).toString()) &&
				!inCBSMsg.isNull(EKK0671C070CBSMsg.HAPIEK_JDG_REQ_JI_STI_ID))
		{
			// はぴeポイント契約審査依頼時指定ID存在チェック
			if (!isCustExistsNonGene(hapiekJdgReqJiStiId))
			{
				// お客様に存在しない場合、サービス契約を検索
				JKKejbKK0081KRCK kk0081KRCK = new JKKejbKK0081KRCK();
				//存在しない場合
				if (!kk0081KRCK.isExistsNonGene(hapiekJdgReqJiStiId))
				{
					setErrInfo(inCBSMsg, StatusCodes.WARNING, KRCK_HAPIEK_JDG_REQ_JI_STI_ID_EXISTS_ERR);
					return;
				}
			}
		}
		
	}

/* ++++++++++ v11.00.01 【IT1-2014-0000349 】add start ++++++++++ */
	/**
	 * <p>
	 * EOIDでお客様の存在チェックを行います。（世代登録年月日時分秒を除く有効なレコード）
	 * </p>
	 * @param eoid EOID
	 * @return レコードが存在する場合はtrue。存在しない場合はfalse。
	 */
	public boolean isCustExistsNonGene(String eoid)
	{
		// ETメッセージ
		if (!isCustExistsNonGene1(eoid))
		{
			// お客様にEOIDで存在しない場合、初期EOIDで再検索
			if (!isCustExistsNonGene2(eoid))
			{
				//存在しない場合
				return false;
			}
		}
		//存在する場合
		return true;
	}
/* ++++++++++ v11.00.01 【IT1-2014-0000349 】add end ++++++++++ */

	/**
	 * <p>
	 * EOIDでお客様の存在チェックを行います。（世代登録年月日時分秒を除く有効なレコード）
	 * </p>
	 * @param eoid EOID
	 * @return レコードが存在する場合はtrue。存在しない場合はfalse。
	 */
/* ++++++++++ v11.00.01 【IT1-2014-0000349 】mod start ++++++++++ */
//	public boolean isCustExistsNonGene(String eoid)
	public boolean isCustExistsNonGene1(String eoid)
/* ++++++++++ v11.00.01 【IT1-2014-0000349 】mod end ++++++++++ */
	{
		// ETメッセージ
		CAANMsg msg = new CAANMsg(CK0011ETMsg.class.getName());
		msg.set(CK0011ETMsg.EOID, eoid);
		msg.set(CK0011ETMsg.MK_FLG, "0");

		// ロジカルエンティティ生成
		CK0011LE le = new CK0011LE();

		try
		{
			CAANMsg[] rsltList = le.findByCondition(msg);

			//存在しない場合
			if (rsltList.length == 0)
			{
				return false;
			}

			//存在する場合
			return true;
		}
		catch (CAANException ex)
		{
			throw new CAANRuntimeException(ex);
		}
	}

/* ++++++++++ v11.00.01 【IT1-2014-0000349 】add start ++++++++++ */
	/**
	 * <p>
	 * 初期EOIDでお客様の存在チェックを行います。（世代登録年月日時分秒を除く有効なレコード）
	 * </p>
	 * @param shkEoid 初期EOID
	 * @return レコードが存在する場合はtrue。存在しない場合はfalse。
	 */
	public boolean isCustExistsNonGene2(String shkEoid)
	{
		// ETメッセージ
		CAANMsg msg = new CAANMsg(CK0011ETMsg.class.getName());
		msg.set(CK0011ETMsg.SHK_EOID, shkEoid);
		msg.set(CK0011ETMsg.MK_FLG, "0");

		// ロジカルエンティティ生成
		CK0011LE le = new CK0011LE();

		try
		{
			CAANMsg[] rsltList = le.findByCondition(msg);

			//存在しない場合
			if (rsltList.length == 0)
			{
				return false;
			}

			//存在する場合
			return true;
		}
		catch (CAANException ex)
		{
			throw new CAANRuntimeException(ex);
		}
	}
/* ++++++++++ v11.00.01 【IT1-2014-0000349 】add end ++++++++++ */
	
	/**
	 * <p>
	 * エラー返却項目にエラーフラグを設定します。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param status エラー時のステータス
	 * @param errInfo[] エラー情報が設定された配列 [0]:エラーフラグ [1]:エラー返却項目
	 */
	private void setErrInfo(CAANMsg inCBSMsg, int status, String[] errInfo)
	{
		inCBSMsg.set(JCMConstants.STATUS_INT_KEY, status);
		inCBSMsg.set(errInfo[1], errInfo[0]);
		return;
	}
}

