From 4ff6177aa5743d9a6e307187c4a877406c20c368 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Wed, 7 Jun 2023 14:26:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=8A=A5=E5=91=8A=E5=88=86?= =?UTF-8?q?=E6=AE=B5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data-config/sdry-report-system.json | 4 + .../server/report/api/dto/ReportDto.java | 6 + .../config/SdRyReportHandledConfig.java | 56 +++++++++ .../report/config/SdRyReportQueryConfig.java | 4 - .../report/entity/AfReportRecordBuffer.java | 106 ++++++++++++++++++ .../docus/server/report/job/ReportJob.java | 4 +- .../service/impl/ReportServiceImpl.java | 7 +- .../webservice/impl/SdryReportServerImpl.java | 41 ++++--- src/main/resources/bootstrap.yml | 2 - 9 files changed, 207 insertions(+), 23 deletions(-) create mode 100644 data-config/sdry-report-system.json create mode 100644 src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java create mode 100644 src/main/java/com/docus/server/report/entity/AfReportRecordBuffer.java diff --git a/data-config/sdry-report-system.json b/data-config/sdry-report-system.json new file mode 100644 index 0000000..e5b5781 --- /dev/null +++ b/data-config/sdry-report-system.json @@ -0,0 +1,4 @@ +{ + "blocking": ["cs","yx","jc"], + "notHandled":["lis","bl","nh"] +} \ No newline at end of file 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 e9c188e..748e681 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 @@ -65,4 +65,10 @@ public class ReportDto { * 下载路径类型 1:url,2:base64,3:url base64,4:共享文件,5:本地文件base64 */ private Integer downtype=1; + + + /** + * 检查报告单号,用于顺德人医推送 报告信息和报告地址的关联 + */ + private String reportSn; } diff --git a/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java b/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java new file mode 100644 index 0000000..ab885a4 --- /dev/null +++ b/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java @@ -0,0 +1,56 @@ +package com.docus.server.report.config; + +import com.docus.server.report.util.TableJsonRead; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 应用业务配置 + * @author wyb + */ + +public class SdRyReportHandledConfig { + private final SdRyReportSystem sdRyReportSystem; + @Data + private static class SdRyReportSystem{ + /** + * 需要阻塞的报告来源系统 + */ + private List blocking = new ArrayList<>(); + /** + * 不处理的报告来源系统 + */ + private List notHandled = new ArrayList<>(); + } + public SdRyReportHandledConfig(){ + TableJsonRead jsonRead = new TableJsonRead(); + this.sdRyReportSystem= jsonRead.Read("data-config", "sdry-report-system.json", SdRyReportSystem.class); + } + public boolean isBlocking(String systemName){ + if(this.sdRyReportSystem!=null){ + List blocking = this.sdRyReportSystem.getBlocking(); + return blocking.contains(systemName); + } + return false; + } + + public boolean isNotHandled(String systemName){ + if(this.sdRyReportSystem!=null){ + List notHandled = this.sdRyReportSystem.getNotHandled(); + return notHandled.contains(systemName); + } + return false; + } + + public static void main(String[] args) { + SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig(); + System.out.println(sdRyReportHandledConfig.sdRyReportSystem); + System.out.println(sdRyReportHandledConfig.isNotHandled("lis")); + System.out.println(sdRyReportHandledConfig.isNotHandled("yx")); + System.out.println(sdRyReportHandledConfig.isBlocking("yx")); + System.out.println(sdRyReportHandledConfig.isBlocking("lis")); + } + +} diff --git a/src/main/java/com/docus/server/report/config/SdRyReportQueryConfig.java b/src/main/java/com/docus/server/report/config/SdRyReportQueryConfig.java index ff65da1..84542e8 100644 --- a/src/main/java/com/docus/server/report/config/SdRyReportQueryConfig.java +++ b/src/main/java/com/docus/server/report/config/SdRyReportQueryConfig.java @@ -24,8 +24,6 @@ public class SdRyReportQueryConfig { @Value("${sdry.report-query-url.lis.url:}") private String reportQueryLisUrl; - @Value("${sdry.report-query-url.lis.assortId:}") - private String reportQueryLisAssortId; @Value("${sdry.report-query-url.lis.action:}") private String reportQueryLisAction; @Value("${sdry.report-query-url.lis.accessKey:}") @@ -38,8 +36,6 @@ public class SdRyReportQueryConfig { @Value("${sdry.report-query-url.inspect.url:}") private String reportQueryInspectUrl; - @Value("${sdry.report-query-url.inspect.assortId:}") - private String reportQueryInspectAssortId; @Value("${sdry.report-query-url.inspect.action:}") private String reportQueryInspectAction; @Value("${sdry.report-query-url.inspect.accessKey:}") diff --git a/src/main/java/com/docus/server/report/entity/AfReportRecordBuffer.java b/src/main/java/com/docus/server/report/entity/AfReportRecordBuffer.java new file mode 100644 index 0000000..9ff7801 --- /dev/null +++ b/src/main/java/com/docus/server/report/entity/AfReportRecordBuffer.java @@ -0,0 +1,106 @@ +package com.docus.server.report.entity; + +import com.docus.server.report.api.dto.ReportDto; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 上报记录缓冲表,用于报告信息和地址分开推送时的等待 + */ +@Data +public class AfReportRecordBuffer implements Serializable { + + private static final long serialVersionUID = 1L; + /** + * id + */ + private Long id; + /** + * 住院号 + */ + private String inpatientNo; + + /** + * 住院流水号,记账号 + */ + private String jzh; + + /** + * 住院次数 + */ + private Integer admissTimes; + + /** + * 下载地址,多个使用 | 分隔 + */ + private String downUrl; + + /** + * 下载路径类型 1:url,2:base64,3:url base64,4:共享文件,5:本地文件base64 + */ + private Integer downType; + + /** + * 状态 0 未开始,可用于补偿,1 已发送下载 + */ + private Integer state; + + /** + * 报告唯一id + */ + private String serialnum; + + /** + * 报告来源 采集器标识 + */ + private String sysflag; + + /** + * 报告所属文件分段id + */ + private String zdAssortId; + + /** + * 记录创建时间 + */ + private Date createTime; + + /** + * 记录更新时间 + */ + private Date updateTime; + + + /** + * 报告名称 + */ + private String fileName; + /** + * 检查报告单号,用于顺德人医推送 报告信息和报告地址的关联 + */ + private String reportSn; + + + /** + * 阻塞状态 0:阻塞中 1:已通过 + */ + private Integer blocking; + + public AfReportRecordBuffer() { + } + + public AfReportRecordBuffer(ReportDto reportDto) { + this.jzh = reportDto.getJzh(); + this.admissTimes = reportDto.getAdmisstimes(); + this.inpatientNo = reportDto.getInpatientNo(); + this.downUrl = reportDto.getDownUrl(); + this.sysflag = reportDto.getSysFlag(); + this.zdAssortId = reportDto.getAssortId(); + this.serialnum = reportDto.getSerialnum(); + this.fileName = reportDto.getFileTitle(); + this.downType = reportDto.getDowntype(); + this.reportSn=reportDto.getReportSn(); + } +} \ No newline at end of file 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 ec6a653..1f24e2c 100644 --- a/src/main/java/com/docus/server/report/job/ReportJob.java +++ b/src/main/java/com/docus/server/report/job/ReportJob.java @@ -409,10 +409,10 @@ public class ReportJob { private List getLisReportBySdRyJxId(String sdRyReportPatientId, TBasic tBasic) { List list = new ArrayList<>(); - List zyLisReportBySdRyJxId = getZyLisReportBySdRyJxId(sdRyReportPatientId, tBasic); +// List zyLisReportBySdRyJxId = getZyLisReportBySdRyJxId(sdRyReportPatientId, tBasic); List mzLisReportBySdRyJxId = getMzLisReportBySdRyJxId(sdRyReportPatientId, tBasic); list.addAll(mzLisReportBySdRyJxId); - list.addAll(zyLisReportBySdRyJxId); +// list.addAll(zyLisReportBySdRyJxId); return list; } diff --git a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java index 5e4a31a..9d5a8a8 100644 --- a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java @@ -60,6 +60,8 @@ public class ReportServiceImpl implements ReportService { } private void threePartyPushReports(ReportDto reportDto) { + + String patientId = null; try { // 如果出现多条出错的情况,还是得保存收到的信息,人工干预处理 @@ -131,8 +133,9 @@ public class ReportServiceImpl implements ReportService { loop = false; } // 截取每一批 - List makeupTaskIds = taskIds.subList(startIndex, toIndex); - makeupTaskIds = afReportRecordMapper.getHasPatientIdTaskIdsByTaskIds(makeupTaskIds); + List makeupTaskIdsSub = taskIds.subList(startIndex, toIndex); + List makeupTaskIds = afReportRecordMapper.getHasPatientIdTaskIdsByTaskIds(makeupTaskIdsSub); + makeupTaskIdsSub.clear(); if (Func.isNotEmpty(makeupTaskIds)) { for (Long taskId : makeupTaskIds) { // 发布下载事件 diff --git a/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java b/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java index fdb6306..75bb37b 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java +++ b/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java @@ -289,6 +289,12 @@ public class SdryReportServerImpl implements IReportServer { } 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(); + } Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); String inpatientNo = inpatientNoNode.getNodeValue(); @@ -304,11 +310,11 @@ public class SdryReportServerImpl implements IReportServer { String eafNo = eafNoNode.getNodeValue(); String serialnum = reportFlag + "@" + eafNo; - Node assortIdNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); - String assortId = assortIdNode.getNodeValue(); +// Node assortIdNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); +// String assortId = assortIdNode.getNodeValue(); - Node sysFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); - String sysFlag = sysFlagNode.getNodeValue(); +// 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(); @@ -317,19 +323,27 @@ public class SdryReportServerImpl implements IReportServer { String downUrl = downUrlNode.getTextContent(); ReportDto reportDto = new ReportDto(); + reportDto.setReportSn(reportFlag); reportDto.setAdmisstimes(admissTimes); reportDto.setInpatientNo(inpatientNo); reportDto.setSerialnum(serialnum); reportDto.setFileTitle(fileTitle); reportDto.setDownUrl(downUrl); - reportDto.setAssortId(assortId); - reportDto.setSysFlag(sysFlag); + reportDto.setAssortId(zdAssortId); + reportDto.setSysFlag(sender); 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(); + } + Node inpatientNoNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); String inpatientNo = inpatientNoNode.getNodeValue(); @@ -344,11 +358,11 @@ public class SdryReportServerImpl implements IReportServer { String eafNo = eafNoNode.getNodeValue(); String serialnum = reportFlag + "@" + eafNo; - Node assortIdNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); - String assortId = assortIdNode.getNodeValue(); - - Node sysFlagNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); - String sysFlag = sysFlagNode.getNodeValue(); +// Node assortIdNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); +// String assortId = assortIdNode.getNodeValue(); +// +// 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(); @@ -358,13 +372,14 @@ public class SdryReportServerImpl implements IReportServer { ReportDto reportDto = new ReportDto(); + reportDto.setReportSn(reportFlag); reportDto.setAdmisstimes(admissTimes); reportDto.setInpatientNo(inpatientNo); reportDto.setSerialnum(serialnum); reportDto.setFileTitle(fileTitle); reportDto.setDownUrl(downUrl); - reportDto.setAssortId(assortId); - reportDto.setSysFlag(sysFlag); + reportDto.setAssortId(zdAssortId); + reportDto.setSysFlag(sender); reportDto.setFileSource("1"); reportDto.setFilestoragetype("1"); return reportDto; diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index c9e32ac..22f6dc2 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -55,7 +55,6 @@ sdry: report-query-url: # lis检验报告地址 和文件分段 lis: - assortId: lis collectorId: 4 url: http://127.0.0.1:9311/report/makeup/lisTest action: lisac @@ -63,7 +62,6 @@ sdry: interval: 1000 # 检查报告地址 inspect: - assortId: inspect collectorId: 3 url: http://127.0.0.1:9311/report/makeup/inspectTest action: inspectac