林豪 左 há 2 anos atrás
pai
commit
e70418a6a9

+ 22 - 2
WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -54,7 +54,7 @@ namespace WCS.WorkEngineering.Systems
                             AgvApi.ContinueTask(agv.AgvID, agv.Station);
                         }
                         //完成任务
-                        if (agv.AgvStatus == AGVTaskStatus.MissionCompleted && agv.Status != AGVTaskStatus.MissionCompleted)
+                        else if (agv.AgvStatus == AGVTaskStatus.MissionCompleted && agv.Status != AGVTaskStatus.MissionCompleted)
                         {
                             if (agv.TaskType is AGVTaskType.CallForMaterial or AGVTaskType.ForkliftFilling or AGVTaskType.CallMaterial)
                             {
@@ -72,8 +72,8 @@ namespace WCS.WorkEngineering.Systems
                                     //更新WCS任务状态
                                     taskInfo.Status = Entity.TaskStatus.Finish;
                                     taskInfo.EedTime = DateTime.Now;
-                                    taskInfo.AddWCS_TASK_DTL(db, "agv", "任务完成");
                                     db.Default.Updateable(taskInfo).ExecuteCommand();
+                                    taskInfo.AddWCS_TASK_DTL(db, "agv", "任务完成");
                                     taskInfo.CompleteOrCancelTasks(db);
                                     taskInfos.Add(taskInfo);
                                 }
@@ -89,6 +89,26 @@ namespace WCS.WorkEngineering.Systems
                                 db.Default.Updateable(agv).SplitTable().ExecuteCommand();
                             }
                         }
+                        else if (agv.AgvStatus == AGVTaskStatus.Cancel && agv.Status != AGVTaskStatus.Cancel)
+                        {
+                            //var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agv.ID);
+                            //if (taskInfo == null)
+                            //{
+                            //    World.Log($"未找到AGV任务{agv.ID}对应WCS任务");
+                            //    continue;
+                            //}
+                            //try { WmsApi. } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); }
+
+                            ////更新AGV任务状态
+                            //agv.Status = AGVTaskStatus.Cancel;
+                            //db.Default.Updateable(agv).SplitTable().ExecuteCommand();
+                            ////更新WCS任务状态
+                            //taskInfo.Status = Entity.TaskStatus.Cancel;
+                            //taskInfo.EedTime = DateTime.Now;
+                            //db.Default.Updateable(taskInfo).ExecuteCommand();
+                            //taskInfo.AddWCS_TASK_DTL(db, "agv", "任务完成");
+                            //taskInfo.CompleteOrCancelTasks(db);
+                        }
                     }
                 });
                 foreach (var item in taskInfos)

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

@@ -60,7 +60,7 @@ namespace WCS.WorkEngineering.Systems
                //获取称重
                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 <= 500) throw new KnownException($"称重结果错误:{taskInfo.Weight}", LogLevelEnum.Mid);
+               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); }
 
@@ -71,6 +71,7 @@ namespace WCS.WorkEngineering.Systems
            });
             if (task == null) throw new KnownException("数据更新错误", LogLevelEnum.High);
             obj.Data.TaskNumber = task.ID;
+            obj.Data.VoucherNo++;
         }
 
         public override bool Select(Device dev)

+ 28 - 5
WCS.WorkEngineering/Systems/一楼出库工位处理系统.cs

@@ -4,7 +4,6 @@ using ServiceCenter.SqlSugars;
 using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
-using WCS.Service;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
@@ -28,7 +27,6 @@ namespace WCS.WorkEngineering.Systems
             var key = $"WCS:Lock:{obj.Entity.Code}";
             try
             {
-
                 if (RedisHub.Default.Get(key) != null)
                 {
                     throw new KnownException($"[{obj.Entity.Code}]--触发并发管控", LogLevelEnum.High);
@@ -36,12 +34,37 @@ namespace WCS.WorkEngineering.Systems
                 RedisHub.Default.Set(key, obj.Entity.Code);
                 if (!obj.Data3.Status.HasFlag(Entity.Protocol.Station.StatusEunm.PH_Status) && !obj.Data3.Status.HasFlag(Entity.Protocol.Station.StatusEunm.OT_Status))
                 {
-                    var any = false;
+                    bool result = true; //是否需要申请出库任务,默认需要
                     SqlSugarHelper.Do(db =>
                     {
-                        any = db.Default.Queryable<WCS_TaskInfo>().Any(v => v.AddrTo == obj.Entity.Code && v.Status < Entity.TaskStatus.AGVExecution);
+                        //当前站台是否有任务在执行
+                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.AddrTo == obj.Entity.Code && v.Status < Entity.TaskStatus.AGVExecution).OrderByDescending(v => v.AddTime).First();
+                        if (task != null) //有任务
+                        {
+                            if (task.AgvTaskID == 0) throw new KnownException($"WCS任务[{task.ID}],等待AGV申请任务", LogLevelEnum.Mid);
+                            else
+                            {
+                                //检查对应的AGV任务状态是否大于退出储位状态
+                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(2)).First(v => v.ID == task.ID) ?? throw new KnownException($"未找到AGV中间表任务[{task.AgvTaskID}],请检查异常原因", LogLevelEnum.Mid);
+                                if (agv == null)
+                                {
+                                }
+                                else if (agv.Status >= AGVTaskStatus.Complete3)
+                                {
+                                    result = true;
+                                }
+                                else
+                                {
+                                    result = false;
+                                }
+                            }
+                        }
+                        else //无任务
+                        {
+                            result = true;
+                        }
                     });
-                    if (!any) WmsApi.ApplyStockOutTask(obj.Entity.Code);
+                    if (result) WmsApi.ApplyStockOutTask(obj.Entity.Code);
                 }
             }
             finally

+ 2 - 1
WCS.WorkEngineering/Systems/二楼入库工位处理系统.cs

@@ -74,7 +74,7 @@ namespace WCS.WorkEngineering.Systems
                  {
                      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 <= 100) throw new KnownException($"称重结果错误:{taskInfo.Weight}", LogLevelEnum.Mid);
+                     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); }
                  }
@@ -86,6 +86,7 @@ namespace WCS.WorkEngineering.Systems
              });
             if (task == null) throw new KnownException("数据更新错误", LogLevelEnum.High);
             obj.Data.TaskNumber = task.ID;
+            obj.Data.VoucherNo++;
         }
 
         public override bool Select(Device dev)

+ 4 - 1
WCS.WorkEngineering/WebApi/Controllers/AgvController.cs

@@ -236,6 +236,10 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                 agvTask.AgvStatus = AGVTaskStatus.Complete3;
                                 break;
 
+                            case "cancel": //取消任务
+                                agvTask.AgvStatus = AGVTaskStatus.Cancel;
+                                break;
+
                             default:
                                 break;
                         }
@@ -243,7 +247,6 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                         res.code = AgvResponseCode.Success;
                         res.message = "成功";
                     });
-
                 }
                 catch (Exception ex)
                 {

+ 48 - 57
WCS.WorkEngineering/WebApi/Controllers/WcsController.cs

@@ -257,73 +257,65 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                         var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
                         if (task != null)
                         {
-                            //只有WCS是AGV执行中 AGV是确认 才能从新下发
-                            switch (task.Type)
+                            if (task.Type == TaskType.SetPlate) //组盘任务
                             {
-                                case TaskType.SetPlate:
-                                    response.ResDataList.Add(new HandleTaskResponse()
-                                    {
-                                        IsSuccess = false,
-                                        TaskNo = item,
-                                        Message = $"组盘任务无AGV执行流程",
-                                    });
-                                    return;
-
-                                case TaskType.EnterDepot:
-                                    switch (task.Floor)
-                                    {
-                                        case 1:
-                                            break;
-
-                                        case 2:
-                                            response.ResDataList.Add(new HandleTaskResponse()
-                                            {
-                                                IsSuccess = false,
-                                                TaskNo = item,
-                                                Message = $"二楼入库任务重新下发AGV未实现",
-                                            });
-                                            break;
-                                    }
-                                    break;
-
-                                case TaskType.OutDepot:
-
-                                    break;
-
-                                case TaskType.TransferDepot:
+                                response.ResDataList.Add(new HandleTaskResponse()
+                                {
+                                    IsSuccess = false,
+                                    TaskNo = item,
+                                    Message = $"组盘任务无AGV执行流程",
+                                });
+                            }
+                            else if (task.Type == TaskType.EnterDepot) //入库任务
+                            {
+                                if (task.Floor == 1) //一楼入库
+                                {
+                                }
+                                else if (task.Floor == 2) //二楼入库
+                                {
                                     response.ResDataList.Add(new HandleTaskResponse()
                                     {
                                         IsSuccess = false,
                                         TaskNo = item,
-                                        Message = $"组盘任务无AGV执行流程",
+                                        Message = $"二楼入库任务重新下发AGV未实现",
                                     });
-                                    return;
-
-                                case TaskType.Delivery:
-                                    switch (task.Floor)
-                                    {
-                                        case 1:
-                                            break;
-
-                                        case 2:
-                                            response.ResDataList.Add(new HandleTaskResponse()
-                                            {
-                                                IsSuccess = false,
-                                                TaskNo = item,
-                                                Message = $"二楼搬运任务重新下发AGV未实现",
-                                            });
-                                            return;
-                                    }
-                                    break;
-
-                                case TaskType.EmptyInit:
+                                }
+                            }
+                            else if (task.Type == TaskType.OutDepot) //出库
+                            {
+                            }
+                            else if (task.Type == TaskType.TransferDepot) //移库
+                            {
+                                response.ResDataList.Add(new HandleTaskResponse()
+                                {
+                                    IsSuccess = false,
+                                    TaskNo = item,
+                                    Message = $"组盘任务无AGV执行流程",
+                                });
+                            }
+                            else if (task.Type == TaskType.Delivery) //搬运
+                            {
+                                if (task.Floor == 1)
+                                {
+                                }
+                                else if (task.Floor == 2)
+                                {
                                     response.ResDataList.Add(new HandleTaskResponse()
                                     {
                                         IsSuccess = false,
                                         TaskNo = item,
-                                        Message = $"空轮初始化无AGV执行流程",
+                                        Message = $"二楼搬运任务重新下发AGV未实现",
                                     });
-                                    return;
+                                }
+                            }
+                            else if (task.Type == TaskType.EmptyInit) //空轮初始化
+                            {
+                                response.ResDataList.Add(new HandleTaskResponse()
+                                {
+                                    IsSuccess = false,
+                                    TaskNo = item,
+                                    Message = $"空轮初始化无AGV执行流程",
+                                });
                             }
 
                             //找到对应的AGV任务
@@ -341,7 +333,6 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                             else if (task.Floor == 2)
                             {
                                 task.Status = Entity.TaskStatus.ConveyorExecution;
-
                             }
 
                             task.AddWCS_TASK_DTL(db, "AGV", "重新下发AGV任务");