From 366ba040d2447bacd3455299425e3166f1f992bb Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期四, 20 十一月 2025 14:38:32 +0800
Subject: [PATCH] 添加大车、大理片笼以及多设备串行/并行执行写入基础逻辑
---
mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java | 85 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 82 insertions(+), 3 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java
index 7d3f18a..ec1d8f2 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java
@@ -3,8 +3,10 @@
import com.mes.device.entity.DeviceConfig;
import com.mes.interaction.BaseDeviceLogicHandler;
import com.mes.device.service.DevicePlcOperationService;
+import com.mes.device.service.GlassInfoService;
import com.mes.device.vo.DevicePlcVO;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@@ -23,8 +25,13 @@
@Component
public class LoadVehicleLogicHandler extends BaseDeviceLogicHandler {
- public LoadVehicleLogicHandler(DevicePlcOperationService devicePlcOperationService) {
+ private final GlassInfoService glassInfoService;
+
+ public LoadVehicleLogicHandler(
+ DevicePlcOperationService devicePlcOperationService,
+ @Qualifier("deviceGlassInfoService") GlassInfoService glassInfoService) {
super(devicePlcOperationService);
+ this.glassInfoService = glassInfoService;
}
@Override
@@ -50,6 +57,10 @@
return handleTriggerReport(deviceConfig, params, logicParams);
case "reset":
return handleReset(deviceConfig, params, logicParams);
+ case "clearGlass":
+ case "clearPlc":
+ case "clear":
+ return handleClearGlass(deviceConfig, params, logicParams);
default:
log.warn("涓嶆敮鎸佺殑鎿嶄綔绫诲瀷: {}", operation);
return DevicePlcVO.OperationResult.builder()
@@ -201,6 +212,70 @@
);
}
+ /**
+ * 娓呯┖PLC涓殑鐜荤拑鏁版嵁
+ */
+ private DevicePlcVO.OperationResult handleClearGlass(
+ DeviceConfig deviceConfig,
+ Map<String, Object> params,
+ Map<String, Object> logicParams) {
+
+ Map<String, Object> payload = new HashMap<>();
+
+ int slotCount = getLogicParam(logicParams, "glassSlotCount", 6);
+ if (slotCount <= 0) {
+ slotCount = 6;
+ }
+
+ List<String> slotFields = resolveGlassSlotFields(logicParams, slotCount);
+ for (String field : slotFields) {
+ payload.put(field, "");
+ }
+
+ payload.put("plcGlassCount", 0);
+ payload.put("plcRequest", 0);
+ payload.put("plcReport", 0);
+
+ if (params != null && params.containsKey("positionValue")) {
+ payload.put("inPosition", params.get("positionValue"));
+ } else if (params != null && Boolean.TRUE.equals(params.get("clearPosition"))) {
+ payload.put("inPosition", 0);
+ }
+
+ log.info("娓呯┖涓婂ぇ杞LC鐜荤拑鏁版嵁: deviceId={}, clearedSlots={}", deviceConfig.getId(), slotFields.size());
+
+ return devicePlcOperationService.writeFields(
+ deviceConfig.getId(),
+ payload,
+ "涓婂ぇ杞�-娓呯┖鐜荤拑鏁版嵁"
+ );
+ }
+
+ private List<String> resolveGlassSlotFields(Map<String, Object> logicParams, int fallbackCount) {
+ List<String> fields = new ArrayList<>();
+ if (logicParams != null) {
+ Object slotFieldConfig = logicParams.get("glassSlotFields");
+ if (slotFieldConfig instanceof List) {
+ List<?> configured = (List<?>) slotFieldConfig;
+ for (Object item : configured) {
+ if (item != null) {
+ String fieldName = String.valueOf(item).trim();
+ if (!fieldName.isEmpty()) {
+ fields.add(fieldName);
+ }
+ }
+ }
+ }
+ }
+
+ if (fields.isEmpty()) {
+ for (int i = 1; i <= fallbackCount; i++) {
+ fields.add("plcGlassId" + i);
+ }
+ }
+ return fields;
+ }
+
@Override
public String validateLogicParams(DeviceConfig deviceConfig) {
Map<String, Object> logicParams = parseLogicParams(deviceConfig);
@@ -257,10 +332,14 @@
if (result.isEmpty()) {
List<String> glassIds = (List<String>) params.get("glassIds");
- if (glassIds != null) {
+ if (glassIds != null && !glassIds.isEmpty()) {
+ // 浠庢暟鎹簱鏌ヨ鐜荤拑灏哄
+ Map<String, Integer> lengthMap = glassInfoService.getGlassLengthMap(glassIds);
for (String glassId : glassIds) {
- result.add(new GlassInfo(glassId, null));
+ Integer length = lengthMap.get(glassId);
+ result.add(new GlassInfo(glassId, length));
}
+ log.debug("浠庢暟鎹簱鏌ヨ鐜荤拑灏哄: glassIds={}, lengthMap={}", glassIds, lengthMap);
}
}
return result;
--
Gitblit v1.8.0