/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JETU0081E011TPMA
*	ソースファイル名：JETU0081E011TPMA.java
*	作成者			：FJ
*	日付			：2012年01月18日
*＜機能概要＞
*	電話帳申込削除サービスインターフェイスCBS主処理部品
*	電話帳申込情報の論理削除時に、世代管理情報をすべて論理削除する。
*	
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/01/18	FJ)楠神		新規作成
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

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.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JTUStrConst;
import eo.ejb.cbm.cbmmsg.TU0081CBMMsg;
import eo.ejb.cbm.entity.TU0081ETMsg;
import eo.ejb.cbs.cbsmsg.ETU0081E011CBSMsg;
import eo.ejb.common.JPCModelCommon;
import eo.ejb.common.db.JTUejbTU0081SecProc;

/**
 * <p>
 * 電話帳申込削除独自処理部品です。
 * </p>
 * @author FJ
 */
public class JETU0081E011TPMA implements TemplateMainHandler 
{
    /**
     * DBテーブルID
     */
	private static final String TU0081ID = "TU0081";
	
    /**
     * エラーフラグ(関連チェック)
     */
	/** エラーフラグEA */
	private static final String RELATION_ERR_EA = "EA";
	/** エラーフラグEB */
	private static final String RELATION_ERR_EB = "EB";
	/** エラーフラグEC */
	private static final String RELATION_ERR_EC = "EC";
	
    /**
     * エラーフラグ(状態遷移チェック)
     */
	private static final String STATUSTRANS_ERR_EA = "EA";
	
	/**
	 * コンストラクタです。
	 */
	public JETU0081E011TPMA()
	{
		super();
	}

	/**
	 * <p>
	 * 電話帳申込情報の論理削除時に、世代管理情報をすべて論理削除する。<br>
	 * </p>
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		CAANMsg checkMsg = new CAANMsg(TU0081ETMsg.class.getName());
		CAANMsg checkMsg2 = new CAANMsg(TU0081ETMsg.class.getName());
		boolean checkRslt = false;
		boolean checkRslt2 = false;
		CAANMsg[] checkRslt3 = null;
		CAANMsg selectMsg = new CAANMsg(TU0081ETMsg.class.getName());
		CAANMsg[] selectRslt = null;
		CAANMsg updMsg = new CAANMsg(TU0081ETMsg.class.getName());
		
		JTUejbTU0081SecProc secproc = new JTUejbTU0081SecProc();

		//関連・状態遷移チェック
		
		//電話帳申込番号
		checkMsg.set(TU0081CBMMsg.DNWACHO_MSKM_NO, inCBSMsg.getString(ETU0081E011CBSMsg.DNWACHO_MSKM_NO));
		//更新年月日時分秒
		checkMsg.set(TU0081CBMMsg.UPD_DTM, inCBSMsg.getString(ETU0081E011CBSMsg.UPD_DTM_BF));
		
		checkRslt = JPCModelCommon.isExistingPrimaryKeyForGene(checkMsg, inContext, TU0081ID);
		
		if(!checkRslt)
		{
			inCBSMsg.set(ETU0081E011CBSMsg.DNWACHO_MSKM_NO_ERR, RELATION_ERR_EA);
			inCBSMsg.set(ETU0081E011CBSMsg.STATUS, StatusCodes.RELATION_ERR);
			return;
		}
		
		checkRslt = JPCModelCommon.succeededExclusiveLockForGene(checkMsg, inContext, TU0081ID);
		
		if(!checkRslt)
		{
			inCBSMsg.set(ETU0081E011CBSMsg.DNWACHO_MSKM_NO_ERR, RELATION_ERR_EB);
			inCBSMsg.set(ETU0081E011CBSMsg.STATUS, StatusCodes.RELATION_ERR);
			return;
		}
		
		//電話帳申込番号
		checkMsg2.set(TU0081CBMMsg.DNWACHO_MSKM_NO, inCBSMsg.getString(ETU0081E011CBSMsg.DNWACHO_MSKM_NO));
		//無効フラグ
		checkMsg2.set(TU0081CBMMsg.MK_FLG, JTUStrConst.MK_FLG_YK);
		
		try
		{
			checkRslt3 = secproc.findByCondition(checkMsg2);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		
		if(checkRslt3 == null || checkRslt3.length == 0)
		{
			inCBSMsg.set(ETU0081E011CBSMsg.DNWACHO_MSKM_NO_ERR, RELATION_ERR_EC);
			inCBSMsg.set(ETU0081E011CBSMsg.STATUS, StatusCodes.RELATION_ERR);
			return;
		}
		
		checkRslt2 = secproc.isDnwachoMskmStatCheck(inCBSMsg, inContext, 
				inCBSMsg.getString(ETU0081E011CBSMsg.DNWACHO_MSKM_NO), JTUStrConst.TDIS_SEND_STAY);
		
		if(!checkRslt2)
		{
			inCBSMsg.set(ETU0081E011CBSMsg.DNWACHO_MSKM_NO_ERR, STATUSTRANS_ERR_EA);
			inCBSMsg.set(ETU0081E011CBSMsg.STATUS, StatusCodes.STATUSTRANS_ERR);
			return;
		}
		
		//電話帳申込情報取得処理
		
		//電話帳申込番号
		selectMsg.set(TU0081CBMMsg.DNWACHO_MSKM_NO, inCBSMsg.getString(ETU0081E011CBSMsg.DNWACHO_MSKM_NO));
		
		try
		{
			selectRslt = secproc.findByCondition(selectMsg);
		}
		catch(CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		
		//機能コードの確認（機能コードが「1」以外の場合、処理を終了する。）
		if(!JPCModelConstant.FUNC_CD_1.equals(inCBSMsg.getString(ETU0081E011CBSMsg.FUNC_CODE)))
		{
			return;
		}
		
		//電話帳申込削除処理
		
		try
		{
			for(int i = 0; i < selectRslt.length; i++)
			{
				//初期化
				updMsg = new CAANMsg(TU0081ETMsg.class.getName());
				
				updMsg.set(TU0081ETMsg.DNWACHO_MSKM_NO, selectRslt[i].getString(TU0081ETMsg.DNWACHO_MSKM_NO));
				updMsg.set(TU0081ETMsg.GENE_ADD_DTM, selectRslt[i].getString(TU0081ETMsg.GENE_ADD_DTM));
				updMsg.set(TU0081ETMsg.UPD_DTM, inCBSMsg.getString(ETU0081E011CBSMsg.OPERATEDATETIME));
				updMsg.set(TU0081ETMsg.UPD_OPEACNT, inCBSMsg.getString(ETU0081E011CBSMsg.OPERATORID));
				updMsg.set(TU0081ETMsg.DEL_DTM, inCBSMsg.getString(ETU0081E011CBSMsg.OPERATEDATETIME));
				updMsg.set(TU0081ETMsg.DEL_OPEACNT, inCBSMsg.getString(ETU0081E011CBSMsg.OPERATORID));
				updMsg.set(TU0081ETMsg.MK_FLG, JTUStrConst.MK_FLG_MK);
	
				secproc.update(updMsg);
				
			}
		}
		catch (CAANFinderException ce)
		{
			throw new CAANRuntimeException(ce);
		}
	}
}
