Browse Source

1、各科室缺陷占比统计(组合)
2、病案首页合格率统计

zhaops 5 năm trước cách đây
mục cha
commit
1a500f31cc

+ 29 - 0
src/main/java/com/diagbot/dto/LevelStatisticsDTO.java

@@ -0,0 +1,29 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/19 16:04
+ */
+@Getter
+@Setter
+public class LevelStatisticsDTO {
+    private String deptId;
+    private String deptName;
+    private Integer entryNum;
+    private Integer mrNum;
+    private Double totleValue;
+    private Double averageValue;
+    private Integer firstLevelNum;
+    private Integer secondLevelNum;
+    private Integer thirdLevelNum;
+    private Double firstLevelPercent;
+    private Double secondLevelPercent;
+    private Double thirdLevelPercent;
+    private String firstLevelPercentStr;
+    private String secondLevelPercentStr;
+    private String thirdLevelPercentStr;
+}

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

@@ -5,13 +5,16 @@ import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
@@ -26,6 +29,7 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Filter;
 
 /**
  * @Description:
@@ -445,4 +449,38 @@ public class ConsoleFacade {
         return page;
     }
     //endregion-----------------------分页接口结束-------------------------------
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO) {
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterOrderVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderVO.getType(), null);
+        filterOrderVO.setStartDate(startDate);
+        filterOrderVO.setEndDate(endDate);
+        filterOrderVO.setHospitalId(hosptialId);
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.levelStatistics(filterOrderVO);
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterOrderVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderVO.getType(), null);
+        filterOrderVO.setStartDate(startDate);
+        filterOrderVO.setEndDate(endDate);
+        filterOrderVO.setHospitalId(hosptialId);
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
+        return records;
+    }
 }

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

@@ -3,11 +3,13 @@ package com.diagbot.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.HomePageFilterVO;
@@ -115,4 +117,20 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @return
      */
     public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
 }

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

@@ -3,11 +3,13 @@ package com.diagbot.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.HomePageFilterVO;
@@ -115,4 +117,20 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      */
     public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
 }

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

@@ -3,6 +3,7 @@ package com.diagbot.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
@@ -10,6 +11,7 @@ import com.diagbot.mapper.BehospitalInfoMapper;
 import com.diagbot.service.BehospitalInfoService;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.HomePageFilterVO;
@@ -163,4 +165,26 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
         return baseMapper.resultStatisticsByDeptPage(filterPageVO);
     }
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO) {
+        return baseMapper.levelStatistics(filterOrderVO);
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
+        return baseMapper.homePageLevelStatistics(filterOrderVO);
+    }
 }

+ 6 - 6
src/main/java/com/diagbot/vo/FilterOrderVO.java

@@ -3,8 +3,6 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.List;
-
 /**
  * @Description:
  * @Author:zhaops
@@ -19,12 +17,14 @@ public class FilterOrderVO extends FilterVO {
     private String level;
 
     /**
-     * 排序(序)
+     * 排序(序)
      */
-    private List<String> asc;
+    private String asc;
 
     /**
-     * 排序(序)
+     * 排序(序)
      */
-    private List<String> desc;
+    private String desc;
+
+    private String name;
 }

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

@@ -3,9 +3,11 @@ package com.diagbot.web;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import io.swagger.annotations.Api;
@@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -297,4 +300,40 @@ public class ConsoleController {
     }
 
     //endregion-----------------------分页接口结束-------------------------------
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "各科室缺陷占比(组合)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/levelStatistics")
+    @SysLogger("levelStatistics")
+    public RespDTO<List<LevelStatisticsDTO>> levelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.levelStatistics(filterOrderVO));
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelStatistics")
+    @SysLogger("homePageLevelStatistics")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.homePageLevelStatistics(filterOrderVO));
+    }
 }

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

@@ -747,4 +747,197 @@
         ) t2
         )t
     </select>
+
+    <!-- 各科室缺陷占比(组合) -->
+    <select id="levelStatistics" parameterType="com.diagbot.vo.FilterOrderVO" resultType="com.diagbot.dto.LevelStatisticsDTO">
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        count( DISTINCT d.id ) AS entryNum,
+        count( DISTINCT c.id ) AS mrNum,
+        ROUND( sum( c.score_res ), 2 ) AS totleValue,
+        ROUND( sum( c.score_res )/ count(*), 2 ) AS averageValue,
+        COUNT( DISTINCT CASE WHEN c.`level` = '甲' THEN c.id END ) AS firstLevelNum,
+        COUNT( DISTINCT CASE WHEN c.`level` = '乙' THEN c.id END ) AS secondLevelNum,
+        COUNT( DISTINCT CASE WHEN c.`level` = '丙' THEN c.id END ) AS thirdLevelNum,
+        ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '甲' THEN c.id END )/ count( DISTINCT c.id ), 4 ) AS firstLevelPercent,
+        ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '乙' THEN c.id END )/ count( DISTINCT c.id ), 4 ) AS secondLevelPercent,
+        1-ROUND ( COUNT( DISTINCT CASE WHEN c.`level` = '甲' THEN c.id END )/ count( DISTINCT c.id ), 4 ) - ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '乙' THEN c.id END )/ count( DISTINCT c.id ), 4 ) AS thirdLevelPercent,
+        concat(
+        ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '甲' THEN c.id END )/ count( DISTINCT c.id )* 100, 2 ),
+        '%'
+        ) AS firstLevelPercentStr,
+        concat(
+        ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '乙' THEN c.id END )/ count( DISTINCT c.id )* 100, 2 ),
+        '%'
+        ) AS sencondLevelPercentStr,
+        concat(
+        (
+        100-ROUND ( COUNT( DISTINCT CASE WHEN c.`level` = '甲' THEN c.id END )/ count( DISTINCT c.id )* 100, 2 ) - ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '乙' THEN c.id END )/ count( DISTINCT c.id )* 100, 2 )),
+        '%'
+        ) AS thirdLevelPercentStr
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c,
+        med_qcresult_detail 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.behospital_code = d.behospital_code
+        <![CDATA[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="level != null and level != ''">
+            and c.level = #{level}
+        </if>
+        <if test="name != null and name != ''">
+            and a.beh_dept_name like CONCAT('%',#{name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        <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=="entryNum"'>entryNum asc</when>
+                <when test='asc=="mrNum"'>mrNum asc</when>
+                <when test='asc=="totleValue"'>totleValue asc</when>
+                <when test='asc=="averageValue"'>averageValue asc</when>
+                <when test='asc=="firstLevelNum"'>firstLevelNum asc</when>
+                <when test='asc=="secondLevelNum"'>secondLevelNum asc</when>
+                <when test='asc=="thirdLevelNum"'>thirdLevelNum asc</when>
+                <when test='asc=="firstLevelPercent"'>firstLevelPercent asc</when>
+                <when test='asc=="secondLevelPercent"'>secondLevelPercent asc</when>
+                <when test='asc=="thirdLevelPercent"'>thirdLevelPercent 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=="entryNum"'>entryNum desc</when>
+                <when test='desc=="mrNum"'>mrNum desc</when>
+                <when test='desc=="totleValue"'>totleValue desc</when>
+                <when test='desc=="averageValue"'>averageValue desc</when>
+                <when test='desc=="firstLevelNum"'>firstLevelNum desc</when>
+                <when test='desc=="secondLevelNum"'>secondLevelNum desc</when>
+                <when test='desc=="thirdLevelNum"'>thirdLevelNum desc</when>
+                <when test='desc=="firstLevelPercent"'>firstLevelPercent desc</when>
+                <when test='desc=="secondLevelPercent"'>secondLevelPercent desc</when>
+                <when test='desc=="thirdLevelPercent"'>thirdLevelPercent desc</when>
+                <otherwise> deptName desc </otherwise>
+            </choose>
+        </if>
+    </select>
+
+    <!-- 病案首页合格率占比 -->
+    <select id="homePageLevelStatistics" parameterType="com.diagbot.vo.FilterOrderVO" resultType="com.diagbot.dto.LevelStatisticsDTO">
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        count( DISTINCT d.id ) AS entryNum,
+        count( DISTINCT c.id ) AS mrNum,
+        ROUND( sum( c.score_res ), 2 ) AS totleValue,
+        ROUND( sum( c.score_res )/ count(*), 2 ) AS averageValue,
+        COUNT( DISTINCT CASE WHEN c.`level` = '合格' THEN c.id END ) AS firstLevelNum,
+        COUNT( DISTINCT CASE WHEN c.`level` = '不合格' THEN c.id END ) AS secondLevelNum,
+        ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '合格' THEN c.id END )/ count( DISTINCT c.id ), 4 ) AS firstLevelPercent,
+        1-ROUND ( COUNT( DISTINCT CASE WHEN c.`level` = '合格' THEN c.id END )/ count( DISTINCT c.id ), 4 ) AS secondLevelPercent,
+        concat(
+        ROUND( COUNT( DISTINCT CASE WHEN c.`level` = '合格' THEN c.id END )/ count( DISTINCT c.id )* 100, 2 ),
+        '%'
+        ) AS firstLevelPercentStr,
+        concat(
+        100-ROUND ( COUNT( DISTINCT CASE WHEN c.`level` = '合格' THEN c.id END )/ count( DISTINCT c.id )* 100, 2 ),
+        '%'
+        ) AS secondLevelPercentStr
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_cases c,
+        med_qcresult_detail 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.behospital_code = d.behospital_code
+        AND c.cases_id = d.cases_id
+        AND c.cases_id = 243
+        <![CDATA[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="level != null and level != ''">
+            and c.level = #{level}
+        </if>
+        <if test="name != null and name != ''">
+            and a.beh_dept_name like CONCAT('%',#{name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        <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=="entryNum"'>entryNum asc</when>
+                <when test='asc=="mrNum"'>mrNum asc</when>
+                <when test='asc=="totleValue"'>totleValue asc</when>
+                <when test='asc=="averageValue"'>averageValue asc</when>
+                <when test='asc=="firstLevelNum"'>firstLevelNum asc</when>
+                <when test='asc=="secondLevelNum"'>secondLevelNum asc</when>
+                <when test='asc=="firstLevelPercent"'>firstLevelPercent asc</when>
+                <when test='asc=="secondLevelPercent"'>secondLevelPercent 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=="entryNum"'>entryNum desc</when>
+                <when test='desc=="mrNum"'>mrNum desc</when>
+                <when test='desc=="totleValue"'>totleValue desc</when>
+                <when test='desc=="averageValue"'>averageValue desc</when>
+                <when test='desc=="firstLevelNum"'>firstLevelNum desc</when>
+                <when test='desc=="secondLevelNum"'>secondLevelNum desc</when>
+                <when test='desc=="firstLevelPercent"'>firstLevelPercent desc</when>
+                <when test='desc=="secondLevelPercent"'>secondLevelPercent desc</when>
+                <otherwise> deptName desc </otherwise>
+            </choose>
+        </if>
+    </select>
 </mapper>