SAP工艺路线同步优化

master
杨万里 1 week ago
parent 9d22ddc9ca
commit 238e123e82

@ -35,6 +35,8 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static org.reflections.Reflections.log;
@RestController @RestController
@RequestMapping("/sap") @RequestMapping("/sap")
public class SapController extends BaseController { public class SapController extends BaseController {
@ -185,34 +187,64 @@ public class SapController extends BaseController {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -1); calendar.add(Calendar.DAY_OF_YEAR, -1);
Date maxTime = calendar.getTime(); Date maxTime = calendar.getTime();
if (qo.getWerks()==null){
if (qo.getWerks() == null) {
SysUser sysUser = new SysUser(); SysUser sysUser = new SysUser();
sysUser.setUserId(1L); sysUser.setUserId(1L);
// 1. 获取主数据源下的工厂列表
DynamicDataSourceContextHolder.push("master"); DynamicDataSourceContextHolder.push("master");
R<List<Map<String, String>>> dateSources0 = new R<>(); R<List<Map<String, String>>> dataSourceResult;
try { try {
dateSources0 = remoteUserService.getPoolNameList(sysUser); dataSourceResult = remoteUserService.getPoolNameList(sysUser);
}finally { } catch (Exception e) {
DynamicDataSourceContextHolder.poll(); log.error("获取数据源列表失败", e);
return R.fail("获取工厂列表异常");
} finally {
DynamicDataSourceContextHolder.poll(); // 释放主数据源
} }
List<Map<String, String>> dateSources = dateSources0.getData();
List<Map<String, String>> dataSources = dataSourceResult.getData();
if (dataSources == null || dataSources.isEmpty()) {
return R.ok("未找到可同步的工厂");
}
// 2. 遍历工厂进行同步
StringBuilder resultMsg = new StringBuilder();
for (Map<String, String> dataSource : dataSources) {
String poolName = dataSource.get("poolName");
if (poolName == null) continue;
// 使用 try-finally 确保每个数据源都能正确释放(防止 ThreadLocal 泄漏)
try { try {
dateSources.forEach(dateSource -> { DynamicDataSourceContextHolder.push(poolName);
logger.info("++++++++++++" + dateSource.get("poolName") + "++++工艺路线开始++++++++++"); logger.info("++++++++++++ {} ++++工艺路线开始++++++++++", poolName);
DynamicDataSourceContextHolder.push(dateSource.get("poolName"));// 这是数据源的key
qo.setWerks(dateSource.get("poolName").replace("ds_", ""));//工厂 // 构造本次同步的参数
qo.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd")); SapRouterQuery subQuery = new SapRouterQuery();
R r = sapRouterService.sapRouterSync(qo); // 复制通用参数...
}); subQuery.setWerks(poolName.replace("ds_", ""));
}finally { subQuery.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd"));
DynamicDataSourceContextHolder.poll();
// 执行同步
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(); // 核心:确保释放
} }
}else {
qo.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd"));
R r = sapRouterService.sapRouterSync(qo);
} }
return R.ok(); return R.ok(resultMsg.toString());
// return sapRouterService.sapRouterSync(qo);
} else {
// 单工厂同步逻辑
// qo.setAedat(DateFormatUtils.format(maxTime, "yyyyMMdd"));
return sapRouterService.sapRouterSync(qo);
}
} }
/** /**

Loading…
Cancel
Save