Procházet zdrojové kódy

提交缺陷反馈相关功能

songxinlu před 3 roky
rodič
revize
4c3aa3c4c5

+ 1 - 1
doc/046.20220420v2.5.0_个性化版_湘雅人工质控缺陷反馈/qc_init_v2.5.0_个性化版_湘雅人工质控缺陷反馈.sql

@@ -33,7 +33,7 @@ med_defect_feedback 新增缺陷反馈表
 DROP TABLE IF EXISTS `med_defect_feedback`;
 CREATE TABLE `med_defect_feedback` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
-  `hospital_id` int(11) DEFAULT NULL COMMENT '医院ID',
+  `hospital_id` bigint(11) DEFAULT NULL COMMENT '医院ID',
   `dept_id` varchar(16) DEFAULT NULL COMMENT '住院科室ID',
   `dept_name` varchar(64) DEFAULT NULL COMMENT '住院科室名称',
   `behospital_code` varchar(16) NOT NULL COMMENT '病人住院ID',

+ 9 - 209
src/main/java/com/diagbot/entity/MedDefectFeedback.java

@@ -3,8 +3,11 @@ package com.diagbot.entity;
 import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * <p>
@@ -14,6 +17,8 @@ import java.io.Serializable;
  * @author songxl
  * @since 2022-04-21
  */
+@Getter
+@Setter
 public class MedDefectFeedback implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -27,7 +32,7 @@ public class MedDefectFeedback implements Serializable {
     /**
      * 医院ID
      */
-    private Integer hospitalId;
+    private Long hospitalId;
 
     /**
      * 住院科室ID
@@ -127,12 +132,12 @@ public class MedDefectFeedback implements Serializable {
     /**
      * 记录创建时间
      */
-    private LocalDateTime gmtCreate;
+    private Date gmtCreate;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
-    private LocalDateTime gmtModified;
+    private Date gmtModified;
 
     /**
      * 创建人,0表示无创建人值
@@ -144,210 +149,5 @@ public class MedDefectFeedback implements Serializable {
      */
     private String modifier;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-    public Integer getHospitalId() {
-        return hospitalId;
-    }
-
-    public void setHospitalId(Integer hospitalId) {
-        this.hospitalId = hospitalId;
-    }
-    public String getDeptId() {
-        return deptId;
-    }
-
-    public void setDeptId(String deptId) {
-        this.deptId = deptId;
-    }
-    public String getDeptName() {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName) {
-        this.deptName = deptName;
-    }
-    public String getBehospitalCode() {
-        return behospitalCode;
-    }
-
-    public void setBehospitalCode(String behospitalCode) {
-        this.behospitalCode = behospitalCode;
-    }
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-    public Long getCasesEntryId() {
-        return casesEntryId;
-    }
-
-    public void setCasesEntryId(Long casesEntryId) {
-        this.casesEntryId = casesEntryId;
-    }
-    public String getQcresultDetailMsg() {
-        return qcresultDetailMsg;
-    }
-
-    public void setQcresultDetailMsg(String qcresultDetailMsg) {
-        this.qcresultDetailMsg = qcresultDetailMsg;
-    }
-    public BigDecimal getQcresultDetaiScore() {
-        return qcresultDetaiScore;
-    }
-
-    public void setQcresultDetaiScore(BigDecimal qcresultDetaiScore) {
-        this.qcresultDetaiScore = qcresultDetaiScore;
-    }
-    public Long getModeId() {
-        return modeId;
-    }
-
-    public void setModeId(Long modeId) {
-        this.modeId = modeId;
-    }
-    public String getModeName() {
-        return modeName;
-    }
-
-    public void setModeName(String modeName) {
-        this.modeName = modeName;
-    }
-    public String getExplainInfo() {
-        return explainInfo;
-    }
-
-    public void setExplainInfo(String explainInfo) {
-        this.explainInfo = explainInfo;
-    }
-    public String getOperationType() {
-        return operationType;
-    }
-
-    public void setOperationType(String operationType) {
-        this.operationType = operationType;
-    }
-    public String getSenderCode() {
-        return senderCode;
-    }
-
-    public void setSenderCode(String senderCode) {
-        this.senderCode = senderCode;
-    }
-    public String getSenderName() {
-        return senderName;
-    }
-
-    public void setSenderName(String senderName) {
-        this.senderName = senderName;
-    }
-    public String getReceiverCode() {
-        return receiverCode;
-    }
-
-    public void setReceiverCode(String receiverCode) {
-        this.receiverCode = receiverCode;
-    }
-    public String getReceiverName() {
-        return receiverName;
-    }
-
-    public void setReceiverName(String receiverName) {
-        this.receiverName = receiverName;
-    }
-    public String getCcCodes() {
-        return ccCodes;
-    }
-
-    public void setCcCodes(String ccCodes) {
-        this.ccCodes = ccCodes;
-    }
-    public String getCcNames() {
-        return ccNames;
-    }
-
-    public void setCcNames(String ccNames) {
-        this.ccNames = ccNames;
-    }
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-    public String getIsDeleted() {
-        return isDeleted;
-    }
-
-    public void setIsDeleted(String isDeleted) {
-        this.isDeleted = isDeleted;
-    }
-    public LocalDateTime getGmtCreate() {
-        return gmtCreate;
-    }
-
-    public void setGmtCreate(LocalDateTime gmtCreate) {
-        this.gmtCreate = gmtCreate;
-    }
-    public LocalDateTime getGmtModified() {
-        return gmtModified;
-    }
-
-    public void setGmtModified(LocalDateTime gmtModified) {
-        this.gmtModified = gmtModified;
-    }
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-    public String getModifier() {
-        return modifier;
-    }
-
-    public void setModifier(String modifier) {
-        this.modifier = modifier;
-    }
 
-    @Override
-    public String toString() {
-        return "MedDefectFeedback{" +
-            "id=" + id +
-            ", hospitalId=" + hospitalId +
-            ", deptId=" + deptId +
-            ", deptName=" + deptName +
-            ", behospitalCode=" + behospitalCode +
-            ", name=" + name +
-            ", casesEntryId=" + casesEntryId +
-            ", qcresultDetailMsg=" + qcresultDetailMsg +
-            ", qcresultDetaiScore=" + qcresultDetaiScore +
-            ", modeId=" + modeId +
-            ", modeName=" + modeName +
-            ", explainInfo=" + explainInfo +
-            ", operationType=" + operationType +
-            ", senderCode=" + senderCode +
-            ", senderName=" + senderName +
-            ", receiverCode=" + receiverCode +
-            ", receiverName=" + receiverName +
-            ", ccCodes=" + ccCodes +
-            ", ccNames=" + ccNames +
-            ", status=" + status +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-        "}";
-    }
 }

+ 151 - 0
src/main/java/com/diagbot/facade/MedDefectFeedbackFacade.java

@@ -0,0 +1,151 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.entity.MedDefectFeedback;
+import com.diagbot.entity.MedQcresultInfo;
+import com.diagbot.entity.SysUser;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.MedDefectFeedbackServiceImpl;
+import com.diagbot.service.impl.MedQcresultInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.CCVO;
+import com.diagbot.vo.ChangeQcResultVO;
+import com.diagbot.vo.QcresultVO;
+import com.diagbot.vo.UPdDefectBackByIDVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:缺陷反馈模块处理类
+ * @author: songxl
+ * @time: 2022/4/21 10:03
+ */
+@Component
+public class MedDefectFeedbackFacade extends MedDefectFeedbackServiceImpl {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private SysUserFacade sysUserFacade;
+    @Autowired
+    private MedQcresultInfoServiceImpl medQcresultInfoServiceImpl;
+
+
+    /**
+     * 操作病历
+     *
+     * @param changeQcResultVO
+     * @Return com.diagbot.dto.AnalyzeDTO
+     */
+    public AnalyzeDTO changeQcResult(ChangeQcResultVO changeQcResultVO) {
+        //1.获取病历基本信息
+        Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        //验证病历的存在性
+        List<BehospitalInfo> behospitalInfos
+                = behospitalInfoFacade.list(
+                new QueryWrapper<BehospitalInfo>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", hospitalId)
+                        .eq("behospital_code", changeQcResultVO.getBehospitalCode()));
+        if (ListUtil.isEmpty(behospitalInfos)) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院下该病历号不存在!");
+        }
+        //获取操作用户
+        QueryWrapper<SysUser> userQuer = new QueryWrapper<>();
+        userQuer.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", SysUserUtils.getCurrentPrincipleID())
+                .eq("status", 1);
+        SysUser user = sysUserFacade.getOne(userQuer);
+        if (user == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "操作用户不存在,请联系管理员!");
+        }
+
+        //2.调用人工修改病历评分接口
+        AnalyzeDTO out = new AnalyzeDTO();
+        QcresultVO qcresultVO = new QcresultVO();
+        BeanUtil.copyProperties(changeQcResultVO, qcresultVO);
+        //非新增缺失
+        if (!"4".equals(changeQcResultVO.getOperationType())) {
+            out = qcresultInfoFacade.changeQcResult(qcresultVO);
+        }else {
+            //新增缺失拼装返回结果
+            //获取病历等级得分
+            MedQcresultInfo medQcresultInfo = medQcresultInfoServiceImpl
+                    .getOne(new QueryWrapper<MedQcresultInfo>().select("level,score_res")
+                    .eq("hospital_id",hospitalId)
+                    .eq("behospital_code",qcresultVO.getBehospitalCode())
+                    .eq("is_deleted",IsDeleteEnum.N.getKey()));
+            out.setBehospitalCode(qcresultVO.getBehospitalCode());
+            out.setIsSuccess(true);
+            out.setGradeType(2);
+            out.setGradeTypeName("人工");
+            out.setScoreRes(medQcresultInfo.getScoreRes());
+            out.setLevel(medQcresultInfo.getLevel());
+            out.setGradeTime(DateUtil.now());
+        }
+
+        //3.人工修改病历成功后
+        if (out != null && out.getIsSuccess()) {
+            MedDefectFeedback insert = new MedDefectFeedback();
+            BeanUtil.copyProperties(changeQcResultVO, insert);
+            insert.setDeptId(behospitalInfos.get(0).getBehDeptId());
+            insert.setDeptName(behospitalInfos.get(0).getBehDeptName());
+            insert.setName(behospitalInfos.get(0).getName());
+            insert.setCasesEntryId(changeQcResultVO.getOptResultAlgVO().getCasesEntryId());
+            insert.setQcresultDetailMsg(changeQcResultVO.getOptResultAlgVO().getMsg());
+            insert.setQcresultDetaiScore(changeQcResultVO.getOptResultAlgVO().getScore());
+            insert.setHospitalId(hospitalId);
+            insert.setGmtCreate(DateUtil.now());
+            insert.setCreator(SysUserUtils.getCurrentPrincipleID());
+            insert.setSenderCode(SysUserUtils.getCurrentPrincipleID());
+            insert.setSenderName(user.getLinkman());
+            insert.setCcCodes(changeQcResultVO.getCcs().stream().map(CCVO::getUserId).collect(Collectors.joining(",")));
+            insert.setCcNames(changeQcResultVO.getCcs().stream().map(CCVO::getName).collect(Collectors.joining(",")));
+            //保存结果
+            if (!this.save(insert)) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "缺陷反馈保存失败!");
+            }
+            //4.推送给his方
+            sendToHis(insert);
+        }
+
+        return out;
+    }
+
+    /**
+     * 推送给his方
+     *
+     * @param insert
+     * @Return void
+     */
+    private void sendToHis(MedDefectFeedback insert) {
+        try {
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 确认缺陷反馈
+     *
+     * @param uPdDefectBackByIDVO
+     * @Return java.lang.Boolean
+     */
+    public Boolean updDefectBackByID(UPdDefectBackByIDVO uPdDefectBackByIDVO) {
+        MedDefectFeedback entity = new MedDefectFeedback();
+        entity.setId(uPdDefectBackByIDVO.getId());
+        return this.updateById(entity);
+    }
+}

+ 27 - 0
src/main/java/com/diagbot/vo/CCVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:缺陷反馈-人工操作病历-抄送人对象
+ * @author: songxl
+ * @time: 2022/4/21 10:03
+ */
+@Getter
+@Setter
+public class CCVO {
+    @ApiModelProperty(value = "用户编号")
+    private String userId;
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "科室编号")
+    private String deptCode;
+
+    @ApiModelProperty(value = "科室名")
+    private String deptName;
+
+}

+ 59 - 0
src/main/java/com/diagbot/vo/ChangeQcResultVO.java

@@ -0,0 +1,59 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * @Description:缺陷反馈-人工操作病历
+ * @author: songxl
+ * @time: 2022/4/21 10:03
+ */
+@Getter
+@Setter
+public class ChangeQcResultVO {
+    @ApiModelProperty(value = "病历id")
+    @NotBlank(message = "病历编号为空")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "医院ID",hidden = true)
+    private Long hospitalId;
+
+    //操作类型(0:基础评分,1:新增条目评分,2:删除条目,3:修改条目)
+    @ApiModelProperty(hidden = true)
+    private Integer type;
+
+    @ApiModelProperty("逻辑删除接口(1-恢复和0-删除)标志")
+    private Integer delStatus;
+
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String modeName;
+
+    @ApiModelProperty(value = "反馈说明")
+    private String explainInfo;
+
+    @ApiModelProperty(value = "操作类型 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复")
+    @NotBlank(message = "操作类型为空")
+    private String operationType;
+
+    @ApiModelProperty(value = "接收人编号")
+    @NotBlank(message = "接收人编号为空")
+    private String receiverCode;
+
+    @ApiModelProperty(value = "接收人姓名")
+    @NotBlank(message = "接收人姓名为空")
+    private String receiverName;
+
+    @ApiModelProperty(value = "抄送人集合")
+    @NotEmpty(message = "抄送人集合为空")
+    private List<CCVO> ccs;
+    //操作条目
+    private QcResultAlgVO optResultAlgVO;
+}

+ 23 - 0
src/main/java/com/diagbot/vo/UPdDefectBackByIDVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+
+/**
+ * @Description:确认缺陷反馈--接口入参
+ * @author: songxl
+ * @time: 2022/4/21 10:03
+ */
+@Getter
+@Setter
+public class UPdDefectBackByIDVO {
+
+    @ApiModelProperty(value = "缺陷反馈编号")
+    @NotEmpty(message = "缺陷反馈编号为空")
+    private Long id;
+
+}

+ 93 - 0
src/main/java/com/diagbot/web/MedDefectFeedbackController.java

@@ -1,11 +1,28 @@
 package com.diagbot.web;
 
 
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.his.DoctorHosDTO;
+import com.diagbot.facade.MedDefectFeedbackFacade;
+import com.diagbot.facade.his.DoctorHosFacade;
+import com.diagbot.vo.ChangeQcResultVO;
+import com.diagbot.vo.QcresultVO;
+import com.diagbot.vo.UPdDefectBackByIDVO;
+import com.diagbot.vo.his.DoctorHosVO;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  * 缺陷反馈表 前端控制器
@@ -18,5 +35,81 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/medDefectFeedback")
 @Api(value = "缺陷反馈模块相关接口API", tags = { "缺陷反馈模块相关接口API" })
 public class MedDefectFeedbackController {
+    @Autowired
+    private DoctorHosFacade doctorHosFacade;
+    @Autowired
+    private MedDefectFeedbackFacade medDefectFeedbackFacade;
+
+    @ApiOperation(value = "获取His医生信息[by:songxl]",
+            notes = "获取His医生信息")
+    @PostMapping("/getHisDoctorInfo")
+    @SysLogger("getHisDoctorInfo")
+    public RespDTO<List<DoctorHosDTO>> getDoctorInfo(@RequestBody DoctorHosVO doctorHosVO){
+        return RespDTO.onSuc(doctorHosFacade.getDoctorInfo(doctorHosVO));
+    }
+
+    @ApiOperation(value = "新增已有质控条目[by:songxl]",
+            notes = "")
+    @PostMapping("/addHavingCase")
+    @SysLogger("addHavingCase")
+    @Transactional
+    public RespDTO<AnalyzeDTO> addHavingCase(@RequestBody ChangeQcResultVO changeQcResultVO) {
+        changeQcResultVO.setType(1);
+        return RespDTO.onSuc(medDefectFeedbackFacade.changeQcResult(changeQcResultVO));
+    }
+
+    @ApiOperation(value = "新增缺失质控条目[by:songxl]",
+            notes = "")
+    @PostMapping("/addNotHavingCase")
+    @SysLogger("addNotHavingCase")
+    @Transactional
+    public RespDTO<AnalyzeDTO> addNotHavingCase(@RequestBody ChangeQcResultVO changeQcResultVO) {
+        return RespDTO.onSuc(medDefectFeedbackFacade.changeQcResult(changeQcResultVO));
+    }
+
+
+    @ApiOperation(value = "删除质控条目[by:songxl]",
+            notes = "behospitalCode:病历号,必填<br>" +
+                    "id:明细id,必填<br>" +
+                    "delStatus:逻辑删除接口(1-还原和0-删除)标志 必填<br>")
+    @PostMapping("/delCase")
+    @SysLogger("delCase")
+    @Transactional
+    public RespDTO<AnalyzeDTO> delCase(@RequestBody ChangeQcResultVO changeQcResultVO) {
+        changeQcResultVO.setType(4);
+        changeQcResultVO.setDelStatus(0);
+        return RespDTO.onSuc(medDefectFeedbackFacade.changeQcResult(changeQcResultVO));
+    }
+    @ApiOperation(value = "恢复质控条目[by:songxl]",
+            notes = "behospitalCode:病历号,必填<br>" +
+                    "id:明细id,必填<br>" +
+                    "delStatus:逻辑删除接口(1-还原和0-删除)标志 必填<br>")
+    @PostMapping("/recoverCase")
+    @SysLogger("recoverCase")
+    @Transactional
+    public RespDTO<AnalyzeDTO> recoverCase(@RequestBody ChangeQcResultVO changeQcResultVO) {
+        changeQcResultVO.setType(4);
+        changeQcResultVO.setDelStatus(1);
+        return RespDTO.onSuc(medDefectFeedbackFacade.changeQcResult(changeQcResultVO));
+    }
+
+    @ApiOperation(value = "修改质控条目[by:songxl]",
+            notes = "")
+    @PostMapping("/updCase")
+    @SysLogger("updCase")
+    @Transactional
+    public RespDTO<AnalyzeDTO> updCase(@RequestBody ChangeQcResultVO changeQcResultVO) {
+        changeQcResultVO.setType(3);
+        return RespDTO.onSuc(medDefectFeedbackFacade.changeQcResult(changeQcResultVO));
+    }
+
+    @ApiOperation(value = "确认缺陷反馈[by:songxl]",
+            notes = "")
+    @PostMapping("/updDefectBackByID")
+    @SysLogger("updDefectBackByID")
+    @Transactional
+    public RespDTO<Boolean> updDefectBackByID(@RequestBody UPdDefectBackByIDVO uPdDefectBackByIDVO) {
+        return RespDTO.onSuc(medDefectFeedbackFacade.updDefectBackByID(uPdDefectBackByIDVO));
+    }
 
 }