xu.lu 1 year ago
parent
commit
67c612c0bf

+ 1 - 1
ServiceCenter/Extensions/SqlExtension.cs

@@ -35,7 +35,7 @@ namespace ServiceCenter.Extensions
         /// <returns></returns>
         public static ISugarQueryable<T> UpdLock<T>(this ISugarQueryable<T> obj)
         {
-            return obj.With("WITH(ROWLOCK,UPDLOCK)");
+            return obj.With("WITH(ROWLOCK)");
         }
 
         /// <summary>

+ 63 - 63
YWGC/FJK/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -232,23 +232,23 @@ namespace WCS.WorkEngineering.Systems
 
                                                 agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && positionList.Contains(v.Station))
                                                     .SplitTable(v => v.Take(2)).ToList();
-                                                //agvsAll = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && allPositionList.Contains(v.Station))
-                                                //    .SplitTable(v => v.Take(2)).ToList();
-                                                //agvsNear = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && nearPositionList.Contains(v.Station))
-                                                //    .SplitTable(v => v.Take(2)).ToList();
+                                                agvsAll = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && allPositionList.Contains(v.Station))
+                                                    .SplitTable(v => v.Take(2)).ToList();
+                                                agvsNear = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && nearPositionList.Contains(v.Station))
+                                                    .SplitTable(v => v.Take(2)).ToList();
                                                 //获取放货点
                                                 var agvPositionLists = agvs.Select(x => x.Station).Distinct();
-                                                //var agvPositionListsNear = agvsNear.Select(x => x.Station).Distinct();
-                                                //var agvPositionListsAll = agvsAll.Select(x => x.Station).Distinct();
+                                                var agvPositionListsNear = agvsNear.Select(x => x.Station).Distinct();
+                                                var agvPositionListsAll = agvsAll.Select(x => x.Station).Distinct();
                                                 //获取各区域可用点
                                                 var endDev = positionList.Where(x => !agvPositionLists.Contains(x)).ToList();
-                                                //var endNearDev = nearPositionList.Where(x => !agvPositionListsNear.Contains(x)).ToList();
-                                                //var endAllDev = allPositionList.Where(x => !agvPositionListsAll.Contains(x)).ToList();
+                                                var endNearDev = nearPositionList.Where(x => !agvPositionListsNear.Contains(x)).ToList();
+                                                var endAllDev = allPositionList.Where(x => !agvPositionListsAll.Contains(x)).ToList();
 
                                                 World.Log($"agv可用巷道信息:{JsonConvert.SerializeObject(endDev)}");
                                                 //World.Log($"agv可用巷道信息(所有):{JsonConvert.SerializeObject(endAllDev)}");
 
-                                                if (!endDev.Any()/* && !endAllDev.Any() && !endNearDev.Any()*/)//没有可用放货站台
+                                                if (!endDev.Any() && !endAllDev.Any() && !endNearDev.Any())//没有可用放货站台
                                                 {
                                                     var msg = "已无可用放货站台,任务正在执行中:";
                                                     foreach (var ag in agvs)
@@ -269,63 +269,63 @@ namespace WCS.WorkEngineering.Systems
                                                         !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
                                                         x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
 
-                                                    //var devsNear = Device.All.Where(x => endNearDev.Contains(x.Code)).Select(x =>
-                                                    //    new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    //devsNear = devsNear.Where(x =>
-                                                    //    !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                    //    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                    //    x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
+                                                    var devsNear = Device.All.Where(x => endNearDev.Contains(x.Code)).Select(x =>
+                                                        new Device<IStation520, IStation521, IStation523>(x, World));
+                                                    devsNear = devsNear.Where(x =>
+                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
 
-                                                    //var devsAll = Device.All.Where(x => endAllDev.Contains(x.Code)).Select(x =>
-                                                    //    new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    //devsAll = devsAll.Where(x =>
-                                                    //    !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                    //    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                    //    x.Data3.Status.HasFlag(StationStatus.Auto)).OrderBy(v => allPositionList.Contains(v.Entity.Code)).ToList();
+                                                    var devsAll = Device.All.Where(x => endAllDev.Contains(x.Code)).Select(x =>
+                                                        new Device<IStation520, IStation521, IStation523>(x, World));
+                                                    devsAll = devsAll.Where(x =>
+                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).OrderBy(v => allPositionList.Contains(v.Entity.Code)).ToList();
                                                     if (!devs.Any()) //自身所属位置无可用放货点
                                                     {
-                                                        throw new Exception($"当前任务{agv.ID}无可用站台");
+                                                        //throw new Exception($"当前任务{agv.ID}无可用站台");
                                                         #region  弃用
-                                                        //if (devsNear.Any())//先判断同库一侧
-                                                        //{
-                                                        //    foreach (var dev in devsNear)
-                                                        //    {
-                                                        //        if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
-                                                        //        {
-                                                        //            World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
-                                                        //            agv.Status = AGVTaskStatus.Complete1;
-                                                        //            agv.Station = dev.Entity.Code;
-                                                        //            db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                        //            World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                        //            task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                        //            World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                        //            AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                        //            World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                        //            return;
-                                                        //        }
-                                                        //    }
-                                                        //}
-                                                        //else if (devsAll.Any())
-                                                        //{
-                                                        //    foreach (var dev in devsAll)
-                                                        //    {
-                                                        //        if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
-                                                        //        {
-                                                        //            World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
-                                                        //            agv.Status = AGVTaskStatus.Complete1;
-                                                        //            agv.Station = dev.Entity.Code;
-                                                        //            db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                        //            World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                        //            task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                        //            World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                        //            AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                        //            World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                        //            return;
-                                                        //        }
-                                                        //    }
-                                                        //}
-                                                        //World.Log("可用站台均有货或有执行中任务");
-                                                        //return;
+                                                        if (devsNear.Any())//先判断同库一侧
+                                                        {
+                                                            foreach (var dev in devsNear)
+                                                            {
+                                                                if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
+                                                                {
+                                                                    World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
+                                                                    agv.Status = AGVTaskStatus.Complete1;
+                                                                    agv.Station = dev.Entity.Code;
+                                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
+                                                                    return;
+                                                                }
+                                                            }
+                                                        }
+                                                        else if (devsAll.Any())
+                                                        {
+                                                            foreach (var dev in devsAll)
+                                                            {
+                                                                if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) && dev.Data3.Status.HasFlag(StationStatus.Auto))
+                                                                {
+                                                                    World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
+                                                                    agv.Status = AGVTaskStatus.Complete1;
+                                                                    agv.Station = dev.Entity.Code;
+                                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
+                                                                    return;
+                                                                }
+                                                            }
+                                                        }
+                                                        World.Log("可用站台均有货或有执行中任务");
+                                                        return;
                                                         #endregion
                                                     }
                                                     World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devs.Select(x => x.Entity.Code).ToList())}");
@@ -340,7 +340,7 @@ namespace WCS.WorkEngineering.Systems
                                                 }
                                                 catch (Exception e)
                                                 {
-                                                    throw new Exception($"执行错误:{e.Message + e.StackTrace}");
+                                                    throw new Exception($"{e.Message}");
                                                 }
                                             }
                                             else if (task.BusType == TaskBusType.帘线退料重绕.GetDescription())

+ 34 - 81
YWGC/FJK/WCS.WorkEngineering/Systems/UpLoadSystems.cs

@@ -27,123 +27,76 @@ public class UpLoadSystems : DeviceSystem<Device<IStation520>>
         //更新出库放货完成状态
         SqlSugarHelper.Do(_db =>
         {
+            var taskIdList = new List<WCS_TaskInfo>();
             var nowTime = DateTime.Now;
 
             var db = _db.Default;
-            var taskList = db.Queryable<WCS_TaskInfo>().RowLock().Where(x =>
-                x.Uploaded != TaskStatus.ConveyorExecution && x.Status == TaskStatus.StackerCompleted &&
-                x.Type == TaskType.OutDepot).ToList();
+            var taskList = db.Queryable<WCS_TaskInfo>().UpdLock().Where(x => x.Uploaded != TaskStatus.ConveyorExecution && x.Status == TaskStatus.StackerCompleted && x.Type == TaskType.OutDepot).ToList();
 
-            WCS_TaskInfo taskNow = null;
+            var isEnd = false;
 
-            // 1. 遍历任务列表,处理任务完成状态
+            //一次就同步一条数据即可
             foreach (var task in taskList)
             {
-                var res = WmsApi.SrmPickOutCompleted(task.ID);
+                if (isEnd) continue;
 
+                var res = WmsApi.SrmPickOutCompleted(task.ID);
                 if (res.ResCode == ResponseStatusCodeEnum.Sucess)
                 {
-                    taskNow = task; // 记录成功的任务
-                    break; // 只需要成功处理一个任务,跳出循环
+                    taskIdList.Add(task); //更新成功
+                    isEnd = true;
                 }
-
-                World.Log($"出库放货完成状态同步失败: 任务ID {task.ID}, 错误信息: {res.ResMsg}");
+                World.Log($"出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
             }
 
-            // 2. 更新任务状态并记录日志,仅当 taskOld 不为 null 时才执行
-            taskNow.Uploaded = TaskStatus.ConveyorExecution;
-            taskNow.Status = TaskStatus.ConveyorExecution;
-            taskNow.EditTime = nowTime;
-            try
-            {
-                // 使用行锁和分表更新,防止锁表
-                db.Updateable(taskNow).UpdateColumns(x => new { x.Uploaded, x.EditTime, x.Status }).ExecuteCommand();
-                // 记录任务详细日志
-                taskNow.AddWCS_TASK_DTL(db, "", "同步出库任务放货完成状态同步至WMS");
-            }
-            catch (Exception ex)
+            //拆分防止锁表
+            foreach (var task in taskIdList)
             {
-                World.Log($"任务ID {taskNow.ID} 出库放货完成状态同步失败,错误信息: {ex.Message}");
+                task.Uploaded = TaskStatus.ConveyorExecution;
+                task.Status = TaskStatus.ConveyorExecution;
+                task.EditTime = nowTime;
+                db.UpdateableRowLock(task).UpdateColumns(x => new { x.Uploaded, x.EditTime, x.Status }).ExecuteCommand();
+                task.AddWCS_TASK_DTL(db, "", $"同步出库任务放货完成状态同步至WMS");
             }
-
-            var isEnd = false;
-
-            ////一次就同步一条数据即可
-            //foreach (var task in taskList)
-            //{
-            //    if (isEnd) continue;
-
-            //    var res = WmsApi.SrmPickOutCompleted(task.ID);
-            //    if (res.ResCode == ResponseStatusCodeEnum.Sucess)
-            //    {
-            //        taskIdList.Add(task); //更新成功
-            //        isEnd = true;
-            //    }
-
-            //    World.Log($"出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
-            //}
-
-            ////拆分防止锁表
-            //foreach (var task in taskIdList)
-            //{
-            //    task.Uploaded = TaskStatus.ConveyorExecution;
-            //    task.Status = TaskStatus.ConveyorExecution;
-            //    task.EditTime = nowTime;
-            //    db.UpdateableRowLock(task).UpdateColumns(x => new { x.Uploaded, x.EditTime, x.Status })
-            //        .ExecuteCommand();
-            //    task.AddWCS_TASK_DTL(db, "", "同步出库任务放货完成状态同步至WMS");
-            //}
-
         });
 
         //环形库组盘任务/立库入库任务/二楼立库出库//芯股叫料 更新完成
         SqlSugarHelper.Do(_db =>
         {
+            var taskIdList = new List<WCS_TaskOld>();
             var nowTime = DateTime.Now;
             var db = _db.Default;
-            var taskList = db.Queryable<WCS_TaskOld>().RowLock()
+            var taskList = db.Queryable<WCS_TaskOld>().UpdLock()
                 .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R"))
-                             || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) &&
-                                 !x.WarehouseCode.Contains("R"))
-                             || (x.Type == TaskType.EnterDepot && x.WarehouseCode.Contains("CRZP"))
-                             || (x.Type == TaskType.OutDepot && x.Device == "CR")
-                             || (x.Type == TaskType.OutDepot && x.AddrFrom.Contains("NSTJ") &&
-                                 x.AddrTo.Contains("NSTJ")))
-                            && x.Status == TaskStatus.Finish && x.Uploaded != TaskStatus.Finish)
+                            || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) && !x.WarehouseCode.Contains("R"))
+                            || (x.Type == TaskType.EnterDepot && x.WarehouseCode.Contains("CRZP"))
+                            || (x.Type == TaskType.OutDepot && x.Device == "CR")
+                            || (x.Type == TaskType.OutDepot && x.AddrFrom.Contains("NSTJ") && x.AddrTo.Contains("NSTJ")))
+                           && x.Status == TaskStatus.Finish && x.Uploaded != TaskStatus.Finish)
                 .SplitTable(x => x.Take(2)).ToList();
 
-            WCS_TaskOld taskOld = null;
-
-            // 1. 遍历任务列表,处理任务完成状态
+            var isEnd = false;
             foreach (var task in taskList)
             {
+                if (isEnd) continue;
                 var res = WmsApi.CompleteTask(task.Id);
-
                 if (res.ResCode == ResponseStatusCodeEnum.Sucess)
                 {
-                    taskOld = task; // 记录成功的任务
-                    break; // 只需要成功处理一个任务,跳出循环
+                    taskIdList.Add(task);
+                    isEnd = true;
                 }
-
-                World.Log($"入库完成状态同步失败: 任务ID {task.Id}, 错误信息: {res.ResMsg}");
+                World.Log($"入库完成状态同步失败:{task.Id}[{res.ResMsg}]");
             }
 
-            // 2. 更新任务状态并记录日志,仅当 taskOld 不为 null 时才执行
-            taskOld.Uploaded = TaskStatus.Finish;
-            taskOld.EditTime = nowTime;
-            try
+            //拆分防止锁表
+            foreach (var task in taskIdList)
             {
-                // 使用行锁和分表更新,防止锁表
-                db.Updateable(taskOld).SplitTable(x => x.Take(2)).ExecuteCommand();
-                // 记录任务详细日志
-                taskOld.AddWCS_TASK_DTL(db, "", "同步入库完成状态同步至WMS");
-            }
-            catch (Exception ex)
-            {
-                World.Log($"任务ID {taskOld.Id} 入库完成状态同步失败,错误信息: {ex.Message}");
+                task.Uploaded = TaskStatus.Finish;
+                task.EditTime = nowTime;
+                db.UpdateableRowLock(task).SplitTable(x => x.Take(2)).ExecuteCommand();
+                task.AddWCS_TASK_DTL(db, "", $"同步入库完成状态同步至WMS");
             }
         });
-
         ////立库二楼出库更新完成
         //SqlSugarHelper.Do(_db =>
         //{

+ 1 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -340,7 +340,7 @@ namespace WCS.WorkEngineering.Systems
                         v.Data4.Type
                     }).ToList();
                     //两个工位同时码垛,并不会一个执行一次,只有一个托盘任务全部执行完毕,才会继续执行下一个,先生成任务的码垛工位会优先执行
-                    var taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(v =>
+                    var taskInfos = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(v =>
                             (v.Status == TaskStatus.WaitingToExecute || v.Status == TaskStatus.ConveyorExecution) &&
                             v.Type == TaskType.OutDepot && v.Device == obj.Entity.Code)
                         .ToList().Where(v => allOutCode.Any(x => v.SrmStation == x.Code && v.PalletType == x.Type))

+ 9 - 9
YWGC/FJK/WCS.WorkEngineering/Systems/重绕区/扫码位分配.cs

@@ -60,18 +60,18 @@ namespace WCS.WorkEngineering.Systems.重绕区
             var devs = Device.All.Where(x => stations.Contains(x.Code)).Select(x =>
                                                     new Device<IStation520, IStation521, IStation523>(x, World));
             devs = devs.Where(x => targetStations.Contains(x.Data2.GoodsEnd.ToString())).ToList();
-            short next = 9136;//9147;
+            short next = 9125;//9147;
             var num_9125 = devs.Count(x => x.Data2.GoodsEnd.ToString() == "9125");
             var num_9136 = devs.Count(x => x.Data2.GoodsEnd.ToString() == "9136");
             var num_9147 = devs.Count(x => x.Data2.GoodsEnd.ToString() == "9147");
-            if (devs.Count() == 0)
-            {
-                next = 9136;
-            }
-            else
-            {
-                next = num_9136 <= num_9125 ? num_9136.ToShort() : num_9125.ToShort();//ComputeAddto(num_9125, num_9136, num_9147);
-            }
+            //if (devs.Count() == 0)
+            //{
+            //    next = 9136;
+            //}
+            //else
+            //{
+            //    next = num_9136 <= num_9125 ? num_9136.ToShort() : num_9125.ToShort();//ComputeAddto(num_9125, num_9136, num_9147);
+            //}
 
 
             obj.Data.TaskNumber = obj.Entity.Code.ToShort();

+ 1 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/重绕区/扫码入库.cs

@@ -107,7 +107,7 @@ namespace WCS.WorkEngineering.Systems.重绕区
 
         public override bool Select(Device dev)
         {
-            return dev.Code is "9125" or "9136";
+            return dev.Code is "9125";
         }
     }
 }