/*******************************************************************************
 *	 All Rights reserved,Copyright (c) K-Opticom 
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム構築
 *	モジュール名	：JCRejbCR0101SecProc
 *	ソースファイル名：JCRejbCR0101SecProc.java
 *	作成者			：富士通
 *	日付			：2011年06月04日
 *＜機能概要＞
 *	MYBOX副次処理部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00	2011/08/06	FJ			新規作成
 *	ｖ5.00.00	2013/06/27	FJ)伊藤		ANK-1555-00-00_コールバック履歴化対応について
 * ｖ54.00.00    2021/08/15	FJ)星野     ANK-4092-00-00 CX戦略WG方針対応
 ********************************************************************************/

package eo.ejb.common.db;

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.ejb.cbm.entity.CR0011ETMsg;
import eo.ejb.cbm.entity.CR0011LE;
import eo.ejb.cbm.entity.CR0021ETMsg;
import eo.ejb.cbm.entity.CR0021LE;
import eo.ejb.common.JCRModelCommon;
import eo.ejb.common.edit.JCRejbEditTaioKirokHistory;

/**
 * 対応記録副次処理部品<p>
 * <BR>
 * @author 富士通
 */
public class JCRejbCR0011SecProc extends TemplateSQLEntity
{
	/**
	 * コンストラクタです。
	 */
	public JCRejbCR0011SecProc()
	{
		super();
	}

	/**
	 * 一時保存有無更新処理。<br>
	 * <br>
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @throws CAANException 
	 */
	public void updateTmpSaveUm(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg inETMsg) throws CAANException
	{
	
		// (1) 対応記録明細の編集中状態のデータ有無の存在チェックを行う。
		//・ CBSメッセージ.対応記録明細番号と等しいデータのみ存在する場合、処理を終了する。
		if (!isTargetTaiokrkDtl(inETMsg.getString(CR0021ETMsg.TAIO_KIROK_NO), inETMsg.getString(CR0021ETMsg.TAIO_KIROK_DTL_NO)))
		{
			return;
		}
	
		// (2) 対応記録データの取得を行う。
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0011ETMsg.TAIO_KIROK_NO));
		cr0011ETMsg.set(CR0011ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);

		// (3) 対応記録の内容変更を行う。
		// 対応記録のETメッセージ(更新用)に以下の内容を設定する。
		// 一時保存有無
		cr0011ETMsg.set(CR0011ETMsg.TMP_SAVE_UM, JCRStrConst.TEMP_SAVE_ON);
		// 更新年月日時分秒
		cr0011ETMsg.set(CR0011ETMsg.UPD_DTM, JCRModelCommon.getSysDateTimeStamp());
		// 更新オペレータアカウント
		cr0011ETMsg.set(CR0011ETMsg.UPD_OPEACNT, inETMsg.getString(CR0021ETMsg.UPD_OPEACNT));
	
		update(cr0011ETMsg);
	
	}

	/**
	 * 一時保存有無更新処理。<br>
	 * <br>
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @param closeFailCd クローズ不可コード
	 * @throws CAANException 
	 */
	public void updateCloseFailCd(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg inETMsg, String closeFailCd) throws CAANException
	{

		// (1) 対応記録データの取得を行う。
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0011ETMsg.TAIO_KIROK_NO));
		cr0011ETMsg.set(CR0011ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);

		// (2) 対応記録の内容変更を行う。
		// 対応記録のETメッセージ(更新用)に以下の内容を設定する。
		// クローズ不可コード
		cr0011ETMsg.set(CR0011ETMsg.CLOSE_FAIL_CD, closeFailCd);
	
		update(cr0011ETMsg);
	
	}

	/**
	 * 新規作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ(対応記録)
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param callbkDtmOutputFlg コールバック日時出力フラグ
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokCreate(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg inETMsg
			, String wkkbtOrgNm, String userNm, String callbkDtmOutputFlg) throws CAANException
	{

		// (1) 対応記録を取得する
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0011ETMsg.TAIO_KIROK_NO));
		
		// (2) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, JCRejbEditTaioKirokHistory.getTaioKirokHistoryCreate(
				inCBSMsg, inContext, inETMsg, cr0011ETMsg, wkkbtOrgNm, userNm, callbkDtmOutputFlg));

		// (3) 対応記録の更新を行う。
		update(cr0011ETMsg);

	}

	/**
	 * コール作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param userNm ログインユーザー名
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokCall(CAANMsg inCBSMsg, AgentDispatchContext inContext
			, CAANMsg inETMsg, String wkkbtOrgNm, String userNm) throws CAANException
	{

		// (1) 対応記録を取得する
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0021ETMsg.TAIO_KIROK_NO));

		// (2) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, JCRejbEditTaioKirokHistory.getTaioKirokHistoryCall(
				inCBSMsg, inContext, cr0011ETMsg, inETMsg, wkkbtOrgNm, userNm));

		// (3) 対応記録の更新を行う。
		update(cr0011ETMsg);

	}

	/**
	 * メモ登録作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param userNm ログインユーザー名
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokMemo(CAANMsg inCBSMsg, AgentDispatchContext inContext
			, CAANMsg inETMsg, String wkkbtOrgNm, String userNm) throws CAANException
	{

		// (1) 対応記録を取得する
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0021ETMsg.TAIO_KIROK_NO));

		// (2) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, JCRejbEditTaioKirokHistory.getTaioKirokHistoryMemo(
				inCBSMsg, inContext, inETMsg, wkkbtOrgNm, userNm));

		// (3) 対応記録の更新を行う。
		update(cr0011ETMsg);

	}

	/**
	 * メール返信作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param userNm ログインユーザー名
	 * @param fileBunshoFileList 対応履歴文書ファイルリスト
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokMailReply(CAANMsg inCBSMsg, AgentDispatchContext inContext
			, CAANMsg inETMsg, String wkkbtOrgNm, String userNm, String[] fileBunshoFileList) throws CAANException
	{

		// (1) 対応記録を取得する
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0021ETMsg.TAIO_KIROK_NO));

		// (2) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, JCRejbEditTaioKirokHistory.getTaioKirokHistoryMailReply(
				inCBSMsg, inContext, inETMsg, wkkbtOrgNm, userNm, fileBunshoFileList));

		// (3) 対応記録の更新を行う。
		update(cr0011ETMsg);

	}

// ANK-4092-00-00対応 20210815 星野 ADD START
	/**
	 * SMS送信作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param userNm ログインユーザー名
	 * @param fileBunshoFileList 対応履歴文書ファイルリスト
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokSmsSend(CAANMsg inCBSMsg, AgentDispatchContext inContext
			, CAANMsg inETMsg) throws CAANException
	{

		// (1) 対応記録を取得する
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0021ETMsg.TAIO_KIROK_NO));

		// (2) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, JCRejbEditTaioKirokHistory.getTaioKirokHistorySmsSend(
				inCBSMsg, inContext, inETMsg));

		// (3) 対応記録の更新を行う。
		update(cr0011ETMsg);

	}
// ANK-4092-00-00対応 20210815 星野 ADD END

	/**
	 * メール転送作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param inETMsg ETメッセージ
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param userNm ログインユーザー名
	 * @param fileBunshoFileList 対応履歴文書ファイルリスト
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokMailForward(CAANMsg inCBSMsg, AgentDispatchContext inContext
			, CAANMsg inETMsg, String wkkbtOrgNm, String userNm, String[] fileBunshoFileList) throws CAANException
	{

		// (1) 対応記録を取得する
		CAANMsg cr0011ETMsg = getTaioKirok(inETMsg.getString(CR0021ETMsg.TAIO_KIROK_NO));

		// (2) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, JCRejbEditTaioKirokHistory.getTaioKirokHistoryMailForward(
				inCBSMsg, inContext, inETMsg, wkkbtOrgNm, userNm, fileBunshoFileList));

		// (3) 対応記録の更新を行う。
		update(cr0011ETMsg);

	}

	/**
	 * コール作成用対応履歴編集処理です。<br>
	 * <br>
	 * 対応記録の対応記録履歴を更新する。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 * @param cr0011ETMsg 対応記録
	 * @param wkkbtOrgNm 業務個別設定組織名
	 * @param userNm ログインユーザー名
	 * @throws CAANException CAANException
	 */
	public void updTaioKirokUpdCall(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg cr0011ETMsg,
			String wkkbtOrgNm, String userNm) throws CAANException
	{

		// (1) 対応記録履歴を設定
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_RIREKI, 
				JCRejbEditTaioKirokHistory.getTaioKirokHistoryUpdCall(inCBSMsg, inContext, cr0011ETMsg, wkkbtOrgNm, userNm));

		// (2) 対応記録の更新を行う
		update(cr0011ETMsg);

	}

	/**
	 * 対応記録取得処理.<br>
	 * 
	 * @param taioKirokNo 対応記録番号
	 * @return 対応記録
	 * @throws CAANException CAANException
	 */
	private CAANMsg getTaioKirok(String taioKirokNo) throws CAANException
	{

		// (1) 対応記録を取得する。
		// 対応記録のETメッセージ
		CAANMsg cr0011ETMsg = new CAANMsg(CR0011ETMsg.class.getName());
		
		// 対応記録番号
		cr0011ETMsg.set(CR0011ETMsg.TAIO_KIROK_NO, taioKirokNo);
		// 無効フラグ
		cr0011ETMsg.set(CR0011ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);

		// 対応記録を検索する
		return new CR0011LE().findByPrimaryKeyE(cr0011ETMsg);

	}

	/**
	 * 一時保存有無更新対象判定処理.<br>
	 * 
	 * @param taioKirokNo 対応記録番号
	 * @param taioKirokDtlNo 対応記録明細番号
	 * @return 処理対象フラグ（true：処理対象、false：処理対象外）
	 * @throws CAANException 
	 */
	private boolean isTargetTaiokrkDtl(String taioKirokNo, String taioKirokDtlNo) throws CAANException
	{
		// (1) 対応記録明細情報を取得する。
		CAANMsg cr0021ETMsg = new CAANMsg(CR0021ETMsg.class.getName());
		
		// 対応記録番号
		cr0021ETMsg.set(CR0021ETMsg.TAIO_KIROK_NO, taioKirokNo);
		// 一時保存有無
		cr0021ETMsg.set(CR0021ETMsg.HENSHU_STAT_FLG, JCRStrConst.HENSHU_STAT_FLG_HENSHU_CHU);
		// 無効フラグ
		cr0021ETMsg.set(CR0021ETMsg.MK_FLG, JCRStrConst.CD_DIV_MK_FLG_YUKO);
		
		CAANMsg[] retTaiokrkDtlMsg = new CR0021LE().findByCondition(cr0021ETMsg);
	
		// (2) 検索結果が存在しない場合
		if (retTaiokrkDtlMsg == null || retTaiokrkDtlMsg.length == 0)
		{
		//   ・何も実行せず処理を終了する。
			return false;
		}
	
		// (3) 対応記録明細内で、指定した対応記録明細番号以外が存在するかの判定を行う。
		for (int i = 0; i < retTaiokrkDtlMsg.length; i++)
		{
			// パラメーターETメッセージ「対応記録明細番号」と異なるデータが存在する場合、trueを返却する。
			if (!taioKirokDtlNo.equals(retTaiokrkDtlMsg[i].getString(CR0021ETMsg.TAIO_KIROK_DTL_NO)))
			{
				return true;
			}
		}

		// パラメーターETメッセージ「対応記録明細番号」と等しいデータのみ場合、falseを返却する。
		return false;
	}

    /**
     * このエンティティのスキーマの内容を取得します。<br>
     * 業務レベルで実装します。
     * @return スキーマのContents
     */
	@Override
	protected Object[][] getSchemaContents()
	{
		return CR0011ETMsg.getSchemaContents();
	}

    /**
     * このエンティティのスキーマの名を取得します。<br>
     * 業務レベルで実装します。
     * @return スキーマ名
     */
	@Override
	protected String getSchemaName()
	{
		return CR0011ETMsg.class.getName();
	}

    /**
     * このエンティティの参照するテーブル名を取得します。<br>
     * 業務レベルで実装します。
     * @return テーブル名
     */
	@Override
	protected String getTableName()
	{
		return CR0011ETMsg.getTableName();
	}

}
