From 5404536caac3dbed87f2d775928d01126227252c Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Fri, 13 Oct 2023 15:04:02 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2pacs=20base64=E6=97=A5=E5=BF=97=E5=AD=98?= =?UTF-8?q?=E5=82=A8=EF=BC=8C=E6=A3=80=E6=9F=A5base64=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data-config/sdry-report-system.json | 15 ++- .../com/docus/server/AppRunBootstrap.java | 15 ++- .../common/entity/RemoteCallResult.java | 84 ++++++++++++++++ .../common/mapper/RemoteCallResultMapper.java | 18 ++++ .../service/RemoteCallResultService.java | 16 ++++ .../impl/RemoteCallResultServiceImpl.java | 53 +++++++++++ .../docus/server/common/util/FileUtil.java | 71 ++++++++++++++ .../api/impl/ShunDePeopleServiceImpl.java | 46 ++++++++- .../config/SdRyReportHandledConfig.java | 54 ++++++++--- .../docus/server/report/job/ReportJob.java | 4 +- ...IP1008InspectionReportAdditionHandler.java | 95 +++++++++++++++++-- ...HIP1009InspectionReportUpdatesHandler.java | 91 ++++++++++++++++-- .../mapper/RemoteCallResultMapper.xml | 11 +++ 13 files changed, 529 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/docus/server/common/entity/RemoteCallResult.java create mode 100644 src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java create mode 100644 src/main/java/com/docus/server/common/service/RemoteCallResultService.java create mode 100644 src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java create mode 100644 src/main/java/com/docus/server/common/util/FileUtil.java create mode 100644 src/main/resources/mapper/RemoteCallResultMapper.xml diff --git a/data-config/sdry-report-system.json b/data-config/sdry-report-system.json index e080057..2fa2536 100644 --- a/data-config/sdry-report-system.json +++ b/data-config/sdry-report-system.json @@ -1,4 +1,15 @@ { - "blocking": ["xdxt","yx","jc"], - "notHandled":["lis","bl","nh"] + "blocking": [ + "xdxt", + "yx", + "jc" + ], + "notHandled": [ + "lis", + "bl", + "nh" + ], + "fetchBase64": [ + "cta" + ] } \ No newline at end of file diff --git a/src/main/java/com/docus/server/AppRunBootstrap.java b/src/main/java/com/docus/server/AppRunBootstrap.java index 3fa4302..8cff404 100644 --- a/src/main/java/com/docus/server/AppRunBootstrap.java +++ b/src/main/java/com/docus/server/AppRunBootstrap.java @@ -7,6 +7,8 @@ import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.api.HospitalSubmitNodeServiceApi; import com.docus.server.api.dto.HospitalSubmitNodeLogAddDTO; import com.docus.server.api.enums.HospitalSubmitNodeEnum; +import com.docus.server.common.entity.RemoteCallResult; +import com.docus.server.common.service.RemoteCallResultService; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; @@ -29,7 +31,18 @@ public class AppRunBootstrap { System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); SpringApplication.run(AppRunBootstrap.class, args); } - + private static void test1(){ + RemoteCallResultService remoteCallResultService = SpringUtils.getBean(RemoteCallResultService.class); + StringBuilder b1=new StringBuilder(); + for (int i = 0; i < 1500; i++) { + b1.append(i); + } + String b1str = b1.toString(); + RemoteCallResult result = new RemoteCallResult(); + result.setRequest(b1str); + result.setResponse("b1str"); + remoteCallResultService.save(result); + } private static void test(){ HospitalSubmitNodeServiceApi hospitalSubmitNodeServiceApi = SpringUtils.getBean(HospitalSubmitNodeServiceApi.class); HospitalSubmitNodeLogAddDTO dto = new HospitalSubmitNodeLogAddDTO(); diff --git a/src/main/java/com/docus/server/common/entity/RemoteCallResult.java b/src/main/java/com/docus/server/common/entity/RemoteCallResult.java new file mode 100644 index 0000000..85f0e08 --- /dev/null +++ b/src/main/java/com/docus/server/common/entity/RemoteCallResult.java @@ -0,0 +1,84 @@ +package com.docus.server.common.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 涉及远程调用的一些过程信息 + * + * @author wyb + * @date 2023-10-13 + */ +@Data +public class RemoteCallResult implements Serializable { + + private static final long serialVersionUID = 1L; + + + private Long id; + + /** + * 关键词搜索 + */ + private String keyword; + + /** + * 地址 + */ + private String url; + + /** + * 请求头 + */ + private String header; + + /** + * 请求参数 + */ + private String request; + + /** + * 响应结果 + */ + private String response; + + /** + * 异常信息等备注 + */ + private String remark; + + /** + * 接口描述 + */ + private String description; + + /** + * 请求参数存储类型 0表,1本地磁盘 + */ + private Integer requestStorageType; + + /** + * 请求参数存储类型 0表,1本地磁盘 + */ + private Integer responseStorageType; + + /** + * 调用情况 1正常,2连接异常,3业务异常 + */ + private Integer callStatus; + + /** + * 调用开始时间 + */ + private Date callStartTime; + + /** + * 调用结束时间 + */ + private Date callEndTime; + + public RemoteCallResult() { + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java b/src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java new file mode 100644 index 0000000..0f43145 --- /dev/null +++ b/src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java @@ -0,0 +1,18 @@ +package com.docus.server.common.mapper; + +import com.docus.server.common.entity.RemoteCallResult; +import org.apache.ibatis.annotations.Param; + +/** + * 远程调用过程信息表 + * @author wyb + * + */ +public interface RemoteCallResultMapper { + /** + * 远程调用结果存储 + * @param remoteCallResult 远程调用结果 + * @return 保存结果 + */ + int save(@Param("result") RemoteCallResult remoteCallResult); +} diff --git a/src/main/java/com/docus/server/common/service/RemoteCallResultService.java b/src/main/java/com/docus/server/common/service/RemoteCallResultService.java new file mode 100644 index 0000000..cc1aedf --- /dev/null +++ b/src/main/java/com/docus/server/common/service/RemoteCallResultService.java @@ -0,0 +1,16 @@ +package com.docus.server.common.service; + +import com.docus.server.common.entity.RemoteCallResult; + +/** + * 远程调用存储服务业务接口 + * @author WYBDEV + */ +public interface RemoteCallResultService { + /** + * 远程调用结果存储 + * @param remoteCallResult 远程调用结果 + */ + void save(RemoteCallResult remoteCallResult); + +} diff --git a/src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java b/src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java new file mode 100644 index 0000000..687f4aa --- /dev/null +++ b/src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java @@ -0,0 +1,53 @@ +package com.docus.server.common.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.common.entity.RemoteCallResult; +import com.docus.server.common.mapper.RemoteCallResultMapper; +import com.docus.server.common.service.RemoteCallResultService; +import com.docus.server.common.util.FileUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.File; + +/** + * 远程调用存储服务业务实现 + * + * @author wyb + */ +@Service +public class RemoteCallResultServiceImpl implements RemoteCallResultService { + @Resource + private IdService idService; + @Resource + private RemoteCallResultMapper remoteCallResultMapper; + + private final static int SAVE_DISK_DATA_LENGTH = 1024; + + private final static String REMOTE_CALL_SAVE_PATH = FileUtil.currentPath() + File.separator + "remote-call"; + + @Override + public void save(RemoteCallResult remoteCallResult) { + remoteCallResult.setRequestStorageType(0); + remoteCallResult.setResponseStorageType(0); + + Long id = remoteCallResult.getId() == null ? idService.getDateSeq() : remoteCallResult.getId(); + remoteCallResult.setId(id); + String request = remoteCallResult.getRequest(); + String response = remoteCallResult.getResponse(); + if (Func.isNotBlank(request) && request.length() > SAVE_DISK_DATA_LENGTH) { + String saveReqPath = REMOTE_CALL_SAVE_PATH + File.separator + id + "_request"; + FileUtil.saveStrData(response, new File(saveReqPath)); + remoteCallResult.setRequestStorageType(1); + remoteCallResult.setRequest(saveReqPath); + } + if (Func.isNotBlank(response) && response.length() > SAVE_DISK_DATA_LENGTH) { + String saveRespPath = REMOTE_CALL_SAVE_PATH + File.separator + id + "_response"; + FileUtil.saveStrData(response, new File(saveRespPath)); + remoteCallResult.setResponseStorageType(1); + remoteCallResult.setResponse(saveRespPath); + } + remoteCallResultMapper.save(remoteCallResult); + } +} diff --git a/src/main/java/com/docus/server/common/util/FileUtil.java b/src/main/java/com/docus/server/common/util/FileUtil.java new file mode 100644 index 0000000..48ca817 --- /dev/null +++ b/src/main/java/com/docus/server/common/util/FileUtil.java @@ -0,0 +1,71 @@ +package com.docus.server.common.util; + +import com.docus.core.util.Func; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +/** + * 文件工具 + * + * @author WYBDEV + */ +public class FileUtil { + /** + * @return 取得当前jar路径 + */ + public static String currentPath() { + try { + File dir = new File("."); + return dir.getCanonicalPath(); + } catch (Exception e) { + return ""; + } + } + + /** + * 根据文件对象,创建上级目录 + * + * @param file 文件 + * @return 创建结果 + */ + public static boolean mkFileDirs(File file) { + if (!file.getParentFile().exists()) { + return file.getParentFile().mkdirs(); + } + return true; + } + + /** + * 保存字符数据至文件 + * + * @param data 数据 + * @param file 保存的文件 + */ + public static void saveStrData(String data, File file) { + mkFileDirs(file); + FileWriter fileWriter = null; + try { + fileWriter = new FileWriter(file); + fileWriter.write(data); + fileWriter.flush(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (fileWriter != null) { + try { + fileWriter.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + } + + public static void main(String[] args) throws Exception { + String path = currentPath() + File.separator + "remotecall" + File.separator + Func.randomUUID() + ".txt"; + File file = new File(path); + saveStrData("随便写一点东西", file); + } +} diff --git a/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java b/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java index 5ee9e1f..1def689 100644 --- a/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java +++ b/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java @@ -6,13 +6,17 @@ import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.docus.core.util.DateUtil; +import com.docus.core.util.ExceptionUtils; import com.docus.core.util.Func; import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.common.entity.RemoteCallResult; +import com.docus.server.common.service.RemoteCallResultService; import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.dto.*; import com.docus.server.report.api.vo.SdRyBloodReportVO; import com.docus.server.report.client.JaxWsDynamicClient; import com.docus.server.report.config.SdRyReportQueryConfig; +import com.docus.server.report.job.ReportJob; import com.docus.server.report.util.IdUtil; import com.docus.server.report.util.TableJsonRead; import com.docus.server.report.util.XmlUtil; @@ -22,10 +26,7 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -47,6 +48,10 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { @Resource private SdRyReportQueryConfig sdRyReportQueryConfig; + @Resource + private ReportJob reportJob; + @Resource + private RemoteCallResultService remoteCallResultService; @Override @@ -141,18 +146,51 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { // 参数3(FunctionType):传空,暂未启用 // 参数4(Caller):服务调用者名称,由PACS提供,验证令牌时 String[] param = {functionName, inputString, functionType, caller}; + + RemoteCallResult remoteCallResult = new RemoteCallResult(); + remoteCallResult.setUrl(url+" | "+namespaceUri+" | "+operationName); + remoteCallResult.setRequest(Arrays.toString(param)); + remoteCallResult.setDescription("根据检查流水和报告序列号,指定要获取的报告,PACS将生成PDF格式的报告,并将PDF文件的BASE64编码串返回。"); + remoteCallResult.setKeyword(examNo + "_" + reportNo); + remoteCallResult.setCallStartTime(new Date()); + + PACS_PDF_LOCK.lock(); try { String result = JaxWsDynamicClient.send(url, namespaceUri, operationName, param); if (interval > 0) { TimeUnit.MILLISECONDS.sleep(interval); } + remoteCallResult.setCallStatus(1); + String base64 = reportJob.parsePacsGetBase64(result); + if(Func.isBlank(base64)){ + remoteCallResult.setRemark("查询base64结果为空!"); + remoteCallResult.setCallStatus(3); + } + remoteCallResult.setResponse(result); + remoteCallResult.setCallEndTime(new Date()); + try { + remoteCallResultService.save(remoteCallResult); + }catch (Exception e){ + e.printStackTrace(); + } return result; } catch (Exception ex) { log.error(ex.getMessage(), ex); + String exceptionMessage = ExceptionUtils.getExceptionMessage(ex); + remoteCallResult.setRemark(ex.getMessage()); + remoteCallResult.setCallStatus(2); + remoteCallResult.setResponse(exceptionMessage); + remoteCallResult.setCallEndTime(new Date()); + try { + remoteCallResultService.save(remoteCallResult); + }catch (Exception e){ + e.printStackTrace(); + } return null; } finally { PACS_PDF_LOCK.unlock(); + } } diff --git a/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java b/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java index ab885a4..0d7bd2b 100644 --- a/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java +++ b/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java @@ -8,49 +8,73 @@ import java.util.List; /** * 应用业务配置 + * * @author wyb */ public class SdRyReportHandledConfig { - private final SdRyReportSystem sdRyReportSystem; + private final static TableJsonRead JSON_READ = new TableJsonRead(); + @Data - private static class SdRyReportSystem{ + private static class SdRyReportSystem { /** - * 需要阻塞的报告来源系统 + * 需要阻塞的报告来源系统,报告和描述信息分开推送 */ - private List blocking = new ArrayList<>(); + private List blocking = new ArrayList<>(); /** - * 不处理的报告来源系统 + * 不处理的报告来源系统,job处理 */ private List notHandled = new ArrayList<>(); + + /** + * 需要获取base64的报告来源系统,原job处理的直接移动过来 + */ + private List fetchBase64 = new ArrayList<>(); } - public SdRyReportHandledConfig(){ - TableJsonRead jsonRead = new TableJsonRead(); - this.sdRyReportSystem= jsonRead.Read("data-config", "sdry-report-system.json", SdRyReportSystem.class); + + public SdRyReportHandledConfig() { + } - public boolean isBlocking(String systemName){ - if(this.sdRyReportSystem!=null){ - List blocking = this.sdRyReportSystem.getBlocking(); + + public SdRyReportSystem getSdRyReportSystem() { + return JSON_READ.Read("data-config", "sdry-report-system.json", SdRyReportSystem.class); + } + + public boolean isBlocking(String systemName) { + SdRyReportSystem sdRyReportSystem = getSdRyReportSystem(); + if (sdRyReportSystem != null) { + List blocking = sdRyReportSystem.getBlocking(); return blocking.contains(systemName); } return false; } - public boolean isNotHandled(String systemName){ - if(this.sdRyReportSystem!=null){ - List notHandled = this.sdRyReportSystem.getNotHandled(); + public boolean isNotHandled(String systemName) { + SdRyReportSystem sdRyReportSystem = getSdRyReportSystem(); + if (sdRyReportSystem != null) { + List notHandled = sdRyReportSystem.getNotHandled(); return notHandled.contains(systemName); } return false; } + public boolean isFetchBase64(String systemName) { + SdRyReportSystem sdRyReportSystem = getSdRyReportSystem(); + if (sdRyReportSystem != null) { + List getBase64System = sdRyReportSystem.getFetchBase64(); + return getBase64System.contains(systemName); + } + return false; + } + public static void main(String[] args) { SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig(); - System.out.println(sdRyReportHandledConfig.sdRyReportSystem); + System.out.println(sdRyReportHandledConfig.getSdRyReportSystem()); System.out.println(sdRyReportHandledConfig.isNotHandled("lis")); System.out.println(sdRyReportHandledConfig.isNotHandled("yx")); System.out.println(sdRyReportHandledConfig.isBlocking("yx")); System.out.println(sdRyReportHandledConfig.isBlocking("lis")); + System.out.println(sdRyReportHandledConfig.isFetchBase64("cta")); } } diff --git a/src/main/java/com/docus/server/report/job/ReportJob.java b/src/main/java/com/docus/server/report/job/ReportJob.java index a237694..fb53254 100644 --- a/src/main/java/com/docus/server/report/job/ReportJob.java +++ b/src/main/java/com/docus/server/report/job/ReportJob.java @@ -657,7 +657,7 @@ public class ReportJob { } - private String saveBase64(String base64) { + public String saveBase64(String base64) { String dir = createBase64SaveDir(); String base64File = dir + File.separator + idService.getDateSeq() + ".txt"; try (FileWriter fileWriter = new FileWriter(base64File); @@ -691,7 +691,7 @@ public class ReportJob { } } - private static String parsePacsGetBase64(String xml) { + public String parsePacsGetBase64(String xml) { try { XmlUtil xmlUtil = XmlUtil.of(xml); Node codeNode = xmlUtil.getNode("/Result/Code"); diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java index c72eae2..a5a84f7 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java @@ -3,9 +3,11 @@ package com.docus.server.report.webservice.impl; import com.docus.core.util.DateUtil; import com.docus.core.util.Func; import com.docus.infrastructure.core.exception.BaseException; +import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.dto.ReportDto; import com.docus.server.report.config.SdRyReportHandledConfig; import com.docus.server.report.config.ZdAssortConfig; +import com.docus.server.report.job.ReportJob; import com.docus.server.report.service.ReportService; import com.docus.server.report.util.IdUtil; import com.docus.server.report.util.XmlUtil; @@ -20,6 +22,7 @@ import java.util.Date; /** * HIP1008-检查报告新增服务处理 + * * @author jiahsi */ @Service(WebserviceMessageType.HIP1008) @@ -27,6 +30,11 @@ import java.util.Date; public class HIP1008InspectionReportAdditionHandler implements WebserviceReceiveServerHandler { @Resource private ReportService reportService; + @Resource + private ShunDePeopleService shunDePeopleService; + @Resource + private ReportJob reportJob; + @Override public String handle(String receiveMessage) { @@ -46,11 +54,18 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive if (sdRyReportHandledConfig.isNotHandled(sysFlag)) { return insertSuccess(msgId, sender, receiver); } - if(sdRyReportHandledConfig.isBlocking(sysFlag)){ + if (sdRyReportHandledConfig.isBlocking(sysFlag)) { reportDto.setDownUrl(null); reportService.reportBuffer(reportDto); return insertSuccess(msgId, sender, receiver); } + if (sdRyReportHandledConfig.isFetchBase64(sender)) { + // base64的和job的检查报告统一处理逻辑,不然会出现重复 + reportDto = fetchBase64Parse(xmlUtil); + if (reportDto == null) { + return insertFailed(msgId, sender, receiver, "未获取到报告PDF文件BASE64信息"); + } + } reportService.report(reportDto); return insertSuccess(msgId, sender, receiver); } catch (BaseException baseException) { @@ -61,12 +76,72 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive return insertFailed(msgId, sender, receiver, "系统错误!"); } } + + private ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { + Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension"); + String updateBy = senderNode.getNodeValue(); + + + Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); + String inpatientNo = inpatientNoNode.getNodeValue(); + + Node admissTimesNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/item[@root='1.2.156.112635.1.2.1.7']/@extension"); + Integer admissTimes = Integer.valueOf(admissTimesNode.getNodeValue()); + + // 患者本次就诊唯一键:患者id【12位】+就诊次数 + Node visitSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.11']/@extension"); + String visitSn = visitSnNode.getNodeValue(); + + // 患者id + Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.0.2.2']/@extension"); + String patientSn = patientSnNode.getNodeValue(); + + // 检查报告单号标识 + Node reportFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.32']/@extension"); + String examReportSn = reportFlagNode.getNodeValue(); + //电子申请单编号 + Node eafNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.24']/@extension"); + String requestSn = eafNoNode.getNodeValue(); + + + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); + String reportName = fileTitleNode.getNodeValue(); + + + ReportDto reportDto = new ReportDto(); + reportDto.setAdmisstimes(admissTimes); + reportDto.setInpatientNo(inpatientNo); + // 确定报告唯一 报告单号+申请单号 + reportDto.setSerialnum(examReportSn + requestSn); + reportDto.setFileTitle(reportName); + reportDto.setVisitSn(visitSn); + reportDto.setPatientSn(patientSn); + + // 检查报告需要从Pacs接口获取base64 + String[] split = examReportSn.split("_"); + String fromPacs = shunDePeopleService.getBase64PdfFromPacs(split[0], split[1]); + // 从pacs打印出来 + String base64 = reportJob.parsePacsGetBase64(fromPacs); + if (Func.isBlank(base64)) { + return null; + } + String url = reportJob.saveBase64(base64); + reportDto.setDownUrl(url); + reportDto.setDowntype(5); + // 根据系统来分类 + reportDto.setAssortId(ZdAssortConfig.getZdAssortId(updateBy)); + reportDto.setSysFlag(updateBy); + reportDto.setFileSource("1"); + reportDto.setFilestoragetype("1"); + return reportDto; + } + public ReportDto getReportDtoByInspectionInsert(XmlUtil inspectionInsertXmlUtil) { Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension"); String sender = senderNode.getNodeValue(); String zdAssortId = ZdAssortConfig.getZdAssortId(sender); - if(Func.isBlank(zdAssortId)){ - zdAssortId=ZdAssortConfig.getOtherAssortId(); + if (Func.isBlank(zdAssortId)) { + zdAssortId = ZdAssortConfig.getOtherAssortId(); } Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); @@ -120,8 +195,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive public String insertSuccess(String msgId, String sender, String receiver) { String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -142,7 +217,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive "" + "" + "" + - "" + + "" + "" + "" + "" + @@ -193,8 +268,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -215,10 +290,10 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive "" + "" + "" + - "" + + "" + "" + "" + - "" + + "" + "" + "" + ""; diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java index f037ae7..65069d5 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java @@ -3,9 +3,11 @@ package com.docus.server.report.webservice.impl; import com.docus.core.util.DateUtil; import com.docus.core.util.Func; import com.docus.infrastructure.core.exception.BaseException; +import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.dto.ReportDto; import com.docus.server.report.config.SdRyReportHandledConfig; import com.docus.server.report.config.ZdAssortConfig; +import com.docus.server.report.job.ReportJob; import com.docus.server.report.service.ReportService; import com.docus.server.report.util.IdUtil; import com.docus.server.report.util.XmlUtil; @@ -20,6 +22,7 @@ import java.util.Date; /** * HIP1009-检查报告更新服务 + * * @author jiahsi */ @Service(WebserviceMessageType.HIP1009) @@ -27,6 +30,10 @@ import java.util.Date; public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveServerHandler { @Resource private ReportService reportService; + @Resource + private ShunDePeopleService shunDePeopleService; + @Resource + private ReportJob reportJob; @Override public String handle(String receiveMessage) { @@ -46,11 +53,18 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS if (sdRyReportHandledConfig.isNotHandled(sysFlag)) { return updateSuccess(msgId, sender, receiver); } - if(sdRyReportHandledConfig.isBlocking(sysFlag)){ + if (sdRyReportHandledConfig.isBlocking(sysFlag)) { reportDto.setDownUrl(null); reportService.reportBuffer(reportDto); return updateSuccess(msgId, sender, receiver); } + if (sdRyReportHandledConfig.isFetchBase64(sender)) { + // base64的和job的检查报告统一处理逻辑,不然会出现重复 + reportDto = fetchBase64Parse(xmlUtil); + if (reportDto == null) { + return updateFailed(msgId, sender, receiver, "未获取到报告PDF文件BASE64信息"); + } + } reportService.report(reportDto); return updateSuccess(msgId, sender, receiver); } catch (BaseException baseException) { @@ -62,14 +76,71 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS } } + private ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { + Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension"); + String updateBy = senderNode.getNodeValue(); + + + Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); + String inpatientNo = inpatientNoNode.getNodeValue(); + + Node admissTimesNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/item[@root='1.2.156.112635.1.2.1.7']/@extension"); + Integer admissTimes = Integer.valueOf(admissTimesNode.getNodeValue()); + + // 患者本次就诊唯一键:患者id【12位】+就诊次数 + Node visitSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.11']/@extension"); + String visitSn = visitSnNode.getNodeValue(); + + // 患者id + Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.0.2.2']/@extension"); + String patientSn = patientSnNode.getNodeValue(); + + // 检查报告单号标识 + Node reportFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.32']/@extension"); + String examReportSn = reportFlagNode.getNodeValue(); + //电子申请单编号 + Node eafNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.24']/@extension"); + String requestSn = eafNoNode.getNodeValue(); + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); + String reportName = fileTitleNode.getNodeValue(); + + + ReportDto reportDto = new ReportDto(); + reportDto.setAdmisstimes(admissTimes); + reportDto.setInpatientNo(inpatientNo); + // 确定报告唯一 报告单号+申请单号 + reportDto.setSerialnum(examReportSn + requestSn); + reportDto.setFileTitle(reportName); + reportDto.setVisitSn(visitSn); + reportDto.setPatientSn(patientSn); + + // 检查报告需要从Pacs接口获取base64 + String[] split = examReportSn.split("_"); + String fromPacs = shunDePeopleService.getBase64PdfFromPacs(split[0], split[1]); + // 从pacs打印出来 + String base64 = reportJob.parsePacsGetBase64(fromPacs); + if (Func.isBlank(base64)) { + return null; + } + String url = reportJob.saveBase64(base64); + reportDto.setDownUrl(url); + reportDto.setDowntype(5); + // 根据系统来分类 + reportDto.setAssortId(ZdAssortConfig.getZdAssortId(updateBy)); + reportDto.setSysFlag(updateBy); + reportDto.setFileSource("1"); + reportDto.setFilestoragetype("1"); + return reportDto; + } + public ReportDto getReportDtoByInspectionUpdate(XmlUtil inspectionUpdateXmlUtil) { Node senderNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension"); String sender = senderNode.getNodeValue(); String zdAssortId = ZdAssortConfig.getZdAssortId(sender); - if(Func.isBlank(zdAssortId)){ - zdAssortId=ZdAssortConfig.getOtherAssortId(); + if (Func.isBlank(zdAssortId)) { + zdAssortId = ZdAssortConfig.getOtherAssortId(); } Node inpatientNoNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); @@ -126,8 +197,8 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -148,7 +219,7 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS "" + "" + "" + - "" + + "" + "" + "" + "" + @@ -200,8 +271,8 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS public String updateFailed(String msgId, String sender, String receiver, String failedMessage) { String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -222,10 +293,10 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS "" + "" + "" + - "" + + "" + "" + "" + - "" + + "" + "" + "" + ""; diff --git a/src/main/resources/mapper/RemoteCallResultMapper.xml b/src/main/resources/mapper/RemoteCallResultMapper.xml new file mode 100644 index 0000000..6bc0223 --- /dev/null +++ b/src/main/resources/mapper/RemoteCallResultMapper.xml @@ -0,0 +1,11 @@ + + + + + + INSERT INTO `docus_archivefile`.`remote_call_result`(`id`, `keyword`, `url`, `header`, `request`, `response`, `remark`, `description`, `request_storage_type`, `response_storage_type`, `call_status`, `call_start_time`, `call_end_time`) + VALUES (#{result.id}, #{result.keyword}, #{result.url}, #{result.header}, #{result.request}, #{result.response}, #{result.remark}, #{result.description}, #{result.requestStorageType}, #{result.responseStorageType}, #{result.callStatus}, #{result.callStartTime}, #{result.callEndTime}) + + From 451f04c002f4909eb7cf62484fe9cc6a3e82e6a6 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Fri, 13 Oct 2023 17:31:41 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../webservice/impl/HIP1008InspectionReportAdditionHandler.java | 2 +- .../webservice/impl/HIP1009InspectionReportUpdatesHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java index a5a84f7..29781e4 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java @@ -93,7 +93,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive String visitSn = visitSnNode.getNodeValue(); // 患者id - Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.0.2.2']/@extension"); + Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/item[@root='2.16.156.10011.0.2.2']/@extension"); String patientSn = patientSnNode.getNodeValue(); // 检查报告单号标识 diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java index 65069d5..bca0905 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java @@ -92,7 +92,7 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS String visitSn = visitSnNode.getNodeValue(); // 患者id - Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.0.2.2']/@extension"); + Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/item[@root='2.16.156.10011.0.2.2']/@extension"); String patientSn = patientSnNode.getNodeValue(); // 检查报告单号标识 From f1e4a8298a92658bbc5f6fadf8ba28cfb0cb9c93 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Tue, 17 Oct 2023 11:24:02 +0800 Subject: [PATCH 3/7] =?UTF-8?q?pacs=20=E8=A1=A5=E5=81=BFjob=EF=BC=8C?= =?UTF-8?q?=E5=92=8C=E4=BF=A1=E6=81=AF=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/SdryPacsPrintExcept.java | 58 +++++++ .../mapper/SdryPacsPrintExceptMapper.java | 20 +++ .../service/SdryPacsPrintExceptService.java | 21 +++ .../impl/SdryPacsPrintExceptServiceImpl.java | 57 +++++++ .../docus/server/common/util/FileUtil.java | 30 +++- .../server/report/job/FetchPacsBase64Job.java | 160 ++++++++++++++++++ ...IP1008InspectionReportAdditionHandler.java | 15 +- ...HIP1009InspectionReportUpdatesHandler.java | 18 +- .../resources/mapper/SdryPacsPrintExcept.xml | 38 +++++ 9 files changed, 402 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java create mode 100644 src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java create mode 100644 src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java create mode 100644 src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java create mode 100644 src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java create mode 100644 src/main/resources/mapper/SdryPacsPrintExcept.xml diff --git a/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java b/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java new file mode 100644 index 0000000..9f97f7c --- /dev/null +++ b/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java @@ -0,0 +1,58 @@ +package com.docus.server.common.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 顺德人医pacs接口获取base64报告出错的记录 + * @author wyb + * @date 2023-10-17 + */ +@Data +public class SdryPacsPrintExcept implements Serializable { + + private static final long serialVersionUID = 1L; + + + private Long id; + + /** + * 病案号 + */ + private String inpatientNo; + + /** + * 住院次数 + */ + private Integer admissTimes; + + /** + * 记账号/住院流水号 + */ + private String jzh; + + /** + * 推送的消息一般比较大,不存数据库,存文件中,保存文件路径 + */ + private String reportMessagePath; + + /** + * 补偿状态,1 成功,其他未成功 + */ + private Integer state; + + /** + * 创建时间 + */ + private Date createTime; + + + /** + * 推送的标识 区分新增1008和更新1009 + */ + private String serviceFlag; + + public SdryPacsPrintExcept() {} +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java b/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java new file mode 100644 index 0000000..8e86139 --- /dev/null +++ b/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java @@ -0,0 +1,20 @@ +package com.docus.server.common.mapper; + +import com.docus.server.common.entity.SdryPacsPrintExcept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 顺德人医pacs接口获取base64报告出错的记录 mapper + * @author wyb + */ +public interface SdryPacsPrintExceptMapper { + int insert(@Param("except") SdryPacsPrintExcept pacsPrintExcept); + + SdryPacsPrintExcept getById(@Param("id") Long id); + + int compensateSuccuss(@Param("id") Long id); + + List getCompensateIds(@Param("beginDateTime") String beginDateTime); +} diff --git a/src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java b/src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java new file mode 100644 index 0000000..1049407 --- /dev/null +++ b/src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java @@ -0,0 +1,21 @@ +package com.docus.server.common.service; + +import com.docus.server.common.entity.SdryPacsPrintExcept; + +import java.util.List; + +/** + * 顺德pacs打印出错补偿的服务 + * @author WYBDEV + */ +public interface SdryPacsPrintExceptService { + + + int insert(SdryPacsPrintExcept pacsPrintExcept); + + SdryPacsPrintExcept getById(Long id); + + int compensateSuccuss(Long id); + + List getCompensateIds(String beginDateTime); +} diff --git a/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java b/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java new file mode 100644 index 0000000..55f8225 --- /dev/null +++ b/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java @@ -0,0 +1,57 @@ +package com.docus.server.common.service.impl; + +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.common.entity.SdryPacsPrintExcept; +import com.docus.server.common.mapper.SdryPacsPrintExceptMapper; +import com.docus.server.common.service.SdryPacsPrintExceptService; +import com.docus.server.common.util.FileUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 远程调用存储服务业务实现 + * + * @author wyb + */ +@Service +public class SdryPacsPrintExceptServiceImpl implements SdryPacsPrintExceptService { + @Resource + private IdService idService; + @Resource + private SdryPacsPrintExceptMapper sdryPacsPrintExceptMapper; + + + private final static String MESSAGE_SAVE_PATH = FileUtil.currentPath() + File.separator + "pacs-print-error"; + + @Override + public int insert(SdryPacsPrintExcept pacsPrintExcept) { + Long id = pacsPrintExcept.getId(); + id = id == null ? idService.getDateSeq() : id; + pacsPrintExcept.setId(id); + return sdryPacsPrintExceptMapper.insert(pacsPrintExcept); + } + + @Override + public SdryPacsPrintExcept getById(Long id) { + return sdryPacsPrintExceptMapper.getById(id); + } + + @Override + public int compensateSuccuss(Long id) { + return sdryPacsPrintExceptMapper.compensateSuccuss(id); + } + + @Override + public List getCompensateIds(String beginDateTime) { + List ids= sdryPacsPrintExceptMapper.getCompensateIds(beginDateTime); + if(Objects.isNull(ids)){ + return new ArrayList<>(); + } + return ids; + } +} diff --git a/src/main/java/com/docus/server/common/util/FileUtil.java b/src/main/java/com/docus/server/common/util/FileUtil.java index 48ca817..1a8b906 100644 --- a/src/main/java/com/docus/server/common/util/FileUtil.java +++ b/src/main/java/com/docus/server/common/util/FileUtil.java @@ -2,9 +2,7 @@ package com.docus.server.common.util; import com.docus.core.util.Func; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; /** * 文件工具 @@ -67,5 +65,31 @@ public class FileUtil { String path = currentPath() + File.separator + "remotecall" + File.separator + Func.randomUUID() + ".txt"; File file = new File(path); saveStrData("随便写一点东西", file); + String where = readStr(file); + System.out.println(where); + } + + public static String readStr(File file) { + BufferedReader bufferedReader = null; + try { + StringBuilder sb = new StringBuilder(); + bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); + String line; + while ((line = bufferedReader.readLine()) != null) { + sb.append(line); + } + return sb.toString(); + } catch (Exception ex){ + ex.printStackTrace(); + return null; + }finally { + if(bufferedReader!=null){ + try { + bufferedReader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } } diff --git a/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java new file mode 100644 index 0000000..a2c4659 --- /dev/null +++ b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java @@ -0,0 +1,160 @@ +package com.docus.server.report.job; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.infrastructure.redis.service.RedisOps; +import com.docus.server.common.entity.SdryPacsPrintExcept; +import com.docus.server.common.service.SdryPacsPrintExceptService; +import com.docus.server.common.util.FileUtil; +import com.docus.server.report.api.dto.ReportDto; +import com.docus.server.report.service.ReportService; +import com.docus.server.report.util.XmlUtil; +import com.docus.server.report.webservice.WebserviceMessageType; +import com.docus.server.report.webservice.impl.HIP1008InspectionReportAdditionHandler; +import com.docus.server.report.webservice.impl.HIP1009InspectionReportUpdatesHandler; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.File; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * pacs获取base64报告相关xxl-Job + * + * @author jiashi + */ +@Component +@Slf4j +public class FetchPacsBase64Job { + /** + * 从pacs获取pdf报告base64内容时间过长,异步使用队列,采用job获取 + */ + public final static String FETCH_PACS_BASE64_QUEUE_HIP1008 = "docus:sdry:pacsbase64:" + WebserviceMessageType.HIP1008; + public final static String FETCH_PACS_BASE64_QUEUE_HIP1009 = "docus:sdry:pacsbase64:" + WebserviceMessageType.HIP1009; + + @Resource + private ReportService reportService; + @Resource + private RedisOps redisOps; + @Resource + private HIP1008InspectionReportAdditionHandler hip1008; + @Resource + private HIP1009InspectionReportUpdatesHandler hip1009; + @Resource + private SdryPacsPrintExceptService sdryPacsPrintExceptService; + @Resource + private IdService idService; + + public static void main(String[] args) { + LocalDate localDate = LocalDate.now().plusMonths(-3); + String beginDateTime = localDate.toString() + " 00:00:00"; + System.out.println(beginDateTime); + } + + + @XxlJob("compensateFetchBase64ReportJob") + public void compensateFetchBase64ReportJob() { + LocalDate localDate = LocalDate.now().plusMonths(-3); + String beginDateTime = localDate.toString() + " 00:00:00"; + List compensateIds = sdryPacsPrintExceptService.getCompensateIds(beginDateTime); + log.info("补偿失败的pacs获取base64文件数据JOB开始,本次补偿 {} 条数据!", compensateIds.size()); + if (Func.isNotEmpty(compensateIds)) { + for (Long id : compensateIds) { + try { + compensateFetchBase64Report(id); + } catch (Exception ex) { + log.error("补偿失败的pacs,补偿id:" + id + " 补偿失败了。", ex); + } + } + } + log.info("补偿失败的pacs获取base64文件数据JOB结束!"); + } + + /** + * 检查报告1009更新需要获取base64报告的job + */ + @XxlJob("fetchBase64ReportHip1008Job") + public void fetchBase64ReportHip1008Job() { + String xml = redisOps.rPop(FETCH_PACS_BASE64_QUEUE_HIP1008); + ReportDto reportDto = parse(WebserviceMessageType.HIP1008, xml); + if (reportDto != null) { + reportService.report(reportDto); + return; + } + String filePath = FileUtil.currentPath() + File.separator + "fetch-base64-xml" + + File.separator + WebserviceMessageType.HIP1008 + + File.separator + Func.formatDate(LocalDate.now()) + + File.separator + idService.getDateSeq(); + FileUtil.saveStrData(xml, new File(filePath)); + ReportDto reportDto2 = hip1008.getReportDtoByInspectionInsert(XmlUtil.of(xml)); + SdryPacsPrintExcept pacsPrintExcept = new SdryPacsPrintExcept(); + pacsPrintExcept.setInpatientNo(reportDto2.getInpatientNo()); + pacsPrintExcept.setAdmissTimes(reportDto2.getAdmisstimes()); + pacsPrintExcept.setJzh(reportDto2.getJzh()); + pacsPrintExcept.setReportMessagePath(filePath); + pacsPrintExcept.setServiceFlag(WebserviceMessageType.HIP1008); + pacsPrintExcept.setState(0); + pacsPrintExcept.setCreateTime(new Date()); + sdryPacsPrintExceptService.insert(pacsPrintExcept); + } + + /** + * 检查报告1009更新需要获取base64报告的job + */ + @XxlJob("fetchBase64ReportHip1009Job") + public void fetchBase64ReportHip1009Job() { + String xml = redisOps.rPop(FETCH_PACS_BASE64_QUEUE_HIP1009); + ReportDto reportDto = parse(WebserviceMessageType.HIP1009, xml); + if (reportDto != null) { + reportService.report(reportDto); + return; + } + String filePath = FileUtil.currentPath() + File.separator + "fetch-base64-xml" + + File.separator + WebserviceMessageType.HIP1009 + + File.separator + Func.formatDate(LocalDate.now()) + + File.separator + idService.getDateSeq(); + ReportDto reportDto2 = hip1009.getReportDtoByInspectionUpdate(XmlUtil.of(xml)); + SdryPacsPrintExcept pacsPrintExcept = new SdryPacsPrintExcept(); + pacsPrintExcept.setInpatientNo(reportDto2.getInpatientNo()); + pacsPrintExcept.setAdmissTimes(reportDto2.getAdmisstimes()); + pacsPrintExcept.setJzh(reportDto2.getJzh()); + pacsPrintExcept.setReportMessagePath(filePath); + pacsPrintExcept.setServiceFlag(WebserviceMessageType.HIP1009); + pacsPrintExcept.setState(0); + pacsPrintExcept.setCreateTime(new Date()); + sdryPacsPrintExceptService.insert(pacsPrintExcept); + } + + private void compensateFetchBase64Report(Long id) { + // base64的和job的检查报告统一处理逻辑,不然会出现重复 + SdryPacsPrintExcept except = sdryPacsPrintExceptService.getById(id); + String messagePath = except.getReportMessagePath(); + String xml = FileUtil.readStr(new File(messagePath)); + if (Objects.isNull(xml)) { + log.error("文件:{},获取xml内容为空!", messagePath); + return; + } + ReportDto reportDto = parse(except.getServiceFlag(), xml); + if (reportDto != null) { + reportService.report(reportDto); + sdryPacsPrintExceptService.compensateSuccuss(id); + } + } + + private ReportDto parse(String serviceFlag, String xml) { + XmlUtil xmlUtil = XmlUtil.of(xml); + if (serviceFlag.equals(WebserviceMessageType.HIP1008)) { + return hip1008.fetchBase64Parse(xmlUtil); + } + if (serviceFlag.equals(WebserviceMessageType.HIP1009)) { + return hip1009.fetchBase64Parse(xmlUtil); + } + return null; + } + +} diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java index 29781e4..21633f7 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java @@ -3,10 +3,12 @@ package com.docus.server.report.webservice.impl; import com.docus.core.util.DateUtil; import com.docus.core.util.Func; import com.docus.infrastructure.core.exception.BaseException; +import com.docus.infrastructure.redis.service.RedisOps; import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.dto.ReportDto; import com.docus.server.report.config.SdRyReportHandledConfig; import com.docus.server.report.config.ZdAssortConfig; +import com.docus.server.report.job.FetchPacsBase64Job; import com.docus.server.report.job.ReportJob; import com.docus.server.report.service.ReportService; import com.docus.server.report.util.IdUtil; @@ -34,6 +36,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive private ShunDePeopleService shunDePeopleService; @Resource private ReportJob reportJob; + @Resource + private RedisOps redisOps; @Override @@ -48,6 +52,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive sender = xmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension").getNodeValue(); receiver = xmlUtil.getNode("/POOR_HIP1008/receiver/device/id/item/@extension").getNodeValue(); SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig(); + // 如果是获取base64的,为什么这里要解析,因为这里可以提前解析知道问题,base64另外抽出来的方法,会响应超时,为了做异步 ReportDto reportDto = getReportDtoByInspectionInsert(xmlUtil); verifyFileInfo(reportDto); String sysFlag = reportDto.getSysFlag(); @@ -60,11 +65,9 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive return insertSuccess(msgId, sender, receiver); } if (sdRyReportHandledConfig.isFetchBase64(sender)) { - // base64的和job的检查报告统一处理逻辑,不然会出现重复 - reportDto = fetchBase64Parse(xmlUtil); - if (reportDto == null) { - return insertFailed(msgId, sender, receiver, "未获取到报告PDF文件BASE64信息"); - } + // 过程很长,保存队列,job慢慢消费 + redisOps.lPush(FetchPacsBase64Job.FETCH_PACS_BASE64_QUEUE_HIP1008,receiveMessage); + return insertSuccess(msgId, sender, receiver); } reportService.report(reportDto); return insertSuccess(msgId, sender, receiver); @@ -77,7 +80,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive } } - private ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { + public ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension"); String updateBy = senderNode.getNodeValue(); diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java index bca0905..7162031 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java @@ -3,10 +3,12 @@ package com.docus.server.report.webservice.impl; import com.docus.core.util.DateUtil; import com.docus.core.util.Func; import com.docus.infrastructure.core.exception.BaseException; +import com.docus.infrastructure.redis.service.RedisOps; import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.dto.ReportDto; import com.docus.server.report.config.SdRyReportHandledConfig; import com.docus.server.report.config.ZdAssortConfig; +import com.docus.server.report.job.FetchPacsBase64Job; import com.docus.server.report.job.ReportJob; import com.docus.server.report.service.ReportService; import com.docus.server.report.util.IdUtil; @@ -34,6 +36,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS private ShunDePeopleService shunDePeopleService; @Resource private ReportJob reportJob; + @Resource + private RedisOps redisOps; + @Override public String handle(String receiveMessage) { @@ -47,6 +52,7 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS sender = xmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension").getNodeValue(); receiver = xmlUtil.getNode("/POOR_HIP1009/receiver/device/id/item/@extension").getNodeValue(); SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig(); + // 如果是获取base64的,为什么这里要解析,因为这里可以提前解析知道问题,base64另外抽出来的方法,会响应超时,为了做异步 ReportDto reportDto = getReportDtoByInspectionUpdate(xmlUtil); verifyFileInfo(reportDto); String sysFlag = reportDto.getSysFlag(); @@ -59,11 +65,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS return updateSuccess(msgId, sender, receiver); } if (sdRyReportHandledConfig.isFetchBase64(sender)) { - // base64的和job的检查报告统一处理逻辑,不然会出现重复 - reportDto = fetchBase64Parse(xmlUtil); - if (reportDto == null) { - return updateFailed(msgId, sender, receiver, "未获取到报告PDF文件BASE64信息"); - } + // 过程很长,保存队列,job慢慢消费 + redisOps.lPush(FetchPacsBase64Job.FETCH_PACS_BASE64_QUEUE_HIP1009,receiveMessage); + return updateSuccess(msgId, sender, receiver); } reportService.report(reportDto); return updateSuccess(msgId, sender, receiver); @@ -76,7 +80,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS } } - private ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { + + + public ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension"); String updateBy = senderNode.getNodeValue(); diff --git a/src/main/resources/mapper/SdryPacsPrintExcept.xml b/src/main/resources/mapper/SdryPacsPrintExcept.xml new file mode 100644 index 0000000..4817569 --- /dev/null +++ b/src/main/resources/mapper/SdryPacsPrintExcept.xml @@ -0,0 +1,38 @@ + + + + + + + INSERT INTO `docus_archivefile`.`sdry_pacs_print_except`(`id`, `inpatient_no`, `admiss_times`, `jzh`, `report_message_path`, `state`, `create_time`, `service_flag`) + VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag}); + + + update + `docus_archivefile`.`sdry_pacs_print_except` + set `state`=1 + where id=#{id} + + + + From 9b5ddbb727dea1e00af6ac38329bf4921119249f Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Tue, 17 Oct 2023 12:13:17 +0800 Subject: [PATCH 4/7] =?UTF-8?q?mapper=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/docus/server/AppRunBootstrap.java | 15 +++------------ .../common/mapper/SdryPacsPrintExceptMapper.java | 2 +- .../impl/SdryPacsPrintExceptServiceImpl.java | 7 +------ ...ntExcept.xml => SdryPacsPrintExceptMapper.xml} | 4 ++-- 4 files changed, 7 insertions(+), 21 deletions(-) rename src/main/resources/mapper/{SdryPacsPrintExcept.xml => SdryPacsPrintExceptMapper.xml} (95%) diff --git a/src/main/java/com/docus/server/AppRunBootstrap.java b/src/main/java/com/docus/server/AppRunBootstrap.java index 8cff404..066a783 100644 --- a/src/main/java/com/docus/server/AppRunBootstrap.java +++ b/src/main/java/com/docus/server/AppRunBootstrap.java @@ -7,8 +7,8 @@ import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.api.HospitalSubmitNodeServiceApi; import com.docus.server.api.dto.HospitalSubmitNodeLogAddDTO; import com.docus.server.api.enums.HospitalSubmitNodeEnum; -import com.docus.server.common.entity.RemoteCallResult; -import com.docus.server.common.service.RemoteCallResultService; +import com.docus.server.common.entity.SdryPacsPrintExcept; +import com.docus.server.common.service.SdryPacsPrintExceptService; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; @@ -32,16 +32,7 @@ public class AppRunBootstrap { SpringApplication.run(AppRunBootstrap.class, args); } private static void test1(){ - RemoteCallResultService remoteCallResultService = SpringUtils.getBean(RemoteCallResultService.class); - StringBuilder b1=new StringBuilder(); - for (int i = 0; i < 1500; i++) { - b1.append(i); - } - String b1str = b1.toString(); - RemoteCallResult result = new RemoteCallResult(); - result.setRequest(b1str); - result.setResponse("b1str"); - remoteCallResultService.save(result); + SpringUtils.getBean(SdryPacsPrintExceptService.class).insert(new SdryPacsPrintExcept()); } private static void test(){ HospitalSubmitNodeServiceApi hospitalSubmitNodeServiceApi = SpringUtils.getBean(HospitalSubmitNodeServiceApi.class); diff --git a/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java b/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java index 8e86139..4ea6b61 100644 --- a/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java +++ b/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java @@ -10,7 +10,7 @@ import java.util.List; * @author wyb */ public interface SdryPacsPrintExceptMapper { - int insert(@Param("except") SdryPacsPrintExcept pacsPrintExcept); + int saveExcept(@Param("except") SdryPacsPrintExcept pacsPrintExcept); SdryPacsPrintExcept getById(@Param("id") Long id); diff --git a/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java b/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java index 55f8225..6ae982c 100644 --- a/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java +++ b/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java @@ -4,11 +4,9 @@ import com.docus.infrastructure.redis.service.IdService; import com.docus.server.common.entity.SdryPacsPrintExcept; import com.docus.server.common.mapper.SdryPacsPrintExceptMapper; import com.docus.server.common.service.SdryPacsPrintExceptService; -import com.docus.server.common.util.FileUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -25,15 +23,12 @@ public class SdryPacsPrintExceptServiceImpl implements SdryPacsPrintExceptServic @Resource private SdryPacsPrintExceptMapper sdryPacsPrintExceptMapper; - - private final static String MESSAGE_SAVE_PATH = FileUtil.currentPath() + File.separator + "pacs-print-error"; - @Override public int insert(SdryPacsPrintExcept pacsPrintExcept) { Long id = pacsPrintExcept.getId(); id = id == null ? idService.getDateSeq() : id; pacsPrintExcept.setId(id); - return sdryPacsPrintExceptMapper.insert(pacsPrintExcept); + return sdryPacsPrintExceptMapper.saveExcept(pacsPrintExcept); } @Override diff --git a/src/main/resources/mapper/SdryPacsPrintExcept.xml b/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml similarity index 95% rename from src/main/resources/mapper/SdryPacsPrintExcept.xml rename to src/main/resources/mapper/SdryPacsPrintExceptMapper.xml index 4817569..cd60893 100644 --- a/src/main/resources/mapper/SdryPacsPrintExcept.xml +++ b/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml @@ -5,9 +5,9 @@ - + INSERT INTO `docus_archivefile`.`sdry_pacs_print_except`(`id`, `inpatient_no`, `admiss_times`, `jzh`, `report_message_path`, `state`, `create_time`, `service_flag`) - VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag}); + VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag}) update From af9c1504f59e76bd1932e058943f0d0c9a4f658e Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Tue, 17 Oct 2023 13:49:11 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=A1=A5=E5=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FetchPacsBase64ExceptController.java | 35 +++++++++++++++++++ .../server/report/job/FetchPacsBase64Job.java | 8 +++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java diff --git a/src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java b/src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java new file mode 100644 index 0000000..0e4bea6 --- /dev/null +++ b/src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java @@ -0,0 +1,35 @@ +package com.docus.server.report.controller; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.report.job.FetchPacsBase64Job; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@Slf4j +@Api(tags = "pacs获取base64异常相关接口") +@RestController +@RequestMapping("/api/fetchPacsBase64Except") +public class FetchPacsBase64ExceptController { + @Resource + private FetchPacsBase64Job fetchPacsBase64Job; + + + @ApiOperation(value = "根据异常数据表的id补偿") + @GetMapping("/compenstateById") + public CommonResult compenstateById(@Param("id") Long exceptId) { + fetchPacsBase64Job.compensateFetchBase64Report(exceptId); + return CommonResult.success("完成"); + } + + + + + +} diff --git a/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java index a2c4659..d7a8d88 100644 --- a/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java +++ b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java @@ -76,7 +76,7 @@ public class FetchPacsBase64Job { } /** - * 检查报告1009更新需要获取base64报告的job + * 检查报告1008新增需要获取base64报告的job */ @XxlJob("fetchBase64ReportHip1008Job") public void fetchBase64ReportHip1008Job() { @@ -130,9 +130,13 @@ public class FetchPacsBase64Job { sdryPacsPrintExceptService.insert(pacsPrintExcept); } - private void compensateFetchBase64Report(Long id) { + public void compensateFetchBase64Report(Long id) { // base64的和job的检查报告统一处理逻辑,不然会出现重复 SdryPacsPrintExcept except = sdryPacsPrintExceptService.getById(id); + if(Objects.isNull(except)){ + log.error("未找到id为:{} 的获取pacs异常的数据!",id); + return; + } String messagePath = except.getReportMessagePath(); String xml = FileUtil.readStr(new File(messagePath)); if (Objects.isNull(xml)) { From 973a15a5263af62480a9748c2e636eee4408cf5c Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Mon, 23 Oct 2023 15:24:21 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E5=8D=95=E5=8F=B7?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/docus/server/common/entity/SdryPacsPrintExcept.java | 5 +++++ src/main/java/com/docus/server/report/api/dto/ReportDto.java | 2 ++ .../java/com/docus/server/report/job/FetchPacsBase64Job.java | 2 ++ src/main/resources/mapper/SdryPacsPrintExceptMapper.xml | 4 ++-- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java b/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java index 9f97f7c..e59e0b3 100644 --- a/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java +++ b/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java @@ -48,6 +48,11 @@ public class SdryPacsPrintExcept implements Serializable { */ private Date createTime; + /** + * 检查报告单号 + */ + + private String examReportSn; /** * 推送的标识 区分新增1008和更新1009 diff --git a/src/main/java/com/docus/server/report/api/dto/ReportDto.java b/src/main/java/com/docus/server/report/api/dto/ReportDto.java index 708f3e4..485f5bc 100644 --- a/src/main/java/com/docus/server/report/api/dto/ReportDto.java +++ b/src/main/java/com/docus/server/report/api/dto/ReportDto.java @@ -84,6 +84,8 @@ public class ReportDto { */ private String reportSn; + + public ReportDto() { } diff --git a/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java index d7a8d88..14d3e90 100644 --- a/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java +++ b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java @@ -100,6 +100,7 @@ public class FetchPacsBase64Job { pacsPrintExcept.setServiceFlag(WebserviceMessageType.HIP1008); pacsPrintExcept.setState(0); pacsPrintExcept.setCreateTime(new Date()); + pacsPrintExcept.setExamReportSn(reportDto2.getReportSn()); sdryPacsPrintExceptService.insert(pacsPrintExcept); } @@ -126,6 +127,7 @@ public class FetchPacsBase64Job { pacsPrintExcept.setReportMessagePath(filePath); pacsPrintExcept.setServiceFlag(WebserviceMessageType.HIP1009); pacsPrintExcept.setState(0); + pacsPrintExcept.setExamReportSn(reportDto2.getReportSn()); pacsPrintExcept.setCreateTime(new Date()); sdryPacsPrintExceptService.insert(pacsPrintExcept); } diff --git a/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml b/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml index cd60893..7411c81 100644 --- a/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml +++ b/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml @@ -6,8 +6,8 @@ - INSERT INTO `docus_archivefile`.`sdry_pacs_print_except`(`id`, `inpatient_no`, `admiss_times`, `jzh`, `report_message_path`, `state`, `create_time`, `service_flag`) - VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag}) + INSERT INTO `docus_archivefile`.`sdry_pacs_print_except`(`id`, `inpatient_no`, `admiss_times`, `jzh`, `report_message_path`, `state`, `create_time`, `service_flag`,`exam_report_sn`) + VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag},#{except.examReportSn}) update From ba29c4a1fc59127ba34e52ecd7dc1e4c3bb3c16f Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Mon, 23 Oct 2023 16:25:42 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/HIP1008InspectionReportAdditionHandler.java | 8 ++++---- .../impl/HIP1009InspectionReportUpdatesHandler.java | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java index 21633f7..1ae51d7 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java @@ -107,8 +107,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive String requestSn = eafNoNode.getNodeValue(); - Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); - String reportName = fileTitleNode.getNodeValue(); + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String reportName = fileTitleNode.getTextContent(); ReportDto reportDto = new ReportDto(); @@ -167,8 +167,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive // Node sysFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); // String sysFlag = sysFlagNode.getNodeValue(); - Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); - String fileTitle = fileTitleNode.getNodeValue(); + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String fileTitle = fileTitleNode.getTextContent(); Node downUrlNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告图像']/report/entry[@displayName='检查报告图像URL地址']/observation/value"); String downUrl = downUrlNode.getTextContent(); diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java index 7162031..6520e8a 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java @@ -108,9 +108,8 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS Node eafNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.24']/@extension"); String requestSn = eafNoNode.getNodeValue(); - - Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); - String reportName = fileTitleNode.getNodeValue(); + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String reportName = fileTitleNode.getTextContent(); ReportDto reportDto = new ReportDto(); @@ -169,8 +168,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS // Node sysFlagNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); // String sysFlag = sysFlagNode.getNodeValue(); - Node fileTitleNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); - String fileTitle = fileTitleNode.getNodeValue(); + + Node fileTitleNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String fileTitle = fileTitleNode.getTextContent(); Node downUrlNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告图像']/report/entry[@displayName='检查报告图像URL地址']/observation/value"); String downUrl = downUrlNode.getTextContent();