Browse Source

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

zhaops 5 years ago
parent
commit
79844287f3

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

@@ -13,6 +13,8 @@ import lombok.Setter;
 public class LevelStatisticsDTO {
     private String deptId;
     private String deptName;
+    private String doctorId;
+    private String doctorName;
     private Integer entryNum;
     private Integer mrNum;
     private Double totleValue;

+ 55 - 0
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -3,6 +3,7 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
@@ -10,6 +11,7 @@ import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.HomePageFilterVO;
@@ -557,4 +559,57 @@ public class ConsoleByDeptFacade {
         page.setRecords(records);
         return page;
     }
+
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        List<DeptBaseDTO> deptList = getDept();
+        if (ListUtil.isEmpty(deptList)) {
+            return null;
+        }
+        if (StringUtil.isBlank(filterOrderByDeptVO.getDeptName())) {
+            filterOrderByDeptVO.setDeptName(deptList.get(0).getDeptName());
+        }
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterOrderByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderByDeptVO.getType(), null);
+        filterOrderByDeptVO.setStartDate(startDate);
+        filterOrderByDeptVO.setEndDate(endDate);
+        filterOrderByDeptVO.setHospitalId(hosptialId);
+        filterOrderByDeptVO.setUserId(Long.valueOf(userId));
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.levelStatisticsByDept(filterOrderByDeptVO);
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        List<DeptBaseDTO> deptList = getDept();
+        if (ListUtil.isEmpty(deptList)) {
+            return null;
+        }
+        if (StringUtil.isBlank(filterOrderByDeptVO.getDeptName())) {
+            filterOrderByDeptVO.setDeptName(deptList.get(0).getDeptName());
+        }
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterOrderByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderByDeptVO.getType(), null);
+        filterOrderByDeptVO.setStartDate(startDate);
+        filterOrderByDeptVO.setEndDate(endDate);
+        filterOrderByDeptVO.setHospitalId(hosptialId);
+        filterOrderByDeptVO.setUserId(Long.valueOf(userId));
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO);
+        return records;
+    }
 }

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

@@ -9,6 +9,7 @@ import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
@@ -133,4 +134,20 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @return
      */
     public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 各科室缺陷占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
+
+    /**
+     * 病案首页合格率占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
 }

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

@@ -9,6 +9,7 @@ import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
@@ -133,4 +134,20 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      */
     public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 各科室缺陷占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
+
+    /**
+     * 病案首页合格率占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
 }

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

@@ -11,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.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
@@ -187,4 +188,26 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
         return baseMapper.homePageLevelStatistics(filterOrderVO);
     }
+
+    /**
+     * 各科室缺陷占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        return baseMapper.levelStatisticsByDept(filterOrderByDeptVO);
+    }
+
+    /**
+     * 病案首页合格率占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        return baseMapper.homePageLevelStatisticsByDept(filterOrderByDeptVO);
+    }
 }

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

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/19 18:05
+ */
+@Getter
+@Setter
+public class FilterOrderByDeptVO extends FilterOrderVO {
+    private String deptName;
+}

+ 0 - 1
src/main/java/com/diagbot/vo/FilterOrderVO.java

@@ -25,6 +25,5 @@ public class FilterOrderVO extends FilterVO {
      * 排序(降序)
      */
     private String desc;
-
     private String name;
 }

+ 40 - 0
src/main/java/com/diagbot/web/ConsoleByDeptController.java

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConsoleByDeptFacade;
+import com.diagbot.vo.FilterOrderByDeptVO;
 import com.diagbot.vo.FilterPageByDeptVO;
 import com.diagbot.vo.FilterVO;
 import io.swagger.annotations.Api;
@@ -94,4 +96,42 @@ public class ConsoleByDeptController {
         IPage<DeptNumDTO> data = consoleByDeptFacade.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "各科室缺陷占比(组合)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 主治医生名称 <br>" +
+                    "deptName: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/levelStatisticsByDept")
+    @SysLogger("levelStatisticsByDept")
+    public RespDTO<List<LevelStatisticsDTO>> levelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.levelStatisticsByDept(filterOrderByDeptVO));
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 主治医生名称 <br>" +
+                    "deptName: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelStatisticsByDept")
+    @SysLogger("homePageLevelStatisticsByDept")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO));
+    }
 }

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

@@ -940,4 +940,218 @@
             </choose>
         </if>
     </select>
+
+    <!-- 各科室缺陷占比(主任医生) -->
+    <select id="levelStatisticsByDept" parameterType="com.diagbot.vo.FilterOrderByDeptVO" resultType="com.diagbot.dto.LevelStatisticsDTO">
+        SELECT
+        a.doctor_id AS doctorId,
+        a.doctor_name AS doctorName,
+        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,
+        sys_user_dept 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.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        AND a.beh_dept_id = e.dept_id
+        <![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.doctor_name like CONCAT('%',#{name},'%')
+        </if>
+        <if test="userId!=null and userId !=''">
+            AND e.user_id = #{userId}
+        </if>
+        <if test="deptName!=null and deptName !=''">
+            AND a.beh_dept_name = #{deptName}
+        </if>
+        GROUP BY
+        a.doctor_id,
+        a.doctor_name
+        <if test="asc != null and asc !=''">
+            order by
+            <choose>
+                <when test='asc=="doctorId"'>doctorId asc</when>
+                <when test='asc=="doctorName"'>doctorName 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> doctorName asc </otherwise>
+            </choose>
+        </if>
+        <if test="desc != null and desc!=''">
+            order by
+            <choose>
+                <when test='desc=="doctorId"'>doctorId desc</when>
+                <when test='desc=="doctorName"'>doctorName 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> doctorName desc </otherwise>
+            </choose>
+        </if>
+    </select>
+
+    <!-- 病案首页合格率占比(主任医生) -->
+    <select id="homePageLevelStatisticsByDept" parameterType="com.diagbot.vo.FilterOrderByDeptVO" resultType="com.diagbot.dto.LevelStatisticsDTO">
+        SELECT
+        a.doctor_id AS doctorId,
+        a.doctor_name AS doctorName,
+        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,
+        sys_user_dept e
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND e.is_deleted = 'N'
+        AND 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 a.beh_dept_id = e.dept_id
+        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.doctor_name like CONCAT('%',#{name},'%')
+        </if>
+        <if test="userId!=null and userId !=''">
+            AND e.user_id = #{userId}
+        </if>
+        <if test="deptName!=null and deptName !=''">
+        AND a.beh_dept_name = #{deptName}
+        </if>
+        GROUP BY
+        a.doctor_id,
+        a.doctor_name
+        <if test="asc != null and asc !=''">
+            order by
+            <choose>
+                <when test='asc=="doctorId"'>doctorId asc</when>
+                <when test='asc=="doctorName"'>doctorName 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> doctorName asc </otherwise>
+            </choose>
+        </if>
+        <if test="desc != null and desc!=''">
+            order by
+            <choose>
+                <when test='desc=="doctorId"'>doctorId desc</when>
+                <when test='desc=="doctorName"'>doctorName 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> doctorName desc </otherwise>
+            </choose>
+        </if>
+    </select>
 </mapper>