Prechádzať zdrojové kódy

Merge branch 'dev/20200426_2nd' into debug

gaodm 5 rokov pred
rodič
commit
46402abe17
23 zmenil súbory, kde vykonal 795 pridanie a 202 odobranie
  1. 7 7
      doc/002.20200426第二版/qc_init.sql
  2. 107 0
      src/main/java/com/diagbot/aggregate/DeptStatisticsAggregate.java
  3. 67 46
      src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java
  4. 20 0
      src/main/java/com/diagbot/dto/NumDTO.java
  5. 23 0
      src/main/java/com/diagbot/dto/QcResultPercentDTO.java
  6. 1 1
      src/main/java/com/diagbot/exception/ServiceErrorCode.java
  7. 138 136
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  8. 7 1
      src/main/java/com/diagbot/facade/SysUserFacade.java
  9. 17 0
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  10. 8 0
      src/main/java/com/diagbot/mapper/QcCasesMapper.java
  11. 30 1
      src/main/java/com/diagbot/mapper/QcresultInfoMapper.java
  12. 19 1
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  13. 9 1
      src/main/java/com/diagbot/service/QcCasesService.java
  14. 31 1
      src/main/java/com/diagbot/service/QcresultInfoService.java
  15. 27 1
      src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java
  16. 11 0
      src/main/java/com/diagbot/service/impl/QcCasesServiceImpl.java
  17. 40 1
      src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java
  18. 23 0
      src/main/java/com/diagbot/vo/HomePageFilterVO.java
  19. 2 2
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  20. 18 0
      src/main/java/com/diagbot/web/ConsoleController.java
  21. 58 2
      src/main/resources/mapper/BehospitalInfoMapper.xml
  22. 18 0
      src/main/resources/mapper/QcCasesMapper.xml
  23. 114 1
      src/main/resources/mapper/QcresultInfoMapper.xml

+ 7 - 7
doc/002.20200426第二版/qc_init.sql

@@ -81,7 +81,7 @@ CREATE TABLE `qc_module_info` (
   `record_module_id` bigint(20) DEFAULT NULL COMMENT 'med_record_module的id',
   `remark` varchar(300) DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`id`),
-  UNIQUE KEY `INDEX_1` (`hospital_id`,`record_module_id`)
+  KEY `INDEX_1` (`hospital_id`,`record_module_id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='模型表';
 
 -- ----------------------------
@@ -235,7 +235,7 @@ CREATE TABLE `sys_permission` (
 INSERT INTO `sys_permission` VALUES ('1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取用户、机构、菜单信息', 'FUNC000001', '/sys/user/getUserOrgMenu', 'ALL', '基础功能-获取用户、机构、菜单信息', null);
 INSERT INTO `sys_permission` VALUES ('2', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改密码', 'FUNC000002', '/sys/user/midifyPassword', 'ALL', '基础功能-修改密码', null);
 INSERT INTO `sys_permission` VALUES ('3', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院模块数据信息', 'FUNC000003', '/qc/cases/getQcCases', 'ALL', '用户-基础数据维护-获取医院模块数据信息', null);
-INSERT INTO `sys_permission` VALUES ('4', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '批量更新模块数据', 'FUNC000004', '/qc/cases/saveQcCases', 'ALL', '用户-基础数据维护-批量更新模块数据', null);
+INSERT INTO `sys_permission` VALUES ('4', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '更新医院模块数据', 'FUNC000004', '/qc/cases/saveQcCases', 'ALL', '用户-基础数据维护-批量更新模块数据', null);
 INSERT INTO `sys_permission` VALUES ('5', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页查询', 'FUNC000005', '/qc/behospitalInfo/page', 'ALL', '用户-质控评分-分页', null);
 INSERT INTO `sys_permission` VALUES ('6', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页获取医院条目数据信息', 'FUNC000006', '/qc/casesEntryHospital/getQcCasesEntryAll', 'ALL', '用户-条目数据维护-分页获取医院条目数据信息', null);
 INSERT INTO `sys_permission` VALUES ('7', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改医院条目数据信息', 'FUNC000007', '/qc/casesEntryHospital/updataQcCasesEntry', 'ALL', '用户-条目数据维护-修改医院条目数据信息', null);
@@ -423,11 +423,11 @@ INSERT INTO `sys_role_permission` VALUES ('54', 'N', '1970-01-01 12:00:00', '197
 INSERT INTO `sys_role_permission` VALUES ('55', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '37', '用户-质控评分(科室)-修改质控条目');
 INSERT INTO `sys_role_permission` VALUES ('56', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '38', '用户-质控评分(科室)-获取详情');
 INSERT INTO `sys_role_permission` VALUES ('57', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '39', '用户-质控评分(个人)-获取病历质控一览下用户科室下拉列表信息');
-INSERT INTO `sys_role_permission` VALUES ('58', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '40', '用户-质控评分(科室)-评分');
-INSERT INTO `sys_role_permission` VALUES ('59', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '41', '用户-质控评分(科室)-新增质控条目');
-INSERT INTO `sys_role_permission` VALUES ('60', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '42', '用户-质控评分(科室)-删除质控条目');
-INSERT INTO `sys_role_permission` VALUES ('61', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '43', '用户-质控评分(科室)-修改质控条目');
-INSERT INTO `sys_role_permission` VALUES ('62', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '44', '用户-质控评分(科室)-获取详情');
+INSERT INTO `sys_role_permission` VALUES ('58', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '40', '用户-质控评分(个人)-评分');
+INSERT INTO `sys_role_permission` VALUES ('59', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '41', '用户-质控评分(个人)-新增质控条目');
+INSERT INTO `sys_role_permission` VALUES ('60', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '42', '用户-质控评分(个人)-删除质控条目');
+INSERT INTO `sys_role_permission` VALUES ('61', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '43', '用户-质控评分(个人)-修改质控条目');
+INSERT INTO `sys_role_permission` VALUES ('62', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '44', '用户-质控评分(个人)-获取详情');
 
 
 

+ 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() <= 10) {
+                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
+            } else {
+
+                Double rate = 0d;
+                Integer num = 0;
+                for (ResultDetailDTO result : results2) {
+                    if (retResults.size() < 9) {
+                        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;
+    }
+}

+ 67 - 46
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -1,10 +1,15 @@
 package com.diagbot.aggregate;
 
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.ResultDetailDTO;
 import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.facade.QcCasesFacade;
+import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterVO;
 import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.annotation.DataConsumer;
 import io.github.lvyahui8.spring.annotation.DataProvider;
@@ -15,12 +20,15 @@ import org.springframework.stereotype.Component;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
- * @Description:
+ * @Description:缺陷相关统计
  * @author: gaodm
  * @time: 2020/4/22 18:09
  */
@@ -28,18 +36,22 @@ import java.util.Map;
 public class ResultStatisticsAggregate {
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private QcCasesFacade qcCasesFacade;
 
     @DataProvider("setAllResult")
     public Map<String, Object> setAllResult(
             @InvokeParameter("filterVO") FilterVO filterVO,
             @DataConsumer("getResult") List<ResultDetailDTO> results,
-            @DataConsumer("getResultDept") List<ResultDetailDTO> results2) {
+            @DataConsumer("entryCountGroupByCase") List<NumDTO> entryNums) {
         Map<String, Object> retMap = new LinkedHashMap<>();
-        if (ListUtil.isNotEmpty(results)) {
-            retMap.put("缺陷排行列表", results);
+        if (ListUtil.isNotEmpty(entryNums)) {
+            retMap.put("各模块缺陷占比排行", entryNums);
         }
-        if (ListUtil.isNotEmpty(results2)) {
-            retMap.put("各科室缺陷占比", results2);
+        if (ListUtil.isNotEmpty(results)) {
+            retMap.put("条目缺陷占比", results);
         }
         return retMap;
     }
@@ -63,8 +75,10 @@ public class ResultStatisticsAggregate {
                 String percentStr
                         = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
                 result.setPercentStr(percentStr);
+                //top9+其他
                 if (retResutls.size() < 10) {
                     retResutls.add(result);
+                } else {
                 }
 
             });
@@ -74,51 +88,58 @@ 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);
+    @DataProvider("entryCountGroupByCase")
+    public List<NumDTO> entryCountGroupByCase(@InvokeParameter("filterVO") FilterVO filterVO) {
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
+        int mrNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        List<NumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCase(filterVO);
+        List<NumDTO> standardEntryNumList = qcCasesFacade.entryGroupByCase();
+        if (ListUtil.isEmpty(qcEntryNumList)) {
+            standardEntryNumList.forEach(entryNum -> {
+                Integer totleNum = entryNum.getNum() * mrNum;
+                entryNum.setPercent(0d);
+                entryNum.setPercentStr("0%");
+                entryNum.setTotleNum(totleNum);
             });
-            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())))
+        } else {
+            Map<Long, Integer> qcEntryNumMap
+                    = EntityUtil.makeMapWithKeyValue(qcEntryNumList, "id", "num");
+            if (ListUtil.isNotEmpty(standardEntryNumList)) {
+                standardEntryNumList.forEach(entryNum -> {
+                    Integer totleNum = entryNum.getNum() * mrNum;
+                    if (qcEntryNumMap.containsKey(entryNum.getId())) {
+                        Double percent = BigDecimal.valueOf(entryNum.getNum())
+                                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
                                 .doubleValue();
-                        retResults.add(result);
+                        DecimalFormat df = new DecimalFormat("#0.00");
+                        String percentStr
+                                = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                        entryNum.setTotleNum(totleNum);
+                        entryNum.setPercent(percent);
+                        entryNum.setPercentStr(percentStr);
                     } else {
-                        num += result.getNum();
+                        entryNum.setPercent(0d);
+                        entryNum.setPercentStr("0%");
+                        entryNum.setTotleNum(totleNum);
                     }
-                }
-                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);
+            //降序排序
+            Collections.sort(standardEntryNumList, new Comparator<NumDTO>() {
+                @Override
+                public int compare(NumDTO o1, NumDTO o2) {
+                    return o2.getPercent().compareTo(o1.getPercent());
+                }
             });
-            return retResults;
         }
-        return null;
+
+        //取top10
+        standardEntryNumList = standardEntryNumList
+                .stream()
+                .limit(10)
+                .collect(Collectors.toList());
+
+        return standardEntryNumList;
     }
-}
+}

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

@@ -0,0 +1,20 @@
+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 Long id;
+    private String name;
+    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;
+}

+ 1 - 1
src/main/java/com/diagbot/exception/ServiceErrorCode.java

@@ -8,7 +8,7 @@ package com.diagbot.exception;
  * @time: 2018/9/10 11:11
  */
 public enum ServiceErrorCode implements ErrorCode {
-    USER_NOT_FOUND("10020000", "该账号暂未注册"),
+    USER_NOT_FOUND("10020000", "该账号暂未注册或已被禁用,请联系管理员"),
     USER_PASSWORD_ERROR("10020001", "账号或密码不正确"),
     GET_TOKEN_FAIL("10020002", "获取token失败"),
     TOKEN_IS_NOT_MATCH_USER("10020003", "请使用自己的token进行接口请求"),

+ 138 - 136
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,15 +1,14 @@
 package com.diagbot.facade;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.AverageStatisticsDTO;
-import com.diagbot.entity.BehospitalInfo;
-import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HomePageFilterVO;
 import com.diagbot.vo.QcresultFilterVO;
 import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
@@ -18,6 +17,7 @@ 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;
@@ -37,108 +37,132 @@ 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);
-        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);
+        int firstLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
         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.setName("累计质控病历数");
+        totleNumDTO.setTotleNum(totleNum);
+        totleNumDTO.setNum(totleNum);
+        NumDTO firstLevelNumDTO = new NumDTO();
+        firstLevelNumDTO.setName("甲级病历");
+        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.setName("乙级病历");
+        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.setName("丙级病历");
+        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;
     }
@@ -151,59 +175,12 @@ public class ConsoleFacade {
      */
     public Map<String, Object> resultStatistics(FilterVO filterVO) {
         Map<String, Object> retMap = new LinkedHashMap<>();
-        retMap.put("缺陷排行列表", Lists.newLinkedList());
-        retMap.put("各科室缺陷占比", Lists.newLinkedList());
+        retMap.put("各模块缺陷占比排行", Lists.newLinkedList());
+        retMap.put("条目缺陷占比", Lists.newLinkedList());
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
         filterVO.setHospitalId(hospitalId);
-        /*if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
-            filterVO.setLimitCount(10);
-        }*/
-        //        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
-        //        if (ListUtil.isNotEmpty(results)) {
-        //            results.forEach(result -> {
-        //                DecimalFormat df = new DecimalFormat("#0.00");
-        //                String percentStr
-        //                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-        //                result.setPercentStr(percentStr);
-        //            });
-        //            retMap.put("缺陷排行列表", results);
-        //        }
-        //        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
-        //        if (ListUtil.isNotEmpty(results2)) {
-        //            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);
-        //            });
-        //            retMap.put("各科室缺陷占比", retResults);
-        //        }
-
         try {
             Map<String, Object> invokeParams = new HashMap<>();
             invokeParams.put("filterVO", filterVO);
@@ -286,6 +263,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;
+    }
+
     /**
      * 根据限制数量重组统计结果
      *

+ 7 - 1
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -459,7 +459,7 @@ public class SysUserFacade extends SysUserServiceImpl {
         checkUser(sysUserBaseVO.getUserId());
         Date now = DateUtil.now();
         String userId = SysUserUtils.getCurrentPrincipleID();
-        return this.update(new UpdateWrapper<SysUser>()
+        Boolean res = this.update(new UpdateWrapper<SysUser>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("id", sysUserBaseVO.getUserId())
                 .eq("status", StatusEnum.Enable.getKey())
@@ -467,6 +467,12 @@ public class SysUserFacade extends SysUserServiceImpl {
                 .set("gmt_modified", now)
                 .set("status", StatusEnum.Disable.getKey())
         );
+        //删除Token
+        if (res) {
+            tokenFacade.deleteToken(sysUserBaseVO.getUserId().toString());
+        }
+
+        return res;
     }
 
     /**

+ 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);
 }

+ 8 - 0
src/main/java/com/diagbot/mapper/QcCasesMapper.java

@@ -1,6 +1,7 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcCasesDTO;
 import com.diagbot.entity.QcCases;
 import com.diagbot.vo.QcCasesQueryVO;
@@ -17,4 +18,11 @@ import java.util.List;
  */
 public interface QcCasesMapper extends BaseMapper<QcCases> {
     List<QcCasesDTO> getQcCases(QcCasesQueryVO queryVO);
+
+    /**
+     * 按模块统计条目数
+     *
+     * @return
+     */
+    List<NumDTO> entryGroupByCase();
 }

+ 30 - 1
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,9 +1,14 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.NumDTO;
+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 +27,28 @@ 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);
+
+    /**
+     * 按模块统计缺陷数
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> entryCountGroupByCase(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);
+}

+ 9 - 1
src/main/java/com/diagbot/service/QcCasesService.java

@@ -1,6 +1,7 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcCasesDTO;
 import com.diagbot.entity.QcCases;
 import com.diagbot.vo.QcCasesQueryVO;
@@ -17,4 +18,11 @@ import java.util.List;
  */
 public interface QcCasesService extends IService<QcCases> {
     List<QcCasesDTO> getQcCases(QcCasesQueryVO queryVO);
-}
+
+    /**
+     * 按模块统计条目数
+     *
+     * @return
+     */
+    List<NumDTO> entryGroupByCase();
+}

+ 31 - 1
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,9 +1,14 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.NumDTO;
+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 +27,29 @@ 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);
+
+    /**
+     * 按模块统计缺陷数
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> entryCountGroupByCase(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);
+    }
 }

+ 11 - 0
src/main/java/com/diagbot/service/impl/QcCasesServiceImpl.java

@@ -1,6 +1,7 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcCasesDTO;
 import com.diagbot.entity.QcCases;
 import com.diagbot.mapper.QcCasesMapper;
@@ -24,4 +25,14 @@ public class QcCasesServiceImpl extends ServiceImpl<QcCasesMapper, QcCases> impl
     public List<QcCasesDTO> getQcCases(QcCasesQueryVO queryVO) {
         return baseMapper.getQcCases(queryVO);
     }
+
+    /**
+     * 按模块统计条目数
+     *
+     * @return
+     */
+    @Override
+    public List<NumDTO> entryGroupByCase() {
+        return baseMapper.entryGroupByCase();
+    }
 }

+ 40 - 1
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -1,12 +1,17 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.NumDTO;
+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 +34,38 @@ 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);
+    }
+
+    /**
+     * 按模块统计缺陷数
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<NumDTO> entryCountGroupByCase(FilterVO filterVO) {
+        return baseMapper.entryCountGroupByCase(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;
+}

+ 2 - 2
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -75,7 +75,7 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(behospitalInfoFacade.analyze(analyzeVO));
     }
 
-    @ApiOperation(value = "评分[by:zhoutg]",
+    @ApiOperation(value = "定时任务评分[by:zhoutg]",
             notes = "")
     @PostMapping("/analyze_rpc")
     @SysLogger("analyze_rpc")
@@ -128,7 +128,7 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
 
-    @ApiOperation(value = "批量执行[by:zhoutg]",
+    @ApiOperation(value = "将未评分的病历进行评分[by:zhoutg]",
             notes = "")
     @PostMapping("/execule")
     @SysLogger("execule")

+ 18 - 0
src/main/java/com/diagbot/web/ConsoleController.java

@@ -54,4 +54,22 @@ public class ConsoleController {
         Map<String, Object> data = consoleFacade.averageStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
+
+    @ApiOperation(value = "科室相关统计[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/deptStatistics")
+    @SysLogger("deptStatistics")
+    public RespDTO<Map<String, Object>> deptStatistics(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleFacade.deptStatistics(filterVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "出院相关统计[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/leaveHosStatistics")
+    @SysLogger("leaveHosStatistics")
+    public RespDTO<Map<String, Object>> leaveHosStatistics(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleFacade.leaveHosStatistics(filterVO);
+        return RespDTO.onSuc(data);
+    }
 }

+ 58 - 2
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -362,9 +362,9 @@
             and CONCAT( IFNULL(t.doctor_name,''),IFNULL(t.beh_doctor_name,''),IFNULL(t.director_doctor_name,'')) like CONCAT('%',#{doctorName},'%')
         </if>
         <if test="doctorCode != null and doctorCode != ''">
-            and t.doctor_id = #{doctorCode}
+            and (t.doctor_id = #{doctorCode}
             or t.beh_doctor_id = #{doctorCode}
-            or t.director_doctor_id = #{doctorCode}
+            or t.director_doctor_id = #{doctorCode})
         </if>
         <if test="name != null and name != ''">
             and t.name like CONCAT('%',#{name},'%')
@@ -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>

+ 18 - 0
src/main/resources/mapper/QcCasesMapper.xml

@@ -32,4 +32,22 @@
             and qch.hospital_id = #{hospitalId}
         </if>
     </select>
+
+    <!-- 按模块统计条目数 -->
+    <select id="entryGroupByCase" resultType="com.diagbot.dto.NumDTO">
+        SELECT
+        a.id,
+        a.NAME,
+        count(*) AS num
+        FROM
+        qc_cases a,
+        qc_cases_entry b
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND a.id = b.cases_id
+        GROUP BY
+        a.id,
+        a.`name`
+    </select>
 </mapper>

+ 114 - 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,117 @@
         </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>
+
+    <!-- 按模块统计质控缺陷数 -->
+    <select id="entryCountGroupByCase" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.NumDTO">
+        SELECT
+        d.cases_id AS id,
+        e.NAME AS name,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d,
+        qc_cases e,
+        qc_cases_entry f
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND e.is_deleted = 'N'
+        AND f.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        AND d.cases_id = e.id
+        AND d.cases_entry_id = f.id
+        AND e.id = f.cases_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>
+        GROUP BY
+        d.cases_id,
+        e.`name`
+    </select>
 </mapper>