/*******************************************************************************
 *	 All Rights reserved,Copyright (c) K-Opticom 
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム構築
 *	モジュール名	：JCRejbCR0101SecProc
 *	ソースファイル名：JCRejbCR0101SecProc.java
 *	作成者			：富士通
 *	日付			：2011年03月14日
 *＜機能概要＞
 *	MYBOX副次処理部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *	ｖ6.00.00	2013/09/25	FJ）伊藤	OM-2013-0002549 現在格納数を集計するよう修正。
 *
 ********************************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateSQLEntity;

import eo.common.constant.JCRStrConst;
import eo.ejb.cbm.entity.CR0011ETMsg;
import eo.ejb.cbm.entity.CR0011LE;
import eo.ejb.cbm.entity.CR0101ETMsg;
import eo.ejb.cbm.entity.CR0101LE;
import eo.ejb.common.JCRModelCommon;

/**
 * MYBOX副次処理部品<p>
 * <BR>
 * @author 富士通
 */
public class JCRejbCR0101SecProc extends TemplateSQLEntity
{

	/**
	 * コンストラクタです。
	 */
	public JCRejbCR0101SecProc()
	{
		super();
	}

	/**
	 * MYBOX現在格納数編集処理です。<br>
	 * <br>
	 * MYBOXの現在格納数をパラメータの増減値に従い計算し、更新する。
	 * 更新に失敗した場合、CAANFinderExceptionをthrowする。
	 * @param inCBSMsg 外部スキーマのメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @param cr0101ETMsg CR0101ETMsgスキーマクラス
	 * @param userID 検索条件となるユーザーID
	 * @param difference 増減値
	 * 
	 * @return MYBOXのETメッセージ(更新用)
	 * @throws CAANException 
	 */
	public CAANMsg calculateMyboxKakunosu(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg cr0101ETMsg, String userID, int difference) throws CAANException
	{
		// MYBOXのETメッセージ(検索用)を生成
		CAANMsg searchMsg = new CAANMsg(CR0101ETMsg.class.getName());

		// 検索条件を設定
		// USER_ID
		searchMsg.set(CR0101ETMsg.USER_ID, userID);
		// 無効フラグ
		searchMsg.set(CR0101ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);

		// MYBOXを検索する
		CAANMsg[] retMsg = new CR0101LE().findByCondition(searchMsg);

		// 検索結果が1件以上の場合、検索結果のMYBOXをETメッセージ(更新用)に移送
		if (retMsg.length == 0)
		{
			// 検索結果が存在しない場合、データ更新がされないという内容のExceptionをthrow
			throw new CAANFinderException("MSG00130", "Data is not updated");
		}

		// 対応記録のETメッセージ(検索用)を生成
		CAANMsg cr0011ETMsg = new CAANMsg(CR0011ETMsg.class.getName());

		// 検索条件を設定
		// 対応ユーザーＩＤ
		cr0011ETMsg.set(CR0011ETMsg.TAIO_USER_ID, userID);
		// 問合せ状態コード
		cr0011ETMsg.set(CR0011ETMsg.TOIAWASE_STAT_CD, JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_OPEN);
		// 無効フラグ
		cr0011ETMsg.set(CR0011ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);

		// 対応記録を検索する
		CAANMsg[] retCR0011ETMsg = new CR0011LE().findByCondition(cr0011ETMsg);

		// MYBOXのETメッセージ(更新用)
		CAANMsg updETMsg = retMsg[0];

		// 更新値システム日付17桁
		String sysDateTimeStamp = JCRModelCommon.getSysDateTimeStamp();

		// 引き継いだ更新項目の値をETメッセージ(更新用)に設定する
		updETMsg.set(CR0101ETMsg.NOW_KAKNO_CNT, String.valueOf(retCR0011ETMsg.length));
		updETMsg.set(CR0101ETMsg.LAST_KAKNO_DTM, sysDateTimeStamp);
		updETMsg.set(CR0101ETMsg.UPD_DTM, sysDateTimeStamp);
		updETMsg.set(CR0101ETMsg.UPD_OPEACNT, cr0101ETMsg.getString(CR0101ETMsg.UPD_OPEACNT));

		// MYBOXを更新する
		update(updETMsg);

		return updETMsg;

	}

	/**
	 * このエンティティのスキーマの内容を取得します。<br>
	 * @return スキーマのContents
	 */
	@Override
	protected Object[][] getSchemaContents()
	{
		return CR0101ETMsg.getSchemaContents();
	}

	/**
	 * このエンティティのスキーマの名を取得します。<br>
	 * @return スキーマ名
	 */
	@Override
	protected String getSchemaName()
	{
		return CR0101ETMsg.class.getName();
	}

	/**
	 * このエンティティの参照するテーブル名を取得します。<br>
	 * @return テーブル名
	 */
	@Override
	protected String getTableName()
	{
		return CR0101ETMsg.getTableName();
	}

}
