Parcourir la source

1.所有统计查询关联病案首页
2.控制台首页和详情页查询结果保持一致

zhaops il y a 5 ans
Parent
commit
b05bdaac10

+ 31 - 31
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -71,6 +71,7 @@ public class ResultStatisticsAggregate {
      */
     @DataProvider("entryCountGroupByCase")
     public List<NumDTO> entryCountGroupByCase(@InvokeParameter("filterVO") FilterVO filterVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
         Integer limitCount = filterVO.getLimitCount();
         QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
         BeanUtil.copyProperties(filterVO, qcresultFilterVO);
@@ -78,40 +79,39 @@ public class ResultStatisticsAggregate {
         List<NumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCase(filterVO);
         List<NumDTO> standardEntryNumList = qcCasesFacade.entryGroupByCase();
         if (ListUtil.isEmpty(qcEntryNumList)) {
-            standardEntryNumList.forEach(entryNum -> {
-                Integer totleNum = entryNum.getNum() * mrNum;
+            return qcEntryNumList;
+        }
+        if (ListUtil.isEmpty(standardEntryNumList)
+                && ListUtil.isNotEmpty(qcEntryNumList)) {
+            qcEntryNumList.forEach(entryNum -> {
                 entryNum.setNum(0);
                 entryNum.setPercent(0d);
                 entryNum.setPercentStr("0%");
-                entryNum.setTotleNum(totleNum);
+                entryNum.setTotleNum(0);
+            });
+        }
+        if (ListUtil.isNotEmpty(qcEntryNumList)) {
+            Map<String, Integer> standardMap
+                    = EntityUtil.makeMapWithKeyValue(standardEntryNumList, "name", "num");
+            qcEntryNumList.forEach(item -> {
+                if (!standardMap.containsKey(item.getName())) {
+                    item.setTotleNum(0);
+                    item.setPercent(0d);
+                    item.setPercentStr("0%");
+                } else {
+                    Integer totleNum = standardMap.get(item.getName()) * mrNum;
+                    Double percent = BigDecimal.valueOf(item.getNum())
+                            .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                            .doubleValue();
+                    String percentStr
+                            = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                    item.setTotleNum(totleNum);
+                    item.setPercent(percent);
+                    item.setPercentStr(percentStr);
+                }
             });
-        } 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())) {
-                        entryNum.setNum(qcEntryNumMap.get(entryNum.getId()));
-                        Double percent = BigDecimal.valueOf(entryNum.getNum())
-                                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                                .doubleValue();
-                        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 {
-                        entryNum.setNum(0);
-                        entryNum.setPercent(0d);
-                        entryNum.setPercentStr("0%");
-                        entryNum.setTotleNum(totleNum);
-                    }
-                });
-            }
             //降序排序
-            Collections.sort(standardEntryNumList, new Comparator<NumDTO>() {
+            Collections.sort(qcEntryNumList, new Comparator<NumDTO>() {
                 @Override
                 public int compare(NumDTO o1, NumDTO o2) {
                     return o2.getPercent().compareTo(o1.getPercent());
@@ -120,12 +120,12 @@ public class ResultStatisticsAggregate {
         }
 
         //取top10
-        standardEntryNumList = standardEntryNumList
+        qcEntryNumList = qcEntryNumList
                 .stream()
                 .limit(limitCount)
                 .collect(Collectors.toList());
 
-        return standardEntryNumList;
+        return qcEntryNumList;
     }
 
     /**

+ 1 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -58,6 +58,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/bas/dept/getListUser").permitAll()
                 .antMatchers("/qc/behospitalInfo/page_dept").permitAll()
                 .antMatchers("/qc/behospitalInfo/page_person").permitAll()
+                .antMatchers("/consoleByDept/getDept").permitAll()
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
     }

+ 1 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -101,6 +101,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/bas/dept/getListUser", request)
                 || matchers("/qc/behospitalInfo/page_dept", request)
                 || matchers("/qc/behospitalInfo/page_person", request)
+                || matchers("/consoleByDept/getDept", request)
                 || matchers("/", request)) {
             return true;
         }

+ 10 - 67
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
 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.EntityUtil;
@@ -500,73 +498,14 @@ public class ConsoleByDeptFacade {
      */
     public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(FilterPageByDeptVO filterPageByDeptVO) {
         if (StringUtil.isBlank(filterPageByDeptVO.getDeptName())) {
-            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入科室");
+            List<DeptBaseDTO> deptList = this.getDept();
+            //默认取第一个科室
+            if (ListUtil.isNotEmpty(deptList)) {
+                filterPageByDeptVO.setDeptName(deptList.get(0).getDeptName());
+            }
         }
-        DecimalFormat df = new DecimalFormat("#0.00");
         filterPageByDeptVOSet(filterPageByDeptVO);
-        long current = filterPageByDeptVO.getCurrent();
-        long size = filterPageByDeptVO.getSize();
-        filterPageByDeptVO.setCurrent(0);
-        filterPageByDeptVO.setSize(filterPageByDeptVO.getTotal());
         IPage<DeptNumDTO> page = qcresultInfoFacade.entryCountGroupByCaseAndDeptPage(filterPageByDeptVO);
-        //各科室模块-质控结果
-        List<DeptNumDTO> records = page.getRecords();
-        Map<String, List<DeptNumDTO>> recordMap = ListUtil.isEmpty(records)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityListMap(records, "deptName");
-        //获取每个科室的病历数
-        QcresultFilterByDeptVO qcresultFilterByDeptVO = new QcresultFilterByDeptVO();
-        BeanUtil.copyProperties(filterPageByDeptVO, qcresultFilterByDeptVO);
-        List<NumDTO> mrNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
-        Map<String, NumDTO> mrMap = ListUtil.isEmpty(mrNumList)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityMap(mrNumList, "name");
-        //各模块缺陷数
-        List<NumDTO> standardCaseList = qcCasesFacade.entryGroupByCase();
-        if (ListUtil.isEmpty(standardCaseList)) {
-            return null;
-        }
-        Map<String, NumDTO> standardCaseMap
-                = EntityUtil.makeEntityMap(standardCaseList, "name");
-        if (ListUtil.isNotEmpty(records)) {
-            Integer mrNum = mrMap.containsKey(filterPageByDeptVO.getDeptName())
-                    ? mrMap.get(filterPageByDeptVO.getDeptName()).getNum()
-                    : 0;
-            records.forEach(item -> {
-                if (!standardCaseMap.containsKey(item.getName())) {
-                    item.setTotleNum(0);
-                    item.setPercent(0d);
-                    item.setPercentStr("0%");
-                } else {
-                    Integer totleNum = standardCaseMap.get(item.getName()).getNum() * mrNum;
-                    item.setTotleNum(totleNum);
-                    Double percent = BigDecimal.valueOf(item.getNum())
-                            .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                            .doubleValue();
-                    String percentStr
-                            = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                    item.setPercent(percent);
-                    item.setPercentStr(percentStr);
-                }
-            });
-            //降序排序
-            Collections.sort(records, new Comparator<NumDTO>() {
-                @Override
-                public int compare(NumDTO o1, NumDTO o2) {
-                    return o2.getPercent().compareTo(o1.getPercent());
-                }
-            });
-        }
-
-        List<DeptNumDTO> retList = Lists.newLinkedList();
-        if (current * size + size > records.size()) {
-            retList = records.subList(Long.valueOf(current * size).intValue(), records.size());
-        } else {
-            retList = records.subList(Long.valueOf(current * size).intValue(), Long.valueOf(current * size + size).intValue());
-        }
-        page.setCurrent(current);
-        page.setSize(size);
-        page.setRecords(retList);
         return page;
     }
 
@@ -578,7 +517,11 @@ public class ConsoleByDeptFacade {
      */
     public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(FilterPageByDeptVO filterPageByDeptVO) {
         if (StringUtil.isBlank(filterPageByDeptVO.getDeptName())) {
-            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入科室");
+            List<DeptBaseDTO> deptList = this.getDept();
+            //默认取第一个科室
+            if (ListUtil.isNotEmpty(deptList)) {
+                filterPageByDeptVO.setDeptName(deptList.get(0).getDeptName());
+            }
         }
         DecimalFormat df = new DecimalFormat("#0.00");
         filterPageByDeptVOSet(filterPageByDeptVO);

+ 77 - 40
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -111,20 +111,24 @@
         (
         (
         SELECT
-        c.msg,
+        d.msg,
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -136,7 +140,7 @@
             <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
         </if>
         GROUP BY
-        c.msg
+        d.msg
         ORDER BY
         count(*) DESC
         ) t1,
@@ -145,16 +149,20 @@
         count(*) AS totle
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -187,16 +195,20 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -218,16 +230,20 @@
         count(*) AS totle
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -245,20 +261,25 @@
     <!-- 缺陷排行列表 -->
     <select id="resultStatistics2"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.NumDTO">
         SELECT
-        c.msg as name,
+        d.msg as name,
         count(*) AS num
         FROM
+        FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -270,7 +291,7 @@
             <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
         </if>
         GROUP BY
-        c.msg
+        d.msg
         ORDER BY
         count(*) DESC
         <if test="limitCount != null and limitCount != ''">
@@ -286,16 +307,20 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -319,16 +344,20 @@
         count(*) AS totle
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -650,16 +679,20 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
@@ -684,16 +717,20 @@
         count(*) AS totle
         FROM
         med_behospital_info a,
-        med_qcresult_info b,
-        med_qcresult_detail c
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail d
         WHERE
         a.behospital_code = b.behospital_code
         AND a.hospital_id = b.hospital_id
-        AND b.behospital_code = c.behospital_code
-        AND b.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = d.behospital_code
+        AND a.hospital_id = d.hospital_id
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}

+ 95 - 5
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -24,12 +24,16 @@
         count(1)
         FROM
         med_behospital_info a,
-        med_qcresult_info b
+        med_home_page b,
+        med_qcresult_info c
         WHERE
         a.hospital_id = b.hospital_id
         AND a.behospital_code = b.behospital_code
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -41,10 +45,10 @@
             <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
         </if>
         <if test="gradeType != null and gradeType != ''">
-            AND b.grade_type = #{gradeType}
+            AND c.grade_type = #{gradeType}
         </if>
         <if test="level != null and level != ''">
-            AND b.level = #{level}
+            AND c.level = #{level}
         </if>
     </select>
 
@@ -679,8 +683,28 @@
     <!-- 按模块统计质控缺陷数-科室(分页) -->
     <select id="entryCountGroupByCaseAndDeptPage" resultType="com.diagbot.dto.DeptNumDTO">
         SELECT
-        d.cases_id AS id,
-        e.NAME AS NAME,
+        t.id,
+        t.`NAME`,
+        t.num,
+        t.totleNum,
+        t.percent,
+        t.percentStr
+        FROM
+        (
+        SELECT
+        t1.caseId AS id,
+        t1.caseName AS NAME,
+        t1.num AS num,
+        t2.mrNum,
+        t3.originalNum,
+        t2.mrNum * t3.originalNum AS totleNum,
+        ROUND( t1.num /( t2.mrNum * t3.originalNum ), 4 ) AS percent,
+        CONCAT( ROUND( t1.num /( t2.mrNum * t3.originalNum )* 100, 2 ), '%' ) AS percentStr
+        FROM
+        (
+        SELECT
+        d.cases_id AS caseId,
+        e.NAME AS caseName,
         a.beh_dept_id AS deptId,
         a.beh_dept_name AS deptName,
         count(*) AS num
@@ -735,6 +759,72 @@
         e.`name`,
         a.beh_dept_id,
         a.beh_dept_name
+        ) t1,
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        COUNT(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c,
+        sys_user_dept d
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.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.beh_dept_id = d.dept_id
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByDeptVO.userId!=null">
+            AND d.user_id = #{filterPageByDeptVO.userId}
+        </if>
+        <if test="filterPageByDeptVO.hospitalId != null and filterPageByDeptVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByDeptVO.hospitalId}
+        </if>
+        <if test="filterPageByDeptVO.startDate != null and filterPageByDeptVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByDeptVO.startDate})]]>
+        </if>
+        <if test="filterPageByDeptVO.endDate != null and filterPageByDeptVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByDeptVO.endDate})]]>
+        </if>
+        <if test="filterPageByDeptVO.deptName != null and filterPageByDeptVO.deptName != ''">
+            AND a.beh_dept_name = #{filterPageByDeptVO.deptName}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t2,
+        (
+        SELECT
+        a.id AS caseId,
+        a.NAME AS caseName,
+        count(*) AS originalNum
+        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`
+        ) t3
+        WHERE
+        t1.caseId = t3.caseId
+        AND t1.caseName = t3.caseName
+        AND t1.deptId = t2.deptId
+        AND t1.deptName = t2.deptName
+        ORDER BY
+        ROUND( t1.num /( t2.mrNum * t3.originalNum ), 4 ) DESC
+        ) t
     </select>
 
     <!-- 条目缺陷分组统计-科室(分页) -->