Browse Source

nw弹窗 事中工单查询和反馈相关接口

Scott 2 years ago
parent
commit
e3514286a2

+ 30 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/mid/FeedbackReasonRequest.java

@@ -0,0 +1,30 @@
+package org.jeecg.modules.medical.common.bo.mid;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author soft01
+ * @time 2023/6/4 17:28
+ * @description '事中-工单反馈请求'
+ * @parentProject medical-java
+ */
+@ApiModel(value = "事中-工单反馈请求")
+@Data
+public class FeedbackReasonRequest implements Serializable {
+
+    @NotNull(message = "工单id不可为空")
+    @ApiModelProperty("工单id")
+    private Integer id;
+    @NotBlank(message = "反馈编码不可为空")
+    @ApiModelProperty("反馈编码")
+    private String feedbackCode;
+    @NotBlank(message = "反馈结果不可为空")
+    @ApiModelProperty("反馈结果")
+    private String feedbackResult;
+}

+ 36 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/mid/ViolationDetails.java

@@ -0,0 +1,36 @@
+package org.jeecg.modules.medical.common.bo.mid;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author soft01
+ * @time 2023/6/4 17:10
+ * @description '这里描写类的用途'
+ * @parentProject medical-java
+ */
+@Data
+@ApiModel(description = "违规明细")
+public class ViolationDetails implements Serializable {
+    @ApiModelProperty(value = "项目编码")
+    private String projectCode;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "是否医保")
+    private String isMedicalInsurance;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "数量")
+    private Integer quantity;
+
+    @ApiModelProperty(value = "异常金额")
+    private BigDecimal abnormalAmount;
+}

+ 36 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/mid/ViolationInfo.java

@@ -0,0 +1,36 @@
+package org.jeecg.modules.medical.common.bo.mid;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author soft01
+ * @time 2023/6/4 16:51
+ * @description '这里描写类的用途'
+ * @parentProject medical-java
+ */
+@Data
+@ApiModel(description = "违规信息")
+public class ViolationInfo implements Serializable {
+    @ApiModelProperty(value = "规则编码")
+    private String ruleCode;
+
+    @ApiModelProperty(value = "规则名称")
+    private String ruleName;
+
+    @ApiModelProperty(value = "违规等级")
+    private String violationLevel;
+
+    @ApiModelProperty(value = "提醒规则编码")
+    private String reminderRuleCode;
+
+    @ApiModelProperty(value = "就诊类型")
+    private String treatmentType;
+
+    @ApiModelProperty(value = "异常金额")
+    private BigDecimal abnormalAmount;
+}

+ 35 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/enums/MidFeedBackReasonEnum.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.medical.common.enums;
+
+import lombok.Getter;
+
+/**
+ * @author soft01
+ * @time 2023/6/4 17:52
+ * @description '这里描写类的用途'
+ * @parentProject medical-java
+ */
+@Getter
+public enum MidFeedBackReasonEnum {
+
+    TREATMENT_REQUIRED("1", "治疗需要"),
+    EMERGENCY("2", "急救"),
+    SELF_PAY_TRANSFER("3", "转自费"),
+    OTHER("4", "其他");
+
+    private final String code;
+    private final String codeText;
+
+    MidFeedBackReasonEnum(String code, String codeText) {
+        this.code = code;
+        this.codeText = codeText;
+    }
+
+    public static MidFeedBackReasonEnum findEnums(String feedbackCode) {
+        for (MidFeedBackReasonEnum value : MidFeedBackReasonEnum.values()) {
+            if (feedbackCode.equalsIgnoreCase(value.getCode())) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 55 - 21
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/MidIncidentAuditDetailController.java

@@ -2,16 +2,15 @@ package org.jeecg.modules.medical.controller;
 
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.medical.common.bo.mid.FeedbackReasonRequest;
+import org.jeecg.modules.medical.common.bo.mid.ViolationDetails;
+import org.jeecg.modules.medical.common.bo.mid.ViolationInfo;
 import org.jeecg.modules.medical.entity.MidIncidentAuditDetail;
 import org.jeecg.modules.medical.service.IMidIncidentAuditDetailService;
 
@@ -20,18 +19,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.medical.service.IMidIncidentAuditService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.jeecg.common.aspect.annotation.AutoLog;
@@ -43,14 +35,56 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  * @Date:   2023-05-09 14:37:06
  * @Version: V1.0
  */
-@Api(tags="mid_incident_audit_detail")
+@Api(tags="事中api")
 @RestController
 @RequestMapping("/medical/midIncidentAuditDetail")
 @Slf4j
 public class MidIncidentAuditDetailController extends JeecgController<MidIncidentAuditDetail, IMidIncidentAuditDetailService> {
 	@Autowired
 	private IMidIncidentAuditDetailService midIncidentAuditDetailService;
-	
+	@Autowired
+	private IMidIncidentAuditService midIncidentAuditService;
+
+
+	// 获取患者信息 、、同事前一样的接口,使用同一个
+
+	 /**
+	  * 根据始终推送的工单id,查询违规信息
+	  * @param req
+	  * @param id 事中工单id
+	  * @return
+	  */
+	 @ApiOperation(value="事中-获取违规信息列表", notes="获取违规信息列表")
+	 @GetMapping(value = "/violation/info/list")
+	 public Result<List<ViolationInfo>> loadViolationInfoList(HttpServletRequest req, Integer id) {
+		 List<ViolationInfo> resultList = midIncidentAuditDetailService.loadViolationInfoList(id);
+		 return Result.OK(resultList);
+	 }
+
+	 @ApiOperation(value = "事中-获取违规明细", notes = "根据工单ID和规则编码获取违规明细信息")
+	 @GetMapping("/violation/details")
+	 public Result<IPage<ViolationDetails>> loadViolationDetails(
+			 @RequestParam(name = "id", required = true) String id,
+			 @RequestParam(name = "ruleCode", required = true) String ruleCode,
+			 @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+			 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+		 if (pageSize >= 100) {
+			 pageSize = 100;
+		 }
+		 Page<ViolationDetails> page = new Page<>(pageNo, pageSize);
+		 IPage<ViolationDetails> violationDetails = midIncidentAuditDetailService.loadViolationDetails(page, id, ruleCode);
+		 return Result.OK(violationDetails);
+	 }
+
+
+	 @ApiOperation(value = "事中-工单反馈", notes = "事中-工单反馈")
+	 @PostMapping("/violation/feedback")
+	 public Result<?> updateReason(@RequestBody @Valid FeedbackReasonRequest request) {
+		midIncidentAuditDetailService.updateReason(request, midIncidentAuditService);
+		return Result.ok("完成");
+	 }
+
+
 	/**
 	 * 分页列表查询
 	 *
@@ -72,7 +106,7 @@ public class MidIncidentAuditDetailController extends JeecgController<MidInciden
 		IPage<MidIncidentAuditDetail> pageList = midIncidentAuditDetailService.page(page, queryWrapper);
 		return Result.OK(pageList);
 	}
-	
+
 	/**
 	 *   添加
 	 *
@@ -87,7 +121,7 @@ public class MidIncidentAuditDetailController extends JeecgController<MidInciden
 		midIncidentAuditDetailService.save(midIncidentAuditDetail);
 		return Result.OK("添加成功!");
 	}
-	
+
 	/**
 	 *  编辑
 	 *
@@ -102,7 +136,7 @@ public class MidIncidentAuditDetailController extends JeecgController<MidInciden
 		midIncidentAuditDetailService.updateById(midIncidentAuditDetail);
 		return Result.OK("编辑成功!");
 	}
-	
+
 	/**
 	 *   通过id删除
 	 *
@@ -117,7 +151,7 @@ public class MidIncidentAuditDetailController extends JeecgController<MidInciden
 		midIncidentAuditDetailService.removeById(id);
 		return Result.OK("删除成功!");
 	}
-	
+
 	/**
 	 *  批量删除
 	 *
@@ -132,7 +166,7 @@ public class MidIncidentAuditDetailController extends JeecgController<MidInciden
 		this.midIncidentAuditDetailService.removeByIds(Arrays.asList(ids.split(",")));
 		return Result.OK("批量删除成功!");
 	}
-	
+
 	/**
 	 * 通过id查询
 	 *

+ 7 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/MidIncidentAuditDetailMapper.java

@@ -2,7 +2,11 @@ package org.jeecg.modules.medical.mapper;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.medical.common.bo.mid.ViolationDetails;
+import org.jeecg.modules.medical.common.bo.mid.ViolationInfo;
 import org.jeecg.modules.medical.entity.MidIncidentAuditDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -14,4 +18,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MidIncidentAuditDetailMapper extends BaseMapper<MidIncidentAuditDetail> {
 
+    List<ViolationInfo> loadViolationInfoList(@Param("id") Integer id);
+
+    IPage<ViolationDetails> loadViolationDetails(Page<ViolationDetails> page, @Param("id") String id, @Param("ruleCode") String ruleCode);
 }

+ 31 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/MidIncidentAuditDetailMapper.xml

@@ -2,4 +2,34 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.medical.mapper.MidIncidentAuditDetailMapper">
 
-</mapper>
+    <select id="loadViolationInfoList" resultType="org.jeecg.modules.medical.common.bo.mid.ViolationInfo">
+        SELECT
+            any_value(medical_ins_rule_info_code) as ruleCode, -- "规则编码",
+            any_value(medical_ins_rule_info_name) as ruleName, -- "规则名称",
+            any_value(violation_level) as violationLevel, -- "违规等级",
+            "" as  reminderRuleCode, -- "提醒规则编码",
+            (SELECT treatment_type FROM mid_incident_audit WHERE id = md.mid_incident_audit_id) AS treatmentType, -- 就诊类型
+            SUM(md.amount) AS abnormalAmount -- 异常金额
+        FROM
+            mid_incident_audit_detail as md
+        WHERE
+            md.mid_incident_audit_id = #{id,jdbcType=INTEGER}
+        GROUP BY medical_ins_rule_info_code
+    </select>
+
+    <select id="loadViolationDetails" resultType="org.jeecg.modules.medical.common.bo.mid.ViolationDetails">
+        SELECT
+            md.project_type as projectCode, -- 项目编码
+            md.proejct_name as projectName, -- 项目名称
+            md.medical_insurance_mark as isMedicalInsurance, -- 是否医保
+            md.price as price, -- 单价
+            md.medical_number as quantity, -- 数量
+            md.amount as abnormalAmount -- 异常金额
+        FROM
+            mid_incident_audit_detail as md
+        <where>
+            and md.mid_incident_audit_id = #{id,jdbcType=INTEGER}
+            and md.medical_ins_rule_info_code = #{ruleCode,jdbcType=VARCHAR}
+        </where>
+    </select>
+</mapper>

+ 20 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IMidIncidentAuditDetailService.java

@@ -1,8 +1,15 @@
 package org.jeecg.modules.medical.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.medical.common.bo.mid.FeedbackReasonRequest;
+import org.jeecg.modules.medical.common.bo.mid.ViolationDetails;
+import org.jeecg.modules.medical.common.bo.mid.ViolationInfo;
 import org.jeecg.modules.medical.entity.MidIncidentAuditDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: mid_incident_audit_detail
  * @Author: jeecg-boot
@@ -11,4 +18,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IMidIncidentAuditDetailService extends IService<MidIncidentAuditDetail> {
 
+    List<ViolationInfo> loadViolationInfoList(Integer id);
+
+
+    /**
+     * 根据事中工单id获取违规明细
+     * @param page
+     * @param id 事中工单id
+     * @param ruleCode 规则编码
+     * @return
+     */
+    IPage<ViolationDetails> loadViolationDetails(Page<ViolationDetails> page, String id, String ruleCode);
+
+    void updateReason(FeedbackReasonRequest request, IMidIncidentAuditService midIncidentAuditService);
 }

+ 62 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MidIncidentAuditDetailServiceImpl.java

@@ -1,11 +1,27 @@
 package org.jeecg.modules.medical.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.medical.common.bo.mid.FeedbackReasonRequest;
+import org.jeecg.modules.medical.common.bo.mid.ViolationDetails;
+import org.jeecg.modules.medical.common.bo.mid.ViolationInfo;
+import org.jeecg.modules.medical.common.enums.MidFeedBackReasonEnum;
+import org.jeecg.modules.medical.entity.MidIncidentAudit;
 import org.jeecg.modules.medical.entity.MidIncidentAuditDetail;
 import org.jeecg.modules.medical.mapper.MidIncidentAuditDetailMapper;
 import org.jeecg.modules.medical.service.IMidIncidentAuditDetailService;
+import org.jeecg.modules.medical.service.IMidIncidentAuditService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
 
 /**
  * @Description: mid_incident_audit_detail
@@ -13,7 +29,53 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @Date:   2023-05-09 14:37:06
  * @Version: V1.0
  */
+@Slf4j
 @Service
+@Transactional(readOnly = true)
 public class MidIncidentAuditDetailServiceImpl extends ServiceImpl<MidIncidentAuditDetailMapper, MidIncidentAuditDetail> implements IMidIncidentAuditDetailService {
 
+    @Override
+    public List<ViolationInfo> loadViolationInfoList(Integer id) {
+        return baseMapper.loadViolationInfoList(id);
+    }
+
+    @Override
+    public IPage<ViolationDetails> loadViolationDetails(Page<ViolationDetails> page, String id, String ruleCode) {
+        IPage<ViolationDetails> detail = baseMapper.loadViolationDetails(page, id, ruleCode);
+        return detail;
+    }
+
+    @Transactional(readOnly = false)
+    @Override
+    public void updateReason(FeedbackReasonRequest request,  IMidIncidentAuditService midIncidentAuditService) {
+        final Integer id = request.getId();
+        // 反馈类型检查
+        MidFeedBackReasonEnum reasonCode = MidFeedBackReasonEnum.findEnums(request.getFeedbackCode());
+        if (null == reasonCode) {
+            log.error("反馈code不正确,请检查={}", request.getFeedbackCode());
+            throw new JeecgBootException("反馈code不正确,请检查!");
+        }
+        if (reasonCode == MidFeedBackReasonEnum.OTHER) {
+            if (!StringUtils.hasText(request.getFeedbackResult())) {
+                log.error("反馈类型选择其他时,原因不可为空");
+                throw new JeecgBootException("反馈原因不可为空");
+            }
+        }
+        // 1.查询工单是否存在
+        MidIncidentAudit audit = midIncidentAuditService.getById(id);
+        if (null == audit) {
+            log.error("事中工单id={},获取不到事中信息", id);
+            throw new JeecgBootException("找不到事中工单信息");
+        }
+        if (StringUtils.hasText(audit.getFeedbackCode())) {
+            log.error("当前工单已经反馈过,不可重复操作,工单id={}", audit.getId());
+            throw new JeecgBootException("当前工单已经反馈过,不可重复操作!");
+        }
+
+        LambdaUpdateWrapper<MidIncidentAudit> updateWrapper = Wrappers.<MidIncidentAudit>lambdaUpdate()
+                .set(MidIncidentAudit::getFeedbackCode, request.getFeedbackCode())
+                .set(MidIncidentAudit::getFeedbackResult, request.getFeedbackResult())
+                .eq(MidIncidentAudit::getId, audit.getId());
+        midIncidentAuditService.update(updateWrapper);
+    }
 }