/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK0191D010KRCK
*	ソースファイル名：JEKK0191D010KRCK.java
*	作成者			：EK911024
*	日付			：2012年07月05日
*＜機能概要＞
*	関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00    2012/7/5    富士通      新規作成
*	v5.00.00    2013/03/28	FJ)沖田		IT1-2013-0000639
*   v5.00.01    2013/04/25  FJ)寺園     IT1-2013-0001033
*	v10.00.00   2014/10/01  FJ)星野     OM-2014-0003013
*	v15.00.00   2015/08/29  FJ)熊谷     ANK-2634-00-00 2重発番チェック仕様強化対応
*	v15.01.00   2015/08/31  FJ)藤田     IT1-2015-0000091 2重発番チェックでメジャーアラームにならない
*	v19.00.00   2015/10/01  FJ)森脇     OM-2015-0002295 2重発番チェックの仕様再確認
*
********************************************************************************/

package eo.ejb.common.entity;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCCSuperComExecUtil;
import com.fujitsu.futurity.common.JCCSyslogFormat;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0191D010CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKejbCallTypeChecker;

/**
 * <p>
 * サービス契約内訳<eo光電話>登録関連チェッククラスです。
 * ＜メソッド一覧＞
 * execKRCK
 * execEKK0191D010_KR1
 * </p>
 * @author 富士通
 */

public class JEKK0191D010KRCK
{

	/** 仮登録フラグ：1(仮登録) */
	static final String KARI_TOUROKU_FLG = "1";
	
	/**
	 * コンストラクタ
	 */

	public JEKK0191D010KRCK()
	{
	}

	/**
	 *サービス契約内訳<eo光電話>登録関連チェックを行います。
	 * 
	 * @param inCBSMsg エンティティ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */

	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JKK0191D010KRCK.execKRCK");
		
		// ステータス
		int rtn = 0;
		
		rtn = execEKK0191D010_KR1(inCBSMsg, inContext, "ED");
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0191D010_KR2(inCBSMsg, inContext, "EE");
		}
		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0191D010_KR3(inCBSMsg, inContext, "EC");
		}
		
// v10.00.00 OM-2014-0003013対応 20141001 ADD START
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0191D010_KR4(inCBSMsg, inContext, "EE");
		}
		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0191D010_KR5(inCBSMsg, inContext, "EF");
		}
// v10.00.00 OM-2014-0003013対応 20141001 ADD END


		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JKK0191D010KRCK.execKRCK");
	}

	/**
	 * EKK0191D010_制約ＮＯ１１（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191D010_KR1(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;

		String kariTourokuFlg = null;

		// フロントからの呼び出しの場合チェックしない
		if (JKKejbCallTypeChecker.isCallTypeFront(inContext)) {
			return result;
		}
		
		// 仮登録フラグが設定されている場合
		if (!inCBSMsg.isNull(EKK0191D010CBSMsg.KARI_TOUROKU_FLG))
		{
			kariTourokuFlg = inCBSMsg.getString(EKK0191D010CBSMsg.KARI_TOUROKU_FLG);
		}
		
		// チェック条件
		if (!KARI_TOUROKU_FLG.equals(kariTourokuFlg) && !inCBSMsg.isNull(EKK0191D010CBSMsg.SVC_KEI_NO))
		{
			CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());
			inETMsg.set(KK0081ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK0191D010CBSMsg.SVC_KEI_NO));

			// 判定条件
			if(!JKKModelCommon.isRecoveryTkskStatKK0081(inETMsg, inContext ))
			{
				inCBSMsg.set(EKK0191D010CBSMsg.SVC_KEI_NO_ERR, errFlag);
				if("W".equals(errFlag.substring(0, 1)))
				{
					result = StatusCodes.WARNING;
				}
				else
				{
					result = StatusCodes.RELATION_ERR;
				}
			}
		}
		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}

	/**
	 * EKK0191D010_制約ＮＯ１２（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0191CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191D010_KR2(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;

		// 判定条件
		String svcKeiNo = inCBSMsg.getString(EKK0191D010CBSMsg.SVC_KEI_NO);
		String telno = inCBSMsg.getString(EKK0191D010CBSMsg.TELNO);
		JKKejbKK0191KRCK instance = new JKKejbKK0191KRCK();
		if(!instance.isMiRtnVADslSodHakForAddSvkeiuw(inCBSMsg, inContext, svcKeiNo, telno))
		{
			inCBSMsg.set(EKK0191D010CBSMsg.SVC_KEI_NO_ERR, errFlag);
			if("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}
	
	/**
	 * EKK0191D010_制約ＮＯ２４（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0191CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191D010_KR3(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;

		// 判定条件
		String svcKeiNo = inCBSMsg.getString(EKK0191D010CBSMsg.SVC_KEI_NO);
		String telno = inCBSMsg.getString(EKK0191D010CBSMsg.TELNO);
		JKKejbKK0191KRCK instance = new JKKejbKK0191KRCK();
		if(!instance.isTelNoDubbleAddChk(inCBSMsg, inContext, svcKeiNo, telno))
		{
			inCBSMsg.set(EKK0191D010CBSMsg.TELNO_ERR, errFlag);
			//ANK-2634-00-00 2015/08/29 熊谷 START 
			//シスログ出力
			String proId = "EKK0191D010";
			String msgId = "EKBD910-KW"; // ２重発番チェックエラー時のメッセージID
			String msg   = "登録対象の電話番号は他契約ですでに利用中の為、登録できません。";

			String sysdate = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(System.currentTimeMillis()));
			HashMap<String, Object> propMap = new HashMap<String, Object>();

			propMap.put(JCCSuperComExecUtil.EXEC_BUFF_SIZE, JCMAPLConstMgr.getString(JCCSuperComExecUtil.EXEC_BUFF_SIZE));
			propMap.put(JCCSuperComExecUtil.EXEC_PERMIT_MEMORY, JCMAPLConstMgr.getString(JCCSuperComExecUtil.EXEC_PERMIT_MEMORY));
			propMap.put(JCCSyslogFormat.SYSLOG_FOMAT_PTN_KEY, JCMAPLConstMgr.getString(JCCSyslogFormat.SYSLOG_FOMAT_PTN_KEY));
			propMap.put(JCCSyslogFormat.SYSLOG_MAILING_ID_KEY, JCMAPLConstMgr.getString(JCCSyslogFormat.SYSLOG_MAILING_ID_KEY));
			propMap.put(JCCSyslogFormat.SYSLOG_OUT_DIR_OPTION, JCMAPLConstMgr.getString(JCCSyslogFormat.SYSLOG_OUT_DIR_OPTION));
			// IT1-2015-0000091 MOD START
//			JCCSyslogFormat.logger(proId, msgId, sysdate, msg, null, propMap);
			// OM-2015-0002295 MOD START
//			JCCSyslogFormat.logger(proId, msgId, sysdate, msg, "ERR", propMap);
			if ("1".equals(inCBSMsg.getString(EKK0191D010CBSMsg.FUNC_CODE)))
			{
				JCCSyslogFormat.logger(proId, msgId, sysdate, msg, "ERR", propMap);
			}
			// OM-2015-0002295 MOD END
			// IT1-2015-0000091 MOD END
			
			//ANK-2634-00-00 2015/08/29 熊谷 END
			if("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}
	
// v10.00.00 OM-2014-0003013対応 20141001 ADD START
	/**
	 * EKK0191D010_制約ＮＯ２６（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0191CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191D010_KR4(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;

		// 判定条件
		String telno = inCBSMsg.getString(EKK0191D010CBSMsg.TELNO);
		JKKejbKK0191KRCK instance = new JKKejbKK0191KRCK();
		if(!instance.isTelnoAddDslPauseTokiChuChk(inCBSMsg, inContext, telno))
		{
			inCBSMsg.set(EKK0191D010CBSMsg.TELNO_ERR, errFlag);
			if("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}
	
	/**
	 * EKK0191D010_制約ＮＯ２７（関連）チェック
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0191CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0191D010_KR5(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int result = 0;

		// 判定条件
		String telno = inCBSMsg.getString(EKK0191D010CBSMsg.TELNO);
		JKKejbKK0191KRCK instance = new JKKejbKK0191KRCK();
		if(!instance.isTelnoAddItnsOpafTokiChuChk(inCBSMsg, inContext, telno))
		{
			inCBSMsg.set(EKK0191D010CBSMsg.TELNO_ERR, errFlag);
			if("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		return result;
	}
// v10.00.00 OM-2014-0003013対応 20141001 ADD END
	
}
