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