You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
9.7 KiB
Java
211 lines
9.7 KiB
Java
package com.ann.demo.service;
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
import com.ann.demo.entity.constant.AliasName;
|
|
import com.ann.demo.entity.constant.InterfaceName;
|
|
import com.ann.demo.entity.constant.WebServiceInfoMap;
|
|
import com.ann.demo.entity.constant.WebserviceId;
|
|
import com.ann.demo.entity.filing.MessageSubordinate;
|
|
import com.ann.demo.entity.filing.WebserviceInfo;
|
|
import com.ann.demo.entity.filing.dto.MessageDto;
|
|
import com.ann.demo.entity.filing.dto.PatientMainDto;
|
|
import com.ann.demo.entity.interfaceEntity.ArchiveMaster;
|
|
import com.ann.demo.entity.interfaceEntity.ExamApply;
|
|
import com.ann.demo.entity.interfaceEntity.MessageLog;
|
|
import com.ann.demo.entity.interfaceEntity.UltrasonicReport;
|
|
import com.ann.demo.entity.other.RunningItem;
|
|
import com.ann.demo.entity.other.ServerHelper;
|
|
import com.ann.demo.repository.ArchiveMasterRepository;
|
|
import com.ann.demo.utils.XMLUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.text.ParsePosition;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* 解析逻辑
|
|
*
|
|
* @Author: LeiJiaXin
|
|
* @Date: 2019/8/20 16:29
|
|
*/
|
|
@Component
|
|
public class AnalysisService {
|
|
|
|
static final Logger logger = LoggerFactory.getLogger(AnalysisService.class);
|
|
|
|
@Autowired
|
|
MessageService messageService;
|
|
|
|
@Autowired
|
|
MessageSubordinateService messageSubordinateService;
|
|
|
|
@Autowired
|
|
ArchiveMasterRepository archiveMasterRepository;
|
|
|
|
@Autowired
|
|
ExamApplyService examApplyService;
|
|
|
|
/**
|
|
* 2019-7-8
|
|
*
|
|
* @Param xmlStr 需要解析的字符串
|
|
* @Param tClass 被解析字符串的实体类
|
|
* @Param parameter 如果是报告 携带参数
|
|
* 返回返回参数xml
|
|
*/
|
|
public String getHIPMessageServerResult(String message, Class tClass, String parameter,String webserviceId) throws Exception {
|
|
long startTime = System.currentTimeMillis();
|
|
String textContent = "成功啦~", type = "", typeCodeValue = "AE", outContent = "", patientMainStr = "",archiveMasterId = null;
|
|
Date xmlCreateTime = null;
|
|
MessageLog messageLog = null;
|
|
Integer result = 0;
|
|
long endTime = 0;
|
|
|
|
message = message.replaceAll("&", "&");
|
|
|
|
// 判断是否插入
|
|
messageLog = new MessageLog(message, InterfaceName.HIP_MESSAGE_SERVER, new Date(),webserviceId);
|
|
// 只要没有传过 才会插入新的
|
|
messageService.save(messageLog);
|
|
MessageDto messageDto = XMLUtils.xpathToBean(message, tClass, parameter);
|
|
if (messageDto != null) {
|
|
String textContentTemp = null;
|
|
if(Objects.equals(messageDto.getType(),AliasName.PETCT_REPORT)){
|
|
//如果是pet-ct报告 那么还要查出住院次数
|
|
UltrasonicReport ultrasonicReport = JSON.parseObject(messageDto.getObject().toString(), UltrasonicReport.class);
|
|
String authorReportTime = ultrasonicReport.getAuthorReportTime();
|
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
Date date = simpleDateFormat.parse(authorReportTime, new ParsePosition(0));
|
|
String visitId = archiveMasterRepository.findVisitIdByTimeAndInpNo(date, messageDto.getInpNo());
|
|
messageDto.setVisitId(visitId);
|
|
}
|
|
|
|
archiveMasterId = messageService.getArchiveMasterId(messageDto.getInpNo(), messageDto.getVisitId(),messageDto.getPatientId());
|
|
if(archiveMasterId != null){
|
|
if (Objects.equals(messageDto.getEntity(), ExamApply.class.getName())) { // 申请单
|
|
ExamApply examApply = JSON.parseObject(messageDto.getObject().toString(), ExamApply.class);
|
|
textContentTemp = changeApply(examApply,parameter);
|
|
}
|
|
|
|
// 保存消息从属表
|
|
patientMainStr = JSON.toJSONString(new PatientMainDto(messageDto.getInpNo(), messageDto.getVisitId()), SerializerFeature.WriteMapNullValue);
|
|
if (textContentTemp != null) {
|
|
textContent = textContentTemp;
|
|
} else {
|
|
xmlCreateTime = messageDto.getXmlCreateTime();
|
|
type = messageDto.getType();
|
|
typeCodeValue = "AA";
|
|
result = 1;
|
|
}
|
|
}else{
|
|
textContent = "没有入院消息";
|
|
}
|
|
} else {
|
|
textContent = "传过来的消息无法解析";
|
|
}
|
|
|
|
outContent = XMLUtils.generateV3XmlStr(typeCodeValue, textContent);
|
|
if (!outContent.equals("")) {
|
|
endTime = System.currentTimeMillis();
|
|
messageLog.setValue(archiveMasterId,outContent, result, messageDto == null ? "" : JSON.toJSONString(messageDto), xmlCreateTime, (endTime - startTime), new Date(), type, textContent);
|
|
messageService.save(messageLog);
|
|
if (Objects.equals(typeCodeValue, "AA")) {
|
|
if (Objects.equals(type, AliasName.EKG_REPORT)
|
|
|| Objects.equals(type, AliasName.PATHOLOGY_REPORT)
|
|
|| Objects.equals(type, AliasName.RADIATION_REPORT)
|
|
|| Objects.equals(type, AliasName.ULTRASONIC_REPORT)
|
|
|| Objects.equals(type, AliasName.PETCT_REPORT )
|
|
|| Objects.equals(type, AliasName.OTHER_REPORT)) {
|
|
messageSubordinateService.save(new MessageSubordinate(messageLog.getId(), patientMainStr, JSON.toJSONString(messageLog)));
|
|
}
|
|
}
|
|
}
|
|
logger.info("-----------------------检查报告" + type + "总用时长" + (endTime - startTime) + "-------------------------");
|
|
return outContent;
|
|
}
|
|
|
|
|
|
private String changeApply(ExamApply examApply,String interfaceName) throws Exception{
|
|
String textContent = null;
|
|
ExamApply examApplyTemp = examApplyService.findExamApply(examApply.getApplyId());
|
|
//1 先判断检验申请单是否存在 存在做以下操作
|
|
if(examApplyTemp != null){
|
|
if (Objects.equals(examApply.getResult(), "delete")) {
|
|
// 1.2 判断是否是删除
|
|
if (!examApplyService.updateExamApplyIsValid(examApplyTemp.getApplyId())) {
|
|
textContent = "申请单删除失败了";
|
|
}
|
|
}else if(Objects.equals(interfaceName,InterfaceName.PARAMETER_EXAMAPPLYSTATECHANGE)){
|
|
// 1.3 如果是检查申请单状态变更设置IsOpenHIS
|
|
if (Objects.equals(examApply.getIsOpenHis(), "F")) {
|
|
examApplyTemp.setIsValid(1);
|
|
examApplyTemp.setIsOpenHis("F");
|
|
examApplyService.save(examApplyTemp);
|
|
}
|
|
}else if(Objects.equals(interfaceName,InterfaceName.PARAMETER_VERIFICATIONEXAMAPPLY)){
|
|
// 1.4 如果是检查申请单检体验收设置IsOpenLIS
|
|
if (Objects.equals(examApply.getIsOpenOther(), "F")) {
|
|
examApplyTemp.setIsValid(1);
|
|
examApplyTemp.setIsOpenOther("F");
|
|
examApplyService.save(examApplyTemp);
|
|
}
|
|
}else {
|
|
// 1.5 如果存在,又不做任何操作,返回已存在
|
|
textContent = "该申请单已存在";
|
|
}
|
|
}else{
|
|
// 2 如果不存在,那就判断是否是新增,否则该申请单不存在
|
|
if (Objects.equals(examApply.getResult(), "new") && Objects.equals(interfaceName,InterfaceName.PARAMETER_EXAMAPPLY)) {
|
|
if (examApply.getReportType() != null) {
|
|
switch (examApply.getReportType()) {
|
|
case "病理":
|
|
examApply.setReportType(AliasName.PATHOLOGY_REPORT);
|
|
break;
|
|
case "超声":
|
|
examApply.setReportType(AliasName.ULTRASONIC_REPORT);
|
|
break;
|
|
case "心电":
|
|
examApply.setReportType(AliasName.EKG_REPORT);
|
|
break;
|
|
case "放射":
|
|
examApply.setReportType(AliasName.RADIATION_REPORT);
|
|
break;
|
|
case "核医学":
|
|
examApply.setReportType(AliasName.PETCT_REPORT);
|
|
break;
|
|
default:
|
|
//除了这5个 其他报告都归在一类
|
|
examApply.setReportType(AliasName.OTHER_REPORT);
|
|
break;
|
|
// case "肌电图":
|
|
// examApply.setReportType(AliasName.ELECTROMYOGRAPHY);
|
|
// break;
|
|
// case "临床试验":
|
|
// examApply.setReportType(AliasName.CLINICAL_TRIALS);
|
|
// break;
|
|
// case "内镜":
|
|
// examApply.setReportType(AliasName.ENDOSCOPIC_REPORT);
|
|
// break;
|
|
// case "脑彩超":
|
|
// examApply.setReportType(AliasName.BRAIN_COLOR_ULTRASOUND);
|
|
// break;
|
|
// case "脑电图":
|
|
// examApply.setReportType(AliasName.BRAIN_ELECTRIC_REPORT);
|
|
// break;
|
|
}
|
|
}
|
|
examApplyService.save(examApply);
|
|
} else {
|
|
textContent = "该申请单不存在";
|
|
}
|
|
}
|
|
return textContent;
|
|
}
|
|
}
|