ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncConfig.java
New file @@ -0,0 +1,22 @@ package com.ltkj.web.config.timer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; //@Configuration //@EnableAsync public class AsyncConfig { @Bean(name = "asyncExecutor") public ThreadPoolTaskExecutor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(3); executor.setMaxPoolSize(10); executor.setQueueCapacity(10000); executor.setThreadNamePrefix("async-executor-"); executor.initialize(); return executor; } } ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java
@@ -2,6 +2,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.ltkj.db.DataSourceContextHolder; import com.ltkj.framework.aspectj.AsynAspect; import com.ltkj.framework.datasource.DynamicDataSourceContextHolder; import lombok.extern.slf4j.Slf4j; @@ -22,38 +23,37 @@ @Configuration @Slf4j public class ThreadPoolConfiguration { private static final Logger logger = LoggerFactory.getLogger(AsynAspect.class); private static final Logger logger = LoggerFactory.getLogger(ThreadPoolConfiguration.class); @Bean(name = "async", destroyMethod = "shutdown") public ThreadPoolExecutor systemCheckPoolExecutorService() { // 获取当前线程的数据源 String dataSource = DynamicDataSourceContextHolder.getDataSourceType(); logger.info("异步传递线程当前线程数据源: {}", dataSource); // 获取当前线程的 DataSource String currentDataSource = DataSourceContextHolder.getDataSourceKey(); logger.info("当前线程数据源: {}", currentDataSource); return new ThreadPoolExecutor(3, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10000), new ThreadFactoryBuilder().setNameFormat("default-executor-%d").build(), (r, executor) -> logger.error("system pool is full! ")) { (r, executor) -> log.error("system pool is full! ")) { @Override public void execute(Runnable task) { // 包装任务,将数据源传递到异步线程 super.execute(new Runnable() { @Override public void run() { // 在异步线程中设置数据源 String dataSource = DynamicDataSourceContextHolder.getDataSourceType(); public void execute(Runnable command) { // 包装任务,确保数据源被传递到新线程 super.execute(() -> { String dataSourceKey = DataSourceContextHolder.getDataSourceKey(); try { DynamicDataSourceContextHolder.setDataSourceType(dataSource); task.run(); // 传递数据源到子线程 DynamicDataSourceContextHolder.setDataSourceType(dataSourceKey); command.run(); // 执行任务 } finally { // 确保在任务执行完成后清理数据源 // 任务完成后清理数据源上下文 DynamicDataSourceContextHolder.clearDataSourceType(); } } }); } }; } } ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
@@ -1015,17 +1015,9 @@ for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) { List<TjOrderYcxm> details = entry.getValue(); String xmmc = entry.getKey(); // String xmmc = details.get(0).getProName(); boolean isXmWrite = false; int index = 1; String szyssy=""; StringBuilder builders = new StringBuilder(); for (TjOrderYcxm detail : details) { // if(detail.getJcxm().contains("舒张压")||detail.getJcxm().contains("收缩压")){ // builders.append(detail.getJcxm()).append(detail.getJcjg()).append(" "); // szyssy+=builders.toString(); // continue; // } if (!isXmWrite) { paragraph = new Paragraph(xmXh + ". " + xmmc, defaultFont); paragraph.setAlignment(Element.ALIGN_LEFT); @@ -1047,22 +1039,6 @@ paragraph.setAlignment(Element.ALIGN_LEFT); document2.add(paragraph); } // if(StringUtil.isNotBlank(szyssy)){ // if (!isXmWrite) { // paragraph = new Paragraph(xmXh + ". " + xmmc, defaultFont); // paragraph.setAlignment(Element.ALIGN_LEFT); // document2.add(paragraph); // isXmWrite = true; // } // StringBuilder builder = new StringBuilder(); // builder.append(" (").append(index).append(")").append(szyssy).append("\n"); // szyssy = builder.toString(); // paragraph = new Paragraph(szyssy, defaultFont); // paragraph.setAlignment(Element.ALIGN_LEFT); // document2.add(paragraph); // } if (isXmWrite) { paragraph = PdfUtils.setParagraph(defaultFont, ""); paragraph.setLeading(0f); ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java
@@ -38,6 +38,7 @@ import com.ltkj.web.controller.lis.LisApiMethod; import com.ltkj.web.controller.pacs.PacsApiMethodService; import com.ltkj.web.controller.system.SamplingServiceApi; import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -587,9 +588,8 @@ @Override //@Async("async") public void updateOrdeltile(List<TjOrderDetail> tjOrderDetailList, SysUser sysUser, TjOrder order, TjOrderRemark orderRemark) { String currentDataSource = DynamicDataSourceContextHolder.getDataSourceType(); log.info("异步线程中的数据源: {}", currentDataSource); try { String deptname = ""; TjProject tjProject = projectService.getById(orderRemark.getProId()); if (null != tjProject) { @@ -600,9 +600,10 @@ deptname = dept.getDeptName(); } String ssyszy=""; StringBuilder ssyszys = new StringBuilder(); StringBuilder ssyszyjgs = new StringBuilder(); List<Map<String, Object>> jianyilis=new ArrayList<>(); for (TjOrderDetail detail : tjOrderDetailList) { detail.setTjStatus(1L); LambdaQueryWrapper<TjStandard> wq0 = new LambdaQueryWrapper<>(); wq0.eq(TjStandard::getProId, detail.getProId()); @@ -611,14 +612,63 @@ detail.setCreateId(String.valueOf(sysUser.getUserId())); detail.setUpdateId(String.valueOf(sysUser.getUserId())); tjOrderDetailService.updateById(detail); try { LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>(); wq.eq(TjOrderYcxm::getTjh, order.getTjNumber()); wq.eq(TjOrderYcxm::getJcxm, detail.getProName()); if (detail.getExceptionDesc() == 1) { if(!detail.getProName().contains("舒张压") && !detail.getProName().contains("收缩压")){ List<Map<String, Object>> maps = rulesService.getyichangxiangmujianyiguize(detail.getProId().toString() , detail.getProName().replaceAll("[((][^))]*[))]", "") .replaceAll("[ 测定检测]", "").replaceAll("\\[.*?\\]", ""), "", order.getTjNumber() , detail.getProName().replaceAll("[((][^))]*[\u4e00-\u9fa5]+[^))]*[))]", "") .replaceAll("[ 测定检测]", "").replaceAll("\\[.*?\\]", "") , detail.getProResult()); String[] split = detail.getProResult().split("。|,|,"); List<Map<String, Object>> mapList = new ArrayList<>(); for (String s : split) { s = s.replaceAll("\n", ""); // Map<String,Object> maps= rulesService.getyichangxiangmujianyiguizeJianCha(s); Map<String, Object> mapss = tjProAdvicerulesService.getyichangxiangmujianyiguizeJianCha(deptname, s, "0"); if (null != mapss && !mapss.isEmpty()) { Object bt = mapss.get("bt"); Object nr = mapss.get("nr"); if (null != bt || null != nr) { } mapList.add(mapss); } } TjOrderYcxm ycxm = ycxmService.getOne(wq); if (null != ycxm) { ycxm.setJcjg(detail.getProResult()); if (null != maps && !maps.isEmpty()) { ycxm.setJynr(JSONUtil.toJsonStr(maps)); } if (!mapList.isEmpty()) { ycxm.setJynr(JSONUtil.toJsonStr(mapList)); } ycxmService.updateById(ycxm); }else { TjOrderYcxm orderYcxm =new TjOrderYcxm(); orderYcxm.setTjh(order.getTjNumber()); orderYcxm.setParentName(tjProject.getProName()); orderYcxm.setJcxm(detail.getProName()); orderYcxm.setJcjg(detail.getProResult()); if (null != maps && !maps.isEmpty()) { orderYcxm.setJynr(JSONUtil.toJsonStr(maps)); } if (!mapList.isEmpty()) { orderYcxm.setJynr(JSONUtil.toJsonStr(mapList)); } orderYcxm.setJyjc("0"); ycxmService.save(orderYcxm); } }else { List<Map<String, Object>> maps = rulesService.getyichangxiangmujianyiguize(detail.getProId().toString() , detail.getProName().replaceAll("[((][^))]*[))]", "") .replaceAll("[ 测定检测]", "").replaceAll("\\[.*?\\]", ""), "", order.getTjNumber() @@ -644,27 +694,43 @@ } if (null != maps && !maps.isEmpty()) { ycxm.setJynr(JSONUtil.toJsonStr(maps)); jianyilis.addAll(maps); } if (!mapList.isEmpty()) { ycxm.setJynr(JSONUtil.toJsonStr(mapList)); jianyilis.addAll(mapList); } if(detail.getProName().contains("舒张压")||detail.getProName().contains("收缩压")){ ssyszy+=ycxm.getJcxm(); } ycxmService.updateById(ycxm); ssyszys.append(detail.getProName()).append("/"); ssyszyjgs.append(detail.getProResult()).append("/"); } }else { if(detail.getProName().contains("舒张压") || detail.getProName().contains("收缩压")){ ssyszys.append(detail.getProName()).append("/"); ssyszyjgs.append(detail.getProResult()).append("/"); } ycxmService.remove(wq); } } if(StrUtil.isNotBlank(ssyszys.toString())){ LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>(); wq.eq(TjOrderYcxm::getTjh, order.getTjNumber()); wq.like(TjOrderYcxm::getJcxm,"舒张压"); ycxmService.remove(wq); TjOrderYcxm orderYcxm =new TjOrderYcxm(); orderYcxm.setTjh(order.getTjNumber()); orderYcxm.setParentName(tjProject.getProName()); orderYcxm.setJcxm(ssyszys.toString().replaceFirst("/$", "")); orderYcxm.setJcjg(ssyszyjgs.toString().replaceFirst("/$", "")); orderYcxm.setJynr(JSONUtil.toJsonStr(jianyilis)); orderYcxm.setJyjc("0"); ycxmService.save(orderYcxm); } } } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); } } log.error(String.valueOf(e)); } } ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java
@@ -1700,6 +1700,9 @@ .filter(b -> maps.stream() .noneMatch(a -> a.get("proName").equals(b.get("proName")))) // 过滤掉在 maps 中存在的相同元素 .collect(Collectors.toList()); if(!collect.isEmpty()){ maps.addAll(collect); } @@ -1815,14 +1818,15 @@ String tjh = ycxms.get(0).getTjh(); if(StringUtils.isNotBlank(tjh)){ ycxmService.delOrderYcXmJyByTjh(tjh); String szyssy=""; StringBuilder builders = new StringBuilder(); // String szyssy=""; // StringBuilder builders = new StringBuilder(); // List<TjOrderYcxm> ycxmList=new ArrayList<>(); for (TjOrderYcxm ycxm : ycxms) { ycxm.setJynr(JSONUtil.toJsonStr(ycxm.getMap())); if(ycxm.getJcxm().contains("舒张压")||ycxm.getJcxm().contains("收缩压")){ builders.append(ycxm.getJcxm()).append(ycxm.getJcjg()).append(" "); szyssy+=builders.toString(); } // if(ycxm.getJcxm().contains("舒张压")||ycxm.getJcxm().contains("收缩压")){ // builders.append(ycxm.getJcxm()).append(ycxm.getJcjg()).append(" "); // szyssy+=builders.toString(); // } } ycxmService.saveBatch(ycxms); return AjaxResult.success(); ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java
@@ -17,8 +17,8 @@ * * @author zjh<br /> */ @Aspect @Component //@Aspect //@Component public class AsynAspect { private static final Logger logger = LoggerFactory.getLogger(AsynAspect.class);