From a604039aa9f64a40bb0e7480d1c25c97ff97a66c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=87=E5=AE=99=E7=9A=AE=E7=9A=AE=E5=A8=83?= <2964346877@qq.com> Date: Sat, 14 Sep 2024 09:22:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A2=85=E5=B7=9E=E4=B8=89=E9=99=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data-config/message-forward-config.json | 2 +- .../busservice/MzsyBusinessService.java | 18 +++ .../impl/MzsyBusinessServiceImpl.java | 131 +++++++++++++++++ .../controller/MzsyHospitalController.java | 36 +++++ .../MzsyWsRecordSubmitMessageConvert.java | 139 ++++++++++++++++++ .../server/message/mapper/TBasicMapper.java | 6 + src/main/resources/mapper/TBasicMapper.xml | 15 ++ 7 files changed, 346 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/docus/server/message/busservice/MzsyBusinessService.java create mode 100644 src/main/java/com/docus/server/message/busservice/impl/MzsyBusinessServiceImpl.java create mode 100644 src/main/java/com/docus/server/message/controller/MzsyHospitalController.java create mode 100644 src/main/java/com/docus/server/message/converters/MzsyWsRecordSubmitMessageConvert.java diff --git a/data-config/message-forward-config.json b/data-config/message-forward-config.json index 86f0514..76a64e5 100644 --- a/data-config/message-forward-config.json +++ b/data-config/message-forward-config.json @@ -1,7 +1,7 @@ [ { "method": "WS_RECORD_SUBMIT", - "urls": ["http://127.0.0.1:9314/hospital/gznk/wsRecordSubmit/do"], + "urls": ["http://127.0.0.1:9314/hospital/mzsy/wsRecordSubmit/do"], "errorResult": "0成功", "messageDataType": 1 }, diff --git a/src/main/java/com/docus/server/message/busservice/MzsyBusinessService.java b/src/main/java/com/docus/server/message/busservice/MzsyBusinessService.java new file mode 100644 index 0000000..096410c --- /dev/null +++ b/src/main/java/com/docus/server/message/busservice/MzsyBusinessService.java @@ -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); + + +} diff --git a/src/main/java/com/docus/server/message/busservice/impl/MzsyBusinessServiceImpl.java b/src/main/java/com/docus/server/message/busservice/impl/MzsyBusinessServiceImpl.java new file mode 100644 index 0000000..3ee7c1e --- /dev/null +++ b/src/main/java/com/docus/server/message/busservice/impl/MzsyBusinessServiceImpl.java @@ -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 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 patientIds) { + if (Func.isEmpty(patientIds)) { + throw new BaseException("系统无此患者!"); + } + if (patientIds.size() > 1) { + throw new BaseException("系统中患者有多个,无法确认!"); + } + } + + private void compensateTask(String source,List patientIds, List collectorIds) { + log.info("{},补偿任务 patientIds:{} collectId:{}",source, patientIds, collectorIds); + CompensateTasRequest dto = new CompensateTasRequest(); + dto.setPatientIds(patientIds); + dto.setCollectorIds(collectorIds); + dto.setPriority(3); + CommonResult result = collectTaskService.compensateTask(dto); + log.info("{},补偿任务结果:{}", source,Func.toJson(result)); + } + + private String success() { + return "" + + "" + + "0" + + "成功" + + "" + + ""; + } + + private String fail(String message) { + return "" + + "" + + "1" + + "" + message + "" + + "" + + ""; + } +} diff --git a/src/main/java/com/docus/server/message/controller/MzsyHospitalController.java b/src/main/java/com/docus/server/message/controller/MzsyHospitalController.java new file mode 100644 index 0000000..c5312fa --- /dev/null +++ b/src/main/java/com/docus/server/message/controller/MzsyHospitalController.java @@ -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); + } + + +} diff --git a/src/main/java/com/docus/server/message/converters/MzsyWsRecordSubmitMessageConvert.java b/src/main/java/com/docus/server/message/converters/MzsyWsRecordSubmitMessageConvert.java new file mode 100644 index 0000000..8b6b38b --- /dev/null +++ b/src/main/java/com/docus/server/message/converters/MzsyWsRecordSubmitMessageConvert.java @@ -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 = "\n" + + "\t\n" + + "\t"+ UUID.randomUUID()+"\n" + + "\t\n" + + "\t"+vo.getInpatientNo()+"\n" + + "\t\n" + + "\t"+vo.getAdmissTimes()+"\n" + + "\t\n" + + "\t"+vo.getName()+"\n" + + "\t\n" + + "\t"+vo.getExternalId()+"\n" + + "\t\n" + + "\t"+ DateUtil.format(vo.getAdmissDate(),DateUtil.PATTERN_DATETIME)+"\n" + + "\t\n" + + "\t"+DateUtil.format(vo.getDisDate(),DateUtil.PATTERN_DATETIME)+"\n" + + "\t\n" + + "\t"+vo.getArchiveTime()+"\n" + + "\t\n" + + "\t\n" + + "\t\n" + + "\t"+vo.getDisDept()+"\n" + + "\t\n" + + "\t"+vo.getDisDeptName()+"\n" + + "\t\n" + + "\t"+vo.getControlUserName()+"\n" + + "\t\n" + + "\t"+vo.getControlName()+"\n" + + "\t\n" + + "\t"+vo.getIsArchive()+"\n" + + ""; + return result; + } +} diff --git a/src/main/java/com/docus/server/message/mapper/TBasicMapper.java b/src/main/java/com/docus/server/message/mapper/TBasicMapper.java index 8f96af3..d0bd72b 100644 --- a/src/main/java/com/docus/server/message/mapper/TBasicMapper.java +++ b/src/main/java/com/docus/server/message/mapper/TBasicMapper.java @@ -21,6 +21,12 @@ public interface TBasicMapper { */ List getGznkPatientIdByPreciseConditions(@Param("condition")TbasicQrPreciseCondition condition); + /* + * 梅州三院查询主键 + */ + List getMzsyPatientIdByPreciseConditions(@Param("condition")TbasicQrPreciseCondition condition); + + /** * 更新医生提交时间 * diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml index 98fa785..9f11a64 100644 --- a/src/main/resources/mapper/TBasicMapper.xml +++ b/src/main/resources/mapper/TBasicMapper.xml @@ -93,6 +93,21 @@ + +