From 6a6badfa44b740bb71d876b3353d7a45d04a09ee 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: Wed, 20 Mar 2024 14:26:31 +0800
Subject: [PATCH] =?UTF-8?q?=E8=84=91=E7=A7=91=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
data-config/collect-task-config.json | 3 +-
data-config/message-forward-config.json | 9 +-
.../message/busservice/NkBusinessService.java | 17 ++
.../impl/NkBusinessServiceImpl.java | 208 ++++++++++++++++++
.../controller/GznkHospitalController.java | 35 +++
.../NkWsRecordSubmitMessageConvert.java | 138 ++++++++++++
.../server/message/dto/NkRecordSubmitDTO.java | 44 ++++
.../server/message/entity/CqcPushConfig.java | 67 ++++++
.../docus/server/message/entity/TBasic.java | 3 +-
.../feign/vo/ArchiveAndRecallPushVo.java | 60 +++++
.../message/mapper/CqcPushConfigMapper.java | 19 ++
.../server/message/mapper/TBasicMapper.java | 6 +
.../validate/NkRecordSubmitValidate.java | 28 +++
.../resources/mapper/CqcPushConfigMapper.xml | 29 +++
src/main/resources/mapper/TBasicMapper.xml | 18 ++
15 files changed, 674 insertions(+), 10 deletions(-)
create mode 100644 src/main/java/com/docus/server/message/busservice/NkBusinessService.java
create mode 100644 src/main/java/com/docus/server/message/busservice/impl/NkBusinessServiceImpl.java
create mode 100644 src/main/java/com/docus/server/message/controller/GznkHospitalController.java
create mode 100644 src/main/java/com/docus/server/message/converters/NkWsRecordSubmitMessageConvert.java
create mode 100644 src/main/java/com/docus/server/message/dto/NkRecordSubmitDTO.java
create mode 100644 src/main/java/com/docus/server/message/entity/CqcPushConfig.java
create mode 100644 src/main/java/com/docus/server/message/feign/vo/ArchiveAndRecallPushVo.java
create mode 100644 src/main/java/com/docus/server/message/mapper/CqcPushConfigMapper.java
create mode 100644 src/main/java/com/docus/server/message/validate/NkRecordSubmitValidate.java
create mode 100644 src/main/resources/mapper/CqcPushConfigMapper.xml
diff --git a/data-config/collect-task-config.json b/data-config/collect-task-config.json
index fc722f4..4ea4c6a 100644
--- a/data-config/collect-task-config.json
+++ b/data-config/collect-task-config.json
@@ -1,10 +1,9 @@
[{
"method": "WS_RECORD_SUBMIT",
"collectorIds": ["2", "3", "4", "5", "6", "8"]
-
},
{
"method": "WS_NURS_SUBMIT",
"collectorIds": ["1"]
}
-]
\ No newline at end of file
+]
diff --git a/data-config/message-forward-config.json b/data-config/message-forward-config.json
index fff8adb..4ea0e48 100644
--- a/data-config/message-forward-config.json
+++ b/data-config/message-forward-config.json
@@ -1,13 +1,8 @@
[
{
"method": "WS_RECORD_SUBMIT",
- "urls": ["http://127.0.0.1:9314/hospital/zqFirstRy/wsRecordSubmit/do"],
+ "urls": ["http://127.0.0.1:9314/hospital/gznk/wsRecordSubmit/do"],
"errorResult": "0成功",
"messageDataType": 1
- } , {
- "method": "WS_NURS_SUBMIT",
- "urls": ["http://127.0.0.1:9314/hospital/zqFirstRy/wsNurseSubmit/do"],
- "errorResult": "1系统内部错误!",
- "messageDataType": 1
}
-]
\ No newline at end of file
+]
diff --git a/src/main/java/com/docus/server/message/busservice/NkBusinessService.java b/src/main/java/com/docus/server/message/busservice/NkBusinessService.java
new file mode 100644
index 0000000..b3eebc4
--- /dev/null
+++ b/src/main/java/com/docus/server/message/busservice/NkBusinessService.java
@@ -0,0 +1,17 @@
+package com.docus.server.message.busservice;
+
+import com.docus.server.message.dto.Message;
+import com.docus.server.message.dto.MessageResponse;
+
+
+public interface NkBusinessService {
+ /**
+ * 广州脑科电子病历提交信息
+ *
+ * @param message 信息
+ * @return 消息处理结果
+ */
+ MessageResponse recordSubmitHandle(Message message);
+
+
+}
diff --git a/src/main/java/com/docus/server/message/busservice/impl/NkBusinessServiceImpl.java b/src/main/java/com/docus/server/message/busservice/impl/NkBusinessServiceImpl.java
new file mode 100644
index 0000000..9ed867e
--- /dev/null
+++ b/src/main/java/com/docus/server/message/busservice/impl/NkBusinessServiceImpl.java
@@ -0,0 +1,208 @@
+package com.docus.server.message.busservice.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+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.NkBusinessService;
+import com.docus.server.message.config.CollectTaskConfig;
+import com.docus.server.message.converters.NkWsRecordSubmitMessageConvert;
+import com.docus.server.message.converters.ZqWsRecordSubmitMessageConvert;
+import com.docus.server.message.dto.*;
+import com.docus.server.message.entity.CqcPushConfig;
+import com.docus.server.message.entity.TBasic;
+import com.docus.server.message.feign.dto.CompensateTasRequest;
+import com.docus.server.message.feign.service.CollectTaskService;
+import com.docus.server.message.feign.vo.ArchiveAndRecallPushVo;
+import com.docus.server.message.mapper.CqcPushConfigMapper;
+import com.docus.server.message.mapper.TBasicMapper;
+import com.docus.server.message.validate.NkRecordSubmitValidate;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+import org.apache.ibatis.mapping.ParameterMode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.xml.namespace.QName;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @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 NkBusinessServiceImpl implements NkBusinessService {
+
+ @Resource
+ private TBasicMapper tBasicMapper;
+
+ @Autowired
+ private CqcPushConfigMapper cqcPushConfigMapper;
+
+ @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 = NkWsRecordSubmitMessageConvert.convert(dto);
+ List patientIds = tBasicMapper.getGznkPatientIdByPreciseConditions(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);
+
+ //归档推送
+ pushWebService(patientIds.get(0),dto);
+ 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));
+ }
+
+ @Async
+ public void pushWebService(String patientId,NkRecordSubmitDTO dto){
+ CqcPushConfig config = cqcPushConfigMapper.getCqcPushConfigByBusinessType("14");
+ if(Func.isEmpty(config)){
+ return;
+ }
+
+ TBasic tBasicInfo = tBasicMapper.getTBasicInfo(patientId);
+ ArchiveAndRecallPushVo vo=new ArchiveAndRecallPushVo();
+ vo.setInpatientNo(tBasicInfo.getInpatientNo());
+ vo.setAdmissTimes(tBasicInfo.getAdmissTimes());
+ vo.setName(tBasicInfo.getName());
+ vo.setExternalId(tBasicInfo.getExternalId());
+ vo.setAdmissDate(tBasicInfo.getAdmissDate());
+ vo.setDisDate(tBasicInfo.getDisDate());
+ vo.setDisDept(tBasicInfo.getDisDept());
+ vo.setDisDeptName(tBasicInfo.getDisDeptName());
+ vo.setArchiveTime(dto.getSubmitDate());
+ vo.setControlUserName(dto.getSubmitNo());
+ vo.setControlName(dto.getSubmitName());
+ vo.setIsArchive(1);
+
+ String wsParam = NkWsRecordSubmitMessageConvert.getPushXml(vo);
+ //请求地址
+ String wsUrl = config.getUrl();
+ //命名空间
+ String namespance = config.getNamespace();
+ // 推送方法名
+ String wsMethod = config.getMethod();
+ //参数
+ String parameterListStr = config.getParameterList();
+ parameterListStr=String.format(parameterListStr,JSON.toJSONString(wsParam));
+
+ List