Эх сурвалжийг харах

添加 UpdateWhereColumns 方法并优化查询逻辑

在 `SqlExtension.cs` 文件中添加了 `System.Linq.Expressions` 的引用,并新增了 `UpdateWhereColumns` 方法以支持通过指定列和条件更新数据。
在 `NoInteractionSystems.cs` 文件中,修改了查询 `WCS_TaskInfo` 的逻辑,使用 `NoLock` 替代 `ReadPastUpdLock`,并增加了 `BarCode` 不包含 "Error" 的判断;在查询单个任务时,增加了 `RowLock` 并添加了任务状态为 `NewBuild` 的条件。
在 `UpLoadSystems.cs` 文件中,修改了日志记录逻辑,增加了一个 `else` 分支来记录出库任务完成同步失败的情况。
林豪 左 1 жил өмнө
parent
commit
afae78c50e

+ 7 - 1
ServiceCenter/Extensions/SqlExtension.cs

@@ -1,4 +1,5 @@
-using SqlSugar;
+using System.Linq.Expressions;
+using SqlSugar;
 
 namespace ServiceCenter.Extensions
 {
@@ -70,6 +71,11 @@ namespace ServiceCenter.Extensions
         /// <returns></returns>
         public static IUpdateable<T> UpdateableRowLock<T>(this SqlSugarScopeProvider scope, T updateObj) where T : class, new() => scope.ScopedContext.Updateable<T>(updateObj).With(SqlWith.RowLock);
 
+        public static bool UpdateWhereColumns<T>(this IUpdateable<T> db, Expression<Func<T, T>> columns,Expression<Func<T, bool>> whereExpression) where T : class, new()
+        {
+            return db.SetColumns(columns).Where(whereExpression).ExecuteCommand() > 0;
+        }
+
         /// <summary>
         ///  更新时使用行级锁
         /// </summary>

+ 3 - 3
YWGC/FJK/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -34,8 +34,8 @@ namespace WCS.WorkEngineering.Systems
             SqlSugarHelper.Do(db =>
             {
                 //获取所有的新建任务,组盘任务不需要
-                taskInfos = db.Default.Queryable<WCS_TaskInfo>().ReadPastUpdLock().Where(x => x.Status == 0).ToList()
-                    .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot") && x.BusType!="芯股用空托盘入库").Select(x => x.ID).ToList();
+                taskInfos = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status == 0).ToList()
+                    .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot") && x.BusType!="芯股用空托盘入库" && !x.BarCode.Contains("Error")).Select(x => x.ID).ToList();
                 var time = DateTime.Now.AddMinutes(-20);
                 var time1 = DateTime.Now.AddMinutes(-40);
                 var timeOut = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);
@@ -72,7 +72,7 @@ namespace WCS.WorkEngineering.Systems
                 {
                     SqlSugarHelper.Do(db =>
                     {
-                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
+                        var task = db.Default.Queryable<WCS_TaskInfo>().RowLock().Where(t => t.ID == item && t.Status== TaskStatus.NewBuild).First();
 
                         switch (task.Type)
                         {

+ 5 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/UpLoadSystems.cs

@@ -46,7 +46,11 @@ public class UpLoadSystems : DeviceSystem<Device<IStation520>>
                     taskIdList.Add(task); //更新成功
                     isEnd = true;
                 }
-                World.Log($"入库任务完成同步:出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
+                else
+                {
+                    World.Log($"出库任务完成同步:出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
+                }
+                
             }
 
             //拆分防止锁表