From 8eca5ee798cd21054ed4d4cae77f419dcf76e0bf Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Wed, 4 Jun 2025 10:48:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=A2=85=E5=B7=9E=E4=B8=AD=E5=8C=BB?= =?UTF-8?q?=E9=99=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=BF=83=E7=94=B5=E9=87=87?= =?UTF-8?q?=E9=9B=86=E5=99=A8=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=BF=83=E7=94=B5?= =?UTF-8?q?=E3=80=81=E6=89=8B=E9=BA=BB=E5=A6=82=E6=9E=9C=E5=87=BA=E9=99=A2?= =?UTF-8?q?8=E5=A4=A9=E6=B2=A1=E6=9C=89=E6=8A=A5=E5=91=8A=E5=88=99?= =?UTF-8?q?=E4=BD=9C=E5=BA=9F=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/archive/mapper/TBasicMapper.java | 2 + .../server/mzzyy/entity/MzZyyXinDianView.java | 34 ++++++ .../mzzyy/job/MzZyyReportCollectJob.java | 102 ++++++++++++++++++ .../mzzyy/mapper/MzZyyXinDianViewMapper.java | 25 +++++ src/main/resources/bootstrap.yml | 23 ++++ .../mapper/MzZyyXinDianViewMapper.xml | 19 ++++ src/main/resources/mapper/TBasicMapper.xml | 3 + 7 files changed, 208 insertions(+) create mode 100644 src/main/java/com/docus/server/mzzyy/entity/MzZyyXinDianView.java create mode 100644 src/main/java/com/docus/server/mzzyy/mapper/MzZyyXinDianViewMapper.java create mode 100644 src/main/resources/mapper/MzZyyXinDianViewMapper.xml diff --git a/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java b/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java index 20b6a6f..18fe00c 100644 --- a/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java +++ b/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java @@ -41,4 +41,6 @@ public interface TBasicMapper { List getYzyPatientIdFromScanAssort(); List getNoTaskPatientByDisDate(@Param("startDateTime") String startDateTime,@Param("collectorId") String collectorId); + + int cancelTask(@Param("patientId") String patientId, @Param("sysflag") String collectorId); } diff --git a/src/main/java/com/docus/server/mzzyy/entity/MzZyyXinDianView.java b/src/main/java/com/docus/server/mzzyy/entity/MzZyyXinDianView.java new file mode 100644 index 0000000..46d8fcf --- /dev/null +++ b/src/main/java/com/docus/server/mzzyy/entity/MzZyyXinDianView.java @@ -0,0 +1,34 @@ +package com.docus.server.mzzyy.entity; + +/** + * @author YongBin Wen + * @date 2025/6/4 0004 8:39 + */ + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +/** + * @author YongBin Wen + * @date 2024/7/12 14:38 + */ +@Data +@ApiModel("梅州中医院提供的心电视图 V_JSWZH_XD") +public class MzZyyXinDianView { + /** + * 记账号 + */ + private String jzh; + /** + * 报告id + */ + private String bgid; + /** + * 报告名称 + */ + private String bgmc; + /** + * 报告地址 + */ + private String bgdz; +} diff --git a/src/main/java/com/docus/server/mzzyy/job/MzZyyReportCollectJob.java b/src/main/java/com/docus/server/mzzyy/job/MzZyyReportCollectJob.java index da54e8a..935cfd0 100644 --- a/src/main/java/com/docus/server/mzzyy/job/MzZyyReportCollectJob.java +++ b/src/main/java/com/docus/server/mzzyy/job/MzZyyReportCollectJob.java @@ -6,7 +6,10 @@ import com.alibaba.fastjson.JSONObject; import com.docus.core.util.Func; import com.docus.infrastructure.web.api.CommonResult; import com.docus.infrastructure.web.api.ResultCode; +import com.docus.server.archive.entity.TBasic; import com.docus.server.archive.mapper.TBasicMapper; +import com.docus.server.mzzyy.entity.MzZyyXinDianView; +import com.docus.server.mzzyy.mapper.MzZyyXinDianViewMapper; import com.docus.server.rpc.DownPlatformService; import com.docus.server.rpc.MzZyyLisService; import com.docus.server.rpc.MzZyyShouMaService; @@ -26,12 +29,15 @@ import com.docus.server.rpc.dto.ReportTaskTwoDto; import com.docus.server.rpc.enums.MzZyyLisType; import com.docus.server.util.StaticResourceMapping; import com.docus.server.util.TableJsonRead; +import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.File; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Base64; import java.util.Collections; @@ -57,6 +63,8 @@ public class MzZyyReportCollectJob { private MzZyyShouMaService mzZyyShouMaService; @Autowired private TBasicMapper tBasicMapper; + @Autowired + private MzZyyXinDianViewMapper xinDianViewMapper; @XxlJob("MzZyyLisCollectJob") public void lisCollectJob() { @@ -186,6 +194,7 @@ public class MzZyyReportCollectJob { if (!Objects.isNull(queryMedicalDocumentInfoList)) { log.info("住院号:{},住院流水号:{},查询手麻医疗文书列表为空,返回信息为:{}。", inpatientNo, jzh, Func.toJson(queryMedicalDocumentInfoList)); } + determineAndCancelTask(patientId, collectorId); return; } List scanFiles = new ArrayList<>(); @@ -244,6 +253,99 @@ public class MzZyyReportCollectJob { } } + + @XxlJob("MzZyyXinDianCollectJob") + public void xinDianCollectJob() { + log.info(">>>>>>>>>>>>>>>>>>>>>> 梅州中医院心电视图采集任务开始!"); + // 1.获取任务和患者信息 2.查询视图信息 3.上报下载 + String jobParam = XxlJobHelper.getJobParam(); + JSONObject jobParamJsonObject = JSONObject.parseObject(jobParam); + String assortId = jobParamJsonObject.getString("assortId"); + String collectorId = jobParamJsonObject.getString("collectorId"); + String extraCondition = jobParamJsonObject.getString("extraCondition"); + if (Func.isBlank(assortId) || Func.isBlank(collectorId)) { + log.warn(">>>>>>>>>>>>>>>>>>>>>> 梅州中医院心电视图采集任务,未配置心电采集器和采集文件分段"); + return; + } + CommonResult commonResult = taskDistributeService.getNoViewTaskByCollectorId(collectorId); + if (ResultCode.SUCCESS.getCode().equals(commonResult.getCode()) + && commonResult.getData() != null) { + ReportDownTwoDto downTwoDto = commonResult.getData(); + ReportTaskTwoDto task = downTwoDto.getTasks().get(0); + log.info("获取了任务:{}", Func.toJson(task)); + + String patientId = downTwoDto.getPatientId(); + String jzh = downTwoDto.getJzh(); + + List xinDianViews = xinDianViewMapper.getPatientXinDianView(jzh, extraCondition); + int size = xinDianViews.size(); + log.info("记账号:{} 采集心电数据:{} 条!", jzh, size); + if (size <= 0) { + determineAndCancelTask(patientId, collectorId); + return; + } + tBasicMapper.invalidFileBySource(patientId, collectorId); + + ReportDownPatientDto patient = new ReportDownPatientDto(); + patient.setPatientid(patientId); + + ReportDownDto reportDownDto = new ReportDownDto(); + reportDownDto.setAssortid(assortId); + reportDownDto.setCollectorid(collectorId); + reportDownDto.setIp(""); + reportDownDto.setPatient(patient); + + for (MzZyyXinDianView result : xinDianViews) { + ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto(); + reportDownScanFileDto.setDownurl(result.getBgdz()); + reportDownScanFileDto.setFiletitle(result.getBgmc()); + reportDownScanFileDto.setSerialnum(result.getBgid()); + reportDownScanFileDto.setFilesource(1); + reportDownScanFileDto.setFiletype(1); + reportDownScanFileDto.setFilestoragetype(1); + reportDownScanFileDto.setTaskid(task.getTaskId()); + List scanFiles = Collections.singletonList(reportDownScanFileDto); + reportDownDto.setScanfiles(scanFiles); + downPlatformService.report(reportDownDto); + } + } + log.info(">>>>>>>>>>>>>>>>>>>>>> 梅州中医院心电视图采集任务结束!"); + + } + + /** + * 判定出院大于8天,则作废任务 + * + * @param patientId 病案主键 + * @param collectorId 采集器id + * @date 2025/6/4 0004 9:03 + * @author YongBin Wen + */ + private void determineAndCancelTask(String patientId, String collectorId) { + List tbasics = tBasicMapper.getTbasicByPatientIds(Collections.singletonList(patientId)); + if (Func.isEmpty(tbasics)) { + return; + } + TBasic tBasic = tbasics.get(0); + Date disDate = tBasic.getDisDate(); + if (Objects.isNull(disDate)) { + return; + } + LocalDateTime disDateLocalDateTime = disDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + if (disDateLocalDateTime.getYear() < 1900) { + return; + } + final int cancelDays = 8; + LocalDateTime endLocalDateTime = disDateLocalDateTime.plusDays(cancelDays); + // 现在时间大于出院n天,作废任务 + if (!LocalDateTime.now().isBefore(endLocalDateTime)) { + tBasicMapper.cancelTask(patientId, collectorId); + } + } + + /** * 根据手麻的文件类型,得到归档的文件分段,有些文件不需要采集,则返回空 * diff --git a/src/main/java/com/docus/server/mzzyy/mapper/MzZyyXinDianViewMapper.java b/src/main/java/com/docus/server/mzzyy/mapper/MzZyyXinDianViewMapper.java new file mode 100644 index 0000000..85e3d37 --- /dev/null +++ b/src/main/java/com/docus/server/mzzyy/mapper/MzZyyXinDianViewMapper.java @@ -0,0 +1,25 @@ +package com.docus.server.mzzyy.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.mzzyy.entity.MzZyyXinDianView; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author YongBin Wen + * @date 2025/6/4 0004 8:38 + */ +@DS("mzzyy-xd") +@Mapper +public interface MzZyyXinDianViewMapper { + /** + * 根据患者jzh获取心电视图的数据 + * + * @param jzh 患者信息 + * @param extraCondition 额外的sql条件 + * @return 心电视图的数据 + */ + List getPatientXinDianView(@Param("jzh") String jzh, @Param("ext") String extraCondition); +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 4e4040a..1f92d24 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -99,6 +99,29 @@ spring: test-on-borrow: false test-on-return: false validation-query: select 1 + + mzzyy-xd: + url: jdbc:sqlserver://199.168.91.23:1433;DatabaseName=CardioScanServer + username: dmsuser + password: dmsecg@2020 + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + type: com.alibaba.druid.pool.DruidDataSource + # 初始化配置 + initial-size: 3 + # 最小连接数 + min-idle: 3 + # 最大连接数 + max-active: 10 + # 获取连接超 时时间 + max-wait: 5000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 90000 + # 最大空闲时间 + min-evictable-idle-time-millis: 1800000 + test-while-idle: true + test-on-borrow: false + test-on-return: false + validation-query: select 1 redis: host: redis.docus.cn password: JSdocus@702 diff --git a/src/main/resources/mapper/MzZyyXinDianViewMapper.xml b/src/main/resources/mapper/MzZyyXinDianViewMapper.xml new file mode 100644 index 0000000..34f4f31 --- /dev/null +++ b/src/main/resources/mapper/MzZyyXinDianViewMapper.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml index 59c3a2a..9ffcdc9 100644 --- a/src/main/resources/mapper/TBasicMapper.xml +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -34,6 +34,9 @@ delete from docus_archivefile.af_collect_task where id=#{id} + + update docus_archivefile.af_collect_task set state='4' where patient_id=#{patientId} and sysflag=#{sysflag} +