using PadApplication.DB; using PadApplication.Entites.DbModels; using PadApplication.Entites.Dto; using System.Net.Http; using System.Text; using Newtonsoft.Json; using SqlSugar; namespace PadApplication.Services; /// /// 工单状态管理类,负责工单状态相关的数据操作 /// 继承自Repository基类,包含基础的CRUD操作 /// public class MesOrderStaManager : Repository { private readonly MesQaItemsDetect02Manager mesQaItemsDetect02Manager = new(); /// /// 更新不良品ID /// /// 包含不良品ID(ngId)和状态ID(staId)的数据传输对象 /// 更新是否成功 public bool UpdateNg(OrderMachineDto dto) { // 更新MesOrderSta表中指定ID记录的不良品ID return Db.Updateable() // 设置NgId字段为传入的ngId值 .SetColumns(s => s.NgId == dto.ngId) // 根据主键Id匹配记录 .Where(s => s.Id == dto.staId) // 执行更新并判断影响行数是否大于0 .ExecuteCommand() > 0; } /// /// 根据工单号查找工单状态信息 /// /// 包含工单ID的查询条件 /// 工单状态信息,包含工单状态等详细信息 public MesOrderSta FindByOrderNo(OrderMachineDto query) { // 查询MesOrderSta表获取工单状态记录 var mesOrderSta = Db.Queryable() .Where(s => s.OrderId == query.OrderId) .First(); // 如果未找到记录,返回空对象 if (mesOrderSta == null) return new MesOrderSta(); // 查询Womdaa表获取工单主表信息 var womdaa = Db.Queryable() .Where(a => a.Id == query.OrderId).First(); // 判空处理,避免空引用异常 mesOrderSta.OrderStatus = womdaa != null ? womdaa.Daa018 : null; return mesOrderSta; } /// /// 更新换模时间 /// /// 工单状态实体,包含换模开始/结束时间 /// 更新是否成功 public bool ChangeMoldTime(MesOrderSta entity) { var vWom = Db.Queryable() .Where(s => s.MachineNo == entity.MachineNo) .OrderByDescending(s => s.WGSJ) .First(); return Db.Updateable() // 如果有换模开始时间则更新 // .SetColumnsIF(entity.ChangeMoldStartTime != null, // s => s.ChangeMoldStartTime == entity.ChangeMoldStartTime) // 如果有换模结束时间则更新 .SetColumnsIF(entity.ChangeMoldEndTime != null, s => s.ChangeMoldEndTime == entity.ChangeMoldEndTime) // 如果标记为1则更新机器开始时间为当前时间 .SetColumnsIF(entity.Flag == 1, s => s.MaStartTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) .SetColumnsIF(entity.Flag == 1 && vWom.WGSJ.Value < DateTime.Now, s => s.ChangeMoldStartTime == vWom.WGSJ.Value.ToString("yyyy-MM-dd HH:mm:ss")) // 根据ID匹配记录 .Where(s => s.Id == entity.Id) // 执行更新并判断影响行数是否大于0 .ExecuteCommand() > 0; } /// /// 更新机器时间并处理首检/重送检 /// /// /// 工单状态实体,包含机器时间信息 /// Flag:1 = 首次送检呼叫;2 = 首检不合格后重新送检;其它值仅更新时间不触发首检单创建 /// /// 更新是否成功 public bool ChangeMachineTime(MesOrderSta entity) { var womdaa = Db.Queryable() .Where(s => s.Id == entity.OrderId).First(); if (womdaa == null) throw new Exception("工单不存在"); // ================== 首次送检处理(Flag == 1)================== if (entity.Flag == 1) { // 幂等:先查是否已有未作废的首检单(避免重复生成) var existsFirst = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .Any(); if (!existsFirst) { // 行级锁防并发(Oracle FOR UPDATE) Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE", new SugarParameter("BILL_NO", womdaa.Daa001)); // 二次确认 existsFirst = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .Any(); if (!existsFirst) { // 调用存储过程生成首检单 Db.Ado.ExecuteCommand( "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;", new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String)); } // 再次查询新生成的首检单 var newLatest = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); // 存储过程未生成 → 兜底 C# 自动生成 if (newLatest == null) { Console.WriteLine("[送检] 存储过程未生成,执行 C# 兜底逻辑"); var fallback = mesQaItemsDetect02Manager.AutomaticIpqcFirstCheck(womdaa.Daa001); if (fallback) { newLatest = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); } } } // 统一更新最新首检备注 var latestFirst = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); if (latestFirst != null) { var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var remark = $"工控机于{ts}自动创建的首检单"; Db.Updateable() .SetColumns(s => s.Remeke == remark) .Where(s => s.Id == latestFirst.Id) .ExecuteCommand(); } } // ================== 不合格后重新送检(Flag == 2)================== else if (entity.Flag == 2) { // 1.加锁防并发(行级锁) Db.Ado.ExecuteCommand( "SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE", new SugarParameter("BILL_NO", womdaa.Daa001)); // 2. 当前最新未作废首检单 var latestFirst = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); bool needReCreate = false; /* 3. 判断是否需要重新生成首检单 • 如果最新首检单存在且结果为“不合格”或“NG”,则需要重建首检单。 • 如果没有活动首检单,但存在已作废的不合格首检记录,也允许重建。 */ if (latestFirst != null) { var resu = latestFirst.FcheckResu?.Trim(); if (!string.IsNullOrEmpty(resu) && (resu == "不合格" || resu.Equals("NG", StringComparison.OrdinalIgnoreCase))) { needReCreate = true; } } else { // 4. 没有活动首检单,判断是否存在已作废的不合格首检记录 var existsCanceledNg = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && s.Fcancel == "Y" && (s.FcheckResu == "不合格" || s.FcheckResu == "NG")) .Any(); if (existsCanceledNg) { needReCreate = true; Console.WriteLine("[重送检] 无活动首检单但存在作废的不合格记录,允许重建"); } } if (needReCreate) { // 作废当前活动不合格单 if (latestFirst != null) { Db.Updateable() .SetColumns(s => s.Fcancel == "Y") .Where(s => s.Id == latestFirst.Id && (s.Fcancel == null || s.Fcancel != "Y")) .ExecuteCommand(); } bool procOk = true; string procErr = ""; try { // 5. 调用存储过程生成新首检单 Db.Ado.ExecuteCommand( "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;", new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String)); } catch (Exception ex) { procOk = false; procErr = ex.Message; Console.WriteLine($"[重送检] 存储过程异常: {procErr}"); } // 再次查询新生成的首检单 var newLatest = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); // 存储过程未生成 → 兜底 C# 自动生成 if (newLatest == null) { Console.WriteLine("[重送检] 存储过程未生成,执行 C# 兜底逻辑"); var fallback = mesQaItemsDetect02Manager.AutomaticIpqcFirstCheck(womdaa.Daa001); if (fallback) { newLatest = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); } } //6. 新首检单生成后,写入备注 var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //只有开工状态下可以暂停工单 //当首检结果为‘合格’、‘不合格’时,更新备注 if (newLatest != null && newLatest.FcheckResu == "合格") { var remark = $"工控机于{ts}取消暂停重新送检生成的首检单"; Db.Updateable() .SetColumns(s => s.Remeke == remark) .Where(s => s.Id == newLatest.Id) .ExecuteCommand(); } else if (newLatest != null && newLatest.FcheckResu == "不合格") { var remark = $"工控机于{ts}不合格重新送检生成的首检单"; Db.Updateable() .SetColumns(s => s.Remeke == remark) .Where(s => s.Id == newLatest.Id) .ExecuteCommand(); } else { Console.WriteLine("[重送检] 仍未生成新首检单,请检查存储过程计数是否排除作废单。"); } } } // ========= 首检不合格清空送检时间处理(Flag != 2 时才清空;并生成统一 remark) ========= string remarkToSet = null; // 最终要写入 MES_ORDER_STA.remark 的内容 var clearMaShoutTime = false; // 是否需要真正写 null 清空送检时间 if (entity.Flag == 1) { // 首次送检提交 if (!string.IsNullOrEmpty(entity.MaShoutTime)) remarkToSet = $"于{entity.MaShoutTime}时间有一次送检"; } else if (entity.Flag == 2) { // 不合格重新送检(不清空送检时间,由前端可能覆盖为新时间) if (!string.IsNullOrEmpty(entity.MaShoutTime)) remarkToSet = $"于{entity.MaShoutTime}时间不合格重新送检"; } // 非重新送检场景(Flag!=2)才检查是否需要因“不合格”清空送检时间 if (entity.Flag != 2) { var latestFirstCheck = Db.Queryable() .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "首检" && (s.Fcancel == null || s.Fcancel != "Y")) .OrderBy(s => s.CreateDate, OrderByType.Desc) .First(); if (latestFirstCheck != null && latestFirstCheck.FcheckResu == "不合格") { entity.MaShoutTime = null; // 置空实体(后面更新时使用) clearMaShoutTime = true; remarkToSet = "首检不合格,送检时间已清空,请重新送检呼叫生成新的首检单"; } } // ========= 首检不合格清空送检时间处理结束 ========= // ================== 采集数/锚点 Anchors 处理 ================== var mesReporting = Db.Queryable() .Where(s => s.BillNo == womdaa.Daa001) .OrderByDescending(s => s.Id) .First(); var editDate = DateTime.Now.ToString("yyyy-MM-dd"); // 发送HTTP请求刷新设备采集数据(失败不阻断后续) MesNumericalBycl mesNumerical = null; try { using (var httpClient = new HttpClient()) { httpClient.Timeout = TimeSpan.FromSeconds(30); var content = new StringContent( JsonConvert.SerializeObject(new { machineNo = entity.MachineNo }), Encoding.UTF8, "application/json"); var response = httpClient .PostAsync("http://192.168.0.94:9095/Numerical/RefreshDevBycl", content) .GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { var responseString = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); var responseObj = JsonConvert.DeserializeObject(responseString); if (responseObj != null && responseObj.code == 200) { mesNumerical = Db.Queryable() .Where(s => s.EditDate == editDate && s.MachineNo == entity.MachineNo) .OrderByDescending(s => s.Id) .First(); } } } } catch (Exception ex) { Console.WriteLine($"发送数据刷新请求时出错: {ex.Message}"); } // 删除并重建当日锚点记录 Db.Deleteable() .Where(a => a.EditDate == editDate && a.OrderId == womdaa.Id) .ExecuteCommand(); MesAnchors eAnchors = new MesAnchors { OrderId = womdaa.Id, OrderNo = womdaa.Daa001, EditDate = editDate, Qty = mesReporting == null ? 0 : (long?)(mesReporting.DyQty ?? 0), InitialValue = mesNumerical == null ? 0 : mesNumerical.CjNum }; Db.Insertable(eAnchors).ExecuteCommand(); // ================== 首检合格 -> 自动调机完成 + 写入开工时间 ================== if (!clearMaShoutTime && !string.IsNullOrEmpty(entity.MaShoutTime)) // 未被清空的前提下才判断合格逻辑 { if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) && DateTime.TryParse(entity.MaStartTime, out var startTime)) { if (sjTime >= startTime) { var sjRecord = Db.Queryable() .Where(x => x.Aufnr == womdaa.Daa001 && x.Ftype == "首检" && (x.Fcancel == null || x.Fcancel != "Y")) .OrderBy(x => x.CreateDate, OrderByType.Desc) .First(); if (sjRecord != null && sjRecord.FcheckResu == "合格") { QualifiedInspection(new OrderMachineDto { OrderId = entity.OrderId, orderNo = entity.OrderNo, machineNo = entity.MachineNo }); // 将送检时间写入开工时间 entity.StartTime = entity.MaShoutTime; entity.MaEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 若之前 remark 是“送检”可继续沿用;不强制覆盖 } } } } // ================== 最终更新 MES_ORDER_STA ================== return Db.Updateable() // 送检时间更新:若需要清空则明确赋 null;否则当有值时更新 .SetColumnsIF(clearMaShoutTime, s => s.MaShoutTime == null) .SetColumnsIF(!clearMaShoutTime && entity.MaShoutTime != null, s => s.MaShoutTime == entity.MaShoutTime) // 调机开始时间 .SetColumnsIF(entity.MaStartTime != null, s => s.MaStartTime == entity.MaStartTime) // 调机完成时间 .SetColumnsIF(entity.MaEndTime != null, s => s.MaEndTime == entity.MaEndTime) // 开工时间 .SetColumnsIF(entity.StartTime != null, s => s.StartTime == entity.StartTime) // 统一备注(由前面逻辑确定) .SetColumnsIF(!string.IsNullOrEmpty(remarkToSet), s => s.remark == remarkToSet) // 过滤当前记录 .Where(s => s.Id == entity.Id) .ExecuteCommand() > 0; } /// /// 初始化工单状态 /// /// 包含工单信息的查询条件 /// 初始化是否成功 public bool init(OrderMachineDto query) { // 查询是否已存在该工单的状态记录 var count = Db.Queryable() .Where(s => s.OrderId == query.OrderId).Count(); // 如果已存在则返回true if (count > 0) return true; // 创建新的工单状态记录 var mesOrderSta = new MesOrderSta { OrderId = query.OrderId.Value, OrderNo = query.orderNo, MachineNo = query.machineNo, StartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; // 插入新记录 return Insert(mesOrderSta); } /// /// 绑定工单到机器 /// /// 工单状态实体,包含机器编号等信息 /// 绑定是否成功 public bool Binding(MesOrderSta entity) { // 验证ID是否有效 if (entity.Id <= 0) return true; // 验证机器编号是否为空 if (string.IsNullOrEmpty(entity.MachineNo)) return false; // 将该机器上其他显示的工单状态设为不显示 var executeCommand = Db.Updateable() .SetColumns(s => s.IsShow == 0) .Where(s => s.IsShow == 1 && s.MachineNo == entity.MachineNo) .ExecuteCommand(); // 将当前工单状态设为显示 var sql = "UPDATE MES_ORDER_STA SET IS_SHOW = 1 WHERE ID = " + entity.Id; executeCommand += Db.Ado.ExecuteCommand(sql); // 判断是否至少有一条记录被更新 return executeCommand >= 1; } /// /// 更新工单时间和状态 /// /// 工单状态实体,包含时间和状态信息 /// 更新是否成功 public bool UpdateTime(MesOrderSta entity) { // 验证ID是否有效 if (entity.Id <= 0) return true; // 验证机器编号是否为空 if (string.IsNullOrEmpty(entity.MachineNo)) return false; var executeCommand = 0; // 使用事务处理更新操作 executeCommand += UseTransaction(db => { // 根据标记获取对应的状态文本 var daa018 = entity.Flag switch { 0 => "开工", 1 => "完工", // 这里将daa018设置为完工 2 => "暂停", 3 => "未开工", _ => "" }; // 如果状态无效则返回0 if ("".Equals(daa018)) return 0; var date = DateTime.Now.ToString("yyyy-MM-dd"); // 查询当前机器上的工单选择记录 var list = Db.Queryable() .Where(a => a.MachineNo == entity.MachineNo && a.EditDate == date && a.IsShow == 0).ToList(); // 获取工单ID列表 var orderIds = list.Select(s => s.OrderId).ToList(); // 初始化每个工单的状态 list.ForEach(s => { var query = new OrderMachineDto { OrderId = s.OrderId, orderNo = s.OrderNo, machineNo = s.MachineNo }; init(query); }); var updateable = 0; var endDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 根据不同状态执行相应的处理 switch (daa018) { case "开工": // 开工时绑定工单 Binding(entity); break; case "暂停": foreach (var orderId in orderIds) { var womdaa = db.Queryable() .Where(s => s.Id == orderId).First(); var btnLog = new MesWorkorderBtnLog { WorkNo = womdaa.Daa001, BtnType = "工控暂停工单", BtnDate = DateTime.Now }; db.Insertable(btnLog) .ExecuteCommand(); updateable += db.Updateable() .SetColumns(s => s.Daa018 == daa018) .SetColumnsIF("暂停".Equals(daa018), s => s.Daa034 == DateTime.Now) .Where(s => s.Id == orderId).ExecuteCommand(); db.Updateable() .SetColumns(a => a.IsShow == 1) .Where(a => a.OrderId == orderId) .ExecuteCommand(); //更新工单状态表 db.Updateable() .SetColumns(a => a.IsShow == 0) .SetColumns(a => a.SuspendTime == endDate) .Where(a => a.OrderId == orderId) .ExecuteCommand(); } break; case "完工": { // 更新工单选择表显示状态 // Db.Updateable() // .SetColumns(a => a.IsShow == 1) // .Where(a => orderIds.Contains(a.OrderId)) // .ExecuteCommand(); // 更新工单状态表 // Db.Updateable() // .SetColumns(a => a.IsShow == 0) // .SetColumns(a => a.EndTime == endDate) // .Where(a => orderIds.Contains(a.OrderId)) // .ExecuteCommand(); // 处理每个工单的报工数据 foreach (var orderId in orderIds) { // 查询工单主表信息 var womdaa = Db.Queryable() .Where(s => s.Id == orderId).First(); //当已生成数不等于完工数是就跳过 if (womdaa.Daa008 > womdaa.Daa011) { updateable += 1; continue; } var btnLog = new MesWorkorderBtnLog { WorkNo = womdaa.Daa001, BtnType = "工控自动完工", BtnDate = DateTime.Now }; db.Insertable(btnLog) .ExecuteCommand(); // 更新工单主表状态 - 这里将Womdaa表的daa018更新为完工状态 updateable = db.Updateable() .SetColumns(s => s.Daa018 == daa018) .SetColumnsIF("完工".Equals(daa018), s => s.Daa017 == DateTime.Now) .SetColumnsIF("暂停".Equals(daa018), s => s.Daa034 == DateTime.Now) .Where(s => s.Id == orderId).ExecuteCommand(); // Db.Deleteable() // .Where(a => a.OrderId == orderId) // .ExecuteCommand(); // // Db.Deleteable() // .Where(a => a.OrderId == orderId) // .ExecuteCommand(); //更新工单选择表显示状态 db.Updateable() .SetColumns(a => a.IsShow == 1) .Where(a => a.OrderId == orderId) .ExecuteCommand(); //更新工单状态表 db.Updateable() .SetColumns(a => a.IsShow == 0) .SetColumns(a => a.EndTime == endDate) .Where(a => a.OrderId == orderId) .ExecuteCommand(); // 查询已报工数量 var reporting = db.Queryable() .Where(s => s.BillNo == womdaa.Daa001) .Select(s => new MesReporting { OkQty = SqlFunc.AggregateSum(s.OkQty), BfQty = SqlFunc.AggregateSum(s.BfQty) }).First(); reporting.OkQty ??= 0; reporting.BfQty ??= 0; // 查询工单视图信息 // var vOrder = db.Queryable() // .Where(s => s.ID == orderId).First(); // 计算待报工数量 // var reportingOkQty = // Convert.ToDecimal(vOrder.todayOutput) - // reporting.OkQty; var CjQty = Db.Queryable() .Where(s => s.MachineNo == entity.MachineNo && s.EditDate == date) .OrderByDescending(s => s.CjTiem) .Select(s => s.CjNum).First(); // 计算待报工数量 var reportingOkQty = CjQty - reporting.OkQty; // 如果有待报工数量则创建报工记录 if (!(reportingOkQty > 0)) continue; var mesReporting = new MesReporting { CheckType = 1, BgDate = DateTime.Now, AddressCode = womdaa.AddressCode, MachineNo = womdaa.MachineNo, // BfQty = reportingOkQty, BfQty = 0, BlQty = reportingOkQty, OkQty = 0, ItemNo = womdaa.Daa002, BillNo = womdaa.Daa001, CjQty = CjQty, DyQty = reporting.OkQty }; // 插入报工记录 db.Insertable(mesReporting) .IgnoreColumns(true).ExecuteCommand(); } break; } } // 判断更新是否成功 if (updateable >= 1) return updateable; throw new Exception("工单状态更新错误"); }); return executeCommand >= 1; } /// /// 检查工单状态是否允许操作 /// /// 包含工单信息和操作标识的查询条件 /// 是否允许操作 public bool StateCheck(OrderMachineDto query) { // 查询工单视图信息 var vOrder = Db.Queryable() .Where(s => s.ID == query.OrderId).First(); // 根据不同操作标识进行检查 switch (query.Flag) { case 0: // 开工检查 vOrder.BGQTY ??= 0; // 判断是否已完工 if (vOrder.Daa008 > vOrder.BGQTY) return true; throw new Exception("当前工单已经完工,不允许再开工"); case 1: // 完工检查 return true; case 2: // 暂停检查 // 判断是否处于开工状态 if (!"开工".Equals(vOrder.Daa018)) throw new Exception("只有开工状态下才允许暂停"); return true; case 3: // 反完工检查 // 判断是否处于完工状态 if (!"完工".Equals(vOrder.Daa018)) throw new Exception("只有完工状态下才允许反完工"); return true; default: return false; } } /// /// 检验合格时更新工单状态 /// /// 包含工单信息的查询条件 /// 更新是否成功 public bool QualifiedInspection(OrderMachineDto query) { var endDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 查询工单主表信息 var womdaa = Db.Queryable() .Where(s => s.Id == query.OrderId).First(); // 根据是否有首检时间更新不同的字段 if (!womdaa.Daa016.HasValue) // 首次首检更新 Db.Updateable() .SetColumns(s => s.Daa018 == "开工") .SetColumns(s => s.Daa022 == 1) .SetColumns(s => s.Daa016 == DateTime.Now) .SetColumns(s => s.Daa032 == DateTime.Now) .Where(s => s.Id == query.OrderId).ExecuteCommand(); else // 非首次首检更新 Db.Updateable() .SetColumns(s => s.Daa018 == "开工") .SetColumns(s => s.Daa022 == 1) .SetColumns(s => s.Daa032 == DateTime.Now) .Where(s => s.Id == query.OrderId).ExecuteCommand(); // 查询工单状态信息 var entity = Db.Queryable() .Where(s => s.OrderId == query.OrderId).First(); // 绑定工单并更新时间 var binding = Binding(entity); var btnLog = new MesWorkorderBtnLog { WorkNo = womdaa.Daa001, BtnType = "工控首检开工", BtnDate = DateTime.Now }; Db.Insertable(btnLog).ExecuteCommand(); if (binding) return Db.Updateable() .SetColumns(s => s.MaEndTime == endDate) // 自动写入调机完成时间 .SetColumns(s => s.StartTime == entity.MaShoutTime) .Where(s => s.OrderId == query.OrderId).ExecuteCommand() > 0; return false; } /// /// 检验不合格时清空首检时间 /// /// 包含工单信息的查询条件 /// 清空是否成功 public bool InspectionIsUnqualified(OrderMachineDto query) { // 清空工单状态表的送检时间 return Db.Updateable() .SetColumns(s => s.MaShoutTime == null) .Where(s => s.OrderId == query.OrderId).ExecuteCommand() > 0; } /// /// 完工检查 /// /// 包含工单信息的查询条件 /// 完工处理是否成功 public bool Completed(OrderMachineDto query) { // 查询工单状态信息 var entity = Db.Queryable() .Where(s => s.OrderId == query.OrderId).First(); // 设置完工标记 entity.Flag = 1; // 更新工单时间和状态 return UpdateTime(entity); } }