瀏覽代碼

Merge remote-tracking branch 'origin/master' into debug

zhaops 5 年之前
父節點
當前提交
60c9f542c0

+ 17 - 0
src/main/java/com/diagbot/dto/AverageStatisticsDTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/15 19:44
+ */
+@Getter
+@Setter
+public class AverageStatisticsDTO {
+    private Long deptId;
+    private String deptName;
+    private Double averageValue;
+}

+ 113 - 24
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,8 +1,8 @@
 package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.ResultDetailDTO;
-import com.diagbot.dto.ResultStatisticsDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.enums.IsDeleteEnum;
@@ -11,7 +11,6 @@ import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.FilterVO;
-import com.fasterxml.jackson.datatype.jsr310.DecimalUtils;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -37,6 +36,8 @@ public class ConsoleFacade {
     private QcresultInfoFacade qcresultInfoFacade;
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private HomePageFacade homePageFacade;
 
 
     /**
@@ -44,7 +45,7 @@ public class ConsoleFacade {
      *
      * @return
      */
-    public Map<String, Object> mrStatistics() {
+    public Map<String, Object> mrStatistics(FilterVO filterVO) {
         Map<String, Object> retMap = new HashMap<>();
         retMap.put("本月病历数", 0);
         retMap.put("本月质控数-人工", 0);
@@ -57,11 +58,10 @@ public class ConsoleFacade {
         retMap.put("本月不合格病历-机器", 0);
 
         String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String startDate = getStartDateStr(filterVO.getType());
+        filterVO.setStartDate(startDate);
+        filterVO.setHospitalId(hospitalId);
 
-        Date date = new Date();
-        String year = DateUtil.getYear(date);
-        int month = DateUtil.getMonth(date);
-        String startDate = year + "-" + month + "-1";
         QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
         behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("hospital_id", hospitalId)
@@ -72,11 +72,7 @@ public class ConsoleFacade {
             retMap.put("本月病历数", behospitalInfoList.size());
         }
 
-        QueryWrapper<QcresultInfo> qcresultInfoQueryWrapper = new QueryWrapper<>();
-        qcresultInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id", hospitalId)
-                .ge("gmt_create", startDate);
-        List<QcresultInfo> qcresultInfoList = qcresultInfoFacade.list(qcresultInfoQueryWrapper);
+        List<QcresultInfo> qcresultInfoList = qcresultInfoFacade.getQcresultSelectively(filterVO);
         if (ListUtil.isNotEmpty(qcresultInfoList)) {
             retMap.put("本月质控数-人工", qcresultInfoList
                     .stream()
@@ -121,7 +117,6 @@ public class ConsoleFacade {
         }
 
         return retMap;
-
     }
 
     /**
@@ -135,17 +130,7 @@ public class ConsoleFacade {
         retMap.put("缺陷排行列表", Lists.newLinkedList());
         retMap.put("各科室缺陷占比", Lists.newLinkedList());
         String hospitalId = SysUserUtils.getCurrentHospitalID();
-        Date date = new Date();
-        String startDate = "";
-        String year = DateUtil.getYear(date);
-        int month = DateUtil.getMonth(date);
-        if (filterVO.getType().equals(1)) {
-            //本月统计
-            startDate = year + "-" + month + "-1";
-        } else if (filterVO.getType().equals(2)) {
-            //本年统计
-            startDate = year + "-1-1";
-        }
+        String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
         filterVO.setHospitalId(hospitalId);
         filterVO.setLimitCount(10);
@@ -197,4 +182,108 @@ public class ConsoleFacade {
         }
         return retMap;
     }
+
+    /**
+     * 医院运营相关统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> averageStatistics(FilterVO filterVO) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
+        List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
+        retMap.put("平均住院日", Lists.newLinkedList());
+        retMap.put("平均住院费用", Lists.newLinkedList());
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        filterVO.setHospitalId(hospitalId);
+        String startDate = getStartDateStr(filterVO.getType());
+        filterVO.setStartDate(startDate);
+
+        List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
+        List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
+
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
+        }
+        Integer limitCount = filterVO.getLimitCount();
+
+        //平均住院日
+        if (ListUtil.isNotEmpty(averageDayNumList)) {
+            if (averageDayNumList.size() < limitCount) {
+                retAverageDayNumList = BeanUtil.listCopyTo(averageDayNumList, AverageStatisticsDTO.class);
+            } else {
+                Double averageValue = 0d;
+                Integer num = 0;
+                for (AverageStatisticsDTO averageStatisticsDTO : averageDayNumList) {
+                    if (retAverageDayNumList.size() < limitCount - 1) {
+                        retAverageDayNumList.add(averageStatisticsDTO);
+                    } else {
+                        averageValue = BigDecimal
+                                .valueOf(averageValue)
+                                .add(BigDecimal.valueOf(averageStatisticsDTO.getAverageValue()))
+                                .doubleValue();
+                        num++;
+                    }
+                }
+                averageValue = BigDecimal.valueOf(averageValue).divide(BigDecimal.valueOf(num)).doubleValue();
+                AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
+                retAverageStatistics.setDeptName("其他");
+                retAverageStatistics.setAverageValue(averageValue);
+                retAverageDayNumList.add(retAverageStatistics);
+            }
+            retMap.put("平均住院日", retAverageDayNumList);
+        }
+
+        //平均住院费用
+        if (ListUtil.isNotEmpty(averageFeeList)) {
+            if (averageFeeList.size() < limitCount) {
+                retAverageFeeList = BeanUtil.listCopyTo(averageFeeList, AverageStatisticsDTO.class);
+            } else {
+                Double averageValue = 0d;
+                Integer num = 0;
+                for (AverageStatisticsDTO averageStatisticsDTO : averageFeeList) {
+                    if (retAverageFeeList.size() < limitCount - 1) {
+                        retAverageFeeList.add(averageStatisticsDTO);
+                    } else {
+                        averageValue = BigDecimal
+                                .valueOf(averageValue)
+                                .add(BigDecimal.valueOf(averageStatisticsDTO.getAverageValue()))
+                                .doubleValue();
+                        num++;
+                    }
+                }
+                averageValue = BigDecimal.valueOf(averageValue).divide(BigDecimal.valueOf(num)).doubleValue();
+                AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
+                retAverageStatistics.setDeptName("其他");
+                retAverageStatistics.setAverageValue(averageValue);
+                retAverageFeeList.add(retAverageStatistics);
+            }
+            retMap.put("平均住院费用", retAverageFeeList);
+        }
+
+        return retMap;
+    }
+
+    /**
+     * 筛选起始时间
+     *
+     * @param type
+     * @return
+     */
+    public String getStartDateStr(Integer type) {
+        Date date = new Date();
+        String startDate = "";
+        String year = DateUtil.getYear(date);
+        int month = DateUtil.getMonth(date);
+        if (type.equals(1)) {
+            //本月统计
+            startDate = year + "-" + month + "-1";
+        } else if (type.equals(2)) {
+            //本年统计
+            startDate = year + "-1-1";
+        }
+        return startDate;
+    }
+
 }

+ 21 - 1
src/main/java/com/diagbot/mapper/HomePageMapper.java

@@ -1,7 +1,11 @@
 package com.diagbot.mapper;
 
-import com.diagbot.entity.HomePage;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.entity.HomePage;
+import com.diagbot.vo.FilterVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,20 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface HomePageMapper extends BaseMapper<HomePage> {
 
+    /**
+     * 按科室统计平均住院天数
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageDayNum(FilterVO filterVO);
+
+    /**
+     * 按科室统计平均费用
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageFee(FilterVO filterVO);
+
 }

+ 10 - 0
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -2,6 +2,9 @@ package com.diagbot.mapper;
 
 import com.diagbot.entity.QcresultInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.FilterVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,4 +17,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
 
+    /**
+     * 筛选质控记录
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<QcresultInfo> getQcresultSelectively(FilterVO filterVO);
 }

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

@@ -1,7 +1,11 @@
 package com.diagbot.service;
 
+import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.entity.HomePage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.FilterVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,19 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2020-04-13
  */
 public interface HomePageService extends IService<HomePage> {
+    /**
+     * 按科室统计平均住院天数
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageDayNum(FilterVO filterVO);
 
+    /**
+     * 按科室统计平均费用
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageFee(FilterVO filterVO);
 }

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

@@ -2,6 +2,9 @@ package com.diagbot.service;
 
 import com.diagbot.entity.QcresultInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.FilterVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,4 +17,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface QcresultInfoService extends IService<QcresultInfo> {
 
+    /**
+     * 筛选质控记录
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<QcresultInfo> getQcresultSelectively(FilterVO filterVO);
 }

+ 26 - 1
src/main/java/com/diagbot/service/impl/HomePageServiceImpl.java

@@ -1,11 +1,15 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.entity.HomePage;
 import com.diagbot.mapper.HomePageMapper;
 import com.diagbot.service.HomePageService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.FilterVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +21,25 @@ import org.springframework.stereotype.Service;
 @Service
 public class HomePageServiceImpl extends ServiceImpl<HomePageMapper, HomePage> implements HomePageService {
 
+    /**
+     * 按科室统计平均住院天数
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<AverageStatisticsDTO> getAverageDayNum(FilterVO filterVO) {
+        return baseMapper.getAverageDayNum(filterVO);
+    }
+
+    /**
+     * 按科室统计平均费用
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<AverageStatisticsDTO> getAverageFee(FilterVO filterVO) {
+        return baseMapper.getAverageFee(filterVO);
+    }
 }

+ 14 - 1
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -1,11 +1,14 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.service.QcresultInfoService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.FilterVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控评分结果信息
@@ -18,4 +21,14 @@ import org.springframework.stereotype.Service;
 @Service
 public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, QcresultInfo> implements QcresultInfoService {
 
+    /**
+     * 筛选质控记录
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<QcresultInfo> getQcresultSelectively(FilterVO filterVO) {
+        return baseMapper.getQcresultSelectively(filterVO);
+    }
 }

+ 11 - 2
src/main/java/com/diagbot/web/ConsoleController.java

@@ -32,8 +32,8 @@ public class ConsoleController {
             notes = "")
     @PostMapping("/mrStatistics")
     @SysLogger("mrStatistics")
-    public RespDTO<Map<String, Object>> mrStatistics() {
-        Map<String, Object> data = consoleFacade.mrStatistics();
+    public RespDTO<Map<String, Object>> mrStatistics(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleFacade.mrStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
 
@@ -45,4 +45,13 @@ public class ConsoleController {
         Map<String, Object> data = consoleFacade.resultStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
+
+    @ApiOperation(value = "医院运营相关统计[by:zhaops]",
+            notes = "")
+    @PostMapping("/averageStatistics")
+    @SysLogger("averageStatistics")
+    public RespDTO<Map<String, Object>> averageStatistics(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleFacade.averageStatistics(filterVO);
+        return RespDTO.onSuc(data);
+    }
 }

+ 55 - 0
src/main/resources/mapper/HomePageMapper.xml

@@ -137,4 +137,59 @@
         <result column="modifier" property="modifier" />
     </resultMap>
 
+
+    <!-- 按科室统计平均住院天数 -->
+    <select id="getAverageDayNum"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.AverageStatisticsDTO">
+        SELECT
+        a.beh_dept_id as deptId,
+        a.beh_dept_name as deptName,
+        round( sum( b.behospital_day_num )/ count(*), 2 ) AS averageValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ORDER BY
+        sum( b.behospital_day_num )/ count(*) DESC
+    </select>
+
+    <!-- 按科室统计平均费用 -->
+    <select id="getAverageFee"  parameterType="com.diagbot.vo.FilterVO"  resultType="com.diagbot.dto.AverageStatisticsDTO">
+        SELECT
+        a.beh_dept_id as deptId,
+        a.beh_dept_name as deptName,
+        round( sum( b.total_fee )/ count(*), 2 ) AS averageValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ORDER BY
+        sum( b.total_fee )/ count(*) DESC
+    </select>
+
 </mapper>

+ 20 - 0
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -18,4 +18,24 @@
         <result column="remark" property="remark" />
     </resultMap>
 
+    <!-- 缺陷排行列表 -->
+    <select id="getQcresultSelectively"  parameterType="com.diagbot.vo.FilterVO" resultMap="BaseResultMap">
+        SELECT
+        b.*
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+        </if>
+    </select>
+
 </mapper>