From 2f040453eef7ce87542775e8d3f1c844f763a23a Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Tue, 14 Nov 2023 16:54:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=AB=E6=8F=8F=E5=90=8C=E6=AD=A5-=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90-=E4=B8=B4=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 25 +++++-- .../controller/PatientScanController.java | 39 ++++++++++ .../collect/dto/PatientScanConditionDTO.java | 23 ++++++ .../server/collect/entity/PatientScan.java | 50 +++++++++++++ .../mapper/CollectTaskMapper.java | 12 +++ .../mapper/DownloadTaskMapper.java | 2 + .../mapper/PatientBasicMapper.java | 12 +++ .../mapper/PatientScanMapper.java | 36 +++++++++ .../collect/service/PatientScanService.java | 23 ++++++ .../service/impl/PatientScanServiceImpl.java | 59 +++++++++++++++ src/main/resources/bootstrap.yml | 75 +++++++++++++------ .../resources/mapper/PatientScanMapper.xml | 36 +++++++++ src/main/resources/mapper/TBasicMapper.xml | 36 ++++----- 13 files changed, 381 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/docus/server/collect/controller/PatientScanController.java create mode 100644 src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java create mode 100644 src/main/java/com/docus/server/collect/entity/PatientScan.java create mode 100644 src/main/java/com/docus/server/collect/infrastructure/mapper/CollectTaskMapper.java create mode 100644 src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java create mode 100644 src/main/java/com/docus/server/collect/infrastructure/mapper/PatientScanMapper.java create mode 100644 src/main/java/com/docus/server/collect/service/PatientScanService.java create mode 100644 src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java create mode 100644 src/main/resources/mapper/PatientScanMapper.xml diff --git a/pom.xml b/pom.xml index 2a955db..dc2306b 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 4.0.0 - docus-webservice-gdszy + docus-collect-gdszy-patient-scan @@ -47,10 +47,7 @@ org.springframework.boot spring-boot-starter-web - - com.docus - docus-mybatisplus-starter - + com.alibaba.cloud @@ -99,6 +96,17 @@ 3.4.1 compile + + + com.baomidou + mybatis-plus-boot-starter + 3.4.0 + + + com.baomidou + dynamic-datasource-spring-boot-starter + 3.4.0 + org.apache.velocity velocity-engine-core @@ -173,7 +181,12 @@ test - + + + com.microsoft.sqlserver + sqljdbc4 + 4.0 + diff --git a/src/main/java/com/docus/server/collect/controller/PatientScanController.java b/src/main/java/com/docus/server/collect/controller/PatientScanController.java new file mode 100644 index 0000000..0e682a9 --- /dev/null +++ b/src/main/java/com/docus/server/collect/controller/PatientScanController.java @@ -0,0 +1,39 @@ +package com.docus.server.collect.controller; + +import com.docus.core.util.Func; +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.collect.dto.PatientScanConditionDTO; +import com.docus.server.collect.service.PatientScanService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 患者扫描控制层 + * + * @author wyb + */ +@Api("患者扫描控制") +@RestController +@RequestMapping("/gdszy/patscan") +public class PatientScanController { + @Resource + private PatientScanService patientScanService; + + + @PostMapping("/collect/byInpatientNoAndTimes") + @ApiOperation("根据住院号和住院次数,进行患者电子病历扫描数据采集!") + public CommonResult collectByInpatientNoAndTimes(@RequestBody List patientScanConditionDTOList) { + if (Func.isEmpty(patientScanConditionDTOList)) { + return CommonResult.failed("请输入正确的请求参数!"); + } + patientScanService.collectByInpatientNoAndTimes(patientScanConditionDTOList); + return CommonResult.success("采集成功!"); + } +} diff --git a/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java b/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java new file mode 100644 index 0000000..fbf8ac4 --- /dev/null +++ b/src/main/java/com/docus/server/collect/dto/PatientScanConditionDTO.java @@ -0,0 +1,23 @@ +package com.docus.server.collect.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 患者扫描条件 + * @author wyb + */ +@Data +@ApiModel("患者扫描条件传输对象") +public class PatientScanConditionDTO { + @ApiModelProperty("住院号") + @NotBlank(message = "住院号不能为空!") + private String inpatientNo; + + @ApiModelProperty("住院次数") + @NotBlank(message = "住院次数不能为空!") + private String admissTimes; +} diff --git a/src/main/java/com/docus/server/collect/entity/PatientScan.java b/src/main/java/com/docus/server/collect/entity/PatientScan.java new file mode 100644 index 0000000..13d840e --- /dev/null +++ b/src/main/java/com/docus/server/collect/entity/PatientScan.java @@ -0,0 +1,50 @@ +package com.docus.server.collect.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 患者扫描数据 - pat_sm 视图 + * @author wyb + */ +@ApiModel(value = "患者扫描数据", description = "患者扫描数据") +@Data +public class PatientScan implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "患者主键") + private String id; + + @ApiModelProperty(value = "住院号") + private String inpatientNo; + + @ApiModelProperty(value = "住院次数") + private String admissTimes; + + @ApiModelProperty(value = "病人姓名") + private String name; + + @ApiModelProperty(value = "出院日期") + private String disDate; + + @ApiModelProperty(value = "图像路径") + private String imagePath; + + @ApiModelProperty(value = "文件名") + private String fileName; + + @ApiModelProperty(value = "分段名称") + private String zdAssortName; + + @ApiModelProperty(value = "分类id") + private String zdAssortId; + + @ApiModelProperty(value = "扫描日期") + private String scanDate; + + @ApiModelProperty(value = "扫描盘号") + private String ph; +} diff --git a/src/main/java/com/docus/server/collect/infrastructure/mapper/CollectTaskMapper.java b/src/main/java/com/docus/server/collect/infrastructure/mapper/CollectTaskMapper.java new file mode 100644 index 0000000..8a634e6 --- /dev/null +++ b/src/main/java/com/docus/server/collect/infrastructure/mapper/CollectTaskMapper.java @@ -0,0 +1,12 @@ +package com.docus.server.collect.infrastructure.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author wyb + */ +@DS("archive-mysql") +@Mapper +public interface CollectTaskMapper { +} diff --git a/src/main/java/com/docus/server/collect/infrastructure/mapper/DownloadTaskMapper.java b/src/main/java/com/docus/server/collect/infrastructure/mapper/DownloadTaskMapper.java index f072adc..d2a1b42 100644 --- a/src/main/java/com/docus/server/collect/infrastructure/mapper/DownloadTaskMapper.java +++ b/src/main/java/com/docus/server/collect/infrastructure/mapper/DownloadTaskMapper.java @@ -1,5 +1,6 @@ package com.docus.server.collect.infrastructure.mapper; +import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.docus.server.collect.dto.TBasicQrDto; import com.docus.server.collect.entity.DownloadTask; @@ -9,6 +10,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; +@DS("archive-mysql") @Mapper public interface DownloadTaskMapper extends BaseMapper { /** diff --git a/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java b/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java new file mode 100644 index 0000000..f23aece --- /dev/null +++ b/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientBasicMapper.java @@ -0,0 +1,12 @@ +package com.docus.server.collect.infrastructure.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author wyb + */ +@DS("archive-mysql") +@Mapper +public interface PatientBasicMapper { +} diff --git a/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientScanMapper.java b/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientScanMapper.java new file mode 100644 index 0000000..1089bc5 --- /dev/null +++ b/src/main/java/com/docus/server/collect/infrastructure/mapper/PatientScanMapper.java @@ -0,0 +1,36 @@ +package com.docus.server.collect.infrastructure.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.collect.dto.PatientScanConditionDTO; +import com.docus.server.collect.entity.PatientScan; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 患者扫描数据mapper + * @author wyb + */ +@DS("scan-sqlserver") +@Mapper +public interface PatientScanMapper { + + /** + * 根据住院号和住院次数条件,查询扫描的文件数据 + * @param patientScanConditionDto 住院号和住院次数条件 + * @return 该患者的扫描病案 + */ + List getScanData(@Param("dto") PatientScanConditionDTO patientScanConditionDto); + + + /** + * 根据扫描时间,查询住院号和住院次数条件 + * @param scanStartTime 扫描时间开始时间 + * @param scanEndTime 扫描时间结束时间 + * @return 住院号和住院次数条件 + */ + List getScanPatientCondition(@Param("start")String scanStartTime,@Param("end") String scanEndTime); + + +} diff --git a/src/main/java/com/docus/server/collect/service/PatientScanService.java b/src/main/java/com/docus/server/collect/service/PatientScanService.java new file mode 100644 index 0000000..87b9a86 --- /dev/null +++ b/src/main/java/com/docus/server/collect/service/PatientScanService.java @@ -0,0 +1,23 @@ +package com.docus.server.collect.service; + +import com.docus.server.collect.dto.PatientScanConditionDTO; +import com.docus.server.collect.entity.PatientScan; + +import java.util.List; + +/** + * @author wyb + */ +public interface PatientScanService { + /** + * 根据患者住院号和住院次数采集-批量 + * @param patientScanConditionDTOList 患者扫描条件传输对象集合 + */ + void collectByInpatientNoAndTimes(List patientScanConditionDTOList); + + /** + * 根据患者住院号和住院次数采集-单个 + * @param patientScanConditionDto 患者扫描条件传输对象 + */ + List collectByInpatientNoAndTimes(PatientScanConditionDTO patientScanConditionDto); +} diff --git a/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java b/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java new file mode 100644 index 0000000..a9203d9 --- /dev/null +++ b/src/main/java/com/docus/server/collect/service/impl/PatientScanServiceImpl.java @@ -0,0 +1,59 @@ +package com.docus.server.collect.service.impl; + +import com.docus.server.collect.dto.PatientScanConditionDTO; +import com.docus.server.collect.entity.PatientScan; +import com.docus.server.collect.infrastructure.mapper.DownloadTaskMapper; +import com.docus.server.collect.infrastructure.mapper.PatientScanMapper; +import com.docus.server.collect.service.PatientScanService; +import groovy.util.logging.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * @author wyb + */ +@Service +@Slf4j +public class PatientScanServiceImpl implements PatientScanService { + @Resource + private PatientScanMapper patientScanMapper; + @Override + public void collectByInpatientNoAndTimes(List patientScanConditionDTOList) { + List distinctPatientScanConditionDTOList = distinctForInpatientNoAndTimes(patientScanConditionDTOList); + for (PatientScanConditionDTO patientScanConditionDTO : distinctPatientScanConditionDTOList) { + collectByInpatientNoAndTimes(patientScanConditionDTO); + } + } + + + @Override + public List collectByInpatientNoAndTimes(PatientScanConditionDTO patientScanConditionDto) { + return patientScanMapper.getScanData(patientScanConditionDto); + } + + /** + * 集合根据患者住院号和住院次数去重 + * + * @param patientScanConditionDTOList 带患者住院号和住院次数条件 + * @return 去重后的集合 + */ + private List distinctForInpatientNoAndTimes(List patientScanConditionDTOList) { + Map duplicateValidators = new HashMap<>(); + LinkedList list = new LinkedList<>(); + for (PatientScanConditionDTO dto : patientScanConditionDTOList) { + String key = dto.getInpatientNo() + "valid" + dto.getAdmissTimes(); + // 病案号和住院次数生成key,根据哈希map的特性,去重 + if (duplicateValidators.containsKey(key)) { + continue; + } + duplicateValidators.put(key, null); + list.add(dto); + } + return list; + } +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 01ceeb0..a39bb6d 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -4,27 +4,56 @@ spring: application: name: @artifactId@ datasource: - url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_archivefile?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai - username: docus - password: docus702 - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - type: com.alibaba.druid.pool.DruidDataSource - # 初始化配置 - initial-size: 3 - # 最小连接数 - min-idle: 3 - # 最大连接数 - max-active: 15 - # 获取连接超 时时间 - 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 + dynamic: + primary: archive-mysql + #是否用严格模式,如果启用在味匹配到指定数据源时抛出异常 + strict: false + datasource: + # 多数据源 + archive-mysql: + url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_archivefile?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + username: docus + password: docus702 + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + type: com.alibaba.druid.pool.DruidDataSource + # 初始化配置 + initial-size: 3 + # 最小连接数 + min-idle: 3 + # 最大连接数 + max-active: 15 + # 获取连接超 时时间 + 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 + scan-sqlserver: + url: jdbc:sqlserver://192.168.16.103\DOCUS;DatabaseName=zj_power + username: sa + password: docus702 + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + type: com.alibaba.druid.pool.DruidDataSource + # 初始化配置 + initial-size: 3 + # 最小连接数 + min-idle: 3 + # 最大连接数 + max-active: 15 + # 获取连接超 时时间 + 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 @@ -65,9 +94,9 @@ xxl: admin: addresses: http://job.docus.cn:8180/xxl-job-admin executor: - appname: docus-collect-gdszy + appname: docus-collect-gdszy-patient-scan address: ip: port: 19311 logretentiondays: 30 - logpath: D:/xxl-job/docus-collect-gdszy + logpath: D:/xxl-job/docus-collect-gdszy-patient-scan diff --git a/src/main/resources/mapper/PatientScanMapper.xml b/src/main/resources/mapper/PatientScanMapper.xml new file mode 100644 index 0000000..99ff6f8 --- /dev/null +++ b/src/main/resources/mapper/PatientScanMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml index 846a9a0..4c15ea5 100644 --- a/src/main/resources/mapper/TBasicMapper.xml +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -19,26 +19,26 @@