package com.diagbot.facade; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.diagbot.aggregate.AverageStatisticsAggregate; import com.diagbot.aggregate.MrStatisticsAggregate; import com.diagbot.aggregate.ResultStatisticsAggregate; import com.diagbot.dto.*; import com.diagbot.entity.QcCasesEntry; import com.diagbot.entity.SysHospitalSet; import com.diagbot.exception.CommonErrorCode; import com.diagbot.exception.CommonException; import com.diagbot.util.*; import com.diagbot.vo.*; import com.google.common.collect.Lists; import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.*; import java.util.stream.Collectors; /** * @Description: * @Author:zhaops * @time: 2020/4/13 16:45 */ @Component public class ConsoleFacade { @Autowired private FilterFacade filterFacade; @Autowired private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade; @Autowired private AverageStatisticsAggregate averageStatisticsAggregate; @Autowired private MrStatisticsAggregate mrStatisticsAggregate; @Autowired private ResultStatisticsAggregate resultStatisticsAggregate; @Autowired private QcresultInfoFacade qcresultInfoFacade; @Autowired private HomePageFacade homePageFacade; @Autowired private BehospitalInfoFacade behospitalInfoFacade; @Autowired private SysHospitalSetFacade sysHospitalSetFacade; @Autowired private QcCasesEntryFacade qcCasesEntryFacade; //region-----------------------聚合接口开始------------------------------- /** * 病历相关统计 * * @param filterVO * @return */ public Map mrStatistics(FilterVO filterVO) { Map retMap = new LinkedHashMap<>(); filterFacade.filterVOSet(filterVO); try { Map invokeParams = new HashMap<>(); invokeParams.put("filterVO", filterVO); retMap = dataBeanAggregateQueryFacade.get("setAllMr", invokeParams, Map.class); } catch (Exception e) { throw new CommonException(CommonErrorCode.SERVER_IS_ERROR); } return retMap; } /** * 缺陷相关统计 * * @param filterVO * @return */ public Map resultStatistics(FilterVO filterVO) { Map retMap = new LinkedHashMap<>(); filterFacade.filterVOSet(filterVO); try { Map 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 averageStatistics(FilterVO filterVO) { Map retMap = new LinkedHashMap<>(); filterFacade.filterVOSet(filterVO); try { Map invokeParams = new HashMap<>(); invokeParams.put("filterVO", filterVO); retMap = dataBeanAggregateQueryFacade.get("setAllAverage", invokeParams, Map.class); } catch (Exception e) { throw new CommonException(CommonErrorCode.SERVER_IS_ERROR); } return retMap; } //endregion-----------------------聚合接口结束------------------------------- //region-----------------------单独接口开始------------------------------- /** * 平均住院天数 * * @param filterVO * @return */ public Map getAverageDayNum(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List averageDayNumList = averageStatisticsAggregate.getAverageDayNum(filterVO); if (ListUtil.isNotEmpty(averageDayNumList)) { retMap.put("平均住院日", averageDayNumList); } return retMap; } /** * 平均住院费用 * * @param filterVO * @return */ public Map getAverageFee(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List averageFeeList = averageStatisticsAggregate.getAverageFee(filterVO); if (ListUtil.isNotEmpty(averageFeeList)) { retMap.put("平均住院费用", averageFeeList); } return retMap; } /** * 质控平均分按科室统计 * * @param filterVO * @return */ public Map getAverageScore(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSame(filterVO); List averageScoreList = averageStatisticsAggregate.getAverageScore(filterVO); AverageStatisticsDTO item = getGlobleAverageTitle(averageScoreList); if (item != null) { averageScoreList.add(0, item); } if (ListUtil.isNotEmpty(averageScoreList)) { retMap.put("各科室质控平均分", averageScoreList); } return retMap; } /** * 增加全院记录 * * @param records * @return */ public AverageStatisticsDTO getGlobleAverageTitle(List records) { DecimalFormat df = new DecimalFormat("#0.00"); AverageStatisticsDTO item = new AverageStatisticsDTO(); if (ListUtil.isEmpty(records)) { return null; } //数量 Integer num = records .stream() .map(AverageStatisticsDTO::getNum) .reduce(0, Integer::sum); //同期数量 Integer sameNum = records .stream() .map(AverageStatisticsDTO::getSameNum) .reduce(0, Integer::sum); Double totleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); Double sameTotleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getSameTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); Double averageValue = 0d; if(0 != num){ averageValue = BigDecimal.valueOf(totleValue) .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP) .doubleValue(); } Double lastYearAverageValue = 0d; if(0 != sameNum) { lastYearAverageValue = BigDecimal.valueOf(sameTotleValue) .divide(BigDecimal.valueOf(sameNum), 2, RoundingMode.HALF_UP) .doubleValue(); } item.setName("全院"); item.setNum(num); item.setSameNum(sameNum); item.setAverageValue(averageValue); item.setTotleValue(totleValue); item.setSameTotleValue(sameTotleValue); item.setLastYearAverageValue(lastYearAverageValue); return item; } /** * 各科室质控平均分(首页)-根据内外科系统统计 * * @param filterVO * @return */ public List getAverageScoreByDeptClass(FilterVO filterVO) { filterFacade.filterVOSame(filterVO); List retAverageScoreList = Lists.newLinkedList(); List averageScoreList = qcresultInfoFacade.getAverageScoreByDeptClass(filterVO); Integer limitCount = filterVO.getLimitCount(); //质控平均分 if (ListUtil.isNotEmpty(averageScoreList)) { retAverageScoreList = averageStatisticsAggregate.getLimitAverageList(averageScoreList, limitCount); } AverageStatisticsDTO item = getGlobleInOutTitle(retAverageScoreList,filterVO); if (item != null) { retAverageScoreList.add(0, item); } return retAverageScoreList; } /** * 增加内外科记录 * * @param records * @return */ public AverageStatisticsDTO getGlobleInOutTitle(List records,FilterVO filterVO) { DecimalFormat df = new DecimalFormat("#0.00"); AverageStatisticsDTO item = new AverageStatisticsDTO(); if (ListUtil.isEmpty(records)) { return null; } //数量 Integer num = records .stream() .map(AverageStatisticsDTO::getNum) .reduce(0, Integer::sum); //同期数量 Integer sameNum = records .stream() .map(AverageStatisticsDTO::getSameNum) .reduce(0, Integer::sum); Double totleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); Double sameTotleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getSameTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); Double averageValue = 0d; if(0 != num){ averageValue = BigDecimal.valueOf(totleValue) .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP) .doubleValue(); } Double lastYearAverageValue = 0d; if(0 != sameNum) { lastYearAverageValue = BigDecimal.valueOf(sameTotleValue) .divide(BigDecimal.valueOf(sameNum), 2, RoundingMode.HALF_UP) .doubleValue(); } if("内科".equals(filterVO.getDeptClass())){ item.setName("内科系统"); }else{ item.setName("外科系统"); } item.setNum(num); item.setSameNum(sameNum); item.setAverageValue(averageValue); item.setTotleValue(totleValue); item.setSameTotleValue(sameTotleValue); item.setLastYearAverageValue(lastYearAverageValue); return item; } /** * 各科室甲级病历占比 * * @param filterVO * @return */ public Map getLevelResultDept(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List levelResults = mrStatisticsAggregate.getLevelResultDept(filterVO); if (ListUtil.isNotEmpty(levelResults)) { retMap.put("各科室甲级病历占比", levelResults); } return retMap; } /** * 出院人数统计 * * @param filterVO * @return */ public Map leaveHosCount(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); Map leaveHosMap = new HashMap<>(); try { Map invokeParams = new HashMap<>(); invokeParams.put("filterVO", filterVO); leaveHosMap = dataBeanAggregateQueryFacade.get("setAllLeaveHos", invokeParams, Map.class); } catch (Exception e) { throw new CommonException(CommonErrorCode.SERVER_IS_ERROR); } if (leaveHosMap != null) { retMap.put("出院人数统计", leaveHosMap); } return retMap; } /** * 质控病历统计 * * @param filterVO * @return */ public Map mrCount(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List mrCountList = mrStatisticsAggregate.mrCount(filterVO); if (ListUtil.isNotEmpty(mrCountList)) { retMap.put("病历数统计", mrCountList); } return retMap; } /** * 各模块缺陷占比排行 * * @param filterVO * @return */ public Map entryCountGroupByCase(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List caseList = resultStatisticsAggregate.entryCountGroupByCase(filterVO); if (ListUtil.isNotEmpty(caseList)) { retMap.put("各模块缺陷占比排行", caseList); } return retMap; } /** * 条目缺陷占比 * * @param filterVO * @return */ public Map entryCountGroupByEntry(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List entryList = resultStatisticsAggregate.entryCountGroupByEntry(filterVO); if (ListUtil.isNotEmpty(entryList)) { retMap.put("条目缺陷占比", entryList); } return retMap; } /** * 单项否决缺陷占比 * * @param filterVO * @return */ public List entryRejectPercent(FilterVO filterVO) { List retList = Lists.newLinkedList(); filterFacade.filterVOSet(filterVO); Integer limitCount = filterVO.getLimitCount(); List numDTOList = qcresultInfoFacade.entryRejectPercent(filterVO); if (ListUtil.isNotEmpty(numDTOList)) { if (numDTOList.size() <= limitCount) { retList = numDTOList; } else { retList = numDTOList.subList(0, limitCount); } } return retList; } /** * 各科室甲/乙/丙级病历占比 * * @param filterVO * @return */ public List qcResultLevelPercent(FilterVO filterVO) { if (StringUtil.isBlank(filterVO.getLevel())) { throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入病历等级"); } List retList = Lists.newLinkedList(); filterFacade.filterVOSet(filterVO); Integer limitCount = filterVO.getLimitCount(); List numDTOList = qcresultInfoFacade.qcResultLevelPercent(filterVO); if (ListUtil.isNotEmpty(numDTOList)) { if (numDTOList.size() <= limitCount) { retList = numDTOList; } else { retList = numDTOList.subList(0, limitCount); } } return retList; } /** * 各科室缺陷占比 * * @param filterVO * @return */ public Map entryByDept(FilterVO filterVO) { Map retMap = new HashMap<>(); filterFacade.filterVOSet(filterVO); List deptList = resultStatisticsAggregate.entryByDept(filterVO); if (ListUtil.isNotEmpty(deptList)) { retMap.put("各科室缺陷占比", deptList); } return retMap; } //endregion-----------------------单独接口结束------------------------------- //region_______________________分页接口开始------------------------------- /** * 各模块缺陷占比(分页) * * @param filterPageVO * @return */ public IPage entryCountGroupByCasePage(FilterPageVO filterPageVO) { filterFacade.filterPageVOSet(filterPageVO); IPage page = qcresultInfoFacade.entryCountGroupByCasePage(filterPageVO); return page; } /** * 缺陷详情(分页) * * @param filterPageVO * @return */ public IPage entryCountGroupByEntryPage(FilterPageVO filterPageVO) { filterFacade.filterPageVOSet(filterPageVO); if (filterPageVO.getDeptName().equals("全院")) { filterPageVO.setDeptName(""); } IPage page = qcresultInfoFacade.entryCountGroupByEntryPage(filterPageVO); return page; } /** * 按科室统计平均住院天数(分页) * * @param filterPageByAverageVO * @return */ public IPage getAverageDayNumPage(FilterPageByAverageVO filterPageByAverageVO) { filterFacade.filterPageByAverageVOSet(filterPageByAverageVO); IPage page = homePageFacade.getAverageDayNumPage(filterPageByAverageVO); return page; } /** * 按科室统计平均住院费用(分页) * * @param filterPageByAverageVO * @return */ public IPage getAverageFeePage(FilterPageByAverageVO filterPageByAverageVO) { filterFacade.filterPageByAverageVOSet(filterPageByAverageVO); IPage page = homePageFacade.getAverageFeePage(filterPageByAverageVO); return page; } /** * 各科室质控平均分(分页) * * @param filterPageVO * @return */ public IPage getAverageScoreByDeptPage(FilterPageVO filterPageVO) { filterFacade.filterPageVOSet(filterPageVO); IPage page = qcresultInfoFacade.getAverageScoreByDeptPage(filterPageVO); return page; } /** * 各科室缺陷占比排行(分页) * * @param filterPageVO * @return */ public IPage resultStatisticsByDeptPage(FilterPageVO filterPageVO) { filterFacade.filterPageVOSet(filterPageVO); IPage page = behospitalInfoFacade.resultStatisticsByDeptPage(filterPageVO); return page; } /** * 各科室甲级病历占比排行(分页) * * @param filterPageVO * @return */ public IPage levelPercentGroupByDeptPage(FilterPageVO filterPageVO) { filterFacade.filterPageVOSet(filterPageVO); IPage page = qcresultInfoFacade.levelPercentGroupByDeptPage(filterPageVO); return page; } /** * 条目缺陷占比(内页) * * @param filterPageVO * @return */ public IPage entryGroupByEntryInnerPage(FilterPageVO filterPageVO) { filterFacade.filterPageVOSet(filterPageVO); IPage page = qcresultInfoFacade.entryGroupByEntryInnerPage(filterPageVO); return page; } //endregion-----------------------分页接口结束------------------------------- /** * 各科室缺陷占比(组合) * * @param filterOrderVO * @return */ public List levelStatistics(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSame(filterOrderVO); List records = behospitalInfoFacade.levelStatistics(filterOrderVO); //没有科室过滤时增加全院数据 if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) { LevelStatisticsDTO item = getGlobleTitle(records); if (item != null) { records.add(0, item); } } if(ListUtil.isNotEmpty(records)){ for (LevelStatisticsDTO record : records) { BigDecimalMethod(record); } } return records; } /** * 各科室缺陷占比(组合)-导出 * * @param filterOrderVO * @return */ public List levelStatisticsStr(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSame(filterOrderVO); List records = behospitalInfoFacade.levelStatistics(filterOrderVO); //没有科室过滤时增加全院数据 if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) { LevelStatisticsDTO item = getGlobleTitle(records); if (item != null) { records.add(0, item); } } if(ListUtil.isNotEmpty(records)){ for (LevelStatisticsDTO record : records) { BigDecimalStrExport(record); } } return records; } /** * 增加全院记录 * * @param records * @return */ public LevelStatisticsDTO getGlobleTitle(List records) { DecimalFormat df = new DecimalFormat("#0.00"); LevelStatisticsDTO item = new LevelStatisticsDTO(); if (ListUtil.isEmpty(records)) { return null; } //缺陷总数 Integer entryNum = records .stream() .map(LevelStatisticsDTO::getEntryNum) .reduce(0, Integer::sum); if (entryNum == null || entryNum == 0) { return null; } //同比总数 Integer sameNum = records .stream() .map(LevelStatisticsDTO::getSameNum) .reduce(0, Integer::sum); //质控病历数 Integer mrNum = records .stream() .map(LevelStatisticsDTO::getMrNum) .reduce(0, Integer::sum); //同比病历数 Integer sameMrNum = records .stream() .map(LevelStatisticsDTO::getSameMrNum) .reduce(0, Integer::sum); //质控评分 Double totleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); //同比质控评分 Double sameTotleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getSameTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); //质控平均分 Double averageValue = BigDecimal.valueOf(totleValue) .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP) .doubleValue(); Double sameAvgValue = 0d; //同比平均分 if(0d != sameTotleValue){ sameAvgValue = BigDecimal.valueOf(sameTotleValue) .divide(BigDecimal.valueOf(sameMrNum), 2, RoundingMode.HALF_UP) .doubleValue(); } //甲级病历数 Integer firstLevelNum = records .stream() .map(LevelStatisticsDTO::getFirstLevelNum) .reduce(0, Integer::sum); //同比甲级病历数 Integer sameFirstLevelNum = records .stream() .map(LevelStatisticsDTO::getSameFirstLevelNum) .reduce(0, Integer::sum); //乙级病历数 Integer secondLevelNum = records .stream() .map(LevelStatisticsDTO::getSecondLevelNum) .reduce(0, Integer::sum); //同比乙级病历数 Integer sameSecondLevelNum = records .stream() .map(LevelStatisticsDTO::getSameSecondLevelNum) .reduce(0, Integer::sum); //丙级病历数 Integer thirdLevelNum = records .stream() .map(LevelStatisticsDTO::getThirdLevelNum) .reduce(0, Integer::sum); //同比丙级病历数 Integer sameThirdLevelNum = records .stream() .map(LevelStatisticsDTO::getSameThirdLevelNum) .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))) + "%"; //同比甲级病历占比 Double sameFirstLevelPercent = 0d; String sameFirstLevelPercentStr = "0.00%"; if(0 != sameFirstLevelNum ){ sameFirstLevelPercent = BigDecimal.valueOf(sameFirstLevelNum) .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP) .doubleValue(); sameFirstLevelPercentStr = df.format(BigDecimal.valueOf(sameFirstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; } //乙级病历占比 Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum) .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP) .doubleValue(); String secondLevelPercentStr = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; //同比乙级病历占比 Double sameSecondLevelPercent = 0d; String sameSecondLevelPercentStr = "0.00%"; if(0 != sameFirstLevelNum ){ sameSecondLevelPercent = BigDecimal.valueOf(sameSecondLevelNum) .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP) .doubleValue(); sameSecondLevelPercentStr = df.format(BigDecimal.valueOf(sameSecondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; } //丙级病历占比 Double thirdLevelPercent = BigDecimal.valueOf(thirdLevelNum) .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP) .doubleValue(); String thirdLevelPercentStr = df.format(BigDecimal.valueOf(thirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; //同比丙级病历占比 Double sameThirdLevelPercent = 0d; String sameThirdLevelPercentStr = "0.00%"; if(0 != sameFirstLevelNum ) { sameThirdLevelPercent = BigDecimal.valueOf(sameThirdLevelNum) .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP) .doubleValue(); sameThirdLevelPercentStr = df.format(BigDecimal.valueOf(sameThirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; } item.setDeptName("全院"); item.setEntryNum(entryNum); item.setSameNum(sameNum); item.setMrNum(mrNum); item.setSameMrNum(sameMrNum); item.setTotleValue(totleValue); item.setSameTotleValue(sameTotleValue); item.setAverageValue(averageValue); item.setSameAvgValue(sameAvgValue); item.setFirstLevelNum(firstLevelNum); item.setSameFirstLevelNum(sameFirstLevelNum); item.setFirstLevelPercent(firstLevelPercent); item.setSameFirstLevelPercent(sameFirstLevelPercent); item.setFirstLevelPercentStr(firstLevelPercentStr); item.setSameFirstLevelPercentStr(sameFirstLevelPercentStr); item.setSecondLevelNum(secondLevelNum); item.setSameSecondLevelNum(sameSecondLevelNum); item.setSecondLevelPercent(secondLevelPercent); item.setSameSecondLevelPercent(sameSecondLevelPercent); item.setSecondLevelPercentStr(secondLevelPercentStr); item.setSameSecondLevelPercentStr(sameSecondLevelPercentStr); item.setThirdLevelNum(thirdLevelNum); item.setSameThirdLevelNum(sameThirdLevelNum); item.setThirdLevelPercent(thirdLevelPercent); item.setSameThirdLevelPercent(sameThirdLevelPercent); item.setThirdLevelPercentStr(thirdLevelPercentStr); item.setSameThirdLevelPercentStr(sameThirdLevelPercentStr); return item; } /** * 各科室缺陷占比(组合)-全院-根据内外科系统统计(台州)-导出 * * @param filterOrderVO * @return */ public List levelStatisticsByDeptStr_TZ(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSame(filterOrderVO); List records = behospitalInfoFacade.levelStatisticsByDeptClass_TZ(filterOrderVO); if( StringUtil.isBlank(filterOrderVO.getDeptName())){ LevelStatisticsTZDTO item = getGlobleRecords(records,filterOrderVO); if (item != null) { records.add(0, item); } } if(ListUtil.isNotEmpty(records)){ for (LevelStatisticsTZDTO record : records) { BigDecimalStrExport(record); } } return records; } /** * 各科室缺陷占比(组合)-全院-根据内外科系统统计(台州) * * @param filterOrderVO * @return */ public List levelStatisticsByDeptClass_TZ(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSame(filterOrderVO); List records = behospitalInfoFacade.levelStatisticsByDeptClass_TZ(filterOrderVO); if( StringUtil.isBlank(filterOrderVO.getDeptName())){ LevelStatisticsTZDTO item = getGlobleRecords(records,filterOrderVO); if (item != null) { records.add(0, item); } } if(ListUtil.isNotEmpty(records)){ for (LevelStatisticsTZDTO record : records) { BigDecimalMethod(record); } } return records; } /** * 增加全院记录 * * @param records * @return */ public LevelStatisticsTZDTO getGlobleRecords(List records,FilterOrderVO filterOrderVO) { DecimalFormat df = new DecimalFormat("#0.00"); LevelStatisticsTZDTO item = new LevelStatisticsTZDTO(); if (ListUtil.isEmpty(records)) { return null; } //缺陷总数 Integer entryNum = records .stream() .map(LevelStatisticsTZDTO::getEntryNum) .reduce(0, Integer::sum); if (entryNum == null || entryNum == 0) { return null; } //同比总数 Integer sameNum = records .stream() .map(LevelStatisticsTZDTO::getSameNum) .reduce(0, Integer::sum); //质控病历数 Integer mrNum = records .stream() .map(LevelStatisticsTZDTO::getMrNum) .reduce(0, Integer::sum); //同比病历数 Integer sameMrNum = records .stream() .map(LevelStatisticsTZDTO::getSameMrNum) .reduce(0, Integer::sum); //质控评分 Double totleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); //同比质控评分 Double sameTotleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getSameTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); //质控平均分 Double averageValue = BigDecimal.valueOf(totleValue) .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP) .doubleValue(); Double sameAvgValue = 0d; //同比平均分 if(0d != sameTotleValue){ sameAvgValue = BigDecimal.valueOf(sameTotleValue) .divide(BigDecimal.valueOf(sameMrNum), 2, RoundingMode.HALF_UP) .doubleValue(); } //甲级病历数 Integer firstLevelNum = records .stream() .map(LevelStatisticsTZDTO::getFirstLevelNum) .reduce(0, Integer::sum); //同比甲级病历数 Integer sameFirstLevelNum = records .stream() .map(LevelStatisticsTZDTO::getSameFirstLevelNum) .reduce(0, Integer::sum); //乙级病历数 Integer secondLevelNum = records .stream() .map(LevelStatisticsTZDTO::getSecondLevelNum) .reduce(0, Integer::sum); //同比乙级病历数 Integer sameSecondLevelNum = records .stream() .map(LevelStatisticsTZDTO::getSameSecondLevelNum) .reduce(0, Integer::sum); //丙级病历数 Integer thirdLevelNum = records .stream() .map(LevelStatisticsTZDTO::getThirdLevelNum) .reduce(0, Integer::sum); //同比丙级病历数 Integer sameThirdLevelNum = records .stream() .map(LevelStatisticsTZDTO::getSameThirdLevelNum) .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))) + "%"; //同比甲级病历占比 Double sameFirstLevelPercent = 0d; String sameFirstLevelPercentStr = "0.00%"; if(0 != sameFirstLevelNum ){ sameFirstLevelPercent = BigDecimal.valueOf(sameFirstLevelNum) .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP) .doubleValue(); sameFirstLevelPercentStr = df.format(BigDecimal.valueOf(sameFirstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; } //乙级病历占比 Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum) .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP) .doubleValue(); String secondLevelPercentStr = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; //同比乙级病历占比 Double sameSecondLevelPercent = 0d; String sameSecondLevelPercentStr = "0.00%"; if(0 != sameFirstLevelNum ){ sameSecondLevelPercent = BigDecimal.valueOf(sameSecondLevelNum) .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP) .doubleValue(); sameSecondLevelPercentStr = df.format(BigDecimal.valueOf(sameSecondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; } //丙级病历占比 Double thirdLevelPercent = BigDecimal.valueOf(thirdLevelNum) .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP) .doubleValue(); String thirdLevelPercentStr = df.format(BigDecimal.valueOf(thirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; //同比丙级病历占比 Double sameThirdLevelPercent = 0d; String sameThirdLevelPercentStr = "0.00%"; if(0 != sameFirstLevelNum ) { sameThirdLevelPercent = BigDecimal.valueOf(sameThirdLevelNum) .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP) .doubleValue(); sameThirdLevelPercentStr = df.format(BigDecimal.valueOf(sameThirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; } if (StringUtil.isBlank(filterOrderVO.getDeptClass()) || filterOrderVO.getDeptClass().equals("全院")) { item.setDeptName("全院"); }else if("内科".equals(filterOrderVO.getDeptClass())){ item.setDeptClassId("01"); item.setDeptClass("内科"); item.setDeptName("全部科室"); }else if("外科".equals(filterOrderVO.getDeptClass())){ item.setDeptClassId("1030000"); item.setDeptClass("外科"); item.setDeptName("全部科室"); } item.setEntryNum(entryNum); item.setSameNum(sameNum); item.setMrNum(mrNum); item.setSameMrNum(sameMrNum); item.setTotleValue(totleValue); item.setSameTotleValue(sameTotleValue); item.setAverageValue(averageValue); item.setSameAvgValue(sameAvgValue); item.setFirstLevelNum(firstLevelNum); item.setSameFirstLevelNum(sameFirstLevelNum); item.setFirstLevelPercent(firstLevelPercent); item.setSameFirstLevelPercent(sameFirstLevelPercent); item.setFirstLevelPercentStr(firstLevelPercentStr); item.setSameFirstLevelPercentStr(sameFirstLevelPercentStr); item.setSecondLevelNum(secondLevelNum); item.setSameSecondLevelNum(sameSecondLevelNum); item.setSecondLevelPercent(secondLevelPercent); item.setSameSecondLevelPercent(sameSecondLevelPercent); item.setSecondLevelPercentStr(secondLevelPercentStr); item.setSameSecondLevelPercentStr(sameSecondLevelPercentStr); item.setThirdLevelNum(thirdLevelNum); item.setSameThirdLevelNum(sameThirdLevelNum); item.setThirdLevelPercent(thirdLevelPercent); item.setSameThirdLevelPercent(sameThirdLevelPercent); item.setThirdLevelPercentStr(thirdLevelPercentStr); item.setSameThirdLevelPercentStr(sameThirdLevelPercentStr); return item; } public void BigDecimalStrExport(LevelStatisticsDTO record){ BigDecimal entrySameBigDecimal = getSubtract(new BigDecimal(record.getEntryNum()), new BigDecimal(record.getSameNum() == null? 0:record.getSameNum())); if(entrySameBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setEntryStrNum(record.getEntryNum()+"↑"); }else if(entrySameBigDecimal.compareTo(BigDecimal.ZERO) <0){ record.setEntryStrNum(record.getEntryNum()+"↓"); } BigDecimal sameMrNumBigDecimal = getSubtract(new BigDecimal(record.getMrNum()), new BigDecimal(record.getSameMrNum() == null? 0:record.getSameMrNum())); if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setMrStrNum(record.getMrNum()+"↑"); }else if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO) <0){ record.setMrStrNum(record.getMrNum()+"↓"); } BigDecimal sameAvgValueDecimal = getSubtract(new BigDecimal(record.getAverageValue()), new BigDecimal(record.getSameAvgValue() == null? 0:record.getSameAvgValue())); if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO)>0){ record.setAverageStrValue(record.getAverageValue()+"↑"); }else if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO) <0){ record.setAverageStrValue(record.getAverageValue()+"↓"); } BigDecimal SameFirstLevelBigDecimal = getSubtract(new BigDecimal(record.getFirstLevelNum()), new BigDecimal(record.getSameFirstLevelNum() == null? 0:record.getSameFirstLevelNum())); if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setFirstLevelStrNum(record.getFirstLevelNum()+"↑"); }else if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO) <0){ record.setFirstLevelStrNum(record.getFirstLevelNum()+"↓"); } BigDecimal SameSecondLevelBigDecimal = getSubtract(new BigDecimal(record.getSecondLevelNum()), new BigDecimal(record.getSameSecondLevelNum() == null? 0:record.getSameSecondLevelNum())); if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setSecondLevelStrNum(record.getSecondLevelNum()+"↑"); }else if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO) <0){ record.setSecondLevelStrNum(record.getSecondLevelNum()+"↓"); } BigDecimal SameThirdLevelBigDecimal = getSubtract(new BigDecimal(record.getThirdLevelNum()), new BigDecimal(record.getSameThirdLevelNum() == null? 0:record.getSameThirdLevelNum())); if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setThirdLevelStrNum(record.getThirdLevelNum()+"↑"); }else if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO) <0){ record.setThirdLevelStrNum(record.getThirdLevelNum()+"↓"); } BigDecimal SameFirstLevelPeDecimal = getSubtract(new BigDecimal(record.getFirstLevelPercent()), new BigDecimal(record.getSameFirstLevelPercent() == null? 0:record.getSameFirstLevelPercent())); if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){ record.setFirstLevelPercentStr(record.getFirstLevelPercentStr()+"↑"); }else if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO) <0){ record.setFirstLevelPercentStr(record.getFirstLevelPercentStr()+"↓"); } BigDecimal SameSecondLevelPeDecimal = getSubtract(new BigDecimal(record.getSecondLevelPercent()), new BigDecimal(record.getSameSecondLevelPercent() == null? 0:record.getSameSecondLevelPercent())); if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){ record.setSecondLevelPercentStr(record.getSecondLevelPercentStr()+"↑"); }else if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO)<0){ record.setSecondLevelPercentStr(record.getSecondLevelPercentStr()+"↓"); } BigDecimal SameThirdLevelPeDecimal = getSubtract(new BigDecimal(record.getThirdLevelPercent()), new BigDecimal(record.getSameThirdLevelPercent() == null? 0:record.getSameThirdLevelPercent())); if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){ record.setThirdLevelPercentStr(record.getThirdLevelPercentStr()+"↑"); }else if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO) <0){ record.setThirdLevelPercentStr(record.getThirdLevelPercentStr()+"↓"); } }; public void BigDecimalMethod(LevelStatisticsDTO record){ BigDecimal entrySameBigDecimal = getSubtract(new BigDecimal(record.getEntryNum()), new BigDecimal(record.getSameNum() == null? 0:record.getSameNum())); if(entrySameBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setEntrySameNum(1); }else if(entrySameBigDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setEntrySameNum(0); }else{ record.setEntrySameNum(-1); } BigDecimal sameMrNumBigDecimal = getSubtract(new BigDecimal(record.getMrNum()), new BigDecimal(record.getSameMrNum() == null? 0:record.getSameMrNum())); if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setMrSameNum(1); }else if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setMrSameNum(0); }else{ record.setMrSameNum(-1); } BigDecimal sameAvgValueDecimal = getSubtract(new BigDecimal(record.getAverageValue()), new BigDecimal(record.getSameAvgValue() == null? 0:record.getSameAvgValue())); if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO)>0){ record.setAvSameValue(1); }else if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setAvSameValue(0); }else{ record.setAvSameValue(-1); } BigDecimal SameFirstLevelBigDecimal = getSubtract(new BigDecimal(record.getFirstLevelNum()), new BigDecimal(record.getSameFirstLevelNum() == null? 0:record.getSameFirstLevelNum())); if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setFirSameLevelNum(1); }else if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setFirSameLevelNum(0); }else{ record.setFirSameLevelNum(-1); } BigDecimal SameSecondLevelBigDecimal = getSubtract(new BigDecimal(record.getSecondLevelNum()), new BigDecimal(record.getSameSecondLevelNum() == null? 0:record.getSameSecondLevelNum())); if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setSecSameLevelNum(1); }else if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setSecSameLevelNum(0); }else{ record.setSecSameLevelNum(-1); } BigDecimal SameThirdLevelBigDecimal = getSubtract(new BigDecimal(record.getThirdLevelNum()), new BigDecimal(record.getSameThirdLevelNum() == null? 0:record.getSameThirdLevelNum())); if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){ record.setThiSameLevelNum(1); }else if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setThiSameLevelNum(0); }else{ record.setThiSameLevelNum(-1); } BigDecimal SameFirstLevelPeDecimal = getSubtract(new BigDecimal(record.getFirstLevelPercent()), new BigDecimal(record.getSameFirstLevelPercent() == null? 0:record.getSameFirstLevelPercent())); if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){ record.setFirSameLevelPercent(1); }else if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setFirSameLevelPercent(0); }else{ record.setFirSameLevelPercent(-1); } BigDecimal SameSecondLevelPeDecimal = getSubtract(new BigDecimal(record.getSecondLevelPercent()), new BigDecimal(record.getSameSecondLevelPercent() == null? 0:record.getSameSecondLevelPercent())); if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){ record.setSecSameLevelPercent(1); }else if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setSecSameLevelPercent(0); }else{ record.setSecSameLevelPercent(-1); } BigDecimal SameThirdLevelPeDecimal = getSubtract(new BigDecimal(record.getThirdLevelPercent()), new BigDecimal(record.getSameThirdLevelPercent() == null? 0:record.getSameThirdLevelPercent())); if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){ record.setThiSameLevelPercent(1); }else if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO) == 0){ record.setThiSameLevelPercent(0); }else{ record.setThiSameLevelPercent(-1); } }; /** * 差值计算 * * @param bigDecimalOne * @param bigDecimalTwo * @return */ private BigDecimal getSubtract(BigDecimal bigDecimalOne, BigDecimal bigDecimalTwo) { BigDecimal newBigDecimal = new BigDecimal(0); if (null == bigDecimalOne && null != bigDecimalTwo) { newBigDecimal = newBigDecimal.subtract(bigDecimalTwo); } else if (null != bigDecimalOne && null == bigDecimalTwo) { newBigDecimal = bigDecimalOne.subtract(newBigDecimal); } else if (null != bigDecimalOne && null != bigDecimalTwo) { newBigDecimal = bigDecimalOne.subtract(bigDecimalTwo); } return newBigDecimal; } /** * 病案首页合格率占比 * * @param filterOrderVO * @return */ public List homePageLevelStatistics(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSet(filterOrderVO); List records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO); //没有科室过滤时增加全院数据 if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) { HomePageNumDTO item = getGlobleRecord(records); if (item != null) { records.add(0, item); } } return records; } /** * 病案首页合格率占比 * * @param filterOrderVO * @return */ public List homePageLevelLimit(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSet(filterOrderVO); List records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO); HomePageNumDTO item = getGlobleRecord(records); if (item != null) { records.add(0, item); } records = records .stream() .limit(filterOrderVO.getLimitCount()) .collect(Collectors.toList()); return records; } /** * 增加全院记录 * * @param records * @return */ public HomePageNumDTO getGlobleRecord(List records) { DecimalFormat df = new DecimalFormat("#0.00"); HomePageNumDTO item = new HomePageNumDTO(); if (ListUtil.isEmpty(records)) { return null; } //总病历数 Integer mrNum = records .stream() .map(HomePageNumDTO::getMrNum) .reduce(0, Integer::sum); if (mrNum == null || mrNum == 0) { return null; } //总缺陷数 Integer entryNum = records .stream() .map(HomePageNumDTO::getEntryNum) .reduce(0, Integer::sum); //总分 Double totleValue = records .stream() .map(i -> BigDecimal.valueOf(i.getTotleValue())) .reduce(BigDecimal.ZERO, BigDecimal::add) .doubleValue(); //平均分 Double averageValue = BigDecimal.valueOf(totleValue) .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP) .doubleValue(); //合格病历总数 Integer firstLevelNum = records .stream() .map(HomePageNumDTO::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 = records .stream() .map(HomePageNumDTO::getSecondLevelNum) .reduce(0, Integer::sum); //不合格病历占比 Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum) .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP) .doubleValue(); String secondLevelPercentStr = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%"; //条目缺陷总数(模块下条目*病历数) Integer entryTotleNum = records .stream() .map(HomePageNumDTO::getEntryTotleNum) .reduce(0, Integer::sum); //空项总数 Integer emptyNum = records .stream() .map(HomePageNumDTO::getEmptyNum) .reduce(0, Integer::sum); Double emptyPercent = BigDecimal.valueOf(entryTotleNum - emptyNum) .divide(BigDecimal.valueOf(entryTotleNum), 4, RoundingMode.HALF_UP) .doubleValue(); String emptyPercentStr = df.format(BigDecimal.valueOf(emptyPercent).multiply(BigDecimal.valueOf(100))) + "%"; //错误项总数 Integer errorNum = records .stream() .map(HomePageNumDTO::getErrorNum) .reduce(0, Integer::sum); Double errorPercent = BigDecimal.valueOf(entryTotleNum - errorNum) .divide(BigDecimal.valueOf(entryTotleNum), 4, RoundingMode.HALF_UP) .doubleValue(); String errorPercentStr = df.format(BigDecimal.valueOf(errorPercent).multiply(BigDecimal.valueOf(100))) + "%"; item.setDeptName("全院"); item.setEntryNum(entryNum); item.setMrNum(mrNum); item.setTotleValue(totleValue); item.setAverageValue(averageValue); item.setFirstLevelNum(firstLevelNum); item.setFirstLevelPercent(firstLevelPercent); item.setFirstLevelPercentStr(firstLevelPercentStr); item.setSecondLevelNum(secondLevelNum); item.setSecondLevelPercent(secondLevelPercent); item.setSecondLevelPercentStr(secondLevelPercentStr); item.setEntryTotleNum(entryTotleNum); item.setEmptyNum(emptyNum); item.setEmptyPercent(emptyPercent); item.setEmptyPercentStr(emptyPercentStr); item.setErrorNum(errorNum); item.setErrorPercent(errorPercent); item.setErrorPercentStr(errorPercentStr); return item; } /** * 条目缺陷质控评分页(内页) * * @param qcResultShortPageVO * @return */ public IPage qcResultShortPage(QcResultShortPageVO qcResultShortPageVO) { filterFacade.qcResultShortPageVOSet(qcResultShortPageVO); IPage page = behospitalInfoFacade.qcResultShortPage(qcResultShortPageVO); return page; } /** * 关键条目缺陷占比统计 * * @param entryStatisticsVO * @return */ public List entryStatistics(EntryStatisticsVO entryStatisticsVO) { filterFacade.entryStatisticsVOSet(entryStatisticsVO); if (entryStatisticsVO.getDeptName().equals("全院")) { entryStatisticsVO.setDeptName(""); } List records = behospitalInfoFacade.entryStatistics(entryStatisticsVO); //增加全院数据 if (entryStatisticsVO.getDeptName().equals("")) { EntryStatisticsDTO record = getEntryGlobleRecord(records); if (record != null) { records.add(0, record); } } return records; } /** * 关键条目缺陷占比统计增加全院记录 * * @param records * @return */ private EntryStatisticsDTO getEntryGlobleRecord(List records) { DecimalFormat df = new DecimalFormat("#0.00"); if (ListUtil.isEmpty(records)) { return null; } EntryStatisticsDTO record = new EntryStatisticsDTO(); record.setDeptName("全院"); //未在24小时内完成会诊 Integer consultationNum = records .stream() .map(EntryStatisticsDTO::getConsultationNum) .reduce(0, Integer::sum); record.setConsultationNum(consultationNum); record.setConsultationEntryId(records.get(0).getConsultationEntryId()); Integer consultationMRNum = records .stream() .map(EntryStatisticsDTO::getConsultationMRNum) .reduce(0, Integer::sum); record.setConsultationMRNum(consultationMRNum); if (consultationMRNum != null && !consultationMRNum.equals(0)) { Double consultationPercent = BigDecimal.valueOf(consultationNum) .divide(BigDecimal.valueOf(consultationMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String consultationPercentStr = df.format(BigDecimal.valueOf(consultationPercent).multiply(BigDecimal.valueOf(100))) + "%"; record.setConsultationPercent(consultationPercent); record.setConsultationPercentStr(consultationPercentStr); } //手术记录名称不匹配 Integer operationNameNum = records .stream() .map(EntryStatisticsDTO::getOperationNameNum) .reduce(0, Integer::sum); record.setOperationNameNum(operationNameNum); record.setOperationNameEntryId(records.get(0).getOperationNameEntryId()); Integer operationMRNum = records .stream() .map(EntryStatisticsDTO::getOperationMRNum) .reduce(0, Integer::sum); record.setOperationMRNum(operationMRNum); if (operationMRNum != null && !operationMRNum.equals(0)) { Double operationNamePercent = BigDecimal.valueOf(operationNameNum) .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String operationNamePercentStr = df.format(BigDecimal.valueOf(operationNamePercent).multiply(BigDecimal.valueOf(100))) + "%"; record.setOperationNamePercent(operationNamePercent); record.setOperationNamePercentStr(operationNamePercentStr); } //术后首程未在15分钟内完成 Integer operation15MinuteNum = records .stream() .map(EntryStatisticsDTO::getOperation15MinuteNum) .reduce(0, Integer::sum); record.setOperation15MinuteNum(operation15MinuteNum); record.setOperation15MinuteEntryId(records.get(0).getOperation15MinuteEntryId()); if (operationMRNum != null && !operationMRNum.equals(0)) { Double operation15MinutePercent = BigDecimal.valueOf(operation15MinuteNum) .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String operation15MinutePercentStr = df.format(BigDecimal.valueOf(operation15MinutePercent).multiply(BigDecimal.valueOf(100))) + "%"; record.setOperation15MinutePercent(operation15MinutePercent); record.setOperation15MinutePercentStr(operation15MinutePercentStr); } //病案首页手术时间不匹配 Integer operationTimeNum = records .stream() .map(EntryStatisticsDTO::getOperationTimeNum) .reduce(0, Integer::sum); record.setOperationTimeNum(operationTimeNum); record.setOperationTimeEntryId(records.get(0).getOperationTimeEntryId()); if (operationMRNum != null && !operationMRNum.equals(0)) { Double operationTimePercent = BigDecimal.valueOf(operationTimeNum) .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String operationTimePercentStr = df.format(BigDecimal.valueOf(operationTimePercent).multiply(BigDecimal.valueOf(100))) + "%"; record.setOperationTimePercent(operationTimePercent); record.setOperationTimePercentStr(operationTimePercentStr); } //未在6小时内书写危机值记录 Integer crisisNum = records .stream() .map(EntryStatisticsDTO::getCrisisNum) .reduce(0, Integer::sum); record.setCrisisNum(crisisNum); record.setCrisisEntryId(records.get(0).getCrisisEntryId()); Integer crisisMRNum = records .stream() .map(EntryStatisticsDTO::getCrisisMRNum) .reduce(0, Integer::sum); record.setCrisisMRNum(crisisMRNum); if (crisisMRNum != null && !crisisMRNum.equals(0)) { Double crisisPercent = BigDecimal.valueOf(crisisNum) .divide(BigDecimal.valueOf(crisisMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String crisisPercentStr = df.format(BigDecimal.valueOf(crisisPercent).multiply(BigDecimal.valueOf(100))) + "%"; record.setCrisisPercent(crisisPercent); record.setCrisisPercentStr(crisisPercentStr); } //病人住院超过30天,阶段小节书写 Integer stageSummaryNum = records .stream() .map(EntryStatisticsDTO::getStageSummaryNum) .reduce(0, Integer::sum); record.setStageSummaryNum(stageSummaryNum); record.setStageSummaryEntryId(records.get(0).getStageSummaryEntryId()); Integer stageSummaryMRNum = records .stream() .map(EntryStatisticsDTO::getStageSummaryMRNum) .reduce(0, Integer::sum); record.setStageSummaryMRNum(stageSummaryMRNum); if (stageSummaryMRNum != null && !stageSummaryMRNum.equals(0)) { Double stageSummaryPercent = BigDecimal.valueOf(stageSummaryNum) .divide(BigDecimal.valueOf(stageSummaryMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String stageSummaryPercentStr = df.format(BigDecimal.valueOf(stageSummaryPercent).multiply(BigDecimal.valueOf(100))) + "%"; record.setStageSummaryPercent(stageSummaryPercent); record.setStageSummaryPercentStr(stageSummaryPercentStr); } //住院超过31日病人数 Integer beHosGT31DaysMRNum = records .stream() .map(EntryStatisticsDTO::getBeHosGT31DaysMRNum) .reduce(0, Integer::sum); record.setBeHosGT31DaysMRNum(beHosGT31DaysMRNum); return record; } /** * 病案首页合格率、完整率、改善率统计 * * @param filterVO * @return */ public Map homePageMRCount(FilterVO filterVO) { Map retMap = new HashMap<>(); retMap.put("合格率", null); retMap.put("不合格率", null); retMap.put("完整率", null); retMap.put("改善率", null); filterFacade.filterVOSet(filterVO); try { Map invokeParams = new HashMap<>(); invokeParams.put("filterVO", filterVO); retMap = dataBeanAggregateQueryFacade.get("setAllHomePage", invokeParams, Map.class); } catch (Exception e) { throw new CommonException(CommonErrorCode.SERVER_IS_ERROR); } return retMap; } /** * 离院病人质控评分详情页 * * @param qcResultShortPageVO * @return */ public IPage leaveHosMRPage(QcResultShortPageVO qcResultShortPageVO) { filterFacade.qcResultShortPageVOSet(qcResultShortPageVO); IPage page = behospitalInfoFacade.leaveHosMRPage(qcResultShortPageVO); return page; } /** * 质控核查统计(内页) * * @param filterOrderVO * @return */ public List qcCheckStatistics(FilterOrderVO filterOrderVO) { filterFacade.filterOrderVOSet(filterOrderVO); List records = behospitalInfoFacade.qcCheckStatistics(filterOrderVO); //增加全院数据 if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) { HomePageImproveDTO item = getGlobleRecord_improve(records); if (item != null) { records.add(0, item); } } return records; } /** * 增加全院记录 * * @param records * @return */ public HomePageImproveDTO getGlobleRecord_improve(List records) { DecimalFormat df = new DecimalFormat("#0.00"); HomePageImproveDTO item = new HomePageImproveDTO(); if (ListUtil.isEmpty(records)) { return null; } item.setDeptName("全院"); //总病历数 Integer mrNum = records .stream() .map(HomePageImproveDTO::getMrNum) .reduce(0, Integer::sum); if (mrNum == null || mrNum == 0) { return null; } item.setMrNum(mrNum); //核查病历数 Integer checkedNum = records .stream() .map(HomePageImproveDTO::getCheckedNum) .reduce(0, Integer::sum); item.setCheckedNum(checkedNum); if (mrNum != null && !mrNum.equals(0)) { //核查病历占比 Double checkedPercent = BigDecimal.valueOf(checkedNum) .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP) .doubleValue(); String checkedPercentStr = df.format(BigDecimal.valueOf(checkedPercent).multiply(BigDecimal.valueOf(100))) + "%"; item.setCheckedPercent(checkedPercent); item.setCheckedPercentStr(checkedPercentStr); } //带病案首页的病历数 Integer homePageMRNum = records .stream() .map(HomePageImproveDTO::getHomePageMRNum) .reduce(0, Integer::sum); item.setHomePageMRNum(homePageMRNum); if (homePageMRNum == null || homePageMRNum.equals(0)) { return item; } //改善病历数 Integer improveNum = records .stream() .map(HomePageImproveDTO::getImproveNum) .reduce(0, Integer::sum); //改善率 Double improvePercent = BigDecimal.valueOf(improveNum) .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String improvePercentStr = df.format(BigDecimal.valueOf(improvePercent).multiply(BigDecimal.valueOf(100))) + "%"; //改善至合格病历数 Integer improveToPassNum = records .stream() .map(HomePageImproveDTO::getImproveToPassNum) .reduce(0, Integer::sum); //改善至合格占比 Double improveToPassPercent = BigDecimal.valueOf(improveToPassNum) .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String improveToPassPercentStr = df.format(BigDecimal.valueOf(improveToPassPercent).multiply(BigDecimal.valueOf(100))) + "%"; //改善至满分病历数 Integer improveToFullNum = records .stream() .map(HomePageImproveDTO::getImproveToFullNum) .reduce(0, Integer::sum); //改善至满分占比 Double improveToFullPercent = BigDecimal.valueOf(improveToFullNum) .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP) .doubleValue(); String improveToFullPercentStr = df.format(BigDecimal.valueOf(improveToFullPercent).multiply(BigDecimal.valueOf(100))) + "%"; item.setImproveNum(improveNum); item.setImprovePercent(improvePercent); item.setImprovePercentStr(improvePercentStr); item.setImproveToPassNum(improveToPassNum); item.setImproveToPassPercent(improveToPassPercent); item.setImproveToPassPercentStr(improveToPassPercentStr); item.setImproveToFullNum(improveToFullNum); item.setImproveToFullPercent(improveToFullPercent); item.setImproveToFullPercentStr(improveToFullPercentStr); return item; } /** * 未整改病历统计 * * @param filterUnModifyMRVO * @return */ public UnModifyMRDTO unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO) { UnModifyMRDTO unModifyMRDTO = new UnModifyMRDTO(); List retList = Lists.newLinkedList(); filterFacade.filterUnModifyMRVOSet(filterUnModifyMRVO); //colums QueryWrapper hospitalSetQueryWrapper = new QueryWrapper<>(); hospitalSetQueryWrapper.eq("is_deleted", 'N') .eq("hospital_id", filterUnModifyMRVO.getHospitalId()) .eq("code", "unmodify_mr_entry"); SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper); if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) { return unModifyMRDTO; } //表头生成 List columnSet = Arrays.asList(hospitalSet.getValue().split(",")); List columns = Lists.newLinkedList(); Integer orderNo = 1; ColumnDTO columnDeptId = new ColumnDTO(); columnDeptId.setOrderNo(orderNo); columnDeptId.setFieldName("deptId"); columnDeptId.setColumnName("科室编码"); columnDeptId.setIsShow(0); columns.add(columnDeptId); orderNo++; ColumnDTO columnDeptName = new ColumnDTO(); columnDeptName.setOrderNo(orderNo); columnDeptName.setFieldName("deptName"); columnDeptName.setColumnName("科室"); columnDeptName.setIsShow(1); columns.add(columnDeptName); orderNo++; List casesEntryIds = Lists.newArrayList(); for (String valueStr : columnSet) { if (StringUtil.isBlank(valueStr)) { continue; } String[] keyValue = valueStr.split("--"); if (keyValue != null || keyValue.length > 1) { casesEntryIds.add(Long.valueOf(keyValue[0])); ColumnDTO columnId = new ColumnDTO(); columnId.setOrderNo(orderNo); columnId.setId(Long.valueOf(keyValue[0])); columnId.setFieldName("entry_" + keyValue[0] + "_id"); columnId.setColumnName(keyValue[1] + "id"); columnId.setIsShow(0); columns.add(columnId); orderNo++; ColumnDTO columnName = new ColumnDTO(); columnName.setOrderNo(orderNo); columnName.setId(Long.valueOf(keyValue[0])); columnName.setFieldName("entry_" + keyValue[0] + "_name"); columnName.setColumnName(keyValue[1] + "name"); columnName.setIsShow(0); columns.add(columnName); orderNo++; ColumnDTO columnNum = new ColumnDTO(); columnNum.setOrderNo(orderNo); columnNum.setId(Long.valueOf(keyValue[0])); columnNum.setFieldName("entry_" + keyValue[0] + "_num"); columnNum.setColumnName(keyValue[1]); columnNum.setIsShow(1); columns.add(columnNum); orderNo++; } } //条目未维护 if (ListUtil.isEmpty(casesEntryIds)) { return unModifyMRDTO; } //casesEntryIds filterUnModifyMRVO.setCasesEntryIds(casesEntryIds); QueryWrapper qcCasesEntryQueryWrapper = new QueryWrapper<>(); qcCasesEntryQueryWrapper.eq("is_deleted", "N") .in("id", casesEntryIds); List casesEntryList = qcCasesEntryFacade.list(qcCasesEntryQueryWrapper); // 实体类中将实体类转化为map形式,其中条目id对应目标条目名称 Map basCasesEntryMap = EntityUtil.makeMapWithKeyValue(casesEntryList, "id", "name"); List records = behospitalInfoFacade.unModifyMRStatistics(filterUnModifyMRVO); //以科室分组,将符合科室的每条数据以map形式存储 Map> deptMap = EntityUtil.makeEntityListMap(records, "deptName"); //科室对应科室id Map deptInfoMap = EntityUtil.makeMapWithKeyValue(records, "deptName", "deptId"); Map> deptEntryMap = new LinkedHashMap<>(); for (Map.Entry> entry : deptMap.entrySet()) { Map entryMap = EntityUtil.makeEntityMap(entry.getValue(), "casesEntryId"); deptEntryMap.put(entry.getKey(), entryMap); } try { for (Map.Entry> entry : deptEntryMap.entrySet()) { Object obj = new Object(); HashMap addMap = new HashMap(); HashMap addValMap = new HashMap(); addMap.put("deptName", Class.forName("java.lang.String")); addValMap.put("deptName", entry.getKey()); addMap.put("deptId", Class.forName("java.lang.String")); addValMap.put("deptId", deptInfoMap.get(entry.getKey())); for (ColumnDTO item : columns) { if (item.getFieldName().lastIndexOf("_id") > 0) { addMap.put(item.getFieldName(), Class.forName("java.lang.Long")); if (item.getId() != null) { addValMap.put(item.getFieldName(), item.getId()); } else { addValMap.put(item.getFieldName(), null); } } else if (item.getFieldName().lastIndexOf("_name") > 0) { addMap.put(item.getFieldName(), Class.forName("java.lang.String")); if (basCasesEntryMap.containsKey(item.getId())) { addValMap.put(item.getFieldName(), basCasesEntryMap.get(item.getId())); } else { addValMap.put(item.getFieldName(), ""); } } else if (item.getFieldName().lastIndexOf("_num") > 0) { addMap.put(item.getFieldName(), Class.forName("java.lang.Integer")); if (entry.getValue().containsKey(item.getId())) { addValMap.put(item.getFieldName(), entry.getValue().get(item.getId()).getCasesEntryNum()); } else { addValMap.put(item.getFieldName(), 0); } } } obj = new ClassUtil().dynamicClass(obj, addMap, addValMap); retList.add(obj); } } catch (Exception e) { e.printStackTrace(); } //排序 Collections.sort(retList, new Comparator() { @Override public int compare(Object o1, Object o2) { if (StringUtil.isNotBlank(filterUnModifyMRVO.getAsc())) { //升序 Object o1Val = ObjectUtil.getValueByKey(o1, filterUnModifyMRVO.getAsc()); Object o2Val = ObjectUtil.getValueByKey(o2, filterUnModifyMRVO.getAsc()); if (filterUnModifyMRVO.getAsc().lastIndexOf("_num") > 1) { return ((Integer) o1Val).compareTo((Integer) o2Val); } if (filterUnModifyMRVO.getAsc().lastIndexOf("_id") > 1) { return ((Long) o1Val).compareTo((Long) o2Val); } else { return ((String) o1Val).compareTo((String) o2Val); } } else if (StringUtil.isNotBlank(filterUnModifyMRVO.getDesc())) { //降序 Object o1Val = ObjectUtil.getValueByKey(o1, filterUnModifyMRVO.getDesc()); Object o2Val = ObjectUtil.getValueByKey(o2, filterUnModifyMRVO.getDesc()); if (filterUnModifyMRVO.getDesc().lastIndexOf("_num") > 1) { return ((Integer) o2Val).compareTo((Integer) o1Val); } if (filterUnModifyMRVO.getDesc().lastIndexOf("_id") > 1) { return ((Long) o2Val).compareTo((Long) o1Val); } else { return ((String) o2Val).compareTo((String) o1Val); } } else { return 0; } } }); //增加全院数据 if (ListUtil.isNotEmpty(retList) && (StringUtil.isBlank(filterUnModifyMRVO.getDeptName()) || filterUnModifyMRVO.getDeptName().equals("全院"))) { try { Object globleObj = new Object(); HashMap addMap = new HashMap(); HashMap addValMap = new HashMap(); addMap.put("deptId", Class.forName("java.lang.String")); addValMap.put("deptId", ""); addMap.put("deptName", Class.forName("java.lang.String")); addValMap.put("deptName", "全院"); for (ColumnDTO item : columns) { if (item.getFieldName().lastIndexOf("_id") > 0) { addMap.put(item.getFieldName(), Class.forName("java.lang.Long")); if (item.getId() != null) { addValMap.put(item.getFieldName(), item.getId()); } else { addValMap.put(item.getFieldName(), null); } } else if (item.getFieldName().lastIndexOf("_name") > 0) { addMap.put(item.getFieldName(), Class.forName("java.lang.String")); if (basCasesEntryMap.containsKey(item.getId())) { addValMap.put(item.getFieldName(), basCasesEntryMap.get(item.getId())); } else { addValMap.put(item.getFieldName(), ""); } } else if (item.getFieldName().lastIndexOf("_num") > 0) { addMap.put(item.getFieldName(), Class.forName("java.lang.Integer")); Integer entryNum = retList .stream() .map(i -> ObjectUtil.getValueByKey(i, item.getFieldName())) .filter(i -> i != null) .map(i -> (Integer) i) .reduce(0, Integer::sum); addValMap.put(item.getFieldName(), entryNum); } } globleObj = new ClassUtil().dynamicClass(globleObj, addMap, addValMap); retList.add(0, globleObj); } catch (Exception e) { e.printStackTrace(); } } unModifyMRDTO.setColumns(columns); unModifyMRDTO.setData(retList); return unModifyMRDTO; } /** * 未整改病历质控评分页(内页) * * @param qcResultShortPageVO * @return */ public IPage unModifyMRPage(QcResultShortPageVO qcResultShortPageVO) { filterFacade.qcResultShortPageVOSet(qcResultShortPageVO); return behospitalInfoFacade.unModifyMRPage(qcResultShortPageVO); } /** * 不合格/合格数病历号(内页) * * @param qcResultPageVO * @return */ public IPage badLevelPage(QcResultPageVO qcResultPageVO) { filterFacade.badLevelPageVOSet(qcResultPageVO); return behospitalInfoFacade.badLevelPage(qcResultPageVO); } /** * 31天再入院详情页 * * @param reBeHosPageVO * @return */ public IPage reHos31DaysPage(ReBeHosPageVO reBeHosPageVO) { filterFacade.reBeHosPageVOSet(reBeHosPageVO); IPage page = behospitalInfoFacade.reHos31DaysPage(reBeHosPageVO); List records = page.getRecords(); IPage retPage = new Page<>(); BeanUtil.copyProperties(page, retPage); List retRecords = Lists.newLinkedList(); if (ListUtil.isNotEmpty(records)) { for (ReBeHosMergeDTO record : records) { ReBeHosDTO retRecord = new ReBeHosDTO(); BeanUtil.copyProperties(record, retRecord); List details = Lists.newLinkedList(); ReBeHosDetailDTO detailRecord = new ReBeHosDetailDTO(); BeanUtil.copyProperties(record, detailRecord); details.add(detailRecord); ReBeHosDetailDTO lastDetailRecord = new ReBeHosDetailDTO(); lastDetailRecord.setName(record.getName()); lastDetailRecord.setBehDeptId(record.getLastBehDeptId()); lastDetailRecord.setBehDeptName(record.getBehDeptName()); lastDetailRecord.setBehospitalCode(record.getLastBehospitalCode()); lastDetailRecord.setBehospitalDate(record.getLastBehospitalDate()); lastDetailRecord.setLeaveHospitalDate(record.getLastLeaveHospitalDate()); lastDetailRecord.setLevel(record.getLastLevel()); lastDetailRecord.setScoreRes(record.getLastScoreRes()); lastDetailRecord.setBehospitalDayNum(record.getLastBehospitalDayNum()); lastDetailRecord.setTotleFee(record.getLastTotleFee()); details.add(lastDetailRecord); retRecord.setDetails(details); retRecords.add(retRecord); } } retPage.setRecords(retRecords); return retPage; } /** * 入院人数统计(首页) * * @param filterVO * @return */ public List beHosCount(FilterVO filterVO) { filterFacade.filterVOSet(filterVO); List records = behospitalInfoFacade.beHosCount(filterVO); if (ListUtil.isNotEmpty(records)) { NumDTO globleRecord = new NumDTO(); globleRecord.setName("全院"); Integer num = records.stream() .map(NumDTO::getNum) .reduce(0, Integer::sum); globleRecord.setNum(num); records.add(0, globleRecord); } if (ListUtil.isNotEmpty(records) && records.size() > filterVO.getLimitCount()) { records = records.subList(0, 10); } return records; } /** * 单条条目缺陷统计(首页) * * @param filterVO * @return */ public List casesEntryStatisticsById(FilterVO filterVO) { filterFacade.filterVOSet(filterVO); List records = behospitalInfoFacade.casesEntryStatisticsById(filterVO); if (ListUtil.isNotEmpty(records)) { NumDTO globleRecord = new NumDTO(); globleRecord.setName("全院"); Integer num = records.stream() .map(NumDTO::getNum) .reduce(0, Integer::sum); globleRecord.setNum(num); records.add(0, globleRecord); } if (ListUtil.isNotEmpty(records) && records.size() > filterVO.getLimitCount()) { records = records.subList(0, 10); } return records; } /** * 病案首页改善率质控评分页(内页) * * @param qcResultShortPageVO * @return */ public IPage hmImproveMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO) { filterFacade.qcResultShortPageVOSet(qcResultShortPageVO); return behospitalInfoFacade.hmImproveMRPage(qcResultShortPageVO); } /** * 质控核查质控评分页(内页) * * @param qcResultShortPageVO * @return */ public IPage qcCheckMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO) { filterFacade.qcResultShortPageVOSet(qcResultShortPageVO); return behospitalInfoFacade.qcCheckMRPage(qcResultShortPageVO); } /* */ /** * 病历稽查表导出(首页) * * @param filterVO * @return */ public List medicalCheckExport(@Param("filterVO") FilterMedicalCheckVO filterVO) { filterFacade.getMedicalCheckVOSet(filterVO); List medicalCheck = behospitalInfoFacade.getMedicalCheckExport(filterVO); return medicalCheck; } /** * 病历稽查表(首页) * * @param filterVO * @return */ public IPage getMedicalCheck(@Param("filterVO") FilterMedicalCheckVO filterVO) { filterFacade.getMedicalCheckVOSet(filterVO); //colums QueryWrapper hospitalSetQueryWrapper = new QueryWrapper<>(); hospitalSetQueryWrapper.eq("is_deleted", 'N') .eq("hospital_id", filterVO.getHospitalId()) .eq("code", "medical_check_form"); SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper); //表头生成 List columnSet = Arrays.asList(hospitalSet.getValue().split(",")); //目标条目 List casesEntryIds = Lists.newArrayList(); //遍历第一个条目 for (String valueStr : columnSet) { if (StringUtil.isBlank(valueStr)) { continue; } String[] keyValue = valueStr.split("--"); if (keyValue != null || keyValue.length > 1) { casesEntryIds.add(Long.valueOf(keyValue[0])); } } IPage medicalCheck = behospitalInfoFacade.getMedicalCheck(filterVO,casesEntryIds); return medicalCheck; } /** * 病历稽查表(title) * * @param * @return */ public List getMedicalCheckTitle() { //病历稽查入参拼接 String hospitalId = SysUserUtils.getCurrentHospitalID(); //colums QueryWrapper hospitalSetQueryWrapper = new QueryWrapper<>(); hospitalSetQueryWrapper.eq("is_deleted", 'N') .eq("hospital_id", hospitalId) .eq("code", "medical_check_form"); List columns = Lists.newLinkedList(); SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper); if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) { return columns; } //表头生成 List columnSet = Arrays.asList(hospitalSet.getValue().split(",")); Integer orderNo = 1; ColumnDTO columnDeptId = new ColumnDTO(); columnDeptId.setOrderNo(orderNo); columnDeptId.setFieldName("deptId"); columnDeptId.setColumnName("科室编码"); columnDeptId.setIsShow(0); columns.add(columnDeptId); orderNo++; ColumnDTO columnDeptName = new ColumnDTO(); columnDeptName.setOrderNo(orderNo); columnDeptName.setFieldName("deptName"); columnDeptName.setColumnName("科室"); columnDeptName.setIsShow(1); columns.add(columnDeptName); orderNo++; ColumnDTO columnMedicalName = new ColumnDTO(); columnMedicalName.setOrderNo(orderNo); columnMedicalName.setFieldName("doctorName"); columnMedicalName.setColumnName("医疗组"); columnMedicalName.setIsShow(1); columns.add(columnMedicalName); orderNo++; for (String valueStr : columnSet) { String[] keyValue = valueStr.split("--"); if (keyValue != null || keyValue.length > 1) { ColumnDTO columnNum = new ColumnDTO(); columnNum.setOrderNo(orderNo); columnNum.setId(Long.valueOf(keyValue[0])); columnNum.setFieldName("entry_" + keyValue[0] + "_name"); columnNum.setColumnName(keyValue[1]); columnNum.setIsShow(1); columns.add(columnNum); orderNo++; } } return columns; } }