From 04914a9997afbbead6f8adbb9d9c40e05b2edbd1 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 17 十二月 2025 17:04:34 +0800
Subject: [PATCH] 修复调用导入工程失败 重复保存;修复分批出片逻辑
---
mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java | 145 ++++++++++++++++++++++--------------------------
1 files changed, 66 insertions(+), 79 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 5ae4704..63b1ea4 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
@@ -1331,10 +1331,22 @@
MesTaskInfo existingTask = currentTasks.get(deviceId);
if (existingTask != null) {
log.debug("璁惧宸叉湁浠诲姟鍦ㄦ墽琛屼腑锛岃烦杩囨鏌ES浠诲姟: deviceId={}", deviceId);
+ // 浠嶇劧杩斿洖褰撳墠浠诲姟鐨勭幓鐠冨垪琛紝渚涗换鍔″紩鎿庤褰�/瀵硅处鏈壒娆�
+ List<String> batchIds = new ArrayList<>();
+ if (existingTask.glasses != null) {
+ for (GlassTaskInfo g : existingTask.glasses) {
+ if (g != null && g.glassId != null && !g.glassId.isEmpty()) {
+ batchIds.add(g.glassId);
+ }
+ }
+ }
return DevicePlcVO.OperationResult.builder()
.success(true)
.message("浠诲姟鎵ц涓紝鏃犻渶閲嶅妫�鏌ES浠诲姟")
- .data(Collections.singletonMap("waiting", false))
+ .data(new HashMap<String, Object>() {{
+ put("waiting", false);
+ put("batchGlassIds", batchIds);
+ }})
.build();
}
@@ -1357,6 +1369,7 @@
waitData.put("completed", false);
waitData.put("waiting", true);
waitData.put("waitingReason", "mesSend=0");
+ waitData.put("batchGlassIds", new ArrayList<>());
return DevicePlcVO.OperationResult.builder()
.success(true)
.message("绛夊緟MES鍙戦�佽姹傦紙mesSend=0锛�")
@@ -1500,6 +1513,39 @@
}
currentTasks.put(deviceId, taskInfo);
+
+ // 濡傛灉鏈夊璁惧浠诲姟涓婁笅鏂囷紝鍒欒褰曟湰娆ES涓嬪彂鐨勭幓鐠僆D鍒楄〃鍒颁笂涓嬫枃锛屼緵鍒嗘壒鏍¢獙浣跨敤
+ if (params != null) {
+ Object ctxObj = params.get("_taskContext");
+ if (ctxObj instanceof com.mes.task.model.TaskExecutionContext) {
+ com.mes.task.model.TaskExecutionContext ctx = (com.mes.task.model.TaskExecutionContext) ctxObj;
+ List<String> batchIds = new ArrayList<>();
+ for (GlassTaskInfo g : glasses) {
+ if (g != null && g.glassId != null && !g.glassId.isEmpty()) {
+ batchIds.add(g.glassId);
+ }
+ }
+ // 1. 璁板綍褰撳墠鎵规鐨勭幓鐠僆D
+ ctx.getSharedData().put("currentMesBatchGlassIds", batchIds);
+ log.info("璁板綍鏈MES鎵规鐜荤拑鍒楄〃: deviceId={}, batchIds={}", deviceId, batchIds);
+
+ // 2. 鍒濆鍖栨�诲緟鍑虹墖鐜荤拑鍒楄〃锛堜粎绗竴娆″垵濮嬪寲锛屼粠浠诲姟鍙傛暟鑾峰彇锛�
+ if (!ctx.getSharedData().containsKey("initialGlassIds")) {
+ // 浠庝换鍔″弬鏁颁腑鑾峰彇鎬诲緟鍑虹墖鐜荤拑ID锛堟牳蹇冿細鎬诲垪琛ㄦ潵鑷换鍔″弬鏁帮紝鑰岄潪MES鎵规锛�
+ List<String> taskGlassIds = ctx.getParameters().getGlassIds();
+ if (taskGlassIds != null && !taskGlassIds.isEmpty()) {
+ ctx.getSharedData().put("initialGlassIds", new ArrayList<>(taskGlassIds));
+ // 鍒濆鍖栧凡鍑虹墖鍒楄〃涓虹┖
+ if (!ctx.getSharedData().containsKey("outboundGlassIds")) {
+ ctx.getSharedData().put("outboundGlassIds", new ArrayList<>());
+ }
+ log.info("鍒濆鍖栨�诲緟鍑虹墖鐜荤拑鍒楄〃: deviceId={}, taskGlassIds={}", deviceId, taskGlassIds);
+ } else {
+ log.warn("浠诲姟鍙傛暟涓湭鎵惧埌鎬诲緟鍑虹墖鐜荤拑ID鍒楄〃: deviceId={}", deviceId);
+ }
+ }
+ }
+ }
// 娓呯┖plcRequest锛堣〃绀哄凡鎺ユ敹浠诲姟锛�
Map<String, Object> payload = new HashMap<>();
@@ -1537,6 +1583,14 @@
Map<String, Object> successData = new HashMap<>();
successData.put("waiting", false);
successData.put("taskStarted", true);
+ // 灏嗘湰娆ES涓嬪彂鐨勭幓鐠僆D鍒楄〃閫氳繃杩斿洖鍊煎甫鍥烇紙浠诲姟寮曟搸涓嶅啀渚濊禆_taskContext鍐欏叆锛�
+ List<String> batchIdsForReturn = new ArrayList<>();
+ for (GlassTaskInfo g : glasses) {
+ if (g != null && g.glassId != null && !g.glassId.isEmpty()) {
+ batchIdsForReturn.add(g.glassId);
+ }
+ }
+ successData.put("batchGlassIds", batchIdsForReturn);
return DevicePlcVO.OperationResult.builder()
.success(true)
@@ -2063,8 +2117,11 @@
if (taskInfo == null) {
log.info("妫�鏌ES纭鏃舵湭鎵惧埌浠诲姟璁板綍锛屽皾璇曡ˉ鍋挎鏌ES浠诲姟: deviceId={}", deviceId);
try {
+ // 鍏抽敭锛氳ˉ鍋挎鏌ユ椂涔熻閫忎紶params锛堝寘鍚玙taskContext锛夛紝
+ // 鍚﹀垯handleCheckMesTask鏃犳硶鎶婃湰鎵规鐜荤拑ID鍐欏叆currentMesBatchGlassIds锛屼换鍔″紩鎿庢棤娉曠疮鍔犲畬鎴愯繘搴�
+ Map<String, Object> checkParams = params != null ? params : Collections.emptyMap();
DevicePlcVO.OperationResult checkResult =
- handleCheckMesTask(deviceConfig, Collections.emptyMap(), logicParams);
+ handleCheckMesTask(deviceConfig, checkParams, logicParams);
if (Boolean.TRUE.equals(checkResult.getSuccess())) {
taskInfo = currentTasks.get(deviceId);
if (taskInfo != null) {
@@ -2150,84 +2207,14 @@
data.put("completed", completed);
if (completed) {
- // MES宸茬‘璁わ紝妫�鏌ユ槸鍚﹁繕鏈夋湭鍑虹墖鐨勭幓鐠冿紙浠呭鍑虹墖浠诲姟锛�
- boolean hasMoreGlass = false;
- int completedCount = 0;
- int totalCount = 0;
-
- if (taskInfo.isOutbound && params != null) {
- // 浠嶵askExecutionContext涓幏鍙栧凡鍑虹墖鐨勭幓鐠僆D鍒楄〃鍜屽垵濮嬬幓鐠僆D鍒楄〃
- Object contextObj = params.get("_taskContext");
- if (contextObj instanceof com.mes.task.model.TaskExecutionContext) {
- com.mes.task.model.TaskExecutionContext context =
- (com.mes.task.model.TaskExecutionContext) contextObj;
-
- @SuppressWarnings("unchecked")
- List<String> initialGlassIds = (List<String>) context.getSharedData().get("initialGlassIds");
- @SuppressWarnings("unchecked")
- List<String> outboundGlassIds = (List<String>) context.getSharedData().get("outboundGlassIds");
-
- if (initialGlassIds != null && !initialGlassIds.isEmpty()) {
- totalCount = initialGlassIds.size();
- completedCount = (outboundGlassIds != null) ? outboundGlassIds.size() : 0;
-
- // 妫�鏌ユ槸鍚︽墍鏈夌幓鐠冮兘宸插嚭鐗�
- if (outboundGlassIds == null || !outboundGlassIds.containsAll(initialGlassIds)) {
- hasMoreGlass = true;
- }
- }
- }
- }
-
- // 濡傛灉杩樻湁鏈嚭鐗囩殑鐜荤拑锛屼繚鎸乸lcRequest=1锛屾竻鐞嗘湰娆′换鍔$姸鎬侊紝绛夊緟涓嬫浜や簰
- // 杩欐牱绗簩娆′氦浜掓椂锛宑heckMesTask鍙互妫�娴嬪埌mesSend=1锛屽垱寤烘柊浠诲姟锛屽畬鏁村湴璧颁竴閬嶉�昏緫
- if (hasMoreGlass) {
- // 娓呯┖state鍜屾眹鎶ュ瓧锛堟湰娆′氦浜掑凡瀹屾垚锛�
- clearTaskStates(deviceConfig, serializer);
-
- // 娉ㄦ剰锛氫笉璁板綍lastCompletedMesRecords锛屽洜涓鸿繕鏈夋湭鍑虹墖鐨勭幓鐠冿紝浠诲姟鏈湡姝e畬鎴�
- // 杩欐牱绗簩娆′氦浜掓椂锛屽嵆浣縈ES鍙戦�佹柊浠诲姟锛堟柊鐨勭幓鐠僆D锛夛紝涔熶笉浼氳璇垽涓烘棫浠诲姟
-
- // 浠诲姟瀹屾垚锛屾仮澶嶄负绌洪棽鐘舵�侊紙鏈浜や簰宸插畬鎴愶級
- statusManager.updateVehicleStatus(
- deviceConfig.getDeviceId(), VehicleState.IDLE);
- statusManager.clearVehicleTask(deviceConfig.getDeviceId());
-
- // 绉婚櫎浠诲姟璁板綍锛堟湰娆′氦浜掑凡瀹屾垚锛岀瓑寰呬笅娆′氦浜掓椂鍒涘缓鏂颁换鍔★級
- currentTasks.remove(deviceConfig.getDeviceId());
-
- // 鍋滄浠诲姟鐩戞帶锛堟湰娆′氦浜掑凡瀹屾垚锛�
- handleStopTaskMonitor(deviceConfig);
-
- // 淇濇寔plcRequest=1锛堝彲浠ユ帴鏀朵笅娆′换鍔★級
- Map<String, Object> payload = new HashMap<>();
- payload.put("plcRequest", 1);
- plcDynamicDataService.writePlcData(deviceConfig, payload, serializer);
-
- log.info("鍑虹墖浠诲姟鏈浜や簰瀹屾垚锛岃繕鏈夋湭鍑虹墖鐨勭幓鐠冿紝绛夊緟涓嬫浜や簰: deviceId={}, completedCount={}, totalCount={}",
- deviceConfig.getDeviceId(), completedCount, totalCount);
-
- String progressMessage = String.format("鐩墠瀹屾垚鍑虹墖鐜荤拑鏁伴噺%d/%d锛岀瓑寰呬笅娆′氦浜掍换鍔�", completedCount, totalCount);
- data.put("completed", false); // 鏍囪涓烘湭瀹屾垚锛屽洜涓鸿繕鏈夋湭鍑虹墖鐨勭幓鐠�
- data.put("waiting", true);
- data.put("waitingReason", "moreGlassToOutbound");
- data.put("completedCount", completedCount);
- data.put("totalCount", totalCount);
-
- return DevicePlcVO.OperationResult.builder()
- .success(true)
- .message(String.format("鍑虹墖浠诲姟鏈浜や簰瀹屾垚锛歁ES宸茬‘璁わ紙mesConfirm=1锛夛紝宸叉竻绌簊tate鍜屾眹鎶ュ瓧銆�%s銆傚ぇ杞︾┖闂诧紙plcRequest=1锛夛紝绛夊緟MES鍙戦�佷笅娆′换鍔�", progressMessage))
- .data(data)
- .build();
- }
-
- // 鎵�鏈夌幓鐠冮兘宸插嚭鐗囷紝姝e父瀹屾垚娴佺▼
- // MES宸茬‘璁わ紝娓呯┖state鍜屾眹鎶ュ瓧
+ // MES宸茬‘璁わ細鏈浜や簰瀹屾垚锛堜笉鍦ㄨ澶囦晶鍒ゆ柇鈥滄槸鍚﹁繕鏈夋洿澶氱幓鐠冣�濓紝鐢变换鍔″紩鎿庣粺涓�缂栨帓锛�
clearTaskStates(deviceConfig, serializer);
// 璁板綍宸插畬鎴愮殑浠诲姟绛惧悕锛岄伩鍏峂ES鏈浣嶆椂琚噸澶嶆媺璧�
- lastCompletedMesRecords.put(deviceId,
- new CompletedMesRecord(taskInfo.mesSignature, System.currentTimeMillis()));
+ if (taskInfo != null && taskInfo.mesSignature != null) {
+ lastCompletedMesRecords.put(deviceId,
+ new CompletedMesRecord(taskInfo.mesSignature, System.currentTimeMillis()));
+ }
// 浠诲姟瀹屾垚锛屾仮澶嶄负绌洪棽鐘舵��
statusManager.updateVehicleStatus(
@@ -2246,10 +2233,10 @@
plcDynamicDataService.writePlcData(deviceConfig, payload, serializer);
log.info("MES浠诲姟宸茬‘璁ゅ畬鎴�: deviceId={}", deviceConfig.getDeviceId());
- String taskType = taskInfo.isOutbound ? "鍑虹墖" : "杩涚墖";
+ String taskType = (taskInfo != null && taskInfo.isOutbound) ? "鍑虹墖" : "杩涚墖";
return DevicePlcVO.OperationResult.builder()
.success(true)
- .message(String.format("%s浠诲姟瀹屾垚锛歁ES宸茬‘璁わ紙mesConfirm=1锛夛紝宸叉竻绌簊tate鍜屾眹鎶ュ瓧锛屽ぇ杞︾┖闂诧紙plcRequest=1锛夛紝鍙互绛夊緟涓嬫浠诲姟", taskType))
+ .message(String.format("%s浠诲姟浜や簰瀹屾垚锛歁ES宸茬‘璁わ紙mesConfirm=1锛夛紝宸叉竻绌簊tate鍜屾眹鎶ュ瓧锛屽ぇ杞︾┖闂诧紙plcRequest=1锛�", taskType))
.data(data)
.build();
}
--
Gitblit v1.8.0