From 64d1d42a16867ec0b55bc0810c468c0aa4e02128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B5=B7=E8=88=AA?= <11918452+yang-haihang@user.noreply.gitee.com> Date: Mon, 21 Apr 2025 15:48:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E6=94=AF=E6=8C=81=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E5=AF=BC=E5=87=BA=E5=A4=9A=E7=A7=8D=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=A3=80=E6=9D=90=E6=A3=80=E5=87=BA?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entrustment/dto/ResultExcelDTO.java | 3 +- ...rustMaterialCheckoutResultServiceImpl.java | 200 ++++++++++-------- .../service/impl/EntrustmentServiceImpl.java | 1 - 3 files changed, 110 insertions(+), 94 deletions(-) diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/ResultExcelDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/ResultExcelDTO.java index 4fd74aa..02c13ab 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/dto/ResultExcelDTO.java +++ b/src/main/java/digital/laboratory/platform/entrustment/dto/ResultExcelDTO.java @@ -3,11 +3,12 @@ package digital.laboratory.platform.entrustment.dto; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class ResultExcelDTO { Integer entrustType; - String oldResult; + List oldResult; LocalDateTime startTime; LocalDateTime endTime; } diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java index be15ac8..225e2ff 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.beust.ah.A; import digital.laboratory.platform.common.core.exception.CheckedException; import digital.laboratory.platform.common.core.util.R; import digital.laboratory.platform.entrustment.convert.DrugLiteConvert; @@ -527,7 +528,7 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl oldResults = excelDTO.getOldResult(); Integer entrustType = excelDTO.getEntrustType(); // 创建查询条件包装器 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -539,20 +540,26 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl allResults = new ArrayList<>(); + for (String oldResult : oldResults) { + if (StringUtils.isNotBlank(oldResult)) { + if ("委托".equals(oldResult)) { + allResults.add("首次鉴定"); + allResults.add("补充鉴定"); + allResults.add("重新鉴定"); + } else { + allResults.add(oldResult); + } } } + if (!allResults.isEmpty()) { + wrapper.in(Entrustment::getOldIdentificationResult, allResults); + } + // 查询符合条件的 Entrustment 列表,避免重复查询数据库 List entrustmentList = entrustmentService.list( wrapper.eq(entrustType != null, Entrustment::getEntrustmentType, entrustType) - ); System.out.println("委托的数量:" + entrustmentList.size()); @@ -592,7 +599,7 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl resultMap = resultList.stream() .collect(Collectors.toMap(EntrustMaterialCheckoutResult::getId, Function.identity())); @@ -630,7 +637,7 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl oldResults = excelDTO.getOldResult(); Integer entrustType = excelDTO.getEntrustType(); try { // 1. 构建查询条件 @@ -643,14 +650,23 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl allResults = new ArrayList<>(); + for (String oldResult : oldResults) { + if (StringUtils.isNotBlank(oldResult)) { + if ("委托".equals(oldResult)) { + allResults.add("首次鉴定"); + allResults.add("补充鉴定"); + allResults.add("重新鉴定"); + } else { + allResults.add(oldResult); + } } } + + if (!allResults.isEmpty()) { + qw.in(Entrustment::getOldIdentificationResult, allResults); + } + // 2. 查询委托数据 List entrusts = entrustmentService.list(qw .eq(Entrustment::getEntrustmentType, entrustType) @@ -772,8 +788,8 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl oldResults = excelDTO.getOldResult(); if (resultData.isEmpty() || resultDataMap.isEmpty()) { return R.failed("没有符合条件的数据!"); @@ -781,17 +797,17 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl resultData) { + private void createDataSheet(Workbook workbook, Integer entrustType, List resultData) { // 确定表名 - String sheetName = (entrustType == 0) ? "常规毒品" : (StringUtils.isNotBlank(oldResult) ? "生物样本-" + oldResult : "生物样本"); + String sheetName = (entrustType == 0) ? "常规毒品" : "生物样本"; Sheet sheet = workbook.createSheet(sheetName); // 定义表头 @@ -824,10 +840,10 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl> resultDataMap, Integer entrustType, String oldResult, LocalDateTime startTime, LocalDateTime endTime) { + private void createStatisticsSheet(Workbook workbook, Map> resultDataMap, List oldResults, Integer entrustType, LocalDateTime startTime, LocalDateTime endTime) { Sheet sheet = workbook.createSheet("统计"); - String[] headers = {"化合物种类", "类型", "检出数量", "总数量", "检出率"}; + String[] headers = {"化合物种类", "检出数量", "总数量", "检出率"}; // 创建表头 Row headerRow = sheet.createRow(0); @@ -837,7 +853,7 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl sizeMap = this.getSizeMap(entrustType, oldResult, startTime, endTime); + Integer size = this.getSizeMap(entrustType, oldResults, startTime, endTime); // 填充统计数据 int rowIndex = 1; @@ -845,23 +861,10 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl materials = entry.getValue(); Row row = sheet.createRow(rowIndex++); - if (StringUtils.isNotBlank(oldResult)) { - - row.createCell(0).setCellValue(drugName); - row.createCell(1).setCellValue(oldResult); - row.createCell(2).setCellValue(materials.size()); - row.createCell(3).setCellValue(sizeMap.getOrDefault(oldResult, 0)); - row.createCell(4).setCellValue(String.format("%.2f%%", materials.size() * 100.0 / sizeMap.getOrDefault(oldResult, 1))); - } else { - Map> groupedData = materials.stream().collect(Collectors.groupingBy(EntrustmentIdentificationMaterialVO::getOldIdentificationResult)); - for (Map.Entry> group : groupedData.entrySet()) { - row.createCell(0).setCellValue(drugName); - row.createCell(1).setCellValue(group.getKey()); - row.createCell(2).setCellValue(group.getValue().size()); - row.createCell(3).setCellValue(sizeMap.getOrDefault(group.getKey(), 0)); - row.createCell(4).setCellValue(String.format("%.2f%%", group.getValue().size() * 100.0 / sizeMap.getOrDefault(group.getKey(), 1))); - } - } + row.createCell(0).setCellValue(drugName); + row.createCell(1).setCellValue(materials.size()); + row.createCell(2).setCellValue(size); + row.createCell(3).setCellValue(String.format("%.2f%%", materials.size() * 100.0 / size)); } } @@ -927,15 +930,11 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl getSizeMap(Integer entrustType, String oldResult, LocalDateTime startTime, LocalDateTime endTime) { + public Integer getSizeMap(Integer entrustType, List oldResults, LocalDateTime startTime, LocalDateTime endTime) { // 构造查询条件,查询 EntrustmentIdentificationMaterial 数据 - LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + LocalDateTime queryStartTime = Optional.ofNullable(startTime).orElseGet(() -> this.getStartTime(null)); - if (endTime != null) { - qw.between(EntrustmentIdentificationMaterial::getAcceptTime, queryStartTime, endTime); - } else { - qw.ge(EntrustmentIdentificationMaterial::getAcceptTime, queryStartTime); - } + // 统计各类委托的数量 int entrustSize = 0; @@ -951,55 +950,72 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl results = new ArrayList<>(); + for (String oldResult : oldResults) { + if (oldResult.equals("委托")) { + results.add("首次鉴定"); + results.add("补充鉴定"); + results.add("重新鉴定"); + } else results.add(oldResult); + } + // 查询符合条件的 Entrustment 记录 List entrusts = entrustmentService.list(wrapper .eq(Entrustment::getEntrustmentType, entrustType) - .eq(Entrustment::getStatus, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()) + .ge(Entrustment::getStatus, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()) + .in(Entrustment::getOldIdentificationResult, results) ); - // 按照 oldIdentificationResult 进行分组 - Map> entrustMap = entrusts.stream() - .collect(Collectors.groupingBy(Entrustment::getOldIdentificationResult)); - - // 遍历分组数据,计算各类 EntrustmentIdentificationMaterial 的数量 - for (Map.Entry> entry : entrustMap.entrySet()) { - String oldIdentificationResult = entry.getKey(); - List entrustList = entry.getValue(); - - // 获取 Entrustment ID 列表 - List entIdList = entrustList.stream() - .map(Entrustment::getId) - .collect(Collectors.toList()); - - // 查询与这些 Entrustment 关联的 EntrustmentIdentificationMaterial 数量 - int size = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery() - .in(EntrustmentIdentificationMaterial::getEntrustmentId, entIdList)).size(); - - // 根据 oldIdentificationResult 分类累加数量 - switch (oldIdentificationResult) { - case "初筛": - preliminaryScreeningSize += size; - break; - case "涉缅人员": - myanmarRelatedSize += size; - break; - case "自愿戒治人员": - voluntaryRehabilitationSize += size; - break; - default: - entrustSize += size; - break; - } - } - - // 组装返回结果 - Map sizeMap = new HashMap<>(); - sizeMap.put("委托", entrustSize); - sizeMap.put("初筛", preliminaryScreeningSize); - sizeMap.put("涉缅人员", myanmarRelatedSize); - sizeMap.put("自愿戒治人员", voluntaryRehabilitationSize); + List entrustIds = entrusts.stream().map(Entrustment::getId).collect(Collectors.toList()); - return sizeMap; + return entrustmentIdentificationMaterialService.lambdaQuery() + .in(EntrustmentIdentificationMaterial::getEntrustmentId, entrustIds) + .list() + .size(); +// +// // 按照 oldIdentificationResult 进行分组 +// Map> entrustMap = entrusts.stream() +// .collect(Collectors.groupingBy(Entrustment::getOldIdentificationResult)); +// +// // 遍历分组数据,计算各类 EntrustmentIdentificationMaterial 的数量 +// for (Map.Entry> entry : entrustMap.entrySet()) { +// String oldIdentificationResult = entry.getKey(); +// List entrustList = entry.getValue(); +// +// // 获取 Entrustment ID 列表 +// List entIdList = entrustList.stream() +// .map(Entrustment::getId) +// .collect(Collectors.toList()); +// +// // 查询与这些 Entrustment 关联的 EntrustmentIdentificationMaterial 数量 +// int size = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery() +// .in(EntrustmentIdentificationMaterial::getEntrustmentId, entIdList)).size(); +// +// // 根据 oldIdentificationResult 分类累加数量 +// switch (oldIdentificationResult) { +// case "初筛": +// preliminaryScreeningSize += size; +// break; +// case "涉缅人员": +// myanmarRelatedSize += size; +// break; +// case "自愿戒治人员": +// voluntaryRehabilitationSize += size; +// break; +// default: +// entrustSize += size; +// break; +// } +// } +// +// // 组装返回结果 +// Map sizeMap = new HashMap<>(); +// sizeMap.put("委托", entrustSize); +// sizeMap.put("初筛", preliminaryScreeningSize); +// sizeMap.put("涉缅人员", myanmarRelatedSize); +// sizeMap.put("自愿戒治人员", voluntaryRehabilitationSize); + +// return entrusts.size(); } } diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java index 55dae86..c3f7c97 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java @@ -3594,7 +3594,6 @@ public class EntrustmentServiceImpl extends ServiceImpl