Переглянути джерело

excel 编码、关联编码循环嵌套

lenovodn 2 роки тому
батько
коміт
90accbec48
12 змінених файлів з 159 додано та 4 видалено
  1. 3 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/mid/response/MidAuditDetailResponse.java
  2. 12 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/ViolationAnalysisController.java
  3. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/AdvanceWarningAuditMapper.java
  4. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/MidIncidentAuditDetailMapper.java
  5. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/AdvanceWarningAuditMapper.xml
  6. 30 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/MidIncidentAuditDetailMapper.xml
  7. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAdvanceWarningAuditService.java
  8. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IMidIncidentAuditDetailService.java
  9. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IViolationAnalysisService.java
  10. 38 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AdvanceWarningAuditServiceImpl.java
  11. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MidIncidentAuditDetailServiceImpl.java
  12. 46 4
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/ViolationAnalysisServiceImpl.java

+ 3 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/mid/response/MidAuditDetailResponse.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.medical.common.bo.mid.response;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.jeecg.modules.medical.common.bo.before.PatientInformationResponse;
+import org.jeecg.modules.medical.common.bo.before.PrescriptionDetail;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -46,6 +47,8 @@ public class MidAuditDetailResponse implements Serializable {
 
     @ApiModelProperty(value = "异常金额总和")
     private BigDecimal errorAmountTotal;
+    @ApiModelProperty(value = "药量情况")
+    private List<PrescriptionDetail> prescriptionDetail;
 
 
 

+ 12 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/ViolationAnalysisController.java

@@ -11,11 +11,14 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.medical.common.bo.ReportAfterQueryResponseBO;
 import org.jeecg.modules.medical.common.bo.before.AuditAdvanceWarningAuditDetailResponse;
+import org.jeecg.modules.medical.common.bo.before.MedicalHistoryRecord;
+import org.jeecg.modules.medical.common.bo.before.PrescriptionDetail;
 import org.jeecg.modules.medical.common.bo.mid.AuditMidDetailListResponse;
 import org.jeecg.modules.medical.common.bo.mid.request.AuditMidDetailListRequest;
 import org.jeecg.modules.medical.common.bo.mid.response.MidAuditDetailResponse;
 import org.jeecg.modules.medical.common.bo.mid.response.MidAuditViolateProjectStatisticsResponse;
 import org.jeecg.modules.medical.common.bo.mid.response.MidDeptAuditDetailResponse;
+import org.jeecg.modules.medical.service.IAdvanceWarningAuditService;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
 import org.jeecg.modules.medical.service.IAfterwardsAuditDetailService;
@@ -47,6 +50,8 @@ public class ViolationAnalysisController {
     @Autowired
     private IViolationAnalysisService violationAnalysisService;
     @Autowired
+    private IAdvanceWarningAuditService advanceWarningAuditService;
+    @Autowired
     private IAfterwardsAuditService afterwardsAuditService;
     @Autowired
     private IAfterwardsAuditDetailService afterwardsAuditDetailService;
@@ -61,6 +66,13 @@ public class ViolationAnalysisController {
         IPage<AuditAdvanceWarningAuditDetailResponse> result = violationAnalysisService.loadBeforeList(advanceWarningAuditDetail, pageNo, pageSize, parameterMap);
         return Result.OK(result);
     }
+    @ApiOperation(value="违规分析-事前审查统-查看详情", notes="违规分析-事前审查-查看详情")
+    @GetMapping(value = "/before/detail")
+    public Result<MidAuditDetailResponse> beforeAuditDetail(@RequestParam(name = "detailId") Integer detailId) {
+        MidAuditDetailResponse reqObject = violationAnalysisService.beforeAuditDetail(detailId);
+        return Result.OK(reqObject);
+    }
+
 
     @ApiOperation(value="违规分析-事中审查统计", notes="违规分析-事中审查统计")
     @GetMapping(value = "/mid/list")

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

@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.medical.common.bo.before.*;
 import org.jeecg.modules.medical.entity.AdvanceWarningAudit;
 
+import java.util.List;
+
 /**
  * @Description: advance_warning_audit
  * @Author: jeecg-boot
@@ -40,5 +42,8 @@ public interface AdvanceWarningAuditMapper extends BaseMapper<AdvanceWarningAudi
     IPage<PrescriptionDetail> loadPrescriptionsByCase(Page<MedicalHistoryRecord> page, @Param("id") Integer id,
                                                       @Param("tableName") String tableName);
 
+    List<PrescriptionDetail> listPrescriptionsByCase(@Param("id") String id,
+                                                     @Param("tableName") String tableName);
+
     PrescriptionDetail loadTreatmentMasterInfo(@Param("id") Integer id, @Param("tableName") String tableName);
 }

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

@@ -32,6 +32,8 @@ public interface MidIncidentAuditDetailMapper extends BaseMapper<MidIncidentAudi
 
     IPage<MidDeptAuditDetailResponse> midDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, @Param("deptName") String deptName,
                                                        @Param("startTime") String startTime, @Param("endTime") String endTime);
+    IPage<MidDeptAuditDetailResponse> afterDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, @Param("deptName") String deptName,
+                                                       @Param("startTime") String startTime, @Param("endTime") String endTime);
 
     IPage<MidAuditViolateProjectStatisticsResponse> violateProjectStatisticsList(IPage<AuditAdvanceWarningAuditDetailResponse> page, @Param("projectSearch")String projectSearch,
                                                                                  @Param("startTime") String startTime, @Param("endTime") String endTime);

+ 14 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/AdvanceWarningAuditMapper.xml

@@ -129,6 +129,20 @@
         WHERE
             hd.hisid = #{id,jdbcType=INTEGER}
     </select>
+    <select id="listPrescriptionsByCase"
+            resultType="org.jeecg.modules.medical.common.bo.before.PrescriptionDetail">
+        SELECT
+            hd.item_name_hosp as itemNameHosp, -- "药品名称"
+            "" as department, -- "科室
+            hd.usage_date as usageDate, --  "开药时间
+            "" as doctorName, -- "医生名称", -- 从主表带出来
+            hd.use_day as useDay -- 药量使用天数
+--             hd.use_day - (NOW() - hd.usage_date) as "剩余天数"
+        FROM
+            ${tableName} AS hd
+        WHERE
+            hd.hisid = #{id,jdbcType=INTEGER}
+    </select>
 
     <select id="loadTreatmentMasterInfo"
             resultType="org.jeecg.modules.medical.common.bo.before.PrescriptionDetail">

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

@@ -79,6 +79,36 @@
         GROUP BY medical_dept_code
         ORDER BY violationDoctorNumber DESC
     </select>
+
+
+    <select id="afterDeptAuditList"
+            resultType="org.jeecg.modules.medical.common.bo.mid.response.MidDeptAuditDetailResponse">
+        SELECT
+        m.medical_dept_name
+        ,m.medical_dept_code
+        ,(SELECT count(*) from sys_user_depart where dep_id = (SELECT id from sys_depart where medical_dept_code = m.medical_dept_code)) as deptDoctorTotal -- 科室医生总数
+        ,(select count(*) from ( SELECT  count(doctor_id) from afterwards_audit_detail WHERE medical_dept_code = m.medical_dept_code GROUP BY doctor_id) as t  ) as violationDoctorNumber -- 违规医生总数
+        ,COUNT(id) as violationTotal
+        ,(select IFNULL(sum(amount), 0) from afterwards_audit_detail WHERE medical_dept_code = m.medical_dept_code and treatment_type = '2') as outpatientsErrorAmount  -- 门诊违规金额
+        ,(select IFNULL(sum(amount),0) from afterwards_audit_detail WHERE medical_dept_code = m.medical_dept_code and treatment_type = '1') as hospErrorAmount -- 住院违规金额
+        ,sum(amount) as errorAmountTotal -- 异常金额总和
+        FROM afterwards_audit_detail as m
+        <where>
+            <if test="deptName != null and deptName != ''">
+                AND m.medical_dept_name like LIKE concat(concat('%',#{deptName}),'%')
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and <![CDATA[ m.create_time >= #{startTime} ]]>
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and <![CDATA[ m.create_time <= #{endTime} ]]>
+            </if>
+        </where>
+        GROUP BY medical_dept_code
+        ORDER BY violationDoctorNumber DESC
+    </select>
+
+
     <select id="violateProjectStatisticsList"
             resultType="org.jeecg.modules.medical.common.bo.mid.response.MidAuditViolateProjectStatisticsResponse">
         SELECT

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

@@ -45,4 +45,5 @@ public interface IAdvanceWarningAuditService extends IService<AdvanceWarningAudi
      * @return
      */
     IPage<PrescriptionDetail> loadPrescriptionsByCase(Page<MedicalHistoryRecord> page, Integer id, String treatmentType);
+    List<PrescriptionDetail> listPrescriptionsByCase( String id, String treatmentType);
 }

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

@@ -48,6 +48,7 @@ public interface IMidIncidentAuditDetailService extends IService<MidIncidentAudi
 
 
     IPage<MidDeptAuditDetailResponse> midDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String deptName, String startTime, String endTime);
+    IPage<MidDeptAuditDetailResponse> afterDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String deptName, String startTime, String endTime);
 
 
     IPage<MidAuditViolateProjectStatisticsResponse> violateProjectStatisticsList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String projectSearch, String startTime, String endTime);

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

@@ -41,10 +41,12 @@ public interface IViolationAnalysisService {
 
 
     IPage<MidDeptAuditDetailResponse> midDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String deptName, String startTime, String endTime);
+    IPage<MidDeptAuditDetailResponse> afterDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String deptName, String startTime, String endTime);
 
 
     IPage<MidAuditViolateProjectStatisticsResponse> violateProjectStatisticsList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String projectSearch, String startTime, String endTime);
 
 
+    MidAuditDetailResponse beforeAuditDetail(Integer detailId);
     IPage<MidAuditDetailResponse> midViolateRuleTypePageList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String medicalInsRuleInfoName, String projectType, String startTime, String endTime);
 }

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

@@ -208,4 +208,42 @@ public class AdvanceWarningAuditServiceImpl extends ServiceImpl<AdvanceWarningAu
         }
         return result;
     }
+
+    @Override
+    public List<PrescriptionDetail> listPrescriptionsByCase( String id, String treatmentType) {
+
+        String detailTableName = "";
+        String masterTableName = "";
+        if ("1".equalsIgnoreCase(treatmentType)) { // 住院
+            detailTableName = "hospitalizatio_settle_detail";
+            masterTableName = "master_admission_bill";
+        } else if ("2".equalsIgnoreCase(treatmentType)) { // 门诊
+            detailTableName = "outpatient_settlement_details";
+            masterTableName = "outpatient_settle_bill";
+        }
+        //获取结算主单的科室,和医生信息
+        PrescriptionDetail masterInfo = baseMapper.loadTreatmentMasterInfo(Integer.valueOf(id), masterTableName);
+        List<PrescriptionDetail> result = baseMapper.listPrescriptionsByCase( id, detailTableName);
+        if (!CollectionUtils.isEmpty(result)) {
+            for (PrescriptionDetail record : result) {
+                if(null != masterInfo) {
+                    record.setDepartment(masterInfo.getDepartment());
+                    record.setDoctorName(masterInfo.getDoctorName());
+                }
+                // 计算药品剩余天数
+                LocalDate now = LocalDate.now();
+                if (null != record.getUsageDate()) {
+                    Date date = record.getUsageDate();
+                    Instant instant = date.toInstant();
+                    LocalDate usageLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
+                    // 获取两个日期天数相差
+                    long until = usageLocalDate.until(now, ChronoUnit.DAYS) + 1;
+                    if (record.getUseDay() != null) {
+                        record.setRemainingDays(record.getUseDay() - until);
+                    }
+                }
+            }
+        }
+        return result;
+    }
 }

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

@@ -138,6 +138,11 @@ public class MidIncidentAuditDetailServiceImpl extends ServiceImpl<MidIncidentAu
         return baseMapper.midDeptAuditList(page, deptName, startTime, endTime);
     }
 
+    @Override
+    public IPage<MidDeptAuditDetailResponse> afterDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String deptName, String startTime, String endTime) {
+        return baseMapper.afterDeptAuditList(page, deptName, startTime, endTime);
+    }
+
     @Override
     public IPage<MidAuditViolateProjectStatisticsResponse> violateProjectStatisticsList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String projectSearch, String startTime, String endTime) {
         return baseMapper.violateProjectStatisticsList(page, projectSearch, startTime, endTime);

+ 46 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/ViolationAnalysisServiceImpl.java

@@ -6,17 +6,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.medical.common.bo.before.AuditAdvanceWarningAuditDetailResponse;
 import org.jeecg.modules.medical.common.bo.before.PatientInformationResponse;
+import org.jeecg.modules.medical.common.bo.before.PrescriptionDetail;
 import org.jeecg.modules.medical.common.bo.mid.AuditMidDetailListResponse;
 import org.jeecg.modules.medical.common.bo.mid.request.AuditMidDetailListRequest;
 import org.jeecg.modules.medical.common.bo.mid.response.*;
 import org.jeecg.modules.medical.entity.AdvanceWarningAuditDetail;
 import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
-import org.jeecg.modules.medical.service.IAdvanceWarningAuditDetailService;
-import org.jeecg.modules.medical.service.IMidIncidentAuditDetailService;
-import org.jeecg.modules.medical.service.IMidIncidentAuditService;
-import org.jeecg.modules.medical.service.IViolationAnalysisService;
+import org.jeecg.modules.medical.service.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -44,6 +43,8 @@ public class ViolationAnalysisServiceImpl implements IViolationAnalysisService {
     private IMidIncidentAuditService midIncidentAuditService;
     @Autowired // 事中审查详情服务
     private IMidIncidentAuditDetailService midIncidentAuditDetailService;
+    @Autowired
+    private IAdvanceWarningAuditService advanceWarningAuditService;
 
     @Override
     public IPage<AuditAdvanceWarningAuditDetailResponse> loadBeforeList(AuditAdvanceWarningAuditDetailResponse advanceWarningAuditDetail, Integer pageNo, Integer pageSize, Map<String, String[]> parameterMap) {
@@ -70,6 +71,7 @@ public class ViolationAnalysisServiceImpl implements IViolationAnalysisService {
 
     /**
      * 事中审查统计
+     *
      * @param request
      * @param pageNo
      * @param pageSize
@@ -104,6 +106,7 @@ public class ViolationAnalysisServiceImpl implements IViolationAnalysisService {
 
     /**
      * 事中审查统计-查看明细
+     *
      * @param detailId: 详情ID
      * @return
      */
@@ -163,6 +166,11 @@ public class ViolationAnalysisServiceImpl implements IViolationAnalysisService {
         return midIncidentAuditDetailService.midDeptAuditList(page, deptName, startTime, endTime);
     }
 
+    @Override
+    public IPage<MidDeptAuditDetailResponse> afterDeptAuditList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String deptName, String startTime, String endTime) {
+        return midIncidentAuditDetailService.afterDeptAuditList(page, deptName, startTime, endTime);
+    }
+
     @Override
     public IPage<MidAuditViolateProjectStatisticsResponse> violateProjectStatisticsList(IPage<AuditAdvanceWarningAuditDetailResponse> page, String projectSearch, String startTime, String endTime) {
         return midIncidentAuditDetailService.violateProjectStatisticsList(page, projectSearch, startTime, endTime);
@@ -173,6 +181,40 @@ public class ViolationAnalysisServiceImpl implements IViolationAnalysisService {
         return midIncidentAuditDetailService.midViolateRuleTypePageList(page, medicalInsRuleInfoName, projectType, startTime, endTime);
     }
 
+    @Override
+    public MidAuditDetailResponse beforeAuditDetail(Integer detailId) {
+
+        MidAuditDetailResponse result = new MidAuditDetailResponse();
+
+        AdvanceWarningAuditDetail detailInfo = advanceWarningAuditDetailService.getById(detailId);
+        if (detailInfo == null) {
+            log.error("找不到审查记录");
+            throw new JeecgBootException("找不到审查记录");
+        }
+        result.setDescription(detailInfo.getDescription());
+        result.setViolationLevel(detailInfo.getReminderLevel());
+        result.setMedicalInsRuleInfoCode(detailInfo.getMedicalInsRuleInfoCode());
+        List<PrescriptionDetail> prescriptionDetails = advanceWarningAuditService.listPrescriptionsByCase(detailInfo.getOutpatientNumber(), detailInfo.getTreatmentType());
+        if (oConvertUtils.isNotEmpty(prescriptionDetails)) {
+            result.setPrescriptionDetail(prescriptionDetails);
+        }
+        // 构建患者信息
+        PatientInformationResponse patientInformationResponse =
+                midIncidentAuditDetailService.loadPatientInfoById(detailInfo.getPatientId().toString(), midIncidentAuditService);
+        result.setPatientInfo(patientInformationResponse);
+        // 构建医生信息
+        MidAuditDoctorInfo midAuditDoctorInfo = new MidAuditDoctorInfo();
+        midAuditDoctorInfo.setMedicalDeptCode(detailInfo.getMedicalDeptCode());
+        midAuditDoctorInfo.setMedicalDeptName(detailInfo.getMedicalDeptName());
+        midAuditDoctorInfo.setDoctorId(detailInfo.getDoctorId());
+        midAuditDoctorInfo.setDoctorName(detailInfo.getDoctorName());
+//        midAuditDoctorInfo.setFeedbackResult(detailInfo.getFeedbackResult());
+        result.setDoctorInfo(midAuditDoctorInfo);
+
+
+        return result;
+    }
+
 //    @Override
 //    public IPage<AfterwardsAuditDetail> allAuditPage(AuditMidDetailListRequest request, Integer pageNo, Integer pageSize, Map<String, String[]> parameterMap) {
 //        Page<AfterwardsAuditDetail> page = new Page<>(pageNo, pageSize);