From 6ae6691a91f91cac77263e263220b499b5750a19 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Thu, 15 Aug 2024 17:55:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B9=9B=E6=B1=9F=E9=99=84=E5=B1=9E?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E7=BC=96=E7=9B=AE=E6=B7=BB=E5=8A=A0=E5=87=BA?= =?UTF-8?q?=E9=99=A2=E6=97=A5=E6=9C=9F=E6=9D=A1=E4=BB=B6=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E6=B9=9B=E6=B1=9F=E9=99=84=E5=B1=9E=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E6=B8=85=E5=8D=95=E9=98=9F=E5=88=97=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data-config/jobconfig/ZjFsCatalogCollectTask | 3 +- data-config/jobconfig/ZjFsCostListCollectTask | 7 + .../mapper/ArchiveMasterMapper.java | 2 + .../jobadmin/scheduler/JobScheduler.java | 3 + .../thread/ZjFsCatalogCollectTaskHelper.java | 8 +- .../thread/ZjFsCostListCollectTaskHelper.java | 124 ++++++++++++++++++ .../mapper/ZjFsPatIndexViewMapper.java | 3 +- .../resources/mapper/ArchiveMasterMapper.xml | 14 ++ .../mapper/ZjFsPatIndexViewMapper.xml | 1 + 9 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 data-config/jobconfig/ZjFsCostListCollectTask create mode 100644 src/main/java/com/docus/server/jobadmin/thread/ZjFsCostListCollectTaskHelper.java diff --git a/data-config/jobconfig/ZjFsCatalogCollectTask b/data-config/jobconfig/ZjFsCatalogCollectTask index ac782ac..d244d2f 100644 --- a/data-config/jobconfig/ZjFsCatalogCollectTask +++ b/data-config/jobconfig/ZjFsCatalogCollectTask @@ -2,5 +2,6 @@ "lastDate": "2024-08-13 00:00:00", "jobIntervalSeconds": 300, "sysCodes":"catalog", - "open": 1 + "open": 1, + "where":"AND discharge_date_time >=TO_DATE('2024-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') " } \ No newline at end of file diff --git a/data-config/jobconfig/ZjFsCostListCollectTask b/data-config/jobconfig/ZjFsCostListCollectTask new file mode 100644 index 0000000..cf3d85b --- /dev/null +++ b/data-config/jobconfig/ZjFsCostListCollectTask @@ -0,0 +1,7 @@ +{ + "lastDate": "2024-08-13 00:00:00", + "delayDays": 1, + "jobIntervalSeconds": 43200, + "sysCodes":"costlist", + "open": 1 +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/archivesqlserver/mapper/ArchiveMasterMapper.java b/src/main/java/com/docus/server/archivesqlserver/mapper/ArchiveMasterMapper.java index c46986b..f5b2ae6 100644 --- a/src/main/java/com/docus/server/archivesqlserver/mapper/ArchiveMasterMapper.java +++ b/src/main/java/com/docus/server/archivesqlserver/mapper/ArchiveMasterMapper.java @@ -19,4 +19,6 @@ public interface ArchiveMasterMapper { * @return 患者基础数据集合 */ List listByCondition(@Param("condition") ArchiveMaster condition); + + List listByNoCollectTaskAndGeDisDate(@Param("disDate")String disDate,@Param("sysCode")String sysCode); } diff --git a/src/main/java/com/docus/server/jobadmin/scheduler/JobScheduler.java b/src/main/java/com/docus/server/jobadmin/scheduler/JobScheduler.java index ece489a..7a88493 100644 --- a/src/main/java/com/docus/server/jobadmin/scheduler/JobScheduler.java +++ b/src/main/java/com/docus/server/jobadmin/scheduler/JobScheduler.java @@ -1,6 +1,7 @@ package com.docus.server.jobadmin.scheduler; import com.docus.server.jobadmin.thread.ZjFsCatalogCollectTaskHelper; +import com.docus.server.jobadmin.thread.ZjFsCostListCollectTaskHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +16,7 @@ public class JobScheduler { public void init() throws Exception { ZjFsCatalogCollectTaskHelper.getInstance().start(); + ZjFsCostListCollectTaskHelper.getInstance().start(); logger.info(">>>>>>>>> init job admin success."); } @@ -22,5 +24,6 @@ public class JobScheduler { public void destroy() { ZjFsCatalogCollectTaskHelper.getInstance().toStop(); + ZjFsCostListCollectTaskHelper.getInstance().toStop(); } } diff --git a/src/main/java/com/docus/server/jobadmin/thread/ZjFsCatalogCollectTaskHelper.java b/src/main/java/com/docus/server/jobadmin/thread/ZjFsCatalogCollectTaskHelper.java index c3dc10d..cec93dd 100644 --- a/src/main/java/com/docus/server/jobadmin/thread/ZjFsCatalogCollectTaskHelper.java +++ b/src/main/java/com/docus/server/jobadmin/thread/ZjFsCatalogCollectTaskHelper.java @@ -52,6 +52,10 @@ public class ZjFsCatalogCollectTaskHelper { int jobIntervalSeconds = jobConfig.getIntValue("jobIntervalSeconds"); String lastDate = jobConfig.getString("lastDate"); String sysCodes = jobConfig.getString("sysCodes"); + String where = jobConfig.getString("where"); + if (where == null) { + where = ""; + } int open = jobConfig.getIntValue("open"); if (open == 0) { TimeUnit.SECONDS.sleep(60); @@ -61,9 +65,9 @@ public class ZjFsCatalogCollectTaskHelper { Date maxCatalogDate = zjFsPatIndexViewMapper.maxCatalogDate(); String maxCatalogDateStr = Func.formatDateTime(maxCatalogDate); // 查询视图数据,视图数据查询患者信息id,进行任务生成 - List zjFsPatIndexViews = zjFsPatIndexViewMapper.listByCatalogDateRange(lastDate, maxCatalogDateStr); + List zjFsPatIndexViews = zjFsPatIndexViewMapper.listByCatalogDateRange(lastDate, maxCatalogDateStr, where); if (Func.isNotEmpty(zjFsPatIndexViews)) { - logger.info("首页编目数据查询,根据最后编目时间查询(不包含截止时间),开始时间:{},截止时间:{},视图数据:{} 条,数据为:{}", lastDate, maxCatalogDateStr, zjFsPatIndexViews.size(), Func.toJson(zjFsPatIndexViews)); + logger.info("首页编目数据查询,根据最后编目时间查询(不包含截止时间),开始时间:{},截止时间:{},额外条件:{},视图数据:{} 条,数据为:{}", lastDate, maxCatalogDateStr, where, zjFsPatIndexViews.size(), Func.toJson(zjFsPatIndexViews)); for (ZjFsPatIndexView view : zjFsPatIndexViews) { String inpNo = view.getInpNo(); Integer visitId = view.getVisitId(); diff --git a/src/main/java/com/docus/server/jobadmin/thread/ZjFsCostListCollectTaskHelper.java b/src/main/java/com/docus/server/jobadmin/thread/ZjFsCostListCollectTaskHelper.java new file mode 100644 index 0000000..56241b1 --- /dev/null +++ b/src/main/java/com/docus/server/jobadmin/thread/ZjFsCostListCollectTaskHelper.java @@ -0,0 +1,124 @@ +package com.docus.server.jobadmin.thread; + +import com.alibaba.fastjson.JSONObject; +import com.docus.core.util.Func; +import com.docus.infrastructure.core.utils.TableJsonRead; +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.archivesqlserver.entity.ArchiveMaster; +import com.docus.server.archivesqlserver.mapper.ArchiveMasterMapper; +import com.docus.server.jobadmin.config.JobAdminConfig; +import com.docus.server.rpc.V2ViewTaskCollectService; +import com.docus.server.rpc.dto.TaskMakeupDto; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 湛江附属医院费用清单采集任务job + * + * @author YongBin Wen + * @date 2024/1/23 10:59 + */ + +public class ZjFsCostListCollectTaskHelper { + private static final Logger logger = LoggerFactory.getLogger(ZjFsCostListCollectTaskHelper.class); + private static final ZjFsCostListCollectTaskHelper instance = new ZjFsCostListCollectTaskHelper(); + + public static ZjFsCostListCollectTaskHelper getInstance() { + return instance; + } + + private Thread zjFsCostListCollectTaskThread; + private volatile boolean toStop = false; + + public void start() { + zjFsCostListCollectTaskThread = new Thread(() -> { + TableJsonRead tableJsonRead = new TableJsonRead(); + ArchiveMasterMapper archiveMasterMapper = JobAdminConfig.getJobAdminConfig().getArchiveMasterMapper(); + V2ViewTaskCollectService v2ViewTaskCollectService = JobAdminConfig.getJobAdminConfig().getV2ViewTaskCollectService(); + String configPath = "data-config\\jobconfig"; + String configFileName = "ZjFsCostListCollectTask"; + while (!toStop) { + try { + LocalDateTime runTime = LocalDateTime.now(); + // 读取配置,实时观察配置文件状况 + JSONObject jobConfig = tableJsonRead.Read(configPath, configFileName, JSONObject.class); + int jobIntervalSeconds = jobConfig.getIntValue("jobIntervalSeconds"); + String lastDate = jobConfig.getString("lastDate"); + String sysCodes = jobConfig.getString("sysCodes"); + int delayDays = jobConfig.getIntValue("delayDays"); + LocalDateTime nextSelectDateTime = runTime.plusDays(-delayDays); + int open = jobConfig.getIntValue("open"); + if (open == 0) { + TimeUnit.SECONDS.sleep(60); + continue; + } + // 下次执行的开始时间为现在时间减去间隔时间 + String nextSelectDateTimeStr=Func.formatDateTime(nextSelectDateTime); + if(Func.isBlank(lastDate)){ + lastDate=nextSelectDateTimeStr; + } + + // 查询视图数据,视图数据查询患者信息id,进行任务生成 + List archiveMasterList = archiveMasterMapper.listByNoCollectTaskAndGeDisDate(lastDate, sysCodes); + if (archiveMasterList == null) { + archiveMasterList = new ArrayList<>(); + } + logger.info("查询未生成费用清单队列 {} 的患者基础数据,出院时间大于等于 {} 的数据有 {} 条,数据为:{}",sysCodes,lastDate,archiveMasterList.size(),Func.toJson(archiveMasterList)); + + if (!archiveMasterList.isEmpty()) { + // 生成采集任务 + List masterIds = archiveMasterList.stream().map(ArchiveMaster::getId).collect(Collectors.toList()); + TaskMakeupDto makeupDto = new TaskMakeupDto(); + makeupDto.setPatientIds(masterIds); + makeupDto.setSysCodes(sysCodes); + logger.info("费用清单生成队列参数:{}", Func.toJson(makeupDto)); + CommonResult result = v2ViewTaskCollectService.generateTaskByPatientIdAndSysCodes(makeupDto); + logger.info("费用清单生成队列返回结果:{}", Func.toJson(result)); + } + + // 刷新配置 + jobConfig.put("lastDate", nextSelectDateTimeStr); + tableJsonRead.Save(configPath, configFileName, jobConfig.toJSONString()); + TimeUnit.SECONDS.sleep(jobIntervalSeconds); + } catch (Exception ex) { + if (!toStop) { + logger.error(">>>>>>>>>>> zjFs CostList CollectTask Thread error:" + ex.getMessage(), ex); + try { + TimeUnit.SECONDS.sleep(60); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + } + logger.info(">>>>>>>>>>> zjFs CostList CollectTask Thread stop"); + }); + zjFsCostListCollectTaskThread.setDaemon(true); + zjFsCostListCollectTaskThread.setName("ZjFsCostListCollectTaskHelper"); + zjFsCostListCollectTaskThread.start(); + } + + public void toStop() { + toStop = false; + zjFsCostListCollectTaskThread.interrupt(); + try { + zjFsCostListCollectTaskThread.join(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + + + public static void main(String[] args) { + TableJsonRead tableJsonRead = new TableJsonRead(); + JSONObject config = tableJsonRead.Read("data-config\\jobconfig", "ZjFsCatalogCollectTask", JSONObject.class); + System.out.println(config); + } +} diff --git a/src/main/java/com/docus/server/zjfsjhemr/mapper/ZjFsPatIndexViewMapper.java b/src/main/java/com/docus/server/zjfsjhemr/mapper/ZjFsPatIndexViewMapper.java index 8d7e711..3876144 100644 --- a/src/main/java/com/docus/server/zjfsjhemr/mapper/ZjFsPatIndexViewMapper.java +++ b/src/main/java/com/docus/server/zjfsjhemr/mapper/ZjFsPatIndexViewMapper.java @@ -25,7 +25,8 @@ public interface ZjFsPatIndexViewMapper { * * @param startDate 开始时间 yyyy-MM-dd HH:mm:ss * @param endDate 结束时间 yyyy-MM-dd HH:mm:ss + * @param where 其他条件 * @return 首页编目数据集合 */ - List listByCatalogDateRange(@Param("startDate") String startDate, @Param("endDate") String endDate); + List listByCatalogDateRange(@Param("startDate") String startDate, @Param("endDate") String endDate,@Param("where")String where); } diff --git a/src/main/resources/mapper/ArchiveMasterMapper.xml b/src/main/resources/mapper/ArchiveMasterMapper.xml index b5d4533..6788fd3 100644 --- a/src/main/resources/mapper/ArchiveMasterMapper.xml +++ b/src/main/resources/mapper/ArchiveMasterMapper.xml @@ -25,4 +25,18 @@ + diff --git a/src/main/resources/mapper/ZjFsPatIndexViewMapper.xml b/src/main/resources/mapper/ZjFsPatIndexViewMapper.xml index 616e6db..9861cb2 100644 --- a/src/main/resources/mapper/ZjFsPatIndexViewMapper.xml +++ b/src/main/resources/mapper/ZjFsPatIndexViewMapper.xml @@ -16,6 +16,7 @@ from jhemr.v_pat_index where catalog_date >= TO_DATE(#{startDate}, 'yyyy-mm-dd hh24:mi:ss') and catalog_date TO_DATE(#{endDate}, 'yyyy-mm-dd hh24:mi:ss') + ${where} order by catalog_date