Selaa lähdekoodia

Merge branch 'AGV' of zuolinhao/YG-OPP-WCS into master

zuolinhao 3 vuotta sitten
vanhempi
commit
9e9892c917

+ 4 - 16
Projects/永冠OPP/WCS.Service/Extensions/TaskExtension.cs

@@ -4,7 +4,9 @@ using System.Collections.Generic;
 using System.Linq;
 using WCS.Core;
 using WCS.Entity;
+using WCS.Entity.Protocol;
 using WCS.Service.Helpers;
+using WCS.Service.Log;
 
 namespace WCS.Service.Extensions
 {
@@ -110,23 +112,9 @@ namespace WCS.Service.Extensions
             return taskList;
         }
 
-        public static List<WCS_TASK> GetSrmValidTaskList(this IGrouping<string, WCS_TASK>[] taksList, SRMDevice srm, int index = 0)
+        public static void AGVStatusChange(this WCS_AGVTask task, AGVTaskStatus status, string type = "同步")
         {
-            return taksList[index].ToList();
-            //if (!taksList.Any() || index > (taksList.Length - 1)) throw new DoException("无可执行出库任务");
-            //var outDepot = taksList[index];
-            //WCS_TASK task=null;
-            //DB.Do(db =>
-            //{
-            //    task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.STATUS == TaskStatus.新建 && v.ADDRTO == outDepot.Key && v.Priority > 0 && v.DEVICE != srm.Entity.CODE);
-            //});
-            //if (task == null) return outDepot.ToList(); // 没有优先
-            //var dev = Device.Find(task.DEVICE).Create<SRMDevice>();
-            //if (dev.Data2.SRMMode == SCMode.远程 && dev.Data2.SRMStatus == SCRunStatus.空闲)
-            //{
-            //    taksList.GetSrmValidTaskList(srm, index++);
-            //}
-            //return outDepot.ToList(); //优先任务对应的堆垛机没有空闲
+            InfoLog.INFO_AGV($"AGV状态更新Status:{task.Status},AGVStatus:{status},{type}");
         }
     }
 

+ 17 - 7
Projects/永冠OPP/WCS.Service/Works/Station/涂布入库.cs

@@ -33,7 +33,7 @@ namespace WCS.Service.Works.Station
                 {
                     //找到所有的AGV任务
                     var agvTasks = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库)
-                    .Where(v => v.Status < AGVTaskStatus.完成).ToArray();
+                    .Where(v => v.Status < AGVTaskStatus.完成).OrderByDescending(v => v.Status).ThenBy(v => v.CreateTime).ToArray();
 
                     foreach (var tasking in agvTasks)
                     {
@@ -57,6 +57,9 @@ namespace WCS.Service.Works.Station
 
                             tasking.Status = AGVTaskStatus.执行;
                             tasking.UpdateTime = DateTime.Now;
+                            db.Default.SaveChanges();
+                            tasking.AGVStatusChange(AGVTaskStatus.执行, "变更");
+                            return;
                         }
                         //agv到达指定位置给确认后分配站台
                         else if (tasking.Status == AGVTaskStatus.执行 && tasking.AGVStatus == AGVTaskStatus.确认 && string.IsNullOrEmpty(tasking.Station))
@@ -81,6 +84,8 @@ namespace WCS.Service.Works.Station
                             tasking.Status = AGVTaskStatus.执行;
                             tasking.UpdateTime = DateTime.Now;
                             db.Default.SaveChanges();
+                            tasking.AGVStatusChange(AGVTaskStatus.执行, "变更");
+                            return;
                         }
                         else if (tasking.Status < tasking.AGVStatus)
                         {
@@ -160,6 +165,8 @@ namespace WCS.Service.Works.Station
                                 tasking.Status = tasking.AGVStatus;
                                 tasking.UpdateTime = DateTime.Now;
                                 db.Default.SaveChanges();
+                                tasking.AGVStatusChange(tasking.AGVStatus);
+                                return;
                             }
                             else if (tasking.AGVStatus == AGVTaskStatus.取放完成)
                             {
@@ -179,12 +186,12 @@ namespace WCS.Service.Works.Station
                                 db.Default.SaveChanges();
                                 foreach (var dev in stationDeviceGroup.Items)
                                 {
-                                    if (dev.Data2.Status.HasFlag(IstationStatus.光电状态))
-                                    {
-                                        dev.Data.Goodsnum = (short)tasking.Goodsnum;
-                                        dev.Data.Istation521Status = IstationStatus.AGV放货完成信号;
-                                    }
+                                    if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) continue;
+                                    dev.Data.Goodsnum = (short)tasking.Goodsnum;
+                                    dev.Data.Istation521Status = IstationStatus.AGV放货完成信号;
                                 }
+                                tasking.AGVStatusChange(tasking.AGVStatus);
+                                return;
                             }
                             else if (Ltc.Do(tasking, v => v.AGVStatus == AGVTaskStatus.完成))
                             {
@@ -196,16 +203,19 @@ namespace WCS.Service.Works.Station
                                 {
                                     dev.Data.Goodscode = tasking.ID;
                                 }
+                                tasking.AGVStatusChange(tasking.AGVStatus);
+                                return;
                             }
                             else if (Ltc.Do(tasking, v => v.AGVStatus == AGVTaskStatus.取消))
                             {
                                 tasking.Status = tasking.AGVStatus;
                                 tasking.UpdateTime = DateTime.Now;
                                 db.Default.SaveChanges();
+                                tasking.AGVStatusChange(tasking.AGVStatus);
+                                return;
                             }
                         }
                     }
-                    db.Default.SaveChanges();
                 });
 
                 #endregion 处理新增AGV任务

+ 9 - 3
Projects/永冠OPP/WCS.Service/Works/Station/涂布出库.cs

@@ -470,6 +470,7 @@ namespace WCS.Service.Works.Station
                                  tasking.Status = AGVTaskStatus.确认;
                                  tasking.UpdateTime = DateTime.Now;
                                  db.Default.SaveChanges();
+                                 tasking.AGVStatusChange(AGVTaskStatus.确认, "变更");
                              });
                              return;
                          }
@@ -478,12 +479,14 @@ namespace WCS.Service.Works.Station
                              tasking.Status = tasking.AGVStatus;
                              tasking.UpdateTime = DateTime.Now;
                              db.Default.SaveChanges();
+                             tasking.AGVStatusChange(tasking.AGVStatus);
                          }
                          else if (tasking.AGVStatus == AGVTaskStatus.取消)
                          {
                              tasking.Status = tasking.AGVStatus;
                              tasking.UpdateTime = DateTime.Now;
                              db.Default.SaveChanges();
+                             tasking.AGVStatusChange(tasking.AGVStatus);
                          }
                      }
                  });
@@ -500,7 +503,7 @@ namespace WCS.Service.Works.Station
                  DB.Do(db =>
                  {
                      var taskList = db.Default.Set<WCS_TASK>().Where(v => taskIds.Contains(v.ID));
-                     if (taskList.Count() == 0) return;
+                     if (!taskList.Any()) return;
                      if (taskList == null) throw new WarnException($"WCS任务号{JsonConvert.SerializeObject(taskIds)}不存在");
                      if (taskList.Any(v => v.TYPE != TaskType.出库)) throw new WarnException("有任务的类型不是出库");
                      if (taskList.Any(v => v.AgvTask == 0)) throw new WarnException("人工出库任务,请手动搬走");
@@ -512,8 +515,8 @@ namespace WCS.Service.Works.Station
                      if (agvtask.Status == AGVTaskStatus.确认)
                      {
                          if (!stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.高位))) throw new WarnException("不在高位");
-                         var flag = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.叫料)
-                         .Where(v => v.Status > AGVTaskStatus.确认 && v.Status < AGVTaskStatus.取放完成).Count();
+                         var flag = db.Default.Set<WCS_AGVTask>()
+                             .Where(v => v.TaskType == AGVTaskType.叫料).Count(v => v.Status > AGVTaskStatus.确认 && v.Status < AGVTaskStatus.取放完成);
                          if (flag >= 2) throw new Exception("有2未完成的AGV出库任务");
 
                          taskList.ToList().ForEach(task =>
@@ -527,6 +530,7 @@ namespace WCS.Service.Works.Station
                          agvtask.Status = AGVTaskStatus.执行;
                          agvtask.UpdateTime = DateTime.Now;
                          db.Default.SaveChanges();
+                         agvtask.AGVStatusChange(AGVTaskStatus.执行, "变更");
                      }
                      else if (agvtask.Status < agvtask.AGVStatus)
                      {
@@ -540,6 +544,7 @@ namespace WCS.Service.Works.Station
                              agvtask.Status = agvtask.AGVStatus;
                              agvtask.UpdateTime = DateTime.Now;
                              db.Default.SaveChanges();
+                             agvtask.AGVStatusChange(agvtask.AGVStatus);
                          }
                          else if (agvtask.AGVStatus == AGVTaskStatus.取放完成)
                          {
@@ -550,6 +555,7 @@ namespace WCS.Service.Works.Station
                              agvtask.Status = agvtask.AGVStatus;
                              agvtask.UpdateTime = DateTime.Now;
                              db.Default.SaveChanges();
+                             agvtask.AGVStatusChange(agvtask.AGVStatus);
 
                              foreach (var dev in stationDeviceGroup.Items)
                              {