林豪 左 il y a 1 an
Parent
commit
1c377f4ea8

+ 23 - 14
业务工程/分拣库/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -84,16 +84,19 @@ namespace WCS.WorkEngineering.Systems
                                             if (agv.TaskType is AGVTaskType.CallForMaterial or AGVTaskType.ForkliftFilling or AGVTaskType.CallMaterial)
                                             {
                                                 var taskInfo = db.Default.Queryable<WCS_TaskInfo>().UpdLock().First(v => v.AgvTaskID == agv.ID);
-                                                if (taskInfo == null) throw new Exception($"未找到AGV任务{agv.ID}对应WCS任务");
+                                                //if (taskInfo == null) throw new Exception($"未找到AGV任务{agv.ID}对应WCS任务");
                                                 //更新AGV任务状态
                                                 agv.Status = AGVTaskStatus.MissionCompleted;
                                                 db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
                                                 //更新WCS任务状态
-                                                taskInfo.Status = Entity.TaskStatus.Finish;
-                                                taskInfo.EndTime = DateTime.Now;
-                                                db.Default.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
-                                                taskInfo.AddWCS_TASK_DTL(db.Default, "agv", "任务完成");
-                                                taskInfos.Add(taskInfo);
+                                                if (taskInfo != null)
+                                                {
+                                                    taskInfo.Status = Entity.TaskStatus.Finish;
+                                                    taskInfo.EndTime = DateTime.Now;
+                                                    db.Default.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
+                                                    taskInfo.AddWCS_TASK_DTL(db.Default, "agv", "任务完成");
+                                                    taskInfos.Add(taskInfo);
+                                                }  
                                             }
                                             else
                                             {
@@ -304,10 +307,13 @@ namespace WCS.WorkEngineering.Systems
                                             if (taskold.LastInteractionPoint == "2") //如果是单独取空任务直接完成
                                             {
                                                 var task = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.ID == agv.TaskId).First();
-                                                task.Status = TaskStatus.Finish;
-                                                task.EndTime = DateTime.Now;
-                                                db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
-                                                task.AddWCS_TASK_DTL(db.Default, "agv", "任务完成");
+                                                if (task != null)
+                                                {
+                                                    task.Status = TaskStatus.Finish;
+                                                    task.EndTime = DateTime.Now;
+                                                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
+                                                    task.AddWCS_TASK_DTL(db.Default, "agv", "任务完成");
+                                                }     
                                             }
                                         }
                                         break;
@@ -319,10 +325,13 @@ namespace WCS.WorkEngineering.Systems
                                         if (taskold1.LastInteractionPoint == "2") //如果是单独取空任务直接取消
                                         {
                                             var task = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.ID == agv.TaskId).First();
-                                            task.Status = TaskStatus.Cancel;
-                                            task.EndTime = DateTime.Now;
-                                            db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
-                                            task.AddWCS_TASK_DTL(db.Default, "agv", "任务取消");
+                                            if (task != null)
+                                            {
+                                                task.Status = TaskStatus.Cancel;
+                                                task.EndTime = DateTime.Now;
+                                                db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
+                                                task.AddWCS_TASK_DTL(db.Default, "agv", "任务取消");
+                                            }   
                                         }
                                         break;
                                 }

+ 112 - 112
业务工程/分拣库/WCS.WorkEngineering/WebApi/Controllers/AgvController.cs

@@ -10,127 +10,127 @@ using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 
 namespace WCS.WorkEngineering.WebApi.Controllers
 {
-    ///// <summary>
-    ///// AGV相关接口控制器
-    ///// </summary>
-    //[ApiController]
-    //[Route("api/[controller]/[action]")]
-    //public class AgvController : ControllerBase
-    //{
-    //    /// <summary>
-    //    ///  AGV任务下发测试
-    //    /// </summary>
-    //    /// <param name="type">任务类型</param>
-    //    /// <param name="code">RFID</param>
-    //    /// <param name="pos">目标位置</param>
-    //    /// <returns></returns>
-    //    [HttpPost]
-    //    public string AgvDebug(int type, string code, string pos)
-    //    {
-    //        try
-    //        {
-    //            switch (type)
-    //            {
-    //                case 1:
-    //                    //AgvApi.机台补空(pos, code, "1");
-    //                    break;
+    /// <summary>
+    /// AGV相关接口控制器
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class AgvController : ControllerBase
+    {
+        /// <summary>
+        ///  AGV任务下发测试
+        /// </summary>
+        /// <param name="type">任务类型</param>
+        /// <param name="code">RFID</param>
+        /// <param name="pos">目标位置</param>
+        /// <returns></returns>
+        [HttpPost]
+        public string AgvDebug(int type, string code, string pos)
+        {
+            try
+            {
+                switch (type)
+                {
+                    case 1:
+                        //AgvApi.机台补空(pos, code, "1");
+                        break;
 
-    //                case 2:
-    //                    //AgvApi.机台补满();
-    //                    break;
+                    case 2:
+                        //AgvApi.机台补满();
+                        break;
 
-    //                case 3:
-    //                    //AgvApi.满轮入库(code, pos, Guid.NewGuid().ToString().Replace("-", ""), "1");
-    //                    break;
-    //            }
-    //            return "成功";
-    //        }
-    //        catch (Exception ex)
-    //        {
-    //            return $"Error-----" +
-    //                  $"{ex.Message}------" +
-    //                  $"{ex.StackTrace}";
-    //        }
-    //    }
+                    case 3:
+                        //AgvApi.满轮入库(code, pos, Guid.NewGuid().ToString().Replace("-", ""), "1");
+                        break;
+                }
+                return "成功";
+            }
+            catch (Exception ex)
+            {
+                return $"Error-----" +
+                      $"{ex.Message}------" +
+                      $"{ex.StackTrace}";
+            }
+        }
 
-    //    /// <summary>
-    //    /// AGV执行回调
-    //    /// </summary>
-    //    /// <param name="reqDto"></param>
-    //    /// <returns></returns>
-    //    [HttpPost]
-    //    public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto)
-    //    {
-    //        var key = $"WCS:Lock:AGV:{nameof(AgvCallback)}";
-    //        var res = new AgvCallbackResponse() { code = AgvResponseCode.Success, message = "失败" };
-    //        //LogHub.InterfacePublish(nameof(AgvCallback), $"传入参数--reqCode:{reqDto.reqCode}--taskCode:{reqDto.taskCode}--method:{reqDto.method}");
-    //        try
-    //        {
-    //            RedisHub.Do(key, redis =>
-    //            {
-    //                SqlSugarHelper.Do(db =>
-    //                {
-    //                    //跟据AGVid找到对应的AGV任务
-    //                    var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().UpdLock().SplitTable(tabs => tabs.Take(2))
-    //                        .First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
-    //                    if (agvTask == null)
-    //                    {
-    //                        res.code = AgvResponseCode.Fail;
-    //                        res.message = "未找到对应的AGV任务";
+        /// <summary>
+        /// AGV执行回调
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto)
+        {
+            var key = $"WCS:Lock:AGV:{nameof(AgvCallback)}";
+            var res = new AgvCallbackResponse() { code = AgvResponseCode.Success, message = "失败" };
+            //LogHub.InterfacePublish(nameof(AgvCallback), $"传入参数--reqCode:{reqDto.reqCode}--taskCode:{reqDto.taskCode}--method:{reqDto.method}");
+            try
+            {
+                RedisHub.Do(key, redis =>
+                {
+                    SqlSugarHelper.Do(db =>
+                    {
+                        //跟据AGVid找到对应的AGV任务
+                        var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().UpdLock().SplitTable(tabs => tabs.Take(2))
+                            .First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
+                        if (agvTask == null)
+                        {
+                            res.code = AgvResponseCode.Fail;
+                            res.message = "未找到对应的AGV任务";
 
-    //                        return;
-    //                    }
-    //                    switch (reqDto.method)
-    //                    {
-    //                        case "applyContinue": //表示请求巷道
-    //                            agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1;
-    //                            break;
+                            return;
+                        }
+                        switch (reqDto.method)
+                        {
+                            case "applyContinue": //表示请求巷道
+                                agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission1;
+                                break;
 
-    //                        case "outbin": //小车退出取货位
-    //                            agvTask.AgvStatus = AGVTaskStatus.LeaveGet;
-    //                            break;
+                            case "outbin": //小车退出取货位
+                                agvTask.AgvStatus = AGVTaskStatus.LeaveGet;
+                                break;
 
-    //                        case "applySecurity": //表示请求放货或取货
-    //                            agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2;
-    //                            break;
+                            case "applySecurity": //表示请求放货或取货
+                                agvTask.AgvStatus = AGVTaskStatus.RequestOrPermission2;
+                                break;
 
-    //                        case "applySecurityPut": //表示请求放货或取货
-    //                            agvTask.AgvStatus = AGVTaskStatus.PutRequestOrPermission;
-    //                            break;
+                            case "applySecurityPut": //表示请求放货或取货
+                                agvTask.AgvStatus = AGVTaskStatus.PutRequestOrPermission;
+                                break;
 
-    //                        case "FJend": //任务完成
-    //                            agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
-    //                            break;
+                            case "FJend": //任务完成
+                                agvTask.AgvStatus = AGVTaskStatus.MissionCompleted;
+                                break;
 
-    //                        case "cancel": //取消任务
-    //                            if (agvTask.TaskType == AGVTaskType.EnterDepot)
-    //                            {
-    //                                agvTask.AgvStatus = AGVTaskStatus.Cancel;
-    //                            }
+                            case "cancel": //取消任务
+                                if (agvTask.TaskType == AGVTaskType.EnterDepot)
+                                {
+                                    agvTask.AgvStatus = AGVTaskStatus.Cancel;
+                                }
 
-    //                            break;
-    //                    }
+                                break;
+                        }
 
-    //                    int i = db.Default.Updateable(agvTask).SplitTable(x => x.Take(2)).ExecuteCommand();
-    //                    if (i > 0)
-    //                    {
-    //                        res.code = AgvResponseCode.Success;
-    //                        res.message = "成功";
-    //                    }
-    //                    else
-    //                    {
-    //                        return;
-    //                    }
-    //                });
-    //            });
-    //        }
-    //        catch (Exception ex)
-    //        {
-    //            res.code = AgvResponseCode.Error;
-    //            res.message = ex.Message;
-    //        }
-    //        //LogHub.InterfacePublish(nameof(AgvCallback), $"返回结果--reqCode:{reqDto.reqCode}--code:{res.code}--message:{res.message}--taskCode:{reqDto.taskCode}");
-    //        return res;
-    //    }
-    //}
+                        int i = db.Default.Updateable(agvTask).SplitTable(x => x.Take(2)).ExecuteCommand();
+                        if (i > 0)
+                        {
+                            res.code = AgvResponseCode.Success;
+                            res.message = "成功";
+                        }
+                        else
+                        {
+                            return;
+                        }
+                    });
+                });
+            }
+            catch (Exception ex)
+            {
+                res.code = AgvResponseCode.Error;
+                res.message = ex.Message;
+            }
+            //LogHub.InterfacePublish(nameof(AgvCallback), $"返回结果--reqCode:{reqDto.reqCode}--code:{res.code}--message:{res.message}--taskCode:{reqDto.taskCode}");
+            return res;
+        }
+    }
 }