From 4922e5fb02c3a095791a6f6e65c70883054fa3d9 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 28 三月 2025 16:45:22 +0800 Subject: [PATCH] bug修改 --- medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 223 insertions(+), 6 deletions(-) diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java index 9b75a92..99967a7 100644 --- a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java +++ b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java @@ -25,6 +25,7 @@ import com.sinata.system.service.MwCollectRecordService; import com.sinata.system.service.MwDisposalHandleRecordService; import com.sinata.system.service.MwDisposalRecordService; +import com.sinata.system.service.MwMicroEquipmentRecordItemService; import com.sinata.system.service.MwWarningRecordService; import com.sinata.system.service.SysDepartmentService; import com.sinata.system.utils.ImageToBase64; @@ -59,6 +60,7 @@ private final HttpServletResponse response; private final MwDisposalRecordService mwDisposalRecordService; private final MwDisposalHandleRecordService mwDisposalHandleRecordService; + private final MwMicroEquipmentRecordItemService mwMicroEquipmentRecordItemService; @@ -141,6 +143,60 @@ } } list.add(itemVO); + } + // 添加合计行 + if (!list.isEmpty()) { + DepartmentReportItemVO totalRow = new DepartmentReportItemVO(); + totalRow.setName("合计"); + totalRow.setData(new ArrayList<>()); + + // 计算各类型废物的数量和重量总计 + for (SysDictDataVO sysDictDataVO : wasteTypeList) { + BigDecimal totalTypeCount = BigDecimal.ZERO; + BigDecimal totalTypeWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + // 每种废物类型占用两列(数量和重量) + int index = wasteTypeList.indexOf(sysDictDataVO); + int countIndex = index * 2; + int weightIndex = countIndex + 1; + + if (countIndex < item.getData().size()) { + totalTypeCount = totalTypeCount.add(item.getData().get(countIndex)); + } + if (weightIndex < item.getData().size()) { + totalTypeWeight = totalTypeWeight.add(item.getData().get(weightIndex)); + } + } + + totalRow.getData().add(totalTypeCount); + totalRow.getData().add(totalTypeWeight); + } + + // 计算总的数量和重量 + BigDecimal finalTotalCount = BigDecimal.ZERO; + BigDecimal finalTotalWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int totalCountIndex = item.getData().size() - 2; + int totalWeightIndex = item.getData().size() - 1; + + if (totalCountIndex >= 0 && totalWeightIndex >= 0) { + finalTotalCount = finalTotalCount.add(item.getData().get(totalCountIndex)); + finalTotalWeight = finalTotalWeight.add(item.getData().get(totalWeightIndex)); + } + } + + totalRow.getData().add(finalTotalCount); + totalRow.getData().add(finalTotalWeight); + + // 超时标记处理(如果有) + if (query.getDateType().equals(1)) { + totalRow.setOverTimeFlag("—"); // 合计行不显示超时标记 + } + + // 将合计行添加到列表开头 + list.add(0, totalRow); } vo.setList(list); return vo; @@ -228,11 +284,15 @@ //List<SysDepartment> hospitalList = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, region.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list(); List<TransformVO> checkoutRecordVOList = mwCheckoutRecordService.getCheckoutRecordList(query, region.getTreeCode()); //查询医废类型 - List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).orderByDesc(SysDictData::getDictCode).list(); + List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()) + .orderByDesc(SysDictData::getDictCode).list(); if (CollUtils.isNotEmpty(wasteTypeList)) { vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList())); vo.getLegend().add("小计"); + List<DepartmentReportItemVO> list = new ArrayList<>(); + + // 处理各医院数据 for (TransformVO transformVO : checkoutRecordVOList) { BigDecimal totalCount = BigDecimal.ZERO; BigDecimal totalWeight = BigDecimal.ZERO; @@ -254,6 +314,58 @@ departmentReportItemVO.getData().add(totalWeight); list.add(departmentReportItemVO); } + + // 添加合计行 + if (!list.isEmpty()) { + DepartmentReportItemVO totalRow = new DepartmentReportItemVO(); + totalRow.setName("合计"); + totalRow.setData(new ArrayList<>()); + + // 计算各类型废物的总数量和总重量 + for (SysDictData sysDictData : wasteTypeList) { + BigDecimal totalTypeCount = BigDecimal.ZERO; + BigDecimal totalTypeWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + // 获取当前废物类型在数据列表中的索引位置 + int index = wasteTypeList.indexOf(sysDictData); + // 每个废物类型占两列(数量和重量) + int countIndex = index * 2; + int weightIndex = countIndex + 1; + + if (countIndex < item.getData().size()) { + totalTypeCount = totalTypeCount.add(item.getData().get(countIndex)); + } + if (weightIndex < item.getData().size()) { + totalTypeWeight = totalTypeWeight.add(item.getData().get(weightIndex)); + } + } + + totalRow.getData().add(totalTypeCount); + totalRow.getData().add(totalTypeWeight); + } + + // 计算总的数量和重量 + BigDecimal finalTotalCount = BigDecimal.ZERO; + BigDecimal finalTotalWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int totalCountIndex = item.getData().size() - 2; + int totalWeightIndex = item.getData().size() - 1; + + if (totalCountIndex >= 0 && totalWeightIndex >= 0) { + finalTotalCount = finalTotalCount.add(item.getData().get(totalCountIndex)); + finalTotalWeight = finalTotalWeight.add(item.getData().get(totalWeightIndex)); + } + } + + totalRow.getData().add(finalTotalCount); + totalRow.getData().add(finalTotalWeight); + + // 将合计行添加到列表开头 + list.add(0, totalRow); + } + vo.setList(list); } return vo; @@ -311,7 +423,8 @@ */ private List<List<String>> transformReportHead(List<Long> wasteTypeCodeList) { //查询医废类型 - List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList).list(); + List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList) + .orderByDesc(SysDictData::getDictCode).list(); List<List<String>> headTitles = Lists.newArrayList(); headTitles.add(Lists.newArrayList("医院名称", "医院名称")); wasteTypeList.forEach(item -> { @@ -356,7 +469,8 @@ } List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType()); //查询医废类型 - List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).list(); + List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()) + .orderByDesc(SysDictData::getDictCode).list(); if (CollUtils.isNotEmpty(wasteTypeList)) { List<String> legend = wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()); vo.setLegend(legend); @@ -382,6 +496,47 @@ } list.add(departmentReportItemVO); } + + // 添加合计行 + if (!list.isEmpty()) { + DepartmentReportItemVO totalRow = new DepartmentReportItemVO(); + totalRow.setName("合计"); + totalRow.setData(new ArrayList<>()); + + // 计算各类型废物的接收总量 + for (SysDictData sysDictData : wasteTypeList) { + BigDecimal totalReceiveWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int index = wasteTypeList.indexOf(sysDictData); + if (index < item.getData().size()) { + totalReceiveWeight = totalReceiveWeight.add(item.getData().get(index)); + } + } + + totalRow.getData().add(totalReceiveWeight); + } + + // 计算各类型废物的处置总量 + for (SysDictData sysDictData : wasteTypeList) { + BigDecimal totalDisposalWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int index = wasteTypeList.indexOf(sysDictData); + // 处置量数据在接收量数据之后,所以索引需要加上wasteTypeList的大小 + int disposalIndex = wasteTypeList.size() + index; + if (disposalIndex < item.getData().size()) { + totalDisposalWeight = totalDisposalWeight.add(item.getData().get(disposalIndex)); + } + } + + totalRow.getData().add(totalDisposalWeight); + } + + // 将合计行添加到列表开头 + list.add(0, totalRow); + } + vo.setList(list); } return vo; @@ -441,7 +596,8 @@ */ private List<List<String>> disposalReportHead(List<Long> wasteTypeCodeList) { //查询医废类型 - List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList).list(); + List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList) + .orderByDesc(SysDictData::getDictCode).list(); List<List<String>> headTitles = Lists.newArrayList(); headTitles.add(Lists.newArrayList("日期")); wasteTypeList.forEach(item -> { @@ -471,6 +627,8 @@ List<MwCollectRecordVO> checkoutRecordList = mwCheckoutRecordService.getRegulationReportList(query); //医废处置量 List<MwCollectRecordVO> disposalRecordList = mwDisposalRecordService.getRegulationReportList(query); + List<MwCollectRecordVO> microEquipmentRecordList = mwMicroEquipmentRecordItemService.getRegulationReportList(query); + disposalRecordList.addAll(microEquipmentRecordList); SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS); switch (query.getDateType()) { case 1: @@ -485,7 +643,8 @@ } List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType()); //查询医废类型 - List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()).list(); + List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList()) + .orderByDesc(SysDictData::getDictCode).list(); if (CollUtils.isNotEmpty(wasteTypeList)) { vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList())); vo.setList(new ArrayList<>()); @@ -513,6 +672,63 @@ } list.add(departmentReportItemVO); } + + // 添加合计行 + if (!list.isEmpty()) { + DepartmentReportItemVO totalRow = new DepartmentReportItemVO(); + totalRow.setName("合计"); + totalRow.setData(new ArrayList<>()); + + // 计算各类型废物的产生总量 + for (SysDictData sysDictData : wasteTypeList) { + BigDecimal totalGeneratedWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int index = wasteTypeList.indexOf(sysDictData); + if (index < item.getData().size()) { + totalGeneratedWeight = totalGeneratedWeight.add(item.getData().get(index)); + } + } + + totalRow.getData().add(totalGeneratedWeight); + } + + // 计算各类型废物的转移总量 + for (SysDictData sysDictData : wasteTypeList) { + BigDecimal totalTransferWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int index = wasteTypeList.indexOf(sysDictData); + // 转移量数据在产生量数据之后,所以索引需要加上wasteTypeList的大小 + int transferIndex = wasteTypeList.size() + index; + if (transferIndex < item.getData().size()) { + totalTransferWeight = totalTransferWeight.add(item.getData().get(transferIndex)); + } + } + + totalRow.getData().add(totalTransferWeight); + } + + // 计算各类型废物的处置总量 + for (SysDictData sysDictData : wasteTypeList) { + BigDecimal totalDisposalWeight = BigDecimal.ZERO; + + for (DepartmentReportItemVO item : list) { + int index = wasteTypeList.indexOf(sysDictData); + // 处置量数据在产生量和转移量数据之后,所以索引需要加上wasteTypeList的大小的2倍 + int disposalIndex = wasteTypeList.size() * 2 + index; + if (disposalIndex < item.getData().size()) { + totalDisposalWeight = totalDisposalWeight.add(item.getData().get(disposalIndex)); + } + } + + totalRow.getData().add(totalDisposalWeight); + } + + // 将合计行添加到列表开头 + list.add(0, totalRow); + } + vo.setList(list); } return vo; @@ -566,7 +782,8 @@ */ private List<List<String>> regulationReportHead(List<Long> wasteTypeCodeList) { //查询医废类型 - List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList).list(); + List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList) + .orderByDesc(SysDictData::getDictCode).list(); List<List<String>> headTitles = Lists.newArrayList(); headTitles.add(Lists.newArrayList("日期")); wasteTypeList.forEach(item -> { -- Gitblit v1.7.1