|
@@ -2,15 +2,24 @@ package com.diagbot.facade;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.diagbot.dto.AverageStatisticsDTO;
|
|
|
+import com.diagbot.dto.NumDTO;
|
|
|
+import com.diagbot.dto.QcResultPercentDTO;
|
|
|
+import com.diagbot.dto.SysRoleDTO;
|
|
|
+import com.diagbot.dto.SysUserRoleDTO;
|
|
|
import com.diagbot.entity.BehospitalInfo;
|
|
|
+import com.diagbot.entity.SysRole;
|
|
|
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.EntityUtil;
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
import com.diagbot.util.SysUserUtils;
|
|
|
import com.diagbot.vo.FilterVO;
|
|
|
+import com.diagbot.vo.HomePageFilterVO;
|
|
|
import com.diagbot.vo.QcresultFilterVO;
|
|
|
+import com.diagbot.vo.SysUserBaseVO;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -18,11 +27,13 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.text.DecimalFormat;
|
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Description:
|
|
@@ -37,108 +48,128 @@ public class ConsoleFacade {
|
|
|
@Autowired
|
|
|
private BehospitalInfoFacade behospitalInfoFacade;
|
|
|
@Autowired
|
|
|
- private HomePageFacade homePageFacade;
|
|
|
- @Autowired
|
|
|
private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 病历相关统计
|
|
|
+ * 出院人数统计
|
|
|
+ *
|
|
|
+ * @param filterVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String, Object> leaveHosStatistics(FilterVO filterVO) {
|
|
|
+ Map<String, Object> retMap = new LinkedHashMap<>();
|
|
|
+ String hospitalId = SysUserUtils.getCurrentHospitalID();
|
|
|
+ retMap.put("总人数", 0);
|
|
|
+ retMap.put("死亡人数", 0);
|
|
|
+ retMap.put("新生儿人数", 0);
|
|
|
+ retMap.put("手术病人数", 0);
|
|
|
+ filterVO.setHospitalId(hospitalId);
|
|
|
+ filterVO.setStartDate(getStartDateStr(filterVO.getType()));
|
|
|
+ filterVO.setEndDate(getEndDateStr(filterVO.getType()));
|
|
|
+ HomePageFilterVO homePageFilterVO = new HomePageFilterVO();
|
|
|
+ BeanUtil.copyProperties(filterVO, homePageFilterVO);
|
|
|
+ Integer totleNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
|
|
|
+ homePageFilterVO.setDeath(1);
|
|
|
+ Integer deathNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
|
|
|
+ homePageFilterVO.setDeath(null);
|
|
|
+ homePageFilterVO.setNewBorn(1);
|
|
|
+ Integer newBornNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
|
|
|
+ Integer operationNum = behospitalInfoFacade.homePageCountForOperation(filterVO);
|
|
|
+ retMap.put("总人数", totleNum);
|
|
|
+ retMap.put("死亡人数", deathNum);
|
|
|
+ retMap.put("新生儿人数", newBornNum);
|
|
|
+ retMap.put("手术病人数", operationNum);
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 质控病历统计
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String, Object> mrStatistics(FilterVO filterVO) {
|
|
|
+ DecimalFormat df = new DecimalFormat("#0.00");
|
|
|
Map<String, Object> retMap = new LinkedHashMap<>();
|
|
|
String hospitalId = SysUserUtils.getCurrentHospitalID();
|
|
|
String startDate = getStartDateStr(filterVO.getType());
|
|
|
+ String endDate = getEndDateStr(filterVO.getType());
|
|
|
filterVO.setStartDate(startDate);
|
|
|
+ filterVO.setEndDate(endDate);
|
|
|
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);
|
|
|
+
|
|
|
+ int totleNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
|
|
|
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);
|
|
|
+ int firstLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
|
|
|
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);
|
|
|
+ int secondLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
|
|
|
qcresultFilterVO.setLevel("丙");
|
|
|
- int qcresultByGradeType1AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
|
|
|
- if (filterVO.getType().equals(1)) {
|
|
|
- retMap.put("本月丙级病历-机器", qcresultByGradeType1AndLevel3Count);
|
|
|
- } else if (filterVO.getType().equals(2)) {
|
|
|
- retMap.put("本年丙级病历-机器", qcresultByGradeType1AndLevel3Count);
|
|
|
+ int thirdLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
|
|
|
+ NumDTO totleNumDTO = new NumDTO();
|
|
|
+ totleNumDTO.setTotleNum(totleNum);
|
|
|
+ totleNumDTO.setNum(totleNum);
|
|
|
+ NumDTO firstLevelNumDTO = new NumDTO();
|
|
|
+ firstLevelNumDTO.setNum(firstLevelNum);
|
|
|
+ firstLevelNumDTO.setTotleNum(totleNum);
|
|
|
+ Double firstPercent = BigDecimal.valueOf(firstLevelNum)
|
|
|
+ .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
|
|
|
+ .doubleValue();
|
|
|
+ String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
|
|
|
+ firstLevelNumDTO.setPercent(firstPercent);
|
|
|
+ firstLevelNumDTO.setPercentStr(firstPercentStr);
|
|
|
+ NumDTO secondLevelNumDTO = new NumDTO();
|
|
|
+ secondLevelNumDTO.setNum(secondLevelNum);
|
|
|
+ secondLevelNumDTO.setTotleNum(totleNum);
|
|
|
+ Double secondPercent = BigDecimal.valueOf(secondLevelNum)
|
|
|
+ .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
|
|
|
+ .doubleValue();
|
|
|
+ String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
|
|
|
+ secondLevelNumDTO.setPercent(secondPercent);
|
|
|
+ secondLevelNumDTO.setPercentStr(secondPercentStr);
|
|
|
+ NumDTO thirdLevelNumDTO = new NumDTO();
|
|
|
+ thirdLevelNumDTO.setNum(thirdLevelNum);
|
|
|
+ thirdLevelNumDTO.setTotleNum(totleNum);
|
|
|
+ Double thirdPercent = BigDecimal.valueOf(1)
|
|
|
+ .subtract(BigDecimal.valueOf(firstPercent))
|
|
|
+ .subtract(BigDecimal.valueOf(secondPercent))
|
|
|
+ .doubleValue();
|
|
|
+ String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
|
|
|
+ thirdLevelNumDTO.setPercent(thirdPercent);
|
|
|
+ thirdLevelNumDTO.setPercentStr(thirdPercentStr);
|
|
|
+ retMap.put("累计质控病历数", totleNumDTO);
|
|
|
+ retMap.put("甲级病历", firstLevelNumDTO);
|
|
|
+ retMap.put("乙级病历", secondLevelNumDTO);
|
|
|
+ retMap.put("丙级病历", thirdLevelNumDTO);
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按科室统计
|
|
|
+ *
|
|
|
+ * @param filterVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String, Object> deptStatistics(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());
|
|
|
+ String endDate = getEndDateStr(filterVO.getType());
|
|
|
+ filterVO.setStartDate(startDate);
|
|
|
+ filterVO.setEndDate(endDate);
|
|
|
+ filterVO.setHospitalId(hospitalId);
|
|
|
+ QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
|
|
|
+ BeanUtil.copyProperties(filterVO, qcresultFilterVO);
|
|
|
+ try {
|
|
|
+ Map<String, Object> invokeParams = new HashMap<>();
|
|
|
+ invokeParams.put("filterVO", filterVO);
|
|
|
+ retMap
|
|
|
+ = dataBeanAggregateQueryFacade.get("setAllDept", invokeParams, Map.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
|
|
|
}
|
|
|
return retMap;
|
|
|
}
|
|
@@ -286,6 +317,31 @@ public class ConsoleFacade {
|
|
|
return startDate;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 筛选截止时间
|
|
|
+ *
|
|
|
+ * @param type
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getEndDateStr(Integer type) {
|
|
|
+ Date date = new Date();
|
|
|
+ String endDate = "";
|
|
|
+ String year = DateUtil.getYear(date);
|
|
|
+ int month = DateUtil.getMonth(date);
|
|
|
+ if (type.equals(1)) {
|
|
|
+ //本月统计
|
|
|
+ if (month == 12) {
|
|
|
+ endDate = (Integer.valueOf(year) + 1) + "-1-1";
|
|
|
+ } else {
|
|
|
+ endDate = year + "-" + (month + 1) + "-1";
|
|
|
+ }
|
|
|
+ } else if (type.equals(2)) {
|
|
|
+ //本年统计
|
|
|
+ endDate = (Integer.valueOf(year) + 1) + "-1-1";
|
|
|
+ }
|
|
|
+ return endDate;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据限制数量重组统计结果
|
|
|
*
|