/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム構築
*	モジュール名	：JTUejbTU0081SecProc
*	ソースファイル名：JTUejbTU0081SecProc.java
*	作成者			：FJ
*	日付			：2012年01月18日
*＜機能概要＞
*	電話帳申込に対する副次処理を行う部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/03/17	FJ)楠神		新規作成
*	v4.00.00	2012/08/7	FJ)宮本		TAI-2012-0000093
*
********************************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JTUStrConst;
import eo.ejb.cbm.entity.TU0081ETMsg;
import eo.ejb.cbm.entity.TU0081LE;
import eo.ejb.cbm.entity.TU0091ETMsg;
import eo.ejb.cbm.entity.TU0091LE;

/**
 * 電話帳申込の副次処理部品
 * @author FJ
 *
 */
public class JTUejbTU0081SecProc extends JTUejbTU0081DBABase
{
	
	/**
	 * 全件検索を行ないます。
	 * @param tu0081Msg	検索条件となるメッセージ
	 * @return	検索結果配列
	 * @throws CAANException
	 */
	public CAANMsg[] findByCondition(CAANMsg tu0081Msg) throws CAANException
	{
		return new TU0081LE().findByCondition(tu0081Msg);
	}

	/**
	 * エンティティの生成を行います。
	 * @param msg 生成するエンティティの情報を格納したメッセージキャリア
	 * @return CAANMsg 生成した結果を格納したメッセージキャリア
	 * @exception CAANCreateException エンティティ生成時のエラーを通知
	 */
	public CAANMsg create(CAANMsg msg) throws CAANCreateException
	{
		return super.create(msg);
	}
	
	/**
	 * 既存のエンティティを更新します。
	 * @param msg 更新するエンティティの情報を格納したメッセージキャリア
	 * @return CAANMsg 更新結果を格納したメッセージキャリア
	 * @exception CAANFinderException 指定されたキーのデータが見つからない
	 */
	public CAANMsg update(CAANMsg msg) throws CAANFinderException
	{
		return super.update(msg);
	}
	
	/**
	 * サービス契約番号、法人eo読替サービス契約番号指定による検索を行います。
	 * 最新の情報を取得する。
	 * @param inCBSMsg
	 * @param ntt_telno
	 * @return CAANMsg 最新情報
	 * @throws CAANException
	 */
	public CAANMsg findByService(CAANMsg inCBSMsg, String ntt_telno) throws CAANException
	{
		CAANMsg rtnRcntMsg = null;
		CAANMsg searchMsg0081 = new CAANMsg(getSchemaName());
		searchMsg0081.set(TU0081ETMsg.SVC_KEI_UCWK_NO, inCBSMsg.getString(TU0081ETMsg.SVC_KEI_UCWK_NO));
		searchMsg0081.set(TU0081ETMsg.HJIN_EO_YKAE_SVKEI_NO, inCBSMsg.getString(TU0081ETMsg.HJIN_EO_YKAE_SVKEI_NO));
		searchMsg0081.set(TU0081ETMsg.REQ_JI_KISAI_JUN_SKCD, inCBSMsg.getString(TU0081ETMsg.REQ_JI_KISAI_JUN_SKCD));
		searchMsg0081.set(TU0081ETMsg.MK_FLG, JTUStrConst.MK_FLG_YK);
		
		CAANMsg[] msgList = new TU0081LE().findByCondition(searchMsg0081);
		if(msgList == null || msgList.length == 0)
		{
			return null;
		}
		
		for(CAANMsg msg : msgList)
		{
			// 電話帳申込内容を確認
			CAANMsg searchMsg0091 = new CAANMsg(TU0091ETMsg.class.getName());
			searchMsg0091.set(TU0091ETMsg.DNWACHO_MSKM_NO, msg.getString(TU0081ETMsg.DNWACHO_MSKM_NO));
			searchMsg0091.set(TU0091ETMsg.GENE_ADD_DTM, msg.getString(TU0081ETMsg.GENE_ADD_DTM));
			if(JTUStrConst.RQNY_DEL.equals(msg.getString(TU0081ETMsg.DNWACHOMSK_IDO_NAIYO_CD)))
			{
				// 削除データ
				searchMsg0091.set(TU0091ETMsg.DNWACHOMSK_NEW_OLD_FLG, JTUStrConst.OLD_DATA);
			}
			else
			{
				// 登録・変更データ
				searchMsg0091.set(TU0091ETMsg.DNWACHOMSK_NEW_OLD_FLG, JTUStrConst.NEW_DATA);
			}
			searchMsg0091.set(TU0091ETMsg.NTT_TELNO, ntt_telno);
			searchMsg0091.set(TU0091ETMsg.MK_FLG, JTUStrConst.MK_FLG_YK);
			CAANMsg[] msgList0091 = new TU0091LE().findByCondition(searchMsg0091);
			if(msgList0091 == null || msgList0091.length == 0)
			{
				// 取得できない場合は次へ
				continue;
			}
			
			if(isRcntStatus(msg) && (rtnRcntMsg == null 
					|| msg.getString(TU0081ETMsg.GENE_ADD_DTM).compareTo(rtnRcntMsg.getString(TU0081ETMsg.GENE_ADD_DTM)) > 0))
			{
				rtnRcntMsg = msg;
			}
		}
		
		return rtnRcntMsg;
	}

	/**
	 * 最新情報のステータス判定
	 * 「021：ＴＤＩＳ送信待ち」
	 * 「022：ＴＤＩＳ送信済み」
	 * 「031：電話帳掲載結果可」の場合True
	 * @param inCBSMsg
	 * @return boolean
	 */
	private boolean isRcntStatus(CAANMsg inCBSMsg)
	{
		String stat = inCBSMsg.getString(TU0081ETMsg.DNWACHO_MSKM_STAT);
		if(JTUStrConst.TDIS_SEND_STAY.equals(stat)
				|| JTUStrConst.TDIS_SEND_ZUMI.equals(stat)
				|| JTUStrConst.DNWACHO_KEISAI_PSG.equals(stat))
		{
			return true;
		}
		return false;
	}
	
}
