林豪 左 1 jaar geleden
bovenliggende
commit
13cf213938

+ 4 - 1
WCS.Entity/WCS.Entity.csproj

@@ -15,8 +15,11 @@
   </PropertyGroup>
   
   <ItemGroup>
-    <PackageReference Include="SqlSugar" Version="1.0.0.2" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
   </ItemGroup>
+  
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\..\Code\SqlSugar\Src\Asp.NetCore2\SqlSugar\SqlSugar.csproj" />
+  </ItemGroup>
 
 </Project>

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

@@ -10,6 +10,7 @@ using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
+using TaskStatus = WCS.Entity.TaskStatus;
 
 namespace WCS.WorkEngineering.Systems
 {
@@ -247,19 +248,36 @@ namespace WCS.WorkEngineering.Systems
                                         break;
                                     //完成任务
                                     case AGVTaskStatus.MissionCompleted when agv.Status != AGVTaskStatus.MissionCompleted:
+                                        var taskold = db.Default.Queryable<WCS_TaskOld>().NoLock().Where(x => x.Id == agv.TaskId).SplitTable(x => x.Take(2)).First();
                                         if (agv.TaskType == AGVTaskType.EnterDepot)
                                         {
                                             agv.Status = AGVTaskStatus.MissionCompleted;
                                             db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
                                             var devinfo = new Device<IStation520, IStation521>(Device.All.First(x => x.Code == agv.Station), World);
                                             devinfo.Data.CmdType = StationCmd.Res2;
+                                            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", "任务完成");
+                                            }
                                         }
                                         break;
 
                                     case AGVTaskStatus.Cancel when agv.Status != AGVTaskStatus.Cancel:
-
+                                        var taskold1 = db.Default.Queryable<WCS_TaskOld>().NoLock().Where(x => x.Id == agv.TaskId).SplitTable(x => x.Take(2)).First();
                                         agv.Status = AGVTaskStatus.Cancel;
                                         db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                        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", "任务取消");
+                                        }
                                         break;
                                 }
 

+ 64 - 32
业务工程/分拣库/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -65,37 +65,69 @@ namespace WCS.WorkEngineering.Systems
                                 break;
 
                             case TaskType.EnterDepot:
-                                //更新任务状态
-                                task.Status = Entity.TaskStatus.WaitingToExecute;
-                                task.Device = task.WarehouseCode switch
+                                if (task.LastInteractionPoint == "2")
                                 {
-                                    "1N" => "SRM1",
-                                    "1S" => "SRM2",
-                                    "2N" => "SRM3",
-                                    "2S" => "SRM4",
-                                    "3N" => "SRM5",
-                                    "3S" => "SRM6",
-                                    _ => task.Device
-                                };
-
-                                task.Device = task.AddrFrom switch
+                                    var agv = new WCS_AgvTaskInfo()
+                                    {
+                                        ID = db.GetAgvTaskId(),
+                                        TaskType = AGVTaskType.EnterDepot,
+                                        Status = AGVTaskStatus.NewBuild,
+                                        TaskId = task.ID,
+                                        Position = task.WorkBench,
+                                        Station = task.WarehouseCode switch
+                                        {
+                                            "1N" => "2501",
+                                            "1S" => "2701",
+                                            "2N" => "2901",
+                                            "2S" => "3101",
+                                            "3N" => "3301",
+                                            "3S" => "3501",
+                                            _ => throw new NotImplementedException(),
+                                        },
+                                        AddWho = "WCS",
+                                        AddTime = DateTime.Now
+                                    };
+                                    db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
+                                    task.AgvTaskID = agv.ID;
+                                    task.Status = Entity.TaskStatus.WaitingToExecute;
+                                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID }).ExecuteCommand();
+                                    task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化单独饭皮盘任务");
+                                }
+                                else
                                 {
-                                    "1666" or "1661" => "SRM1",
-                                    "1681" or "1676" => "SRM2",
-                                    "1696" or "1691" => "SRM3",
-                                    "1711" or "1706" => "SRM4",
-                                    "1726" or "1721" => "SRM5",
-                                    "1741" or "1736" => "SRM6",
-                                    _ => task.Device
-                                };
-
-                                //计算下一个地址
-                                var path1 = DevicePath.GetPath(task.AddrFrom, task.Device);
-                                task.AddrNext = path1.Points[1].Code;
-                                task.SrmStation = task.BarCode.Contains("TPA") || task.BarCode.Contains("TPB") ? task.AddrFrom : path1.Points[2].Code;
-
-                                db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.Device, x.AddrNext, x.SrmStation }).ExecuteCommand();
-                                task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
+                                    //更新任务状态
+                                    task.Status = Entity.TaskStatus.WaitingToExecute;
+                                    task.Device = task.WarehouseCode switch
+                                    {
+                                        "1N" => "SRM1",
+                                        "1S" => "SRM2",
+                                        "2N" => "SRM3",
+                                        "2S" => "SRM4",
+                                        "3N" => "SRM5",
+                                        "3S" => "SRM6",
+                                        _ => task.Device
+                                    };
+
+                                    task.Device = task.AddrFrom switch
+                                    {
+                                        "1666" or "1661" => "SRM1",
+                                        "1681" or "1676" => "SRM2",
+                                        "1696" or "1691" => "SRM3",
+                                        "1711" or "1706" => "SRM4",
+                                        "1726" or "1721" => "SRM5",
+                                        "1741" or "1736" => "SRM6",
+                                        _ => task.Device
+                                    };
+
+                                    //计算下一个地址
+                                    var path1 = DevicePath.GetPath(task.AddrFrom, task.Device);
+                                    task.AddrNext = path1.Points[1].Code;
+                                    task.SrmStation = task.BarCode.Contains("TPA") || task.BarCode.Contains("TPB") ? task.AddrFrom : path1.Points[2].Code;
+
+                                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.Device, x.AddrNext, x.SrmStation }).ExecuteCommand();
+                                    task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
+                                }
+
                                 isEnd = true;
                                 break;
 
@@ -177,9 +209,9 @@ namespace WCS.WorkEngineering.Systems
                                         }
 
                                         var devs = Device.All.Where(x => x.HasFlag(DeviceFlags.AGV取货站台口)).Select(x => x.Code);
-                                        if (devs.Contains(task.SrmStation))
+                                        if (devs.Contains(task.SrmStation) && task.LastInteractionPoint != "3") //车间叫料任务,此值为3时是单独取满任务
                                         {
-                                            var b = new WCS_AgvTaskInfo()
+                                            var agv = new WCS_AgvTaskInfo()
                                             {
                                                 ID = db.GetAgvTaskId(),
                                                 TaskType = AGVTaskType.EnterDepot,
@@ -199,7 +231,7 @@ namespace WCS.WorkEngineering.Systems
                                                 AddWho = "WCS",
                                                 AddTime = DateTime.Now
                                             };
-                                            db.Default.InsertableRowLock(b).SplitTable().ExecuteCommand();
+                                            db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
                                         }
                                         //更新任务状态
                                         task.Status = Entity.TaskStatus.WaitingToExecute;

+ 18 - 7
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -233,7 +233,7 @@ namespace WCS.WorkEngineering.Systems
                     return;
                 }
                 World.Log($"物理可用取货线体:{JsonConvert.SerializeObject(pickUpDevices.Select(x => x.key).ToList())}");
-                World.Log($"可用取货线体:{JsonConvert.SerializeObject(cacheLines.Select(x => x.LocationNo).ToList())}");
+                World.Log($"执行记录:可用取货线体:{JsonConvert.SerializeObject(cacheLines.Select(x => x.LocationNo).ToList())}");
                 //找到可用缓存线可以去的码垛信息
                 palletizingLsit = palletizingLsit.Where(x => x.Layers
                     .Where(w => !w.Finish)
@@ -269,19 +269,28 @@ namespace WCS.WorkEngineering.Systems
                     }
 
                     var rowIds = new List<int>();
+
+                    //记录当前放货点可用规格包含的取货信息
+                    cacheLines = cacheLines.Where(x => x.WarehouseCode == palletizingInfo.WarehouseCode && palletizingInfo.MatCodeList.Contains(x.MatCodeList)).ToList();
+                    World.Log($"执行记录:码垛位{palletizingInfo.PalletizingStation}--{JsonConvert.SerializeObject(cacheLines.Select(x => x.LocationNo).ToList())}");
+
                     //跟据缓存信息找到对应的可用取货行
                     var rowList = cacheLines.Select(x =>
                     {
-                        var b = palletizingRow.Where(w => !rowIds.Contains(w.Id) && x.MatCodeList == w.MatCodeList && (x.Quantity == w.QtyMaxCount || (x.AddTime < DateTime.Now.AddHours(-6) && x.Quantity <= w.QtyMaxCount)) && w.WarehouseCode == x.WarehouseCode).MinBy(o => o.RowNo);
-                        if (b != null)
+                        var row = palletizingRow.Where(w => !rowIds.Contains(w.Id)
+                                                          && x.MatCodeList == w.MatCodeList
+                                                          && (x.Quantity == w.QtyMaxCount || (x.AddTime < DateTime.Now.AddHours(-6) && x.Quantity <= w.QtyMaxCount))
+                                                          && w.WarehouseCode == x.WarehouseCode).MinBy(o => o.RowNo);
+
+                        if (row != null)
                         {
-                            rowIds.Add(b.Id);
+                            rowIds.Add(row.Id);
                             return new
                             {
                                 CacheLineId = x.Id,
-                                RowId = b.Id,
+                                RowId = row.Id,
                                 x.LocationNo,
-                                b.RowNo,
+                                row.RowNo,
                                 x.AddTime
                             };
                         }
@@ -293,7 +302,9 @@ namespace WCS.WorkEngineering.Systems
                             RowNo = 0,
                             x.AddTime
                         };
-                    }).Where(x => x.CacheLineId != 0).OrderBy(x => x.RowNo).Take(2).ToList();
+                    }).Where(x => x.CacheLineId != 0).ToList();
+
+                    rowList = rowList.OrderBy(x => x.RowNo).Take(2).ToList();
 
                     //两个任务取货线体号相同时,只执行一个任务
                     if (rowList.Count == 2 && rowList[0].LocationNo == rowList[1].LocationNo)