gkj 2 years ago
parent
commit
c39020384c

+ 1 - 1
WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -137,7 +137,7 @@ namespace WCS.WorkEngineering.Systems
                                 if (agv.AgvStatus == AGVTaskStatus.RequestOrPermission1 && agv.Status != AGVTaskStatus.Complete1)
                                 {
                                     this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID}开始进行巷道分配");
-                                    //向WMS获取巷道优先级
+                                    //向WMS获取巷道优先级'
                                     var res = WmsApi.GetTunnelPriorityList(task.ID);
                                     this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},WMS返回巷道优先级{res.ResData}");
                                     var tunnelNo = res.ResData.Split(",").Select(v => "SRM" + v).ToList();

+ 13 - 6
WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -11,6 +11,7 @@ using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 using WCS.WorkEngineering.Worlds;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using KnownException = ServiceCenter.Logs.KnownException;
 using TaskStatus = WCS.Entity.TaskStatus;
@@ -74,7 +75,7 @@ namespace WCS.WorkEngineering.Systems
                     #region 获取完成任务
 
                     //根据DB521任务号获取对应任务
-                    var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskFinishiId);
+                    var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskFinishiId && v.Device == obj.Entity.Code);
                     if (task == null) throw new KnownException($"堆垛机完成任务号{obj.Data2.TaskFinishiId},在WCS当前任务信息中未找到对应任务。", LogLevelEnum.High);
                     if (task.Status != Entity.TaskStatus.StackerExecution) throw new KnownException($"任务{task.ID}状态是{task.Status.GetDescription()}.堆垛机完成任务需要对应任务状态处于堆垛机执行中", LogLevelEnum.High);
                     //{
@@ -174,7 +175,7 @@ namespace WCS.WorkEngineering.Systems
             SqlSugarHelper.Do(db =>
             {
                 //获取当前堆垛机的所有未完成任务
-                var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Status < Entity.TaskStatus.Finish && (v.Device == obj.Entity.Code));
+                var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Status < Entity.TaskStatus.Finish && v.Device == obj.Entity.Code);
                 //任务集合是否有处于堆垛机执行状态的任务
                 if (tasks.Any(v => v.Status == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevelEnum.High);
 
@@ -284,7 +285,7 @@ namespace WCS.WorkEngineering.Systems
                     //根据有货设备的任务号获取所有类型为入库状态为输送机执行中的任务
                     var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => (v.Type == TaskType.EnterDepot || v.Type == TaskType.EmptyInit)
                                                                               && v.Status == TaskStatus.ConveyorExecution
-                                                                              && arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID));
+                                                                              && arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID) && v.Device == obj.Entity.Code);
                     //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果
                     var task = tasks.OrderByDescending(v => v.Priority).OrderByDescending(v => v.Floor == floor ? 1 : 0).First() ?? throw new KnownException($"{obj.Entity.Code}未找到入库任务", LogLevelEnum.High);
 
@@ -299,7 +300,7 @@ namespace WCS.WorkEngineering.Systems
                     task.EditWho = "WCS";
                     db.Default.Updateable(task).ExecuteCommand();
                     task.AddWCS_TASK_DTL(db, station.Entity.Code, task.AddrTo, "任务下发堆垛机执行");
-                
+
                     taskInfo = task;
                 });
 
@@ -339,6 +340,12 @@ namespace WCS.WorkEngineering.Systems
                                                 && !v.Data3.Status.HasFlag(StatusEunm.UnassignedTask) //未分配任务
                                                 && v.Data3.Status.HasFlag(StatusEunm.Auto)).ToList(); //自动
 
+                //var devs = Device.All.Where(v => v.HasFlag(DeviceFlags.出库, DeviceFlags.巷道口)).Select(v => new Station(v, this.World)).ToList();
+                //var dev = devs.Find(v => v.Entity.Code == "1026");
+                
+
+
+
                 if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid);
 
                 WCS_TaskInfo taskInfo = null;
@@ -348,7 +355,7 @@ namespace WCS.WorkEngineering.Systems
                    var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
 
                    //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
-                   var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
+                   var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute && v.Device == obj.Entity.Code)
                                                                   .Where(v => allOutCode.Contains(v.SrmStation))
                                                                   .OrderByDescending(v => v.Priority)
                                                                   .OrderByDescending(v => v.Floor == floor ? 1 : 0)
@@ -411,7 +418,7 @@ namespace WCS.WorkEngineering.Systems
         public override bool Select(Device dev)
         {
             //return dev.Code == "SRM2";
-            return dev.HasProtocol(typeof(ISRM520));
+            return dev.HasFlag(DeviceFlags.堆垛机);
         }
     }
 }

+ 42 - 19
WCS.WorkEngineering/Systems/一楼入库工位处理系统.cs

@@ -9,6 +9,7 @@ using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
+using TaskStatus = WCS.Entity.TaskStatus;
 
 namespace WCS.WorkEngineering.Systems
 {
@@ -41,30 +42,52 @@ namespace WCS.WorkEngineering.Systems
                 SqlSugarHelper.Do(_db =>
                 {
                     var db = _db.Default;
-                    //获取RFID
-                    var barcode = BCRS.GetBCRCode(obj.Entity.Code);
-                    //跟据RFID获取对应的任务
-                    var taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.BarCode == barcode) ?? throw new KnownException($"未找到RFID:{barcode}对应WCS任务", LogLevelEnum.Mid);
-                    if (taskInfo.Status != Entity.TaskStatus.AGVExecution)
+                    WCS_TaskInfo taskInfo = null;
+                    //判断是否有空轮初始化任务
+                    if (db.Queryable<WCS_TaskInfo>().Count(v => v.Type == TaskType.EmptyInit && v.Status == TaskStatus.WaitingToExecute && v.SrmStation == obj.Entity.Code) > 1)
                     {
-                        if (db.Queryable<WCS_TaskDtl>().SplitTable(v => v.Take(2)).Any(v => v.ParentTaskCode == taskInfo.ID && v.Desc.Contains("等待分配货位后堆垛机进行取货"))) return;
-                        else throw new KnownException($"任务:{taskInfo.ID}不是AGV执行状态,请检查异常原因", LogLevelEnum.High);
+                        throw new KnownException($"{obj.Entity.Code}站台存在多个空轮初始化入库任务,请取消RFID不是站台实物的任务", LogLevelEnum.Mid);
                     }
+                    taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.EmptyInit && v.Status == TaskStatus.WaitingToExecute && v.SrmStation == obj.Entity.Code);
 
-                    if (!obj.Data3.Status.HasFlag(StatusEunm.ManualStorage)) //不是手动入库
+                    string barcode = "";
+                    //manlun
+                    if (taskInfo == null)
                     {
-                        //判断AGV任务目标地址是否是当前地址
-                        var agv = db.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(2)).First(v => v.ID == taskInfo.AgvTaskID) ?? throw new KnownException($"任务{taskInfo.ID}未找到对应AGV任务", LogLevelEnum.Mid);
-                        if (taskInfo.AddrNext != obj.Entity.Code) throw new KnownException($"任务{taskInfo.ID}不是货架上的任务,请检查RFID是否正确", LogLevelEnum.Mid);
-                        if (agv.Position != obj.Entity.Code) throw new KnownException($"任务{taskInfo.ID}对应AGV任务目标地址不是当前站台", LogLevelEnum.Mid);
-                    }
+                        //获取RFID
+                        barcode = BCRS.GetBCRCode(obj.Entity.Code);
+                        //跟据RFID获取对应的任务
+                        taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.BarCode == barcode) ?? throw new KnownException($"未找到RFID:{barcode}对应WCS任务", LogLevelEnum.Mid);
+                        if (taskInfo.Status != Entity.TaskStatus.AGVExecution)
+                        {
+                            if (db.Queryable<WCS_TaskDtl>().SplitTable(v => v.Take(2)).Any(v => v.ParentTaskCode == taskInfo.ID && v.Desc.Contains("等待分配货位后堆垛机进行取货"))) return;
+                            else throw new KnownException($"任务:{taskInfo.ID}不是AGV执行状态,请检查异常原因", LogLevelEnum.High);
+                        }
 
-                    //获取称重
-                    var dev91 = Device.All.Where(v => v.Code == obj.Entity.Code).Select(v => new Device<IStation91>(v, this.World)).FirstOrDefault();
-                    taskInfo.Weight = dev91.Data.Weight;
-                    if (taskInfo.Weight < 200) throw new KnownException($"称重结果错误:{taskInfo.Weight}", LogLevelEnum.Mid);
-                    //上抛重量
-                    try { WmsApi.WcsUploadInfo(taskInfo.ID, (decimal)taskInfo.Weight, taskInfo.BarCode); } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); }
+                        if (!obj.Data3.Status.HasFlag(StatusEunm.ManualStorage)) //不是手动入库
+                        {
+                            //判断AGV任务目标地址是否是当前地址
+                            var agv = db.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(2)).First(v => v.ID == taskInfo.AgvTaskID) ?? throw new KnownException($"任务{taskInfo.ID}未找到对应AGV任务", LogLevelEnum.Mid);
+                            if (taskInfo.AddrNext != obj.Entity.Code) throw new KnownException($"任务{taskInfo.ID}不是货架上的任务,请检查RFID是否正确", LogLevelEnum.Mid);
+                            if (agv.Position != obj.Entity.Code) throw new KnownException($"任务{taskInfo.ID}对应AGV任务目标地址不是当前站台", LogLevelEnum.Mid);
+                        }
+                        //获取称重
+                        var dev91 = Device.All.Where(v => v.Code == obj.Entity.Code).Select(v => new Device<IStation91>(v, this.World)).FirstOrDefault();
+                        taskInfo.Weight = dev91.Data.Weight;
+                        if (taskInfo.Weight < 200) throw new KnownException($"称重结果错误:{taskInfo.Weight}", LogLevelEnum.Mid);
+                        //上抛重量
+                        try { WmsApi.WcsUploadInfo(taskInfo.ID, (decimal)taskInfo.Weight, taskInfo.BarCode); } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); }
+                    }
+                    else//空轮初始化任务
+                    {
+                        //获取称重
+                        var dev91 = Device.All.Where(v => v.Code == obj.Entity.Code).Select(v => new Device<IStation91>(v, this.World)).FirstOrDefault();
+                        taskInfo.Weight = dev91.Data.Weight;
+                        if (taskInfo.Weight < 140) throw new KnownException($"称重结果错误:{taskInfo.Weight}", LogLevelEnum.Mid);
+                        //上抛重量
+                        try { WmsApi.WcsUploadInfo(taskInfo.ID, (decimal)taskInfo.Weight, taskInfo.BarCode); } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); }
+                    }
+                    
 
                     taskInfo.Status = Entity.TaskStatus.ConveyorExecution;
                     db.Updateable(taskInfo).ExecuteCommand();