/*******************************************************************************
 *	 All Rights reserved,Copyright (c) K-Opticom 
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム構築
 *	モジュール名	：JCRejbCR0101SecProc
 *	ソースファイル名：JCRejbCR0101SecProc.java
 *	作成者			：富士通
 *	日付			：2011年06月04日
 *＜機能概要＞
 *	MYBOX副次処理部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *
 ********************************************************************************/

package eo.ejb.common.db;

import java.util.Arrays;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
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.common.util.JCRSortComparator;
import eo.common.util.JCRUtilCommon;
import eo.ejb.cbm.entity.CR0261ETMsg;
import eo.ejb.cbm.entity.CR0261LE;
import eo.ejb.common.JCRModelCommon;
import eo.ejb.common.edit.JCRejbOracleSeqParts;

/**
 * カテゴリー別問合せモニタワーク登録副次処理部品<p>
 * <BR>
 * @author 富士通
 */
public class JCRejbCR0261SecProc extends TemplateSQLEntity
{
	/**
	 * コンストラクタです。
	 */
	public JCRejbCR0261SecProc()
	{
		super();
	}

	/**
	 * カテゴリー別問合せモニタワーク登録です。<br>
	 * <br>
	 * NGワードが存在した場合、カテゴリー別問合せモニタワークにデータを新規登録する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ(カテゴリー別問合せモニタワーク)
	 * @param inDatasbt データ種別コード
	 * @param inCloseFailCd クローズ不可コード
	 * @throws CAANException 
	 * @throws CAANCreateException 
	 */
	public void addCtgrToiawaseMonitorWork(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg inETMsg
			, String inDatasbt) throws CAANCreateException, CAANException
	{

		// (1) カテゴリー別問合せモニタワークの存在チェックを行う。
		if (isExist(inCBSMsg, inContext, inETMsg, inDatasbt))
		{
			return;
		}

		// (2) カテゴリ別問合せモニタワーク登録処理 (1件)
		addEcr0261(inCBSMsg, inContext, inETMsg, inDatasbt);

	}

	/**
	 * カテゴリー別問合せモニタワークの存在チェック.<br>
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ(カテゴリー別問合せモニタワーク)
	 * @param inDatasbt データ種別コード
	 * @return 存在フラグ（true：処理済みデータ存在、false：処理済みデータ未存在）
	 * @throws CAANException CAANException
	 * @throws CAANCreateException CAANCreateException
	 */
	private boolean isExist(CAANMsg inCBSMsg, AgentDispatchContext inContext,
			CAANMsg inETMsg, String inDatasbt) throws CAANException, CAANCreateException
	{

		// カテゴリー別問合せモニタワークのETメッセージ
		CAANMsg cr0261ETMsg = new CAANMsg(CR0261ETMsg.class.getName());

		// カテゴリー別問合せモニタワークのETメッセージに以下の内容を設定し一覧照会を行う。
		// 対応記録番号
		cr0261ETMsg.set(CR0261ETMsg.TAIO_KIROK_NO, inETMsg.getString(CR0261ETMsg.TAIO_KIROK_NO));
		// 上位連結カテゴリー名
		cr0261ETMsg.set(CR0261ETMsg.JOI_RNKT_CTGR_NM, inETMsg.getString(CR0261ETMsg.JOI_RNKT_CTGR_NM));
		// 業務個別設定組織コード
		cr0261ETMsg.set(CR0261ETMsg.WKKBT_ORG_CD, inETMsg.getString(CR0261ETMsg.WKKBT_ORG_CD));
		// カテゴリーレベル
		cr0261ETMsg.set(CR0261ETMsg.CTGR_LV, inETMsg.getString(CR0261ETMsg.CTGR_LV));
		// カテゴリー名
		cr0261ETMsg.set(CR0261ETMsg.CTGR_NM, inETMsg.getString(CR0261ETMsg.CTGR_NM));
		// データ種別コード
		cr0261ETMsg.set(CR0261ETMsg.DATA_SBT_CD, inDatasbt);

		// カテゴリー別問合せモニタワークを検索する
		// 検索結果
		CAANMsg[] retUserToiawsmntwMsg = new CR0261LE().findByCondition(cr0261ETMsg);

		// 対象データが0件の場合、処理対象とする
		if (retUserToiawsmntwMsg == null || retUserToiawsmntwMsg.length == 0)
		{
			return false;
		}

		// 発生年月日で降順ソート
		Arrays.sort(retUserToiawsmntwMsg, new JCRSortComparator(
				CR0261ETMsg.HASSEI_DTM, JCRSortComparator.SORT_TYPE_DESC));

		// 発生年月日を取得する。
		String hasseiYmd = JCRUtilCommon.formatDate(retUserToiawsmntwMsg[0].getString(
				CR0261ETMsg.HASSEI_DTM), JCRStrConst.FMT_YMDHMS, JCRStrConst.FMT_YMD);

		// ・カテゴリー別問合せモニタワークの「発生年月日時分秒」の発生年月日(yyyymmdd)とパラメータETメッセージ「発生年月日時分秒」の発生年月日(yyyymmdd)が
		//   等しい場合は登録処理を行わず処理を終了する。
		if (JCRModelCommon.getSysDate().compareTo(hasseiYmd) == 0)
		{
			return true;
		}
		
		return false;
		
	}

	/**
	 * カテゴリー別問合せモニタワーク登録処理.<br>
	 * カテゴリー別問合せモニタワークを登録します。
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ(ユーザー別問合せモニタワーク)
	 * @param inDataSbtCd データ種別コード
	 * @throws CAANCreateException CAANCreateException
	 */
	private void addEcr0261(CAANMsg inCBSMsg, AgentDispatchContext inContext,
			CAANMsg inETMsg, String inDataSbtCd) throws CAANCreateException
	{
		// システム日時
		String sysDateTimeStamp = JCRModelCommon.getSysDateTimeStamp();

		CAANMsg addETMsg = new CAANMsg(CR0261ETMsg.class.getName());
		// カテゴリー別問合せモニタワーク番号
		addETMsg.set(CR0261ETMsg.CTGR_TOIAWSMNTW_NO, JCRejbOracleSeqParts.getSeqNo(inCBSMsg, inContext, "SEQ_CTGR_TOIAWSMNTW_NO"
				, "10", "1"));
		// 上位連結カテゴリー名
		addETMsg.set(CR0261ETMsg.JOI_RNKT_CTGR_NM, inETMsg.getString(CR0261ETMsg.JOI_RNKT_CTGR_NM));
		// 業務個別設定組織コード
		addETMsg.set(CR0261ETMsg.WKKBT_ORG_CD, inETMsg.getString(CR0261ETMsg.WKKBT_ORG_CD));
		// カテゴリーレベル
		addETMsg.set(CR0261ETMsg.CTGR_LV, inETMsg.getString(CR0261ETMsg.CTGR_LV));
		// カテゴリー名
		addETMsg.set(CR0261ETMsg.CTGR_NM, inETMsg.getString(CR0261ETMsg.CTGR_NM));
		// 下位カテゴリー有無
		addETMsg.set(CR0261ETMsg.KAI_CTGR_UM, inETMsg.getString(CR0261ETMsg.KAI_CTGR_UM));
		// 対応記録番号
		addETMsg.set(CR0261ETMsg.TAIO_KIROK_NO, inETMsg.getString(CR0261ETMsg.TAIO_KIROK_NO));
		// 発生年月日時分秒
		addETMsg.set(CR0261ETMsg.HASSEI_DTM, JCRModelCommon.getSysDateTime());
		// データ種別コード
		addETMsg.set(CR0261ETMsg.DATA_SBT_CD, inDataSbtCd);
		// データ処理コード
		addETMsg.set(CR0261ETMsg.DATA_TRN_CD, JCRStrConst.DATA_TRN_CD_MISHORI);
		// 登録年月日時分秒
		addETMsg.set(CR0261ETMsg.ADD_DTM, sysDateTimeStamp);
		// 登録オペレータアカウント
		addETMsg.set(CR0261ETMsg.ADD_OPEACNT, inETMsg.getString(CR0261ETMsg.ADD_OPEACNT));
		// 更新年月日時分秒
		addETMsg.set(CR0261ETMsg.UPD_DTM, sysDateTimeStamp);
		// 更新オペレータアカウント
		addETMsg.set(CR0261ETMsg.UPD_OPEACNT, inETMsg.getString(CR0261ETMsg.UPD_OPEACNT));
		// 無効フラグ
		addETMsg.set(CR0261ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);

		create(addETMsg);

	}

    /**
     * このエンティティのスキーマの内容を取得します。<br>
     * 業務レベルで実装します。
     * @return スキーマのContents
     */
	@Override
	protected Object[][] getSchemaContents()
	{
		return CR0261ETMsg.getSchemaContents();
	}

    /**
     * このエンティティのスキーマの名を取得します。<br>
     * 業務レベルで実装します。
     * @return スキーマ名
     */
	@Override
	protected String getSchemaName()
	{
		return CR0261ETMsg.class.getName();
	}

    /**
     * このエンティティの参照するテーブル名を取得します。<br>
     * 業務レベルで実装します。
     * @return テーブル名
     */
	@Override
	protected String getTableName()
	{
		return CR0261ETMsg.getTableName();
	}

}
