commit a83fc1c0963a9e992e156adc7bfad38286842932 Author: wyb <1977763549@qq.com> Date: Mon Jul 15 08:42:12 2024 +0800 init:初始化文件数据采集,顺德人医手麻采集开发 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a8a1e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +docus-services/docus-services-system1/ + +### IntelliJ IDEA ### +*.log +.idea +*.iws +*.iml +*.ipr +mvnw* +*.cmd +*.mvn +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ +logs* \ No newline at end of file diff --git a/assembly.xml b/assembly.xml new file mode 100644 index 0000000..b6fb827 --- /dev/null +++ b/assembly.xml @@ -0,0 +1,73 @@ + + + exe + + dir + + false + + + + + /lib + ${basedir}/target/lib + + + + /config + ${basedir}/target/resources + 0755 + + *.xml + *.yml + *.properties + + + + + /dataConfig + ${basedir}/target/dataConfig + 0755 + + *.json + + + + + / + ${basedir}/target/resources/bin + 0755 + + *.bat + + + + + / + ${basedir}/target/resources/bin + 0755 + + *.xml + + + + + / + ${basedir} + 0755 + + *.exe + + + + + ${basedir}/target + / + 0755 + + ${project.build.finalName}.jar + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f368e85 --- /dev/null +++ b/pom.xml @@ -0,0 +1,369 @@ + + + + com.docus + docus-bom + 1.0-SNAPSHOT + + 4.0.0 + + docus-collect-file-data + + + + com.docus + docus-knife4j-starter + + + + com.belerweb + pinyin4j + 2.5.1 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + checker-qual + org.checkerframework + + + error_prone_annotations + com.google.errorprone + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.baomidou + mybatis-plus-boot-starter + 3.4.0 + + + com.baomidou + dynamic-datasource-spring-boot-starter + 3.4.0 + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + HdrHistogram + org.hdrhistogram + + + jsr305 + com.google.code.findbugs + + + + + mysql + mysql-connector-java + 8.0.28 + + + org.projectlombok + lombok + 1.18.16 + compile + + + org.projectlombok + lombok + 1.18.16 + compile + + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4.1 + + + com.alibaba + druid + 1.2.4 + compile + + + com.baomidou + mybatis-plus-generator + 3.4.1 + compile + + + org.apache.velocity + velocity-engine-core + 2.0 + + + com.xuxueli + xxl-job-core + + + com.docus + docus-base-starter + + + knife4j-spring-boot-autoconfigure + com.github.xiaoymin + + + + + + com.docus + docus-tool-starter + + + + com.docus + docus-shiro-starter + + + + com.docus + docus-base-starter + + + springfox-core + io.springfox + + + springfox-schema + io.springfox + + + springfox-spi + io.springfox + + + knife4j-spring-boot-autoconfigure + com.github.xiaoymin + + + + + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + junit + junit + test + + + + + com.microsoft.sqlserver + sqljdbc4 + 4.0 + + + + + com.oracle + ojdbc6 + 11.2.0.4.0 + + + + + + org.apache.cxf + cxf-spring-boot-starter-jaxws + 3.3.4 + + + + org.dom4j + dom4j + 2.1.1 + + + + + + + src/main/resources + true + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.4.4 + + ZIP + + + non-exists + non-exists + + + + + + + repackage + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + + target/lib + false + false + runtime + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.2.0 + + + copy-resources + package + + copy-resources + + + + + src/main/resources + + **/*.* + + + + ${project.build.directory}/resources + + + + copy-bin + package + + copy-resources + + + + + src/main/resources + true + + bin/*.xml + *.yml + bin/*.bat + + + + ${project.build.directory}/resources + + + + copy-data-config + package + + copy-resources + + + + + ../../dataConfig + true + + + ${project.build.directory}/dataConfig + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + **/*.yml + + + + + + maven-assembly-plugin + + + + ${project.artifactId} + false + + assembly.xml + + + make-assembly + package + + single + + + + + + + + + + + dev + + prod + + + true + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/docus/server/AppRunBootstrap.java b/src/main/java/com/docus/server/AppRunBootstrap.java new file mode 100644 index 0000000..432cef6 --- /dev/null +++ b/src/main/java/com/docus/server/AppRunBootstrap.java @@ -0,0 +1,34 @@ +package com.docus.server; + + +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +import java.util.Properties; + + +/** + * @author wyb + */ +@Slf4j +@SpringBootApplication(scanBasePackages ={"com.docus"}) +@MapperScan("com.docus.server.**.mapper") +@EnableFeignClients(basePackages = {"com.docus"}) +public class AppRunBootstrap { + public static void main(String[] args) { + Properties props = System.getProperties(); + props.setProperty("org.apache.cxf.stax.allowInsecureParser", "1"); + props.setProperty("UseSunHttpHandler", "true"); + System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); + + SpringApplication.run(AppRunBootstrap.class, args); + } + + static void testMysql(){ + + + } +} diff --git a/src/main/java/com/docus/server/archive/dto/PatientInfoDto.java b/src/main/java/com/docus/server/archive/dto/PatientInfoDto.java new file mode 100644 index 0000000..8550f45 --- /dev/null +++ b/src/main/java/com/docus/server/archive/dto/PatientInfoDto.java @@ -0,0 +1,20 @@ +package com.docus.server.archive.dto; + +import lombok.Data; + +/** + * 患者信息 + * @author YongBin Wen + * @date 2024/7/12 14:52 + */ +@Data +public class PatientInfoDto { + /** + * (住院号) + */ + private String inpatientNo; + /** + * (住院次数) + */ + private Integer admissTimes; +} diff --git a/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java b/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java new file mode 100644 index 0000000..8105422 --- /dev/null +++ b/src/main/java/com/docus/server/archive/mapper/TBasicMapper.java @@ -0,0 +1,12 @@ +package com.docus.server.archive.mapper; + + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TBasicMapper { + + + + +} diff --git a/src/main/java/com/docus/server/config/DocusServerUrlConfig.java b/src/main/java/com/docus/server/config/DocusServerUrlConfig.java new file mode 100644 index 0000000..f6ee45e --- /dev/null +++ b/src/main/java/com/docus/server/config/DocusServerUrlConfig.java @@ -0,0 +1,22 @@ +package com.docus.server.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * @author YongBin Wen + * @date 2024/3/29 14:00 + */ +@Component +@Data +public class DocusServerUrlConfig { + @Value("${docus.url.viewcollect-server}") + private String viewCollectServerUrl; + + @Value("${docus.url.downploadlatform-server}") + private String downloadPlatformServerUrl; + + @Value("${docus.url.taskdistribute-server}") + private String taskDistributeServerUrl; +} diff --git a/src/main/java/com/docus/server/config/XxlJobConfig.java b/src/main/java/com/docus/server/config/XxlJobConfig.java new file mode 100644 index 0000000..18f3257 --- /dev/null +++ b/src/main/java/com/docus/server/config/XxlJobConfig.java @@ -0,0 +1,87 @@ +package com.docus.server.config; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @ProjectName: + * @Description: + * @Param 传输参数 + * @Return + * @Author: 曾文和 + * @CreateDate: 2021/5/7 16:23 + * @UpdateUser: 曾文和 + * @UpdateDate: 2021/5/7 16:23 + * @UpdateRemark: 更新说明 + * @Version: 1.0 + */ + + + +@Configuration +public class XxlJobConfig { + private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + + @Value("${xxl.job.executor.address}") + private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); + xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } + + /** + * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP; + * + * 1、引入依赖: + * + * org.springframework.cloud + * spring-cloud-commons + * ${version} + * + * + * 2、配置文件,或者容器启动变量 + * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.' + * + * 3、获取IP + * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + *//* + +*/ +} diff --git a/src/main/java/com/docus/server/rpc/DownPlatformService.java b/src/main/java/com/docus/server/rpc/DownPlatformService.java new file mode 100644 index 0000000..4c53ccf --- /dev/null +++ b/src/main/java/com/docus/server/rpc/DownPlatformService.java @@ -0,0 +1,23 @@ +package com.docus.server.rpc; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.rpc.dto.ReportDownDto; + + +/** + * 下载平台服务接口 + * + * @author jiashi + */ + +public interface DownPlatformService { + + + /** + * 下载服务文件上报 + * + * @param reportDownDto 下载服务上报参数 + * @return 结果 + */ + CommonResult report(ReportDownDto reportDownDto); +} diff --git a/src/main/java/com/docus/server/rpc/TaskDistributeService.java b/src/main/java/com/docus/server/rpc/TaskDistributeService.java new file mode 100644 index 0000000..774920a --- /dev/null +++ b/src/main/java/com/docus/server/rpc/TaskDistributeService.java @@ -0,0 +1,24 @@ +package com.docus.server.rpc; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.rpc.dto.ReportDownTwoDto; + +/** + * 无视图任务服务 + * + * @author wyb + */ + +public interface TaskDistributeService { + + + /** + * 无视图-根据采集器类型获取任务信息 + * + * @param collectorId 采集器类型 + * @return 任务信息 + */ + CommonResult getNoViewTaskByCollectorId(String collectorId); + + CommonResult cancel(Long taskId); +} diff --git a/src/main/java/com/docus/server/rpc/dto/PatientInfoDTO.java b/src/main/java/com/docus/server/rpc/dto/PatientInfoDTO.java new file mode 100644 index 0000000..abadec9 --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/PatientInfoDTO.java @@ -0,0 +1,37 @@ +package com.docus.server.rpc.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 患者基础信息 + * + * @author WYBDEV + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +@ApiModel(value = "患者信息") +public class PatientInfoDTO { + @ApiModelProperty(value = "病案主键") + private String patientId; + @ApiModelProperty(value = "住院号") + private String inpatientNo; + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + @ApiModelProperty(value = "入院日期 yyyy-MM-dd HH:mm:ss") + private String admissDate; + @ApiModelProperty(value = "入院科室名称") + private String admissDeptName; + @ApiModelProperty(value = "出院日期 yyyy-MM-dd HH:mm:ss") + private String disDate; + @ApiModelProperty(value = "出院科室名称") + private String disDeptName; + @ApiModelProperty(value = "记账号") + private String jzh; + @ApiModelProperty(value = "姓名") + private String name; + @ApiModelProperty(value = "住院id") + private String admissId; +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportDownDto.java b/src/main/java/com/docus/server/rpc/dto/ReportDownDto.java new file mode 100644 index 0000000..c06a089 --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportDownDto.java @@ -0,0 +1,30 @@ +package com.docus.server.rpc.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ReportDownDto { + @ApiModelProperty(value = "采集器id") + private String collectorid; + + @ApiModelProperty(value = "采集器ip") + private String ip; + + @ApiModelProperty(value = "分类id") + private String assortid; + + @ApiModelProperty(value = "患者信息") + private ReportDownPatientDto patient; + + @ApiModelProperty(value = "文件信息") + private List scanfiles; + + @ApiModelProperty(value = "扫描用户代码") + private String scanusercode; + @ApiModelProperty(value = "扫描用户名称") + private String scanusername; +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/rpc/dto/ReportDownPatientDto.java b/src/main/java/com/docus/server/rpc/dto/ReportDownPatientDto.java new file mode 100644 index 0000000..23fb86d --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportDownPatientDto.java @@ -0,0 +1,19 @@ +package com.docus.server.rpc.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ReportDownPatientDto { + @ApiModelProperty(value = "记帐号") + private String jzh; + @ApiModelProperty(value = "住院次数,记帐号重复则加这个参数,无则Null") + private Integer admisstimes; + @ApiModelProperty(value = "病案主键,如有传则使用,无则使用jzh") + private String patientid; + @ApiModelProperty(value = "病案号") + private String inpatientno; + + @ApiModelProperty(value = "物理存储位置,有则传") + private String storagelocation; +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportDownScanFileDto.java b/src/main/java/com/docus/server/rpc/dto/ReportDownScanFileDto.java new file mode 100644 index 0000000..ef6127c --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportDownScanFileDto.java @@ -0,0 +1,32 @@ +package com.docus.server.rpc.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ReportDownScanFileDto { + @ApiModelProperty(value = "任务id(如无效任务id,则不更新任务表数据)") + private Long taskid; + @ApiModelProperty(value = "文件标题") + private String filetitle; + @ApiModelProperty(value = "采集类型(文件来源 1:采集器;2:扫描生产软件)") + private int filesource; + @ApiModelProperty(value = "下载类型(1:服务器本地;2:ftp服务器;3:共享文件夹)") + private int filestoragetype; + @ApiModelProperty(value = "文件类型(1:url,2:base64,3:url base64,4:共享文件,5:本地文件base64)") + private int filetype=1; + @ApiModelProperty(value = "下载地址") + private String downurl; + // @ApiModelProperty(value = "档案信息") +// private String recordid; + @ApiModelProperty(value = "采集流水号") + private String serialnum; + + @ApiModelProperty(value = "排序日期") + private String sortdate; + + @ApiModelProperty(value = "是否作废 : 0:否 不作废,1:是 作废") + private int cancel=0; + + +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportDownTwoDto.java b/src/main/java/com/docus/server/rpc/dto/ReportDownTwoDto.java new file mode 100644 index 0000000..25a2d9f --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportDownTwoDto.java @@ -0,0 +1,29 @@ +package com.docus.server.rpc.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ReportDownTwoDto { + @ApiModelProperty(value = "档案编号") + private String patientId; + @ApiModelProperty(value = "记账号") + private String jzh; + @ApiModelProperty(value = "档案类型") + private String recordType; + @ApiModelProperty(value = "档案时间") + private String createTime; + @ApiModelProperty(value = "患者信息") + private ReportPatientTwoDto patient =new ReportPatientTwoDto(); + @ApiModelProperty(value = "住院信息") + private List hospitals = new ArrayList<>(); + @ApiModelProperty(value = "任务信息") + private List tasks = new ArrayList<>(); + @ApiModelProperty(value = "母亲基础信息") + private PatientInfoDTO parent; +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportDto.java b/src/main/java/com/docus/server/rpc/dto/ReportDto.java new file mode 100644 index 0000000..ca1408a --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportDto.java @@ -0,0 +1,97 @@ +package com.docus.server.rpc.dto; + + +import lombok.Data; + +/** + * 报告推送信息 + */ +@Data +public class ReportDto { + /** + * 住院号 + */ + private String inpatientNo; + /** + * 记账号/住院流水号 + */ + private String jzh; + /** + * 住院次数 + */ + private Integer admisstimes; + /** + * 采集来源系统 + */ + private String sysFlag; + /** + * 下载地址 + */ + private String downUrl; + /** + * 文件名 + */ + private String fileTitle; + /** + * 采集流水号/文件唯一id + */ + private String serialnum; + + /** + * 文件分类id + */ + private String assortId; + + /** + * 采集类型(文件来源 1:采集器;2:扫描生产软件) + */ + private String fileSource; + + /** + * 文件保存位置类型 1:服务器本地;2:ftp服务器;3:共享文件夹 + */ + private String filestoragetype; + + /** + * 下载对应任务id ,接收处理 + */ + private Long taskId; + + /** + * 业务病案主键 + */ + private String patientId; + + /** + * 下载路径类型 1:url,2:base64,3:url base64,4:共享文件,5:本地文件base64 + */ + private Integer downtype = 1; + + /** + * 患者本次就诊唯一键:患者id【12位】+就诊次 + * 数 + */ + private String visitSn; + + /** + * 患者id + */ + private String patientSn; + + + /** + * 检查报告单号,用于顺德人医推送 报告信息和报告地址的关联 + */ + private String reportSn; + + /** + * 如果多次上传是否合并文件标题 + */ + private boolean mergeFileTitle; + + + + public ReportDto() { + } + +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportHospitalTwoDto.java b/src/main/java/com/docus/server/rpc/dto/ReportHospitalTwoDto.java new file mode 100644 index 0000000..428cb17 --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportHospitalTwoDto.java @@ -0,0 +1,27 @@ +package com.docus.server.rpc.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * + */ +@Data +public class ReportHospitalTwoDto { + + @ApiModelProperty(value = "患者id") + private String patientId; + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + @ApiModelProperty(value = "住院日期") + private String admissDate; + @ApiModelProperty(value = "出院日期") + private String disDate; + @ApiModelProperty(value = "出院科室名称") + private String disDeptName; + @ApiModelProperty(value = "出院科室名称") + private String admissDeptName; + @ApiModelProperty(value = "卡号") + private String admissId; +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportPatientTwoDto.java b/src/main/java/com/docus/server/rpc/dto/ReportPatientTwoDto.java new file mode 100644 index 0000000..3a87906 --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportPatientTwoDto.java @@ -0,0 +1,18 @@ +package com.docus.server.rpc.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 上报打印 患者信息 + */ +@Data +public class ReportPatientTwoDto { + + @ApiModelProperty(value = "住院号/就诊号") + private String inpatientNo; + @ApiModelProperty(value = "患者姓名") + private String name; + @ApiModelProperty(value = "id号") + private String patientId; +} diff --git a/src/main/java/com/docus/server/rpc/dto/ReportTaskTwoDto.java b/src/main/java/com/docus/server/rpc/dto/ReportTaskTwoDto.java new file mode 100644 index 0000000..6a36cab --- /dev/null +++ b/src/main/java/com/docus/server/rpc/dto/ReportTaskTwoDto.java @@ -0,0 +1,19 @@ +package com.docus.server.rpc.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * + */ +@Data +public class ReportTaskTwoDto { + @ApiModelProperty(value = "采集器标识") + private String collectorId; + @ApiModelProperty(value = "任务id") + private Long taskId; + @ApiModelProperty(value = "患者id") + private String patientId; + +} diff --git a/src/main/java/com/docus/server/rpc/impl/DownPlatformServiceImpl.java b/src/main/java/com/docus/server/rpc/impl/DownPlatformServiceImpl.java new file mode 100644 index 0000000..1082271 --- /dev/null +++ b/src/main/java/com/docus/server/rpc/impl/DownPlatformServiceImpl.java @@ -0,0 +1,51 @@ +package com.docus.server.rpc.impl; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.docus.core.util.Func; +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.config.DocusServerUrlConfig; +import com.docus.server.rpc.DownPlatformService; +import com.docus.server.rpc.dto.ReportDownDto; +import com.docus.server.rpc.dto.ReportDownScanFileDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 下载平台服务接口 + * + * @author jiashi + */ +@Component +@Slf4j +public class DownPlatformServiceImpl implements DownPlatformService { + + @Resource + private DocusServerUrlConfig serverUrlConfig; + + @Override + public CommonResult report(ReportDownDto reportDownDto) { + String downUrl = serverUrlConfig.getDownloadPlatformServerUrl() + "api/downplatform/report"; + String requestId = Func.randomUUID(); + String requestParam = Func.toJson(reportDownDto); + ReportDownScanFileDto report = reportDownDto.getScanfiles().get(0); + log.info("[{}]调用下载服务,地址:{} ,参数:taskid={}", requestId, downUrl, report.getTaskid()); + String respBody = post(downUrl, requestParam); + log.info("[{}]调用下载服务成功,响应参数:{}", requestId, respBody); + return Func.readJson(respBody, CommonResult.class); + } + + public String post(String url, String body) { + HttpRequest post = HttpUtil.createPost(url); + post.setConnectionTimeout(5 * 1000); + post.setReadTimeout(60 * 1000); + post.header("Content-Type", "application/json; charset=utf-8"); + post.body(body); + HttpResponse response = post.execute(); + return response.body(); + + } +} diff --git a/src/main/java/com/docus/server/rpc/impl/TaskDistributeServiceImpl.java b/src/main/java/com/docus/server/rpc/impl/TaskDistributeServiceImpl.java new file mode 100644 index 0000000..c105ddb --- /dev/null +++ b/src/main/java/com/docus/server/rpc/impl/TaskDistributeServiceImpl.java @@ -0,0 +1,48 @@ +package com.docus.server.rpc.impl; + +import cn.hutool.http.HttpUtil; +import com.docus.core.util.Func; +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.config.DocusServerUrlConfig; +import com.docus.server.rpc.TaskDistributeService; +import com.docus.server.rpc.dto.ReportDownTwoDto; +import com.fasterxml.jackson.core.type.TypeReference; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * 无视图任务服务 + * + * @author wyb + */ +@Component +@Slf4j +public class TaskDistributeServiceImpl implements TaskDistributeService { + @Resource + private DocusServerUrlConfig serverUrlConfig; + + @Override + public CommonResult getNoViewTaskByCollectorId(String collectorId) { + String getTaskUrl = serverUrlConfig.getTaskDistributeServerUrl() + "api/noviewtask/GetTask?collectid=" + collectorId; + String result = HttpUtil.get(getTaskUrl); + return Func.readJson(result, new TypeReference>() { + }); + } + + + @Override + public CommonResult cancel(Long taskId) { + String taskCancelUrl = serverUrlConfig.getTaskDistributeServerUrl() + "api/collector/task/cancel"; + Map param = new HashMap<>(1); + param.put("taskId", taskId); + log.info("任务作废 地址{},参数:{}", taskCancelUrl, param); + String resp = HttpUtil.post(taskCancelUrl, Func.toJson(param)); + log.info("任务作废结果:{}", resp); + return Func.readJson(resp, new TypeReference>() { + }); + } +} diff --git a/src/main/java/com/docus/server/sdry/collector/CollectResult.java b/src/main/java/com/docus/server/sdry/collector/CollectResult.java new file mode 100644 index 0000000..23499ce --- /dev/null +++ b/src/main/java/com/docus/server/sdry/collector/CollectResult.java @@ -0,0 +1,9 @@ +package com.docus.server.sdry.collector; + +/** + * @author YongBin Wen + * @date 2024/7/12 14:26 + */ +public class CollectResult { + +} diff --git a/src/main/java/com/docus/server/sdry/collector/Collector.java b/src/main/java/com/docus/server/sdry/collector/Collector.java new file mode 100644 index 0000000..bbc5499 --- /dev/null +++ b/src/main/java/com/docus/server/sdry/collector/Collector.java @@ -0,0 +1,17 @@ +package com.docus.server.sdry.collector; + +import java.util.List; + +/** + * 采集器 + * @author YongBin Wen + * @date 2024/7/12 14:23 + */ +public interface Collector { + /** + * 采集 + * @return 返回采集结果 + */ + List collect(); + +} diff --git a/src/main/java/com/docus/server/sdry/collector/ShouMaCollectResult.java b/src/main/java/com/docus/server/sdry/collector/ShouMaCollectResult.java new file mode 100644 index 0000000..d3d4c1c --- /dev/null +++ b/src/main/java/com/docus/server/sdry/collector/ShouMaCollectResult.java @@ -0,0 +1,38 @@ +package com.docus.server.sdry.collector; + +import lombok.Data; + +import java.util.Date; + +/** + * @author YongBin Wen + * @date 2024/7/12 14:26 + */ +@Data +public class ShouMaCollectResult extends CollectResult { + /** + * (文件唯一值) + */ + private String fileNo; + /** + * (住院号) + */ + private String inpatientNo; + /** + * (住院次数) + */ + private Integer admissTimes; + /** + * (报告名称) + */ + private String fileTitle; + /** + * (报告地址http) + */ + private String filePath; + /** + * (报告最后修改时间) + */ + private Date updateTime; + +} diff --git a/src/main/java/com/docus/server/sdry/collector/ShouMaCollector.java b/src/main/java/com/docus/server/sdry/collector/ShouMaCollector.java new file mode 100644 index 0000000..ca428d5 --- /dev/null +++ b/src/main/java/com/docus/server/sdry/collector/ShouMaCollector.java @@ -0,0 +1,53 @@ +package com.docus.server.sdry.collector; + +import cn.hutool.core.util.StrUtil; +import com.docus.core.util.Func; +import com.docus.infrastructure.core.exception.BaseException; +import com.docus.server.archive.dto.PatientInfoDto; +import com.docus.server.sdry.converter.ShouMaConverter; +import com.docus.server.sdry.entity.ShouMaView; +import com.docus.server.sdry.mapper.ShouMaViewMapper; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author YongBin Wen + * @date 2024/7/12 14:26 + */ +public class ShouMaCollector implements Collector { + /** + * 访问数据库视图mapper + */ + private final ShouMaViewMapper shouMaViewMapper; + + /** + * 患者基础信息 + */ + private final PatientInfoDto patientInfoDto; + + /** + * 访问数据库附加的额外条件 + */ + private final String extraCondition; + + + public ShouMaCollector(ShouMaViewMapper shouMaViewMapper, PatientInfoDto patientInfoDto, String extraCondition) { + if (StrUtil.isBlank(patientInfoDto.getInpatientNo())) { + throw new BaseException("患者基础信息病案号不能为空!"); + } + if (Func.isEmpty(patientInfoDto.getAdmissTimes())) { + throw new BaseException("患者基础信息住院次数不能为空!"); + } + this.shouMaViewMapper = shouMaViewMapper; + this.patientInfoDto = patientInfoDto; + this.extraCondition = extraCondition; + } + + + @Override + public List collect() { + List patientShouMaViewDataList = shouMaViewMapper.getPatientShouMaView(patientInfoDto, extraCondition); + return patientShouMaViewDataList.stream().map(ShouMaConverter::convertResult).collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/docus/server/sdry/converter/ShouMaConverter.java b/src/main/java/com/docus/server/sdry/converter/ShouMaConverter.java new file mode 100644 index 0000000..095f5fc --- /dev/null +++ b/src/main/java/com/docus/server/sdry/converter/ShouMaConverter.java @@ -0,0 +1,24 @@ +package com.docus.server.sdry.converter; + +import com.docus.server.sdry.collector.ShouMaCollectResult; +import com.docus.server.sdry.entity.ShouMaView; + +/** + * @author YongBin Wen + * @date 2024/7/12 15:00 + */ +public class ShouMaConverter { + public static ShouMaCollectResult convertResult(ShouMaView shouMaView) { + if (shouMaView == null) { + return null; + } + ShouMaCollectResult result = new ShouMaCollectResult(); + result.setFileNo(shouMaView.getFID()); + result.setInpatientNo(shouMaView.getFBIHID()); + result.setAdmissTimes(shouMaView.getFBINCU()); + result.setFileTitle(shouMaView.getPDESC()); + result.setFilePath(shouMaView.getPDFPATH()); + result.setUpdateTime(shouMaView.getFUPDATE()); + return result; + } +} diff --git a/src/main/java/com/docus/server/sdry/entity/ShouMaView.java b/src/main/java/com/docus/server/sdry/entity/ShouMaView.java new file mode 100644 index 0000000..b62f57b --- /dev/null +++ b/src/main/java/com/docus/server/sdry/entity/ShouMaView.java @@ -0,0 +1,40 @@ +package com.docus.server.sdry.entity; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.util.Date; + +/** + * @author YongBin Wen + * @date 2024/7/12 14:38 + */ +@Data +@ApiModel("顺德人医提供的手麻视图数据") +public class ShouMaView { + /** + * (文件唯一值) + */ + private String FID; + /** + * (住院号) + */ + private String FBIHID; + /** + * (住院次数) + */ + private Integer FBINCU; + /** + * (报告名称) + */ + private String PDESC; + /** + * (报告地址http) + */ + private String PDFPATH; + /** + * (报告最后修改时间) + */ + private Date FUPDATE; + +} diff --git a/src/main/java/com/docus/server/sdry/job/CollectJob.java b/src/main/java/com/docus/server/sdry/job/CollectJob.java new file mode 100644 index 0000000..3a0a05d --- /dev/null +++ b/src/main/java/com/docus/server/sdry/job/CollectJob.java @@ -0,0 +1,98 @@ +package com.docus.server.sdry.job; + +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.dto.PatientInfoDto; +import com.docus.server.archive.mapper.TBasicMapper; +import com.docus.server.rpc.DownPlatformService; +import com.docus.server.rpc.TaskDistributeService; +import com.docus.server.rpc.dto.*; +import com.docus.server.sdry.collector.ShouMaCollectResult; +import com.docus.server.sdry.collector.ShouMaCollector; +import com.docus.server.sdry.mapper.ShouMaViewMapper; +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.util.Collections; +import java.util.List; + +/** + * @author YongBin Wen + * @date 2024/7/12 15:22 + */ +@Component +@Slf4j +public class CollectJob { + @Autowired + private DownPlatformService downPlatformService; + @Autowired + private TaskDistributeService taskDistributeService; + @Autowired + private TBasicMapper tBasicMapper; + @Autowired + private ShouMaViewMapper shouMaViewMapper; + + @XxlJob("Sdry-ShouMa-Collect") + public void shouMaCollect() { + 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)); + + ReportHospitalTwoDto hospitalTwoDto = downTwoDto.getHospitals().get(0); + ReportPatientTwoDto reportPatientTwoDto = downTwoDto.getPatient(); + PatientInfoDto patientInfoDto = new PatientInfoDto(); + patientInfoDto.setInpatientNo(reportPatientTwoDto.getInpatientNo()); + patientInfoDto.setAdmissTimes(hospitalTwoDto.getAdmissTimes()); + ShouMaCollector shouMaCollector = new ShouMaCollector(shouMaViewMapper, patientInfoDto, extraCondition); + List shouMaCollectResultList = shouMaCollector.collect(); + int size = shouMaCollectResultList.size(); + log.info("住院号:{},住院次数:{} 采集手麻数据:{} 条!", patientInfoDto.getInpatientNo(), patientInfoDto.getAdmissTimes(), size); + if (size <= 0) { + return; + } + ReportDownPatientDto patient = new ReportDownPatientDto(); + patient.setPatientid(downTwoDto.getPatientId()); + + ReportDownDto reportDownDto = new ReportDownDto(); + reportDownDto.setAssortid(assortId); + reportDownDto.setCollectorid(collectorId); + reportDownDto.setIp(""); + reportDownDto.setPatient(patient); + + for (ShouMaCollectResult result : shouMaCollectResultList) { + ReportDownScanFileDto reportDownScanFileDto = new ReportDownScanFileDto(); + reportDownScanFileDto.setDownurl(result.getFilePath()); + reportDownScanFileDto.setFiletitle(result.getFileTitle()); + reportDownScanFileDto.setSerialnum(result.getFileNo()); + 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(">>>>>>>>>>>>>>>>>>>>>> 顺德人医手麻视图采集任务结束!"); + } + +} diff --git a/src/main/java/com/docus/server/sdry/mapper/ShouMaViewMapper.java b/src/main/java/com/docus/server/sdry/mapper/ShouMaViewMapper.java new file mode 100644 index 0000000..e965695 --- /dev/null +++ b/src/main/java/com/docus/server/sdry/mapper/ShouMaViewMapper.java @@ -0,0 +1,26 @@ +package com.docus.server.sdry.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.archive.dto.PatientInfoDto; +import com.docus.server.sdry.entity.ShouMaView; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author YongBin Wen + * @date 2024/7/12 14:37 + */ +@DS("shouMa") +@Mapper +public interface ShouMaViewMapper { + /** + * 根据患者信息获取手麻视图的数据 + * + * @param patientInfoDto 患者信息 + * @param extraCondition 额外的sql条件 + * @return 手麻视图数据 + */ + List getPatientShouMaView(@Param("patient") PatientInfoDto patientInfoDto, @Param("ext") String extraCondition); +} diff --git a/src/main/resources/bin/install.bat b/src/main/resources/bin/install.bat new file mode 100644 index 0000000..7a651bc --- /dev/null +++ b/src/main/resources/bin/install.bat @@ -0,0 +1,33 @@ +@echo off + +for /f "delims=" %%t in ('winsw.exe status') do set str=%%t +echo %str% + + + +if %str%==Started ( +echo "restart....." +winsw stop +PING 127.0.0.1 -n 10 -w 30000 >NUL +winsw start +) + + + +if %str%==Stopped ( +echo "start....." +winsw start +) + + +if %str%==NonExistent ( +echo "deploy and start....." +winsw install +winsw start +echo c +) + + + + + diff --git a/src/main/resources/bin/start.bat b/src/main/resources/bin/start.bat new file mode 100644 index 0000000..58c25cb --- /dev/null +++ b/src/main/resources/bin/start.bat @@ -0,0 +1,21 @@ +set java_opts=-Xms512m -Xmx512m +set key="java_opts" + + +rem 文件不存在,就跳过 +if not exist java-ops.ini goto end + +for /f "tokens=1,2 delims==" %%i in (java-ops.ini) do ( + if "%%i"==%key% set java_opts=%%j) +echo java_opts is : %java_opts% + +:end + +rem 启动java + +java %java_opts% -Dfile.encoding=utf-8 -jar -Dspring.profiles.active=@profile.name@ -Dloader.path=config,lib @project.build.finalName@.jar + + + + + diff --git a/src/main/resources/bin/stop.bat b/src/main/resources/bin/stop.bat new file mode 100644 index 0000000..98468a0 --- /dev/null +++ b/src/main/resources/bin/stop.bat @@ -0,0 +1,13 @@ +@echo off + +for /f "delims=" %%t in ('winsw.exe status') do set str=%%t +echo %str% + + + +if %str%==Started ( +winsw stop +@echo wait program stop ..... +PING 127.0.0.1 -n 30 -w 10000 >NUL +) + diff --git a/src/main/resources/bin/update.bat b/src/main/resources/bin/update.bat new file mode 100644 index 0000000..0d025de --- /dev/null +++ b/src/main/resources/bin/update.bat @@ -0,0 +1,19 @@ +@echo off + +set deployDir=%1\docus-collect-file-data +if %deployDir%=="" set deployDir=d:\webroot\docus-collect-file-data + +set curr_file=%cd% +cd /d %deployDir% +call stop.bat +cd %curr_file% +sc query docus-backup-sys |Find "RUNNING" && ping 127.0.0.1 -n 10 >nul +rd/s/q %deployDir%\lib +rd/s/q %deployDir%\dataConfig +rd/s/q %deployDir%\config +del /s/q %deployDir%\*.jar +xcopy /Y/E/I * %deployDir% + +cd /d %deployDir% +call install.bat + diff --git a/src/main/resources/bin/winsw.xml b/src/main/resources/bin/winsw.xml new file mode 100644 index 0000000..931a6bf --- /dev/null +++ b/src/main/resources/bin/winsw.xml @@ -0,0 +1,8 @@ + + docus-collect-file-data + 生产-嘉时-文件数据采集服务 + 生产-嘉时-文件数据采集服务 + Automatic + %BASE%\start.bat + + \ No newline at end of file diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..b06aa7f --- /dev/null +++ b/src/main/resources/bootstrap.yml @@ -0,0 +1,111 @@ +server: + port: 9010 + +spring: + application: + name: @artifactId@ + profiles: + active: prod + datasource: + dynamic: + primary: master #设置默认的数据源,默认值为master + strict: false #是否用严格模式,如果启用在味匹配到指定数据源时抛出异常 + datasource: + master: + url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_medicalrecord?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 + shouMa: + url: jdbc:log4jdbc:mysql://192.168.8.108:3306/lancet-aims?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + username: wzh + password: wzh + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + 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 from dual + redis: + host: redis.docus.cn + password: JSdocus@702 + cloud: + nacos: + discovery: + server-addr: nacos.docus.cn + namespace: 34acdf7a-9fc6-4bbd-8aea-9a47c8007ad5 + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: 34acdf7a-9fc6-4bbd-8aea-9a47c8007ad5 + file-extension: yml + shared-configs: + - comm.${spring.cloud.nacos.config.file-extension} + + + +docus: + sync-service-prefix: ZqDyRy + default-user-pwd: fd29cd53ec12616e5f36b77d4afffbff + url: + # 采集任务补偿地址 + viewcollect-server: http://localhost:9295/ + # 报告上报地址 + downploadlatform-server: http://localhost:9291/ + # 获取无视图模式采集任务地址 + taskdistribute-server: http://localhost:9296/ + + + dbtype: mysql + +mybatis-plus: + configuration: + map-underscore-to-camel-case: true + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + field-strategy: NOT_EMPTY + db-type: MYSQL +xxl: + job: + accessToken: + admin: + addresses: http://job.docus.cn:8180/xxl-job-admin + executor: + appname: docus-collect-file-data + address: + ip: + port: 19000 + logretentiondays: 30 + logpath: D:/xxl-job/docus-collect-file-data + + diff --git a/src/main/resources/log4jdbc.log4j2.properties b/src/main/resources/log4jdbc.log4j2.properties new file mode 100644 index 0000000..5cb6f99 --- /dev/null +++ b/src/main/resources/log4jdbc.log4j2.properties @@ -0,0 +1,2 @@ +# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger +log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator \ No newline at end of file diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..cb9e887 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,77 @@ + + + docus-collect-file-data + + + + + [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%contextName] [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n + + + + + + + [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%X{traceId}] [%L] [%-5p] %m%n + utf-8 + + + + + ${log.path}%d.%i.log + + 500MB + + 30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ShouMaViewMapper.xml b/src/main/resources/mapper/ShouMaViewMapper.xml new file mode 100644 index 0000000..81e4c2e --- /dev/null +++ b/src/main/resources/mapper/ShouMaViewMapper.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml new file mode 100644 index 0000000..8b84532 --- /dev/null +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/winsw.exe b/winsw.exe new file mode 100644 index 0000000..ba27e3f Binary files /dev/null and b/winsw.exe differ diff --git a/开发日志.md b/开发日志.md new file mode 100644 index 0000000..4b1ee63 --- /dev/null +++ b/开发日志.md @@ -0,0 +1,2 @@ +##2024-7-12 16:07:51 顺德人医开发手麻采集器视图采集 +#### 调度采用XXL-JOB,Sdry-ShouMa-Collect,配置参数有采集器类型(collectorId),文件分段(assortId)和额外的sql条件and开头(extraCondition)`{"assortId":"RC0ZZ3WI3FTMLNM7BWNXGN6D1KWNR6W1","collectorId":"5","extraCondition":" AND PDESC!='麻醉小结' AND PDESC!='手术器械清点单' AND PDESC!='麻醉知情同意书' AND PDESC!='手术安全核查单' AND PDESC!='复苏后交接记录' "}` \ No newline at end of file