Merge remote-tracking branch 'origin/master'

广东省中医_gdszy
宇宙皮皮娃 1 year ago
commit e1abd3bdbe

@ -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<List<SdRyBloodReportVO>> getBloodView(String inpatientNo, Integer admissTimes);
/**
*
* @param inpatientNo
* @param beginDate
* @param endDate +7
*/
List<SdRyLiangBiaoReportVO> getLinagBiaoReport(String inpatientNo, String beginDate, String endDate);
}

@ -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<SdRyLiangBiaoReportVO> getLinagBiaoReport(String inpatientNo, String beginDate, String endDate) {
String randomUuid = Func.randomUUID();
String param = "<Root>\n" +
"\t\t <FunCode>lbGetReport</FunCode>\n" +
"\t\t <patientid>" + inpatientNo + "</patientid>\n" +
"\t\t <begin_date>" + beginDate + "</begin_date>\n" +
"\t\t <end_date>" + endDate + "</end_date>\n" +
"\t </Root>";
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<SdRyLiangBiaoReportVO> 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<SdRyLiangBiaoReportVO> 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() +

@ -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;
}

@ -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;
}

@ -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<SdRyLiangBiaoReportVO> liangBiaoReports = shunDePeopleService.getLinagBiaoReport(inpatientNo, beginDate, endDate);
int size = 0;
if (Func.isNotEmpty(liangBiaoReports)) {
// 查出多个记录可能指的是同一个已经合并的文件只是描述了项目而已所以根据pdf路径去重唯一值和命名取文件名
List<String> 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);

@ -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<String> fileTitleSet = new LinkedHashSet<>();
Collections.addAll(fileTitleSet, fileTitles);
fileTitleSet.add(fileTitle);
System.out.println(String.join("|", fileTitleSet));
}
private void threePartyPushReports(ReportDto reportDto) {

@ -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);

@ -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:

Loading…
Cancel
Save