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 @@