/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK0241SecProc
*	ソースファイル名：JKKejbKK0241SecProc.java
*	作成者			：富士通
*	日付			：2013年1月16日
*＜機能概要＞
*	回線対象サービス契約に対する副次処理を行う部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/01/16	FJ)坂本		新規作成
*
**********************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANFinderException;
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.KK0241ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKejbBusinessException;

/**
 * <p>
 *	回線対象サービス契約に対する副次処理を行う部品です。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0241SecProc extends JKKejbKK0241DBABase
{
	/** 日付：最大値 */
	private static final String DATE_MAX = "20991231";

	/** インターフェースID_EKK0081C160：(サービス契約キャンセル) */
	private static final String IFID_EKK0081C160 = "EKK0081C160";

	/** インターフェースID_EKK0081C200：(サービス契約回復) */
	private static final String IFID_EKK0081C200 = "EKK0081C200";

	/** インターフェースID_EKK0081C210：(休止中サービス契約回復) */
	private static final String IFID_EKK0081C210 = "EKK0081C210";

	/** インターフェースID_EKK0081C220：(照査前サービス契約キャンセル取消) */
	private static final String IFID_EKK0081C220 = "EKK0081C220";

	/** インターフェースID_EKK0081C230：(照査後サービス契約キャンセル取消) */
	private static final String IFID_EKK0081C230 = "EKK0081C230";

	/** インターフェースID_EKK0081C240：(サービス契約解約取消) */
	private static final String IFID_EKK0081C240 = "EKK0081C240";

	/** インターフェースID_EKK0081C260：(サービス契約解約確定) */
	private static final String IFID_EKK0081C260 = "EKK0081C260";

	/** インターフェースID_EKK0081C270：(サービス契約解約確定取消) */
	private static final String IFID_EKK0081C270 = "EKK0081C270";

	/** 検索パターン：1 */
	private static final String SEARCHPTN_1 = "1";

	/** 検索パターン：2 */
	private static final String SEARCHPTN_2 = "2";

	/**
	 * 回線内訳使用終了年月日更新処理
	 * <p>
	 * 回線内訳使用終了年月日を更新します。
	 * </p>
	 * @param inMsg メッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param svcKeiNo サービス契約番号
	 * @param inputYmd 入力年月日
	 *                 （呼出元インターフェースIDが"EKK0081C160"の場合、入力．サービスキャンセル年月日、
	 *                 呼出元インターフェースIDが"EKK0081C260"の場合、入力．サービス解約年月日を設定する）
	 */
	public void updateKaisenUcwkUseEndymd(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo, String inputYmd)
	{
		// 呼出元インターフェースIDの取得
		String templateID = inMsg.getString(JCMConstants.TEMPLATE_ID_KEY);

		// サービス契約キャンセル、サービス契約解約確定から呼び出された場合
		if (IFID_EKK0081C160.equals(templateID) || IFID_EKK0081C260.equals(templateID))
		{
			updateKaisenUcwkUseEndymdInputDate(inMsg, inContext, svcKeiNo, inputYmd);
		}
		// サービス契約回復、休止中サービス契約回復、照査前サービス契約キャンセル取消、
		// 照査後サービス契約キャンセル取消、サービス契約解約取消、サービス契約解約確定取消から呼び出された場合
		else if (IFID_EKK0081C200.equals(templateID) || IFID_EKK0081C210.equals(templateID) || IFID_EKK0081C220.equals(templateID)
				|| IFID_EKK0081C230.equals(templateID) || IFID_EKK0081C240.equals(templateID) || IFID_EKK0081C270.equals(templateID))
		{
			updateKaisenUcwkUseEndymdDateMax(inMsg, inContext, svcKeiNo);
		}
	}

	/**
	 * <p>
	 * 回線内訳使用終了年月日をパラメータ一覧の"入力年月日"で更新します
	 * </p>
	 * @param inMsg メッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param svcKeiNo サービス契約番号
	 * @param inputYmd 入力年月日
	 */
	private void updateKaisenUcwkUseEndymdInputDate(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo, String inputYmd)
	{
		// パラメータ一覧の"サービス契約番号"または"入力年月日"がnullの場合、例外エラーを発行する。
		if (null == svcKeiNo)
		{
			throw new JKKejbBusinessException("サービス契約番号が設定されていません。");
		}
		if (null == inputYmd)
		{
			throw new JKKejbBusinessException("入力年月日が設定されていません。");
		}

		// サービス契約番号に紐づく回線対象サービス契約明細を取得します。
		CAANMsg[] outList = getKK0241bySvcKei(inContext, svcKeiNo, JKKModelCommon.getOpeDate(inMsg), SEARCHPTN_1);

		// 回線対象サービス契約明細が取得できない場合、処理を終了する
		if (null == outList || outList.length == 0)
		{
			return;
		}

		// 回線対象サービス契約明細の数だけ繰り返す
		for (int i = 0; i < outList.length; i++)
		{
			CAANMsg updRec = outList[i];

			updRec.set(KK0241ETMsg.KAISEN_UCWK_USE_ENDYMD, inputYmd);
			updRec.set(KK0241ETMsg.UPD_DTM, inMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
			updRec.set(KK0241ETMsg.UPD_OPEACNT, inMsg.getString(JCMConstants.OPERATOR_ID_KEY));

			try
			{
				super.update(updRec);
			}
			catch (CAANFinderException ce)
			{
				throw new CAANRuntimeException();
			}
		}
	}

	/**
	 * <p>
	 * 回線内訳使用終了年月日をシステム日付のMAX値("20991231")で更新します
	 * </p>
	 * @param inMsg メッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param svcKeiNo サービス契約番号
	 */
	private void updateKaisenUcwkUseEndymdDateMax(CAANMsg inMsg, AgentDispatchContext inContext, String svcKeiNo)
	{
		// パラメータ一覧の"サービス契約番号"がnullの場合、例外エラーを発行する。
		if (null == svcKeiNo)
		{
			throw new JKKejbBusinessException("サービス契約番号が設定されていません。");
		}

		// サービス契約番号に紐づく回線対象サービス契約明細を取得します。
		CAANMsg[] outList = getKK0241bySvcKei(inContext, svcKeiNo, JKKModelCommon.getOpeDate(inMsg), SEARCHPTN_2);

		// 回線対象サービス契約明細が取得できない場合、処理を終了する
		if (null == outList || outList.length == 0)
		{
			return;
		}

		// 回線対象サービス契約明細の数だけ繰り返す
		for (int i = 0; i < outList.length; i++)
		{
			CAANMsg updRec = outList[i];

			updRec.set(KK0241ETMsg.KAISEN_UCWK_USE_ENDYMD, DATE_MAX);
			updRec.set(KK0241ETMsg.UPD_DTM, inMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
			updRec.set(KK0241ETMsg.UPD_OPEACNT, inMsg.getString(JCMConstants.OPERATOR_ID_KEY));

			try
			{
				super.update(updRec);
			}
			catch (CAANFinderException ce)
			{
				throw new CAANRuntimeException();
			}
		}
	}
}
