using System;
using QMAPP.FJC.TRACING.DAInterface;
using QMAPP.FJC.Entity.QT;
using System.Data;
using QMAPP.FJC.DAL.CheckTime;
namespace QMAPP.FJC.TRACING.DataValidators
{
///
/// 前置工序时间校验
///
public class TimeValidator : IDataValidator
{
public ValidateResult Validate(DAObject data,DAIValidation validOption)
{
CHECKTIMEDAL dal = new CHECKTIMEDAL();
var timeCheck = dal.GetTimeCheckCfg(data.WorkLocState.WORKLOC_CODE, data.DAI.DA_CODE);
//T_MD_PRODUCT_TIMECHECK timeCheck = LocSwitchDataAccess.GetTimeCheckCfg(data.WorkLocState.WORKCELL_CODE, data.DAI.DA_CODE);
if(timeCheck == null) return new ValidateResult(true, "");
DataTable checkTable = dal.GetConfigValue(timeCheck, data.DAValue.ToString());
if (checkTable == null || checkTable.Rows.Count == 0)
{
return new ValidateResult(true, "");
}
DataRow dataRow = checkTable.Rows[0];
var ispass = TimeOutCompare(dataRow["CheckColumnValue"].ToString(), timeCheck.Operator, timeCheck.Check_Value, timeCheck.Check_ValueTo, timeCheck.Check_Type);
if(ispass) return new ValidateResult(true, "");
else return new ValidateResult(false, "未达到时间验证标准!");
}
///
/// 比较字符串相等
///
///
///
///
///
public static bool StringEqual(string pCheckColumnValue, string pOperator, string pCheck_Value)
{
return pCheckColumnValue == pCheck_Value;
}
///
/// 比较时间是否满足条码
///
/// 校验字段配置的值
/// 操作符
/// 验证值
///
public static bool TimeOutCompare(string pCheckColumnValue, string pOperator, string pCheck_Value, string pCheck_ValueTo, string pCheck_Type)
{
CHECKTIMEDAL dal = new CHECKTIMEDAL();
var preStatTime = DateTime.Now;
if (!DateTime.TryParse(pCheckColumnValue, out preStatTime))
{
throw new Exception("检测值CheckColumnValue必须是DateTime类型");
}
int len = 0;
if (!int.TryParse(pCheck_Value, out len))
{
throw new Exception("验证值Check_Value必须是int类型");
}
int len2 = 0;
if (!string.IsNullOrEmpty(pCheck_ValueTo))
{
if (!int.TryParse(pCheck_ValueTo, out len2))
{
throw new Exception("验证值pCheck_ValueTo必须是int类型");
}
}
DateTime serviceTime = dal.GetServiceDateTime();
TimeSpan ts = serviceTime.Subtract(preStatTime);
if (pCheck_Type == "1")
{
switch (pOperator)
{
case ">": return ts.TotalSeconds > len;
case "<": return ts.TotalSeconds < len;
case "=": return ts.TotalSeconds == len;
case ">=": return ts.TotalSeconds >= len;
case "<=": return ts.TotalSeconds <= len;
}
}
else if (pCheck_Type == "2")
{
return pCheckColumnValue == pCheck_Value;
}
else if (pCheck_Type == "3")
{
if (ts.TotalSeconds > len && ts.TotalSeconds < len2) return true;
else return false;
}
return true;
}
}
}