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