lis报告数据转换

collector-LIS
wyb 2 years ago
parent f9a405d915
commit 4bf82a503a

@ -2,15 +2,21 @@ package com.docus.server.collect.collector;
import com.docus.core.util.Func;
import com.docus.server.collect.entity.TBasic;
import com.docus.server.collect.enums.DownWayEnum;
import com.docus.server.collect.service.FileReportService;
import com.docus.server.collect.service.dto.ReportFileInfoDTO;
import com.docus.server.collect.util.JaxWsDynamicClientUtil;
import com.docus.server.collect.util.XmlUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
*
@ -21,6 +27,10 @@ import java.time.LocalDateTime;
public class LisSystemCollector{
@Value("${docus.report.lis.url}")
private String url;
@Value("${docus.report.lis.assortId}")
private String assortId;
@Value("${docus.report.lis.sysFlag}")
private String sysFlag;
@Value("${docus.report.lis.method}")
private String method;
@Value("${docus.report.lis.namespaceUri:}")
@ -37,8 +47,21 @@ public class LisSystemCollector{
*/
public void collect(TBasic basic, String beginDateTime, String endDateTime){
String collectData = collectData(basic, beginDateTime, endDateTime);
ReportFileInfoDTO reportFileInfoDTO = LisSystemCollectConverter.convert(collectData);
fileReportService.saveDownloadTaskAndReport(reportFileInfoDTO);
List<ReportFileInfoDTO> reportFileInfoDTOList = LisSystemCollectConverter.convert(collectData);
for (ReportFileInfoDTO reportFileInfoDTO : reportFileInfoDTOList) {
if(!isBelongToPatient(reportFileInfoDTO,basic)){
continue;
}
reportFileInfoDTO.setPatientId(basic.getPatientId());
reportFileInfoDTO.setAssortId(assortId);
reportFileInfoDTO.setSysFlag(sysFlag);
fileReportService.saveDownloadTaskAndReport(reportFileInfoDTO);
}
}
private boolean isBelongToPatient(ReportFileInfoDTO reportFileInfoDTO, TBasic basic) {
// todo 验证报告是否属于患者,暂时描述说查询条件是患者唯一,不需要实现
return true;
}
public String collectData(TBasic basic,String beginDateTime,String endDateTime){
@ -118,11 +141,173 @@ public class LisSystemCollector{
* @param lisSystemCollectData
* @return
*/
public static ReportFileInfoDTO convert(String lisSystemCollectData) {
//todo 转换未实现 2023年9月1日15:49:45 2023-9-4
return null;
public static List<ReportFileInfoDTO> convert(String lisSystemCollectData) {
XmlUtil xmlUtil = XmlUtil.of(lisSystemCollectData);
List<ReportFileInfoDTO> list= new ArrayList<>();
NodeList reportInfoNodeList = xmlUtil.getNodeList("/Response/MsgInfo/Msg/ReportInfo");
if(reportInfoNodeList!=null && reportInfoNodeList.getLength()>0){
int length = reportInfoNodeList.getLength();
for (int i = 0; i < length; i++) {
Node item = reportInfoNodeList.item(i);
NodeList childNodes = item.getChildNodes();
int childNodesLength = childNodes.getLength();
String fileTitle=null;
String serialNum=null;
String downUrl=null;
for (int j = 0; j < childNodesLength; j++) {
Node childNodeItem = childNodes.item(j);
if ("SAMPLE_TYPE_NAME".equals(childNodeItem.getNodeName())) {
fileTitle=childNodeItem.getTextContent();
}
// if ("TEST_CATEG_NAME".equals(childNodeItem.getNodeName())) {
// fileTitle=childNodeItem.getTextContent();
// }
if ("SAMPLE_NO".equals(childNodeItem.getNodeName())) {
serialNum=childNodeItem.getTextContent();
}
if ("REPORT_PDF_URL".equals(childNodeItem.getNodeName())) {
downUrl=childNodeItem.getTextContent();
}
}
ReportFileInfoDTO fileInfoDTO = new ReportFileInfoDTO();
fileInfoDTO.setFileTitle(fileTitle);
fileInfoDTO.setSerialNum(serialNum);
fileInfoDTO.setDownUrl(downUrl);
fileInfoDTO.setDownWayEnum(DownWayEnum.HTTP);
fileInfoDTO.setIp("docus-collect-gdszy");
fileInfoDTO.setUserName("LIS采集服务");
fileInfoDTO.setReportUserFullName("LIS采集服务");
fileInfoDTO.setTaskId(-1L);
list.add(fileInfoDTO);
}
}
return list;
}
}
public static void main(String[] args) {
String data="<Response>\n" +
" <RetInfo>\n" +
" <RetCode>0</RetCode>\n" +
" <RetCon>成功</RetCon>\n" +
" </RetInfo>\n" +
" <MsgInfo>\n" +
" <Msg>\n" +
" <HeadInfo>\n" +
" <MI_CODE>44A003</MI_CODE>\n" +
" <MI_NAME>广东省中医院</MI_NAME>\n" +
" <MI_EN_NAME>\n" +
" </MI_EN_NAME>\n" +
" <MI_ADDR>\n" +
" </MI_ADDR>\n" +
" <MI_ADDR_ZIP_CODE>\n" +
" </MI_ADDR_ZIP_CODE>\n" +
" <MI_PHONE_NO>\n" +
" </MI_PHONE_NO>\n" +
" </HeadInfo>\n" +
" <PatInfo>\n" +
" <VUID>L560966</VUID>\n" +
" <OUTHOSP_INDEX_NO>\n" +
" </OUTHOSP_INDEX_NO>\n" +
" <OUTHOSP_NO>\n" +
" </OUTHOSP_NO>\n" +
" <INHOSP_INDEX_NO>L560966</INHOSP_INDEX_NO>\n" +
" <INHOSP_NO>70120410</INHOSP_NO>\n" +
" <EMPI_ID>L560966</EMPI_ID>\n" +
" <PAT_NAME>等等</PAT_NAME>\n" +
" <AGE>84岁</AGE>\n" +
" <PHYSI_SEX_CODE>1</PHYSI_SEX_CODE>\n" +
" <PHYSI_SEX_NAME>女</PHYSI_SEX_NAME>\n" +
" <TEST_PAT_SOURCE_CODE>IN</TEST_PAT_SOURCE_CODE>\n" +
" <TEST_PAT_SOURCE_NAME>住院</TEST_PAT_SOURCE_NAME>\n" +
" </PatInfo>\n" +
" <ReportInfo>\n" +
" <SAMPLE_NO>20190928G0140001</SAMPLE_NO>\n" +
" <ORDER_NO>\n" +
" </ORDER_NO>\n" +
" <REPORT_NO>100026912200</REPORT_NO>\n" +
" <REPORT_PDF_URL>httt://nbplus/diaomao.pdf\n" +
" </REPORT_PDF_URL>\n" +
" <TEST_CATEG_CODE>LIS5149</TEST_CATEG_CODE>\n" +
" <TEST_CATEG_NAME>离子4项</TEST_CATEG_NAME>\n" +
" <SAMPLE_TYPE_CODE>LIS2860</SAMPLE_TYPE_CODE>\n" +
" <SAMPLE_TYPE_NAME>静脉血</SAMPLE_TYPE_NAME>\n" +
" <HOSPITAL_DISTRICT_CODE>A001</HOSPITAL_DISTRICT_CODE>\n" +
" <HOSPITAL_DISTRICT_NAME>\n" +
" </HOSPITAL_DISTRICT_NAME>\n" +
" <APPLY_DEPT_CODE>966</APPLY_DEPT_CODE>\n" +
" <APPLY_DEPT_NAME>测试科</APPLY_DEPT_NAME>\n" +
" <APPLY_DR_CODE>966</APPLY_DR_CODE>\n" +
" <APPLY_DR_NAME>测试科</APPLY_DR_NAME>\n" +
" <EXECUT_DEPT_CODE>\n" +
" </EXECUT_DEPT_CODE>\n" +
" <EXECUT_DEPT_NAME>\n" +
" </EXECUT_DEPT_NAME>\n" +
" <SAMPLE_BODYPART>\n" +
" </SAMPLE_BODYPART>\n" +
" <MICROBE_TEST_FLAG>\n" +
" </MICROBE_TEST_FLAG>\n" +
" <REPORT_NOTE>\n" +
" </REPORT_NOTE>\n" +
" <APPLY_DATETIME>2019-09-29 01:10:46</APPLY_DATETIME>\n" +
" <COLLECTION_DATETIME>2019-09-28 22:17:29</COLLECTION_DATETIME>\n" +
" <RECEIVE_DATETIME>2019-09-28 22:23:55</RECEIVE_DATETIME>\n" +
" <EXECUT_DATETIME>2019-09-28 22:23:56</EXECUT_DATETIME>\n" +
" <REPORT_APPROVAL_DATETIME>2019-09-28 22:27:15</REPORT_APPROVAL_DATETIME>\n" +
" <EXECUT_DR_CODE>3515</EXECUT_DR_CODE>\n" +
" <EXECUT_DR_NAME>韩光</EXECUT_DR_NAME>\n" +
" <PROOF_DR_CODE>3333</PROOF_DR_CODE>\n" +
" <PROOF_DR_NAME>吴晓宾</PROOF_DR_NAME>\n" +
" <REPORT_DR_CODE>3333</REPORT_DR_CODE>\n" +
" <REPORT_DR_NAME>吴晓宾</REPORT_DR_NAME>\n" +
" <CLINIC_DIAG_SIGNIFICANCE>C93.100||慢性单核细胞白血病</CLINIC_DIAG_SIGNIFICANCE>\n" +
" </ReportInfo>\n" +
" <ReportInfo>\n" +
" <SAMPLE_NO>20190928G0140002</SAMPLE_NO>\n" +
" <ORDER_NO>1121|3232</ORDER_NO>\n" +
" <REPORT_NO>100026912300</REPORT_NO>\n" +
" <REPORT_PDF_URL>\n" +
" </REPORT_PDF_URL>\n" +
" <TEST_CATEG_CODE>LIS5080</TEST_CATEG_CODE>\n" +
" <TEST_CATEG_NAME>肝功2项</TEST_CATEG_NAME>\n" +
" <SAMPLE_TYPE_CODE>LIS2860</SAMPLE_TYPE_CODE>\n" +
" <SAMPLE_TYPE_NAME>静脉血</SAMPLE_TYPE_NAME>\n" +
" <HOSPITAL_DISTRICT_CODE>A001</HOSPITAL_DISTRICT_CODE>\n" +
" <HOSPITAL_DISTRICT_NAME>\n" +
" </HOSPITAL_DISTRICT_NAME>\n" +
" <APPLY_DEPT_CODE>966</APPLY_DEPT_CODE>\n" +
" <APPLY_DEPT_NAME>测试科</APPLY_DEPT_NAME>\n" +
" <APPLY_DR_CODE>966</APPLY_DR_CODE>\n" +
" <APPLY_DR_NAME>测试科</APPLY_DR_NAME>\n" +
" <EXECUT_DEPT_CODE>\n" +
" </EXECUT_DEPT_CODE>\n" +
" <EXECUT_DEPT_NAME>\n" +
" </EXECUT_DEPT_NAME>\n" +
" <SAMPLE_BODYPART>\n" +
" </SAMPLE_BODYPART>\n" +
" <MICROBE_TEST_FLAG>\n" +
" </MICROBE_TEST_FLAG>\n" +
" <REPORT_NOTE>\n" +
" </REPORT_NOTE>\n" +
" <APPLY_DATETIME>2019-09-29 10:01:55</APPLY_DATETIME>\n" +
" <COLLECTION_DATETIME>2019-09-28 22:17:41</COLLECTION_DATETIME>\n" +
" <RECEIVE_DATETIME>2019-09-28 22:24:12</RECEIVE_DATETIME>\n" +
" <EXECUT_DATETIME>2019-09-28 22:24:12</EXECUT_DATETIME>\n" +
" <REPORT_APPROVAL_DATETIME>2019-09-28 22:27:08</REPORT_APPROVAL_DATETIME>\n" +
" <EXECUT_DR_CODE>3515</EXECUT_DR_CODE>\n" +
" <EXECUT_DR_NAME>韩光</EXECUT_DR_NAME>\n" +
" <PROOF_DR_CODE>3333</PROOF_DR_CODE>\n" +
" <PROOF_DR_NAME>吴晓宾</PROOF_DR_NAME>\n" +
" <REPORT_DR_CODE>3333</REPORT_DR_CODE>\n" +
" <REPORT_DR_NAME>吴晓宾</REPORT_DR_NAME>\n" +
" <CLINIC_DIAG_SIGNIFICANCE>C93.100||慢性单核细胞白血病</CLINIC_DIAG_SIGNIFICANCE>\n" +
" </ReportInfo>\n" +
" </Msg>\n" +
" </MsgInfo>\n" +
"</Response>\n";
System.out.println(LisSystemCollectConverter.convert(data));
}
}

@ -1,13 +1,18 @@
package com.docus.server.collect.controller;
import com.docus.core.util.Func;
import com.docus.infrastructure.web.api.CommonResult;
import com.docus.server.collect.collector.LisSystemCollector;
import com.docus.server.collect.entity.TBasic;
import com.docus.server.collect.feign.api.GdSzyCollectServiceApi;
import com.docus.server.collect.infrastructure.dao.DownloadTaskDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author WYBDEV
*/
@ -17,10 +22,23 @@ import org.springframework.web.bind.annotation.RestController;
public class CollectController implements GdSzyCollectServiceApi {
@Autowired
private LisSystemCollector lisSystemCollector;
@Autowired
private DownloadTaskDao downloadTaskDao;
@Override
public CommonResult<String> lisSystemCollect() {
lisSystemCollector.collect(null, null, null);
TBasic basic = new TBasic();
List<TBasic> basicInfo = downloadTaskDao.getBasicInfo(basic);
if(Func.isEmpty(basicInfo) || basicInfo.size()>1){
log.error("采集失败,基础数据匹配失败!");
return CommonResult.failed("采集失败,基础数据匹配失败!");
}
TBasic tBasic = basicInfo.get(0);
if(Func.isBlank(tBasic.getAdmissDate()) || Func.isBlank(tBasic.getDisDate())){
log.error("采集失败,患者住院或者出院时间为空!");
return CommonResult.failed("采集失败,患者住院或者出院时间为空!");
}
lisSystemCollector.collect(tBasic, tBasic.getAdmissDate(), tBasic.getDisDate());
return CommonResult.success("采集完成!");
}
}

@ -44,6 +44,5 @@ public class TBasic {
this.patientId = fileInfoDTO.getPatientId();
this.inpatientNo = fileInfoDTO.getInpatientNo();
this.admissTimes = fileInfoDTO.getAdmisstimes();
;
}
}

@ -51,6 +51,8 @@ docus:
downloadPlatform: http://192.168.16.85:9291
report:
lis:
assortId: lis-zdAssortId
sysFlag: lis
url: http://192.168.198.101:7827/Ewell_WS_S51?wsdl
method: OperationA
namespaceUri:

Loading…
Cancel
Save