/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK0481D010TKCK
*	ソースファイル名：JSYejbEKK0481D010TKCK.java
*	作成者			：EK914257
*	日付			：2013年11月21日
*＜機能概要＞
*	割引サービス対象契約登録の単関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.check.itemrelation;

import java.sql.Date;
import java.sql.Timestamp;
import com.fujitsu.futurity.model.base.CAANMsg;
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 com.fujitsu.futurity.model.ejb.common.fw.TankanrenCheckHandler;
import eo.ejb.cbs.cbsmsg.EKK0481D010CBSMsg;

/**
 * <HR>
 * 割引サービス対象契約登録CBSMsgの単関連チェック用クラス｡ <p>
 * 
 * 以下の機能をサポートする。
 * <ul>
 * <li>割引サービス対象契約登録CBSMsgの単関連をチェックする。
 * </ul>
 * <p>
 * <HR>
 * <p>
 */ 
public class JSYejbEKK0481D010TKCK implements TankanrenCheckHandler {

	/**
	 * JSYejbEKK0481D010TKCK単関連をチェックする。<br>
	 * 
	 * JSYejbEKK0481D010TKCK単関連をチェックする。
	 * <p>
	 * @param	inCBSMsg	CBSMsgメッセージ
	 * @param	inContext	Agent
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext) {

		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"invoke#Call");

		// チェックを行う
		int stRet = 0;

		//チェック条件：割引サービス対象契約適用開始年月日がnullでない かつ 割引サービス対象契約適用終了年月日がnullでない
		if(!inCBSMsg.isNull(EKK0481D010CBSMsg.WRISVC_TG_KEI_TSTAYMD) && !inCBSMsg.isNull(EKK0481D010CBSMsg.WRISVC_TG_KEI_TENDYMD)){
			//割引サービス対象契約適用開始年月日がテンプレート項目(割引サービス対象契約適用終了年月日)より大きい ：エラー
			if( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.WRISVC_TG_KEI_TSTAYMD),inCBSMsg.getObject(EKK0481D010CBSMsg.WRISVC_TG_KEI_TENDYMD),"31","1") ){
				inCBSMsg.set(EKK0481D010CBSMsg.WRISVC_TG_KEI_TSTAYMD_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"wrisvc_tg_kei_tstaymd_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：((((((サービス契約番号がnullでない または サービス契約内訳番号がnullでない) または オプションサービス契約番号がnullでない) または サブオプションサービス契約番号がnullでない) または 機器提供サービス契約番号がnullでない) かつ 対象契約識別コードがnullでない) または 請求オプションサービス契約番号がnullでない) または 機器オプションサービス契約番号がnullでない
		if(((((((!inCBSMsg.isNull(EKK0481D010CBSMsg.SVC_KEI_NO) || !inCBSMsg.isNull(EKK0481D010CBSMsg.SVC_KEI_UCWK_NO)) || !inCBSMsg.isNull(EKK0481D010CBSMsg.OP_SVC_KEI_NO)) || !inCBSMsg.isNull(EKK0481D010CBSMsg.SBOP_SVC_KEI_NO)) || !inCBSMsg.isNull(EKK0481D010CBSMsg.KKTK_SVC_KEI_NO)) && !inCBSMsg.isNull(EKK0481D010CBSMsg.TG_KEI_SKBT_CD)) || !inCBSMsg.isNull(EKK0481D010CBSMsg.SEIOPSVC_KEI_NO)) || !inCBSMsg.isNull(EKK0481D010CBSMsg.KKOP_SVC_KEI_NO)){
			//(((((((対象契約識別コードが固定値(01)と等しい かつ サービス契約番号がnull) または (対象契約識別コードが固定値(03)と等しい かつ サービス契約内訳番号がnull)) または (対象契約識別コードが固定値(04)と等しい かつ オプションサービス契約番号がnull)) または (対象契約識別コードが固定値(05)と等しい かつ オプションサービス契約番号がnull)) または (対象契約識別コードが固定値(05)と等しい かつ サブオプションサービス契約番号がnull)) または (対象契約識別コードが固定値(06)と等しい かつ 機器提供サービス契約番号がnull)) または (対象契約識別コードが固定値(07)と等しい かつ 請求オプションサービス契約番号がnull)) または (対象契約識別コードが固定値(10)と等しい かつ 機器オプションサービス契約番号がnull) ：エラー
			if(((((((( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"01","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.SVC_KEI_NO)) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"03","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.SVC_KEI_UCWK_NO))) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"04","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.OP_SVC_KEI_NO))) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"05","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.OP_SVC_KEI_NO))) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"05","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.SBOP_SVC_KEI_NO))) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"06","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.KKTK_SVC_KEI_NO))) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"07","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.SEIOPSVC_KEI_NO))) || ( comparison(inCBSMsg.getObject(EKK0481D010CBSMsg.TG_KEI_SKBT_CD),"10","20","1")  && inCBSMsg.isNull(EKK0481D010CBSMsg.KKOP_SVC_KEI_NO))){
				inCBSMsg.set(EKK0481D010CBSMsg.TG_KEI_SKBT_CD_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"tg_kei_skbt_cd_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}


		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"invoke#End");

		//チェック結果によりステータスを設定する
		if (stRet > inCBSMsg.getInt(EKK0481D010CBSMsg.STATUS)) {
			inCBSMsg.set(EKK0481D010CBSMsg.STATUS,stRet);
		}
	}

	/**
	 * 比較処理
	 * 
	 * @param left_arg 		比較値（左辺）
	 * @param right_arg 	比較値（右辺）
	 * @param enzan_arg 	比較演算子
	 * @param checkType 	比較形式
	 */
	private boolean comparison(Object left_arg, Object right_arg, String enzan_arg, String checkType)
	{

		boolean booRet = true;

		String leftStr = new String();
		String rightStr = new String();

		if ( left_arg != null ){
			leftStr = left_arg.toString();
		}
		if ( right_arg != null ){
			rightStr = right_arg.toString();
		}

		// 文字比較
		if ( "1".equals(checkType) ) {

			//より小さい
			if ( "10".equals(enzan_arg) || "40".equals(enzan_arg) || "41".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) < 0)){
					return true;
				}else{
					return false;
				}
			//以下
			} else if ( "11".equals(enzan_arg) || "50".equals(enzan_arg) || "51".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) <= 0)){
					return true;
				}else{
					return false;
				}
			//等しい
			} else if ( "20".equals(enzan_arg) || "60".equals(enzan_arg) || "61".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) == 0)){
					return true;
				}else{
					return false;
				}
			//等しくない
			} else if ( "21".equals(enzan_arg) || "70".equals(enzan_arg) || "71".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) != 0)){
					return true;
				}else{
					return false;
				}
			//以上
			} else if ( "30".equals(enzan_arg) || "80".equals(enzan_arg) || "81".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) >= 0)){
					return true;
				}else{
					return false;
				}
			//より大きい
			} else if ( "31".equals(enzan_arg) || "90".equals(enzan_arg) || "91".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) > 0)){
					return true;
				}else{
					return false;
				}
			//該当無し
			} else {
				return false;
			}

		//数値比較
		} else if ( "2".equals(checkType) ) {

			try{
				Long l_left_arg = new Long(leftStr);
				Long l_right_arg = new Long(rightStr);

				//より小さい
				if ( "10".equals(enzan_arg) || "40".equals(enzan_arg) || "41".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) < 0)){
						return true;
					}else{
						return false;
					}
				//以下
				} else if ( "11".equals(enzan_arg) || "50".equals(enzan_arg) || "51".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) <= 0)){
						return true;
					}else{
						return false;
					}
				//等しい
				} else if ( "20".equals(enzan_arg) || "60".equals(enzan_arg) || "61".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) == 0)){
						return true;
					}else{
						return false;
					}
				//等しくない
				} else if ( "21".equals(enzan_arg) || "70".equals(enzan_arg) || "71".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) != 0)){
						return true;
					}else{
						return false;
					}
				//以上
				} else if ( "30".equals(enzan_arg) || "80".equals(enzan_arg) || "81".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) >= 0)){
						return true;
					}else{
						return false;
					}
				//より大きい
				} else if ( "31".equals(enzan_arg) || "90".equals(enzan_arg) || "91".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) > 0)){
						return true;
					}else{
						return false;
					}
				//該当無し
				} else {
					return false;
				}
			}catch(NumberFormatException e){
				return false;
			}

		//精度比較
		} else if ( "3".equals(checkType) ) {

			try{
				Double l_left_arg = new Double(leftStr);
				Double l_right_arg = new Double(rightStr);
				
				//より小さい
				if ( "10".equals(enzan_arg) || "40".equals(enzan_arg) || "41".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) < 0)){
						return true;
					}else{
						return false;
					}
				//以下
				} else if ( "11".equals(enzan_arg) || "50".equals(enzan_arg) || "51".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) <= 0)){
						return true;
					}else{
						return false;
					}
				//等しい
				} else if ( "20".equals(enzan_arg) || "60".equals(enzan_arg) || "61".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) == 0)){
						return true;
					}else{
						return false;
					}
				//等しくない
				} else if ( "21".equals(enzan_arg) || "70".equals(enzan_arg) || "71".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) != 0)){
						return true;
					}else{
						return false;
					}
				//以上
				} else if ( "30".equals(enzan_arg) || "80".equals(enzan_arg) || "81".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) >= 0)){
						return true;
					}else{
						return false;
					}
				//より大きい
				} else if ( "31".equals(enzan_arg) || "90".equals(enzan_arg) || "91".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) > 0)){
						return true;
					}else{
						return false;
					}
				//該当無し
				} else {
					return false;
				}
			}catch(NumberFormatException e){
				return false;
			}
		}

		return booRet;

	}

}
