From 8c505bbad9d1e220746daa4f0842c396462b701b Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Tue, 25 Jun 2024 16:05:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E9=A1=BA=E5=BE=B7=E4=BA=BA=E5=8C=BB?= =?UTF-8?q?=E9=87=8F=E8=A1=A8=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/api/ShunDePeopleService.java | 8 +++ .../api/impl/ShunDePeopleServiceImpl.java | 69 ++++++++++++++++--- .../report/api/vo/SdRyLiangBiaoReportVO.java | 16 +++++ .../report/config/SdRyReportQueryConfig.java | 7 +- .../docus/server/report/job/ReportJob.java | 65 +++++++++++++++-- .../service/impl/ReportServiceImpl.java | 11 --- .../com/docus/server/report/util/XmlUtil.java | 2 + src/main/resources/bootstrap.yml | 9 ++- 8 files changed, 160 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/docus/server/report/api/vo/SdRyLiangBiaoReportVO.java diff --git a/src/main/java/com/docus/server/report/api/ShunDePeopleService.java b/src/main/java/com/docus/server/report/api/ShunDePeopleService.java index fa88daa..457a08b 100644 --- a/src/main/java/com/docus/server/report/api/ShunDePeopleService.java +++ b/src/main/java/com/docus/server/report/api/ShunDePeopleService.java @@ -3,6 +3,7 @@ package com.docus.server.report.api; import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.report.api.dto.*; import com.docus.server.report.api.vo.SdRyBloodReportVO; +import com.docus.server.report.api.vo.SdRyLiangBiaoReportVO; import java.util.List; @@ -78,7 +79,14 @@ public interface ShunDePeopleService { * @return 血液报告 */ CommonResult> getBloodView(String inpatientNo, Integer admissTimes); + /** + * 根据住院号和时间获取量表报告 + * @param inpatientNo 住院号 + * @param beginDate 开始日期 (入院日期) + * @param endDate 结束日期(出院日期+7天) + */ + List getLinagBiaoReport(String inpatientNo, String beginDate, String endDate); } 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 1def689..0855b56 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 @@ -14,6 +14,7 @@ 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.api.vo.SdRyLiangBiaoReportVO; import com.docus.server.report.client.JaxWsDynamicClient; import com.docus.server.report.config.SdRyReportQueryConfig; import com.docus.server.report.job.ReportJob; @@ -148,7 +149,7 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { String[] param = {functionName, inputString, functionType, caller}; RemoteCallResult remoteCallResult = new RemoteCallResult(); - remoteCallResult.setUrl(url+" | "+namespaceUri+" | "+operationName); + remoteCallResult.setUrl(url + " | " + namespaceUri + " | " + operationName); remoteCallResult.setRequest(Arrays.toString(param)); remoteCallResult.setDescription("根据检查流水和报告序列号,指定要获取的报告,PACS将生成PDF格式的报告,并将PDF文件的BASE64编码串返回。"); remoteCallResult.setKeyword(examNo + "_" + reportNo); @@ -163,7 +164,7 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { } remoteCallResult.setCallStatus(1); String base64 = reportJob.parsePacsGetBase64(result); - if(Func.isBlank(base64)){ + if (Func.isBlank(base64)) { remoteCallResult.setRemark("查询base64结果为空!"); remoteCallResult.setCallStatus(3); } @@ -171,7 +172,7 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { remoteCallResult.setCallEndTime(new Date()); try { remoteCallResultService.save(remoteCallResult); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } return result; @@ -184,7 +185,7 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { remoteCallResult.setCallEndTime(new Date()); try { remoteCallResultService.save(remoteCallResult); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } return null; @@ -194,11 +195,6 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { } } - public static void main(String[] args) { - SdNurseInsertSugarRequest request = new SdNurseInsertSugarRequest("10086", "1", "nur"); - String requestParam = Func.toJson(request); - System.out.println(requestParam); - } @Override public SdNurseInsertSugarResponse getNurseInsertSugarReport(SdNurseInsertSugarRequest request) { @@ -255,6 +251,61 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { } } + @Override + public List getLinagBiaoReport(String inpatientNo, String beginDate, String endDate) { + String randomUuid = Func.randomUUID(); + String param = "\n" + + "\t\t lbGetReport\n" + + "\t\t " + inpatientNo + "\n" + + "\t\t " + beginDate + "\n" + + "\t\t " + endDate + "\n" + + "\t "; + Object[] params = {param}; + String url = sdRyReportQueryConfig.getLiangbiaoUrl(); + String operationName = "GetHisData"; + try { + log.info("[" + randomUuid + "] " + "获取量表报告地址:" + url + "参数:" + param); + String result = JaxWsDynamicClient.send(url, null, operationName, params); + log.info("[" + randomUuid + "] " + "获取量表报告结果:" + result); + return parseLiangBiaoResult(result); + } catch (Exception ex) { + log.error("[" + randomUuid + "] " + "获取量表报告出错了," + ex.getMessage(), ex); + return new ArrayList<>(); + } + } + + + private static List parseLiangBiaoResult(String result) { + XmlUtil xmlUtil = XmlUtil.of(result); + Node node = xmlUtil.getNode("/Root/error_code"); + String errorCode = node.getTextContent(); + boolean success = "0".equals(errorCode); + if (!success) { + return new ArrayList<>(); + } + NodeList reportNodeList = xmlUtil.getNodeList("/Root/ResultData/Row"); + int length = reportNodeList.getLength(); + if (length <= 0) { + return new ArrayList<>(); + } + List list = new ArrayList<>(); + for (int i = 0; i < length; i++) { + SdRyLiangBiaoReportVO vo = new SdRyLiangBiaoReportVO(); + Node item = reportNodeList.item(i); + NodeList childNodes = item.getChildNodes(); + int childNodesLength = childNodes.getLength(); + for (int j = 0; j < childNodesLength; j++) { + Node childNode = childNodes.item(j); + if ("PDFUrl".equals(childNode.getNodeName())) { + String pdfUrl = childNode.getTextContent(); + vo.setFileUrl(pdfUrl); + } + } + list.add(vo); + } + return list; + } + private String organizationQuerySdRyInspectReportUrl(String reportQueryLisUrl) { return reportQueryLisUrl + "/query?uuid=" + IdUtil.standardUUID() + "&action=" + sdRyReportQueryConfig.getReportQueryInspectAction() + diff --git a/src/main/java/com/docus/server/report/api/vo/SdRyLiangBiaoReportVO.java b/src/main/java/com/docus/server/report/api/vo/SdRyLiangBiaoReportVO.java new file mode 100644 index 0000000..debb3d6 --- /dev/null +++ b/src/main/java/com/docus/server/report/api/vo/SdRyLiangBiaoReportVO.java @@ -0,0 +1,16 @@ +package com.docus.server.report.api.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author YongBin Wen + * @date 2024/6/25 14:18 + */ +@Data +@ApiModel("顺德人医量表报告单查询结果") +public class SdRyLiangBiaoReportVO { + @ApiModelProperty("文件下载地址") + private String fileUrl; +} 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 f1b0600..123c906 100644 --- a/src/main/java/com/docus/server/report/config/SdRyReportQueryConfig.java +++ b/src/main/java/com/docus/server/report/config/SdRyReportQueryConfig.java @@ -82,5 +82,10 @@ public class SdRyReportQueryConfig { @Value("${sdry.report-query-url.blood.defaultAssortType}") private String bloodDefaultAssortType; - + @Value("${sdry.report-query-url.liangbiao.collectorId}") + private String liangbiaoCollectorId; + @Value("${sdry.report-query-url.liangbiao.url}") + private String liangbiaoUrl; + @Value("${sdry.report-query-url.liangbiao.defaultAssortType}") + private String liangbiaoDefaultAssortType; } 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 4afbecd..3624853 100644 --- a/src/main/java/com/docus/server/report/job/ReportJob.java +++ b/src/main/java/com/docus/server/report/job/ReportJob.java @@ -14,6 +14,7 @@ import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.TaskDistributeService; import com.docus.server.report.api.dto.*; import com.docus.server.report.api.vo.SdRyBloodReportVO; +import com.docus.server.report.api.vo.SdRyLiangBiaoReportVO; import com.docus.server.report.config.SdRyCollectNurseInsertSugarConfig; import com.docus.server.report.config.SdRyReportQueryConfig; import com.docus.server.report.config.TaskValidateConfig; @@ -119,6 +120,59 @@ public class ReportJob { log.info("病案号:{},住院次数:{},输血报告单采集:{} 份", inpatientNo, admissTimes, Func.isEmpty(sdRyBloodReportVOList) ? 0 : sdRyBloodReportVOList.size()); } + /** + * 量表报告采集 + */ + @XxlJob("SdRyLiangbiaoCollectJob") + public void sdRyLiangbiaoCollectJob() { + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>量表采集JOB开始"); + String liangbiaoCollectorId = sdRyReportQueryConfig.getLiangbiaoCollectorId(); + String liangbiaoDefaultAssortType = sdRyReportQueryConfig.getLiangbiaoDefaultAssortType(); + ReportDownTwoDto reportDownTwoDto = taskDistributeService.getNoViewTaskByCollectorId(liangbiaoCollectorId); + if (reportDownTwoDto == null) { + return; + } + Long taskId = reportDownTwoDto.getTasks().get(0).getTaskId(); + String patientId = reportDownTwoDto.getPatient().getPatientId(); + String inpatientNo = reportDownTwoDto.getPatient().getInpatientNo(); + ReportHospitalTwoDto hospitalTwoDto = reportDownTwoDto.getHospitals().get(0); + String admissDateStr = hospitalTwoDto.getAdmissDate(); + String disDateStr = hospitalTwoDto.getDisDate(); + Integer admissTimes = hospitalTwoDto.getAdmissTimes(); + LocalDate admissDate = Func.parseDateTime(admissDateStr).toLocalDate(); + LocalDate disDate = Func.parseDateTime(disDateStr).toLocalDate(); + String beginDate = admissDate.toString(); + String endDate = disDate.plusDays(7).toString(); + List liangBiaoReports = shunDePeopleService.getLinagBiaoReport(inpatientNo, beginDate, endDate); + int size = 0; + if (Func.isNotEmpty(liangBiaoReports)) { + // 查出多个记录,可能指的是同一个已经合并的文件,只是描述了项目而已,所以根据pdf路径去重,唯一值和命名取文件名 + List fileUrls = liangBiaoReports.stream().map(SdRyLiangBiaoReportVO::getFileUrl).distinct().collect(Collectors.toList()); + ReportDto reportDto; + for (String fileUrl : fileUrls) { + String fileTitle = fileUrl.substring(fileUrl.lastIndexOf("/") + 1); + String serialnum = fileTitle; + reportDto = new ReportDto(); + reportDto.setSysFlag(liangbiaoCollectorId); + reportDto.setTaskId(taskId); + reportDto.setDownUrl(fileUrl); + reportDto.setFileTitle(fileTitle); + reportDto.setSerialnum(serialnum); + reportDto.setAssortId(ZdAssortConfig.getZdAssortId(liangbiaoDefaultAssortType)); + reportDto.setAdmisstimes(admissTimes); + reportDto.setInpatientNo(inpatientNo); + reportDto.setPatientId(patientId); + reportDto.setDowntype(1); + reportDto.setFileSource("1"); + reportDto.setFilestoragetype("1"); + reportService.report(reportDto); + } + size = fileUrls.size(); + } + log.info("病案号:{},住院次数:{},量表报告单采集:{} 份", inpatientNo, admissTimes, Func.isEmpty(liangBiaoReports) ? 0 : size); + } + + @XxlJob("SdRyLisCollectJob") public void sdRyLisCollectJob() { String reportQueryLisCollectorId = sdRyReportQueryConfig.getReportQueryLisCollectorId(); @@ -294,11 +348,12 @@ public class ReportJob { sendNisDelayVerifyMessage(patientId); } - }catch (Exception ex){ - log.error("移动护理采集出错了!"+ex.getMessage(),ex); + } catch (Exception ex) { + log.error("移动护理采集出错了!" + ex.getMessage(), ex); } } + /** * 保存延迟验证护理消息 */ @@ -313,8 +368,8 @@ public class ReportJob { LocalDateTime nextExecuteDateTime = LocalDateTime.now().plusSeconds(delaySeconds); String formatNextExecuteDateTime = Func.formatDateTime(nextExecuteDateTime); Date nextExecuteDate = Func.parseDate(formatNextExecuteDateTime, DateUtil.PATTERN_DATETIME); - if(Objects.isNull(message)){ - message=new DelayedMessages(); + if (Objects.isNull(message)) { + message = new DelayedMessages(); message.setId(idService.getDateSeq()); message.setMessageType(msgType); message.setKeyword(patientId); @@ -325,7 +380,7 @@ public class ReportJob { message.setRetries(0); message.setErrorMessage(""); delayedMessagesMapper.insert(message); - }else { + } else { message.setDelaySeconds(delaySeconds); message.setNextExecutionTime(nextExecuteDate); delayedMessagesMapper.updateById(message); 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 7bb4b9d..cacf72e 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 @@ -106,17 +106,6 @@ public class ReportServiceImpl implements ReportService { } } - public static void main(String[] args) { - String fileTitleSeparator = "|"; - String fileTitle = "a1"; - String lastFileName = "a0|a2"; - String[] fileTitles = lastFileName.split("\\|"); - HashSet fileTitleSet = new LinkedHashSet<>(); - Collections.addAll(fileTitleSet, fileTitles); - fileTitleSet.add(fileTitle); - System.out.println(String.join("|", fileTitleSet)); - } - private void threePartyPushReports(ReportDto reportDto) { diff --git a/src/main/java/com/docus/server/report/util/XmlUtil.java b/src/main/java/com/docus/server/report/util/XmlUtil.java index 6402465..ddbe210 100644 --- a/src/main/java/com/docus/server/report/util/XmlUtil.java +++ b/src/main/java/com/docus/server/report/util/XmlUtil.java @@ -18,6 +18,7 @@ package com.docus.server.report.util; import com.docus.core.util.Exceptions; import com.docus.core.util.IoUtil; +import com.docus.core.util.StringUtil; import org.springframework.lang.Nullable; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -93,6 +94,7 @@ public class XmlUtil { * @return XmlUtil */ public static XmlUtil of(String xmlStr) { + xmlStr = StringUtil.replace(xmlStr, "\u00A0", " "); StringReader sr = new StringReader(xmlStr.trim()); InputSource inputSource = new InputSource(sr); XmlUtil xmlUtil = create(inputSource); diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 8fb24ee..e98cecd 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -90,7 +90,14 @@ sdry: url: http://127.0.0.1:9314/hospital/sdRy/getBloodView # js-table-type 中配置的文件分段 defaultAssortType: blood - + # 量表 + liangbiao: + # 量表报告采集器队列 + collectorId: 1008611 + # 量表的 + url: http://192.168.8.251:8080/hiswscom/wsdl/IgetHisData?wsdl + # js-table-type 中配置的文件分段 + defaultAssortType: liangbiao docus: