diff --git a/.gitignore b/.gitignore
index 84adb3f..c7759d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-# ---> Java
# Compiled class file
*.class
@@ -19,7 +18,18 @@
*.zip
*.tar.gz
*.rar
+*.iml
+# 直接在这里添加即可,注意加上备注,好知道是忽略什么文件 #
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-
+##############################
+## Folders ##
+##############################
+target
+out
+log
+configLog
+.idea
+.project
+**/.mvn
+**/mvnw
+**/mvnw.cmd
\ No newline at end of file
diff --git a/dataConfig/homeQualitySet.json b/dataConfig/homeQualitySet.json
new file mode 100644
index 0000000..f0499ba
--- /dev/null
+++ b/dataConfig/homeQualitySet.json
@@ -0,0 +1,27 @@
+{
+ //唯一键目录结构数组,最高层为前面,最后一层为数据采集层,根节点不填
+ "directory":["DOCUMENT"],
+ //患者主索引号
+ "indexFlag":"VISITING_SERIAL_NUMBER",
+ //采集流水号
+ "serialnum":"UNIQUE_ID",
+ //文件标题
+ "filetitle":"DOCUMENT_TITLE",
+ //下载地址
+ "downurl":"BASE64&REPORT_URL",
+ //分类id
+ "assortid":"OW1PA2SR2Z5XX2JR10KR29SK2OW101",
+ //系统id
+ "collectorid":"2",
+ //采集类型(文件来源 1:采集器;2:扫描生产软件)
+ "filesource":1,
+ //下载类型(1:服务器本地;2:ftp服务器;3:共享文件夹)
+ "filestoragetype":1,
+ //上传接口
+ "uploadConnector":"http://192.168.1.107:9291/api/downplatform/report",
+// //基本数据存放处,根节点不填,最后一层为基本信息存放标签与doubleBasic配合
+ "basicDirectory":["DOCUMENT"],
+ //可能存在存储基本数据不同情况的标签
+ "doubleBasic":["TestItemInfo","BioTestInfo"]
+
+}
\ No newline at end of file
diff --git a/lombok.config b/lombok.config
new file mode 100644
index 0000000..4f55f03
--- /dev/null
+++ b/lombok.config
@@ -0,0 +1 @@
+lombok.var.flagUsage = ALLOW
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..05bcd65
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,132 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.5.6
+
+
+ com.docus
+ demo
+ 0.0.1-SNAPSHOT
+ docus-mz-empcllect
+ 电子病历采集
+
+ 1.8
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.dom4j
+ dom4j
+ 2.1.1
+
+
+
+ jaxen
+ jaxen
+ 1.1.1
+
+
+ com.alibaba
+ fastjson
+ 1.2.75
+
+
+ mysql
+ mysql-connector-java
+ 8.0.15
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.projectlombok
+ lombok
+ 1.16.14
+
+
+ com.spring4all
+ swagger-spring-boot-starter
+ 1.9.0.RELEASE
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.4
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.3.0
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.5
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.2
+
+
+ org.apache.httpcomponents
+ httpmime
+ 4.4
+
+
+
+ org.apache.axis
+ axis
+ 1.4
+
+
+
+ org.apache.axis
+ axis-jaxrpc
+ 1.4
+
+
+
+ commons-discovery
+ commons-discovery
+ 0.2
+
+
+
+ commons-logging
+ commons-logging
+ 1.1.1
+
+
+
+ wsdl4j
+ wsdl4j
+ 1.6.2
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/src/main/java/com/docus/bgts/DemoApplication.java b/src/main/java/com/docus/bgts/DemoApplication.java
new file mode 100644
index 0000000..8f79215
--- /dev/null
+++ b/src/main/java/com/docus/bgts/DemoApplication.java
@@ -0,0 +1,16 @@
+package com.docus.bgts;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@EnableScheduling
+@SpringBootApplication
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/docus/bgts/config/MyScheduling.java b/src/main/java/com/docus/bgts/config/MyScheduling.java
new file mode 100644
index 0000000..1c3debd
--- /dev/null
+++ b/src/main/java/com/docus/bgts/config/MyScheduling.java
@@ -0,0 +1,40 @@
+//package com.docus.bgts.config;
+//
+//
+//import com.docus.bgts.utils.FileUtils;
+//import com.docus.bgts.utils.HttpUtils;
+//import org.apache.logging.log4j.LogManager;
+//import org.apache.logging.log4j.Logger;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.scheduling.annotation.Scheduled;
+//import org.springframework.stereotype.Component;
+//
+//import java.net.URISyntaxException;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+//@Component
+//public class MyScheduling {
+//
+// @Value("${beat.url}")
+// private String beatUrl;
+//
+// private Logger logger = LogManager.getLogger(MyScheduling.class);
+//
+// //10分钟执行一次
+// @Scheduled(fixedRate = 1000 * 60 * 5)
+// public void beat() {
+// logger.info("------------心跳开始---------------");
+// Map params = new HashMap<>();
+// params.put("code", String.valueOf(FileUtils.getJsonByName("collectorid")));
+// try {
+// HttpUtils.get(beatUrl, params);
+// } catch (URISyntaxException e) {
+// e.printStackTrace();
+// logger.info("心跳推送出错,可能是住院服务没有开启");
+// } finally {
+// logger.info("-------------心跳结束---------------");
+// }
+// }
+//
+//}
diff --git a/src/main/java/com/docus/bgts/config/MybatisPlusConfig.java b/src/main/java/com/docus/bgts/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..be9705c
--- /dev/null
+++ b/src/main/java/com/docus/bgts/config/MybatisPlusConfig.java
@@ -0,0 +1,66 @@
+package com.docus.bgts.config;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.var;
+import org.apache.ibatis.logging.nologging.NoLoggingImpl;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.annotation.PostConstruct;
+import java.util.Objects;
+
+@Configuration
+@RequiredArgsConstructor
+@EnableTransactionManagement
+@MapperScan("com.docus.bgts.mapper")
+@ConditionalOnClass(value = {PaginationInterceptor.class})
+public class MybatisPlusConfig {
+
+
+ private final MybatisPlusProperties mybatisPlusProperties;
+ @Bean
+ public PaginationInterceptor paginationInterceptor() {
+ PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+ return paginationInterceptor;
+ }
+
+ @PostConstruct
+ public void initMybatisConfig(){
+ mybatisPlusProperties.setMapperLocations(new String[]{"classpath*:/mapper/*Mapper.xml"});
+ mybatisPlusProperties.setTypeAliasesPackage("com.docus.bgts.entity");
+
+ MybatisConfiguration configuration = mybatisPlusProperties.getConfiguration();
+ if(Objects.isNull(configuration)){
+ configuration=new MybatisConfiguration();
+ }
+ configuration.setMapUnderscoreToCamelCase(true);
+ configuration.setCacheEnabled(true);
+ configuration.setLogImpl(NoLoggingImpl.class);
+ mybatisPlusProperties.setConfiguration(configuration);
+
+ var globalConfig = mybatisPlusProperties.getGlobalConfig();
+ if(Objects.isNull(globalConfig)){
+ globalConfig=new GlobalConfig();
+ }
+ GlobalConfig.DbConfig dbConfig = globalConfig.getDbConfig();
+ if(Objects.isNull(dbConfig)){
+ dbConfig=new GlobalConfig.DbConfig();
+ }
+ configuration.setCallSettersOnNulls(true);
+ dbConfig.setIdType(IdType.ASSIGN_ID);
+ dbConfig.setTableUnderline(true);
+ dbConfig.setLogicDeleteValue("1");
+ dbConfig.setLogicNotDeleteValue("0");
+ dbConfig.setLogicDeleteField("def_flag");
+ globalConfig.setDbConfig(dbConfig);
+ globalConfig.setBanner(false);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/docus/bgts/config/WebServiceConfig.java b/src/main/java/com/docus/bgts/config/WebServiceConfig.java
new file mode 100644
index 0000000..6141a8a
--- /dev/null
+++ b/src/main/java/com/docus/bgts/config/WebServiceConfig.java
@@ -0,0 +1,35 @@
+package com.docus.bgts.config;
+
+import com.docus.bgts.handler.ITBasicWebService;
+import com.docus.bgts.handler.TBasicWebService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.xml.ws.Endpoint;
+
+@Configuration
+public class WebServiceConfig {
+
+ @Value("${system.code}")
+ private String systemCode;
+ @Value("${system.prop}")
+ private String systemProp;
+
+ //把实现类交给spring管理
+ @Bean
+ public ITBasicWebService tBasicWebService() {
+ return new TBasicWebService();
+ }
+
+ @Bean
+ public Endpoint endpoint() {
+ System.out.println("-----------------------web service服务已发布-------------------------");
+// String address = "http://"+"0.0.0.0"+":" + Codes.EXTERNAL.getCode()+"/" + Codes.EXTERNAL.getMessage();
+ String address = "http://"+"0.0.0.0"+":" + systemProp+"/" + systemCode;
+ Endpoint publish = Endpoint.publish(address, tBasicWebService());
+ System.out.println(" "+address);
+ return publish;
+ }
+
+}
diff --git a/src/main/java/com/docus/bgts/entity/AfCollectTask.java b/src/main/java/com/docus/bgts/entity/AfCollectTask.java
new file mode 100644
index 0000000..d7393e8
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/AfCollectTask.java
@@ -0,0 +1,68 @@
+package com.docus.bgts.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * 病案采集任务
+ *
+ *
+ * @author 曾文和
+ * @since 2021-05-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "AfCollectTask对象", description = "病案采集任务")
+public class AfCollectTask implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "id 雪花算法")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private Long id;
+
+ @ApiModelProperty(value = "病案主键")
+ private String patientId;
+
+ @ApiModelProperty(value = "af_archive_detail表id")
+ private Long afArchiveDetailId;
+
+ @ApiModelProperty(value = "来源 1护理文书,2 电子病历,3 Pacs检查,4心电图,5手麻系统,6 Lis检验,7病案首页,8长临医嘱")
+ private String sysflag;
+
+ @ApiModelProperty(value = "开始时间")
+ private Date startTime;
+
+ @ApiModelProperty(value = "结束时间")
+ private Date endTime;
+
+ @ApiModelProperty(value = "任务状态 0:未开始,1:完成,2:重新采集")
+ private String state;
+
+ @ApiModelProperty(value = "同步时间")
+ private Date syncTime;
+
+ @ApiModelProperty(value = "最新重新采集时间")
+ private Date recollectTime;
+
+ @ApiModelProperty(value = "最新重新采集人")
+ private String recollectName;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ @ApiModelProperty("报告唯一单号")
+ private String c1;
+ @ApiModelProperty("文件标题")
+ private String c2;
+ @ApiModelProperty("记账号")
+ private String c3;
+}
diff --git a/src/main/java/com/docus/bgts/entity/AfInterfaceCollect.java b/src/main/java/com/docus/bgts/entity/AfInterfaceCollect.java
new file mode 100644
index 0000000..6a6a21f
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/AfInterfaceCollect.java
@@ -0,0 +1,25 @@
+package com.docus.bgts.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ApiModel("文件库中的省中医病案采集表")
+public class AfInterfaceCollect implements Serializable {
+
+ private Long id;
+ @ApiModelProperty(value = "任务流水号")
+ private String serialnum;
+ @ApiModelProperty(value = "记账号")
+ private String jzh;
+ @ApiModelProperty(value = "任务数")
+ private Integer taskCount;
+ @ApiModelProperty(value = "完成数")
+ private Integer completeCount;
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+}
diff --git a/src/main/java/com/docus/bgts/entity/AfInterfaceCollectSub.java b/src/main/java/com/docus/bgts/entity/AfInterfaceCollectSub.java
new file mode 100644
index 0000000..00925c6
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/AfInterfaceCollectSub.java
@@ -0,0 +1,27 @@
+package com.docus.bgts.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("文件库中的省中医病案采集-子任务表")
+public class AfInterfaceCollectSub implements Serializable {
+ private Long id;
+ @ApiModelProperty(value = "af_interface_collect表id")
+ private Long afInterfaceCollectId;
+ @ApiModelProperty(value = "采集器id")
+ private String collectsysCode;
+ @ApiModelProperty(value = "子任务流水号 同一份文件子任务需一致")
+ private String serialnumSub;
+ @ApiModelProperty(value = "记账号")
+ private String jzh;
+ @ApiModelProperty(value = "分类名称")
+ private String assortName;
+ @ApiModelProperty(value = "状态 0:未发起,1:成功,2:失败")
+ private Integer state;
+ @ApiModelProperty(value = "请求信息")
+ private String requestMessage;
+}
diff --git a/src/main/java/com/docus/bgts/entity/MrReportError.java b/src/main/java/com/docus/bgts/entity/MrReportError.java
new file mode 100644
index 0000000..79f466d
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/MrReportError.java
@@ -0,0 +1,20 @@
+package com.docus.bgts.entity;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel("错误日志表")
+public class MrReportError {
+ private Long id;
+ @ApiModelProperty("上报信息")
+ private String xml;
+ @ApiModelProperty("上报类型")
+ private Integer reportType;
+ @ApiModelProperty("上报时间")
+ private Date createTime;
+}
diff --git a/src/main/java/com/docus/bgts/entity/ReportDownDto.java b/src/main/java/com/docus/bgts/entity/ReportDownDto.java
new file mode 100644
index 0000000..a689fa9
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/ReportDownDto.java
@@ -0,0 +1,25 @@
+package com.docus.bgts.entity;
+
+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 = "文件信息")
+ private List scanfiles;
+
+ private ReportDownPatientDto patient;
+
+ @ApiModelProperty(value = "分类id")
+ private String assortid;
+
+
+}
diff --git a/src/main/java/com/docus/bgts/entity/ReportDownPatientDto.java b/src/main/java/com/docus/bgts/entity/ReportDownPatientDto.java
new file mode 100644
index 0000000..8509d86
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/ReportDownPatientDto.java
@@ -0,0 +1,10 @@
+package com.docus.bgts.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ReportDownPatientDto {
+ @ApiModelProperty(value = "记帐号")
+ private String jzh;
+}
diff --git a/src/main/java/com/docus/bgts/entity/ReportDownScanFileDto.java b/src/main/java/com/docus/bgts/entity/ReportDownScanFileDto.java
new file mode 100644
index 0000000..9ef7c04
--- /dev/null
+++ b/src/main/java/com/docus/bgts/entity/ReportDownScanFileDto.java
@@ -0,0 +1,25 @@
+package com.docus.bgts.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ReportDownScanFileDto {
+ @ApiModelProperty(value = "文件标题")
+ private String filetitle;
+ @ApiModelProperty(value = "采集类型(文件来源 1:采集器;2:扫描生产软件)")
+ private int filesource;
+ @ApiModelProperty(value = "下载类型(1:服务器本地;2:ftp服务器;3:共享文件夹)")
+ private int filestoragetype;
+ @ApiModelProperty(value = "下载地址")
+ private String downurl;
+ @ApiModelProperty(value = "档案信息")
+ private String recordid;
+ @ApiModelProperty("采集流水号")
+ private String serialnum;
+ @ApiModelProperty(value = "任务id")
+ private Long taskid;
+ @ApiModelProperty("文件类型(1:url,2:base64)")
+ private Integer filetype = 1;
+
+}
diff --git a/src/main/java/com/docus/bgts/enums/Codes.java b/src/main/java/com/docus/bgts/enums/Codes.java
new file mode 100644
index 0000000..39ee26b
--- /dev/null
+++ b/src/main/java/com/docus/bgts/enums/Codes.java
@@ -0,0 +1,53 @@
+package com.docus.bgts.enums;
+
+/**
+ * 代码库
+ */
+public enum Codes {
+ //接口成功
+ SUCCESS("1", "成功"),
+ //接口失败
+ ERROR("0", "失败"),
+ //web service返回根节点
+ RESPONSE("100","Response"),
+ //web service返回二级节点
+ RET_INFO("101","Result"),
+ //web service 返回代码
+ RET_CODE("102","Code"),
+ //web service返回描述部分
+ RET_CON("103","Msg"),
+ //静态文件存放位置
+ JSON_ADDRESS("999","\\dataConfig\\homeQualitySet.json"),
+ //接收二级节点
+ MSG("201","Msg"),
+ //节点根
+ DIRECTORY("1000","directory"),
+ //上传接口地址
+ UPLOAD("0","uploadConnector"),
+ //患者主索引号
+ EMP_ID("0","indexFlag"),
+ //错误日志编号
+ ERROR_CODE("500","12"),
+ //接收三级节点
+// PAT_INFO("202","PatInfo"),
+ //静态文件根元素名
+ SELECT_COLUMNS("10000","selectColumns")
+ ;
+ //代码
+ private String code;
+ //描述
+ private String message;
+
+ private Codes(String code, String messgae) {
+ this.code = code;
+ this.message = messgae;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
diff --git a/src/main/java/com/docus/bgts/facade/IAfCollectTaskService.java b/src/main/java/com/docus/bgts/facade/IAfCollectTaskService.java
new file mode 100644
index 0000000..2ee8f97
--- /dev/null
+++ b/src/main/java/com/docus/bgts/facade/IAfCollectTaskService.java
@@ -0,0 +1,25 @@
+package com.docus.bgts.facade;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.docus.bgts.entity.AfCollectTask;
+import com.docus.bgts.entity.ReportDownDto;
+
+/**
+ *
+ * 病案采集任务 服务类
+ *
+ *
+ * @author 曾文和
+ * @since 2021-05-07
+ */
+public interface IAfCollectTaskService extends IService {
+ /**
+ * 获取病案id通过报告唯一单号
+ */
+ String getpatientIdByEmpId(String empId);
+
+ void insert(ReportDownDto reportDownDto);
+
+ void updateInterfaceCollect(String collectSubId, int state);
+}
diff --git a/src/main/java/com/docus/bgts/facade/IMrReportErrorService.java b/src/main/java/com/docus/bgts/facade/IMrReportErrorService.java
new file mode 100644
index 0000000..6f54bd2
--- /dev/null
+++ b/src/main/java/com/docus/bgts/facade/IMrReportErrorService.java
@@ -0,0 +1,10 @@
+package com.docus.bgts.facade;
+
+
+import com.docus.bgts.entity.MrReportError;
+
+public interface IMrReportErrorService{
+
+ void insert(String xml);
+
+}
diff --git a/src/main/java/com/docus/bgts/handler/ITBasicWebService.java b/src/main/java/com/docus/bgts/handler/ITBasicWebService.java
new file mode 100644
index 0000000..62a8472
--- /dev/null
+++ b/src/main/java/com/docus/bgts/handler/ITBasicWebService.java
@@ -0,0 +1,19 @@
+package com.docus.bgts.handler;
+
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+
+@WebService
+public interface ITBasicWebService {
+ /**
+ * 检验报告推送
+ * @return
+ */
+ @WebMethod
+ String pushSurveyReport(String xml);
+
+ @WebMethod
+ String EmrDocumentArchive(String xml);
+
+}
diff --git a/src/main/java/com/docus/bgts/handler/TBasicWebService.java b/src/main/java/com/docus/bgts/handler/TBasicWebService.java
new file mode 100644
index 0000000..5bcdb48
--- /dev/null
+++ b/src/main/java/com/docus/bgts/handler/TBasicWebService.java
@@ -0,0 +1,215 @@
+package com.docus.bgts.handler;
+
+
+import com.alibaba.fastjson.JSON;
+import com.docus.bgts.entity.ReportDownDto;
+import com.docus.bgts.entity.ReportDownPatientDto;
+import com.docus.bgts.entity.ReportDownScanFileDto;
+import com.docus.bgts.enums.Codes;
+import com.docus.bgts.facade.IAfCollectTaskService;
+import com.docus.bgts.facade.IMrReportErrorService;
+import com.docus.bgts.utils.FileUtils;
+import com.docus.bgts.utils.HttpUtils;
+import com.docus.bgts.utils.ResultUtils;
+import com.docus.bgts.utils.XmlUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.jws.WebService;
+import java.io.ByteArrayInputStream;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@WebService
+public class TBasicWebService implements ITBasicWebService {
+
+ @Autowired
+ IAfCollectTaskService afCollectTaskService;
+
+ @Autowired
+ IMrReportErrorService mrReportErrorService;
+
+ private Logger logger = LogManager.getLogger(TBasicWebService.class);
+
+ private Element getElementFromString(String s) {
+ SAXReader builder = new SAXReader();
+ Document doc = null;
+ Element element = null;
+ try {
+ doc = builder.read(new StringReader(s));
+ } catch (DocumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ if (doc != null) {
+ element = doc.getRootElement();
+ }
+ return element;
+ }
+
+ @Override
+ public String pushSurveyReport(String xml) {
+ try {
+ logger.info("报告推送入参:" + xml);
+ // 1、创建document对象
+// Document document = DocumentHelper.createDocument();
+// Element rootElement = getElementFromString(xml);
+// document.setRootElement(rootElement);
+ xml = "" + xml;
+ //解析XML
+ XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(xml.getBytes("UTF-8")));
+ // 获取患者主索引号
+ String empId = String.valueOf(FileUtils.getJsonByName(Codes.EMP_ID.getMessage()));
+ Map headMap = new HashMap<>();
+ headMap.put("Content-Type", "application/json");
+ ReportDownDto reportDownDto;
+ //获取数据存在的节点节点
+ Element elementRoot = xmlUtils.getMsgElement();
+ //key
+ String serialnmnKey = String.valueOf(FileUtils.getJsonByName("serialnum"));
+// String empId = String.valueOf(FileUtils.getJsonByName("indexFlag"));
+ String filetitleKey = String.valueOf(FileUtils.getJsonByName("filetitle"));
+ String downurlKey = String.valueOf(FileUtils.getJsonByName("downurl"));
+
+ ReportDownScanFileDto reportDownScanFileDto;
+ ReportDownPatientDto reportDownPatientDto;
+ //临时资料存储
+ String serialnum;
+ String filetitle;
+ String downurl;
+ String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
+// String collectorid = getCollectorid(elementList.get(0));
+// String assortid = String.valueOf(FileUtils.getJsonByName("assortid"));
+ String assortid = getAssortid(elementRoot);
+ reportDownDto = new ReportDownDto();
+ reportDownDto.setCollectorid(collectorid);
+ reportDownDto.setAssortid(assortid);
+ //获取基本数据信息
+ List reportDownDtoArr = new ArrayList<>();
+ reportDownPatientDto = new ReportDownPatientDto();
+// String empIdText = elementList.get(0).element(empId).getText();
+ //获取jzh
+ String empIdText = getElementText(elementRoot, empId.split(","));
+ //获取采集流水号
+ serialnum = getElementText(elementRoot, serialnmnKey.split(","));
+ reportDownPatientDto.setJzh(empIdText);
+ logger.info("患者主索引号:" + empIdText);
+ reportDownDto.setPatient(reportDownPatientDto);
+ List elementList = xmlUtils.getJsonByName(elementRoot);
+
+ for (Element element : elementList) {
+// serialnum = element.element(serialnmnKey).getText();
+// filetitle = element.element(filetitleKey).getText();
+ filetitle = getElementText(element, filetitleKey.split(","));
+// downurl = element.element(downurlKey).getText();
+ downurl = getElementText(element, downurlKey.split(","));
+ reportDownScanFileDto = new ReportDownScanFileDto();
+ reportDownScanFileDto.setDownurl(downurl);
+ reportDownScanFileDto.setFiletitle(filetitle);
+ reportDownScanFileDto.setSerialnum(serialnum);
+ reportDownScanFileDto.setFilesource(Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filesource"))));
+ reportDownScanFileDto.setFilestoragetype(Integer.parseInt(String.valueOf(FileUtils.getJsonByName("filestoragetype"))));
+ //判断是否为base64
+ if (reportDownScanFileDto.getDownurl().length() > 200) {
+ reportDownScanFileDto.setFiletype(2);
+ }
+ reportDownDtoArr.add(reportDownScanFileDto);
+ }
+ if (reportDownDtoArr.size() <= 0) {
+ throw new RuntimeException("不存在必要的基本信息");
+ } else {
+ reportDownDto.setScanfiles(reportDownDtoArr);
+ }
+ //插入文件af_collect_task表数据
+ afCollectTaskService.insert(reportDownDto);
+ String post = "";
+ logger.info("--------执行上传功能----------");
+ Map params = JSON.parseObject(JSON.toJSONString(reportDownDto), Map.class);
+ logger.info("上传参数:" + params);
+ post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), headMap, params);
+// String post = HttpUtils.post(String.valueOf(FileUtils.getJsonByName(Codes.UPLOAD.getMessage())), map, headMap);
+ if (StringUtils.isBlank(post)) {
+ logger.info("--------上传时出现错误,可能是文件服务没有启动----------");
+ throw new RuntimeException("上传时出现错误,可能是文件服务没有启动");
+ }
+ Map resMap = JSON.parseObject(post, Map.class);
+ if (String.valueOf(resMap.get("code")).equals("500")) {
+ throw new RuntimeException(String.valueOf(resMap.get("msg")));
+ } else {
+ return ResultUtils.success().asXML();
+ }
+ } catch (RuntimeException e) {
+ e.printStackTrace();
+ mrReportErrorService.insert(xml);
+ return ResultUtils.fail(e.getMessage());
+ } catch (Exception e) {
+ e.printStackTrace();
+ mrReportErrorService.insert(xml);
+ return ResultUtils.fail(e.getMessage());
+ }
+ }
+
+ @Override
+ public String EmrDocumentArchive(String xml) {
+ return pushSurveyReport(xml);
+ }
+
+ /**
+ * 获取key内容
+ *
+ * @param element
+ * @param args
+ * @return
+ */
+ private String getElementText(Element element, String[] args) {
+ String resText = "";
+ Element byElement = (Element) element.clone();
+ String[] split;
+ for (String arg : args) {
+ split = arg.split("&");
+ if (split.length > 1) {
+ for (String spi : split) {
+ byElement = byElement.element(spi);
+ if (byElement != null) {
+ break;
+ }
+ }
+ } else {
+ byElement = byElement.element(arg);
+ }
+ if (byElement != null) {
+ resText = byElement.getText();
+ } else {
+ break;
+ }
+ }
+ return resText;
+ }
+
+ /**
+ * 获取系统id
+ *
+ * @return
+ */
+ private String getAssortid(Element element) {
+ String assortId = String.valueOf(FileUtils.getJsonByName("assortid"));
+ if (StringUtils.isBlank(assortId)) {
+ String assortIdKey = String.valueOf(FileUtils.getJsonByName("assortidParamKey"));
+ if (StringUtils.isBlank(assortIdKey)) {
+ assortId = "";
+ } else {
+ assortId = element.element(assortIdKey).getText();
+ }
+ }
+ return assortId;
+ }
+}
diff --git a/src/main/java/com/docus/bgts/mapper/AfCollectTaskMapper.java b/src/main/java/com/docus/bgts/mapper/AfCollectTaskMapper.java
new file mode 100644
index 0000000..27f9246
--- /dev/null
+++ b/src/main/java/com/docus/bgts/mapper/AfCollectTaskMapper.java
@@ -0,0 +1,23 @@
+package com.docus.bgts.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.docus.bgts.entity.AfCollectTask;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ *
+ * 病案采集任务 Mapper 接口
+ *
+ *
+ * @author 曾文和
+ * @since 2021-05-07
+ */
+public interface AfCollectTaskMapper extends BaseMapper {
+ /**
+ * 获取病案id通过报告唯一单号
+ * @param empId
+ * @return
+ */
+ String getpatientIdByEmpId(@Param("jzh") String empId);
+}
diff --git a/src/main/java/com/docus/bgts/mapper/AfInterfaceCollectMapper.java b/src/main/java/com/docus/bgts/mapper/AfInterfaceCollectMapper.java
new file mode 100644
index 0000000..aa1e32a
--- /dev/null
+++ b/src/main/java/com/docus/bgts/mapper/AfInterfaceCollectMapper.java
@@ -0,0 +1,8 @@
+package com.docus.bgts.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.docus.bgts.entity.AfInterfaceCollect;
+
+public interface AfInterfaceCollectMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/docus/bgts/mapper/AfInterfaceCollectSubMapper.java b/src/main/java/com/docus/bgts/mapper/AfInterfaceCollectSubMapper.java
new file mode 100644
index 0000000..016177b
--- /dev/null
+++ b/src/main/java/com/docus/bgts/mapper/AfInterfaceCollectSubMapper.java
@@ -0,0 +1,7 @@
+package com.docus.bgts.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.docus.bgts.entity.AfInterfaceCollectSub;
+
+public interface AfInterfaceCollectSubMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/docus/bgts/mapper/MrReportErrorMapper.java b/src/main/java/com/docus/bgts/mapper/MrReportErrorMapper.java
new file mode 100644
index 0000000..72c4d61
--- /dev/null
+++ b/src/main/java/com/docus/bgts/mapper/MrReportErrorMapper.java
@@ -0,0 +1,9 @@
+package com.docus.bgts.mapper;
+
+import com.docus.bgts.entity.MrReportError;
+import org.apache.ibatis.annotations.Param;
+
+public interface MrReportErrorMapper {
+
+ void save(@Param("mrReportError") MrReportError mrReportError);
+}
diff --git a/src/main/java/com/docus/bgts/service/AfCollectTaskServiceImpl.java b/src/main/java/com/docus/bgts/service/AfCollectTaskServiceImpl.java
new file mode 100644
index 0000000..6899096
--- /dev/null
+++ b/src/main/java/com/docus/bgts/service/AfCollectTaskServiceImpl.java
@@ -0,0 +1,119 @@
+package com.docus.bgts.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.docus.bgts.entity.*;
+import com.docus.bgts.facade.IAfCollectTaskService;
+import com.docus.bgts.mapper.AfCollectTaskMapper;
+import com.docus.bgts.mapper.AfInterfaceCollectMapper;
+import com.docus.bgts.mapper.AfInterfaceCollectSubMapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 病案采集任务 服务实现类
+ *
+ *
+ * @author 曾文和
+ * @since 2021-05-07
+ */
+@Service
+public class AfCollectTaskServiceImpl extends ServiceImpl implements IAfCollectTaskService {
+
+ private Logger log= LogManager.getLogger();
+
+ @Autowired
+ AfCollectTaskMapper afCollectTaskMapper;
+
+ @Autowired
+ AfInterfaceCollectMapper afInterfaceCollectMapper;
+
+ @Autowired
+ AfInterfaceCollectSubMapper afInterfaceCollectSubMapper;
+
+ @Override
+ public String getpatientIdByEmpId(String empId) {
+ String patientId = afCollectTaskMapper.getpatientIdByEmpId(empId);
+ return patientId;
+ }
+
+ @Transactional
+ @Override
+ public void insert(ReportDownDto reportDownDto) {
+ log.info("新增任务表初始数据:"+reportDownDto);
+ AfCollectTask afCollectTask;
+ String patientId = getpatientIdByEmpId(reportDownDto.getPatient().getJzh());
+ if (StringUtils.isBlank(patientId)) {
+ throw new RuntimeException("操作的病案信息不存在");
+ }
+ Date date = new Date();
+ Integer save = null;
+ List scanfiles = reportDownDto.getScanfiles();
+ for (ReportDownScanFileDto scanfile : scanfiles) {
+ // 判断任务是否已存在
+ afCollectTask = afCollectTaskMapper.selectOne(new QueryWrapper().eq("C1", scanfile.getSerialnum()).eq("sysflag", reportDownDto.getCollectorid()));
+ if (afCollectTask == null) {
+ //不存在 新增
+ afCollectTask = new AfCollectTask();
+ afCollectTask.setPatientId(patientId);
+ afCollectTask.setSysflag(reportDownDto.getCollectorid());
+ afCollectTask.setState("0");
+ afCollectTask.setSyncTime(date);
+ afCollectTask.setC1(scanfile.getSerialnum());
+ afCollectTask.setC2(scanfile.getFiletitle());
+ afCollectTask.setC3(reportDownDto.getPatient().getJzh());
+ save = afCollectTaskMapper.insert(afCollectTask);
+ } else {
+ //存在就修改
+ afCollectTask.setPatientId(patientId);
+ afCollectTask.setSysflag(reportDownDto.getCollectorid());
+ afCollectTask.setState("0");
+ afCollectTask.setSyncTime(date);
+ afCollectTask.setC1(scanfile.getSerialnum());
+ afCollectTask.setC2(scanfile.getFiletitle());
+ afCollectTask.setC3(reportDownDto.getPatient().getJzh());
+ save = afCollectTaskMapper.updateById(afCollectTask);
+ }
+
+ if (save <= 0) {
+ log.info("任务表操作出错");
+ throw new RuntimeException("插入病案任务表数据出错");
+ }
+ scanfile.setTaskid(afCollectTask.getId());
+ }
+ reportDownDto.setScanfiles(scanfiles);
+ }
+
+ @Override
+ public void updateInterfaceCollect(String collectSubId, int state) {
+ AfInterfaceCollectSub afInterfaceCollectSub = afInterfaceCollectSubMapper.selectById(collectSubId);
+ if (afInterfaceCollectSub == null) {
+ throw new RuntimeException("afInterfaceCollectSub表数据为空");
+ }
+ int i;
+ afInterfaceCollectSub.setState(state);
+ i = afInterfaceCollectSubMapper.updateById(afInterfaceCollectSub);
+ if (i <= 0) {
+ throw new RuntimeException("记录任务数时出错");
+ }
+ if (state == 1) {
+ AfInterfaceCollect afInterfaceCollect = afInterfaceCollectMapper.selectById(afInterfaceCollectSub.getAfInterfaceCollectId());
+ afInterfaceCollect.setCompleteCount(afInterfaceCollect.getCompleteCount() + 1);
+ i = afInterfaceCollectMapper.updateById(afInterfaceCollect);
+ if (i <= 0) {
+ throw new RuntimeException("记录任务数时出错");
+ }
+ }
+
+ }
+
+}
diff --git a/src/main/java/com/docus/bgts/service/MrReportErrorServiceImpl.java b/src/main/java/com/docus/bgts/service/MrReportErrorServiceImpl.java
new file mode 100644
index 0000000..1a21853
--- /dev/null
+++ b/src/main/java/com/docus/bgts/service/MrReportErrorServiceImpl.java
@@ -0,0 +1,32 @@
+package com.docus.bgts.service;
+
+
+import com.docus.bgts.entity.MrReportError;
+import com.docus.bgts.facade.IMrReportErrorService;
+import com.docus.bgts.mapper.MrReportErrorMapper;
+import com.docus.bgts.utils.FileUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Slf4j
+@Service
+public class MrReportErrorServiceImpl implements IMrReportErrorService {
+
+ @Autowired
+ MrReportErrorMapper mrReportErrorMapper;
+
+ @Override
+ public void insert(String xml) {
+ log.info("------发送错误:并记录日志------");
+ MrReportError mrReportError=new MrReportError();
+ mrReportError.setXml(xml);
+ mrReportError.setCreateTime(new Date());
+ Integer collectorid = Integer.valueOf(String.valueOf(FileUtils.getJsonByName("collectorid")));
+ mrReportError.setReportType(collectorid);
+ mrReportErrorMapper.save(mrReportError);
+ log.info("--------日志记录完成------");
+ }
+}
diff --git a/src/main/java/com/docus/bgts/utils/FileUtils.java b/src/main/java/com/docus/bgts/utils/FileUtils.java
new file mode 100644
index 0000000..7afb6b5
--- /dev/null
+++ b/src/main/java/com/docus/bgts/utils/FileUtils.java
@@ -0,0 +1,43 @@
+package com.docus.bgts.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.docus.bgts.enums.Codes;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+public class FileUtils {
+ /**
+ * 获取jar包所在位置
+ *
+ * @return
+ */
+ public static String currentPath() {
+ File dir = new File(".");
+ String currentpath = "";
+ try {
+ currentpath = dir.getCanonicalPath();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return currentpath;
+ }
+
+ /**
+ * 获取静态文件中的内容
+ * @param name
+ * @return
+ */
+ public static Object getJsonByName(String name){
+ //获取目录结构
+ String path = FileUtils.currentPath();
+ //解析json映射文件
+ String json = JsonUtils.readJsonFile(path + Codes.JSON_ADDRESS.getMessage());
+ Map jsonMap = JSON.parseObject(json, Map.class);
+ return jsonMap.get(name);
+ }
+
+
+
+}
diff --git a/src/main/java/com/docus/bgts/utils/HttpUtils.java b/src/main/java/com/docus/bgts/utils/HttpUtils.java
new file mode 100644
index 0000000..470ebbd
--- /dev/null
+++ b/src/main/java/com/docus/bgts/utils/HttpUtils.java
@@ -0,0 +1,211 @@
+package com.docus.bgts.utils;
+
+import com.alibaba.fastjson.JSON;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.*;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Map;
+
+public class HttpUtils {
+ private static PoolingHttpClientConnectionManager cm;
+ private static String EMPTY_STR = "";
+ private static String UTF_8 = "UTF-8";
+
+ private static void init() {
+ if (cm == null) {
+ cm = new PoolingHttpClientConnectionManager();
+ cm.setMaxTotal(50);// 整个连接池最大连接数
+ cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2
+ }
+ }
+
+ /**
+ * 通过连接池获取HttpClient
+ *
+ * @return
+ */
+ private static CloseableHttpClient getHttpClient() {
+ init();
+ return HttpClients.custom().setConnectionManager(cm).build();
+ }
+ /**
+ * @param url
+ * @return
+ */
+ public static String get(String url) {
+ HttpGet httpGet = new HttpGet(url);
+ return getResult(httpGet);
+ }
+ /**
+ * @param url、params
+ * @return
+ */
+ public static String get(String url, Map params) throws URISyntaxException {
+ URIBuilder ub = new URIBuilder();
+ ub.setPath(url);
+
+ ArrayList pairs = covertParams2NVPS(params);
+ ub.setParameters(pairs);
+
+ HttpGet httpGet = new HttpGet(ub.build());
+ return getResult(httpGet);
+ }
+ /**
+ * @param url、headers、params
+ * @return
+ */
+ public static String get(String url, Map headers, Map params)
+ throws URISyntaxException {
+ URIBuilder ub = new URIBuilder();
+ ub.setPath(url);
+
+ if (params != null) {
+ ArrayList pairs = covertParams2NVPS(params);
+ ub.setParameters(pairs);
+ }
+
+ HttpGet httpGet = new HttpGet(ub.build());
+ for (Map.Entry param : headers.entrySet()) {
+ httpGet.addHeader(param.getKey(), String.valueOf(param.getValue()));
+ }
+ return getResult(httpGet);
+ }
+ /**
+ * @param url
+ * @return
+ */
+ public static String post(String url) {
+ HttpPost httpPost = new HttpPost(url);
+ return getResult(httpPost);
+ }
+ /**
+ * @param url、params
+ * @return
+ */
+ public static String post(String url, Map params) throws UnsupportedEncodingException {
+ HttpPost httpPost = new HttpPost(url);
+ httpPost.setEntity(new UrlEncodedFormEntity(covertParams2NVPS(params), "utf-8"));//设置表单提交编码
+
+// httpPost.setEntity(new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_FORM_URLENCODED));
+ return getResult(httpPost);
+ }
+
+ public static String post(String url, Object params, Map head) throws UnsupportedEncodingException {
+ HttpPost httpPost = new HttpPost(url);
+ System.out.println(params);
+ httpPost.setEntity(new StringEntity(params.toString()));//设置表单提交编码
+ if (params != null) {
+ for (Map.Entry param : head.entrySet()) {
+ httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
+ }
+ }
+// httpPost.setEntity(new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_FORM_URLENCODED));
+ return getResult(httpPost);
+ }
+
+ private static ArrayList covertParams2NVPS(Map params) {
+ ArrayList pairs = new ArrayList();
+ for (Map.Entry param : params.entrySet()) {
+ if (param.getValue() != null) {
+ pairs.add(new BasicNameValuePair(param.getKey(), param.getValue()));
+ }
+ }
+
+ return pairs;
+ }
+ /**
+ * @param url、headers、params
+ * @return
+ */
+ public static String post(String url, Map headers, Map params)
+ throws UnsupportedEncodingException {
+ HttpPost httpPost = new HttpPost(url);
+ System.out.println(params);
+ if (params != null) {
+ for (Map.Entry param : headers.entrySet()) {
+ httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
+ }
+ }
+
+ httpPost.setEntity(new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_JSON));
+
+ return getResult(httpPost);
+ }
+
+ /**
+ * 处理Http请求
+ *
+ * @param request
+ * @return
+ */
+ private static String getResult(HttpRequestBase request) {
+ // CloseableHttpClient httpClient = HttpClients.createDefault();
+ CloseableHttpClient httpClient = getHttpClient();
+ try {
+ CloseableHttpResponse response = httpClient.execute(request);
+ // response.getStatusLine().getStatusCode();
+ HttpEntity entity = response.getEntity();
+ if (entity != null) {
+ // long len = entity.getContentLength();// -1 表示长度未知
+ String result = EntityUtils.toString(entity, UTF_8);
+ response.close();
+ // httpClient.close();
+ return result;
+ }
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+
+ }
+
+ return EMPTY_STR;
+ }
+
+ /**
+ * 处理Http请求
+ *
+ * @param requestBuilder
+ * @return
+ */
+ private static String getResult(RequestBuilder requestBuilder) {
+ // CloseableHttpClient httpClient = HttpClients.createDefault();
+ CloseableHttpClient httpClient = getHttpClient();
+ try {
+ CloseableHttpResponse response = httpClient.execute(requestBuilder.build());
+ // response.getStatusLine().getStatusCode();
+ HttpEntity entity = response.getEntity();
+ if (entity != null) {
+ // long len = entity.getContentLength();// -1 表示长度未知
+ String result = EntityUtils.toString(entity, UTF_8);
+ response.close();
+ // httpClient.close();
+ return result;
+ }
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+
+ }
+
+ return EMPTY_STR;
+ }
+}
diff --git a/src/main/java/com/docus/bgts/utils/JsonUtils.java b/src/main/java/com/docus/bgts/utils/JsonUtils.java
new file mode 100644
index 0000000..ddc6be0
--- /dev/null
+++ b/src/main/java/com/docus/bgts/utils/JsonUtils.java
@@ -0,0 +1,44 @@
+package com.docus.bgts.utils;
+
+import java.io.*;
+
+/**
+ * json工具类
+ */
+public class JsonUtils {
+
+ /**
+ * 读取json文件方法
+ * @param fileName:json文件存在的本地地址
+ * @return
+ */
+ public static String readJsonFile(String fileName) {
+ String jsonStr = "";
+ Reader reader=null;
+ FileReader fileReader=null;
+ try {
+ File jsonFile = new File(fileName);
+ fileReader = new FileReader(jsonFile);
+ reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
+ int ch = 0;
+ StringBuffer sb = new StringBuffer();
+ while ((ch = reader.read()) != -1) {
+ sb.append((char) ch);
+ }
+ fileReader.close();
+ reader.close();
+ jsonStr = sb.toString();
+ return jsonStr;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }finally {
+ try {
+ reader.close();
+ fileReader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/docus/bgts/utils/ResultUtils.java b/src/main/java/com/docus/bgts/utils/ResultUtils.java
new file mode 100644
index 0000000..d486949
--- /dev/null
+++ b/src/main/java/com/docus/bgts/utils/ResultUtils.java
@@ -0,0 +1,84 @@
+package com.docus.bgts.utils;
+
+
+import com.docus.bgts.enums.Codes;
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+/**
+ * 返回结果工具类
+ */
+public class ResultUtils {
+ /**
+ * 通过document对象返回节点对象
+ * @param response
+ * @return
+ */
+ public static Element getElement(Document response){
+ Element element = response.getRootElement();
+ return element;
+ }
+
+ /**
+ * 成功返回
+ * @return
+ */
+ public static Document success(){
+ // 1、创建document对象
+ Document document= DocumentHelper.createDocument();
+ //2.创建根节点
+ Element response=document.addElement(Codes.RESPONSE.getMessage());
+ // 3、生成子节点及子节点内容
+ Element RetInfo = response.addElement(Codes.RET_INFO.getMessage());
+ //4.生成代码和描述节点
+ Element resCode = RetInfo.addElement(Codes.RET_CODE.getMessage());
+ Element retCon = RetInfo.addElement(Codes.RET_CON.getMessage());
+ //赋值
+ resCode.setText(String.valueOf(Codes.SUCCESS.getCode()));
+ retCon.setText(Codes.SUCCESS.getMessage());
+ return document;
+ }
+
+ /**
+ * 失败返回
+ * @return
+ */
+ public static String fail(){
+ // 1、创建document对象
+ Document document= DocumentHelper.createDocument();
+ //2.创建根节点
+ Element response=document.addElement(Codes.RESPONSE.getMessage());
+ // 3、生成子节点及子节点内容
+ Element RetInfo = response.addElement(Codes.RET_INFO.getMessage());
+ //4.生成代码和描述节点
+ Element resCode = RetInfo.addElement(Codes.RET_CODE.getMessage());
+ Element retCon = RetInfo.addElement(Codes.RET_CON.getMessage());
+ //赋值
+ resCode.setText(String.valueOf(Codes.ERROR.getCode()));
+ retCon.setText(Codes.ERROR.getMessage());
+ return document.asXML();
+ }
+
+ /**
+ * 失败返回
+ * @return
+ */
+ public static String fail(String message){
+ // 1、创建document对象
+ Document document= DocumentHelper.createDocument();
+ //2.创建根节点
+ Element response=document.addElement(Codes.RESPONSE.getMessage());
+ // 3、生成子节点及子节点内容
+ Element RetInfo = response.addElement(Codes.RET_INFO.getMessage());
+ //4.生成代码和描述节点
+ Element resCode = RetInfo.addElement(Codes.RET_CODE.getMessage());
+ Element retCon = RetInfo.addElement(Codes.RET_CON.getMessage());
+ //赋值
+ resCode.setText(String.valueOf(Codes.ERROR.getCode()));
+ retCon.setText(StringUtils.isNotBlank(message)?message: Codes.ERROR.getMessage());
+ return document.asXML();
+ }
+
+}
diff --git a/src/main/java/com/docus/bgts/utils/XmlUtils.java b/src/main/java/com/docus/bgts/utils/XmlUtils.java
new file mode 100644
index 0000000..8cef006
--- /dev/null
+++ b/src/main/java/com/docus/bgts/utils/XmlUtils.java
@@ -0,0 +1,158 @@
+package com.docus.bgts.utils;
+
+
+import com.alibaba.fastjson.JSON;
+import com.docus.bgts.enums.Codes;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import sun.rmi.runtime.Log;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class XmlUtils {
+ //定义解析器和文档对象
+ private SAXReader saxReader;
+ private Document document;
+
+ public XmlUtils(String path) {
+ //获取解析器
+ saxReader = new SAXReader();
+ try {
+ //获取文档对象
+ document = saxReader.read(path);
+ } catch (DocumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public XmlUtils(InputStream path) {
+ //获取解析器
+ saxReader = new SAXReader();
+ try {
+ //获取文档对象
+ document = saxReader.read(path);
+ } catch (DocumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 动态获取节点内容
+ *
+ * @return
+ */
+ public String getElement(String name) {
+ //获取根节点
+ Element root = document.getRootElement();
+ Object directory = FileUtils.getJsonByName(Codes.DIRECTORY.getMessage());
+ Element current = root;
+ if (directory == null) {
+ throw new RuntimeException("没有定义目录结构");
+ }
+ List directoryArr = (List) directory;
+ for (String dire : directoryArr) {
+ current = current.element(dire);
+ }
+ return current.element(name) == null ? "" : current.element(name).getText();
+ }
+
+ /**
+ * 根据路径动态获取节点
+ *
+ * @return
+ */
+ public Element getElement(List directory) {
+ //获取根节点
+ Element root = document.getRootElement();
+
+ Element current = root;
+ List directoryArr = directory;
+ for (String dire : directoryArr) {
+ current = current.element(dire);
+ }
+ if (current == null) {
+ throw new RuntimeException("未找到对应节点");
+ }
+ return current;
+ }
+
+ /**
+ * 返回存在的根节点
+ */
+ public List getJsonByName(Element root) {
+ //获取目录结构
+ String path = FileUtils.currentPath();
+ //解析json映射文件
+ String json = JsonUtils.readJsonFile(path + Codes.JSON_ADDRESS.getMessage());
+ Map jsonMap = JSON.parseObject(json, Map.class);
+ //判断是否多条
+ List basicArr = (List) jsonMap.get("doubleBasic");
+// List directory = (List) jsonMap.get("basicDirectory");
+ List elements = null;
+// Element root = this.getElement(directory);
+ for (String basic : basicArr) {
+ elements = root.elements(basic);
+ if (elements != null && elements.size() > 0) {
+ break;
+ }
+ }
+ if (elements == null || elements.size() == 0) {
+ //只有一条
+// List rootDirectory = (List) jsonMap.get("directory");
+// root = this.getElement(rootDirectory);
+ elements = new ArrayList<>();
+ elements.add(root);
+ }
+
+ return elements;
+ }
+
+ /**
+ * 返回数据存在的父节点
+ * @return
+ */
+ public Element getMsgElement(){
+ //获取目录结构
+ String path = FileUtils.currentPath();
+ //解析json映射文件
+ String json = JsonUtils.readJsonFile(path + Codes.JSON_ADDRESS.getMessage());
+ Map jsonMap = JSON.parseObject(json, Map.class);
+ List directory = (List) jsonMap.get("directory");
+ Element root = this.getElement(directory);
+ return root;
+ }
+
+ /**
+ * 根据节点名称获取内容
+ *
+ * @param name 节点名称
+ * @return 节点内容
+ */
+ public String getElementText(String name) {
+ //定位根节点
+ Element root = document.getRootElement();
+ //根据名称定位节点
+ Element msg = root.element(Codes.MSG.getMessage());
+ if (msg == null) {
+ throw new RuntimeException("没有" + Codes.MSG.getMessage() + "节点");
+ }
+// Element patInfo = msg.element(Codes.PAT_INFO.getMessage());
+// if(patInfo==null){
+// throw new RuntimeException("没有"+Codes.PAT_INFO.getMessage()+"节点");
+// }
+ Element element = msg.element(name);
+ if (element == null) {
+ return null;
+ }
+ //返回节点内容
+ return element.getText();
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1 @@
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..b4b5e4d
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,28 @@
+server:
+ port: 9701
+# http
+
+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
+#beat:
+# url: http://localhost:9399/beat
+
+system:
+ code: "EmrDocAr"
+ prop: 9801
+# web service
+
+
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ username: docus
+ password: docus702
+ url: jdbc:mysql://db.docus.cn:3306/docus_archivefile?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
\ No newline at end of file
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..8d89969
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+ %d %p (%file:%line\)- %m%n
+
+ UTF-8
+
+
+
+
+
+
+ configLog/log.log
+
+
+
+
+
+ log/demo.%d.%i.log
+
+ 15
+
+
+ 10MB
+
+
+
+
+
+ %d %p (%file:%line\)- %m%n
+
+
+ UTF-8
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/AfCollectTaskMapper.xml b/src/main/resources/mapper/AfCollectTaskMapper.xml
new file mode 100644
index 0000000..3242789
--- /dev/null
+++ b/src/main/resources/mapper/AfCollectTaskMapper.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/MrReportErrorMapper.xml b/src/main/resources/mapper/MrReportErrorMapper.xml
new file mode 100644
index 0000000..9fc0e14
--- /dev/null
+++ b/src/main/resources/mapper/MrReportErrorMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ insert into docus_medicalrecord.mr_report_error(xml,report_type,create_time)
+ values(#{mrReportError.xml},#{mrReportError.reportType},#{mrReportError.createTime})
+
+
+
\ No newline at end of file