|
@@ -329,7 +329,7 @@ public class TaskWriteBilletWatch {
|
|
|
}, executorService);
|
|
|
|
|
|
redisTemplate.opsForValue().set(billetDataQueryTimeKey, queryEndTime);
|
|
|
-
|
|
|
+
|
|
|
// 处理异步结果(阻塞获取,需处理异常)
|
|
|
List<Map<String, Object>> fiveChangeShiftData = fiveChangeShiftFuture.get(30, TimeUnit.SECONDS); // 设置超时时间
|
|
|
List<Map<String, Object>> sixChangeShiftData = sixChangeShiftFuture.get(30, TimeUnit.SECONDS); // 设置超时时间
|
|
@@ -358,69 +358,77 @@ public class TaskWriteBilletWatch {
|
|
|
if (oConvertUtils.listIsEmpty(mergedData)){
|
|
|
return;
|
|
|
}
|
|
|
+ log.info("{}{}", ">>>>>>>>获取C端时间范围:", queryCacheStartTime + "<|>" + queryEndTime);
|
|
|
+ log.info("{}{}", ">>>>>>>>获取C端所有数据结果:", JSON.toJSON(mergedData));
|
|
|
+ // 使用 CompletionStage 链式处理,确保按顺序执行
|
|
|
+ CompletableFuture<Void> processingChain = CompletableFuture.completedFuture(null);
|
|
|
|
|
|
- // 用于跟踪所有异步任务
|
|
|
- List<CompletableFuture<Void>> futures = new ArrayList<>(mergedData.size());
|
|
|
for (Map<String, Object> map : mergedData) {
|
|
|
- CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
|
|
|
+ // 为每个数据项创建一个新的 CompletableFuture,并将其链接到前一个
|
|
|
+ processingChain = processingChain.thenComposeAsync(ignored -> {
|
|
|
String dataSource = (String) map.get("dataSource");
|
|
|
- if (dataSource == null) {
|
|
|
- log.warn("未识别的C端Mysql数据来源: {}", map);
|
|
|
- return;
|
|
|
- }
|
|
|
- try {
|
|
|
- switch (dataSource) {
|
|
|
- case "fiveChangeShift":
|
|
|
- processFiveChangeShift(map);
|
|
|
- break;
|
|
|
- case "sixChangeShift":
|
|
|
- processSixChangeShift(map);
|
|
|
- break;
|
|
|
- case "billet":
|
|
|
- processBillet(map);
|
|
|
- break;
|
|
|
- case "heats":
|
|
|
- processHeats(map);
|
|
|
- break;
|
|
|
- case "assembly":
|
|
|
- processAssembly(map);
|
|
|
- break;
|
|
|
- case "storageBill":
|
|
|
- processStorageBill(map);
|
|
|
- break;
|
|
|
- case "updatePlate":
|
|
|
- processUpdatePlate(map);
|
|
|
- break;
|
|
|
- case "rollClubOne":
|
|
|
- processRollClubOne(map);
|
|
|
- break;
|
|
|
- case "rollHeignt":
|
|
|
- processRollHeight(map);
|
|
|
- break;
|
|
|
- case "hotCharge":
|
|
|
- processHotCharge(map);
|
|
|
- break;
|
|
|
- case "stackingUp":
|
|
|
- processStackingUp(map);
|
|
|
- break;
|
|
|
- case "stackingLoading":
|
|
|
- processStackingLoading(map);
|
|
|
- break;
|
|
|
- case "parkLotCarGo":
|
|
|
- processParkLotCarGo(map);
|
|
|
- break;
|
|
|
- default:
|
|
|
- log.warn("未知的数据来源: {}", dataSource);
|
|
|
+ LocalDateTime createdAt = (LocalDateTime) map.get("created_at");
|
|
|
+
|
|
|
+ log.info("开始处理数据 [数据源: {}, created_at: {}]", dataSource, createdAt);
|
|
|
+
|
|
|
+ return CompletableFuture.runAsync(() -> {
|
|
|
+ if (dataSource == null) {
|
|
|
+ log.warn("未识别的C端Mysql数据来源: {}", map);
|
|
|
+ return;
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("处理数据失败 [数据源: {}, 数据: {}]", dataSource, map, e);
|
|
|
- }
|
|
|
+ try {
|
|
|
+ switch (dataSource) {
|
|
|
+ case "fiveChangeShift":
|
|
|
+ processFiveChangeShift(map);
|
|
|
+ break;
|
|
|
+ case "sixChangeShift":
|
|
|
+ processSixChangeShift(map);
|
|
|
+ break;
|
|
|
+ case "billet":
|
|
|
+ processBillet(map);
|
|
|
+ break;
|
|
|
+ case "heats":
|
|
|
+ processHeats(map);
|
|
|
+ break;
|
|
|
+ case "assembly":
|
|
|
+ processAssembly(map);
|
|
|
+ break;
|
|
|
+ case "storageBill":
|
|
|
+ processStorageBill(map);
|
|
|
+ break;
|
|
|
+ case "updatePlate":
|
|
|
+ processUpdatePlate(map);
|
|
|
+ break;
|
|
|
+ case "rollClubOne":
|
|
|
+ processRollClubOne(map);
|
|
|
+ break;
|
|
|
+ case "rollHeignt":
|
|
|
+ processRollHeight(map);
|
|
|
+ break;
|
|
|
+ case "hotCharge":
|
|
|
+ processHotCharge(map);
|
|
|
+ break;
|
|
|
+ case "stackingUp":
|
|
|
+ processStackingUp(map);
|
|
|
+ break;
|
|
|
+ case "stackingLoading":
|
|
|
+ processStackingLoading(map);
|
|
|
+ break;
|
|
|
+ case "parkLotCarGo":
|
|
|
+ processParkLotCarGo(map);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ log.warn("未知的数据来源: {}", dataSource);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("处理数据失败 [数据源: {}, created_at: {}]", dataSource, createdAt, e);
|
|
|
+ }
|
|
|
+ }, executorService);
|
|
|
}, executorService);
|
|
|
- futures.add(future);
|
|
|
}
|
|
|
-
|
|
|
- // 等待所有数据处理任务完成
|
|
|
- CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).get();
|
|
|
+ // 等待所有处理完成
|
|
|
+ processingChain.get();
|
|
|
+ log.info("所有数据按顺序处理完成");
|
|
|
} catch (InterruptedException e) {
|
|
|
Thread.currentThread().interrupt();
|
|
|
log.warn("主线程被中断: " + e.getMessage());
|
|
@@ -436,7 +444,6 @@ public class TaskWriteBilletWatch {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
private void processFiveChangeShift(Map<String, Object> map) {
|
|
|
JSONObject jsonObject = new JSONObject(map);
|
|
|
billetHotsendChangeShiftService.autoChangeShift(jsonObject);
|