zjh
2025-02-20 b35cb9c705dae9b8fd256c93f9c57dac678f3a6e
zjh20250220
5个文件已修改
1个文件已添加
320 ■■■■■ 已修改文件
ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncConfig.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/config/timer/ThreadPoolConfiguration.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/aspectj/AsynAspect.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
                        try {
                            DynamicDataSourceContextHolder.setDataSourceType(dataSource);
                            task.run();
                        } finally {
                            // 确保在任务执行完成后清理数据源
                            DynamicDataSourceContextHolder.clearDataSourceType();
                        }
            public void execute(Runnable command) {
                // 包装任务,确保数据源被传递到新线程
                super.execute(() -> {
                    String dataSourceKey = DataSourceContextHolder.getDataSourceKey();
                    try {
                        // 传递数据源到子线程
                        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,84 +588,149 @@
    @Override
    //@Async("async")
    public void updateOrdeltile(List<TjOrderDetail> tjOrderDetailList, SysUser sysUser, TjOrder order, TjOrderRemark orderRemark) {
        String currentDataSource = DynamicDataSourceContextHolder.getDataSourceType();
        log.info("异步线程中的数据源: {}", currentDataSource);
        String deptname = "";
        TjProject tjProject = projectService.getById(orderRemark.getProId());
        if (null != tjProject) {
            SysDept dept = deptService.getById(tjProject.getDeptId());
            if (dept.getParentId() != 100L) {
                deptname = deptService.getprentks(dept.getParentId().toString());
            } else {
                deptname = dept.getDeptName();
            }
            String ssyszy="";
            for (TjOrderDetail detail : tjOrderDetailList) {
                detail.setTjStatus(1L);
                LambdaQueryWrapper<TjStandard> wq0 = new LambdaQueryWrapper<>();
                wq0.eq(TjStandard::getProId, detail.getProId());
                detail.setUpdateBy(sysUser.getNickName());
                detail.setUpdateTime(new Date());
                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) {
                        TjOrderYcxm ycxm = ycxmService.getOne(wq);
                        if (null != ycxm) {
                            ycxm.setJcjg(detail.getProResult());
                            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);
                                }
                            }
                            if (null != maps && !maps.isEmpty()) {
                                ycxm.setJynr(JSONUtil.toJsonStr(maps));
                            }
                            if (!mapList.isEmpty()) {
                                ycxm.setJynr(JSONUtil.toJsonStr(mapList));
                            }
                            if(detail.getProName().contains("舒张压")||detail.getProName().contains("收缩压")){
                                ssyszy+=ycxm.getJcxm();
                            }
                            ycxmService.updateById(ycxm);
                        }
                    }else {
                       ycxmService.remove(wq);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error(e.getMessage());
        try {
            String deptname = "";
            TjProject tjProject = projectService.getById(orderRemark.getProId());
            if (null != tjProject) {
                SysDept dept = deptService.getById(tjProject.getDeptId());
                if (dept.getParentId() != 100L) {
                    deptname = deptService.getprentks(dept.getParentId().toString());
                } else {
                    deptname = dept.getDeptName();
                }
                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());
                    detail.setUpdateBy(sysUser.getNickName());
                    detail.setUpdateTime(new Date());
                    detail.setCreateId(String.valueOf(sysUser.getUserId()));
                    detail.setUpdateId(String.valueOf(sysUser.getUserId()));
                    tjOrderDetailService.updateById(detail);
                        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()
                                            , 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);
                                        }
                                    }
                                    if (null != maps && !maps.isEmpty()) {
                                        jianyilis.addAll(maps);
                                    }
                                    if (!mapList.isEmpty()) {
                                        jianyilis.addAll(mapList);
                                    }
                                        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(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);