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/task/service/impl/MultiDeviceTaskServiceImpl.java | 104 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 95 insertions(+), 9 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java
index f879887..c2d2e35 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java
@@ -19,8 +19,9 @@
import com.mes.task.model.TaskExecutionResult;
import com.mes.task.service.MultiDeviceTaskService;
import com.mes.task.service.TaskExecutionEngine;
-import lombok.RequiredArgsConstructor;
+import com.mes.task.service.TaskStatusNotificationService;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -30,13 +31,13 @@
import java.util.Date;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
/**
* 澶氳澶囦换鍔℃湇鍔″疄鐜�
*/
@Slf4j
@Service
-@RequiredArgsConstructor
public class MultiDeviceTaskServiceImpl extends ServiceImpl<MultiDeviceTaskMapper, MultiDeviceTask>
implements MultiDeviceTaskService {
@@ -44,7 +45,23 @@
private final DeviceGroupRelationMapper deviceGroupRelationMapper;
private final TaskStepDetailMapper taskStepDetailMapper;
private final TaskExecutionEngine taskExecutionEngine;
+ private final TaskStatusNotificationService notificationService;
private final ObjectMapper objectMapper;
+
+ public MultiDeviceTaskServiceImpl(
+ DeviceGroupConfigService deviceGroupConfigService,
+ DeviceGroupRelationMapper deviceGroupRelationMapper,
+ TaskStepDetailMapper taskStepDetailMapper,
+ TaskExecutionEngine taskExecutionEngine,
+ TaskStatusNotificationService notificationService,
+ ObjectMapper objectMapper) {
+ this.deviceGroupConfigService = deviceGroupConfigService;
+ this.deviceGroupRelationMapper = deviceGroupRelationMapper;
+ this.taskStepDetailMapper = taskStepDetailMapper;
+ this.taskExecutionEngine = taskExecutionEngine;
+ this.notificationService = notificationService;
+ this.objectMapper = objectMapper;
+ }
@Override
@Transactional(rollbackFor = Exception.class)
@@ -63,10 +80,18 @@
}
TaskParameters parameters = request.getParameters();
- if (parameters == null || CollectionUtils.isEmpty(parameters.getGlassIds())) {
- throw new IllegalArgumentException("鑷冲皯闇�瑕侀厤缃竴鏉$幓鐠僆D");
+ if (parameters == null) {
+ parameters = new TaskParameters();
}
+ // 榛樿鍏佽鍗ц浆绔嬫壂鐮佽澶囧湪浠诲姟鎵ц闃舵鑾峰彇鐜荤拑淇℃伅
+ boolean hasGlassIds = !CollectionUtils.isEmpty(parameters.getGlassIds());
+ if (!hasGlassIds) {
+ log.info("娴嬭瘯浠诲姟鏈彁渚涚幓鐠僆D锛屽皢鍦ㄨ澶囩粍娴佺▼涓敱鍗ц浆绔嬫壂鐮佽澶囬噰闆嗙幓鐠冧俊鎭�: groupId={}",
+ groupConfig.getId());
+ }
+
+ // 鍒涘缓浠诲姟璁板綍
MultiDeviceTask task = new MultiDeviceTask();
task.setTaskId(generateTaskId(groupConfig));
task.setGroupId(String.valueOf(groupConfig.getId()));
@@ -77,21 +102,77 @@
task.setStartTime(new Date());
save(task);
+ // 寮傛鎵ц浠诲姟锛岀珛鍗宠繑鍥炰换鍔D
+ executeTaskAsync(task, groupConfig, devices, parameters);
+
+ log.info("璁惧缁勪换鍔″凡鍚姩锛堝紓姝ユ墽琛岋級: taskId={}, groupId={}, groupName={}",
+ task.getTaskId(), groupConfig.getId(), groupConfig.getGroupName());
+
+ return task;
+ }
+
+ /**
+ * 寮傛鎵ц璁惧缁勪换鍔�
+ * 姣忎釜璁惧缁勪綔涓虹嫭绔嬬嚎绋嬫墽琛岋紝浜掍笉闃诲
+ */
+ @Async("deviceGroupTaskExecutor")
+ public void executeTaskAsync(MultiDeviceTask task,
+ DeviceGroupConfig groupConfig,
+ List<DeviceConfig> devices,
+ TaskParameters parameters) {
try {
+ log.info("寮�濮嬫墽琛岃澶囩粍浠诲姟: taskId={}, groupId={}, deviceCount={}",
+ task.getTaskId(), groupConfig.getId(), devices.size());
+
+ // 鏇存柊浠诲姟鐘舵�佷负杩愯涓�
+ task.setStatus(MultiDeviceTask.Status.RUNNING.name());
+ updateById(task);
+
+ // 閫氱煡浠诲姟寮�濮�
+ notificationService.notifyTaskStatus(task);
+
+ // 鎵ц浠诲姟
TaskExecutionResult result = taskExecutionEngine.execute(task, groupConfig, devices, parameters);
+
+ // 妫�鏌ヤ换鍔℃暟鎹腑鏄惁鍖呭惈鎸佺画杩愯鐨勬爣璁�
+ Map<String, Object> resultData = result.getData();
+ boolean isContinuousTask = resultData != null && "浠诲姟宸插惎鍔紝瀹氭椂鍣ㄥ湪鍚庡彴杩愯涓�".equals(resultData.get("message"));
+
+ // 濡傛灉鏄寔缁繍琛岀殑浠诲姟锛堝畾鏃跺櫒妯″紡锛夛紝淇濇寔 RUNNING 鐘舵�侊紝涓嶆洿鏂颁负 COMPLETED
+ if (isContinuousTask && result.isSuccess()) {
+ log.info("浠诲姟宸插惎鍔ㄥ畾鏃跺櫒锛屼繚鎸佽繍琛岀姸鎬�: taskId={}, message={}",
+ task.getTaskId(), resultData.get("message"));
+ task.setResultData(writeJson(resultData));
+ updateById(task);
+ // 閫氱煡浠诲姟鐘舵�侊紙淇濇寔 RUNNING锛�
+ notificationService.notifyTaskStatus(task);
+ return;
+ }
+
+ // 鏇存柊浠诲姟缁撴灉锛堥潪鎸佺画杩愯鐨勪换鍔★級
task.setStatus(result.isSuccess() ? MultiDeviceTask.Status.COMPLETED.name() : MultiDeviceTask.Status.FAILED.name());
task.setErrorMessage(result.isSuccess() ? null : result.getMessage());
task.setEndTime(new Date());
- task.setResultData(writeJson(result.getData()));
+ task.setResultData(writeJson(resultData));
updateById(task);
- return task;
+
+ // 閫氱煡浠诲姟瀹屾垚
+ notificationService.notifyTaskStatus(task);
+
+ log.info("璁惧缁勪换鍔℃墽琛屽畬鎴�: taskId={}, success={}, message={}",
+ task.getTaskId(), result.isSuccess(), result.getMessage());
+
} catch (Exception ex) {
- log.error("澶氳澶囦换鍔℃墽琛屽紓甯�, taskId={}", task.getTaskId(), ex);
+ log.error("璁惧缁勪换鍔℃墽琛屽紓甯�: taskId={}, groupId={}", task.getTaskId(), groupConfig.getId(), ex);
+
+ // 鏇存柊浠诲姟鐘舵�佷负澶辫触
task.setStatus(MultiDeviceTask.Status.FAILED.name());
task.setErrorMessage(ex.getMessage());
task.setEndTime(new Date());
updateById(task);
- throw new RuntimeException("澶氳澶囦换鍔℃墽琛屽け璐�: " + ex.getMessage(), ex);
+
+ // 閫氱煡浠诲姟澶辫触
+ notificationService.notifyTaskStatus(task);
}
}
@@ -119,9 +200,14 @@
if (!MultiDeviceTask.Status.RUNNING.name().equals(task.getStatus())) {
return false;
}
+ taskExecutionEngine.requestTaskCancellation(taskId);
task.setStatus(MultiDeviceTask.Status.CANCELLED.name());
task.setEndTime(new Date());
- return updateById(task);
+ boolean updated = updateById(task);
+ if (updated) {
+ notificationService.notifyTaskStatus(task);
+ }
+ return updated;
}
@Override
--
Gitblit v1.8.0