From 2afe4bd51a38abe0ef0e4befcc30188213808213 Mon Sep 17 00:00:00 2001 From: WenJY Date: Thu, 18 Jun 2026 21:39:20 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E6=B7=BB=E5=8A=A0=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E6=94=BE=E5=85=A5=E3=80=81=E6=89=8B=E5=8A=A8=E5=8F=96?= =?UTF-8?q?=E5=87=BA=E4=BB=BB=E5=8A=A1=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sln.Wcs.Business/TaskCreateService.cs | 23 ++++++++++++++----- .../ViewModels/Task/CreateTaskViewModel.cs | 7 +++++- Sln.Wcs.UI/Views/Task/CreateTaskView.axaml | 6 +++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Sln.Wcs.Business/TaskCreateService.cs b/Sln.Wcs.Business/TaskCreateService.cs index 56e4f15..7db7c1a 100644 --- a/Sln.Wcs.Business/TaskCreateService.cs +++ b/Sln.Wcs.Business/TaskCreateService.cs @@ -73,10 +73,17 @@ public class TaskCreateService int startBuilding, int startFloor, string startLocation, int endBuilding, int endFloor, string endLocation, int taskType, int taskCategory, - string palletBarcode, string materialCode) + string palletBarcode, string materialCode, + bool manualPutIn = false, bool manualTakeOut = false) { - var startPoint = PosCode(startBuilding, startFloor, startLocation); - var endPoint = PosCode(endBuilding, endFloor, endLocation); + // 手动放入: 起始位置替换为提升机接驳位 + // 手动取出: 目标位置替换为提升机接驳位 + var startPoint = manualPutIn + ? HoistPoint(startBuilding, startFloor) + : PosCode(startBuilding, startFloor, startLocation); + var endPoint = manualTakeOut + ? HoistPoint(endBuilding, endFloor) + : PosCode(endBuilding, endFloor, endLocation); _logger.Info($"创建任务 - {startPoint} ({startBuilding}#_{startFloor}F) → {endPoint} ({endBuilding}#_{endFloor}F)"); @@ -112,8 +119,12 @@ public class TaskCreateService var hoistEntry = HoistPoint(b1, f1); var hoistExit = HoistPoint(b2, f2); - details.Add(NewDetail(taskCode, palletBarcode, materialCode, - taskType, taskCategory, seq++, currentPos, hoistEntry, deviceType: 1)); + // 手动放入时已在提升机口,无需 AGV 段 + if (currentPos != hoistEntry) + { + details.Add(NewDetail(taskCode, palletBarcode, materialCode, + taskType, taskCategory, seq++, currentPos, hoistEntry, deviceType: 1)); + } details.Add(NewDetail(taskCode, palletBarcode, materialCode, taskType, taskCategory, seq++, hoistEntry, hoistExit, deviceType: 2)); @@ -121,7 +132,7 @@ public class TaskCreateService } } - // Step 3: 最终 AGV 送达终点(同栋同层时直接一条 AGV) + // Step 3: 最终 AGV 送达终点(同栋同层时直接一条 AGV;手动取出时终点=提升机口,已到达则跳过) if (details.Count == 0 || currentPos != endPoint) { details.Add(NewDetail(taskCode, palletBarcode, materialCode, diff --git a/Sln.Wcs.UI/ViewModels/Task/CreateTaskViewModel.cs b/Sln.Wcs.UI/ViewModels/Task/CreateTaskViewModel.cs index 17e1af6..940e91f 100644 --- a/Sln.Wcs.UI/ViewModels/Task/CreateTaskViewModel.cs +++ b/Sln.Wcs.UI/ViewModels/Task/CreateTaskViewModel.cs @@ -29,6 +29,10 @@ public partial class CreateTaskViewModel : ObservableObject [ObservableProperty] private string _palletBarcode = string.Empty; [ObservableProperty] private string _materialCode = string.Empty; + // ---- 手动操作选项 ---- + [ObservableProperty] private bool _manualPutIn; + [ObservableProperty] private bool _manualTakeOut; + // ---- 状态 ---- [ObservableProperty] private string _statusText = string.Empty; [ObservableProperty] private bool _isBusy; @@ -60,7 +64,8 @@ public partial class CreateTaskViewModel : ObservableObject StartBuilding, StartFloor, StartLocation, EndBuilding, EndFloor, EndLocation, TaskType, TaskCategory, - PalletBarcode, MaterialCode)); + PalletBarcode, MaterialCode, + ManualPutIn, ManualTakeOut)); StatusText = $"路由生成完成,共 {taskQueue.taskSteps} 条明细,正在保存..."; diff --git a/Sln.Wcs.UI/Views/Task/CreateTaskView.axaml b/Sln.Wcs.UI/Views/Task/CreateTaskView.axaml index 3d58872..3629e45 100644 --- a/Sln.Wcs.UI/Views/Task/CreateTaskView.axaml +++ b/Sln.Wcs.UI/Views/Task/CreateTaskView.axaml @@ -75,6 +75,12 @@ + + + + + +