123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- package com.diagbot.facade;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.diagbot.dto.AverageStatisticsDTO;
- import com.diagbot.entity.BehospitalInfo;
- import com.diagbot.enums.IsDeleteEnum;
- 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.FilterVO;
- import com.diagbot.vo.QcresultFilterVO;
- 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;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * @Description:
- * @Author:zhaops
- * @time: 2020/4/13 16:45
- */
- @Component
- public class ConsoleFacade {
- @Autowired
- private QcresultInfoFacade qcresultInfoFacade;
- @Autowired
- private BehospitalInfoFacade behospitalInfoFacade;
- @Autowired
- private HomePageFacade homePageFacade;
- @Autowired
- private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
- /**
- * 病历相关统计
- *
- * @return
- */
- public Map<String, Object> mrStatistics(FilterVO filterVO) {
- Map<String, Object> retMap = new LinkedHashMap<>();
- String hospitalId = SysUserUtils.getCurrentHospitalID();
- String startDate = getStartDateStr(filterVO.getType());
- filterVO.setStartDate(startDate);
- filterVO.setHospitalId(hospitalId);
- QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
- behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
- .eq("hospital_id", hospitalId)
- .ge("behospital_date", startDate);
- int behospitalInfoCount = behospitalInfoFacade.count(behospitalInfoQueryWrapper);
- //病历数
- if (filterVO.getType().equals(1)) {
- retMap.put("本月病历数", behospitalInfoCount);
- } else if (filterVO.getType().equals(2)) {
- retMap.put("本年病历数", behospitalInfoCount);
- }
- QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
- BeanUtil.copyProperties(filterVO, qcresultFilterVO);
- //本月质控数-人工
- qcresultFilterVO.setGradeType(2);
- qcresultFilterVO.setLevel("");
- int qcresultByGradeType2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月质控数-人工", qcresultByGradeType2Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年质控数-人工", qcresultByGradeType2Count);
- }
- //本月质控数-机器
- qcresultFilterVO.setGradeType(1);
- qcresultFilterVO.setLevel("");
- int qcresultByGradeType1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月质控数-机器", qcresultByGradeType1Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年质控数-机器", qcresultByGradeType1Count);
- }
- //本月甲级病历-人工
- qcresultFilterVO.setGradeType(2);
- qcresultFilterVO.setLevel("甲");
- int qcresultByGradeType2AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月甲级病历-人工", qcresultByGradeType2AndLevel1Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年甲级病历-人工", qcresultByGradeType2AndLevel1Count);
- }
- //本月甲级病历-机器
- qcresultFilterVO.setGradeType(1);
- qcresultFilterVO.setLevel("甲");
- int qcresultByGradeType1AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月甲级病历-机器", qcresultByGradeType1AndLevel1Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年甲级病历-机器", qcresultByGradeType1AndLevel1Count);
- }
- //本月乙级病历-人工
- qcresultFilterVO.setGradeType(2);
- qcresultFilterVO.setLevel("乙");
- int qcresultByGradeType2AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月乙级病历-人工", qcresultByGradeType2AndLevel2Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年乙级病历-人工", qcresultByGradeType2AndLevel2Count);
- }
- //本月乙级病历-机器
- qcresultFilterVO.setGradeType(1);
- qcresultFilterVO.setLevel("乙");
- int qcresultByGradeType1AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月乙级病历-机器", qcresultByGradeType1AndLevel2Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年乙级病历-机器", qcresultByGradeType1AndLevel2Count);
- }
- //本月乙级病历-人工
- qcresultFilterVO.setGradeType(2);
- qcresultFilterVO.setLevel("丙");
- int qcresultByGradeType2AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (qcresultFilterVO.getType().equals(1)) {
- retMap.put("本月不合格病历-人工", qcresultByGradeType2AndLevel3Count);
- } else if (qcresultFilterVO.getType().equals(2)) {
- retMap.put("本年不合格病历-人工", qcresultByGradeType2AndLevel3Count);
- }
- //本月乙级病历-机器
- qcresultFilterVO.setGradeType(1);
- qcresultFilterVO.setLevel("丙");
- int qcresultByGradeType1AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
- if (filterVO.getType().equals(1)) {
- retMap.put("本月不合格病历-机器", qcresultByGradeType1AndLevel3Count);
- } else if (filterVO.getType().equals(2)) {
- retMap.put("本年不合格病历-机器", qcresultByGradeType1AndLevel3Count);
- }
- return retMap;
- }
- /**
- * 缺陷相关统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> resultStatistics(FilterVO filterVO) {
- Map<String, Object> retMap = new LinkedHashMap<>();
- retMap.put("缺陷排行列表", Lists.newLinkedList());
- retMap.put("各科室缺陷占比", Lists.newLinkedList());
- String hospitalId = SysUserUtils.getCurrentHospitalID();
- String startDate = getStartDateStr(filterVO.getType());
- filterVO.setStartDate(startDate);
- filterVO.setHospitalId(hospitalId);
- /*if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
- filterVO.setLimitCount(10);
- }*/
- // List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
- // if (ListUtil.isNotEmpty(results)) {
- // results.forEach(result -> {
- // DecimalFormat df = new DecimalFormat("#0.00");
- // String percentStr
- // = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
- // result.setPercentStr(percentStr);
- // });
- // retMap.put("缺陷排行列表", results);
- // }
- // List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
- // if (ListUtil.isNotEmpty(results2)) {
- // List<ResultDetailDTO> retResults = Lists.newLinkedList();
- // if (results2.size() <= 6) {
- // retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
- // } else {
- //
- // Double rate = 0d;
- // Integer num = 0;
- // for (ResultDetailDTO result : results2) {
- // if (retResults.size() < 5) {
- // rate = BigDecimal.valueOf(rate)
- // .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
- // .doubleValue();
- // retResults.add(result);
- // } else {
- // num += result.getNum();
- // }
- // }
- // ResultDetailDTO retResult = new ResultDetailDTO();
- // retResult.setName("其他");
- // retResult.setNum(num);
- // retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
- // retResults.add(retResult);
- // }
- // retResults.forEach(result -> {
- // DecimalFormat df = new DecimalFormat("#0.00");
- // String percentStr
- // = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
- // result.setPercentStr(percentStr);
- // });
- // retMap.put("各科室缺陷占比", retResults);
- // }
- try {
- Map<String, Object> invokeParams = new HashMap<>();
- invokeParams.put("filterVO", filterVO);
- retMap
- = dataBeanAggregateQueryFacade.get("setAllResult", invokeParams, Map.class);
- } catch (Exception e) {
- throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
- }
- 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)) {
- retAverageDayNumList = getLimitAverageList(averageDayNumList, limitCount);
- retMap.put("平均住院日", retAverageDayNumList);
- }
- //平均住院费用
- if (ListUtil.isNotEmpty(averageFeeList)) {
- retAverageFeeList = getLimitAverageList(averageFeeList, limitCount);
- 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;
- }
- /**
- * 根据限制数量重组统计结果
- *
- * @param averageList
- * @param limitCount
- * @return
- */
- public List<AverageStatisticsDTO> getLimitAverageList(List<AverageStatisticsDTO> averageList, Integer limitCount) {
- List<AverageStatisticsDTO> retAverageList = Lists.newLinkedList();
- if (averageList.size() < limitCount) {
- retAverageList = BeanUtil.listCopyTo(averageList, AverageStatisticsDTO.class);
- } else {
- Double averageValue = 0d;
- Double totleValue = 0d;
- Integer num = 0;
- for (AverageStatisticsDTO averageStatisticsDTO : averageList) {
- if (retAverageList.size() < limitCount - 1) {
- retAverageList.add(averageStatisticsDTO);
- } else {
- totleValue = BigDecimal
- .valueOf(totleValue)
- .add(BigDecimal.valueOf(averageStatisticsDTO.getTotleValue()))
- .doubleValue();
- num += averageStatisticsDTO.getNum();
- }
- }
- averageValue = BigDecimal.valueOf(totleValue)
- .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
- .doubleValue();
- AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
- retAverageStatistics.setDeptName("其他");
- retAverageStatistics.setNum(num);
- retAverageStatistics.setAverageValue(averageValue);
- retAverageStatistics.setTotleValue(totleValue);
- retAverageList.add(retAverageStatistics);
- }
- return retAverageList;
- }
- }
|