From 9450b481614c7a4f191475d63cfa5c5a3f87141e Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期六, 15 二月 2025 20:40:07 +0800 Subject: [PATCH] 20250215 --- ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java | 277 ++++++++++++++++++++++++++++++++++++++++++++++ ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java | 4 ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java | 6 ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java | 18 +++ ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java | 5 5 files changed, 304 insertions(+), 6 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 new file mode 100644 index 0000000..f67a7c3 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/AsyncResultTask.java @@ -0,0 +1,277 @@ +package com.ltkj.web.config.timer; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.json.JSONUtil; +import com.ltkj.common.enums.DataSourceType; +import com.ltkj.db.DataSourceConfig; +import com.ltkj.db.DataSourceContextHolder; +import com.ltkj.framework.datasource.DynamicDataSourceContextHolder; +import com.ltkj.hosp.domain.DictHosp; +import com.ltkj.hosp.domain.TjJcycxm; +import com.ltkj.hosp.mapper.TestMapper; +import com.ltkj.hosp.service.*; +import com.ltkj.hosp.sqlDomain.*; +import com.ltkj.system.service.ISysConfigService; +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; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalTime; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + +@Slf4j +@Profile("!dev & !test") +@Component +public class AsyncResultTask { + + @Autowired + private TaskScheduler taskScheduler; // 瀹氭椂浠诲姟璋冨害鍣� + @Resource + private ITjOrderService orderService; + @Autowired + private ISysConfigService configService; + @Resource + private LtkjExamJcbgdService jcbgdService; + @Resource + private LtkjExamJcsqdService jcsqdService; + @Resource + private LtkjHybgdService ltkjHybgdService; + @Resource + private LtkjHysqdService ltkjHysqdService; + @Resource + private TestMapper testMapper; + @Autowired + private TjJcycxmService jcycxmService; + @Autowired + private AwsService awsService; + @Resource + private IDictHospService dictHospService; + @Autowired + private DataSourceConfig dataSourceConfig; + + private final ReentrantLock reentrantLock = new ReentrantLock(); + + // 鐢ㄦ潵璺熻釜宸茶皟搴︿换鍔$殑鐢ㄦ埛ID闆嗗悎锛岄伩鍏嶉噸澶嶆坊鍔犱换鍔� + private final Set<String> scheduledTasks = new HashSet<>(); + + private static final SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + + // 鍒濆鍖栨柟娉曪紝鍚姩鏃惰皟鐢紝鑾峰彇鎵�鏈夌敤鎴峰苟鍒涘缓浠诲姟 + @PostConstruct + public void init() { + DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name()); + // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃 + List<DictHosp> hospList = dictHospService.list(); + hospList.forEach(this::createTask); // 涓烘瘡涓敤鎴峰垱寤轰换鍔� + // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔� + schedulePeriodicTaskCheck(); + } + + // 鏃ュ織鏂囦欢鍚嶇О鍒楄〃 + + // 鍒涘缓瀹氭椂浠诲姟鐨勬柟娉曪紝鐢ㄦ埛ID涓嶅瓨鍦ㄤ换鍔℃椂鎵嶄細娣诲姞 + public void createTask(DictHosp dictHosp) { + // 濡傛灉浠诲姟宸茬粡瀛樺湪锛屽垯涓嶉噸澶嶆坊鍔� + if (scheduledTasks.contains(dictHosp.getCode())) { + return; + } + // 灏嗚鐢ㄦ埛ID娣诲姞鍒板凡璋冨害浠诲姟闆嗗悎涓� + scheduledTasks.add(dictHosp.getCode()); + // 鍒涘缓瀹氭椂浠诲姟锛屼换鍔″皢鍦�15鍒嗛挓鍚庢墽琛� + taskScheduler.schedule(() -> { + try { + // 鎵ц浠诲姟鐨勮秴鏃舵帶鍒� + taskScheduler.schedule(() -> { + executeTask(dictHosp); + }, Instant.now()); + } catch (Exception e) { + log.error("鍒涘缓浠诲姟鏃跺彂鐢熷紓甯革細{}", e.getMessage()); + } + }, Instant.now().plus(15, ChronoUnit.MINUTES)); + } + + // 鎵ц鏃ュ織鍚屾浠诲姟鐨勬柟娉� + 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); + + boolean lock = reentrantLock.tryLock(); + try { + if (!panduandangqianshijian) { + if (lock) { + log.info("浠诲姟寮�濮嬫墽琛屾椂闂� -> {}", dateTimeFormat.format(new Date())); + long start = System.currentTimeMillis(); + // 鏌ヨ浠诲姟鏁版嵁 + log.info("寮�濮嬫墽琛屽悓姝� 鎵ц鏁伴噺->{}", 0); + List<String> jy = orderService.getDingShiTongBuJianYanTjNum(); + + List<String> jc = orderService.getDingShiTongBuJianChaTjNum(); + + + if (null != jy && !jy.isEmpty()) { + log.info("鍚屾妫�楠屼汉鍛� 鎵ц鏁伴噺->{}", jy.size()); + for (String s : jy) { + extractedjianyan(s); + } + } + + + if (null != jc && !jc.isEmpty()) { + log.info("鍚屾妫�鏌ヤ汉鍛� 鎵ц鏁伴噺->{}", jc.size()); + for (String s : jc) { + extractedjiancha(s); + } + } + Map<String, Object> map = new HashMap<>(); + testMapper.tjplUpdateDetatilByVi(map); + Integer object = (Integer) map.get("total"); + log.info("鎵ц瀛樺偍杩囩▼鍚庡嚭鍙�->{}", object); + if (null != object && object.equals(1)) { + if (null != jc && !jc.isEmpty()) { + for (String s : jc) { + jcycxmService.deletedByTjh(s); + List<LtkjExamJcsqd> list = jcsqdService.getLtkjJcsqdByTjh(s); + if(null !=list && !list.isEmpty()){ + for (LtkjExamJcsqd jcsqd : list) { + if(jcsqd.getJgbx().contains("銆�")){ + String[] split = jcsqd.getJgzt().split("銆�"); + for (String jg : split) { + if(StringUtil.isNotBlank(jg) && !jg.contains("鏈寮傚父") + && !jg.contains("鏈鏄庢樉寮傚父") && !jg.contains("鏈鍗犱綅") + && !jg.contains("鏈鏄庢樉")&& !jg.contains("姝e父")&& !jg.contains("鍙屼晶妞庨棿瀛旀棤鐙獎")){ + 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); + } + } + } + } + } + } + } + long end = System.currentTimeMillis(); + log.info("鍚屾缁撴潫 鑰楁椂锛歿}绉�", (end - start) / 1000); + }else { + log.info("鎵ц瀛樺偍杩囩▼鍑哄弬澶辫触"); + } + } + }else { + log.info("涓嶅湪瀹氭椂鍣ㄦ墽琛屾椂闂磋寖鍥翠箣鍐�!!!"); + } + } catch (Exception e) { + 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(); + + } + } + + private boolean panduandangqianshijian(String kssj, String jssj) { + ZonedDateTime now = ZonedDateTime.now(); + LocalTime time = now.toLocalTime(); + return time.isAfter(LocalTime.of(Integer.parseInt(kssj), 0)) && time.isBefore(LocalTime.of(Integer.parseInt(jssj), 0)); + } + + // 瀹氭椂妫�鏌ユ槸鍚︽湁鏂扮殑鐢ㄦ埛闇�瑕佹坊鍔犱换鍔� + private void schedulePeriodicTaskCheck() { + checkAndAddNewTasks(); + } + + // 妫�鏌ュ苟娣诲姞鏂扮殑鐢ㄦ埛浠诲姟 + public void checkAndAddNewTasks() { + // 鑾峰彇鎵�鏈夐渶瑕佸悓姝ユ棩蹇楃殑鐢ㄦ埛鍒楄〃 + List<DictHosp> hospList = dictHospService.list(); + hospList.forEach(this::createTask); + taskScheduler.schedule(this::checkAndAddNewTasks, Instant.now().plus(2, ChronoUnit.MINUTES)); + } + + private void extractedjianyan(String s) { + try { + List<Aws> awsList = testMapper.getWsxmLtkjHysqdByLisViBySLAVEWS(s); + if(null !=awsList && !awsList.isEmpty()){ + log.info(awsList.toString()); + testMapper.delWsxmjg(s); + log.info("鍒犻櫎澶栭�侀」鐩垚鍔�"); + 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 != hysqdList && !hysqdList.isEmpty()) { + for (LtkjHysqd hysqd : hysqdList) { + 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> hybgdList = testMapper.getCcXZxYyLtkjHybgdByLisVi(hysqd.getTmh()); + List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s); + if(null !=wsbg && !wsbg.isEmpty())hybgdList.addAll(wsbg); + ltkjHybgdService.saveBatch(hybgdList); + } + } + DynamicDataSourceContextHolder.clearDataSourceType(); + } + } catch (Exception e) { + log.info("鍚屾妫�楠屾暟鎹け璐�"); +// throw new RuntimeException(e); + log.error(String.valueOf(e)); + } + + } + + + private void extractedjiancha(String s) { + + try { + List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s); + if (null != jcsqdList && !jcsqdList.isEmpty()) { + DynamicDataSourceContextHolder.clearDataSourceType(); + jcsqdService.deletedLtkjJcsqdByTjhAndTmh(s); + jcbgdService.deletedLtkjJcbgdByTjhAndTmh(s); + jcsqdService.saveBatch(jcsqdList); + List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s); + DynamicDataSourceContextHolder.clearDataSourceType(); + if (null != jcbgdList && !jcbgdList.isEmpty()) jcbgdService.saveBatch(jcbgdList); + DynamicDataSourceContextHolder.clearDataSourceType(); + } + } catch (Exception e) { + log.info("鍚屾妫�鏌ユ暟鎹け璐�"); +// throw new RuntimeException(e); + log.error(String.valueOf(e)); + } + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java index 55b217a..f846cee 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java @@ -35,8 +35,8 @@ * @Date: 2024/7/25 15:05 */ @Slf4j -@Component -@Profile("!dev & !test") +//@Component +//@Profile("!prod & !test") public class DefaultScheduled { diff --git a/ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java new file mode 100644 index 0000000..c08afdf --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/config/timer/TaskSchedulerConfig.java @@ -0,0 +1,18 @@ +package com.ltkj.web.config.timer; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +@Configuration +public class TaskSchedulerConfig { + + @Bean + public TaskScheduler taskScheduler() { + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.setPoolSize(50); + taskScheduler.setThreadNamePrefix("scheduled-task-"); + return taskScheduler; + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java index 5377e42..f3bddbf 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java @@ -1538,7 +1538,10 @@ tableQz.addCell(cell); - File file = new File(value + File.separator + "yinzhang.png"); + String keyId = DataSourceContextHolder.getDataSourceKey(); + keyId = keyId.replace("ltkjpeis10_",""); + + File file = new File(value + File.separator + keyId + File.separator + "yinzhang.png"); cell = new PdfPCell(); cell.setBorder(Rectangle.NO_BORDER); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java index 71e06a4..08102c4 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java @@ -44,6 +44,7 @@ if (StringUtils.isNotNull(dataSource)) { DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); + DataSourceContextHolder.setDataSourceKey(dataSource.value().name()); } try { @@ -53,9 +54,8 @@ logger.info("DataSourceContextHolder ->{}",key); logger.info("DynamicDataSourceContextHolder ->{}",DynamicDataSourceContextHolder.getDataSourceType()); // 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚� - DynamicDataSourceContextHolder.clearDataSourceType(); -// DataSourceContextHolder.setDataSourceKey(key); -// DynamicDataSourceContextHolder.setDataSourceType(key); + DataSourceContextHolder.setDataSourceKey(key); + DynamicDataSourceContextHolder.setDataSourceType(key); logger.info("鎵ц涔嬪悗 clear涔嬪悗"); logger.info("DataSourceContextHolder ->{}",key); logger.info("DynamicDataSourceContextHolder ->{}",DynamicDataSourceContextHolder.getDataSourceType()); -- Gitblit v1.8.0