Browse Source

关键条目缺陷占比统计

zhaops 5 years ago
parent
commit
d751abadcc

+ 40 - 0
src/main/java/com/diagbot/dto/EntryStatisticsDTO.java

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/6/18 20:17
+ */
+@Getter
+@Setter
+public class EntryStatisticsDTO {
+    private String deptId;
+    private String deptName;
+    private Integer consultationNum;
+    private Long consultationEntryId;
+    private Double consultationPercent;
+    private String consultationPercentStr;
+    private Integer consultationMRNum;
+    private Long operationNameEntryId;
+    private Integer operationNameNum;
+    private Double operationNamePercent;
+    private String operationNamePercentStr;
+    private Long operationTimeEntryId;
+    private Integer operationTimeNum;
+    private Double operationTimePercent;
+    private String operationTimePercentStr;
+    private Integer operationMRNum;
+    private Long crisisEntryId;
+    private Integer crisisNum;
+    private Double crisisPercent;
+    private String crisisPercentStr;
+    private Integer crisisMRNum;
+    private Long stageSummaryEntryId;
+    private Integer stageSummaryNum;
+    private Double stageSummaryPercent;
+    private String stageSummaryPercentStr;
+    private Integer stageSummaryMRNum;
+}

+ 132 - 0
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.EntryNumDTO;
 import com.diagbot.dto.EntryNumDTO;
+import com.diagbot.dto.EntryStatisticsDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.NumDTO;
@@ -16,6 +17,7 @@ import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.CommonException;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.StringUtil;
+import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterPageVO;
@@ -617,4 +619,134 @@ public class ConsoleFacade {
         IPage<QcResultShortDTO> page = behospitalInfoFacade.qcResultShortPage(qcResultShortPageVO);
         IPage<QcResultShortDTO> page = behospitalInfoFacade.qcResultShortPage(qcResultShortPageVO);
         return page;
         return page;
     }
     }
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO) {
+        if (entryStatisticsVO.getDeptName().equals("全院")) {
+            entryStatisticsVO.setDeptName("");
+        }
+        List<EntryStatisticsDTO> records = behospitalInfoFacade.entryStatistics(entryStatisticsVO);
+        //增加全院数据
+        if (entryStatisticsVO.getDeptName().equals("")) {
+            EntryStatisticsDTO record = getEntryGlobleRecord(records);
+            if (record != null) {
+                records.add(0, record);
+            }
+        }
+        return records;
+    }
+
+    /**
+     * 关键条目缺陷占比统计增加全院记录
+     *
+     * @param records
+     * @return
+     */
+    private EntryStatisticsDTO getEntryGlobleRecord(List<EntryStatisticsDTO> records) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        if (ListUtil.isEmpty(records)) {
+            return null;
+        }
+
+        EntryStatisticsDTO record = new EntryStatisticsDTO();
+        record.setDeptName("全院");
+        //会诊记录合格率
+        Integer consultationNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getConsultationNum)
+                .reduce(0, Integer::sum);
+        record.setConsultationNum(consultationNum);
+        record.setConsultationEntryId(records.get(0).getConsultationEntryId());
+        Integer consultationMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getConsultationMRNum)
+                .reduce(0, Integer::sum);
+        record.setConsultationMRNum(consultationMRNum);
+        Double consultationPercent = BigDecimal.valueOf(consultationNum)
+                .divide(BigDecimal.valueOf(consultationMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String consultationPercentStr
+                = df.format(BigDecimal.valueOf(consultationPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        record.setConsultationPercent(consultationPercent);
+        record.setConsultationPercentStr(consultationPercentStr);
+        //手术记录名称
+        Integer operationNameNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperationNameNum)
+                .reduce(0, Integer::sum);
+        record.setOperationNameNum(operationNameNum);
+        record.setOperationNameEntryId(records.get(0).getOperationNameEntryId());
+        Integer operationMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperationMRNum)
+                .reduce(0, Integer::sum);
+        record.setOperationMRNum(operationMRNum);
+        Double operationNamePercent = BigDecimal.valueOf(operationNameNum)
+                .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String operationNamePercentStr
+                = df.format(BigDecimal.valueOf(operationNamePercent).multiply(BigDecimal.valueOf(100))) + "%";
+        record.setOperationNamePercent(operationNamePercent);
+        record.setOperationNamePercentStr(operationNamePercentStr);
+        //手术记录时间
+        Integer operationTimeNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperationTimeNum)
+                .reduce(0, Integer::sum);
+        record.setOperationTimeNum(operationTimeNum);
+        record.setOperationTimeEntryId(records.get(0).getOperationTimeEntryId());
+
+        Double operationTimePercent = BigDecimal.valueOf(operationTimeNum)
+                .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String operationTimePercentStr
+                = df.format(BigDecimal.valueOf(operationTimePercent).multiply(BigDecimal.valueOf(100))) + "%";
+        record.setOperationTimePercent(operationTimePercent);
+        record.setOperationTimePercentStr(operationTimePercentStr);
+        //危机值
+        Integer crisisNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getCrisisNum)
+                .reduce(0, Integer::sum);
+        record.setCrisisNum(crisisNum);
+        record.setCrisisEntryId(records.get(0).getCrisisEntryId());
+        Integer crisisMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getCrisisMRNum)
+                .reduce(0, Integer::sum);
+        record.setCrisisMRNum(crisisMRNum);
+        Double crisisPercent = BigDecimal.valueOf(crisisNum)
+                .divide(BigDecimal.valueOf(crisisMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String crisisPercentStr
+                = df.format(BigDecimal.valueOf(crisisPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        record.setCrisisPercent(crisisPercent);
+        record.setCrisisPercentStr(crisisPercentStr);
+        //病人住院超过30天,阶段小节书写率
+        Integer stageSummaryNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getStageSummaryNum)
+                .reduce(0, Integer::sum);
+        record.setStageSummaryNum(stageSummaryNum);
+        record.setStageSummaryEntryId(records.get(0).getStageSummaryEntryId());
+        Integer stageSummaryMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getStageSummaryMRNum)
+                .reduce(0, Integer::sum);
+        record.setStageSummaryMRNum(stageSummaryMRNum);
+        Double stageSummaryPercent = BigDecimal.valueOf(stageSummaryNum)
+                .divide(BigDecimal.valueOf(stageSummaryMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String stageSummaryPercentStr
+                = df.format(BigDecimal.valueOf(stageSummaryPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        record.setStageSummaryPercent(stageSummaryPercent);
+        record.setStageSummaryPercentStr(stageSummaryPercentStr);
+
+        return record;
+    }
 }
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.EntryStatisticsDTO;
 import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
@@ -14,6 +15,7 @@ import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterOrderVO;
@@ -239,7 +241,16 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
 
 
     /**
     /**
      * 根据两个主键-批量修改
      * 根据两个主键-批量修改
+     *
      * @param list
      * @param list
      */
      */
     public void updateBatchByKey(List<BehospitalInfo> list);
     public void updateBatchByKey(List<BehospitalInfo> list);
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO);
 }
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.EntryStatisticsDTO;
 import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
@@ -14,6 +15,7 @@ import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterOrderVO;
@@ -236,4 +238,12 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      * @return
      */
      */
     public IPage<QcResultShortDTO> qcResultShortByDeptPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);
     public IPage<QcResultShortDTO> qcResultShortByDeptPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO);
 }
 }

+ 15 - 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.EntryStatisticsDTO;
 import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
@@ -16,6 +17,7 @@ import com.diagbot.service.BehospitalInfoService;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterOrderVO;
@@ -316,9 +318,21 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
 
 
     /**
     /**
      * 根据编码、医院编码批量更新
      * 根据编码、医院编码批量更新
+     *
      * @param list
      * @param list
      */
      */
-    public void updateBatchByKey(List<BehospitalInfo> list){
+    public void updateBatchByKey(List<BehospitalInfo> list) {
         this.baseMapper.updateBatchByKey(list);
         this.baseMapper.updateBatchByKey(list);
     }
     }
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    @Override
+    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO) {
+        return baseMapper.entryStatistics(entryStatisticsVO);
+    }
 }
 }

+ 51 - 0
src/main/java/com/diagbot/vo/EntryStatisticsVO.java

@@ -0,0 +1,51 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/6/18 20:25
+ */
+@Getter
+@Setter
+public class EntryStatisticsVO {
+    /**
+     * 起始时间
+     */
+    @NotNull(message = "请输入起始时间")
+    private Date startDate;
+    /**
+     * 结束时间
+     */
+    @NotNull(message = "请输入截止时间")
+    private Date endDate;
+    /**
+     * 医院id
+     */
+    @ApiModelProperty(hidden = true)
+    private String hospitalId;
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+    /**
+     * 排序(升序)
+     */
+    private String asc;
+
+    /**
+     * 排序(降序)
+     */
+    private String desc;
+    /**
+     * 科室名称
+     */
+    private String deptName;
+}

+ 21 - 1
src/main/java/com/diagbot/web/ConsoleController.java

@@ -5,12 +5,14 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.EntryNumDTO;
 import com.diagbot.dto.EntryNumDTO;
+import com.diagbot.dto.EntryStatisticsDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.HomePageNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultShortDTO;
 import com.diagbot.dto.QcResultShortDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConsoleFacade;
 import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.vo.EntryStatisticsVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageByAverageVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterPageVO;
@@ -452,7 +454,7 @@ public class ConsoleController {
      * @return
      * @return
      */
      */
     @ApiOperation(value = "条目缺陷质控评分页(内页)[by:zhaops]",
     @ApiOperation(value = "条目缺陷质控评分页(内页)[by:zhaops]",
-            notes = "behospitalCode: 病历号)<br>" +
+            notes = "behospitalCode: 病历号<br>" +
                     "patName: 病人姓名 <br>" +
                     "patName: 病人姓名 <br>" +
                     "casesEntryName: 条目名称 <br>" +
                     "casesEntryName: 条目名称 <br>" +
                     "behDeptName:科室名称 <br>" +
                     "behDeptName:科室名称 <br>" +
@@ -464,4 +466,22 @@ public class ConsoleController {
     public RespDTO<IPage<QcResultShortDTO>> qcResultShortPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
     public RespDTO<IPage<QcResultShortDTO>> qcResultShortPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
         return RespDTO.onSuc(consoleFacade.qcResultShortPage(qcResultShortPageVO));
         return RespDTO.onSuc(consoleFacade.qcResultShortPage(qcResultShortPageVO));
     }
     }
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    @ApiOperation(value = "关键条目缺陷占比统计[by:zhaops]",
+            notes = "deptName:科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc:排序(降序) <br>" +
+                    "startDate: 起始时间 <br>" +
+                    "endDate: 截止时间 <br>")
+    @PostMapping("/entryStatistics")
+    @SysLogger("entryStatistics")
+    public RespDTO<List<EntryStatisticsDTO>> entryStatistics(@RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
+        return RespDTO.onSuc(consoleFacade.entryStatistics(entryStatisticsVO));
+    }
 }
 }

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

@@ -2978,4 +2978,281 @@
             where behospital_code = #{item.behospitalCode} and hospital_id = #{item.hospitalId}
             where behospital_code = #{item.behospitalCode} and hospital_id = #{item.hospitalId}
         </foreach>
         </foreach>
     </update>
     </update>
+
+    <!-- 关键条目缺陷统计报表-->
+    <select id="entryStatistics" parameterType="com.diagbot.vo.EntryStatisticsVO" resultType="com.diagbot.dto.EntryStatisticsDTO">
+        SELECT
+        deptId,
+        deptName,
+        consultationNum,
+        2511 AS consultationEntryId,
+        ROUND( consultationNum / consultationMRNum, 4 ) AS consultationPercent,
+        CONCAT( ROUND( consultationNum / consultationMRNum * 100, 2 ), '%' ) AS consultationPercentStr,
+        consultationMRNum,
+        2594 AS operationNameEntryId,
+        operationNameNum,
+        ROUND( operationNameNum / operationMRNum, 4 ) AS operationNamePercent,
+        CONCAT( ROUND( operationNameNum / operationMRNum * 100, 2 ), '%' ) AS operationNamePercentStr,
+        2594 AS operationTimeEntryId,
+        operationTimeNum,
+        ROUND( operationTimeNum / operationMRNum, 4 ) AS operationTimePercent,
+        CONCAT( ROUND( operationTimeNum / operationMRNum * 100, 2 ), '%' ) AS operationTimePercentStr,
+        operationMRNum,
+        2419 AS crisisEntryId,
+        crisisNum,
+        ROUND( crisisNum / crisisMRNum, 4 ) AS crisisPercent,
+        CONCAT( ROUND( crisisNum / crisisMRNum * 100, 2 ), '%' ) AS crisisPercentStr,
+        crisisMRNum,
+        2495 AS stageSummaryEntryId,
+        stageSummaryNum,
+        ROUND( stageSummaryNum / stageSummaryMRNum, 4 ) AS stageSummaryPercent,
+        CONCAT( ROUND( stageSummaryNum / stageSummaryMRNum * 100, 2 ), '%' ) AS stageSummaryPercentStr,
+        stageSummaryMRNum
+        FROM
+        (
+        SELECT
+        tt.deptId,
+        tt.deptName,
+        sum( tt.consultationMRNum )- sum( tt.consultationNum ) AS consultationNum,
+        sum( tt.consultationMRNum ) AS consultationMRNum,
+        sum( tt.operationMRNum )- sum( tt.operationNameNum ) AS operationNameNum,
+        sum( tt.operationMRNum )- sum( tt.operationTimeNum ) AS operationTimeNum,
+        sum( tt.operationMRNum ) AS operationMRNum,
+        sum( tt.crisisMRNum )- sum( tt.crisisNum ) AS crisisNum,
+        sum( tt.crisisMRNum ) AS crisisMRNum,
+        sum( tt.stageSummaryMRNum )- sum( tt.stageSummaryNum ) AS stageSummaryNum,
+        sum( tt.stageSummaryMRNum ) AS stageSummaryMRNum
+        FROM
+        (
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        sum( c.cases_entry_id = 2511 ) AS consultationNum,
+        count( DISTINCT a.behospital_code ) AS consultationMRNum,
+        0 AS operationNameNum,
+        0 AS operationTimeNum,
+        0 AS operationMRNum,
+        0 AS crisisNum,
+        0 AS crisisMRNum,
+        0 AS stageSummaryNum,
+        0 AS stageSummaryMRNum
+        FROM
+        med_behospital_info a,
+        med_medical_record b,
+        med_qcresult_detail 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 b.mode_id = 30
+        AND a.is_placefile = '1'
+        AND a.qc_type_id !=0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name = #{deptName}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) UNION
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        0 AS consultationNum,
+        0 AS consultationMRNum,
+        sum( c.cases_entry_id = 2594 ) AS operationNameNum,
+        sum( c.cases_entry_id = 2594 ) AS operationTimeNum,
+        count( DISTINCT a.behospital_code ) AS operationMRNum,
+        0 AS crisisNum,
+        0 AS crisisMRNum,
+        0 AS stageSummaryNum,
+        0 AS stageSummaryMRNum
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_detail 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.is_placefile = '1'
+        AND a.qc_type_id !=0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name = #{deptName}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) UNION
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        sum( c.cases_entry_id = 2419 ) AS crisisNum,
+        count( DISTINCT a.behospital_code ) AS crisisMRNum,
+        0 AS consultationNum,
+        0 AS consultationMRNum,
+        0 AS operationNameNum,
+        0 AS operationTimeNum,
+        0 AS operationMRNum,
+        0 AS stageSummaryNum,
+        0 AS stageSummaryMRNum
+        FROM
+        med_behospital_info a,
+        med_crisis_info b,
+        med_qcresult_detail 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.behospital_code = b.behospital_code
+        AND a.is_placefile = '1'
+        AND a.qc_type_id !=0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name = #{deptName}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) UNION
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        sum( b.cases_entry_id = 2495 ) AS stageSummaryNum,
+        count( DISTINCT a.behospital_code ) AS stageSummaryMRNum,
+        0 AS consultationNum,
+        0 AS consultationMRNum,
+        0 AS operationNameNum,
+        0 AS operationTimeNum,
+        0 AS operationMRNum,
+        0 AS crisisNum,
+        0 AS crisisMRNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_detail 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 TIMESTAMPDIFF(
+        DAY,
+        DATE( behospital_date ),
+        DATE( leave_hospital_date ))> 30
+        AND a.is_placefile = '1'
+        AND a.qc_type_id !=0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptName != null and deptName != ''">
+            AND a.beh_dept_name = #{deptName}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        )
+        ) tt
+        GROUP BY
+        tt.deptId,
+        tt.deptName
+        ) t
+        <if test="asc != null and asc !=''">
+            order by
+            <choose>
+                <when test='asc=="deptId"'>deptId asc</when>
+                <when test='asc=="deptName"'>deptName asc</when>
+                <when test='asc=="consultationNum"'>consultationNum asc</when>
+                <when test='asc=="consultationPercent"'>consultationPercent asc</when>
+                <when test='asc=="consultationPercentStr"'>consultationPercent asc</when>
+                <when test='asc=="consultationMRNum"'>consultationMRNum asc</when>
+                <when test='asc=="operationNameNum"'>operationNameNum asc</when>
+                <when test='asc=="operationNamePercent"'>operationNamePercent asc</when>
+                <when test='asc=="operationNamePercentStr"'>operationNamePercent asc</when>
+                <when test='asc=="operationTimeNum"'>operationTimeNum asc</when>
+                <when test='asc=="operationTimePercent"'>operationTimePercent asc</when>
+                <when test='asc=="operationTimePercentStr"'>operationTimePercent asc</when>
+                <when test='asc=="operationMRNum"'>operationMRNum asc</when>
+                <when test='asc=="crisisNum"'>crisisNum asc</when>
+                <when test='asc=="crisisPercent"'>crisisPercent asc</when>
+                <when test='asc=="crisisPercentStr"'>crisisPercent asc</when>
+                <when test='asc=="crisisMRNum"'>crisisMRNum asc</when>
+                <when test='asc=="stageSummaryNum"'>stageSummaryNum asc</when>
+                <when test='asc=="stageSummaryPercent"'>stageSummaryPercent asc</when>
+                <when test='asc=="stageSummaryPercentStr"'>stageSummaryPercent asc</when>
+                <when test='asc=="stageSummaryMRNum"'>stageSummaryMRNum asc</when>
+                <otherwise>deptName asc</otherwise>
+            </choose>
+        </if>
+        <if test="desc != null and desc!=''">
+            order by
+            <choose>
+                <when test='desc=="deptId"'>deptId desc</when>
+                <when test='desc=="deptName"'>deptName desc</when>
+                <when test='desc=="consultationNum"'>consultationNum desc</when>
+                <when test='desc=="consultationPercent"'>consultationPercent desc</when>
+                <when test='desc=="consultationPercentStr"'>consultationPercent desc</when>
+                <when test='desc=="consultationMRNum"'>consultationMRNum desc</when>
+                <when test='desc=="operationNameNum"'>operationNameNum desc</when>
+                <when test='desc=="operationNamePercent"'>operationNamePercent desc</when>
+                <when test='desc=="operationNamePercentStr"'>operationNamePercent desc</when>
+                <when test='desc=="operationTimeNum"'>operationTimeNum desc</when>
+                <when test='desc=="operationTimePercent"'>operationTimePercent desc</when>
+                <when test='desc=="operationTimePercentStr"'>operationTimePercent desc</when>
+                <when test='desc=="operationMRNum"'>operationMRNum desc</when>
+                <when test='desc=="crisisNum"'>crisisNum desc</when>
+                <when test='desc=="crisisPercent"'>crisisPercent desc</when>
+                <when test='desc=="crisisPercentStr"'>crisisPercent desc</when>
+                <when test='desc=="crisisMRNum"'>crisisMRNum desc</when>
+                <when test='desc=="stageSummaryNum"'>stageSummaryNum desc</when>
+                <when test='desc=="stageSummaryPercent"'>stageSummaryPercent desc</when>
+                <when test='desc=="stageSummaryPercentStr"'>stageSummaryPercent desc</when>
+                <when test='desc=="stageSummaryMRNum"'>stageSummaryMRNum desc</when>
+                <otherwise>deptName desc</otherwise>
+            </choose>
+        </if>
+    </select>
 </mapper>
 </mapper>