林豪 左 2 年之前
父節點
當前提交
155e582904

+ 40 - 0
WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -1,6 +1,9 @@
 using ServiceCenter.SqlSugars;
 using WCS.Entity;
+using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 using WCS.WorkEngineering.Worlds.Logs;
+using TaskStatus = WCS.Entity.TaskStatus;
 
 namespace WCS.WorkEngineering.Extensions
 {
@@ -98,5 +101,42 @@ namespace WCS.WorkEngineering.Extensions
                 }
             }
         }
+
+        public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
+        {
+            //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
+            var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
+                                                           .Where(v => allOutCode.Contains(v.SrmStation))
+                                                           .OrderByDescending(v => v.Priority)
+                                                           .OrderByDescending(v => v.Floor == floor ? 1 : 0)
+                                                           .Take(index).ToList();
+            if (!tasks.Any()) throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
+            var task = tasks.ToArray()[tasks.Count - 1];
+
+            //判断是否是二深位任务
+            var addrFrom = task.AddrFrom.Split("-");
+            if (addrFrom[4] == "02")
+            {
+                var res = WmsApi.AddWcsMoveTask(task.ID);
+                switch (res.ResData.ResType)
+                {
+                    case WmsApiMoveTask.允许2升位执行:
+                        break;
+
+                    case WmsApiMoveTask.执行移库任务:
+                        throw new KnownException($"堆垛机{obj.Entity.Code}需要先执行移库任务", LogLevelEnum.Mid);
+
+                    case WmsApiMoveTask.一深位有出库任务:
+                        task = db.Default.Queryable<WCS_TaskInfo>()
+                                         .Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
+                                         .Where(v => allOutCode.Contains(v.SrmStation) && v.AddrFrom == res.ResData.CellNo)
+                                         .First();
+                        if (task == null) task.GetOutTask(db, allOutCode, floor, obj, index + 1);
+                        break;
+                };
+            }
+
+            return task;
+        }
     }
 }

+ 3 - 9
WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -266,7 +266,6 @@ namespace WCS.WorkEngineering.Systems
                                                 && !v.Data3.Status.HasFlag(StatusEunm.Run) //未运行
                                                 && !v.Data3.Status.HasFlag(StatusEunm.OT_Status) //无任务
                                                 && !v.Data3.Status.HasFlag(StatusEunm.UnassignedTask) //未分配任务
-
                                                 && v.Data3.Status.HasFlag(StatusEunm.Auto)).ToList(); //自动
 
                 if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid);
@@ -277,14 +276,9 @@ namespace WCS.WorkEngineering.Systems
                 var result = SqlSugarHelper.Do(db =>
                {
                    var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
-                   //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果
-                   var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
-                                                                  .Where(v => allOutCode.Contains(v.SrmStation))
-                                                                  .OrderByDescending(v => v.Priority)
-                                                                  .OrderByDescending(v => v.Floor == floor ? 1 : 0)
-                                                                  .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
-
-                   addrFrom = task.AddrFrom.Split("-");
+
+                   var task = taskInfo.GetOutTask(db, allOutCode, floor, obj);
+
                    task.Status = TaskStatus.StackerExecution;
                    task.LastInteractionPoint = task.Device;
                    task.EditWho = "WCS";

+ 20 - 0
WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs

@@ -1,6 +1,7 @@
 using ServiceCenter.Extensions;
 using ServiceCenter.Redis;
 using ServiceCenter.WebApi;
+using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
 using WCS.WorkEngineering.Worlds.Logs;
@@ -228,6 +229,25 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             return res;
         }
 
+        /// <summary>
+        ///  二深位获取移库任务
+        /// </summary>
+        /// <param name="taskNo">任务</param>
+        /// <returns></returns>
+        /// <exception cref="KnownException"></exception>
+        public static SRes<AddWcsMoveTaskResponse> AddWcsMoveTask(int taskNo)
+        {
+            var res = APICaller.CallApi2<SRes<AddWcsMoveTaskResponse>>(WMSUrl + "/api/Hj/AddWcsMoveTask", new CompleteTaskRequest
+            {
+                TaskNum = taskNo,
+            });
+            if (res.ResCode != ResponseStatusCodeEnum.Sucess)
+            {
+                throw new KnownException(res.ResMsg, LogLevelEnum.High);
+            }
+            return res;
+        }
+
         /// <summary>
         /// 向WMS获取入库任务 一次单卷
         /// </summary>

+ 10 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/AddWcsMoveTaskRequest.cs

@@ -0,0 +1,10 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  获取移库任务请求参数
+    /// </summary>
+    public class AddWcsMoveTaskRequest
+    {
+        public int TaskNum { get; set; }
+    }
+}

+ 29 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/AddWcsMoveTaskResponse.cs

@@ -0,0 +1,29 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    /// <summary>
+    ///  获取移库任务
+    /// </summary>
+    public class AddWcsMoveTaskResponse
+    {
+        /// <summary>
+        /// 0:失败;1:允许2升位执行;2:执行移库任务;3:一深位有出库任务
+        /// </summary>
+        public WmsApiMoveTask ResType { get; set; } = 0;
+
+        /// <summary>
+        /// 一深位货位号
+        /// </summary>
+        public string CellNo { get; set; }
+    }
+
+    /// <summary>
+    /// 获取移库任务返回结果
+    /// </summary>
+    public enum WmsApiMoveTask
+    {
+        失败 = 0,
+        允许2升位执行 = 1,
+        执行移库任务 = 2,
+        一深位有出库任务 = 3
+    }
+}