From 9597821e57d4bad1ea4e984241f363be956dda8c Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期四, 03 七月 2025 18:21:33 +0800 Subject: [PATCH] zjh20250703 --- ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java | 157 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 110 insertions(+), 47 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java index b1a9a57..04d5dba 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java @@ -1,7 +1,8 @@ package com.ltkj.web.config.timer; -import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.common.enums.DataSourceType; import com.ltkj.db.DataSourceConfig; import com.ltkj.db.DataSourceContextHolder; @@ -12,10 +13,9 @@ import com.ltkj.hosp.service.*; import com.ltkj.hosp.sqlDomain.*; import com.ltkj.system.service.ISysConfigService; +import com.ltkj.web.controller.system.SysConfigController; import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.scheduling.TaskScheduler; @@ -29,7 +29,7 @@ import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.util.*; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantLock; @Slf4j @@ -61,8 +61,10 @@ private IDictHospService dictHospService; @Autowired private DataSourceConfig dataSourceConfig; + @Autowired + private SysConfigController configController; - private final ReentrantLock reentrantLock = new ReentrantLock(); + private final Map<String, ReentrantLock> lockMap = new ConcurrentHashMap<>(); // 鐢ㄦ潵璺熻釜宸茶皟搴︿换鍔$殑鐢ㄦ埛ID闆嗗悎锛岄伩鍏嶉噸澶嶆坊鍔犱换鍔� private final Set<String> scheduledTasks = new HashSet<>(); @@ -75,7 +77,9 @@ public void init() { DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name()); // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃 - List<DictHosp> hospList = dictHospService.list(); + LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DictHosp::getIsAutoAsyncJg,1); + List<DictHosp> hospList = dictHospService.list(wrapper); hospList.forEach(this::createTask); // 涓烘瘡涓敤鎴峰垱寤轰换鍔� // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔� schedulePeriodicTaskCheck(); @@ -85,6 +89,8 @@ // 鍒涘缓瀹氭椂浠诲姟鐨勬柟娉曪紝鐢ㄦ埛ID涓嶅瓨鍦ㄤ换鍔℃椂鎵嶄細娣诲姞 public void createTask(DictHosp dictHosp) { + log.info("杩涘叆鍒涘缓浠诲姟鏂规硶 ->{}",dictHosp.getCode()); + log.info("宸叉湁浠诲姟闆嗗悎 ->{}", scheduledTasks); // 濡傛灉浠诲姟宸茬粡瀛樺湪锛屽垯涓嶉噸澶嶆坊鍔� if (scheduledTasks.contains(dictHosp.getCode())) { return; @@ -92,59 +98,67 @@ // 灏嗚鐢ㄦ埛ID娣诲姞鍒板凡璋冨害浠诲姟闆嗗悎涓� scheduledTasks.add(dictHosp.getCode()); // 鍒涘缓瀹氭椂浠诲姟锛屼换鍔″皢鍦�15鍒嗛挓鍚庢墽琛� - taskScheduler.schedule(() -> { +/* taskScheduler.schedule(() -> { try { - // 鎵ц浠诲姟鐨勮秴鏃舵帶鍒� - taskScheduler.schedule(() -> { - executeTask(dictHosp); - }, Instant.now()); + } catch (Exception e) { log.error("鍒涘缓浠诲姟鏃跺彂鐢熷紓甯革細{}", e.getMessage()); } + }, Instant.now().plus(15, ChronoUnit.MINUTES));*/ + log.info("浠诲姟鍒涘缓鎴愬姛 ->{}",dictHosp.getCode()); + // 鎵ц浠诲姟鐨勮秴鏃舵帶鍒� + taskScheduler.schedule(() -> { + executeTask(dictHosp); }, Instant.now().plus(15, ChronoUnit.MINUTES)); + } + + private ReentrantLock getLock(String id) { + return lockMap.computeIfAbsent(id, k -> new ReentrantLock()); } // 鎵ц鏃ュ織鍚屾浠诲姟鐨勬柟娉� public void executeTask(DictHosp dictHosp) { // 鑾峰彇閿侊紝纭繚鍚屼竴鏃堕棿鍙湁涓�涓换鍔℃墽琛� - log.info("{}鎵ц缁撴灉鍚屾", dictHosp.getCode()); - dataSourceConfig.addDataSource(dictHosp.getDbname()); - DataSourceContextHolder.setDataSourceKey(dictHosp.getDbname()); - String dsqkssj = configService.selectConfigByKey("dsqkssj"); - String dsqjssj = configService.selectConfigByKey("dsqjssj"); - boolean panduandangqianshijian = panduandangqianshijian(dsqkssj, dsqjssj); - + log.info("{}鎵ц缁撴灉鍚屾鍔犻攣鍓�",JSONUtil.toJsonStr(dictHosp)); + ReentrantLock reentrantLock = getLock(dictHosp.getCode()); boolean lock = reentrantLock.tryLock(); try { + log.info("{}鎵ц缁撴灉鍚屾鍔犻攣鍚�",JSONUtil.toJsonStr(dictHosp)); + log.info("{}鎵ц缁撴灉鍚屾", dictHosp.getCode()); + dataSourceConfig.addDataSource(dictHosp.getDbname()); + DataSourceContextHolder.setDataSourceKey(dictHosp.getDbname()); + String dsqkssj = configService.selectConfigByKey("dsqkssj"); + String dsqjssj = configService.selectConfigByKey("dsqjssj"); + boolean panduandangqianshijian = panduandangqianshijian(dsqkssj, dsqjssj); if (!panduandangqianshijian) { if (lock) { - log.info("浠诲姟寮�濮嬫墽琛屾椂闂� -> {}", dateTimeFormat.format(new Date())); + log.info("{}浠诲姟寮�濮嬫墽琛屾椂闂� -> {}",dictHosp.getCode(), dateTimeFormat.format(new Date())); long start = System.currentTimeMillis(); // 鏌ヨ浠诲姟鏁版嵁 - log.info("寮�濮嬫墽琛屽悓姝� 鎵ц鏁伴噺->{}", 0); + log.info("寮�濮嬫墽琛屽悓姝� 鎵ц闄㈠尯->{}", dictHosp.getCode()); List<String> jy = orderService.getDingShiTongBuJianYanTjNum(); List<String> jc = orderService.getDingShiTongBuJianChaTjNum(); if (null != jy && !jy.isEmpty()) { - log.info("鍚屾妫�楠屼汉鍛� 鎵ц鏁伴噺->{}", jy.size()); + log.info("{}鍚屾妫�楠屼汉鍛� 鎵ц鏁伴噺->{}{}",dictHosp.getCode(), jy.size(),JSONUtil.toJsonStr(jy)); for (String s : jy) { - extractedjianyan(s); + extractedjianyan(s,dictHosp.getCode()); } } if (null != jc && !jc.isEmpty()) { - log.info("鍚屾妫�鏌ヤ汉鍛� 鎵ц鏁伴噺->{}", jc.size()); + log.info("{}鍚屾妫�鏌ヤ汉鍛� 鎵ц鏁伴噺->{}{}",dictHosp.getCode(), jc.size(),JSONUtil.toJsonStr(jc)); for (String s : jc) { - extractedjiancha(s); + extractedjiancha(s,dictHosp.getCode()); } } Map<String, Object> map = new HashMap<>(); testMapper.tjplUpdateDetatilByVi(map); Integer object = (Integer) map.get("total"); - log.info("鎵ц瀛樺偍杩囩▼鍚庡嚭鍙�->{}", object); + log.info("{}鎵ц瀛樺偍杩囩▼鍚庡嚭鍙�->{}",dictHosp.getCode(), object); if (null != object && object.equals(1)) { if (null != jc && !jc.isEmpty()) { for (String s : jc) { @@ -152,10 +166,24 @@ List<LtkjExamJcsqd> list = jcsqdService.getLtkjJcsqdByTjh(s); if(null !=list && !list.isEmpty()){ for (LtkjExamJcsqd jcsqd : list) { - if(jcsqd.getJgzt().contains("銆�") || jcsqd.getJgzt().contains("锛�") || jcsqd.getJgzt().contains(";")){ - String[] split = jcsqd.getJgzt().replaceAll("\n", "").split("銆倈锛泑;"); + if(StringUtil.isNotBlank(jcsqd.getJgzt())){ + String regex = configService.selectConfigByKey("jcycxmzz"); + if(StringUtil.isBlank(regex)) regex= "銆倈锛泑;|,|锛�"; + String[] split = jcsqd.getJgzt().replaceAll("\n", "").split(regex); for (String jg : split) { - if(StringUtil.isNotBlank(jg) && !jg.contains("鏈寮傚父") + boolean b = configController.apiJcycpdgjz(jg); + if(!b){ + TjJcycxm jcycxm=new TjJcycxm(); + jcycxm.setTjh(s); + jcycxm.setYqid(dictHosp.getCode()); + String[] split1 = jcsqd.getJcxmid().split(";"); + jcycxm.setProId(split1[0]); + jcycxm.setProName(jcsqd.getJcxmmc()); + jcycxm.setCreateTime(new Date()); + jcycxm.setJcjg(jg); + jcycxmService.save(jcycxm); + } + /* if(StringUtil.isNotBlank(jg) && !jg.contains("鏈寮傚父") && !jg.contains("鏈鏄庢樉寮傚父") && !jg.contains("鏈鍗犱綅") && !jg.contains("鏈") && !jg.contains("鏈鏄庢樉")&& !jg.contains("姝e父")&& !jg.contains("鍙屼晶妞庨棿瀛旀棤鐙獎")&& !jg.contains("鏃犳畩")){ TjJcycxm jcycxm=new TjJcycxm(); @@ -167,7 +195,7 @@ jcycxm.setCreateTime(new Date()); jcycxm.setJcjg(jg); jcycxmService.save(jcycxm); - } + }*/ } } } @@ -175,7 +203,7 @@ } } long end = System.currentTimeMillis(); - log.info("鍚屾缁撴潫 鑰楁椂锛歿}绉�", (end - start) / 1000); + log.info("{}鍚屾缁撴潫 鑰楁椂锛歿}绉�",dictHosp.getCode(), (end - start) / 1000); }else { log.info("鎵ц瀛樺偍杩囩▼鍑哄弬澶辫触"); } @@ -187,13 +215,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()); } } @@ -210,13 +236,17 @@ // 妫�鏌ュ苟娣诲姞鏂扮殑鐢ㄦ埛浠诲姟 public void checkAndAddNewTasks() { + DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name()); // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃 - List<DictHosp> hospList = dictHospService.list(); + LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DictHosp::getIsAutoAsyncJg,1); + List<DictHosp> hospList = dictHospService.list(wrapper); + log.info("妫�鏌ュ苟娣诲姞闇�瑕佸悓姝ョ殑鍖婚櫌鍒楄〃:{}", JSONUtil.toJsonStr(hospList)); hospList.forEach(this::createTask); taskScheduler.schedule(this::checkAndAddNewTasks, Instant.now().plus(2, ChronoUnit.MINUTES)); } - private void extractedjianyan(String s) { + private void extractedjianyan(String s,String hospId) { try { List<Aws> awsList = testMapper.getWsxmLtkjHysqdByLisViBySLAVEWS(s); if(null !=awsList && !awsList.isEmpty()){ @@ -226,9 +256,40 @@ awsService.saveBatch(awsList); log.info("淇濆瓨澶栭�侀」鐩垚鍔�"); } - List<LtkjHysqd> hysqdList = testMapper.getCcXZxYyLtkjHysqdByLisVi(s); List<LtkjHysqd> wssq = testMapper.getWsxmLtkjHysqdByLisVi(s); - if(null !=wssq && !wssq.isEmpty())hysqdList.addAll(wssq); + if(null !=wssq && !wssq.isEmpty()){ + for (LtkjHysqd hysqd : wssq) { + LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh()); + if (null != jybgid) { + ltkjHysqdService.deletedLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh()); + ltkjHybgdService.deletedLtkjHybgdByTjhAndTmh(hysqd.getTmh()); + } + if (ltkjHysqdService.save(hysqd)) { + List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s); + ltkjHybgdService.saveBatch(wsbg); + } + } + } + + String isWsByView = configService.selectConfigByKey("is_ws_by_view"); + if (StrUtil.isNotBlank(isWsByView) && isWsByView.equals("Y")){ + List<LtkjHysqd> sqd = testMapper.getWsHySqdByView(s); + if (sqd != null && !sqd.isEmpty()){ + for (LtkjHysqd hysqd : sqd) { + LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh()); + if (null != jybgid) { + ltkjHysqdService.deletedLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh()); + ltkjHybgdService.deletedLtkjHybgdByTjhAndTmh(hysqd.getTmh()); + } + if (ltkjHysqdService.save(hysqd)) { + List<LtkjHybgd> wsbg = testMapper.getWsHyBgdByView(hysqd.getTmh()); + ltkjHybgdService.saveBatch(wsbg); + } + } + } + } + + List<LtkjHysqd> hysqdList = testMapper.getCcXZxYyLtkjHysqdByLisVi(s,hospId); if (null != hysqdList && !hysqdList.isEmpty()) { for (LtkjHysqd hysqd : hysqdList) { LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh()); @@ -238,8 +299,8 @@ } if (ltkjHysqdService.save(hysqd)) { List<LtkjHybgd> hybgdList = testMapper.getCcXZxYyLtkjHybgdByLisVi(hysqd.getTmh()); - List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s); - if(null !=wsbg && !wsbg.isEmpty())hybgdList.addAll(wsbg); +// List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s); +// if(null !=wsbg && !wsbg.isEmpty())hybgdList.addAll(wsbg); ltkjHybgdService.saveBatch(hybgdList); } } @@ -254,17 +315,19 @@ } - private void extractedjiancha(String s) { + private void extractedjiancha(String s,String hospId) { try { - List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s); + List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s,hospId); + log.info("{}鑷姩鍚屾妫�鏌ョ敵璇峰崟鏁版嵁:{}",hospId,JSONUtil.toJsonStr(jcsqdList)); if (null != jcsqdList && !jcsqdList.isEmpty()) { DynamicDataSourceContextHolder.clearDataSourceType(); jcsqdService.deletedLtkjJcsqdByTjhAndTmh(s); jcbgdService.deletedLtkjJcbgdByTjhAndTmh(s); jcsqdService.saveBatch(jcsqdList); - List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s); - DynamicDataSourceContextHolder.clearDataSourceType(); + List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s,hospId); +// DynamicDataSourceContextHolder.clearDataSourceType(); + log.info("{}鑷姩鍚屾妫�鏌ユ姤鍛婂崟鏁版嵁:{}",hospId,JSONUtil.toJsonStr(jcbgdList)); if (null != jcbgdList && !jcbgdList.isEmpty()) jcbgdService.saveBatch(jcbgdList); DynamicDataSourceContextHolder.clearDataSourceType(); } -- Gitblit v1.8.0