diff --git a/pom.xml b/pom.xml
index b196a72..87e5c46 100644
--- a/pom.xml
+++ b/pom.xml
@@ -106,6 +106,26 @@
axis
1.4
+
+ commons-discovery
+ commons-discovery
+ 0.2
+
+
+ commons-logging
+ commons-logging
+
+
+
+
+ org.apache.axis
+ axis-jaxrpc
+ 1.4
+
+
+ org.apache.httpcomponents
+ httpclient
+
diff --git a/src/main/java/com/ann/demo/controller/TestController.java b/src/main/java/com/ann/demo/controller/TestController.java
index 7fded09..d81cbe6 100644
--- a/src/main/java/com/ann/demo/controller/TestController.java
+++ b/src/main/java/com/ann/demo/controller/TestController.java
@@ -8,6 +8,7 @@ import com.ann.demo.entity.filing.MessageSubordinate;
import com.ann.demo.entity.filing.dto.MessageDto;
import com.ann.demo.entity.filing.dto.PatientMainDto;
import com.ann.demo.service.AnalysisService;
+import com.ann.demo.service.CollectCheckService;
import com.ann.demo.utils.XMLUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
+import javax.annotation.Resource;
import java.util.Date;
import java.util.Objects;
@@ -30,6 +32,9 @@ public class TestController {
@Autowired
AnalysisService analysisService;
+ @Resource
+ private CollectCheckService collectCheckService;
+
@RequestMapping("/demo")
public String aa() {
return "demo";
@@ -61,4 +66,11 @@ public class TestController {
}
return "redirect:/demo";
}
+
+ @RequestMapping("/demo1")
+ @ResponseBody
+ public String demo1() {
+ collectCheckService.downFileWithCheck("123","100041535327","GZ002WWRQAZEUXP","http://kmcs.kingmed.com.cn:8890/km-platform-web/restful/fileDownload/0df10c5e-af85-4acd-b2df-c1628f77b59c@88f14792ee4a31129fa721f85e2068bb");
+ return "demo1";
+ }
}
diff --git a/src/main/java/com/ann/demo/entity/interfaceEntity/Patient.java b/src/main/java/com/ann/demo/entity/interfaceEntity/Patient.java
new file mode 100644
index 0000000..7662738
--- /dev/null
+++ b/src/main/java/com/ann/demo/entity/interfaceEntity/Patient.java
@@ -0,0 +1,19 @@
+package com.ann.demo.entity.interfaceEntity;
+
+
+public class Patient
+{
+ private String patientid;
+
+ public void setPatientid(String patientid){
+ this.patientid = patientid;
+ }
+ public String getPatientid(){
+ return this.patientid;
+ }
+
+ public Patient(String patientid) {
+ this.patientid = patientid;
+ }
+}
+
diff --git a/src/main/java/com/ann/demo/entity/interfaceEntity/Root.java b/src/main/java/com/ann/demo/entity/interfaceEntity/Root.java
new file mode 100644
index 0000000..4d2a6c5
--- /dev/null
+++ b/src/main/java/com/ann/demo/entity/interfaceEntity/Root.java
@@ -0,0 +1,76 @@
+package com.ann.demo.entity.interfaceEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Root
+{
+ private String collectorid;
+
+ private String ip;
+
+ private String assortid;
+
+ private Patient patient;
+
+ private List scanfiles;
+
+ private String scanusercode;
+
+ private String scanusername;
+
+ public Root(Scanfiles scanfiles,String masterId) {
+ List list = new ArrayList<>();
+ list.add(scanfiles);
+ this.collectorid = "10";
+ this.ip = "127.0.0.1";
+ this.assortid = "10";
+ this.patient = new Patient(masterId);
+ this.scanfiles = list;
+ this.scanusercode = "zwh";
+ this.scanusername = "zwh";
+ }
+
+ public void setCollectorid(String collectorid){
+ this.collectorid = collectorid;
+ }
+ public String getCollectorid(){
+ return this.collectorid;
+ }
+ public void setIp(String ip){
+ this.ip = ip;
+ }
+ public String getIp(){
+ return this.ip;
+ }
+ public void setAssortid(String assortid){
+ this.assortid = assortid;
+ }
+ public String getAssortid(){
+ return this.assortid;
+ }
+ public void setPatient(Patient patient){
+ this.patient = patient;
+ }
+ public Patient getPatient(){
+ return this.patient;
+ }
+ public void setScanfiles(List scanfiles){
+ this.scanfiles = scanfiles;
+ }
+ public List getScanfiles(){
+ return this.scanfiles;
+ }
+ public void setScanusercode(String scanusercode){
+ this.scanusercode = scanusercode;
+ }
+ public String getScanusercode(){
+ return this.scanusercode;
+ }
+ public void setScanusername(String scanusername){
+ this.scanusername = scanusername;
+ }
+ public String getScanusername(){
+ return this.scanusername;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ann/demo/entity/interfaceEntity/Scanfiles.java b/src/main/java/com/ann/demo/entity/interfaceEntity/Scanfiles.java
new file mode 100644
index 0000000..de87071
--- /dev/null
+++ b/src/main/java/com/ann/demo/entity/interfaceEntity/Scanfiles.java
@@ -0,0 +1,71 @@
+package com.ann.demo.entity.interfaceEntity;
+
+public class Scanfiles
+{
+ private int taskid;
+
+ private String filetitle;
+
+ private int filesource;
+
+ private int filestoragetype;
+
+ private int filetype;
+
+ private String downurl;
+
+ private String serialnum;
+
+ public Scanfiles(String filetitle,String downurl, String serialnum) {
+ this.taskid = -1;
+ this.filetitle = filetitle;
+ this.filesource = 1;
+ this.filestoragetype = 1;
+ this.filetype = 2;
+ this.downurl = downurl;
+ this.serialnum = serialnum;
+ }
+
+ public void setTaskid(int taskid){
+ this.taskid = taskid;
+ }
+ public int getTaskid(){
+ return this.taskid;
+ }
+ public void setFiletitle(String filetitle){
+ this.filetitle = filetitle;
+ }
+ public String getFiletitle(){
+ return this.filetitle;
+ }
+ public void setFilesource(int filesource){
+ this.filesource = filesource;
+ }
+ public int getFilesource(){
+ return this.filesource;
+ }
+ public void setFilestoragetype(int filestoragetype){
+ this.filestoragetype = filestoragetype;
+ }
+ public int getFilestoragetype(){
+ return this.filestoragetype;
+ }
+ public void setFiletype(int filetype){
+ this.filetype = filetype;
+ }
+ public int getFiletype(){
+ return this.filetype;
+ }
+ public void setDownurl(String downurl){
+ this.downurl = downurl;
+ }
+ public String getDownurl(){
+ return this.downurl;
+ }
+ public void setSerialnum(String serialnum){
+ this.serialnum = serialnum;
+ }
+ public String getSerialnum(){
+ return this.serialnum;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ann/demo/service/AnalysisService.java b/src/main/java/com/ann/demo/service/AnalysisService.java
index 69b801e..8a85fe6 100644
--- a/src/main/java/com/ann/demo/service/AnalysisService.java
+++ b/src/main/java/com/ann/demo/service/AnalysisService.java
@@ -10,6 +10,7 @@ import com.ann.demo.entity.filing.dto.PatientMainDto;
import com.ann.demo.entity.filing.ArchiveDetail;
import com.ann.demo.entity.interfaceEntity.ExamApply;
import com.ann.demo.entity.interfaceEntity.MessageLog;
+import com.ann.demo.utils.Base64Utils;
import com.ann.demo.utils.FileUtils;
import com.ann.demo.utils.PdfUtils;
import com.ann.demo.utils.XMLUtils;
@@ -19,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
+import javax.annotation.Resource;
import java.io.File;
import java.util.Date;
import java.util.Objects;
@@ -47,6 +49,8 @@ public class AnalysisService {
@Autowired
ArchiveDetailService archiveDetailService;
+ @Resource
+ private CollectCheckService collectCheckService;
/**
* 2019-7-8
* @Param xmlStr 需要解析的字符串
@@ -80,20 +84,28 @@ public class AnalysisService {
//System.out.println(messageDto.getReportAddress());
UUID uuid = UUID.randomUUID();
File pdfFile = FileUtils.createFile("pdfs", messageDto.getInpNo(), messageDto.getVisitId(), uuid.toString(), null);
- if(PdfUtils.base64StringToPDF(messageDto.getReportAddress(),pdfFile)){
- // 查询库中是否存在 如果存在就更新
- archiveDetail = archiveDetailService.isExit(archiveMasterId, messageDto.getType(), messageDto.getSource(), messageDto.getApplyId(),messageDto.getCheckReportId());
- if (archiveDetail == null) {
- archiveDetail = new ArchiveDetail(uuid.toString(),archiveMasterId, new Date(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId(),
- messageDto.getDetailType(),messageDto.getCheckReportId());
- archiveDetail.setPdfPath(pdfFile.getAbsolutePath());
- archiveDetailService.save(archiveDetail);
- }else{
- archiveDetail.setPdfPath(pdfFile.getAbsolutePath());
- archiveDetailService.save(archiveDetail);
+ if(Base64Utils.isBase64(messageDto.getReportAddress())) {
+ //是base64
+ if (!PdfUtils.base64StringToPDF(messageDto.getReportAddress(), pdfFile)) {
+ textContentTemp = "加密字节流转换pdf失败";
}
}else{
- textContentTemp = "加密字节流转换pdf失败";
+ //不是base64 2023-09-05新增,根据接口下载pdf
+ boolean downFileFlag = collectCheckService.downFileWithCheck(archiveMasterId,messageDto.getBarCode(),messageDto.getCheckReportId(), messageDto.getReportAddress());
+ if(!downFileFlag){
+ textContentTemp = "金域外送base64下载失败";
+ }
+ }
+ // 查询库中是否存在 如果存在就更新
+ archiveDetail = archiveDetailService.isExit(archiveMasterId, messageDto.getType(), messageDto.getSource(), messageDto.getApplyId(),messageDto.getCheckReportId());
+ if (archiveDetail == null) {
+ archiveDetail = new ArchiveDetail(uuid.toString(),archiveMasterId, new Date(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId(),
+ messageDto.getDetailType(),messageDto.getCheckReportId());
+ archiveDetail.setPdfPath(pdfFile.getAbsolutePath());
+ archiveDetailService.save(archiveDetail);
+ }else{
+ archiveDetail.setPdfPath(pdfFile.getAbsolutePath());
+ archiveDetailService.save(archiveDetail);
}
// 替换消息的pdf节点
String tempMessage = XMLUtils.replaceXpath(message, pdfFile.getAbsolutePath());
@@ -149,7 +161,6 @@ public class AnalysisService {
return outContent;
}
-
private String changeApply(ExamApply examApply,String interfaceName) throws Exception{
String textContent = null;
ExamApply examApplyTemp = examApplyService.findExamApply(examApply.getApplyId());
diff --git a/src/main/java/com/ann/demo/service/CollectCheckService.java b/src/main/java/com/ann/demo/service/CollectCheckService.java
new file mode 100644
index 0000000..661e194
--- /dev/null
+++ b/src/main/java/com/ann/demo/service/CollectCheckService.java
@@ -0,0 +1,268 @@
+package com.ann.demo.service;
+
+import com.alibaba.fastjson.JSON;
+import com.ann.demo.utils.HttpClientUtils;
+import com.ann.demo.utils.JsonUtils;
+import com.ann.demo.utils.Md5Utils;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.axis.client.Call;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.encoding.XMLType;
+
+import org.apache.axis.client.Service;
+import org.apache.axis.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author 曾文和
+ * @description: 外送报告采集类
+ * @createTime 2023/9/5 16:48
+ */
+@Component
+@Slf4j
+public class CollectCheckService {
+ private Map tokenCacheMap = new HashMap<>();
+
+ private String FILENAME = "fileName";
+ private String FILEBASE64 = "fileBase64";
+ @Value("${siteCode}")
+ private String siteCode;
+ @Value("${customerCode}")
+ private String customerCode;
+ @Value("${collectionLocation}")
+ private String collectionLocation;
+ @Value("${loginUrl}")
+ private String loginUrl;
+ @Value("${namespaceURI}")
+ private String namespaceURI;
+ @Value("${webServiceMethod}")
+ private String webServiceMethod;
+ @Value("${webServiceDownMethod}")
+ private String webServiceDownMethod;
+ @Value("${downfileUrl}")
+ private String downfileUrl;
+
+ public boolean downFileWithCheck(String masterId,String hospBarcode,String reportOdd,String fileUrl) {
+ //登录
+ String token = getTokenByCheckKey(siteCode, customerCode, collectionLocation);
+ //下载
+ return downFileWithCheck(masterId,hospBarcode,reportOdd,fileUrl,token);
+ }
+
+ /**
+ * 下载文件
+ * @param masterId
+ * @param hospBarcode
+ * @param reportOdd
+ * @param fileUrl
+ * @param token
+ * @return
+ */
+ private boolean downFileWithCheck(String masterId,String hospBarcode,String reportOdd,String fileUrl,String token){
+ //根据参数请求接口返回json数据
+ String result = reqInterfaceByParam(hospBarcode, reportOdd, fileUrl, token);
+ //解析返回json数据
+ Map map = analysisData(result);
+ //唯一文件码
+ String serialnum = hospBarcode + "_" + reportOdd;
+ //根据解析的数据调用下载
+ String reqResult = downFile(masterId,map,serialnum);
+ if(!StringUtils.isEmpty(reqResult)) {
+ String code = JsonUtils.getValueByKey(reqResult, "code");
+ if(!StringUtils.isEmpty(code) && "0".equals(code)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 根据解析的数据调用下载
+ * @param map
+ */
+ private String downFile(String masterId,Map map,String serialnum) {
+ if(!CollectionUtils.isEmpty(map)){
+ //设置下载参数
+ Map rootMap = setDownReqParams(masterId, map, serialnum);
+ //调用下载接口
+ String result = HttpClientUtils.doPost(downfileUrl,JSON.toJSONString(rootMap));
+ log.info("上传下载服务result:"+result);
+ return result;
+ }
+ return null;
+ }
+
+ /**
+ * 设置下载请求参数
+ * @param masterId
+ * @param map
+ * @param serialnum
+ * @return
+ */
+ private Map setDownReqParams(String masterId, Map map, String serialnum) {
+ //设置文件信息参数
+ Map scanfilesMap = new HashMap<>();
+ scanfilesMap.put("taskid",-1);
+ scanfilesMap.put("filetitle", map.get(FILENAME));
+ scanfilesMap.put("filesource",1);
+ scanfilesMap.put("filestoragetype",1);
+ scanfilesMap.put("filetype",2);
+ scanfilesMap.put("downurl", map.get(FILEBASE64));
+ scanfilesMap.put("serialnum", serialnum +"1");
+ List