梅州三院
parent
39ecb05c69
commit
a604039aa9
@ -0,0 +1,18 @@
|
||||
package com.docus.server.message.busservice;
|
||||
|
||||
import com.docus.server.message.controller.vo.PushInfoVo;
|
||||
import com.docus.server.message.dto.Message;
|
||||
import com.docus.server.message.dto.MessageResponse;
|
||||
|
||||
|
||||
public interface MzsyBusinessService {
|
||||
/**
|
||||
* 梅州三院电子病历提交信息
|
||||
*
|
||||
* @param message 信息
|
||||
* @return 消息处理结果
|
||||
*/
|
||||
MessageResponse recordSubmitHandle(Message message);
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,131 @@
|
||||
package com.docus.server.message.busservice.impl;
|
||||
|
||||
import com.docus.core.util.DateUtil;
|
||||
import com.docus.core.util.Func;
|
||||
import com.docus.infrastructure.core.exception.BaseException;
|
||||
import com.docus.infrastructure.web.api.CommonResult;
|
||||
import com.docus.infrastructure.web.api.ResultCode;
|
||||
import com.docus.server.message.busservice.FsBusinessService;
|
||||
import com.docus.server.message.busservice.MzsyBusinessService;
|
||||
import com.docus.server.message.config.CollectTaskConfig;
|
||||
import com.docus.server.message.controller.vo.PushInfoVo;
|
||||
import com.docus.server.message.converters.FsWsRecordSubmitMessageConvert;
|
||||
import com.docus.server.message.converters.MzsyWsRecordSubmitMessageConvert;
|
||||
import com.docus.server.message.converters.NkWsRecordSubmitMessageConvert;
|
||||
import com.docus.server.message.converters.WsRecordSubmitMessageConvert;
|
||||
import com.docus.server.message.dto.*;
|
||||
import com.docus.server.message.feign.dto.CompensateTasRequest;
|
||||
import com.docus.server.message.feign.dto.HospitalSubmitNodeLogAddDTO;
|
||||
import com.docus.server.message.feign.enums.HospitalSubmitNodeEnum;
|
||||
import com.docus.server.message.feign.service.CollectTaskService;
|
||||
import com.docus.server.message.feign.service.HospitalSubmitNodeServiceApi;
|
||||
import com.docus.server.message.mapper.TBasicMapper;
|
||||
import com.docus.server.message.validate.NkRecordSubmitValidate;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @BelongsProject: docus-unified-message
|
||||
* @BelongsPackage: com.docus.server.message.busservice.impl
|
||||
* @Author: chierhao
|
||||
* @CreateTime: 2024-03-20 08:57
|
||||
* @Description: TODO
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MzsyBusinessServiceImpl implements MzsyBusinessService {
|
||||
|
||||
@Resource
|
||||
private TBasicMapper tBasicMapper;
|
||||
|
||||
@Autowired
|
||||
private HospitalSubmitNodeServiceApi hospitalSubmitNodeServiceApi;
|
||||
|
||||
@Resource
|
||||
private CollectTaskService collectTaskService;
|
||||
@Override
|
||||
public MessageResponse recordSubmitHandle(Message message){
|
||||
try {
|
||||
CollectTaskConfig.TaskConfig taskConfig = CollectTaskConfig.getTaskConfig("WS_RECORD_SUBMIT");
|
||||
if (taskConfig == null || Func.isEmpty(taskConfig.getCollectorIds())) {
|
||||
throw new RuntimeException("任务配置未配置采集器id,WS_RECORD_SUBMIT");
|
||||
}
|
||||
NkRecordSubmitDTO dto = NkWsRecordSubmitMessageConvert.convert(message.getMessage());
|
||||
NkRecordSubmitValidate.verifyRecordSubmitDTO(dto);
|
||||
TbasicQrPreciseCondition condition = MzsyWsRecordSubmitMessageConvert.convert(dto);
|
||||
List<String> patientIds = tBasicMapper.getMzsyPatientIdByPreciseConditions(condition);
|
||||
verifyPatientIds(patientIds);
|
||||
|
||||
String submitDate = dto.getSubmitDate();
|
||||
tBasicMapper.insertOrUpdateDoctorSubmitTime(patientIds.get(0), Func.parseDate(submitDate, DateUtil.PATTERN_DATETIME));
|
||||
|
||||
compensateTask("电子病历提交",patientIds, taskConfig.getCollectorIds());
|
||||
tBasicMapper.updateEmrSubmitState(patientIds.get(0), 1);
|
||||
|
||||
String submitName = dto.getSubmitName();
|
||||
String submitNo = dto.getSubmitNo();
|
||||
// 添加提交记录
|
||||
HospitalSubmitNodeLogAddDTO nodeLogAddDTO = new HospitalSubmitNodeLogAddDTO();
|
||||
nodeLogAddDTO.setPatientId(patientIds.get(0));
|
||||
nodeLogAddDTO.setContent(new String[]{submitDate});
|
||||
nodeLogAddDTO.setSubmitNodeEnum(HospitalSubmitNodeEnum.EMR);
|
||||
nodeLogAddDTO.setCreater(submitName+"("+submitNo+")");
|
||||
nodeLogAddDTO.setCreaterName(submitName+"("+submitNo+")");
|
||||
hospitalSubmitNodeServiceApi.addLog(nodeLogAddDTO);
|
||||
return new MessageResponse(ResultCode.SUCCESS.getCode(), success());
|
||||
} catch (BaseException baseException) {
|
||||
log.error(baseException.getMessage(), baseException);
|
||||
// 业务异常,不希望重试,直接消息返回错误
|
||||
MessageResponse response = new MessageResponse(ResultCode.FAILED.getCode(), fail(baseException.getMessage()));
|
||||
response.setRetry(0);
|
||||
return response;
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage(), ex);
|
||||
// 不可知的错误,希望重试
|
||||
MessageResponse response = new MessageResponse(ResultCode.FAILED.getCode(), fail("系统错误"));
|
||||
response.setRetry(1);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
private void verifyPatientIds(List<String> patientIds) {
|
||||
if (Func.isEmpty(patientIds)) {
|
||||
throw new BaseException("系统无此患者!");
|
||||
}
|
||||
if (patientIds.size() > 1) {
|
||||
throw new BaseException("系统中患者有多个,无法确认!");
|
||||
}
|
||||
}
|
||||
|
||||
private void compensateTask(String source,List<String> patientIds, List<String> collectorIds) {
|
||||
log.info("{},补偿任务 patientIds:{} collectId:{}",source, patientIds, collectorIds);
|
||||
CompensateTasRequest dto = new CompensateTasRequest();
|
||||
dto.setPatientIds(patientIds);
|
||||
dto.setCollectorIds(collectorIds);
|
||||
dto.setPriority(3);
|
||||
CommonResult<String> result = collectTaskService.compensateTask(dto);
|
||||
log.info("{},补偿任务结果:{}", source,Func.toJson(result));
|
||||
}
|
||||
|
||||
private String success() {
|
||||
return "<Response>" +
|
||||
"<RetInfo>" +
|
||||
"<RetCode>0</RetCode>" +
|
||||
"<RetCon>成功</RetCon>" +
|
||||
"</RetInfo>" +
|
||||
"</Response>";
|
||||
}
|
||||
|
||||
private String fail(String message) {
|
||||
return "<Response>" +
|
||||
"<RetInfo>" +
|
||||
"<RetCode>1</RetCode>" +
|
||||
"<RetCon>" + message + "</RetCon>" +
|
||||
"</RetInfo>" +
|
||||
"</Response>";
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.docus.server.message.controller;
|
||||
|
||||
import com.docus.server.message.busservice.MzsyBusinessService;
|
||||
import com.docus.server.message.busservice.NkBusinessService;
|
||||
import com.docus.server.message.dto.Message;
|
||||
import com.docus.server.message.dto.MessageResponse;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author WYBDEV
|
||||
*/
|
||||
@Api("广州脑科医院")
|
||||
@RestController
|
||||
@Slf4j
|
||||
@RequestMapping("/hospital/mzsy")
|
||||
public class MzsyHospitalController {
|
||||
|
||||
@Autowired
|
||||
private MzsyBusinessService mzsyBusinessService;
|
||||
|
||||
@PostMapping("/wsRecordSubmit/do")
|
||||
@ApiOperation("梅州三院电子病例提交消息接收")
|
||||
public MessageResponse wsRecordSubmit(@RequestBody Message message) {
|
||||
log.info("梅州三院电子病例提交消息接收:{}", message);
|
||||
return mzsyBusinessService.recordSubmitHandle(message);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
package com.docus.server.message.converters;
|
||||
|
||||
import com.docus.core.util.DateUtil;
|
||||
import com.docus.core.util.Func;
|
||||
import com.docus.infrastructure.core.exception.BaseException;
|
||||
import com.docus.server.message.dto.NkRecordSubmitDTO;
|
||||
import com.docus.server.message.dto.TbasicQrPreciseCondition;
|
||||
import com.docus.server.message.feign.vo.ArchiveAndRecallPushVo;
|
||||
import com.docus.server.message.util.XmlUtil;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
public class MzsyWsRecordSubmitMessageConvert {
|
||||
public static NkRecordSubmitDTO convert(String str) {
|
||||
String jzh = null;
|
||||
String inpatientNo = null;
|
||||
String name = null;
|
||||
Integer admissTimes = null;
|
||||
String submitNo=null;
|
||||
String submitName=null;
|
||||
String submitDate = null;
|
||||
|
||||
XmlUtil xmlUtil = XmlUtil.of(str);
|
||||
try {
|
||||
// 住院流水号
|
||||
Node inHospNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_NO");
|
||||
jzh = inHospNoNode.getTextContent();
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 住院流水号 出错!");
|
||||
}
|
||||
|
||||
try {
|
||||
// 住院号
|
||||
Node inHospIndexNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_INDEX_NO");
|
||||
inpatientNo = inHospIndexNoNode.getTextContent();
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 住院号 出错!");
|
||||
}
|
||||
try {
|
||||
// 住院次数
|
||||
Node visitNoNode = xmlUtil.getNode("/Request/Msg/VISIT_NO");
|
||||
String admissTimesStr = visitNoNode.getTextContent();
|
||||
if (Func.isNotBlank(admissTimesStr)) {
|
||||
admissTimes = Integer.parseInt(admissTimesStr.trim());
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 住院次数 出错!");
|
||||
}
|
||||
try {
|
||||
// 患者姓名
|
||||
Node nameNode = xmlUtil.getNode("/Request/Msg/NAME");
|
||||
name = nameNode.getTextContent();
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 姓名 出错!");
|
||||
}
|
||||
try {
|
||||
// 提交人工号
|
||||
Node submitNoNode = xmlUtil.getNode("/Request/Msg/SUBMIT_NO");
|
||||
submitNo = submitNoNode.getTextContent();
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 提交人工号 出错!");
|
||||
}
|
||||
try {
|
||||
// 提交人姓名
|
||||
Node submitNameNode = xmlUtil.getNode("/Request/Msg/SUBMIT_NAME");
|
||||
submitName = submitNameNode.getTextContent();
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 提交人姓名 出错!");
|
||||
}
|
||||
|
||||
try {
|
||||
// 提交时间
|
||||
Node submitTimeNode = xmlUtil.getNode("/Request/Msg/SUBMIT_TIME");
|
||||
String submitTime = submitTimeNode.getTextContent();
|
||||
Date submitDateTime = Func.parseDate(submitTime.trim(), DateUtil.PATTERN_DATETIME);
|
||||
submitDate = Func.formatDateTime(submitDateTime);
|
||||
} catch (Exception ex) {
|
||||
throw new BaseException("解析 提交时间 出错!");
|
||||
}
|
||||
|
||||
NkRecordSubmitDTO recordSubmitDTO = new NkRecordSubmitDTO();
|
||||
recordSubmitDTO.setJzh(jzh);
|
||||
recordSubmitDTO.setInpatientNo(inpatientNo);
|
||||
recordSubmitDTO.setAdmissTimes(admissTimes);
|
||||
recordSubmitDTO.setName(name);
|
||||
recordSubmitDTO.setSubmitNo(submitNo);
|
||||
recordSubmitDTO.setSubmitName(submitName);
|
||||
recordSubmitDTO.setSubmitDate(submitDate);
|
||||
return recordSubmitDTO;
|
||||
}
|
||||
|
||||
public static TbasicQrPreciseCondition convert(NkRecordSubmitDTO dto) {
|
||||
if (dto == null) {
|
||||
return null;
|
||||
}
|
||||
TbasicQrPreciseCondition condition = new TbasicQrPreciseCondition();
|
||||
|
||||
condition.setInpatientNo(dto.getInpatientNo());
|
||||
condition.setAdmissTimes(dto.getAdmissTimes());
|
||||
condition.setName(dto.getName());
|
||||
condition.setJzh(dto.getJzh());
|
||||
return condition;
|
||||
}
|
||||
public static String getPushXml(ArchiveAndRecallPushVo vo) {
|
||||
String result = "<Msg>\n" +
|
||||
"\t<!--归档/解档ID-->\n" +
|
||||
"\t<Id>"+ UUID.randomUUID()+"</Id>\n" +
|
||||
"\t<!--住院号-->\n" +
|
||||
"\t<inHospIndexNo>"+vo.getInpatientNo()+"</inHospIndexNo>\n" +
|
||||
"\t<!--住院次数-->\n" +
|
||||
"\t<visitNo>"+vo.getAdmissTimes()+"</visitNo>\n" +
|
||||
"\t<!--患者姓名-->\n" +
|
||||
"\t<patientName>"+vo.getName()+"</patientName>\n" +
|
||||
"\t<!--住院就诊流水号-->\n" +
|
||||
"\t<inHospNo>"+vo.getExternalId()+"</inHospNo>\n" +
|
||||
"\t<!--入院时间yyyy-MM-dd HH:mm:ss-->\n" +
|
||||
"\t<admitTime>"+ DateUtil.format(vo.getAdmissDate(),DateUtil.PATTERN_DATETIME)+"</admitTime>\n" +
|
||||
"\t<!--出院时间yyyy-MM-dd HH:mm:ss-->\n" +
|
||||
"\t<disTime>"+DateUtil.format(vo.getDisDate(),DateUtil.PATTERN_DATETIME)+"</disTime>\n" +
|
||||
"\t<!--归档时间yyyy-MM-dd HH:mm:ss-->\n" +
|
||||
"\t<archiveTime>"+vo.getArchiveTime()+"</archiveTime>\n" +
|
||||
"\t<!--解档时间yyyy-MM-dd HH:mm:ss-->\n" +
|
||||
"\t<unarchiveTime></unarchiveTime>\n" +
|
||||
"\t<!--出院科室代码-->\n" +
|
||||
"\t<dischargeDeptCode>"+vo.getDisDept()+"</dischargeDeptCode>\n" +
|
||||
"\t<!--出院科室-->\n" +
|
||||
"\t<dischargeDeptName>"+vo.getDisDeptName()+"</dischargeDeptName>\n" +
|
||||
"\t<!--操作人工号-->\n" +
|
||||
"\t<controlUserName>"+vo.getControlUserName()+"</controlUserName>\n" +
|
||||
"\t<!--操作人姓名-->\n" +
|
||||
"\t<controlName>"+vo.getControlName()+"</controlName>\n" +
|
||||
"\t<!--解档/归档状态 0:解档 1:归档-->\n" +
|
||||
"\t<archiveState>"+vo.getIsArchive()+"</archiveState>\n" +
|
||||
"</Msg>";
|
||||
return result;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue