护理提交,特殊字符处理

master
wyb 2 years ago
parent 8483c5a7b7
commit 59872e3a7b

@ -2,5 +2,9 @@
{
"method": "WS_RECORD_SUBMIT",
"collectorIds": ["1","2"]
},
{
"method": "WS_NURS_SUBMIT",
"collectorIds": ["3"]
}
]

@ -1,8 +1,13 @@
[
{
"method": "WS_RECORD_SUBMIT",
"urls": ["http://127.0.0.1:9313/message/receive/wsRecordSubmit/do"],
"errorResult": "<Response><RetInfo><RetCode>1</RetCode><RetCon>${{xpath:/Request/Msg/INHOSP_NO}}系统错误!</RetCon></RetInfo></Response>",
"urls": ["http://127.0.0.1:9314/message/receive/wsRecordSubmit/do"],
"errorResult": "<Response><RetInfo><RetCode>0</RetCode><RetCon>成功</RetCon></RetInfo></Response>",
"messageDataType": 1
} , {
"method": "WS_NURS_SUBMIT",
"urls": ["http://127.0.0.1:9314/message/receive/wsNurseSubmit/do"],
"errorResult": "<Response><RetInfo><RetCode>1</RetCode><RetCon>系统内部错误!</RetCon></RetInfo></Response>",
"messageDataType": 1
}
]

@ -6,8 +6,17 @@ import com.docus.server.message.dto.MessageResponse;
public interface SdBusinessService {
/**
*
*
* @param message
* @return
*/
MessageResponse recordSubmitHandle(Message message);
/**
*
*
* @param message
* @return
*/
MessageResponse wsNurseSubmitHandle(Message message);
}

@ -1,25 +1,26 @@
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.feign.service.CollectTaskService;
import com.docus.server.message.feign.dto.CompensateTasRequest;
import com.docus.server.message.busservice.SdBusinessService;
import com.docus.server.message.config.CollectTaskConfig;
import com.docus.server.message.converters.WsNurseSubmitMessageConvert;
import com.docus.server.message.converters.WsRecordSubmitMessageConvert;
import com.docus.server.message.dto.Message;
import com.docus.server.message.dto.MessageResponse;
import com.docus.server.message.dto.RecordSubmitDTO;
import com.docus.server.message.dto.WsNurseSubmitDTO;
import com.docus.server.message.feign.dto.CompensateTasRequest;
import com.docus.server.message.feign.service.CollectTaskService;
import com.docus.server.message.mapper.TBasicMapper;
import com.docus.server.message.util.XmlUtil;
import lombok.Data;
import com.docus.server.message.validate.RecordSubmitValidate;
import com.docus.server.message.validate.WsNurseSubmitValidate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.w3c.dom.Node;
import java.util.Date;
import java.util.List;
@Slf4j
@ -46,11 +47,12 @@ public class SdBusinessServiceImpl implements SdBusinessService {
if (taskConfig == null || Func.isEmpty(taskConfig.getCollectorIds())) {
throw new RuntimeException("任务配置未配置采集器id,WS_RECORD_SUBMIT");
}
RecordSubmitDTO recordSubmitDto = convert(message.getMessage());
verifyRecordSubmitDTO(recordSubmitDto);
RecordSubmitDTO recordSubmitDto = WsRecordSubmitMessageConvert.convert(message.getMessage());
RecordSubmitValidate.verifyRecordSubmitDTO(recordSubmitDto);
List<String> patientIds = tBasicMapper.getPatientIdsByInpatientNoAndTimes(recordSubmitDto.getInHospIndexNo(), recordSubmitDto.getVisitNo());
verifyPatientIds(patientIds);
tBasicMapper.insertOrUpdateSubmitTime(patientIds.get(0),recordSubmitDto.getSubmitTime());
tBasicMapper.insertOrUpdateDoctorSubmitTime(patientIds.get(0), recordSubmitDto.getSubmitTime());
log.info("补偿电子病历任务 patientIds:{} collectId:{}", patientIds, taskConfig.getCollectorIds());
compensateTask(patientIds, taskConfig.getCollectorIds());
return new MessageResponse(ResultCode.SUCCESS.getCode(), success());
} catch (BaseException baseException) {
@ -69,37 +71,50 @@ public class SdBusinessServiceImpl implements SdBusinessService {
}
private void verifyRecordSubmitDTO(RecordSubmitDTO recordSubmitDto) {
if (Func.isBlank(recordSubmitDto.getInHospIndexNo())) {
throw new BaseException("住院号不能为空!");
}
if (Func.isEmpty(recordSubmitDto.getVisitNo())) {
throw new BaseException("住院次数不能为空!");
}
if (Func.isEmpty(recordSubmitDto.getSubmitTime())) {
throw new BaseException("提交时间不能为空!");
}
if (Func.isEmpty(recordSubmitDto.getInHospState())) {
throw new BaseException("住院状态不能为空!");
}
if (recordSubmitDto.getInHospState() != 1) {
throw new BaseException("住院状态需要为已出院!");
@Override
public MessageResponse wsNurseSubmitHandle(Message message) {
try {
CollectTaskConfig.TaskConfig taskConfig = CollectTaskConfig.getTaskConfig("WS_NURS_SUBMIT");
if (taskConfig == null || Func.isEmpty(taskConfig.getCollectorIds())) {
throw new RuntimeException("任务配置未配置采集器id,WS_NURS_SUBMIT");
}
WsNurseSubmitDTO nurseSubmitDTO = WsNurseSubmitMessageConvert.convert(message.getMessage());
WsNurseSubmitValidate.verifyNurseSubmitDTO(nurseSubmitDTO);
List<String> patientIds = tBasicMapper.getPatientIdsByInpatientNoAndTimes(nurseSubmitDTO.getInHospIndexNo(), nurseSubmitDTO.getVisitNo());
verifyPatientIds(patientIds);
tBasicMapper.insertOrUpdateNurseSubmitTime(patientIds.get(0), nurseSubmitDTO.getSubmitTime());
tBasicMapper.insertOrUpdateNurseFileCount(patientIds.get(0), nurseSubmitDTO.getFilesCount());
log.info("补偿护理任务 patientIds:{} collectId:{}", patientIds, taskConfig.getCollectorIds());
compensateTask(patientIds, taskConfig.getCollectorIds());
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 compensateTask(List<String> patientIds, List<String> collectorIds) {
CompensateTasRequest dto = new CompensateTasRequest();
dto.setPatientIds(patientIds);
dto.setCollectorIds(collectorIds);
dto.setPriority(4);
log.info("补偿电子病历任务 数据:{}", dto);
CommonResult<String> task = collectTaskService.compensateTask(dto);
if (ResultCode.FAILED.getCode().equals(task.getCode())) {
throw new RuntimeException("补偿失败!");
}
}
private void verifyPatientIds(List<String> patientIds) {
private void verifyPatientIds(List<String> patientIds) throws BaseException {
if (Func.isEmpty(patientIds)) {
throw new BaseException("住院号+住院次数 ,系统无此患者!");
}
@ -108,68 +123,6 @@ public class SdBusinessServiceImpl implements SdBusinessService {
}
}
private RecordSubmitDTO convert(String str) {
String inHospNo=null;
String inHospIndexNo=null;
Integer visitNo=null;
String name=null;
Date submitTime=null;
Integer inHospState=null;
XmlUtil xmlUtil = XmlUtil.of(str);
try {
// 住院状态 住院状态 0在院 1出院
Node inHospStateNode = xmlUtil.getNode("/Request/Msg/INHOSP_STATE");
inHospState=Integer.parseInt(inHospStateNode.getTextContent());
}catch (Exception ex){
throw new BaseException("解析住院状态出错!");
}
try {
// 住院流水号
Node inHospNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_NO");
inHospNo=inHospNoNode.getTextContent();
} catch (Exception ex) {
throw new BaseException("解析 住院流水号 出错!");
}
try {
// 住院号
Node inHospIndexNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_INDEX_NO");
inHospIndexNo=inHospIndexNoNode.getTextContent();
} catch (Exception ex) {
throw new BaseException("解析 住院号 出错!");
}
try {
// 住院次数
Node visitNoNode = xmlUtil.getNode("/Request/Msg/VISIT_NO");
visitNo=Integer.parseInt(visitNoNode.getTextContent());
} 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 submitTimeNode = xmlUtil.getNode("/Request/Msg/SUBMIT_TIME");
submitTime= DateUtil.parse(submitTimeNode.getTextContent(), DateUtil.PATTERN_DATETIME);
} catch (Exception ex) {
throw new BaseException("解析 提交时间 出错!");
}
RecordSubmitDTO recordSubmitDTO = new RecordSubmitDTO();
recordSubmitDTO.setInHospNo(inHospNo);
recordSubmitDTO.setVisitNo(visitNo);
recordSubmitDTO.setInHospState(inHospState);
recordSubmitDTO.setName(name);
recordSubmitDTO.setInHospIndexNo(inHospIndexNo);
recordSubmitDTO.setSubmitTime(submitTime);
return recordSubmitDTO;
}
private String success() {
return "<Response>" +
@ -188,20 +141,4 @@ public class SdBusinessServiceImpl implements SdBusinessService {
"</RetInfo>" +
"</Response>";
}
@Data
private static class RecordSubmitDTO {
// 住院流水号
private String inHospNo;
// 住院号
private String inHospIndexNo;
// 住院次数
private Integer visitNo;
// 患者姓名
private String name;
// 提交时间
private Date submitTime;
// 住院状态0在院 1出院
private Integer inHospState;
}
}

@ -24,14 +24,23 @@ import org.springframework.web.bind.annotation.RestController;
public class MessageReceiveController {
private SdBusinessService sdBusinessService;
@Autowired
public void setSdBusinessService(SdBusinessService sdBusinessService){
this.sdBusinessService=sdBusinessService;
public void setSdBusinessService(SdBusinessService sdBusinessService) {
this.sdBusinessService = sdBusinessService;
}
@PostMapping("/wsRecordSubmit/do")
@ApiOperation("消息接收测试")
public MessageResponse receiveMessage(@RequestBody Message message) {
@ApiOperation("顺德人医电子病历提交消息接收")
public MessageResponse receiveWsRecordSubmitMessage(@RequestBody Message message) {
log.info("顺德人医电子病历提交消息接收:{}", message);
return sdBusinessService.recordSubmitHandle(message);
}
@PostMapping("/wsNurseSubmit/do")
@ApiOperation("顺德人医护理提交消息接收")
public MessageResponse receiveWsNurseSubmitMessage(@RequestBody Message message) {
log.info("顺德人医护理提交消息接收:{}", message);
return sdBusinessService.wsNurseSubmitHandle(message);
}
}

@ -0,0 +1,76 @@
package com.docus.server.message.converters;
import com.docus.core.util.DateUtil;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.server.message.dto.WsNurseSubmitDTO;
import com.docus.server.message.util.XmlUtil;
import org.w3c.dom.Node;
import java.util.Date;
public class WsNurseSubmitMessageConvert {
public static WsNurseSubmitDTO convert(String str) {
String inHospNo=null;
String inHospIndexNo=null;
Integer visitNo=null;
String name=null;
Date submitTime=null;
Integer fileCount=null;
XmlUtil xmlUtil = XmlUtil.of(str);
try {
// 文件数量
Node fileCountNode = xmlUtil.getNode("/Request/Msg/FILES_NUMBER");
fileCount=Integer.parseInt(fileCountNode.getTextContent());
} catch (Exception ex) {
throw new BaseException("解析 文件数量 出错!");
}
try {
// 住院流水号
Node inHospNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_NO");
inHospNo=inHospNoNode.getTextContent();
} catch (Exception ex) {
throw new BaseException("解析 住院流水号 出错!");
}
try {
// 住院号
Node inHospIndexNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_INDEX_NO");
inHospIndexNo=inHospIndexNoNode.getTextContent();
} catch (Exception ex) {
throw new BaseException("解析 住院号 出错!");
}
try {
// 住院次数
Node visitNoNode = xmlUtil.getNode("/Request/Msg/VISIT_NO");
visitNo=Integer.parseInt(visitNoNode.getTextContent());
} 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 submitTimeNode = xmlUtil.getNode("/Request/Msg/SUBMIT_TIME");
submitTime= DateUtil.parse(submitTimeNode.getTextContent(), DateUtil.PATTERN_DATETIME);
} catch (Exception ex) {
throw new BaseException("解析 提交时间 出错!");
}
WsNurseSubmitDTO nurseSubmitDTO = new WsNurseSubmitDTO();
nurseSubmitDTO.setInHospNo(inHospNo);
nurseSubmitDTO.setVisitNo(visitNo);
nurseSubmitDTO.setFilesCount(fileCount);
nurseSubmitDTO.setName(name);
nurseSubmitDTO.setInHospIndexNo(inHospIndexNo);
nurseSubmitDTO.setSubmitTime(submitTime);
return nurseSubmitDTO;
}
}

@ -0,0 +1,68 @@
package com.docus.server.message.converters;
import com.docus.core.util.DateUtil;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.server.message.dto.RecordSubmitDTO;
import com.docus.server.message.util.XmlUtil;
import org.w3c.dom.Node;
import java.util.Date;
public class WsRecordSubmitMessageConvert {
public static RecordSubmitDTO convert(String str) {
String inHospNo = null;
String inHospIndexNo = null;
Integer visitNo = null;
String name = null;
Date submitTime = null;
Integer inHospState = null;
XmlUtil xmlUtil = XmlUtil.of(str);
try {
// 住院流水号
Node inHospNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_NO");
inHospNo = inHospNoNode.getTextContent();
} catch (Exception ex) {
throw new BaseException("解析 住院流水号 出错!");
}
try {
// 住院号
Node inHospIndexNoNode = xmlUtil.getNode("/Request/Msg/INHOSP_INDEX_NO");
inHospIndexNo = inHospIndexNoNode.getTextContent();
} catch (Exception ex) {
throw new BaseException("解析 住院号 出错!");
}
try {
// 住院次数
Node visitNoNode = xmlUtil.getNode("/Request/Msg/VISIT_NO");
visitNo = Integer.parseInt(visitNoNode.getTextContent());
} 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 submitTimeNode = xmlUtil.getNode("/Request/Msg/SUBMIT_TIME");
submitTime = DateUtil.parse(submitTimeNode.getTextContent(), DateUtil.PATTERN_DATETIME);
} catch (Exception ex) {
throw new BaseException("解析 提交时间 出错!");
}
RecordSubmitDTO recordSubmitDTO = new RecordSubmitDTO();
recordSubmitDTO.setInHospNo(inHospNo);
recordSubmitDTO.setVisitNo(visitNo);
recordSubmitDTO.setInHospState(inHospState);
recordSubmitDTO.setName(name);
recordSubmitDTO.setInHospIndexNo(inHospIndexNo);
recordSubmitDTO.setSubmitTime(submitTime);
return recordSubmitDTO;
}
}

@ -0,0 +1,21 @@
package com.docus.server.message.dto;
import lombok.Data;
import java.util.Date;
@Data
public class RecordSubmitDTO {
// 住院流水号
private String inHospNo;
// 住院号
private String inHospIndexNo;
// 住院次数
private Integer visitNo;
// 患者姓名
private String name;
// 提交时间
private Date submitTime;
// 住院状态0在院 1出院
private Integer inHospState;
}

@ -0,0 +1,21 @@
package com.docus.server.message.dto;
import lombok.Data;
import java.util.Date;
@Data
public class WsNurseSubmitDTO {
// 住院流水号
private String inHospNo;
// 住院号
private String inHospIndexNo;
// 住院次数
private Integer visitNo;
// 患者姓名
private String name;
// 提交时间
private Date submitTime;
// 文件数量
private Integer filesCount;
}

@ -9,5 +9,27 @@ import java.util.List;
public interface TBasicMapper{
List<String> getPatientIdsByInpatientNoAndTimes(@Param("inpatientNo")String inHospIndexNo, @Param("admissTimes") Integer visitNo);
int insertOrUpdateSubmitTime(@Param("patientId") String patientId, @Param("submitTime") Date submitTime);
/**
*
* @param patientId
* @param submitTime
* @return database
*/
int insertOrUpdateDoctorSubmitTime(@Param("patientId") String patientId, @Param("submitTime") Date submitTime);
/**
*
* @param patientId
* @param submitTime
* @return database
*/
int insertOrUpdateNurseSubmitTime(@Param("patientId") String patientId, @Param("submitTime") Date submitTime);
/**
*
* @param patientId
* @param fileCount
* @return database
*/
int insertOrUpdateNurseFileCount(@Param("patientId")String patientId,@Param("fileCount") Integer fileCount);
}

@ -18,6 +18,7 @@ package com.docus.server.message.util;
import com.docus.core.util.Exceptions;
import com.docus.core.util.IoUtil;
import com.docus.core.util.StringUtil;
import org.springframework.lang.Nullable;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
@ -83,6 +84,14 @@ public class XmlUtil {
return create(inputSource);
}
/**
* xml
*/
public static String specialCharacterSubstitution(String str){
str = StringUtil.replace(str, "\u00A0", " ");
return str;
}
/**
*
*
@ -90,6 +99,7 @@ public class XmlUtil {
* @return XmlUtil
*/
public static XmlUtil of(String xmlStr) {
xmlStr=specialCharacterSubstitution(xmlStr);
StringReader sr = new StringReader(xmlStr.trim());
InputSource inputSource = new InputSource(sr);
XmlUtil xmlUtil = create(inputSource);

@ -0,0 +1,4 @@
package com.docus.server.message.validate;
public abstract class BaseValidate {
}

@ -0,0 +1,19 @@
package com.docus.server.message.validate;
import com.docus.core.util.Func;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.server.message.dto.RecordSubmitDTO;
public class RecordSubmitValidate{
public static void verifyRecordSubmitDTO(RecordSubmitDTO recordSubmitDto) throws BaseException{
if (Func.isBlank(recordSubmitDto.getInHospIndexNo())) {
throw new BaseException("住院号不能为空!");
}
if (Func.isEmpty(recordSubmitDto.getVisitNo())) {
throw new BaseException("住院次数不能为空!");
}
if (Func.isEmpty(recordSubmitDto.getSubmitTime())) {
throw new BaseException("提交时间不能为空!");
}
}
}

@ -0,0 +1,25 @@
package com.docus.server.message.validate;
import com.docus.core.util.Func;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.server.message.dto.WsNurseSubmitDTO;
public class WsNurseSubmitValidate {
public static void verifyNurseSubmitDTO(WsNurseSubmitDTO dto) throws BaseException {
if (Func.isBlank(dto.getInHospIndexNo())) {
throw new BaseException("住院号不能为空!");
}
if (Func.isEmpty(dto.getVisitNo())) {
throw new BaseException("住院次数不能为空!");
}
if (Func.isEmpty(dto.getSubmitTime())) {
throw new BaseException("提交时间不能为空!");
}
if (Func.isEmpty(dto.getFilesCount())) {
throw new BaseException("文件数量不能为空!");
}
if (dto.getFilesCount() < 1) {
throw new BaseException("文件数量不能小于1");
}
}
}

@ -3,10 +3,18 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docus.server.message.mapper.TBasicMapper">
<insert id="insertOrUpdateSubmitTime">
<insert id="insertOrUpdateDoctorSubmitTime">
insert into `docus_medicalrecord`.`t_basic_extend` (patient_id,doctor_submit_time) values (#{patientId},#{submitTime})
ON DUPLICATE KEY UPDATE doctor_submit_time=#{submitTime}
</insert>
<insert id="insertOrUpdateNurseSubmitTime">
insert into `docus_medicalrecord`.`t_basic_extend` (patient_id,nurse_submit_time) values (#{patientId},#{submitTime})
ON DUPLICATE KEY UPDATE nurse_submit_time=#{submitTime}
</insert>
<insert id="insertOrUpdateNurseFileCount">
insert into `docus_medicalrecord`.`t_basic_extend` (patient_id,nurse_file_count) values (#{patientId},#{fileCount})
ON DUPLICATE KEY UPDATE nurse_file_count=#{fileCount}
</insert>
<select id="getPatientIdsByInpatientNoAndTimes" resultType="java.lang.String">

Loading…
Cancel
Save