林豪 左 %!s(int64=2) %!d(string=hai) anos
pai
achega
a61d1f870d

+ 228 - 21
WCS.WorkEngineering/WebApi/Controllers/WcsController.cs

@@ -13,6 +13,7 @@ using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Systems;
 using WCS.WorkEngineering.WebApi.Models.WCS.Request;
 using WCS.WorkEngineering.WebApi.Models.WCS.Response;
+using WCS.WorkEngineering.WebApi.Models.WMS.Response;
 
 namespace WCS.WorkEngineering.WebApi.Controllers
 {
@@ -29,9 +30,9 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="req"></param>
         /// <returns></returns>
         [HttpPost]
-        public HandleTaskResponse HandleTask([FromBody] HandleTaskRequest req)
+        public SRes<HandleTaskResponse> HandleTask([FromBody] HandleTaskRequest req)
         {
-            var response = new HandleTaskResponse() { IsSuccess = false, Message = "失败" };
+            SRes<HandleTaskResponse> response = new SRes<HandleTaskResponse>() { ResCode = ResponseStatusCodeEnum.Sucess, ResDataList = new List<HandleTaskResponse>() };
 
             //取消任务
             if (req.Type == HandleTaskTypeEnum.取消任务)
@@ -50,21 +51,40 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                 switch (task.Type)
                                 {
                                     case TaskType.SetPlate:
+                                        if (task.Status != Entity.TaskStatus.WaitingToExecute)
+                                        {
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"只能取消待执行状态组盘任务",
+                                            });
+                                            return;
+                                        }
                                         break;
 
                                     case TaskType.EnterDepot:
                                         if (task.Status != Entity.TaskStatus.WaitingToExecute)
                                         {
-                                            response.IsSuccess = false;
-                                            response.Message = $"取消任务失败,{res.ResMsg}";
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"只能取消待执行状态入库任务",
+                                            });
                                             return;
                                         }
                                         break;
+
                                     case TaskType.OutDepot:
                                         if (task.Status != Entity.TaskStatus.WaitingToExecute)
                                         {
-                                            response.IsSuccess = false;
-                                            response.Message = $"取消任务失败,{res.ResMsg}";
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"只能取消待执行状态出库任务",
+                                            });
                                             return;
                                         }
                                         break;
@@ -75,47 +95,84 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                     case TaskType.Delivery:
                                         if (task.Status != Entity.TaskStatus.WaitingToExecute)
                                         {
-                                            response.IsSuccess = false;
-                                            response.Message = $"取消任务失败,{res.ResMsg}";
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"只能取消待执行搬运任务",
+                                            });
                                             return;
                                         }
                                         break;
 
                                     case TaskType.EmptyInit:
-                                        break;
-
-                                    default:
+                                        if (task.Status != Entity.TaskStatus.WaitingToExecute)
+                                        {
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"只能取消待执行状态空轮初始化任务",
+                                            });
+                                            return;
+                                        }
                                         break;
                                 }
                                 //取消任务
                                 var cancelRes = WmsApi.CarryTaskInfo(new List<int>() { task.ID }, 106);
                                 if (cancelRes.ResCode == Models.WMS.Response.ResponseStatusCodeEnum.Sucess)
                                 {
+                                    //找到对应的AGV任务
+                                    var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID).SplitTable(v => v.Take(2)).First();
+                                    if (agv != null)
+                                    {
+                                        agv.Status = AGVTaskStatus.Cancel;
+                                        agv.AgvStatus = AGVTaskStatus.Cancel;
+                                        db.Default.Updateable(agv).SplitTable().ExecuteCommand();
+                                    }
                                     //更新任务状态
                                     task.Status = Entity.TaskStatus.Cancel;
                                     task.EditTime = DateTime.Now;
+                                    task.EditWho = req.User;
+                                    task.ManualRemarks = req.ManualRemarks;
                                     task.AddWCS_TASK_DTL(db, "未知", "任务取消");
                                     db.Default.Updateable(task).ExecuteCommand();
                                     task.CompleteOrCancelTasks(db);
-                                    response.IsSuccess = true;
-                                    response.Message = "成功";
+                                    response.ResDataList.Add(new HandleTaskResponse()
+                                    {
+                                        IsSuccess = true,
+                                        TaskNo = task.ID,
+                                        Message = $"完成",
+                                    });
                                 }
                                 else
                                 {
-                                    response.IsSuccess = false;
-                                    response.Message = $"取消任务失败,{cancelRes.ResMsg}";
+                                    response.ResDataList.Add(new HandleTaskResponse()
+                                    {
+                                        IsSuccess = false,
+                                        TaskNo = task.ID,
+                                        Message = $"取消任务失败,{cancelRes.ResMsg}",
+                                    });
                                 }
                             }
                             else
                             {
-                                response.IsSuccess = false;
-                                response.Message = $"取消任务失败,{res.ResMsg}";
+                                response.ResDataList.Add(new HandleTaskResponse()
+                                {
+                                    IsSuccess = false,
+                                    TaskNo = task.ID,
+                                    Message = $"取消任务失败,{res.ResMsg}",
+                                });
                             }
                         }
                         else
                         {
-                            response.IsSuccess = false;
-                            response.Message = $"未找到对应任务{item}";
+                            response.ResDataList.Add(new HandleTaskResponse()
+                            {
+                                IsSuccess = false,
+                                TaskNo = task.ID,
+                                Message = $"未找到对应任务{item}"
+                            });
                         }
                     });
                 }
@@ -123,9 +180,159 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             // 完成任务
             else if (req.Type == HandleTaskTypeEnum.完成任务)
             {
-                foreach (var item in req.TaskIds)
+                SqlSugarHelper.Do(db =>
                 {
-                }
+                    foreach (var item in req.TaskIds)
+                    {
+                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
+                        if (task != null)
+                        {
+                            if (task.Type == TaskType.OutDepot && task.Floor == 1)
+                            {
+                                task.Status = Entity.TaskStatus.Finish;
+                                task.EditWho = req.User;
+                                task.ManualRemarks = req.ManualRemarks;
+                                task.AddWCS_TASK_DTL(db, "未知", "手动完成任务");
+                                task.CompleteOrCancelTasks(db);
+                                db.Default.Updateable(task).ExecuteCommand();
+                            }
+                            else
+                            {
+                                response.ResDataList.Add(new HandleTaskResponse()
+                                {
+                                    IsSuccess = false,
+                                    TaskNo = task.ID,
+                                    Message = $"未实现当前任务的完成功能"
+                                });
+                            }
+                        }
+                        else
+                        {
+                            response.ResDataList.Add(new HandleTaskResponse()
+                            {
+                                IsSuccess = false,
+                                TaskNo = task.ID,
+                                Message = $"未找到对应任务{item}"
+                            });
+                        }
+                    }
+                });
+
+            }
+            else if (req.Type == HandleTaskTypeEnum.重新下发AGV任务)
+            {
+                SqlSugarHelper.Do(db =>
+                {
+                    foreach (var item in req.TaskIds)
+                    {
+                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
+                        if (task != null)
+                        {
+                            //只有WCS是AGV执行中 AGV是确认 才能从新下发
+                            switch (task.Type)
+                            {
+                                case TaskType.SetPlate:
+                                    response.ResDataList.Add(new HandleTaskResponse()
+                                    {
+                                        IsSuccess = false,
+                                        TaskNo = task.ID,
+                                        Message = $"组盘任务无AGV执行流程",
+                                    });
+                                    return;
+
+                                case TaskType.EnterDepot:
+                                    switch (task.Floor)
+                                    {
+                                        case 1:
+                                            break;
+
+                                        case 2:
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"二楼入库任务重新下发AGV未实现",
+                                            });
+                                            break;
+                                    }
+                                    break;
+
+                                case TaskType.OutDepot:
+                                    switch (task.Floor)
+                                    {
+                                        case 1:
+                                            break;
+
+                                        case 2:
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"二楼出库任务重新下发AGV未实现",
+                                            });
+                                            break;
+                                    }
+                                    break;
+
+                                case TaskType.TransferDepot:
+                                    response.ResDataList.Add(new HandleTaskResponse()
+                                    {
+                                        IsSuccess = false,
+                                        TaskNo = task.ID,
+                                        Message = $"组盘任务无AGV执行流程",
+                                    });
+                                    return;
+
+                                case TaskType.Delivery:
+                                    switch (task.Floor)
+                                    {
+                                        case 1:
+                                            break;
+
+                                        case 2:
+                                            response.ResDataList.Add(new HandleTaskResponse()
+                                            {
+                                                IsSuccess = false,
+                                                TaskNo = task.ID,
+                                                Message = $"二楼搬运任务重新下发AGV未实现",
+                                            });
+                                            return;
+                                    }
+                                    break;
+
+                                case TaskType.EmptyInit:
+                                    response.ResDataList.Add(new HandleTaskResponse()
+                                    {
+                                        IsSuccess = false,
+                                        TaskNo = task.ID,
+                                        Message = $"空轮初始化无AGV执行流程",
+                                    });
+                                    return;
+                            }
+
+                            //找到对应的AGV任务
+                            var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID).SplitTable(v => v.Take(2)).First();
+                            if (agv != null)
+                            {
+                                agv.Status = AGVTaskStatus.NewBuild;
+                                agv.AgvStatus = AGVTaskStatus.NewBuild;
+                                db.Default.Updateable(agv).SplitTable().ExecuteCommand();
+                            }
+                            task.Status = Entity.TaskStatus.WaitingToExecute;
+                            task.AddWCS_TASK_DTL(db, "AGV", "重新下发AGV任务");
+                            db.Default.Updateable(task).ExecuteCommand();
+                        }
+                        else
+                        {
+                            response.ResDataList.Add(new HandleTaskResponse()
+                            {
+                                IsSuccess = false,
+                                TaskNo = task.ID,
+                                Message = $"未找到对应任务{item}"
+                            });
+                        }
+                    }
+                });
             }
 
             return response;

+ 11 - 1
WCS.WorkEngineering/WebApi/Models/WCS/Request/HandleTaskRequest.cs

@@ -18,13 +18,23 @@ namespace WCS.WorkEngineering.WebApi.Models.WCS.Request
         /// </summary>
         [Required]
         public HandleTaskTypeEnum Type { get; set; }
+
+        /// <summary>
+        ///  用户
+        /// </summary>
+        public string User { get; set; }
+
+        /// <summary>
+        ///  手动处理备注
+        /// </summary>
+        public string ManualRemarks { get; set; }
     }
 
     public enum HandleTaskTypeEnum
     {
         取消任务 = 1,
         完成任务 = 2,
-        //重新下发入库AGV任务 = 1,
+        重新下发AGV任务 = 3,
         //重新下发出库AGV任务 = 1,
     }
 }

+ 6 - 7
WCS.WorkEngineering/WebApi/Models/WCS/Response/HandleTaskResponse.cs

@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WCS.WorkEngineering.WebApi.Models.WCS.Response
+namespace WCS.WorkEngineering.WebApi.Models.WCS.Response
 {
     /// <summary>
     ///  处理任务接口返回内容
@@ -16,6 +10,11 @@ namespace WCS.WorkEngineering.WebApi.Models.WCS.Response
         /// </summary>
         public bool IsSuccess { get; set; }
 
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public int TaskNo { get; set; }
+
         /// <summary>
         ///  消息
         /// </summary>

+ 0 - 198
WCS.WorkEngineering/WebApi/Models/WMS/Response/SRes.cs

@@ -58,42 +58,6 @@ namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
         [Description("成功")]
         Sucess = 200,
 
-        /// <summary>
-        /// 已存在
-        /// </summary>
-        [Description("已存在")]
-        Exist = 201,
-
-        /// <summary>
-        /// 执行成功但未取得任何数据
-        /// </summary>
-        [Description("执行成功但未取得任何数据")]
-        NoResult = 202,
-
-        /// <summary>
-        /// 参数错误
-        /// </summary>
-        [Description("参数错误")]
-        ErrParam = 203,
-
-        /// <summary>
-        /// 语法异常
-        /// </summary>
-        [Description("语法异常")]
-        InnerServerErr = 204,
-
-        /// <summary>
-        /// 参数不可为空
-        /// </summary>
-        [Description("参数不可为空")]
-        ErrParamNotNull = 205,
-
-        /// <summary>
-        /// 失败
-        /// </summary>
-        [Description("失败")]
-        Fail = 206,
-
         /// <summary>
         /// 参数错误
         /// </summary>
@@ -105,167 +69,5 @@ namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
         /// </summary>
         [Description("业务逻辑错误")]
         DataSaveErr = 1002,
-
-        /// <summary>
-        /// 没有传过账凭证号
-        /// </summary>
-        [Description("没有传过账凭证号")]
-        NotReqId = 1003,
-
-        /// <summary>
-        /// 仓库编码不存在
-        /// </summary>
-        [Description("仓库编码不存在")]
-        WarehouseCodeNotExist = 2001,
-
-        /// <summary>
-        /// 容器码不能为空
-        /// </summary>
-        [Description("容器码不能为空")]
-        ContainerCodeNotEmpty = 2002,
-
-        /// <summary>
-        /// 该托盘号已在库中,请检查托盘号是否贴重复
-        /// </summary>
-        [Description("该托盘号已在库中,请检查托盘号是否贴重复")]
-        BarcodeContainerRepeat = 2003,
-
-        /// <summary>
-        /// 物料条码重复组盘
-        /// </summary>
-        [Description("物料条码重复组盘")]
-        GroupStockDetailMaterialBarCodeExist = 2004,
-
-        /// <summary>
-        /// 物料编码信息不存在
-        /// </summary>
-        [Description("物料编码信息不存在")]
-        MaterInfoNotExist = 2005,
-
-        /// <summary>
-        /// 不存在该任务
-        /// </summary>
-        [Description("不存在该任务")]
-        WcsTaskNotExist = 2006,
-
-        /// <summary>
-        /// 组盘信息不存在
-        /// </summary>
-        [Description("组盘信息不存在")]
-        StockNotExist = 2007,
-
-        /// <summary>
-        /// 没有可用库位
-        /// </summary>
-        [Description("没有可用库位")]
-        NotEnoughLocation = 2008,
-
-        /// <summary>
-        /// 库区编码不存在
-        /// </summary>
-        [Description("库区编码不存在")]
-        WareZoneCodeNotExist = 2009,
-
-        /// <summary>
-        /// 货位编码不存在
-        /// </summary>
-        [Description("货位编码不存在")]
-        WareLocationCodeNotExist = 2010,
-
-        /// <summary>
-        /// 物料编码不存在
-        /// </summary>
-        [Description("物料编码不存在")]
-        BaseMaterCodeNotExist = 2011,
-
-        /// <summary>
-        /// 单位编码不存在
-        /// </summary>
-        [Description("单位编码不存在")]
-        BaseUnitCodeNotExist = 2012,
-
-        /// <summary>
-        /// 条码不存在
-        /// </summary>
-        [Description("条码不存在")]
-        BaseBarcodeNotExist = 2013,
-
-        /// <summary>
-        /// 明细数据必须传参
-        /// </summary>
-        [Description("明细数据必须传参")]
-        DocDetailNotExist = 2014,
-
-        /// <summary>
-        /// 当前组盘状态不是已组盘,不允许取消
-        /// </summary>
-        [Description("当前组盘状态不是已组盘,不允许取消")]
-        StockStateNotBuildUp = 2015,
-
-        /// <summary>
-        /// 当前任务是已完成或已取消状态
-        /// </summary>
-        [Description("当前任务是已完成或已取消状态")]
-        WcsTaskStateIsComplete = 2016,
-
-        /// <summary>
-        /// 组盘状态是已出库或已入库
-        /// </summary>
-        [Description("组盘状态是已出库或已入库")]
-        StockStateFail = 2017,
-
-        /// <summary>
-        /// 当前入库任务还未分配货位,不允许完成
-        /// </summary>
-        [Description("当前入库任务还未分配货位,不允许完成")]
-        InTaskNotLocation = 2018,
-
-        /// <summary>
-        /// 当前任务不是新建状态,只能取消新建状态的任务
-        /// </summary>
-        [Description("当前任务不是新建状态,只能取消新建状态的任务")]
-        WcsTaskStateNotCreate = 2019,
-
-        /// <summary>
-        /// 单据不存在
-        /// </summary>
-        [Description("单据不存在")]
-        DocNoCodeNotExist = 2019,
-
-        /// <summary>
-        /// 单据状态不是新增或执行,不允许结单
-        /// </summary>
-        [Description("单据状态不是新增或执行,不允许结单")]
-        DocumentStateNotFinish = 2020,
-
-        /// <summary>
-        /// 单据存在新建或执行中的任务,不允许结单
-        /// </summary>
-        [Description("单据存在新建或执行中的任务,不允许结单")]
-        IsTaskNotFinish = 2021,
-
-        /// <summary>
-        /// 存在进行中任务,不允许解绑
-        /// </summary>
-        [Description("存在进行中任务,不允许解绑")]
-        IsTaskNotUnbounding = 2022,
-
-        /// <summary>
-        /// 没有当前设备信息,请进行维护
-        /// </summary>
-        [Description("没有当前设备信息,请进行维护")]
-        EquipInfoNotExist = 2023,
-
-        /// <summary>
-        /// 存在当前任务
-        /// </summary>
-        [Description("存在当前任务")]
-        WcsTaskExist = 2024,
-
-        /// <summary>
-        /// 组盘状态不对,请检查当前的组盘状态
-        /// </summary>
-        [Description("组盘状态不对,请检查当前的组盘状态")]
-        RFIDStockStateFail = 2025,
     }
 }