using System; using QMAPP.FJC.TRACING.DAInterface; using QMAPP.FJC.Entity.QT; using System.Data; using QMAPP.FJC.Entity.CheckTime; using QMAPP.FJC.DAL.CheckTime; namespace QMAPP.FJC.TRACING.DataValidators { /// /// 前置工序时间校验 /// public class TimeValidator : IDataValidator { public ValidateResult Validate(DAObject data, DAIValidation validOption) { ProductTimeDAL dal = new ProductTimeDAL(); ProductTime timeCheck = dal.GetTimeCheckCfg(data.WorkLocState.WORKLOC_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 { var preStatTime = DateTime.Now; DateTime serviceTime = dal.GetServiceDateTime(); TimeSpan ts = serviceTime.Subtract(preStatTime); return new ValidateResult(false, $"未达到{timeCheck.Operator}{(Convert.ToDecimal(timeCheck.Check_Value) / 3600).ToString("#0.0")}小时验证标准"); } } /// /// 比较字符串相等 /// /// /// /// /// 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) { 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类型"); } } ProductTimeDAL dal = new ProductTimeDAL(); 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; } } }