佛山电子病例提交接口
parent
06f1a5fbad
commit
091b59767c
@ -0,0 +1,15 @@
|
||||
package com.docus.server.message.busservice;
|
||||
|
||||
import com.docus.server.message.controller.vo.PushInfoVo;
|
||||
|
||||
|
||||
public interface FsBusinessService {
|
||||
/**
|
||||
* 佛山三院电子病历提交信息
|
||||
*
|
||||
* @param pushInfoVo 信息
|
||||
* @return 消息处理结果
|
||||
*/
|
||||
Boolean pushInfo(PushInfoVo pushInfoVo);
|
||||
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
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.FsBusinessService;
|
||||
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.NkWsRecordSubmitMessageConvert;
|
||||
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.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.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.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 FsBusinessServiceImpl implements FsBusinessService {
|
||||
|
||||
@Resource
|
||||
private TBasicMapper tBasicMapper;
|
||||
|
||||
@Autowired
|
||||
private HospitalSubmitNodeServiceApi hospitalSubmitNodeServiceApi;
|
||||
|
||||
@Resource
|
||||
private CollectTaskService collectTaskService;
|
||||
@Override
|
||||
public Boolean pushInfo(PushInfoVo pushInfoVo) {
|
||||
try {
|
||||
CollectTaskConfig.TaskConfig taskConfig = CollectTaskConfig.getTaskConfig("WS_RECORD_SUBMIT");
|
||||
if (taskConfig == null || Func.isEmpty(taskConfig.getCollectorIds())) {
|
||||
throw new RuntimeException("任务配置未配置采集器id,WS_RECORD_SUBMIT");
|
||||
}
|
||||
FsRecordSubmitDTO dto = FsWsRecordSubmitMessageConvert.convert(pushInfoVo);
|
||||
if (Func.isBlank(dto.getJzh())
|
||||
&& Func.isBlank(dto.getInpatientNo())
|
||||
&& Func.isBlank(dto.getName())) {
|
||||
throw new BaseException("住院流水号、住院号、患者姓名 不可全部为空!");
|
||||
}
|
||||
TbasicQrPreciseCondition condition = FsWsRecordSubmitMessageConvert.convert(dto);
|
||||
List<String> 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);
|
||||
|
||||
// 添加提交记录
|
||||
HospitalSubmitNodeLogAddDTO nodeLogAddDTO = new HospitalSubmitNodeLogAddDTO();
|
||||
nodeLogAddDTO.setPatientId(patientIds.get(0));
|
||||
nodeLogAddDTO.setContent(new String[]{submitDate});
|
||||
nodeLogAddDTO.setSubmitNodeEnum(HospitalSubmitNodeEnum.EMR);
|
||||
nodeLogAddDTO.setCreater("电子病历提交");
|
||||
nodeLogAddDTO.setCreaterName("电子病历提交");
|
||||
hospitalSubmitNodeServiceApi.addLog(nodeLogAddDTO);
|
||||
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage(), ex);
|
||||
// 不可知的错误
|
||||
return false;
|
||||
}
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.docus.server.message.controller;
|
||||
|
||||
import com.docus.server.message.busservice.FsBusinessService;
|
||||
import com.docus.server.message.busservice.NkBusinessService;
|
||||
import com.docus.server.message.controller.vo.PushInfoVo;
|
||||
import com.docus.server.message.dto.Message;
|
||||
import com.docus.server.message.dto.MessageResponse;
|
||||
import com.docus.server.message.dto.Msg;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author WYBDEV
|
||||
*/
|
||||
@Api("佛山三院医院")
|
||||
@RestController
|
||||
@Slf4j
|
||||
@RequestMapping("/emr_medical_record/font")
|
||||
public class FssyHospitalController {
|
||||
|
||||
@Autowired
|
||||
private FsBusinessService fsBusinessService;
|
||||
|
||||
@PostMapping("/pushInfo")
|
||||
@ResponseBody
|
||||
@ApiOperation("佛山三院电子病例提交消息接收")
|
||||
public Msg wsRecordSubmit(@RequestBody PushInfoVo pushInfoVo) {
|
||||
log.info("佛山三院电子病例提交消息接收:{}", pushInfoVo);
|
||||
if (pushInfoVo == null) {
|
||||
return Msg.pushFail("参数不得为空");
|
||||
}
|
||||
if (StringUtils.isBlank(pushInfoVo.getDataType() + "")) {
|
||||
return Msg.pushFail("提交类型不得为空");
|
||||
}
|
||||
if (StringUtils.isBlank(pushInfoVo.getInpNo())) {
|
||||
return Msg.pushFail("住院号不得为空");
|
||||
}
|
||||
if (StringUtils.isBlank(pushInfoVo.getVisitId())) {
|
||||
return Msg.pushFail("住院次数不得为空");
|
||||
}
|
||||
if (StringUtils.isBlank(pushInfoVo.getSubmitCode())) {
|
||||
return Msg.pushFail("提交时间不得为空");
|
||||
}
|
||||
if(pushInfoVo.getDataType()==1){
|
||||
if (fsBusinessService.pushInfo(pushInfoVo)) {
|
||||
return Msg.fail("成功");
|
||||
}
|
||||
}
|
||||
return Msg.pushFail("失败");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.docus.server.message.controller.vo;
|
||||
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @ClassName pushInfoVo
|
||||
* @Description 佛山三院电子病历/护理记录入参
|
||||
* @Author linjj
|
||||
* @Date 2023/12/7 15:07
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("佛山三院电子病例提交vo")
|
||||
public class PushInfoVo {
|
||||
|
||||
//住院流水号
|
||||
@ApiModelProperty( "住院流水号")
|
||||
private String inhospNo;
|
||||
//住院号
|
||||
@ApiModelProperty( "住院号")
|
||||
private String inpNo;
|
||||
//住院次数
|
||||
@ApiModelProperty( "住住院次数")
|
||||
private String visitId;
|
||||
//患者姓名
|
||||
@ApiModelProperty( "患者姓名")
|
||||
private String name;
|
||||
//提交时间
|
||||
@ApiModelProperty( "提交时间")
|
||||
private String submitTime;
|
||||
//提交类型1.电子病历2.护理记录
|
||||
@ApiModelProperty( "提交类型")
|
||||
private int dataType;
|
||||
//提交用户工号
|
||||
@ApiModelProperty("提交用户工号")
|
||||
private String submitCode;
|
||||
//提交用户姓名
|
||||
@ApiModelProperty("提交用户姓名")
|
||||
private String submitNameString;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package com.docus.server.message.converters;
|
||||
|
||||
import com.docus.core.util.DateUtil;
|
||||
import com.docus.server.message.controller.vo.PushInfoVo;
|
||||
import com.docus.server.message.dto.FsRecordSubmitDTO;
|
||||
import com.docus.server.message.dto.NkRecordSubmitDTO;
|
||||
import com.docus.server.message.dto.TbasicQrPreciseCondition;
|
||||
import com.docus.server.message.feign.vo.ArchiveAndRecallPushVo;
|
||||
|
||||
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class FsWsRecordSubmitMessageConvert {
|
||||
public static FsRecordSubmitDTO convert(PushInfoVo pushInfoVo) {
|
||||
String jzh = null;
|
||||
String inpatientNo = null;
|
||||
String name = null;
|
||||
Integer admissTimes = null;
|
||||
String submitNo=null;
|
||||
String submitName=null;
|
||||
String submitDate = null;
|
||||
|
||||
|
||||
jzh = pushInfoVo.getInhospNo();
|
||||
|
||||
inpatientNo = pushInfoVo.getInpNo();
|
||||
|
||||
admissTimes = Integer.parseInt(pushInfoVo.getVisitId());
|
||||
|
||||
name = pushInfoVo.getName();
|
||||
|
||||
submitNo = pushInfoVo.getSubmitCode();
|
||||
|
||||
submitName = pushInfoVo.getSubmitNameString();
|
||||
|
||||
submitDate = pushInfoVo.getSubmitTime();
|
||||
|
||||
|
||||
FsRecordSubmitDTO recordSubmitDTO = new FsRecordSubmitDTO();
|
||||
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(FsRecordSubmitDTO dto) {
|
||||
if (dto == null) {
|
||||
return null;
|
||||
}
|
||||
TbasicQrPreciseCondition condition = new TbasicQrPreciseCondition();
|
||||
|
||||
condition.setInpatientNo(dto.getInpatientNo());
|
||||
condition.setAdmissTimes(dto.getAdmissTimes());
|
||||
condition.setName(dto.getName());
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.docus.server.message.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 广州脑科电子病历提交信息
|
||||
*
|
||||
* @author ceh
|
||||
*/
|
||||
@Data
|
||||
public class FsRecordSubmitDTO {
|
||||
/**
|
||||
* 住院流水号/记账号
|
||||
*/
|
||||
private String jzh;
|
||||
/**
|
||||
* 住院号
|
||||
*/
|
||||
private String inpatientNo;
|
||||
/**
|
||||
* 住院次数
|
||||
*/
|
||||
private Integer admissTimes;
|
||||
/**
|
||||
* 患者姓名
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 提交人工号
|
||||
*/
|
||||
private String submitNo;
|
||||
/**
|
||||
* 提交人姓名
|
||||
*/
|
||||
private String submitName;
|
||||
/**
|
||||
* 提交时间 yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private String submitDate;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package com.docus.server.message.dto;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>Title:Msg </p>
|
||||
* <p>Description:common return class </p>
|
||||
* <p>Company: </p>
|
||||
* @author hu
|
||||
* @date
|
||||
*/
|
||||
public class Msg {
|
||||
//state:100-success 200-fail
|
||||
private int code;
|
||||
//提示信息
|
||||
private String msg;
|
||||
//用户要返回给浏览器的数据
|
||||
private Map<String,Object> extend=new HashMap<String,Object>();
|
||||
|
||||
public static Msg success(){
|
||||
Msg result=new Msg();
|
||||
result.setCode(100);
|
||||
result.setMsg("success");
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Msg fail(){
|
||||
Msg result=new Msg();
|
||||
result.setCode(200);
|
||||
result.setMsg("fail");
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Msg fail(String msg){
|
||||
Msg result=new Msg();
|
||||
result.setCode(200);
|
||||
result.setMsg(msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Msg pushFail(String msg){
|
||||
Msg result=new Msg();
|
||||
result.setCode(100);
|
||||
result.setMsg(msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Msg pushSuccess(String msg){
|
||||
Msg result=new Msg();
|
||||
result.setCode(200);
|
||||
result.setMsg(msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Msg add(String key, Object value){
|
||||
this.getExtend().put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public Map<String, Object> getExtend() {
|
||||
return extend;
|
||||
}
|
||||
|
||||
public void setExtend(Map<String, Object> extend) {
|
||||
this.extend = extend;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue