From dad0263459b30dbfa75f06dff062a0c85183517b Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期一, 01 十二月 2025 17:01:51 +0800
Subject: [PATCH] 添加卧转立扫码设备交互逻辑,任务流转
---
mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java | 82 +++++++++++++++++++++++++++++++++++-----
1 files changed, 71 insertions(+), 11 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
index 4a40192..2599607 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
@@ -16,6 +16,8 @@
import com.mes.s7.enhanced.EnhancedS7Serializer;
import com.mes.s7.provider.S7SerializerProvider;
import com.mes.service.PlcDynamicDataService;
+import com.mes.task.model.TaskExecutionContext;
+import com.mes.interaction.workstation.scanner.handler.HorizontalScannerLogicHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -256,7 +258,23 @@
}
// 浠庨厤缃腑鑾峰彇閫熷害锛堝鏋滄湁锛�
- Double speed = getLogicParam(logicParams, "vehicleSpeed", null);
+ Object speedObj = logicParams != null ? logicParams.get("vehicleSpeed") : null;
+ Double speed = null;
+ if (speedObj != null) {
+ if (speedObj instanceof Double) {
+ speed = (Double) speedObj;
+ } else if (speedObj instanceof Integer) {
+ speed = ((Integer) speedObj).doubleValue();
+ } else if (speedObj instanceof Number) {
+ speed = ((Number) speedObj).doubleValue();
+ } else {
+ try {
+ speed = Double.parseDouble(String.valueOf(speedObj));
+ } catch (NumberFormatException e) {
+ log.warn("鏃犳硶瑙f瀽vehicleSpeed: {}", speedObj);
+ }
+ }
+ }
if (speed != null) {
task.setSpeed(speed);
task.calculateEstimatedEndTime();
@@ -284,7 +302,23 @@
// 浠庨�昏緫鍙傛暟涓幏鍙栭厤缃紙浠� extraParams.deviceLogic 璇诲彇锛�
Integer vehicleCapacity = getLogicParam(logicParams, "vehicleCapacity", 6000);
- Integer glassIntervalMs = getLogicParam(logicParams, "glassIntervalMs", 1000);
+ // 浼樺厛浣跨敤杩愯鏃跺弬鏁颁腑鐨刧lassIntervalMs锛堜粠浠诲姟鍙傛暟浼犲叆锛夛紝濡傛灉娌℃湁鍒欎娇鐢ㄨ澶囬厤缃殑
+ Integer glassIntervalMs = null;
+ if (params.containsKey("glassIntervalMs") && params.get("glassIntervalMs") != null) {
+ Object intervalObj = params.get("glassIntervalMs");
+ if (intervalObj instanceof Number) {
+ glassIntervalMs = ((Number) intervalObj).intValue();
+ } else if (intervalObj instanceof String) {
+ try {
+ glassIntervalMs = Integer.parseInt((String) intervalObj);
+ } catch (NumberFormatException e) {
+ // 蹇界暐
+ }
+ }
+ }
+ if (glassIntervalMs == null) {
+ glassIntervalMs = getLogicParam(logicParams, "glassIntervalMs", 1000);
+ }
Boolean autoFeed = getLogicParam(logicParams, "autoFeed", true);
Integer maxRetryCount = getLogicParam(logicParams, "maxRetryCount", 5);
@@ -311,11 +345,20 @@
.build();
}
if (plannedGlasses.isEmpty()) {
+ // 瑁呬笉涓嬶紝閫氱煡鍗ц浆绔嬫壂鐮佽澶囨殏鍋�
+ notifyScannerPause(params, true);
+ log.warn("澶ц溅璁惧瑁呬笉涓嬶紝宸查�氱煡鍗ц浆绔嬫壂鐮佹殏鍋�: deviceId={}, glassCount={}, vehicleCapacity={}",
+ deviceConfig.getId(), glassInfos.size(), vehicleCapacity);
return DevicePlcVO.OperationResult.builder()
.success(false)
- .message("褰撳墠鐜荤拑灏哄瓒呭嚭杞﹁締瀹归噺锛屾棤娉曡杞�")
+ .message("褰撳墠鐜荤拑灏哄瓒呭嚭杞﹁締瀹归噺锛屾棤娉曡杞斤紝宸查�氱煡鍗ц浆绔嬫壂鐮佹殏鍋�")
.build();
}
+
+ // 瑁呭緱涓嬶紝纭繚鍗ц浆绔嬫壂鐮佺户缁繍琛�
+ notifyScannerPause(params, false);
+
+ // 缁х画鎵ц鍘熸湁閫昏緫
// 鏋勫缓鍐欏叆鏁版嵁
Map<String, Object> payload = new HashMap<>();
@@ -354,16 +397,13 @@
log.info("澶ц溅璁惧鐜荤拑涓婃枡: deviceId={}, glassCount={}, position={}, plannedGlassIds={}",
deviceConfig.getId(), plcSlots, positionCode, plannedGlasses);
- if (glassIntervalMs != null && glassIntervalMs > 0) {
- try {
- Thread.sleep(glassIntervalMs);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
-
+ // 鍐欏叆PLC锛岃澶ц溅寮�濮嬭鐜荤拑
DevicePlcVO.OperationResult result = devicePlcOperationService.writeFields(
deviceConfig.getId(), payload, operationName);
+
+ // 娉ㄦ剰锛歡lassIntervalMs 鐨勭瓑寰呭簲璇ュ湪鎵规涔嬮棿锛堝湪TaskExecutionEngine涓鐞嗭級锛�
+ // 鑰屼笉鏄湪杩欓噷绛夊緟锛屽洜涓鸿繖閲岀瓑寰呬細闃诲澶ц溅鐨勬甯歌鐜荤拑娴佺▼
+ // 濡傛灉闇�瑕佸湪鍐欏叆鍚庣瓑寰咃紝搴旇鍦ㄦ壒娆′箣闂寸瓑寰咃紝璁╁ぇ杞︽湁鏃堕棿澶勭悊褰撳墠鎵规鐨勭幓鐠�
// 濡傛灉鎵ц鎴愬姛锛屾洿鏂颁綅缃俊鎭埌鐘舵�侊紝骞跺惎鍔ㄧ姸鎬佺洃鎺�
if (Boolean.TRUE.equals(result.getSuccess())) {
@@ -1754,5 +1794,25 @@
Thread.currentThread().interrupt();
}
}
+
+ /**
+ * 閫氱煡鍗ц浆绔嬫壂鐮佽澶囨殏鍋滄垨缁х画
+ * @param params 鍙傛暟锛屽寘鍚玙taskContext寮曠敤
+ * @param pause true=鏆傚仠锛宖alse=缁х画
+ */
+ private void notifyScannerPause(Map<String, Object> params, boolean pause) {
+ if (params == null) {
+ return;
+ }
+
+ Object contextObj = params.get("_taskContext");
+ if (contextObj instanceof TaskExecutionContext) {
+ TaskExecutionContext context = (TaskExecutionContext) contextObj;
+ HorizontalScannerLogicHandler.setPauseFlag(context, pause);
+ log.info("宸查�氱煡鍗ц浆绔嬫壂鐮佽澶噞}: pause={}", pause ? "鏆傚仠" : "缁х画", pause);
+ } else {
+ log.debug("鏈壘鍒癟askExecutionContext锛屾棤娉曢�氱煡鍗ц浆绔嬫壂鐮佽澶囨殏鍋�");
+ }
+ }
}
--
Gitblit v1.8.0