Browse Source

Merge remote-tracking branch 'origin/dev/20200702_1.3.7' into dev/20200702_1.3.7

wangfeng 4 years ago
parent
commit
60197878a4

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

@@ -102,6 +102,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/console/resultStatistics").permitAll()
                 .antMatchers("/console/resultStatisticsByDeptPage").permitAll()
                 .antMatchers("/console/homePageMRCount").permitAll()
+                .antMatchers("/console/qcCheckStatistics").permitAll()
                 .antMatchers("/consoleByDept/entryCountGroupByCaseAndDept").permitAll()
                 .antMatchers("/consoleByDept/entryCountGroupByCaseAndDeptPage").permitAll()
                 .antMatchers("/consoleByDept/entryCountGroupByEntryAndDept").permitAll()

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

@@ -145,6 +145,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/console/resultStatistics", request)
                 || matchers("/console/resultStatisticsByDeptPage", request)
                 || matchers("/console/homePageMRCount", request)
+                || matchers("/console/qcCheckStatistics", request)
                 || matchers("/consoleByDept/entryCountGroupByCaseAndDept", request)
                 || matchers("/consoleByDept/entryCountGroupByCaseAndDeptPage", request)
                 || matchers("/consoleByDept/entryCountGroupByEntryAndDept", request)

+ 14 - 11
src/main/java/com/diagbot/dto/HomePageImproveDTO.java

@@ -13,15 +13,18 @@ import lombok.Setter;
 public class HomePageImproveDTO {
     private String deptId;
     private String deptName;
-    private Integer mrNum;
-    private Integer checkedNum;
-    private Integer improveNum;
-    private Double improvePercent;
-    private String improvePercentStr;
-    private Integer improveToPassNum;
-    private Double improveToPassPercent;
-    private String improveToPassPercentStr;
-    private Integer improveToFullNum;
-    private Double improveToFullPercent;
-    private String improveToFullPercentStr;
+    private Integer mrNum = 0;
+    private Integer checkedNum = 0;
+    private Double checkedPercent = 0d;
+    private String checkedPercentStr = "0.00%";
+    private Integer homePageMRNum = 0;
+    private Integer improveNum = 0;
+    private Double improvePercent = 0d;
+    private String improvePercentStr = "0.00%";
+    private Integer improveToPassNum = 0;
+    private Double improveToPassPercent = 0d;
+    private String improveToPassPercentStr = "0.00%";
+    private Integer improveToFullNum = 0;
+    private Double improveToFullPercent = 0d;
+    private String improveToFullPercentStr = "0.00%";
 }

+ 112 - 1
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -25,6 +25,7 @@ import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterQcCheckVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.google.common.collect.Lists;
@@ -824,7 +825,7 @@ public class ConsoleFacade {
         NumDTO improve = new NumDTO();
         improve.setName("改善率");
         improve.setNum(improveDTO.getImproveNum());
-        improve.setTotleNum(improveDTO.getMrNum());
+        improve.setTotleNum(improveDTO.getHomePageMRNum());
         improve.setPercent(improveDTO.getImprovePercent());
         improve.setPercentStr(improveDTO.getImprovePercentStr());
 
@@ -846,4 +847,114 @@ public class ConsoleFacade {
         IPage<QcResultShortDTO> page = behospitalInfoFacade.leaveHosMRPage(qcResultShortPageVO);
         return page;
     }
+
+    /**
+     * 质控核查统计(内页)
+     *
+     * @param filterQcCheckVO
+     * @return
+     */
+    public List<HomePageImproveDTO> qcCheckStatistics(FilterQcCheckVO filterQcCheckVO) {
+        filterFacade.filterQcCheckVOSet(filterQcCheckVO);
+        List<HomePageImproveDTO> records = behospitalInfoFacade.qcCheckStatistics(filterQcCheckVO);
+        //增加全院数据
+        if (StringUtil.isBlank(filterQcCheckVO.getDeptName()) || filterQcCheckVO.getDeptName().equals("全院")) {
+            HomePageImproveDTO item = getGlobleRecord_improve(records);
+            if (item != null) {
+                records.add(0, item);
+            }
+        }
+        return records;
+    }
+
+    /**
+     * 增加全院记录
+     *
+     * @param records
+     * @return
+     */
+    public HomePageImproveDTO getGlobleRecord_improve(List<HomePageImproveDTO> records) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        HomePageImproveDTO item = new HomePageImproveDTO();
+
+        if (ListUtil.isEmpty(records)) {
+            return null;
+        }
+
+
+        //总病历数
+        Integer mrNum = records
+                .stream()
+                .map(HomePageImproveDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return null;
+        }
+        //核查病历数
+        Integer checkedNum = records
+                .stream()
+                .map(HomePageImproveDTO::getCheckedNum)
+                .reduce(0, Integer::sum);
+        //核查病历占比
+        Double checkedPercent = BigDecimal.valueOf(checkedNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String checkedPercentStr
+                = df.format(BigDecimal.valueOf(checkedPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //带病案首页的病历数
+        Integer homePageMRNum = records
+                .stream()
+                .map(HomePageImproveDTO::getHomePageMRNum)
+                .reduce(0, Integer::sum);
+        //改善病历数
+        Integer improveNum = records
+                .stream()
+                .map(HomePageImproveDTO::getImproveNum)
+                .reduce(0, Integer::sum);
+        //改善率
+        Double improvePercent = BigDecimal.valueOf(improveNum)
+                .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String improvePercentStr
+                = df.format(BigDecimal.valueOf(improvePercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //改善至合格病历数
+        Integer improveToPassNum = records
+                .stream()
+                .map(HomePageImproveDTO::getImproveToPassNum)
+                .reduce(0, Integer::sum);
+        //改善至合格占比
+        Double improveToPassPercent = BigDecimal.valueOf(improveToPassNum)
+                .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String improveToPassPercentStr
+                = df.format(BigDecimal.valueOf(improvePercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //改善至满分病历数
+        Integer improveToFullNum = records
+                .stream()
+                .map(HomePageImproveDTO::getImproveToFullNum)
+                .reduce(0, Integer::sum);
+        //改善至满分占比
+        Double improveToFullPercent = BigDecimal.valueOf(improveToFullNum)
+                .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String improveToFullPercentStr
+                = df.format(BigDecimal.valueOf(improveToFullPercent).multiply(BigDecimal.valueOf(100))) + "%";
+
+        item.setDeptName("全院");
+        item.setMrNum(mrNum);
+        item.setCheckedNum(checkedNum);
+        item.setCheckedPercent(checkedPercent);
+        item.setCheckedPercentStr(checkedPercentStr);
+        item.setHomePageMRNum(homePageMRNum);
+        item.setImproveNum(improveNum);
+        item.setImprovePercent(improvePercent);
+        item.setImprovePercentStr(improvePercentStr);
+        item.setImproveToPassNum(improveToPassNum);
+        item.setImproveToPassPercent(improveToPassPercent);
+        item.setImproveToPassPercentStr(improveToPassPercentStr);
+        item.setImproveToFullNum(improveToFullNum);
+        item.setImproveToFullPercent(improveToFullPercent);
+        item.setImproveToFullPercentStr(improveToFullPercentStr);
+        return item;
+    }
 }

+ 17 - 0
src/main/java/com/diagbot/facade/FilterFacade.java

@@ -10,6 +10,7 @@ import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterQcCheckVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import org.springframework.stereotype.Component;
@@ -270,4 +271,20 @@ public class FilterFacade {
         long interval = entryStatisticsVO.getEndDate().getTime() + 1000;
         entryStatisticsVO.setEndDate(new Date(Long.valueOf(interval)));
     }
+
+    /**
+     * 质控核查统计入参
+     *
+     * @param filterQcCheckVO
+     */
+    public void filterQcCheckVOSet(FilterQcCheckVO filterQcCheckVO) {
+        FilterVO filterVO = new FilterVO();
+        BeanUtil.copyProperties(filterQcCheckVO, filterVO);
+        filterVOSet(filterVO);
+        filterQcCheckVO.setHospitalId(filterVO.getHospitalId());
+        filterQcCheckVO.setUserId(filterVO.getUserId());
+        filterQcCheckVO.setStartDate(filterVO.getStartDate());
+        filterQcCheckVO.setEndDate(filterVO.getEndDate());
+        filterQcCheckVO.setLimitCount(filterVO.getLimitCount());
+    }
 }

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

@@ -23,6 +23,7 @@ import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterQcCheckVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.TaskVO;
@@ -303,4 +304,12 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @return
      */
     public HomePageImproveDTO homePageImproveCount(FilterVO filterVO);
+
+    /**
+     * 质控核查统计(内页)
+     *
+     * @param filterQcCheckVO
+     * @return
+     */
+    public List<HomePageImproveDTO> qcCheckStatistics(FilterQcCheckVO filterQcCheckVO);
 }

+ 9 - 0
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -23,6 +23,7 @@ import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterQcCheckVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.TaskVO;
@@ -296,4 +297,12 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      */
     public HomePageImproveDTO homePageImproveCount(FilterVO filterVO);
+
+    /**
+     * 质控核查统计(内页)
+     *
+     * @param filterQcCheckVO
+     * @return
+     */
+    public List<HomePageImproveDTO> qcCheckStatistics(FilterQcCheckVO filterQcCheckVO);
 }

+ 12 - 0
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -25,6 +25,7 @@ import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterQcCheckVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.TaskVO;
@@ -403,4 +404,15 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public HomePageImproveDTO homePageImproveCount(FilterVO filterVO) {
         return baseMapper.homePageImproveCount(filterVO);
     }
+
+    /**
+     * 质控核查统计(内页)
+     *
+     * @param filterQcCheckVO
+     * @return
+     */
+    @Override
+    public List<HomePageImproveDTO> qcCheckStatistics(FilterQcCheckVO filterQcCheckVO) {
+        return baseMapper.qcCheckStatistics(filterQcCheckVO);
+    }
 }

+ 15 - 0
src/main/java/com/diagbot/vo/FilterQcCheckVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/7 11:40
+ */
+@Getter
+@Setter
+public class FilterQcCheckVO extends FilterVO {
+    private String deptName;
+}

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

@@ -8,6 +8,7 @@ import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.EntryNumDTO;
 import com.diagbot.dto.EntryNumGroupDTO;
 import com.diagbot.dto.EntryStatisticsDTO;
+import com.diagbot.dto.HomePageImproveDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.LevelStatisticsTZDTO;
@@ -19,6 +20,7 @@ import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageVO;
+import com.diagbot.vo.FilterQcCheckVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.QcResultShortPageVO;
 import io.swagger.annotations.Api;
@@ -529,4 +531,20 @@ public class ConsoleController {
     public RespDTO<IPage<QcResultShortDTO>> leaveHosMRPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
         return RespDTO.onSuc(consoleFacade.leaveHosMRPage(qcResultShortPageVO));
     }
+
+    /**
+     * 质控核查统计
+     *
+     * @param filterQcCheckVO
+     * @return
+     */
+    @ApiOperation(value = "质控核查统计[by:zhaops]",
+            notes = "deptName: 科室名称 <br>" +
+                    "startDate: 起始时间 <br>" +
+                    "endDate: 截止时间 <br>")
+    @PostMapping("/qcCheckStatistics")
+    @SysLogger("qcCheckStatistics")
+    public RespDTO<List<HomePageImproveDTO>> qcCheckStatistics(@RequestBody @Valid FilterQcCheckVO filterQcCheckVO) {
+        return RespDTO.onSuc(consoleFacade.qcCheckStatistics(filterQcCheckVO));
+    }
 }

+ 217 - 9
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -4374,16 +4374,16 @@
     <!-- 病案首页改善率统计(首页)-->
     <select id="homePageImproveCount" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.HomePageImproveDTO">
         SELECT
-        t2.mrNum,
+        t2.homePageMRNum,
         t1.improveNum,
-        round( t1.improveNum / t2.mrNum, 4 ) AS improvePercent,
-        Concat( round( t1.improveNum / t2.mrNum * 100, 2 ), '%' ) AS improvePercentStr,
+        round( t1.improveNum / t2.homePageMRNum, 4 ) AS improvePercent,
+        Concat( round( t1.improveNum / t2.homePageMRNum * 100, 2 ), '%' ) AS improvePercentStr,
         t1.improveToPassNum,
-        round( t1.improveToPassNum / t2.mrNum, 4 ) AS improveToPassPercent,
-        Concat( round( t1.improveToPassNum / t2.mrNum * 100, 2 ), '%' ) AS improveToPassPercentStr,
+        round( t1.improveToPassNum / t2.homePageMRNum, 4 ) AS improveToPassPercent,
+        Concat( round( t1.improveToPassNum / t2.homePageMRNum * 100, 2 ), '%' ) AS improveToPassPercentStr,
         t1.improveToFullNum,
-        round( t1.improveToFullNum / t2.mrNum, 4 ) AS improveToFullPercent,
-        Concat( round( t1.improveToFullNum / t2.mrNum * 100, 2 ), '%' ) AS improveToFullPercentStr
+        round( t1.improveToFullNum / t2.homePageMRNum, 4 ) AS improveToFullPercent,
+        Concat( round( t1.improveToFullNum / t2.homePageMRNum * 100, 2 ), '%' ) AS improveToFullPercentStr
         FROM
         (
         SELECT
@@ -4462,7 +4462,7 @@
         ) t1,
         (
         SELECT
-        count(*) AS mrNum
+        count( DISTINCT a.behospital_code ) AS homePageMRNum
         FROM
         med_behospital_info a,
         med_home_page b,
@@ -4470,13 +4470,131 @@
         WHERE
         a.is_deleted = 'N'
         AND b.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
+        AND a.qc_type_id != 0
+        AND a.is_placefile = '1'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null">
+            <![CDATA[ AND a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        ) t2
+    </select>
+
+    <!-- 质控核查统计(内页)-->
+    <select id="qcCheckStatistics" parameterType="com.diagbot.vo.FilterQcCheckVO" resultType="com.diagbot.dto.HomePageImproveDTO">
+        SELECT
+        mr.beh_dept_id AS deptId,
+        mr.beh_dept_name AS deptName,
+        IFNULL( mr.mrNum, 0 ) AS mrNum,
+        ck.checkedNum AS checkedNum,
+        ROUND( ck.checkedNum / mr.mrNum, 4 ) AS checkedPercent,
+        CONCAT( ROUND( ck.checkedNum / mr.mrNum * 100, 2 ), '%' ) AS checkedPercentStr,
+        hmmr_t.homePageMRNum,
+        improve_t.improveNum,
+        round( improve_t.improveNum / hmmr_t.homePageMRNum, 4 ) AS improvePercent,
+        Concat( round( improve_t.improveNum / hmmr_t.homePageMRNum * 100, 2 ), '%' ) AS improvePercentStr,
+        improve_t.improveToPassNum,
+        round( improve_t.improveToPassNum / hmmr_t.homePageMRNum, 4 ) AS improveToPassPercent,
+        Concat( round( improve_t.improveToPassNum / hmmr_t.homePageMRNum * 100, 2 ), '%' ) AS improveToPassPercentStr,
+        improve_t.improveToFullNum,
+        round( improve_t.improveToFullNum / hmmr_t.homePageMRNum, 4 ) AS improveToFullPercent,
+        Concat( round( improve_t.improveToFullNum / hmmr_t.homePageMRNum * 100, 2 ), '%' ) AS improveToFullPercentStr
+        FROM
+        (
+        SELECT
+        a.beh_dept_id,
+        a.beh_dept_name,
+        count(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info 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
+        AND a.qc_type_id != 0
+        AND a.is_placefile = '1'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null">
+            <![CDATA[ AND a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name like CONCAT('%',  #{deptName}, '%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) mr
+        LEFT JOIN (
+        SELECT
+        a.beh_dept_id,
+        a.beh_dept_name,
+        count(*) AS checkedNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_check_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
+        AND a.qc_type_id != 0
         AND a.is_placefile = '1'
+        AND c.`status` = 1
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null">
+            <![CDATA[ AND a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name like CONCAT('%',  #{deptName}, '%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) ck ON mr.beh_dept_id = ck.beh_dept_id
+        AND mr.beh_dept_name = ck.beh_dept_name
+        LEFT JOIN (
+        SELECT
+        a.beh_dept_id,
+        a.beh_dept_name,
+        count( DISTINCT a.behospital_code ) AS homePageMRNum
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.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
         AND a.qc_type_id != 0
+        AND a.is_placefile = '1'
+        AND c.have_home_page = '1'
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
         </if>
@@ -4486,6 +4604,96 @@
         <if test="endDate != null">
             <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
         </if>
-        ) t2
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name like CONCAT('%',  #{deptName}, '%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) hmmr_t ON mr.beh_dept_id = hmmr_t.beh_dept_id
+        AND mr.beh_dept_name = hmmr_t.beh_dept_name
+        LEFT JOIN (
+        SELECT
+        a.beh_dept_id,
+        a.beh_dept_name,
+        <![CDATA[sum( e.`level` = '不合格' AND d.`level` = '合格' AND d.score_res < 20 ) AS improveToPassNum,]]>
+        sum( d.score_res = 20 ) AS improveToFullNum,
+        count(*) AS improveNum
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_cases d,
+        (
+        SELECT
+        m4.*
+        FROM
+        med_behospital_info m1,
+        med_home_page m2,
+        med_qcresult_info m3,
+        med_qcresult_cases m4
+        WHERE
+        m1.is_deleted = 'N'
+        AND m2.is_deleted = 'N'
+        AND m3.is_deleted = 'Y'
+        AND m4.is_deleted = 'Y'
+        AND m1.hospital_id = m2.hospital_id
+        AND m1.hospital_id = m3.hospital_id
+        AND m1.hospital_id = m4.hospital_id
+        AND m1.behospital_code = m2.behospital_code
+        AND m1.behospital_code = m3.behospital_code
+        AND m1.behospital_code = m4.behospital_code
+        AND m3.have_home_page = 1
+        AND m4.cases_id = 243
+        <if test="hospitalId != null and hospitalId != ''">
+            AND m1.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null">
+            <![CDATA[ AND m1.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null">
+            <![CDATA[AND m1.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND m1.beh_dept_name like CONCAT('%',  #{deptName}, '%')
+        </if>
+        GROUP BY
+        m1.behospital_code
+        ORDER BY
+        m1.behospital_code,
+        m4.gmt_create
+        ) e
+        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.hospital_id = e.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        AND a.behospital_code = e.behospital_code
+        AND d.cases_id = 243
+        AND d.score_res > e.score_res
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null">
+            <![CDATA[ AND a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name like CONCAT('%',  #{deptName}, '%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) improve_t ON mr.beh_dept_id = improve_t.beh_dept_id
+        AND mr.beh_dept_name = improve_t.beh_dept_name
     </select>
 </mapper>