diff --git a/src/main/java/com/docus/server/message/busservice/FsBusinessService.java b/src/main/java/com/docus/server/message/busservice/FsBusinessService.java new file mode 100644 index 0000000..aade247 --- /dev/null +++ b/src/main/java/com/docus/server/message/busservice/FsBusinessService.java @@ -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); + +} diff --git a/src/main/java/com/docus/server/message/busservice/impl/FsBusinessServiceImpl.java b/src/main/java/com/docus/server/message/busservice/impl/FsBusinessServiceImpl.java new file mode 100644 index 0000000..5db6831 --- /dev/null +++ b/src/main/java/com/docus/server/message/busservice/impl/FsBusinessServiceImpl.java @@ -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 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 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)); + } + + +} diff --git a/src/main/java/com/docus/server/message/controller/FssyHospitalController.java b/src/main/java/com/docus/server/message/controller/FssyHospitalController.java new file mode 100644 index 0000000..a575065 --- /dev/null +++ b/src/main/java/com/docus/server/message/controller/FssyHospitalController.java @@ -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("失败"); + } + + +} diff --git a/src/main/java/com/docus/server/message/controller/vo/PushInfoVo.java b/src/main/java/com/docus/server/message/controller/vo/PushInfoVo.java new file mode 100644 index 0000000..d028032 --- /dev/null +++ b/src/main/java/com/docus/server/message/controller/vo/PushInfoVo.java @@ -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; + + +} diff --git a/src/main/java/com/docus/server/message/converters/FsWsRecordSubmitMessageConvert.java b/src/main/java/com/docus/server/message/converters/FsWsRecordSubmitMessageConvert.java new file mode 100644 index 0000000..e055a5b --- /dev/null +++ b/src/main/java/com/docus/server/message/converters/FsWsRecordSubmitMessageConvert.java @@ -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 = "\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/dto/FsRecordSubmitDTO.java b/src/main/java/com/docus/server/message/dto/FsRecordSubmitDTO.java new file mode 100644 index 0000000..a72c082 --- /dev/null +++ b/src/main/java/com/docus/server/message/dto/FsRecordSubmitDTO.java @@ -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; + + +} diff --git a/src/main/java/com/docus/server/message/dto/Msg.java b/src/main/java/com/docus/server/message/dto/Msg.java new file mode 100644 index 0000000..61d9bd8 --- /dev/null +++ b/src/main/java/com/docus/server/message/dto/Msg.java @@ -0,0 +1,92 @@ +/** + * + */ +package com.docus.server.message.dto; + +import java.util.HashMap; +import java.util.Map; + +/** + *

Title:Msg

+ *

Description:common return class

+ *

Company:

+ * @author hu + * @date + */ +public class Msg { + //state:100-success 200-fail + private int code; + //提示信息 + private String msg; + //用户要返回给浏览器的数据 + private Map extend=new HashMap(); + + 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 getExtend() { + return extend; + } + + public void setExtend(Map extend) { + this.extend = extend; + } + +}