gkj há 2 anos atrás
pai
commit
f33571d0ef
1 ficheiros alterados com 65 adições e 70 exclusões
  1. 65 70
      WCS.WorkEngineering/WebApi/Controllers/AgvController.cs

+ 65 - 70
WCS.WorkEngineering/WebApi/Controllers/AgvController.cs

@@ -72,67 +72,74 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             {
                 ApplyEmptySpoolResponse agvFill = new ApplyEmptySpoolResponse();
 
-                if (!World.IsStart)
+                try
                 {
-                    agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
-                    agvFill.ResMsg = "WCS初始化中";
-                    return agvFill;
-                }
-                var obj = World.GetSystemInstance<GetDeviceSystem>().Invoke("输送机") as List<Station>;
-
-                // 检测三个站台是否有货
-                obj = obj.Where(v => v.Entity.Code is "1012" or "1014" or "1016").Where(v => v.Data3.Status.HasFlag(StatusEunm.PH_Status)).ToList();
-                if (!obj.Any())
-                {
-                    agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
-                    agvFill.ResMsg = "无空轮";
-                    return agvFill;
-                }
-                SqlSugarHelper.Do(db =>
-                {
-                    var res = WmsApi.GetTunnelEmptyConCount();
-
-                    var agvStations = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2))
-                                      .Where(v => v.Status < AGVTaskStatus.Complete3 && v.TaskType == AGVTaskType.CallForMaterial).Select(v => v.Station).ToList();
-                    obj = obj.Where(v => !agvStations.Contains(v.Entity.Code)).ToList();
-                    if (!obj.Any())
+                    if (!World.IsStart)
                     {
                         agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
-                        agvFill.ResMsg = "无可用取货站点";
-                        return;
+                        agvFill.ResMsg = "WCS初始化中";
+                        return agvFill;
                     }
+                    var obj = World.GetSystemInstance<GetDeviceSystem>().Invoke("输送机") as List<Station>;
 
-                    foreach (var item in res.ResDataList)
+                    // 检测三个站台是否有货
+                    obj = obj.Where(v => v.Entity.Code is "1012" or "1014" or "1016").Where(v => v.Data3.Status.HasFlag(StatusEunm.PH_Status)).ToList();
+                    if (!obj.Any())
                     {
-                        var station = Device.All.Where(v => v.Code == "TY" + item.Tunnel.ToString())
-                                                .Select(v => v.Targets).SelectMany(v => v)
-                                                .Where(v => v.HasProtocol(typeof(IStation520)))
-                                                .Where(v => v.Code is "1012" or "1014" or "1016")
-                                                .FirstOrDefault();
-                        item.Tunnel = station.ToInt();
+                        agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
+                        agvFill.ResMsg = "无空轮";
+                        return agvFill;
                     }
-                    var stationNo = res.ResDataList.OrderBy(v => v.Count).Select(v => v.Tunnel.ToString()).ToList();
-                    agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.Sucess;
-                    var dev = obj.MinBy(v => stationNo.IndexOf(v.Entity.Code));
-                    agvFill.LocCode = dev.Entity.Code;
-                    agvFill.SpoolType = "4";
-                    agvFill.ResMsg = "";
-                    var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(1)).Max(v => v.ID);
-                    var agv = new WCS_AgvTaskInfo()
+                    SqlSugarHelper.Do(db =>
                     {
-                        ID = db.GetAGVTaskId(),
-                        TaskType = AGVTaskType.CallForMaterial,
-                        Status = AGVTaskStatus.NewBuild,
-                        Station = agvFill.LocCode,
-                        AddWho = "WCS"
-                    };
-                    //创建对应的AGV任务
-                    db.Default.Insertable(agv).SplitTable().ExecuteCommand();
-                    var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == dev.Data.TaskNumber);
-                    task.AgvTaskID=agv.ID;
-                    db.Default.Updateable(task).ExecuteCommand();
-
-                });
+                        var res = WmsApi.GetTunnelEmptyConCount();
+
+                        var agvStations = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2))
+                                          .Where(v => v.Status < AGVTaskStatus.Complete3 && v.TaskType == AGVTaskType.CallForMaterial).Select(v => v.Station).ToList();
+                        obj = obj.Where(v => !agvStations.Contains(v.Entity.Code)).ToList();
+                        if (!obj.Any())
+                        {
+                            agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
+                            agvFill.ResMsg = "无可用取货站点";
+                            return;
+                        }
+
+                        foreach (var item in res.ResDataList)
+                        {
+                            var station = Device.All.Where(v => v.Code == "TY" + item.Tunnel.ToString())
+                                                    .Select(v => v.Targets).SelectMany(v => v)
+                                                    .Where(v => v.HasProtocol(typeof(IStation520)))
+                                                    .Where(v => v.Code is "1012" or "1014" or "1016")
+                                                    .FirstOrDefault();
+                            item.Tunnel = station.ToInt();
+                        }
+                        var stationNo = res.ResDataList.OrderBy(v => v.Count).Select(v => v.Tunnel.ToString()).ToList();
+                        agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.Sucess;
+                        var dev = obj.MinBy(v => stationNo.IndexOf(v.Entity.Code));
+                        agvFill.LocCode = dev.Entity.Code;
+                        agvFill.SpoolType = "4";
+                        agvFill.ResMsg = "";
+                        var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(1)).Max(v => v.ID);
+                        var agv = new WCS_AgvTaskInfo()
+                        {
+                            ID = db.GetAGVTaskId(),
+                            TaskType = AGVTaskType.CallForMaterial,
+                            Status = AGVTaskStatus.NewBuild,
+                            Station = agvFill.LocCode,
+                            AddWho = "WCS"
+                        };
+                        //创建对应的AGV任务
+                        db.Default.Insertable(agv).SplitTable().ExecuteCommand();
+                        var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == dev.Data.TaskNumber);
+                        task.AgvTaskID = agv.ID;
+                        db.Default.Updateable(task).ExecuteCommand();
+                    });
+                }
+                catch (Exception ex)
+                {
+                    agvFill.ResCode = Models.WMS.Response.ResponseStatusCodeEnum.DataSaveErr;
+                    agvFill.ResMsg = ex.Message;
+                }
 
                 return agvFill;
             }
@@ -153,7 +160,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                 SqlSugarHelper.Do(db =>
                 {
                     //跟据AGVid找到对应的AGV任务
-                    var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2)).First(v => v.AgvID == reqDto.taskCode);
+                    var agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(tabs => tabs.Take(2)).First(v => v.AgvID == reqDto.taskCode && v.Status < AGVTaskStatus.MissionCompleted);
                     if (agvTask == null && reqDto.method != "applySecurity")
                     {
                         res.code = AgvResponseCode.Fail;
@@ -162,16 +169,6 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                     }
                     switch (reqDto.method)
                     {
-                        //case "start": //表示请求巷道
-
-                        //    agvTask.Status = AGVTaskStatus.RequestOrPermission1;
-                        //    break;
-
-                        //case "end": //表示请求巷道
-
-                        //    agvTask.Status = AGVTaskStatus.RequestOrPermission1;
-                        //    break;
-
                         case "applyContinue": //表示请求巷道
 
                             agvTask.Status = AGVTaskStatus.RequestOrPermission1;
@@ -187,9 +184,10 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                 var obj = World.GetSystemInstance<GetDeviceSystem>().Invoke("输送机") as List<Station>;
                                 var id = obj.FirstOrDefault(v => v.Entity.Code == agvTask.Station).Data.TaskNumber;
                                 taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == id);
-                                taskInfo.AgvTaskID=agvTask.ID;
+                                taskInfo.AgvTaskID = agvTask.ID;
                                 taskInfo.Status = Entity.TaskStatus.AGVExecution;
                                 taskInfo.AddWCS_TASK_DTL(db, agvTask.Station, "agv执行中");
+                                db.Default.Updateable(taskInfo).ExecuteCommand();
                             }
                             if (agvTask == null)
                             {
@@ -203,12 +201,12 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                         case "hjend_2": //补空任务完成
                             if (agvTask.TaskType == AGVTaskType.CallForMaterial)
                             {
-                                
                                 taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agvTask.ID);
                                 taskInfo.Status = Entity.TaskStatus.Finish;
                                 taskInfo.EedTime = DateTime.Now;
                                 taskInfo.AddWCS_TASK_DTL(db, "agv缓存区", "任务完成");
                                 taskInfo.CompleteOrCancelTasks(db);
+                                db.Default.Updateable(taskInfo).ExecuteCommand();
                             }
                             agvTask.Status = AGVTaskStatus.MissionCompleted;
                             break;
@@ -239,16 +237,13 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                     }
                     db.Default.Updateable(agvTask).SplitTable().ExecuteCommand();
                 });
-                if (taskInfo != null&& taskInfo.Status== Entity.TaskStatus.Finish) WmsApi.CompleteTask(taskInfo.ID);
+                if (taskInfo != null && taskInfo.Status == Entity.TaskStatus.Finish) WmsApi.CompleteTask(taskInfo.ID);
             }
             catch (Exception ex)
             {
                 res.code = AgvResponseCode.Error;
                 res.message = ex.Message;
             }
-
-            if (taskInfo != null) WmsApi.CompleteTask(taskInfo.ID);
-
             return res;
         }
     }