zhaowenxuan
2025-03-05 070d83ee5ef6e7bae0e36dc422fbfd04b8175b82
ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java
@@ -29,6 +29,7 @@
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
@@ -62,7 +63,7 @@
    @Autowired
    private DataSourceConfig dataSourceConfig;
    private final ReentrantLock reentrantLock = new ReentrantLock();
    private final Map<String, ReentrantLock> lockMap = new ConcurrentHashMap<>();
    // 用来跟踪已调度任务的用户ID集合,避免重复添加任务
    private final Set<String> scheduledTasks = new HashSet<>();
@@ -85,6 +86,8 @@
    // 创建定时任务的方法,用户ID不存在任务时才会添加
    public void createTask(DictHosp dictHosp) {
        log.info("进入创建任务方法 ->{}",dictHosp.getCode());
        log.info("已有任务集合 ->{}", scheduledTasks);
        // 如果任务已经存在,则不重复添加
        if (scheduledTasks.contains(dictHosp.getCode())) {
            return;
@@ -104,6 +107,10 @@
        }, Instant.now().plus(15, ChronoUnit.MINUTES));
    }
    private ReentrantLock getLock(String id) {
        return lockMap.computeIfAbsent(id, k -> new ReentrantLock());
    }
    // 执行日志同步任务的方法
    public void executeTask(DictHosp dictHosp) {
        // 获取锁,确保同一时间只有一个任务执行
@@ -114,6 +121,7 @@
        String dsqjssj = configService.selectConfigByKey("dsqjssj");
        boolean panduandangqianshijian = panduandangqianshijian(dsqkssj, dsqjssj);
        ReentrantLock reentrantLock = getLock(dictHosp.getCode());
        boolean lock = reentrantLock.tryLock();
        try {
            if (!panduandangqianshijian) {
@@ -152,12 +160,12 @@
                                List<LtkjExamJcsqd> list = jcsqdService.getLtkjJcsqdByTjh(s);
                                if(null !=list && !list.isEmpty()){
                                    for (LtkjExamJcsqd jcsqd : list) {
                                        if(jcsqd.getJgbx().contains("。")){
                                            String[] split = jcsqd.getJgzt().split("。");
                                        if(StringUtil.isNotBlank(jcsqd.getJgzt())){
                                            String[] split = jcsqd.getJgzt().replaceAll("\n", "").split("。|;|;");
                                            for (String jg : split) {
                                                if(StringUtil.isNotBlank(jg) && !jg.contains("未见异常")
                                                        && !jg.contains("未见明显异常") && !jg.contains("未见占位")
                                                        && !jg.contains("未见明显")&& !jg.contains("正常")&& !jg.contains("双侧椎间孔无狭窄")){
                                                        && !jg.contains("未见明显异常") && !jg.contains("未见占位") && !jg.contains("未见")
                                                        && !jg.contains("未见明显")&& !jg.contains("正常")&& !jg.contains("双侧椎间孔无狭窄")&& !jg.contains("无殊")){
                                                    TjJcycxm jcycxm=new TjJcycxm();
                                                    jcycxm.setTjh(s);
                                                    jcycxm.setYqid(dictHosp.getCode());
@@ -187,13 +195,11 @@
            log.error("定时器执行报错");
            log.error(String.valueOf(e),e.getMessage());
        } finally {
            if (reentrantLock.isLocked()) {
                scheduledTasks.remove(dictHosp.getCode());
                reentrantLock.unlock();
            }
            DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
            DataSourceContextHolder.clear();
            reentrantLock.unlock();
            scheduledTasks.remove(dictHosp.getCode());
//            DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
//            DataSourceContextHolder.clear();
            log.info("任务{}已释放锁",dictHosp.getCode());
        }
    }