Browse Source

科室-病案首页合格率统计

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

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

@@ -5,6 +5,7 @@ import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
+import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
@@ -612,4 +613,89 @@ public class ConsoleByDeptFacade {
         List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO);
         return records;
     }
+
+    /**
+     * 病案首页合格率占比(首页)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelByDeptLimit(FilterOrderByDeptVO filterOrderByDeptVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        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));
+        if (filterOrderByDeptVO.getLimitCount() == null || filterOrderByDeptVO.getLimitCount().equals(0)) {
+            filterOrderByDeptVO.setLimitCount(10);
+        }
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO);
+        //增加全科室
+        LevelStatisticsDTO item = new LevelStatisticsDTO();
+        Integer mrNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return Lists.newLinkedList();
+        }
+        Integer entryNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getEntryNum)
+                .reduce(0, Integer::sum);
+        Double totleFee = records
+                .stream()
+                .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .doubleValue();
+        Double averageFee = BigDecimal.valueOf(totleFee)
+                .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
+                .doubleValue();
+        Integer firstLevelNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getFirstLevelNum)
+                .reduce(0, Integer::sum);
+        Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstLevelPercentStr
+                = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        Integer secondLevelNum = mrNum - firstLevelNum;
+        Double secondLevelPercent = BigDecimal.valueOf(1)
+                .subtract(BigDecimal.valueOf(firstLevelPercent))
+                .doubleValue();
+        String secondLevelPercentStr
+                = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        item.setDoctorName(filterOrderByDeptVO.getDeptName());
+        item.setEntryNum(entryNum);
+        item.setMrNum(mrNum);
+        item.setTotleValue(totleFee);
+        item.setAverageValue(averageFee);
+        item.setFirstLevelNum(firstLevelNum);
+        item.setFirstLevelPercent(firstLevelPercent);
+        item.setFirstLevelPercentStr(firstLevelPercentStr);
+        item.setSecondLevelNum(secondLevelNum);
+        item.setSecondLevelPercent(secondLevelPercent);
+        item.setSecondLevelPercentStr(secondLevelPercentStr);
+
+        records.add(0, item);
+
+        records = records
+                .stream()
+                .limit(filterOrderByDeptVO.getLimitCount())
+                .collect(Collectors.toList());
+
+        return records;
+    }
 }

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

@@ -17,6 +17,7 @@ import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.FilterOrderVO;
 import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
+import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -30,6 +31,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Filter;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -483,4 +485,81 @@ public class ConsoleFacade {
         List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
         return records;
     }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelLimit(FilterOrderVO filterOrderVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        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);
+        if (filterOrderVO.getLimitCount() == null || filterOrderVO.getLimitCount().equals(0)) {
+            filterOrderVO.setLimitCount(10);
+        }
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
+
+        //增加全院
+        LevelStatisticsDTO item = new LevelStatisticsDTO();
+        Integer mrNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return Lists.newLinkedList();
+        }
+        Integer entryNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getEntryNum)
+                .reduce(0, Integer::sum);
+        Double totleFee = records
+                .stream()
+                .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .doubleValue();
+        Double averageFee = BigDecimal.valueOf(totleFee)
+                .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
+                .doubleValue();
+        Integer firstLevelNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getFirstLevelNum)
+                .reduce(0, Integer::sum);
+        Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstLevelPercentStr
+                = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        Integer secondLevelNum = mrNum - firstLevelNum;
+        Double secondLevelPercent = BigDecimal.valueOf(1)
+                .subtract(BigDecimal.valueOf(firstLevelPercent))
+                .doubleValue();
+        String secondLevelPercentStr
+                = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        item.setDeptName("全院");
+        item.setEntryNum(entryNum);
+        item.setMrNum(mrNum);
+        item.setTotleValue(totleFee);
+        item.setAverageValue(averageFee);
+        item.setFirstLevelNum(firstLevelNum);
+        item.setFirstLevelPercent(firstLevelPercent);
+        item.setFirstLevelPercentStr(firstLevelPercentStr);
+        item.setSecondLevelNum(secondLevelNum);
+        item.setSecondLevelPercent(secondLevelPercent);
+        item.setSecondLevelPercentStr(secondLevelPercentStr);
+
+        records.add(0, item);
+
+        records = records
+                .stream()
+                .limit(filterOrderVO.getLimitCount())
+                .collect(Collectors.toList());
+
+        return records;
+    }
 }

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

@@ -134,4 +134,23 @@ public class ConsoleByDeptController {
     public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
         return RespDTO.onSuc(consoleByDeptFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO));
     }
+
+    /**
+     * 病案首页合格率占比(首页)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比(首页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 主治医生名称 <br>" +
+                    "deptName: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelByDeptLimit")
+    @SysLogger("homePageLevelByDeptLimit")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelByDeptLimit(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.homePageLevelByDeptLimit(filterOrderByDeptVO));
+    }
 }

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

@@ -336,4 +336,22 @@ public class ConsoleController {
     public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
         return RespDTO.onSuc(consoleFacade.homePageLevelStatistics(filterOrderVO));
     }
+
+    /**
+     * 病案首页合格率占比(首页)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比(首页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelLimit")
+    @SysLogger("homePageLevelLimit")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelLimit(@RequestBody FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.homePageLevelLimit(filterOrderVO));
+    }
 }