/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK3101B020TKCK
*	ソースファイル名：JSYejbEKK3101B020TKCK.java
*	作成者			：EK918550
*	日付			：2017年10月26日
*＜機能概要＞
*	訪販申込実績一覧照会の単関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ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.EKK3101B020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3101B020CBSMsg1List;

/**
 * <HR>
 * 訪販申込実績一覧照会CBSMsgの単関連チェック用クラス｡ <p>
 * 
 * 以下の機能をサポートする。
 * <ul>
 * <li>訪販申込実績一覧照会CBSMsgの単関連をチェックする。
 * </ul>
 * <p>
 * <HR>
 * <p>
 */ 
public class JSYejbEKK3101B020TKCK implements TankanrenCheckHandler {

	/**
	 * JSYejbEKK3101B020TKCK単関連をチェックする。<br>
	 * 
	 * JSYejbEKK3101B020TKCK単関連をチェックする。
	 * <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チェック
		CAANMsg[] l_ekk3101b020cbsmsg1list = new CAANMsg[]{};
		if(!inCBSMsg.isNull(EKK3101B020CBSMsg.EKK3101B020CBSMSG1LIST)){
			l_ekk3101b020cbsmsg1list = inCBSMsg.getCAANMsgList(EKK3101B020CBSMsg.EKK3101B020CBSMSG1LIST);
		}

		//チェック条件：((((((((ＫＥＹ＿受付番号がnull かつ ＫＥＹ＿申込年月日＿ＦＲＯＭがnull) かつ ＫＥＹ＿申込年月日＿ＴＯがnull) かつ ＫＥＹ＿取扱コードがnull) かつ ＫＥＹ＿お客さま氏名（カナ）がnull) かつ ＫＥＹ＿電話番号がnull) かつ ＫＥＹ＿工程進捗種別がnull) かつ ＫＥＹ＿サンキューコール実施有無がnull) かつ ＫＥＹ＿キャンセル除外申請日＿ＦＲＯＭがnull) かつ ＫＥＹ＿キャンセル除外申請日＿ＴＯがnull
		if(((((((((inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_UK_NO) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_FROM)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_TO)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_TRAT_CD)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CUST_KANA)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_TELNO)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_THNX_CALL_JSSI_UM)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO)){
			//((((((((((((((((ＫＥＹ＿受付番号がnull かつ ＫＥＹ＿工事種別がnull) かつ ＫＥＹ＿工程進捗日付＿ＦＲＯＭがnull) かつ ＫＥＹ＿工程進捗日付＿ＴＯがnull) かつ ＫＥＹ＿キャンセル日＿ＦＲＯＭ（ネット）がnull) かつ ＫＥＹ＿キャンセル日＿ＴＯ（ネット）がnull) かつ ＫＥＹ＿キャンセル日＿ＦＲＯＭ（電話）がnull) かつ ＫＥＹ＿キャンセル日＿ＴＯ（電話）がnull) かつ ＫＥＹ＿キャンセル日＿ＦＲＯＭ（テレビ）がnull) かつ ＫＥＹ＿キャンセル日＿ＴＯ（テレビ）がnull) かつ ＫＥＹ＿キャンセル日＿ＦＲＯＭ（ｅｏ電気）がnull) かつ ＫＥＹ＿キャンセル日＿ＴＯ（ｅｏ電気）がnull) かつ ＫＥＹ＿キャンセル日＿ＦＲＯＭ（ＭＶＮＯ）がnull) かつ ＫＥＹ＿キャンセル日＿ＴＯ（ＭＶＮＯ）がnull) かつ ＫＥＹ＿ｅｏ光ネットサービスコードがnull) かつ ＫＥＹ＿キャンセル除外承認有無がnull) かつ ＫＥＹ＿キャンセル除外否認有無がnull) かつ ＫＥＹ＿ＭＩＤがnull ：エラー
			if(((((((((((((((((inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_UK_NO) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_KOJI_SBT)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_FROM)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_TO)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_NET)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_NET)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TEL)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TEL)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_TV)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_TV)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_EOELEC)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_EOELEC)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_FROM_MVNO)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_DAY_TO_MVNO)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_EOHNT_SVC_CD)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SNN_UM)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_HNN_UM)) && inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MID)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_UK_NO_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_uk_no_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：((ＫＥＹ＿工程進捗種別がnullでない または ＫＥＹ＿工事種別がnullでない) または ＫＥＹ＿工程進捗日付＿ＦＲＯＭがnullでない) または ＫＥＹ＿工程進捗日付＿ＴＯがnullでない
		if(((!inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT) || !inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_KOJI_SBT)) || !inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_FROM)) || !inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_TO)){
			//((ＫＥＹ＿工程進捗種別がnull または ＫＥＹ＿工事種別がnull) または ＫＥＹ＿工程進捗日付＿ＦＲＯＭがnull) または ＫＥＹ＿工程進捗日付＿ＴＯがnull ：エラー
			if(((inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_KOJI_SBT)) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_FROM)) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_STEP_PRG_HIZUKE_TO)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_STEP_PRG_SBT_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_step_prg_sbt_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿申込年月日＿ＦＲＯＭがnullでない または ＫＥＹ＿申込年月日＿ＴＯがnullでない
		if(!inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_FROM) || !inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_TO)){
			//ＫＥＹ＿申込年月日＿ＦＲＯＭがnull または ＫＥＹ＿申込年月日＿ＴＯがnull ：エラー
			if(inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_FROM) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_MSKM_YMD_TO)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_MSKM_YMD_FROM_ERR, "E4");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_mskm_ymd_from_err:E4");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿キャンセル除外申請日＿ＦＲＯＭがnullでない または ＫＥＹ＿キャンセル除外申請日＿ＴＯがnullでない
		if(!inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM) || !inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO)){
			//ＫＥＹ＿キャンセル除外申請日＿ＦＲＯＭがnull または ＫＥＹ＿キャンセル除外申請日＿ＴＯがnull ：エラー
			if(inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM_ERR, "E5");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_cncl_jgi_shin_ymd_from_err:E5");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿キャンセル除外承認有無がnullでない
		if(!inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SNN_UM)){
			//ＫＥＹ＿キャンセル除外申請日＿ＦＲＯＭがnull または ＫＥＹ＿キャンセル除外申請日＿ＴＯがnull ：エラー
			if(inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM_ERR, "E6");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_cncl_jgi_shin_ymd_from_err:E6");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿キャンセル除外否認有無がnullでない
		if(!inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_HNN_UM)){
			//ＫＥＹ＿キャンセル除外申請日＿ＦＲＯＭがnull または ＫＥＹ＿キャンセル除外申請日＿ＴＯがnull ：エラー
			if(inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_TO)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_CNCL_JGI_SHIN_YMD_FROM_ERR, "E7");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_cncl_jgi_shin_ymd_from_err:E7");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿受付日_FROMがnullでない または ＫＥＹ＿受付日_TOがnullでない
		if(!inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_UK_YMD_FROM) || !inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_UK_YMD_TO)){
			//ＫＥＹ＿受付日_FROMがnull または ＫＥＹ＿受付日_TOがnull ：エラー
			if(inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_UK_YMD_FROM) || inCBSMsg.isNull(EKK3101B020CBSMsg.KEY_UK_YMD_TO)){
				inCBSMsg.set(EKK3101B020CBSMsg.KEY_UK_YMD_FROM_ERR, "E8");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_uk_ymd_from_err:E8");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}


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

		//チェック結果によりステータスを設定する
		if (stRet > inCBSMsg.getInt(EKK3101B020CBSMsg.STATUS)) {
			inCBSMsg.set(EKK3101B020CBSMsg.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;

	}

}
