zhaops %!s(int64=5) %!d(string=hai) anos
pai
achega
b5af2ea037

+ 107 - 0
src/main/java/com/diagbot/aggregate/DeptStatisticsAggregate.java

@@ -0,0 +1,107 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.QcResultPercentDTO;
+import com.diagbot.dto.ResultDetailDTO;
+import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.facade.QcresultInfoFacade;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.FilterVO;
+import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:科室统计
+ * @Author:zhaops
+ * @time: 2020/5/6 17:21
+ */
+@Component
+public class DeptStatisticsAggregate {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+
+    @DataProvider("setAllDept")
+    public Map<String, Object> setAllDept(
+            @InvokeParameter("filterVO") FilterVO filterVO,
+            @DataConsumer("getLevelResultDept") List<QcResultPercentDTO> levelResults,
+            @DataConsumer("getResultDept") List<ResultDetailDTO> results) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        if (ListUtil.isNotEmpty(levelResults)) {
+            retMap.put("各科室甲级病历占比", levelResults);
+        }
+        if (ListUtil.isNotEmpty(results)) {
+            retMap.put("各科室缺陷占比", results);
+        }
+        return retMap;
+    }
+
+    @DataProvider("getLevelResultDept")
+    public List<QcResultPercentDTO> getLevelResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<QcResultPercentDTO> qcResultPercentList = qcresultInfoFacade.levelPercentGroupByDept(filterVO);
+        qcResultPercentList = qcResultPercentList.stream().limit(10).collect(Collectors.toList());
+        return qcResultPercentList;
+    }
+
+
+    @DataProvider("getResultDept")
+    public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
+        if (ListUtil.isNotEmpty(results2)) {
+            int totle = results2
+                    .stream()
+                    .map(ResultDetailDTO::getNum)
+                    .reduce(0, Integer::sum);
+            results2.forEach(result -> {
+                Double percent = BigDecimal.valueOf(result.getNum())
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                result.setPercent(percent);
+            });
+            List<ResultDetailDTO> retResults = Lists.newLinkedList();
+            if (results2.size() <= 6) {
+                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
+            } else {
+
+                Double rate = 0d;
+                Integer num = 0;
+                for (ResultDetailDTO result : results2) {
+                    if (retResults.size() < 5) {
+                        rate = BigDecimal.valueOf(rate)
+                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
+                                .doubleValue();
+                        retResults.add(result);
+                    } else {
+                        num += result.getNum();
+                    }
+                }
+                ResultDetailDTO retResult = new ResultDetailDTO();
+                retResult.setName("其他");
+                retResult.setNum(num);
+                retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
+                retResults.add(retResult);
+            }
+            retResults.forEach(result -> {
+                DecimalFormat df = new DecimalFormat("#0.00");
+                String percentStr
+                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
+                result.setPercentStr(percentStr);
+            });
+            return retResults;
+        }
+        return null;
+    }
+}

+ 3 - 53
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -20,7 +20,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * @Description:
+ * @Description:缺陷相关统计
  * @author: gaodm
  * @time: 2020/4/22 18:09
  */
@@ -32,15 +32,12 @@ public class ResultStatisticsAggregate {
     @DataProvider("setAllResult")
     public Map<String, Object> setAllResult(
             @InvokeParameter("filterVO") FilterVO filterVO,
-            @DataConsumer("getResult") List<ResultDetailDTO> results,
-            @DataConsumer("getResultDept") List<ResultDetailDTO> results2) {
+            @DataConsumer("getResult") List<ResultDetailDTO> results) {
         Map<String, Object> retMap = new LinkedHashMap<>();
         if (ListUtil.isNotEmpty(results)) {
             retMap.put("缺陷排行列表", results);
         }
-        if (ListUtil.isNotEmpty(results2)) {
-            retMap.put("各科室缺陷占比", results2);
-        }
+
         return retMap;
     }
 
@@ -74,51 +71,4 @@ public class ResultStatisticsAggregate {
         return null;
     }
 
-    @DataProvider("getResultDept")
-    public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
-        if (ListUtil.isNotEmpty(results2)) {
-            int totle = results2
-                    .stream()
-                    .map(ResultDetailDTO::getNum)
-                    .reduce(0, Integer::sum);
-            results2.forEach(result -> {
-                Double percent = BigDecimal.valueOf(result.getNum())
-                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
-                        .doubleValue();
-                result.setPercent(percent);
-            });
-            List<ResultDetailDTO> retResults = Lists.newLinkedList();
-            if (results2.size() <= 6) {
-                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
-            } else {
-
-                Double rate = 0d;
-                Integer num = 0;
-                for (ResultDetailDTO result : results2) {
-                    if (retResults.size() < 5) {
-                        rate = BigDecimal.valueOf(rate)
-                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
-                                .doubleValue();
-                        retResults.add(result);
-                    } else {
-                        num += result.getNum();
-                    }
-                }
-                ResultDetailDTO retResult = new ResultDetailDTO();
-                retResult.setName("其他");
-                retResult.setNum(num);
-                retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
-                retResults.add(retResult);
-            }
-            retResults.forEach(result -> {
-                DecimalFormat df = new DecimalFormat("#0.00");
-                String percentStr
-                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-                result.setPercentStr(percentStr);
-            });
-            return retResults;
-        }
-        return null;
-    }
 }

+ 18 - 0
src/main/java/com/diagbot/dto/NumDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/6 15:55
+ */
+@Getter
+@Setter
+public class NumDTO {
+    private Integer totleNum;
+    private Integer num;
+    private Double percent;
+    private String percentStr;
+}

+ 23 - 0
src/main/java/com/diagbot/dto/QcResultPercentDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/6 13:20
+ */
+@Getter
+@Setter
+public class QcResultPercentDTO {
+    private String deptId;
+    private String deptName;
+    private Integer totleNum;
+    private Integer firstLevelNum;
+    //private Integer secondLevelNum;
+    //private Integer thirdLevelNum;
+    private String firstPercent;
+    //private String secondPercent;
+    //private String thirdPercent;
+}

+ 140 - 84
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -2,15 +2,24 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.NumDTO;
+import com.diagbot.dto.QcResultPercentDTO;
+import com.diagbot.dto.SysRoleDTO;
+import com.diagbot.dto.SysUserRoleDTO;
 import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.entity.SysRole;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HomePageFilterVO;
 import com.diagbot.vo.QcresultFilterVO;
+import com.diagbot.vo.SysUserBaseVO;
 import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,11 +27,13 @@ import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -37,108 +48,128 @@ public class ConsoleFacade {
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
-    private HomePageFacade homePageFacade;
-    @Autowired
     private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
 
 
     /**
-     * 病历相关统计
+     * 出院人数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> leaveHosStatistics(FilterVO filterVO) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        retMap.put("总人数", 0);
+        retMap.put("死亡人数", 0);
+        retMap.put("新生儿人数", 0);
+        retMap.put("手术病人数", 0);
+        filterVO.setHospitalId(hospitalId);
+        filterVO.setStartDate(getStartDateStr(filterVO.getType()));
+        filterVO.setEndDate(getEndDateStr(filterVO.getType()));
+        HomePageFilterVO homePageFilterVO = new HomePageFilterVO();
+        BeanUtil.copyProperties(filterVO, homePageFilterVO);
+        Integer totleNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
+        homePageFilterVO.setDeath(1);
+        Integer deathNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
+        homePageFilterVO.setDeath(null);
+        homePageFilterVO.setNewBorn(1);
+        Integer newBornNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
+        Integer operationNum = behospitalInfoFacade.homePageCountForOperation(filterVO);
+        retMap.put("总人数", totleNum);
+        retMap.put("死亡人数", deathNum);
+        retMap.put("新生儿人数", newBornNum);
+        retMap.put("手术病人数", operationNum);
+        return retMap;
+    }
+
+    /**
+     * 质控病历统计
      *
      * @return
      */
     public Map<String, Object> mrStatistics(FilterVO filterVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
         Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String startDate = getStartDateStr(filterVO.getType());
+        String endDate = getEndDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
         filterVO.setHospitalId(hospitalId);
-
-        QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
-        behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id", hospitalId)
-                .ge("behospital_date", startDate);
-        int behospitalInfoCount = behospitalInfoFacade.count(behospitalInfoQueryWrapper);
-        //病历数
-        if (filterVO.getType().equals(1)) {
-            retMap.put("本月病历数", behospitalInfoCount);
-        } else if (filterVO.getType().equals(2)) {
-            retMap.put("本年病历数", behospitalInfoCount);
-        }
-
         QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
         BeanUtil.copyProperties(filterVO, qcresultFilterVO);
-        //本月质控数-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("");
-        int qcresultByGradeType2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月质控数-人工", qcresultByGradeType2Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年质控数-人工", qcresultByGradeType2Count);
-        }
-        //本月质控数-机器
-        qcresultFilterVO.setGradeType(1);
-        qcresultFilterVO.setLevel("");
-        int qcresultByGradeType1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月质控数-机器", qcresultByGradeType1Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年质控数-机器", qcresultByGradeType1Count);
-        }
-        //本月甲级病历-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("甲");
-        int qcresultByGradeType2AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月甲级病历-人工", qcresultByGradeType2AndLevel1Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年甲级病历-人工", qcresultByGradeType2AndLevel1Count);
-        }
-        //本月甲级病历-机器
-        qcresultFilterVO.setGradeType(1);
+
+        int totleNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
         qcresultFilterVO.setLevel("甲");
-        int qcresultByGradeType1AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月甲级病历-机器", qcresultByGradeType1AndLevel1Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年甲级病历-机器", qcresultByGradeType1AndLevel1Count);
-        }
-        //本月乙级病历-人工
-        qcresultFilterVO.setGradeType(2);
+        int firstLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
         qcresultFilterVO.setLevel("乙");
-        int qcresultByGradeType2AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月乙级病历-人工", qcresultByGradeType2AndLevel2Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年乙级病历-人工", qcresultByGradeType2AndLevel2Count);
-        }
-        //本月乙级病历-机器
-        qcresultFilterVO.setGradeType(1);
-        qcresultFilterVO.setLevel("乙");
-        int qcresultByGradeType1AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月乙级病历-机器", qcresultByGradeType1AndLevel2Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年乙级病历-机器", qcresultByGradeType1AndLevel2Count);
-        }
-        //本月乙级病历-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("丙");
-        int qcresultByGradeType2AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月丙级病历-人工", qcresultByGradeType2AndLevel3Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年丙级病历-人工", qcresultByGradeType2AndLevel3Count);
-        }
-        //本月乙级病历-机器
-        qcresultFilterVO.setGradeType(1);
+        int secondLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
         qcresultFilterVO.setLevel("丙");
-        int qcresultByGradeType1AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (filterVO.getType().equals(1)) {
-            retMap.put("本月丙级病历-机器", qcresultByGradeType1AndLevel3Count);
-        } else if (filterVO.getType().equals(2)) {
-            retMap.put("本年丙级病历-机器", qcresultByGradeType1AndLevel3Count);
+        int thirdLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        NumDTO totleNumDTO = new NumDTO();
+        totleNumDTO.setTotleNum(totleNum);
+        totleNumDTO.setNum(totleNum);
+        NumDTO firstLevelNumDTO = new NumDTO();
+        firstLevelNumDTO.setNum(firstLevelNum);
+        firstLevelNumDTO.setTotleNum(totleNum);
+        Double firstPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        firstLevelNumDTO.setPercent(firstPercent);
+        firstLevelNumDTO.setPercentStr(firstPercentStr);
+        NumDTO secondLevelNumDTO = new NumDTO();
+        secondLevelNumDTO.setNum(secondLevelNum);
+        secondLevelNumDTO.setTotleNum(totleNum);
+        Double secondPercent = BigDecimal.valueOf(secondLevelNum)
+                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        secondLevelNumDTO.setPercent(secondPercent);
+        secondLevelNumDTO.setPercentStr(secondPercentStr);
+        NumDTO thirdLevelNumDTO = new NumDTO();
+        thirdLevelNumDTO.setNum(thirdLevelNum);
+        thirdLevelNumDTO.setTotleNum(totleNum);
+        Double thirdPercent = BigDecimal.valueOf(1)
+                .subtract(BigDecimal.valueOf(firstPercent))
+                .subtract(BigDecimal.valueOf(secondPercent))
+                .doubleValue();
+        String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        thirdLevelNumDTO.setPercent(thirdPercent);
+        thirdLevelNumDTO.setPercentStr(thirdPercentStr);
+        retMap.put("累计质控病历数", totleNumDTO);
+        retMap.put("甲级病历", firstLevelNumDTO);
+        retMap.put("乙级病历", secondLevelNumDTO);
+        retMap.put("丙级病历", thirdLevelNumDTO);
+        return retMap;
+    }
+
+    /**
+     * 按科室统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> deptStatistics(FilterVO filterVO) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        retMap.put("各科室甲级病历占比", Lists.newLinkedList());
+        retMap.put("各科室缺陷占比", Lists.newLinkedList());
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String startDate = getStartDateStr(filterVO.getType());
+        String endDate = getEndDateStr(filterVO.getType());
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        filterVO.setHospitalId(hospitalId);
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("filterVO", filterVO);
+            retMap
+                    = dataBeanAggregateQueryFacade.get("setAllDept", invokeParams, Map.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
         return retMap;
     }
@@ -286,6 +317,31 @@ public class ConsoleFacade {
         return startDate;
     }
 
+    /**
+     * 筛选截止时间
+     *
+     * @param type
+     * @return
+     */
+    public String getEndDateStr(Integer type) {
+        Date date = new Date();
+        String endDate = "";
+        String year = DateUtil.getYear(date);
+        int month = DateUtil.getMonth(date);
+        if (type.equals(1)) {
+            //本月统计
+            if (month == 12) {
+                endDate = (Integer.valueOf(year) + 1) + "-1-1";
+            } else {
+                endDate = year + "-" + (month + 1) + "-1";
+            }
+        } else if (type.equals(2)) {
+            //本年统计
+            endDate = (Integer.valueOf(year) + 1) + "-1-1";
+        }
+        return endDate;
+    }
+
     /**
      * 根据限制数量重组统计结果
      *

+ 17 - 0
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -9,6 +9,7 @@ import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HomePageFilterVO;
 
 import java.util.List;
 
@@ -72,4 +73,20 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
     IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
 
     IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
+
+    /**
+     * 病案首页相关病历数统计
+     *
+     * @param homePageFilterVO
+     * @return
+     */
+    public int homePageCount(HomePageFilterVO homePageFilterVO);
+
+    /**
+     * 手术病历数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public int homePageCountForOperation(FilterVO filterVO);
 }

+ 20 - 0
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,9 +1,13 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
+import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcresultFilterVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控评分结果信息
@@ -22,4 +26,20 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      * @return
      */
     public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);
+
+    /**
+     * 质控病历数统计
+     *
+     * @param qcresultFilterVO
+     * @return
+     */
+    public int resultCount(QcresultFilterVO qcresultFilterVO);
+
+    /**
+     * 按科室统计各等级病历百分比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<QcResultPercentDTO> levelPercentGroupByDept(FilterVO filterVO);
 }

+ 19 - 1
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -9,6 +9,7 @@ import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HomePageFilterVO;
 
 import java.util.List;
 
@@ -70,5 +71,22 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
     public List<BehospitalInfo> getNoGrade();
 
     IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
+
     IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
-}
+
+    /**
+     * 病案首页相关病历数统计
+     *
+     * @param homePageFilterVO
+     * @return
+     */
+    public int homePageCount(HomePageFilterVO homePageFilterVO);
+
+    /**
+     * 手术病历数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public int homePageCountForOperation(FilterVO filterVO);
+}

+ 21 - 0
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,9 +1,13 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
+import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcresultFilterVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控评分结果信息
@@ -22,4 +26,21 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
      * @return
      */
     public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);
+
+    /**
+     * 质控病历数统计
+     *
+     * @param qcresultFilterVO
+     * @return
+     */
+    public int resultCount(QcresultFilterVO qcresultFilterVO);
+
+
+    /**
+     * 按科室统计各等级病历百分比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<QcResultPercentDTO> levelPercentGroupByDept(FilterVO filterVO);
 }

+ 27 - 1
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.MsgDTO;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.dto.ResultDetailDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.mapper.BehospitalInfoMapper;
@@ -11,6 +12,8 @@ import com.diagbot.service.BehospitalInfoService;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HomePageFilterVO;
+import com.diagbot.vo.QcresultFilterVO;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -97,11 +100,34 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     }
 
     @Override
-    public IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO){
+    public IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO) {
         return baseMapper.getPageByDept(behospitalPageVO);
     }
+
     @Override
     public IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO) {
         return baseMapper.getPageByPerson(behospitalPageVO);
     }
+
+    /**
+     * 病案首页相关病历数统计
+     *
+     * @param homePageFilterVO
+     * @return
+     */
+    @Override
+    public int homePageCount(HomePageFilterVO homePageFilterVO) {
+        return baseMapper.homePageCount(homePageFilterVO);
+    }
+
+    /**
+     * 手术病历数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public int homePageCountForOperation(FilterVO filterVO) {
+        return baseMapper.homePageCountForOperation(filterVO);
+    }
 }

+ 27 - 0
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -1,12 +1,16 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.service.QcresultInfoService;
+import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcresultFilterVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控评分结果信息
@@ -29,4 +33,27 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO) {
         return baseMapper.getQcresultSelectively(qcresultFilterVO);
     }
+
+    /**
+     * 质控病历数统计
+     *
+     * @param qcresultFilterVO
+     * @return
+     */
+    @Override
+    public int resultCount(QcresultFilterVO qcresultFilterVO) {
+        return baseMapper.resultCount(qcresultFilterVO);
+    }
+
+
+    /**
+     * 按科室统计各等级病历百分比
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<QcResultPercentDTO> levelPercentGroupByDept(FilterVO filterVO) {
+        return baseMapper.levelPercentGroupByDept(filterVO);
+    }
 }

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

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/6 11:29
+ */
+@Getter
+@Setter
+public class HomePageFilterVO extends FilterVO {
+    /**
+     * 死亡
+     */
+    private Integer death;
+
+    /**
+     * 新生儿
+     */
+    private Integer newBorn;
+}

+ 56 - 0
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -461,4 +461,60 @@
 
     </select>
 
+    <!-- 病案首页病历数统计 -->
+    <select id="homePageCount" parameterType="com.diagbot.vo.HomePageFilterVO" resultType="int">
+        SELECT
+        COUNT(*)
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="death!=null and death==1">
+            AND b.leave_hospital_type = '死亡'
+        </if>
+        <if test="newBorn!=null and newBorn==1">
+            AND ( b.age IS NULL OR b.age = '-' OR b.age = '' )
+            <![CDATA[AND ( b.newborn_month IS NOT NULL OR b.newborn_month <> '' OR b.newborn_day IS NOT NULL OR b.newborn_day <> '' )]]>
+        </if>
+    </select>
+
+    <!-- 病案首页手术病历数统计 -->
+    <select id="homePageCountForOperation" parameterType="com.diagbot.vo.FilterVO" resultType="int">
+        SELECT
+        COUNT(*)
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_home_operation_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND b.home_page_id = c.home_page_id
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+    </select>
 </mapper>

+ 72 - 1
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -18,7 +18,7 @@
         <result column="remark" property="remark" />
     </resultMap>
 
-    <!-- 缺陷排行列表 -->
+    <!-- 病历数统计 -->
     <select id="getQcresultSelectively"  parameterType="com.diagbot.vo.QcresultFilterVO" resultType="int">
         SELECT
         count(1)
@@ -44,4 +44,75 @@
         </if>
     </select>
 
+    <!-- 质控病历数统计 -->
+    <select id="resultCount" parameterType="com.diagbot.vo.QcresultFilterVO" resultType="int">
+        SELECT
+        COUNT(*)
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="gradeType != null and gradeType != ''">
+            AND c.grade_type = #{gradeType}
+        </if>
+        <if test="level != null and level != ''">
+            AND c.level = #{level}
+        </if>
+    </select>
+
+    <!-- 按科室统计质控病历数 -->
+    <select id="levelPercentGroupByDept" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.QcResultPercentDTO">
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        count(*) AS totleNum,
+        sum( c.`level` = '甲' ) AS firstLevelNum,
+        sum( c.`level` = '乙' ) AS secondLevelNum,
+        sum( c.`level` = '丙' ) AS thirdLevelNum,
+        concat( ROUND( sum( c.`level` = '甲' )/ count(*)* 100, 2 ), '%' ) AS firstPercent,
+        concat( ROUND( sum( c.`level` = '乙' )/ count(*)* 100, 2 ), '%' ) AS sencondPercent,
+        concat( ROUND( sum( c.`level` = '丙' )/ count(*)* 100, 2 ), '%' ) AS thirdPercent
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+    </select>
+
 </mapper>