佛山电子病例提交接口

master
宇宙皮皮娃 1 year ago
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…
Cancel
Save