From 238e123e829172759298348aed71e11ca99e4475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E4=B8=87=E9=87=8C?= <1726150332@qq.com> Date: Tue, 21 Apr 2026 14:22:36 +0800 Subject: [PATCH] =?UTF-8?q?SAP=E5=B7=A5=E8=89=BA=E8=B7=AF=E7=BA=BF?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/op/sap/controller/SapController.java | 74 +++++++++++++------ 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java b/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java index 6454c1cd4..6f4990496 100644 --- a/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java +++ b/op-modules/op-sap/src/main/java/com/op/sap/controller/SapController.java @@ -35,6 +35,8 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import static org.reflections.Reflections.log; + @RestController @RequestMapping("/sap") public class SapController extends BaseController { @@ -185,34 +187,64 @@ public class SapController extends BaseController { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -1); Date maxTime = calendar.getTime(); - if (qo.getWerks()==null){ + + if (qo.getWerks() == null) { SysUser sysUser = new SysUser(); sysUser.setUserId(1L); + + // 1. 获取主数据源下的工厂列表 DynamicDataSourceContextHolder.push("master"); - R>> dateSources0 = new R<>(); + R>> dataSourceResult; try { - dateSources0 = remoteUserService.getPoolNameList(sysUser); - }finally { - DynamicDataSourceContextHolder.poll(); + dataSourceResult = remoteUserService.getPoolNameList(sysUser); + } catch (Exception e) { + log.error("获取数据源列表失败", e); + return R.fail("获取工厂列表异常"); + } finally { + DynamicDataSourceContextHolder.poll(); // 释放主数据源 } - List> dateSources = dateSources0.getData(); - try { - dateSources.forEach(dateSource -> { - logger.info("++++++++++++" + dateSource.get("poolName") + "++++工艺路线开始++++++++++"); - DynamicDataSourceContextHolder.push(dateSource.get("poolName"));// 这是数据源的key - qo.setWerks(dateSource.get("poolName").replace("ds_", ""));//工厂 - qo.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd")); - R r = sapRouterService.sapRouterSync(qo); - }); - }finally { - DynamicDataSourceContextHolder.poll(); + + List> dataSources = dataSourceResult.getData(); + if (dataSources == null || dataSources.isEmpty()) { + return R.ok("未找到可同步的工厂"); } - }else { - qo.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd")); - R r = sapRouterService.sapRouterSync(qo); + + // 2. 遍历工厂进行同步 + StringBuilder resultMsg = new StringBuilder(); + for (Map dataSource : dataSources) { + String poolName = dataSource.get("poolName"); + if (poolName == null) continue; + + // 使用 try-finally 确保每个数据源都能正确释放(防止 ThreadLocal 泄漏) + try { + DynamicDataSourceContextHolder.push(poolName); + logger.info("++++++++++++ {} ++++工艺路线开始++++++++++", poolName); + + // 构造本次同步的参数 + SapRouterQuery subQuery = new SapRouterQuery(); + // 复制通用参数... + subQuery.setWerks(poolName.replace("ds_", "")); + subQuery.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd")); + + // 执行同步 + R r = sapRouterService.sapRouterSync(subQuery); + + resultMsg.append(poolName).append(":").append(r.getMsg()).append("; "); + + } catch (Exception e) { + log.error("工厂 {} 同步失败", poolName, e); + resultMsg.append(poolName).append(":失败-").append(e.getMessage()).append("; "); + } finally { + DynamicDataSourceContextHolder.poll(); // 核心:确保释放 + } + } + return R.ok(resultMsg.toString()); + + } else { + // 单工厂同步逻辑 + // qo.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd")); + return sapRouterService.sapRouterSync(qo); } - return R.ok(); -// return sapRouterService.sapRouterSync(qo); } /**