扫描同步-未完成-临时

collector-patient-scan
wyb 2 years ago
parent c7b0562826
commit 2f040453ee

@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>docus-webservice-gdszy</artifactId>
<artifactId>docus-collect-gdszy-patient-scan</artifactId>
<dependencies>
<dependency>
@ -47,10 +47,7 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.docus</groupId>
<artifactId>docus-mybatisplus-starter</artifactId>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
@ -99,6 +96,17 @@
<version>3.4.1</version>
<scope>compile</scope>
</dependency>
<!--mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
@ -173,7 +181,12 @@
<scope>test</scope>
</dependency>
<!--sqlserver驱动-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
<build>
<resources>

@ -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<String> collectByInpatientNoAndTimes(@RequestBody List<PatientScanConditionDTO> patientScanConditionDTOList) {
if (Func.isEmpty(patientScanConditionDTOList)) {
return CommonResult.failed("请输入正确的请求参数!");
}
patientScanService.collectByInpatientNoAndTimes(patientScanConditionDTOList);
return CommonResult.success("采集成功!");
}
}

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

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

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

@ -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<DownloadTask> {
/**

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

@ -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<PatientScan> getScanData(@Param("dto") PatientScanConditionDTO patientScanConditionDto);
/**
*
* @param scanStartTime
* @param scanEndTime
* @return
*/
List<PatientScanConditionDTO> getScanPatientCondition(@Param("start")String scanStartTime,@Param("end") String scanEndTime);
}

@ -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<PatientScanConditionDTO> patientScanConditionDTOList);
/**
* -
* @param patientScanConditionDto
*/
List<PatientScan> collectByInpatientNoAndTimes(PatientScanConditionDTO patientScanConditionDto);
}

@ -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<PatientScanConditionDTO> patientScanConditionDTOList) {
List<PatientScanConditionDTO> distinctPatientScanConditionDTOList = distinctForInpatientNoAndTimes(patientScanConditionDTOList);
for (PatientScanConditionDTO patientScanConditionDTO : distinctPatientScanConditionDTOList) {
collectByInpatientNoAndTimes(patientScanConditionDTO);
}
}
@Override
public List<PatientScan> collectByInpatientNoAndTimes(PatientScanConditionDTO patientScanConditionDto) {
return patientScanMapper.getScanData(patientScanConditionDto);
}
/**
*
*
* @param patientScanConditionDTOList
* @return
*/
private List<PatientScanConditionDTO> distinctForInpatientNoAndTimes(List<PatientScanConditionDTO> patientScanConditionDTOList) {
Map<String, String> duplicateValidators = new HashMap<>();
LinkedList<PatientScanConditionDTO> 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;
}
}

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

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docus.server.collect.infrastructure.mapper.PatientScanMapper">
<select id="getScanData" resultType="com.docus.server.collect.entity.PatientScan">
select
主键 as id,
住院号 as inpatientNo,
次数 as admissTimes,
病人姓名 as name,
出院日期 as disDate,
图像路径 as imagePath,
文件名 as fileName,
分段名称 as zdAssortName,
分类id as zdAssortId,
扫描日期 as scanDate,
扫描盘号 as ph
from pat_sm
where
住院号=#{dto.inpatientNo}
and 次数=#{dto.admissTimes}
and 扫描盘号 like 'G%'
</select>
<select id="getScanPatientCondition" resultType="com.docus.server.collect.dto.PatientScanConditionDTO">
select 住院号 as inpatientNo,
次数 as admissTimes
from pat_sm
where 扫描日期 between #{start} and #{end}
and 扫描盘号 like 'G%'
group by 住院号, 次数
</select>
</mapper>

@ -19,26 +19,26 @@
<select id="getBasicInfo" resultType="com.docus.server.collect.entity.TBasic">
select
<include refid="basicInfoColumns"></include>
<include refid="basicInfoColumns"></include>
FROM
`docus_medicalrecord`.`t_basic`
`docus_medicalrecord`.`t_basic`
WHERE
is_cancel=0
<if test="basic.patientId != null and basic.patientId != ''">
and `patient_id` = #{basic.patientId}
</if>
<if test="basic.jzh != null and basic.jzh != ''">
and `jzh` = #{basic.jzh}
</if>
<if test="basic.empId != null and basic.empId != ''">
and `emp_id` = #{basic.empId}
</if>
<if test="basic.inpatientNo != null and basic.inpatientNo != ''">
and `inpatient_no` = #{basic.inpatientNo}
</if>
<if test="basic.admisstimes != null">
and `admiss_times` = #{basic.admissTimes}
</if>
is_cancel=0
<if test="basic.patientId != null and basic.patientId != ''">
and `patient_id` = #{basic.patientId}
</if>
<if test="basic.jzh != null and basic.jzh != ''">
and `jzh` = #{basic.jzh}
</if>
<if test="basic.empId != null and basic.empId != ''">
and `emp_id` = #{basic.empId}
</if>
<if test="basic.inpatientNo != null and basic.inpatientNo != ''">
and `inpatient_no` = #{basic.inpatientNo}
</if>
<if test="basic.admisstimes != null">
and `admiss_times` = #{basic.admissTimes}
</if>
limit 2
</select>

Loading…
Cancel
Save