From 628aa6a42e587e9f337e213f87f922fc2ab2af02 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期二, 02 十二月 2025 17:00:39 +0800
Subject: [PATCH] 修改卧转立扫码到卧转立任务流转,卧转立判断玻璃超时时间
---
mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java | 56 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 47 insertions(+), 9 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java
index 85b9dc3..c942e41 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java
@@ -83,7 +83,9 @@
switch (operation) {
case "checkAndProcess":
case "process":
- return handleCheckAndProcess(deviceConfig, config, logicParams);
+ // 杩欓噷蹇呴』鎶� params 浼犺繘鍘伙紝浠ヤ究鍦ㄥ璁惧浠诲姟娴佺▼涓�
+ // 鑳藉閫氳繃 _taskContext 灏嗗崸杞珛杈撳嚭鐨勭幓鐠僆D鍐欏叆浠诲姟涓婁笅鏂�
+ return handleCheckAndProcess(deviceConfig, config, logicParams, params);
case "startMonitor":
return handleStartMonitor(deviceConfig, config, logicParams);
case "stopMonitor":
@@ -109,7 +111,8 @@
private DevicePlcVO.OperationResult handleCheckAndProcess(
DeviceConfig deviceConfig,
WorkstationLogicConfig config,
- Map<String, Object> logicParams) {
+ Map<String, Object> logicParams,
+ Map<String, Object> params) {
String deviceId = deviceConfig.getDeviceId();
EnhancedS7Serializer serializer = s7SerializerProvider.getSerializer(deviceConfig);
@@ -129,9 +132,13 @@
log.info("鏌ヨ鍒版渶杩戞壂鐮佺殑鐜荤拑: deviceId={}, count={}",
deviceId, recentGlasses.size());
- // 2. 鏇存柊缂撳啿闃熷垪鍜屾渶鍚庢壂鐮佹椂闂�
- updateBuffer(deviceId, recentGlasses);
- lastScanTime.put(deviceId, new AtomicLong(System.currentTimeMillis()));
+ // 2. 鏇存柊缂撳啿闃熷垪锛涗粎鍦ㄦ湁鈥滄柊鐜荤拑鈥濆姞鍏ョ紦鍐叉椂鎵嶆洿鏂版渶鍚庢壂鐮佹椂闂�
+ boolean hasNewGlass = updateBuffer(deviceId, recentGlasses);
+ if (hasNewGlass) {
+ lastScanTime
+ .computeIfAbsent(deviceId, k -> new AtomicLong())
+ .set(System.currentTimeMillis());
+ }
// 3. 妫�鏌ユ槸鍚﹂渶瑕佺珛鍗冲鐞嗭紙瀹归噺宸叉弧鎴�30s鍐呮棤鏂扮幓鐠冿級
List<GlassBufferItem> buffer = glassBuffer.get(deviceId);
@@ -162,8 +169,34 @@
return writeResult;
}
- // 7. 浠庣紦鍐查槦鍒椾腑绉婚櫎宸插鐞嗙殑鐜荤拑
+ // 鍗ц浆绔嬫壒娆″凡鎴愬姛鍐欏叆PLC锛屽皢鏈壒娆$幓鐠僆D鍐欏叆浠诲姟涓婁笅鏂囷紝渚涘ぇ杞﹁繘鐗囦娇鐢�
+ try {
+ 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> batchGlassIds = batch.stream()
+ .map(GlassInfo::getGlassId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ if (!batchGlassIds.isEmpty()) {
+ ctx.getSharedData().put("transferReadyGlassIds",
+ new java.util.ArrayList<>(batchGlassIds));
+ log.info("鍗ц浆绔嬪凡杈撳嚭鎵规鐜荤拑鍒颁换鍔′笂涓嬫枃: deviceId={}, glassIds={}",
+ deviceConfig.getId(), batchGlassIds);
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.warn("鍗ц浆绔嬪啓鍏ヤ换鍔′笂涓嬫枃transferReadyGlassIds澶辫触: deviceId={}", deviceConfig.getId(), e);
+ }
+
+ // 7. 浠庣紦鍐查槦鍒椾腑绉婚櫎宸插鐞嗙殑鐜荤拑骞舵洿鏂扮姸鎬�
removeProcessedGlasses(deviceId, batch);
+ glassInfoService.updateGlassStatus(
+ batch.stream().map(GlassInfo::getGlassId).collect(Collectors.toList()),
+ GlassInfo.Status.PROCESSED);
String msg = String.format("鎵规宸插啓鍏LC: glassCount=%d, glassIds=%s",
batch.size(),
@@ -197,7 +230,7 @@
Date twoMinutesAgo = new Date(System.currentTimeMillis() - 120000);
LambdaQueryWrapper<GlassInfo> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(GlassInfo::getStatus, GlassInfo.Status.ACTIVE)
+ wrapper.in(GlassInfo::getStatus, GlassInfo.Status.PENDING, GlassInfo.Status.ACTIVE)
.ge(GlassInfo::getCreatedTime, twoMinutesAgo)
.orderByDesc(GlassInfo::getCreatedTime)
.last("LIMIT 20"); // 闄愬埗鏌ヨ鏁伴噺锛岄伩鍏嶈繃澶�
@@ -223,8 +256,9 @@
/**
* 鏇存柊缂撳啿闃熷垪
+ * @return 鏄惁鏈夋柊鐨勭幓鐠冭鍔犲叆缂撳啿锛堢敤浜庡垽鏂槸鍚﹀埛鏂� lastScanTime锛�
*/
- private void updateBuffer(String deviceId, List<GlassInfo> newGlasses) {
+ private boolean updateBuffer(String deviceId, List<GlassInfo> newGlasses) {
List<GlassBufferItem> buffer = glassBuffer.computeIfAbsent(
deviceId, k -> new CopyOnWriteArrayList<>());
@@ -232,13 +266,16 @@
.map(item -> item.glassInfo.getGlassId())
.collect(Collectors.toSet());
+ boolean hasNewGlass = false;
for (GlassInfo glass : newGlasses) {
if (!existingIds.contains(glass.getGlassId())) {
buffer.add(new GlassBufferItem(glass, System.currentTimeMillis()));
+ hasNewGlass = true;
log.debug("娣诲姞鐜荤拑鍒扮紦鍐查槦鍒�: deviceId={}, glassId={}",
deviceId, glass.getGlassId());
}
}
+ return hasNewGlass;
}
/**
@@ -375,7 +412,8 @@
// 鍚姩鐩戞帶浠诲姟
ScheduledFuture<?> future = monitorExecutor.scheduleWithFixedDelay(() -> {
try {
- handleCheckAndProcess(deviceConfig, config, logicParams);
+ // 鐩戞帶浠诲姟涓嶅湪澶氳澶囦换鍔′笂涓嬫枃涓繍琛岋紝杩欓噷涓嶉渶瑕佷紶鍏� params/_taskContext
+ handleCheckAndProcess(deviceConfig, config, logicParams, null);
} catch (Exception e) {
log.error("鐩戞帶浠诲姟鎵ц寮傚父: deviceId={}", deviceId, e);
}
--
Gitblit v1.8.0