소스 검색

控制台-医院运营相关统计

zhaops 5 년 전
부모
커밋
53b212ea9e

+ 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;
+}

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

@@ -1,6 +1,7 @@
 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.entity.BehospitalInfo;
 import com.diagbot.entity.QcresultInfo;
@@ -35,6 +36,8 @@ public class ConsoleFacade {
     private QcresultInfoFacade qcresultInfoFacade;
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private HomePageFacade homePageFacade;
 
 
     /**
@@ -180,12 +183,95 @@ 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) {
+    public String getStartDateStr(Integer type) {
         Date date = new Date();
         String startDate = "";
         String year = DateUtil.getYear(date);

+ 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);
+
 }

+ 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);
 }

+ 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);
+    }
 }

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

@@ -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>