From 08c72c378cee34a54d92e1c96479db403b5021c6 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 29 四月 2026 14:16:39 +0800
Subject: [PATCH] feat(机械手任务): 新增CheckSourceLineAndCreateRobotTask方法支持检查线体托盘号决策
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs | 98 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 98 insertions(+), 0 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
index 3502c79..38a97f2 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
@@ -240,6 +240,104 @@
}
/// <summary>
+ /// 妫�鏌ユ簮绾夸綋鏄惁鏈夋墭鐩樺彿锛屽苟鏍规嵁缁撴灉鍒涘缓鏈烘鎵嬩换鍔°��
+ /// </summary>
+ /// <param name="task">鍑哄簱浠诲姟瀹炰綋</param>
+ /// <returns>
+ /// 鏈夋墭鐩樺彿鏃惰繑鍥� CreateLocalRobotTask 缁撴灉锛�
+ /// 鏃犳墭鐩樺彿鏃惰繑鍥� GetWMSOutboundTrayTask 缁撴灉銆�
+ /// </returns>
+ public WebResponseContent CheckSourceLineAndCreateRobotTask(Dt_Task task)
+ {
+ // 1. 鑾峰彇婧愮嚎浣撶紪鍙凤紙澶嶇敤宸叉湁閫昏緫锛�
+ string configKey = ResolveRobotTaskConfigKey(task.TargetAddress);
+ StockDTO stock = BuildRobotTaskStock(task, configKey);
+ string sourceLineNo = stock.SourceLineNo;
+
+ if (string.IsNullOrWhiteSpace(sourceLineNo))
+ {
+ return GetWMSOutboundTrayTaskFromWMS(task);
+ }
+
+ // 2. 閫氳繃璁惧閫氫俊璇诲彇绾夸綋鎵樼洏鍙�
+ string? palletCode = ReadLineBarcode(sourceLineNo);
+
+ if (!string.IsNullOrWhiteSpace(palletCode))
+ {
+ // 鏈夋墭鐩樺彿锛屾湰鍦板垱寤烘満姊版墜浠诲姟
+ return CreateLocalRobotTask(task);
+ }
+
+ // 鏃犳墭鐩樺彿锛屼粠 WMS 鑾峰彇浠诲姟
+ return GetWMSOutboundTrayTaskFromWMS(task);
+ }
+
+ /// <summary>
+ /// 浠嶹MS鑾峰彇绌烘墭鐩樺嚭搴撲换鍔°��
+ /// </summary>
+ /// <param name="task">浠诲姟瀹炰綋銆�</param>
+ /// <returns>璋冪敤缁撴灉銆�</returns>
+ private WebResponseContent GetWMSOutboundTrayTaskFromWMS(Dt_Task task)
+ {
+ int warehouseId = MapWarehouseIdConfigKey(task.TargetAddress);
+ string sourceLineNo = ResolveRobotRuleValue(task.TargetAddress, "AddressSourceLineNoMap", task.TargetAddress);
+ string configKey = nameof(ConfigKey.GetOutBoundTrayTaskAsync);
+ string requestParam = new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson();
+ DateTime startTime = DateTime.Now;
+
+ var result = _httpClientHelper.Post<WebResponseContent>(configKey, requestParam);
+
+ if (!result.IsSuccess || !result.Data.Status)
+ {
+ QuartzLogHelper.LogError(_logger, $"璋冪敤WMS鎺ュ彛澶辫触,鎺ュ彛:銆恵configKey}銆�,璇锋眰鍙傛暟:銆恵requestParam}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�", "RobotTaskService");
+ return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺绌烘墭鐩樺嚭搴撲换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+ }
+
+ QuartzLogHelper.LogInfo(_logger, $"璋冪敤WMS鎺ュ彛鎴愬姛,鎺ュ彛:銆恵configKey}銆�,鍝嶅簲鏁版嵁:銆恵result.Data?.Data}銆�,鑰楁椂:{(DateTime.Now - startTime).TotalMilliseconds}ms", "RobotTaskService");
+
+ WMSTaskDTO? wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data?.ToString() ?? string.Empty);
+ if (wMSTask == null)
+ return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺绌烘墭鐩樺嚭搴撲换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆怶MS鏈繑鍥炴湁鏁堜换鍔℃暟鎹��");
+
+ // 鏋勫缓StockDTO骞惰皟鐢≧eceiveWMSTask鍒涘缓鏈湴鍏ュ簱浠诲姟
+ var stockDto = new StockDTO
+ {
+ Roadway = task.Roadway,
+ SourceLineNo = sourceLineNo,
+ TargetLineNo = task.TargetAddress,
+ SourcePalletNo = string.Empty,
+ TargetPalletNo = string.Empty
+ };
+ return ReceiveWMSTask(wMSTask, stockDto);
+ }
+
+ /// <summary>
+ /// 璇诲彇鎸囧畾绾夸綋鐨勬墭鐩樺彿銆�
+ /// </summary>
+ /// <param name="sourceLineNo">婧愮嚎浣撶紪鍙�</param>
+ /// <returns>鎵樼洏鍙凤紝濡傛湁寮傚父杩斿洖 null</returns>
+ private string? ReadLineBarcode(string sourceLineNo)
+ {
+ try
+ {
+ IDevice? device = Storage.Devices.FirstOrDefault(x =>
+ x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceLineNo));
+
+ if (device == null)
+ return null;
+
+ CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+ return conveyorLine.GetValue<ConveyorLineDBNameNew, string>(
+ ConveyorLineDBNameNew.Barcode, sourceLineNo);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error(ex, $"璇诲彇绾夸綋[{sourceLineNo}]鎵樼洏鍙峰紓甯�");
+ return null;
+ }
+ }
+
+ /// <summary>
/// 鑾峰彇鏈烘鎵嬩换鍔℃�绘暟閲忋��
/// 缁勭洏浠诲姟鍥哄畾48锛屾崲鐩樺拰鎷嗙洏浠诲姟閫氳繃鎵樼洏鍙锋煡璇MS搴撳瓨鏄庣粏鏁伴噺銆�
/// </summary>
--
Gitblit v1.9.3