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} +