From 8502fa3b35ee337ed06f752401d1d216675177b5 Mon Sep 17 00:00:00 2001 From: chen <2710907404@qq.com> Date: Thu, 9 Oct 2025 15:08:00 +0800 Subject: [PATCH 1/5] =?UTF-8?q?202501009=20=E6=9B=B4=E6=96=B0=201.?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=AF=E5=AF=BC=E5=87=BA=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E8=87=B3=E7=A6=81=E6=AF=92=E5=A4=A7=E6=95=B0=E6=8D=AE=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...trustMaterialCheckoutResultController.java | 6 - .../controller/EntrustmentController.java | 2 - .../controller/ExcelOperationController.java | 3 - .../PushDataToLabsCareController.java | 1 - .../dto/GenerateQuarterlyReportDTO.java | 1 - .../entrustment/dto/ResultExcelDTO.java | 25 +++- .../entity/EntrustMaterialCheckoutResult.java | 2 +- .../entrustment/entity/Entrustment.java | 1 + .../EntrustmentIdentificationMaterial.java | 1 - .../entrustment/mapper/SuspectMapper.java | 3 +- .../EntrustMaterialCheckoutResultService.java | 17 ++- ...rustMaterialCheckoutResultServiceImpl.java | 138 +++++++++--------- ...mentIdentificationMaterialServiceImpl.java | 1 - .../entrustment/utils/ExcelUtils.java | 5 +- .../vo/EntrustMaterialCheckoutResultVO.java | 1 - .../entrustment/vo/EntrustmentVO.java | 1 - 16 files changed, 102 insertions(+), 106 deletions(-) diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java index f4b0644..deebb38 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java @@ -1,6 +1,5 @@ package digital.laboratory.platform.entrustment.controller; -import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import digital.laboratory.platform.common.core.exception.CheckedException; @@ -11,11 +10,9 @@ import digital.laboratory.platform.entrustment.convert.EntrustMaterialCheckoutRe import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO; import digital.laboratory.platform.entrustment.dto.GenerateQuarterlyReportDTO; import digital.laboratory.platform.entrustment.dto.ResultExcelDTO; -import digital.laboratory.platform.entrustment.query.BaseQuery; import digital.laboratory.platform.entrustment.query.EntrustMaterialCheckoutResultQuery; import digital.laboratory.platform.entrustment.service.EntrustMaterialCheckoutResultService; import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO; -import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -26,11 +23,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; -import java.sql.Array; import java.sql.SQLException; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; /** * 委托检材--检出定性定量结果信息 diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java index c63d898..e9ab3fc 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java @@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import digital.laboratory.platform.common.aop.annotation.DlpAccessLimit; import digital.laboratory.platform.common.aop.annotation.DlpRepeatSubmit; import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; import digital.laboratory.platform.common.core.exception.CheckedException; @@ -21,7 +20,6 @@ import digital.laboratory.platform.common.oss.service.OssFile; import digital.laboratory.platform.common.security.annotation.Inner; import digital.laboratory.platform.common.security.util.SecurityUtils; import digital.laboratory.platform.entrustment.dto.EntrustmentDTO; -import digital.laboratory.platform.entrustment.dto.MaterialDTO; import digital.laboratory.platform.entrustment.entity.CaseEvent; import digital.laboratory.platform.entrustment.entity.Entrustment; import digital.laboratory.platform.entrustment.enums.EntrustStatusConstants; diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java index 44ad7f4..62a4fb6 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java @@ -4,9 +4,6 @@ import digital.laboratory.platform.common.core.util.R; import digital.laboratory.platform.entrustment.service.ExcelOperationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/PushDataToLabsCareController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/PushDataToLabsCareController.java index 0920983..8870ca1 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/controller/PushDataToLabsCareController.java +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/PushDataToLabsCareController.java @@ -9,7 +9,6 @@ import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/GenerateQuarterlyReportDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/GenerateQuarterlyReportDTO.java index 05af6ac..10dca9e 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/dto/GenerateQuarterlyReportDTO.java +++ b/src/main/java/digital/laboratory/platform/entrustment/dto/GenerateQuarterlyReportDTO.java @@ -2,7 +2,6 @@ package digital.laboratory.platform.entrustment.dto; import lombok.Data; -import java.util.ArrayList; import java.util.List; @Data public class GenerateQuarterlyReportDTO { 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 d961fdc..865a731 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/dto/ResultExcelDTO.java +++ b/src/main/java/digital/laboratory/platform/entrustment/dto/ResultExcelDTO.java @@ -1,20 +1,31 @@ package digital.laboratory.platform.entrustment.dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; import java.util.List; @Data -public class +@ApiModel(value = "ResultExcelDTO对象", description = "导出检材信息excel的参数") +public class ResultExcelDTO { + @ApiModelProperty(value = "委托类型") + private Integer entrustType; + @ApiModelProperty(value = "鉴定情况") + private List oldResult; + @ApiModelProperty(value = "开始时间") + private LocalDateTime startTime; -ResultExcelDTO { - Integer entrustType; - List oldResult; - LocalDateTime startTime; - LocalDateTime endTime; - Boolean isMetabolite; + @ApiModelProperty(value = "结束时间") + private LocalDateTime endTime; + + @ApiModelProperty(value = "是否代谢物") + private Boolean isMetabolite; + + @ApiModelProperty(value = "是否导出可上传至禁毒大数据平台文件") + private Boolean exportForBigDataPlatform; } diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java index 23d6df9..aec5537 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java @@ -31,7 +31,7 @@ public class EntrustMaterialCheckoutResult extends BaseEntity { private String qualitativeResult; /** - * 定量结果 + * 定量结果,多个则是通过 、分隔 */ @TableField(updateStrategy = FieldStrategy.IGNORED) private String quantitativeResult; diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java b/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java index d0b8200..0ee2165 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java @@ -14,6 +14,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; + import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java index babf344..96c2cf1 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java @@ -13,7 +13,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang.StringUtils; -import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SuspectMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SuspectMapper.java index 7e2e567..1ce27b4 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/mapper/SuspectMapper.java +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SuspectMapper.java @@ -3,11 +3,10 @@ package digital.laboratory.platform.entrustment.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import digital.laboratory.platform.entrustment.entity.Suspect; import org.apache.ibatis.annotations.Mapper; -import org.springframework.stereotype.Repository; /** * 委托嫌疑人数据访问接口 */ @Mapper public interface SuspectMapper extends BaseMapper { -} \ No newline at end of file +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java index 214b9bc..9407787 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java +++ b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java @@ -14,16 +14,13 @@ import digital.laboratory.platform.entrustment.query.EntrustMaterialCheckoutResu import digital.laboratory.platform.entrustment.vo.DetectionRateVO; import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO; import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; -import digital.laboratory.platform.entrustment.vo.SuspectDetectionVO; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; import java.time.LocalDateTime; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @author ChenJiangBao @@ -49,12 +46,12 @@ public interface EntrustMaterialCheckoutResultService extends IService entrustIds, HttpServletResponse response) throws IOException; + void exportForBigDataPlatform(ResultExcelDTO excelDTO, HttpServletResponse response) throws IOException; /** * vo 分页对象 @@ -84,7 +81,13 @@ public interface EntrustMaterialCheckoutResultService extends IService entrustIds, HttpServletResponse response) throws IOException { + public void exportForBigDataPlatform(ResultExcelDTO excelDTO, HttpServletResponse response) throws IOException { // 获取委托信息 + List allResults = getOriginalIdentificationList(excelDTO.getOldResult()); List entrustmentList = entrustmentService.list( - Wrappers.lambdaQuery().in(Entrustment::getId, entrustIds) + Wrappers.lambdaQuery() + .eq(excelDTO.getEntrustType() != null, Entrustment::getEntrustmentType, excelDTO.getEntrustType()) + .in(CollUtil.isNotEmpty(allResults), Entrustment::getOldIdentificationResult, allResults) + .ge(excelDTO.getStartTime() != null, Entrustment::getAcceptTime, excelDTO.getStartTime()) + .le(excelDTO.getEndTime() != null, Entrustment::getAcceptTime, excelDTO.getEndTime()) ); + List entrustIds = entrustmentList.stream().map(Entrustment::getId).collect(Collectors.toList()); // 获取检材信息, 排序的原因是需要数据是有序的 List materialList = entrustmentIdentificationMaterialService.list( Wrappers.lambdaQuery() @@ -251,25 +253,6 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl voiPage(EntrustMaterialCheckoutResultQuery query) { -// IPage page = this.page( -// new Page<>(query.getCurrent(), query.getSize()), -// Wrappers.lambdaQuery() -// .eq(StrUtil.isNotBlank(query.getEntrustId()), EntrustMaterialCheckoutResult::getEntrustId, query.getEntrustId()) -// .orderByDesc(EntrustMaterialCheckoutResult::getUpdateTime) -// ); -// IPage voPage = new Page<>(); -// BeanUtils.copyProperties(page, voPage, "records"); -// List records = page.getRecords(); -// if (CollUtil.isNotEmpty(records)) { -// List entrustmentIdentificationMaterials = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery().in(EntrustmentIdentificationMaterial::getId, records.stream().map(EntrustMaterialCheckoutResult::getId).collect(Collectors.toSet()))); -// Map materialMap = entrustmentIdentificationMaterials.stream().collect(Collectors.toMap(EntrustmentIdentificationMaterial::getId, Function.identity())); -// List entrustMaterialCheckoutResultVOS = records.stream().map(record -> { -// EntrustMaterialCheckoutResultVO entrustMaterialCheckoutResultVO = EntrustMaterialCheckoutResultConvert.entityToVO(record); -// entrustMaterialCheckoutResultVO.setName(materialMap.get(record.getId()).getName()); -// return entrustMaterialCheckoutResultVO; -// }).collect(Collectors.toList()); -// voPage.setRecords(entrustMaterialCheckoutResultVOS); -// } return baseMapper.getEntrustMaterialCheckoutResultVOPage( new Page<>(query.getCurrent(), query.getSize()), Wrappers.query() @@ -333,8 +316,8 @@ 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); - } - } - } + List allResults = getOriginalIdentificationList(oldResults); if (!allResults.isEmpty()) { wrapper.in(Entrustment::getOldIdentificationResult, allResults); @@ -682,6 +656,27 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl getOriginalIdentificationList(List oldResults) { + List allResults = new ArrayList<>(); + for (String oldResult : oldResults) { + if (StringUtils.isNotBlank(oldResult)) { + if ("委托".equals(oldResult)) { + allResults.add("首次鉴定"); + allResults.add("补充鉴定"); + allResults.add("重新鉴定"); + } else { + allResults.add(oldResult); + } + } + } + return allResults; + } + public Map> getResultDataMap( ResultExcelDTO excelDTO) { @@ -701,19 +696,7 @@ 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); - } - } - } - + List allResults = getOriginalIdentificationList(oldResults); if (!allResults.isEmpty()) { qw.in(Entrustment::getOldIdentificationResult, allResults); } @@ -854,28 +837,41 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl resultData = this.getResultData(excelDTO); - Map> resultDataMap = this.getResultDataMap(excelDTO); - LocalDateTime startTime = excelDTO.getStartTime(); - LocalDateTime endTime = excelDTO.getEndTime(); - Integer entrustType = excelDTO.getEntrustType(); - List oldResults = excelDTO.getOldResult(); + if (excelDTO.getExportForBigDataPlatform() != null && excelDTO.getExportForBigDataPlatform()) { + // 导出可上传至禁毒大数据平台文件 + exportForBigDataPlatform(excelDTO, response); + } else { + // 获取查询数据 + List resultData = this.getResultData(excelDTO); + Map> resultDataMap = this.getResultDataMap(excelDTO); - if (resultData.isEmpty() || resultDataMap.isEmpty()) { - return R.failed("没有符合条件的数据!"); - } + LocalDateTime startTime = excelDTO.getStartTime(); + LocalDateTime endTime = excelDTO.getEndTime(); + Integer entrustType = excelDTO.getEntrustType(); + List oldResults = excelDTO.getOldResult(); - Workbook workbook = new XSSFWorkbook(); + if (resultData.isEmpty() || resultDataMap.isEmpty()) { + return R.failed("没有符合条件的数据!"); + } - createDataSheet(workbook, entrustType, resultData); - createStatisticsSheet(workbook, resultDataMap, oldResults, entrustType, startTime, endTime); - createDrugSheets(workbook, resultDataMap, entrustType); + Workbook workbook = new XSSFWorkbook(); - workbook.write(response.getOutputStream()); + createDataSheet(workbook, entrustType, resultData); + createStatisticsSheet(workbook, resultDataMap, oldResults, entrustType, startTime, endTime); + createDrugSheets(workbook, resultDataMap, entrustType); + + workbook.write(response.getOutputStream()); + } return R.ok("导出成功!"); } diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java index f9e8aa9..d34a593 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java @@ -59,7 +59,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.OutputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; diff --git a/src/main/java/digital/laboratory/platform/entrustment/utils/ExcelUtils.java b/src/main/java/digital/laboratory/platform/entrustment/utils/ExcelUtils.java index e65e30b..9b9bc74 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/utils/ExcelUtils.java +++ b/src/main/java/digital/laboratory/platform/entrustment/utils/ExcelUtils.java @@ -5,7 +5,10 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** * @author ChenJiangBao diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java index bb4e570..989c010 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java @@ -1,6 +1,5 @@ package digital.laboratory.platform.entrustment.vo; -import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java index 48f470d..808968b 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java @@ -1,6 +1,5 @@ package digital.laboratory.platform.entrustment.vo; -import digital.laboratory.platform.common.aop.annotation.DlpFeign; import digital.laboratory.platform.entrustment.entity.Entrustment; import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; import digital.laboratory.platform.entrustment.entity.Suspect; From 168cb6235f440b67ac5cdacf979398e5f4d165d2 Mon Sep 17 00:00:00 2001 From: chen <2710907404@qq.com> Date: Thu, 9 Oct 2025 16:14:55 +0800 Subject: [PATCH 2/5] =?UTF-8?q?202501009=20=E6=9B=B4=E6=96=B0=201.bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entrustment/convert/DrugLiteConvert.java | 4 +++ ...rustMaterialCheckoutResultServiceImpl.java | 25 +++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/digital/laboratory/platform/entrustment/convert/DrugLiteConvert.java b/src/main/java/digital/laboratory/platform/entrustment/convert/DrugLiteConvert.java index bc90a70..bbf906c 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/convert/DrugLiteConvert.java +++ b/src/main/java/digital/laboratory/platform/entrustment/convert/DrugLiteConvert.java @@ -27,6 +27,10 @@ public class DrugLiteConvert { } public static List getDrugLites(String drugToString) { + // 判断参数是否为空 + if (drugToString == null || drugToString.isEmpty()) { + return Collections.emptyList(); + } List drugLiteList = JSONArray.parseArray(drugToString, DrugLite.class).stream().sorted(Comparator.comparing(DrugLite::getName)).collect(Collectors.toList()); return drugLiteList; } 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 7671930..cf13c63 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 @@ -201,6 +201,7 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl entrustIds = entrustmentList.stream().map(Entrustment::getId).collect(Collectors.toList()); // 获取检材信息, 排序的原因是需要数据是有序的 @@ -220,10 +221,10 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl checkoutResultMap = checkoutResultList.stream().collect(Collectors.toMap(EntrustMaterialCheckoutResult::getId, Function.identity())); List checkoutResultExcelDTOS = fetchCheckoutResultExcelDTOList(entrustmentList, materialGroupByEntrustMap, checkoutResultMap); - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setCharacterEncoding("utf-8"); - String fileName = URLEncoder.encode("检材检出结果excel表", "UTF-8").replaceAll("\\+", "%20"); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); +// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); +// response.setCharacterEncoding("utf-8"); +// String fileName = URLEncoder.encode("检材检出结果excel表", "UTF-8").replaceAll("\\+", "%20"); +// response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 不使用默认样式 // 空的头部样式 @@ -367,13 +368,15 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl Date: Fri, 10 Oct 2025 14:09:11 +0800 Subject: [PATCH 3/5] =?UTF-8?q?202501010=20=E6=9B=B4=E6=96=B0=201.?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=AF=E5=AF=BC=E5=85=A5=E6=A3=80=E6=9D=90?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/EntrustStateMachineConfig.java | 38 -- ...rkConstants.java => EntrustConstants.java} | 4 +- .../controller/ExcelOperationController.java | 11 + .../enums/AnalysisOptionEnums.java | 10 + .../service/ExcelOperationService.java | 7 + .../service/impl/EntrustmentServiceImpl.java | 54 +-- .../impl/ExcelOperationServiceImpl.java | 399 ++++++++++++------ 7 files changed, 335 insertions(+), 188 deletions(-) delete mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/EntrustStateMachineConfig.java rename src/main/java/digital/laboratory/platform/entrustment/constant/{EntrustMarkConstants.java => EntrustConstants.java} (92%) diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/EntrustStateMachineConfig.java b/src/main/java/digital/laboratory/platform/entrustment/config/EntrustStateMachineConfig.java deleted file mode 100644 index c022d59..0000000 --- a/src/main/java/digital/laboratory/platform/entrustment/config/EntrustStateMachineConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -//package digital.laboratory.platform.entrustment.config; -// -//import digital.laboratory.platform.entrustment.enums.EntrustEvent; -//import digital.laboratory.platform.entrustment.enums.EntrustStatusConstants; -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter; -//import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; -// -///** -// * @author ChenJiangBao -// * @version 1.0 -// * @description: 委托状态机配置类 -// * @date 2025/3/14 11:47 -// */ -//@Configuration -//public class EntrustStateMachineConfig extends EnumStateMachineConfigurerAdapter { -// -// @Value("${dlp.entrustment.isApprovalRequired}") -// private boolean isApprovalRequired; // 动态标志判断是否需要审批 -// -// @Override -// public void configure(StateMachineStateConfigurer states) throws Exception { -// states.withStates() -// .initial(EntrustStatusConstants.ENTRUST_STATUS_CREATED) -// .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CHECK_CLAIM) -// .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CHECK) -// .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_CONFIRM) -// .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_DELIVER) -// .state(EntrustStatusConstants.ENTRUST_STATUS_WAITING_ACCEPT) -// .state(EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED) -// .state(EntrustStatusConstants.ENTRUST_STATUS_TEST_FINISH) -// .state(EntrustStatusConstants.ENTRUST_STATUS_COMPLETED) -// .state(EntrustStatusConstants.ENTRUST_STATUS_TERMINATED) -// .state(EntrustStatusConstants.ENTRUST_STATUS_ABORTED) -// .end(EntrustStatusConstants.ENTRUST_STATUS_COMPLETED); -// } -//} diff --git a/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java b/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustConstants.java similarity index 92% rename from src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java rename to src/main/java/digital/laboratory/platform/entrustment/constant/EntrustConstants.java index c7770fa..48b7845 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java +++ b/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustConstants.java @@ -3,7 +3,7 @@ package digital.laboratory.platform.entrustment.constant; /** * 统计的各个中文名称常量接口 */ -public interface EntrustMarkConstants { +public interface EntrustConstants { String CASE_ACCEPT = "案件受理"; @@ -19,6 +19,4 @@ public interface EntrustMarkConstants { Integer LOCAL_SYSTEM = 0; // 本系统数据 Integer THIRD_PARTY_SYSTEM = 1; // 大数据平台同步过来的数据 - - } diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java index 62a4fb6..ee91739 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/ExcelOperationController.java @@ -25,6 +25,17 @@ public class ExcelOperationController { @Resource private ExcelOperationService excelOperationService; + @ApiOperation("检材信息导入接口") + @PostMapping("/importMaterialInfo") + public R importMaterialInfo(@RequestPart("file") MultipartFile file, @RequestParam("entrustId") String entrustId) { + try { + return excelOperationService.importMaterialInfo(file, entrustId) ? R.ok("检材信息导入成功!") : R.failed("检材信息导入失败!"); + } catch (Exception e) { + e.printStackTrace(); + return R.failed(e.getMessage()); + } + } + @ApiOperation("上传两社人员名单excel文件") @PostMapping("/uploadHairInspect") public R uploadHairInspectExcel(@RequestPart("file") MultipartFile file, @RequestParam("entrustId") String entrustId) { diff --git a/src/main/java/digital/laboratory/platform/entrustment/enums/AnalysisOptionEnums.java b/src/main/java/digital/laboratory/platform/entrustment/enums/AnalysisOptionEnums.java index 09aae07..c3198cd 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/enums/AnalysisOptionEnums.java +++ b/src/main/java/digital/laboratory/platform/entrustment/enums/AnalysisOptionEnums.java @@ -46,4 +46,14 @@ public enum AnalysisOptionEnums { } throw new IllegalArgumentException("No enum constant with code: " + code); } + + // 根据描述获取枚举值 + public static AnalysisOptionEnums fromDesc(String desc) { + for (AnalysisOptionEnums analysisOption : values()) { + if (analysisOption.getChineseName().equals(desc)) { + return analysisOption; + } + } + throw new IllegalArgumentException("No enum constant with description: " + desc); + } } diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/ExcelOperationService.java b/src/main/java/digital/laboratory/platform/entrustment/service/ExcelOperationService.java index 21d459f..5154955 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/service/ExcelOperationService.java +++ b/src/main/java/digital/laboratory/platform/entrustment/service/ExcelOperationService.java @@ -29,4 +29,11 @@ public interface ExcelOperationService { */ void exportByEntrustOrg(Integer year, HttpServletResponse response) throws IOException; + /** + * 导入检材信息 + * @param file + * @param entrustId + * @return + */ + Boolean importMaterialInfo(MultipartFile file, String entrustId) throws Exception; } 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 5478fec..3cfc5c8 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 @@ -33,7 +33,7 @@ import digital.laboratory.platform.common.feign.RemoteWord2PDFService; import digital.laboratory.platform.common.mybatis.security.service.DLPUser; import digital.laboratory.platform.common.oss.service.OssFile; import digital.laboratory.platform.common.security.util.SecurityUtils; -import digital.laboratory.platform.entrustment.constant.EntrustMarkConstants; +import digital.laboratory.platform.entrustment.constant.EntrustConstants; import digital.laboratory.platform.entrustment.convert.DrugLiteConvert; import digital.laboratory.platform.entrustment.dto.EntrustmentDTO; import digital.laboratory.platform.entrustment.entity.*; @@ -3309,34 +3309,34 @@ public class EntrustmentServiceImpl extends ServiceImpl entrustListMapOrDefault = entrustListMap.getOrDefault( - StrUtil.join("_", EntrustMarkConstants.LOCAL_SYSTEM, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()), Collections.EMPTY_LIST + StrUtil.join("_", EntrustConstants.LOCAL_SYSTEM, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()), Collections.EMPTY_LIST ); // o.getAcceptTime().isAfter(LocalDateTime.of(LocalDate.now().withDayOfYear(1), LocalTime.MIN)) 筛选出当年的数据 - markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, + markersVOS.add(new MarkersVO(EntrustConstants.CASE_ACCEPT, entrustListMapOrDefault.stream().filter(o -> o.getAcceptTime().isAfter(LocalDateTime.of(LocalDate.now().withDayOfYear(1), LocalTime.MIN)) && EntrustStatusConstants.geAcceptedStatus(o.getStatus()) ).collect(Collectors.toList()).size(), - String.format("已受理 (%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); - markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, + String.format("已受理 (%s)", EntrustConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustConstants.CASE_ACCEPT, entrustListMap.getOrDefault( - StrUtil.join("_", EntrustMarkConstants.THIRD_PARTY_SYSTEM, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()), Collections.EMPTY_LIST + StrUtil.join("_", EntrustConstants.THIRD_PARTY_SYSTEM, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()), Collections.EMPTY_LIST ).size(), "已受理 (大数据平台)")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, + markersVOS.add(new MarkersVO(EntrustConstants.CASE_ACCEPT, this.list(Wrappers.lambdaQuery() .ge(Entrustment::getStatus, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()) .inSql(Entrustment::getId, "SELECT entrust_id FROM b_entrust_material_checkout_result")) @@ -3349,34 +3349,34 @@ public class EntrustmentServiceImpl extends ServiceImpl entrustListMap.getOrDefault(EntrustMarkConstants.LOCAL_SYSTEM + "_" + status, Collections.emptyList()).size()) + .mapToInt(status -> entrustListMap.getOrDefault(EntrustConstants.LOCAL_SYSTEM + "_" + status, Collections.emptyList()).size()) .sum(), - String.format("委托审核(%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); - markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + String.format("委托审核(%s)", EntrustConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustConstants.REVIEW_OR_APPROVAL, REVIEW_STATUS_GROUP2.stream() - .mapToInt(status -> entrustListMap.getOrDefault(EntrustMarkConstants.LOCAL_SYSTEM + "_" + status, Collections.emptyList()).size()) + .mapToInt(status -> entrustListMap.getOrDefault(EntrustConstants.LOCAL_SYSTEM + "_" + status, Collections.emptyList()).size()) .sum(), - String.format("委托审批(%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); - markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + String.format("委托审批(%s)", EntrustConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustConstants.REVIEW_OR_APPROVAL, REVIEW_STATUS_GROUP1.stream() - .mapToInt(status -> entrustListMap.getOrDefault(EntrustMarkConstants.THIRD_PARTY_SYSTEM + "_" + status, Collections.emptyList()).size()) + .mapToInt(status -> entrustListMap.getOrDefault(EntrustConstants.THIRD_PARTY_SYSTEM + "_" + status, Collections.emptyList()).size()) .sum(), "委托审核(大数据平台)")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + markersVOS.add(new MarkersVO(EntrustConstants.REVIEW_OR_APPROVAL, REVIEW_STATUS_GROUP2.stream() - .mapToInt(status -> entrustListMap.getOrDefault(EntrustMarkConstants.LOCAL_SYSTEM + "_" + status, Collections.emptyList()).size()) + .mapToInt(status -> entrustListMap.getOrDefault(EntrustConstants.LOCAL_SYSTEM + "_" + status, Collections.emptyList()).size()) .sum(), "委托审批(大数据平台)")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + markersVOS.add(new MarkersVO(EntrustConstants.REVIEW_OR_APPROVAL, (int) entrustAlterApplyService.count(Wrappers.lambdaQuery() .eq(EntrustAlterApply::getStatus, EntrustAlterApplyStatus.SUBMITTED_WAIT_APPROVE.getStatus())), "委托修改审核")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusCreatedNum(), "污水任务待发布")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusClaimNum(), "污水任务已发布")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusClaimNum(), "污水受理")); - markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getSewageTreatmentPlantNum(), "污水厂管理")); + markersVOS.add(new MarkersVO(EntrustConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusCreatedNum(), "污水任务待发布")); + markersVOS.add(new MarkersVO(EntrustConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusClaimNum(), "污水任务已发布")); + markersVOS.add(new MarkersVO(EntrustConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusClaimNum(), "污水受理")); + markersVOS.add(new MarkersVO(EntrustConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getSewageTreatmentPlantNum(), "污水厂管理")); return markersVOS; } diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/ExcelOperationServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/ExcelOperationServiceImpl.java index 833b146..1c97db1 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/service/impl/ExcelOperationServiceImpl.java +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/ExcelOperationServiceImpl.java @@ -1,6 +1,7 @@ package digital.laboratory.platform.entrustment.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import digital.laboratory.platform.common.core.constant.CommonConstants; @@ -25,6 +26,7 @@ import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -40,6 +42,7 @@ import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -86,148 +89,77 @@ public class ExcelOperationServiceImpl implements ExcelOperationService { * @throws Exception 发生异常时抛出 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean uploadHairInspectExcel(MultipartFile file, String entrustId) throws Exception { - - // 1. 校验委托合法性 + // ---------- 1. 校验委托合法性 ---------- Entrustment entrustment = entrustmentService.getById(entrustId); if (entrustment == null) { - throw new CheckedException(String.format("委托id为 %s 的委托信息不存在!", entrustId)); - } - if (!entrustment.getOldIdentificationResult().equals(EntrustIdentificationSituationType.TWO_AGENCY.getDesc())) { - throw new CheckedException("当前不支持两社人员之外的委托信息进行导入!"); + throw new CheckedException(String.format("委托ID为 %s 的委托信息不存在!", entrustId)); } - // 2. 获取案件与毒品信息 - // 2.1 校验案件信息 - CaseEvent cj = caseEventService.validateCaseInfo(entrustment.getCaseId()); - - // 2.2 获取默认毒品(海洛因) - + if (!EntrustIdentificationSituationType.TWO_AGENCY.getDesc().equals(entrustment.getOldIdentificationResult())) { + throw new CheckedException("当前仅支持‘两社人员’类型的委托信息进行导入!"); + } - // 2.3 获取所有毒品名称映射(便于匹配检测结果) - R> innerGetAllR = remoteCommDrugService.innerGetAll(); - List drugLiteList = innerGetAllR.getData(); - Map drugLiteMap = drugLiteList.stream() - .collect(Collectors.toMap(DrugLite::getName, Function.identity())); + // ---------- 2. 校验案件信息 ---------- + CaseEvent caseEvent = caseEventService.validateCaseInfo(entrustment.getCaseId()); - // 3. 读取Excel内容(从第一行数据开始读取) - int headIndex = 0; - List> data = ExcelUtils.readExcel(file, headIndex); + // ---------- 3. 获取毒品名称映射 ---------- + Map drugMap = getDrugLiteMap(); - // 3.1 获取当前委托下已有检材数,作为orderNo起始编号 - int orderNo = entrustmentIdentificationMaterialService.lambdaQuery() - .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustId) - .list().size() + 1; + // ---------- 4. 读取 Excel 数据 ---------- + final int headerRowIndex = 0; + List> excelData = ExcelUtils.readExcel(file, headerRowIndex); + if (CollUtil.isEmpty(excelData)) { + throw new CheckedException("Excel 文件内容为空!"); + } - // 3.2 初始化结果对象集合 - List results = new ArrayList<>(); + // ---------- 5. 处理嫌疑人信息 ---------- + List suspects = excelData.stream() + .map(row -> { + Suspect s = new Suspect(); + s.setName(row.get("姓名")); + s.setIdNumber(row.get("身份证号")); + return s; + }) + .filter(s -> StrUtil.isNotBlank(s.getName())) + .collect(Collectors.toList()); - ArrayList suspects = new ArrayList<>(); - for (Map datum : data) { - Suspect suspect = new Suspect(); - suspect.setName(datum.get("姓名")); - suspect.setIdNumber(datum.get("身份证号")); - suspects.add(suspect); - } if (CollUtil.isNotEmpty(suspects)) { + // 删除旧嫌疑人信息 suspectService.remove(Wrappers.lambdaQuery() .eq(Suspect::getEntrustId, entrustId)); + // 保存新嫌疑人信息 suspectService.addSuspectList(suspects, entrustId); } - List entrustmentIdentificationMaterialList = new ArrayList<>(); - - // 4. 遍历Excel数据行,构建检材与检测结果 - processExcelDataToMaterialEntity(data, entrustment, drugLiteMap, orderNo, cj, entrustmentIdentificationMaterialList); -// entrustMaterialCheckoutResultService.saveBatch(results); - boolean isSave = entrustmentIdentificationMaterialService.saveBatch(entrustmentIdentificationMaterialList); - String entrustReq = entrustmentService.buildEntrustReq(entrustmentIdentificationMaterialList); - entrustment.setEntrustRequirement(entrustReq); - entrustmentService.updateById(entrustment); - // 5. 批量保存检材信息和检测结果 - return isSave; - } - /** - * 处理Excel数据,构建检材对象并设置相关属性 - * @param data Excel数据列表 - * @param entrustment 委托信息对象 - * @param drugLiteMap 毒品名称映射表 - * @param orderNo 检材序号起始值 - * @param cj 案件信息对象 - * @param entrustmentIdentificationMaterialList 检材列表对象集合 - */ - private void processExcelDataToMaterialEntity(List> data, Entrustment entrustment, Map drugLiteMap, int orderNo, CaseEvent cj, List entrustmentIdentificationMaterialList) { - for (Map datum : data) { - // 构建检材对象 - EntrustmentIdentificationMaterial material = new EntrustmentIdentificationMaterial(); - material.setEntrustmentId(entrustment.getId()); - material.setCaseId(entrustment.getCaseId()); - material.setName(datum.get("姓名") + "毛发"); - material.setRemark(datum.get("身份证号")); - - // 解析身份证号 - String idNum = datum.get("身份证号"); - if (idNum != null && idNum.length() == 18) { - material.setBiologyGender(this.getSexByIdNum(idNum)); - material.setMaterialAge(Integer.valueOf(this.getAgeByIdNum(idNum))); - } + // ---------- 6. 构建检材与检测结果 ---------- + Long existingMaterialCount = entrustmentIdentificationMaterialService.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustId) + .count(); + int startOrderNo = Math.toIntExact(existingMaterialCount + 1); - material.setDrawPlace(datum.get("采样单位")); - material.setId(IdWorker.get32UUID().toUpperCase()); + List materialList = processHairExcelDataToMaterialEntity(excelData, entrustment, drugMap, startOrderNo, caseEvent); - // 检测结果解析 - ArrayList matchedDrugs = new ArrayList<>(); - String[] drugs = datum.get("检测结果").split("、"); - if (drugs.length == 0 || (drugs.length == 1 && drugs[0].trim().isEmpty())) { - matchedDrugs.add(drugLiteMap.get("海洛因")); - } else { - for (String drugName : drugs) { - if (drugLiteMap.containsKey(drugName)) { - matchedDrugs.add(drugLiteMap.get(drugName)); - } else { - // 未匹配到任何已知毒品,则调用接口保存 - DrugLite newDrug = new DrugLite(); - newDrug.setId(IdWorker.get32UUID().toUpperCase()); - newDrug.setName(drugName); - R booleanR = remoteCommDrugService.innerSaveDrug(newDrug); - if (booleanR.getCode() == CommonConstants.FAIL) { - throw new CheckedException("新增未知毒品失败!"); - } - // 更新缓存 Map,避免重复插入 - drugLiteMap.put(drugName, newDrug); - matchedDrugs.add(newDrug); - } - } - } - material.setCandidateDrugs(matchedDrugs); - - // 设置检材默认属性 - material.setBiologyType(EntrustBiologyType.HAIR.getDesc()); - material.setType("1"); - material.setTypeName("生物样本"); - material.setQuantity(new BigDecimal(50)); - material.setUnit("mg"); - material.setForm("黑色头发"); - material.setFormName("黑色头发"); - material.setOrderNo(orderNo); - material.setImEntrustNumber(String.valueOf(orderNo)); - orderNo++; - material.setPackComplete(true); - material.setRtSampleQuantity(0); - material.setDrawTime(LocalDateTime.now()); - material.setAnalysisOption(AnalysisOptionEnums.QUALITATIVE.getCode()); + // ---------- 7. 保存检材信息 ---------- + boolean saveSuccess = entrustmentIdentificationMaterialService.saveBatch(materialList); + if (!saveSuccess) { + throw new CheckedException("批量保存检材信息失败!"); + } - entrustmentIdentificationMaterialService.setMaterialIdentificationNo(material, cj); - material.setSample1No(sampleService.getNewSampleNo(material.getImNo(), 1)); + // ---------- 8. 更新委托要求 ---------- + String entrustRequirement = entrustmentService.buildEntrustReq(materialList); + entrustment.setEntrustRequirement(entrustRequirement); + entrustmentService.updateById(entrustment); - entrustmentIdentificationMaterialList.add(material); - } + // ---------- 9. 返回执行结果 ---------- + return true; } /** * 根据当前用户的机构id查询属于这个机构的委托信息 * - * @param year 年份,用于筛选特定年份的委托信息 + * @param year 年份,用于筛选特定年份的委托信息 * @param response */ @Override @@ -238,7 +170,7 @@ public class ExcelOperationServiceImpl implements ExcelOperationService { Wrappers.query() .eq("e.client_org_id", user.getOrgId()) .eq("e.status", EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()) - .likeRight(year != null , "e.accept_time", year) + .likeRight(year != null, "e.accept_time", year) .orderByDesc("e.accept_time") ); @@ -258,7 +190,6 @@ public class ExcelOperationServiceImpl implements ExcelOperationService { Map> materialGroupMap = identificationMaterials.stream().collect(Collectors.groupingBy(EntrustmentIdentificationMaterial::getEntrustmentId)); - // 获取嫌疑人信息并根据委托id分组 Map suspectGroupMap = buildSuspectInfoGroupByEntrustId(entrustmentVOList); @@ -344,14 +275,242 @@ public class ExcelOperationServiceImpl implements ExcelOperationService { // ====== 输出到浏览器 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - String filename = user.getOrgName() + "已受理委托信息统计" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".xlsx"; + String filename = user.getOrgName() + "已受理委托信息统计" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".xlsx"; response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name())); workbook.write(response.getOutputStream()); workbook.close(); } + /** + * 导入检材信息 + * + * @param file + * @param entrustId + * @return + */ + @Override + public Boolean importMaterialInfo(MultipartFile file, String entrustId) throws Exception { + // ---------- 1. 校验委托合法性 ---------- + Entrustment entrustment = entrustmentService.getById(entrustId); + if (entrustment == null) { + throw new CheckedException(String.format("委托ID为 %s 的委托信息不存在!", entrustId)); + } + + // ---------- 2. 校验案件信息 ---------- + CaseEvent caseEvent = caseEventService.validateCaseInfo(entrustment.getCaseId()); + + // ---------- 3. 获取毒品名称映射 ---------- + Map drugMap = getDrugLiteMap(); + + // ---------- 4. 读取 Excel 数据 ---------- + final int headerRowIndex = 0; + List> excelData = ExcelUtils.readExcel(file, headerRowIndex); + if (CollUtil.isEmpty(excelData)) { + throw new CheckedException("Excel 文件内容为空!"); + } + + + // ---------- 6. 构建检材与检测结果 ---------- + Long existingMaterialCount = entrustmentIdentificationMaterialService.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustId) + .count(); + int startOrderNo = Math.toIntExact(existingMaterialCount + 1); + + List materialList = processExcelDataToMaterialEntity(excelData, entrustment, drugMap, startOrderNo, caseEvent); + + // ---------- 7. 保存检材信息 ---------- + boolean saveSuccess = entrustmentIdentificationMaterialService.saveBatch(materialList); + if (!saveSuccess) { + throw new CheckedException("批量保存检材信息失败!"); + } + + // ---------- 8. 更新委托要求 ---------- + String entrustRequirement = entrustmentService.buildEntrustReq(materialList); + entrustment.setEntrustRequirement(entrustRequirement); + entrustmentService.updateById(entrustment); + + // ---------- 9. 返回执行结果 ---------- + return true; + } + + /** + * 获取毒品清单信息,并转成map + * @return + */ + private Map getDrugLiteMap() { + R> drugResponse = remoteCommDrugService.innerGetAll(); + List drugList = Optional + .ofNullable(drugResponse.getData()) + .orElseThrow( + () -> new CheckedException("获取毒品信息失败!") + ); + Map drugMap = drugList.stream() + .collect(Collectors.toMap(DrugLite::getName, Function.identity())); + return drugMap; + } + + /** + * 处理毛发两社人员Excel数据,构建检材对象并设置相关属性 + * + * @param data Excel数据列表 + * @param entrustment 委托信息对象 + * @param drugLiteMap 毒品名称映射表 + * @param orderNo 检材序号起始值 + * @param cj 案件信息对象 + * @return + */ + private List processHairExcelDataToMaterialEntity(List> data, Entrustment entrustment, Map drugLiteMap, int orderNo, CaseEvent cj) { + List entrustmentIdentificationMaterialList = new ArrayList<>(); + for (Map datum : data) { + // 构建检材对象 + EntrustmentIdentificationMaterial material = new EntrustmentIdentificationMaterial(); + material.setEntrustmentId(entrustment.getId()); + material.setCaseId(entrustment.getCaseId()); + material.setName(datum.get("姓名") + "毛发"); + material.setRemark(datum.get("身份证号")); + + // 解析身份证号 + String idNum = datum.get("身份证号"); + if (idNum != null && idNum.length() == 18) { + material.setBiologyGender(this.getSexByIdNum(idNum)); + material.setMaterialAge(Integer.valueOf(this.getAgeByIdNum(idNum))); + } + + material.setDrawPlace(datum.get("采样单位")); + material.setId(IdWorker.get32UUID().toUpperCase()); + + // 检测结果解析 + String[] drugs = datum.get("检测结果").split("、"); + buildMatchedDrugs(drugLiteMap, material, drugs); + + // 设置检材默认属性 + material.setBiologyType(EntrustBiologyType.HAIR.getDesc()); + material.setType("1"); + material.setTypeName("生物样本"); + material.setQuantity(new BigDecimal(50)); + material.setUnit("mg"); + material.setForm("黑色头发"); + material.setFormName("黑色头发"); + material.setOrderNo(orderNo); + material.setImEntrustNumber(String.valueOf(orderNo)); + orderNo++; + material.setPackComplete(true); + material.setRtSampleQuantity(0); + material.setDrawTime(LocalDateTime.now()); + material.setAnalysisOption(AnalysisOptionEnums.QUALITATIVE.getCode()); + + entrustmentIdentificationMaterialService.setMaterialIdentificationNo(material, cj); + material.setSample1No(sampleService.getNewSampleNo(material.getImNo(), 1)); + + entrustmentIdentificationMaterialList.add(material); + } + return entrustmentIdentificationMaterialList; + } + + /** + * 处理委托检材Excel数据,构建检材对象并设置相关属性 + * + * @param data Excel数据列表 + * @param entrustment 委托信息对象 + * @param drugLiteMap 毒品名称映射表 + * @param orderNo 检材序号起始值 + * @param cj 案件信息对象 + * @return + */ + private List processExcelDataToMaterialEntity(List> data, Entrustment entrustment, Map drugLiteMap, int orderNo, CaseEvent cj) { + List entrustmentIdentificationMaterialList = new ArrayList<>(); + for (Map datum : data) { + // 构建检材对象 + EntrustmentIdentificationMaterial material = new EntrustmentIdentificationMaterial(); + material.setId(IdWorker.get32UUID().toUpperCase()); + material.setEntrustmentId(entrustment.getId()); + material.setCaseId(entrustment.getCaseId()); + material.setName(datum.get("疑似物种类")); + material.setRtSampleQuantity(Integer.valueOf(datum.get("留存样个数"))); + material.setQuantity(new BigDecimal(datum.get("重量/体积"))); + material.setUnit(datum.get("单位")); + String formDesc = datum.get("性状描述"); + material.setForm(formDesc); + material.setFormName(formDesc); + // 提取颜色 + if (StrUtil.isNotBlank(formDesc) && formDesc.contains("色")) { + // 截取“色”之前的部分(包含“色”) + material.setColor(formDesc.substring(0, formDesc.indexOf("色") + 1)); + } + material.setDrawTime(LocalDate.parse(datum.get("提取时间"), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay()); + material.setDrawPlace(datum.get("提取地点")); + + // 检测结果解析 + String[] drugs = datum.get("筛查目标物").split("、"); + buildMatchedDrugs(drugLiteMap, material, drugs); + // 设置委托类型 + material.setType(String.valueOf(entrustment.getEntrustmentType())); + if (entrustment.getEntrustmentType() == 0) { + material.setTypeName("常规毒品"); + } else { + material.setTypeName("生物样本"); + material.setBiologyType(EntrustBiologyType.isExist(formDesc).getDesc()); + } + material.setOrderNo(orderNo); + material.setImEntrustNumber(String.valueOf(orderNo)); + orderNo++; + String packageInfo = datum.get("包装信息"); + if (packageInfo.equals("完整")) { + material.setPackComplete(true); + } else { + material.setPackComplete(false); + } + String age = datum.get("年龄"); + if (StrUtil.isNotBlank(age)) { + material.setMaterialAge(Integer.valueOf(age)); + } + material.setBiologyGender(datum.get("性别")); + material.setAnalysisOption(AnalysisOptionEnums.fromDesc(datum.get("检验项目")).getCode()); + entrustmentIdentificationMaterialService.setMaterialIdentificationNo(material, cj); + material.setSample1No(sampleService.getNewSampleNo(material.getImNo(), 1)); + + entrustmentIdentificationMaterialList.add(material); + } + return entrustmentIdentificationMaterialList; + } + + /** + * 构建匹配筛查目标物毒品列表 + * + * @param drugLiteMap 毒品信息缓存Map + * @param material 委托鉴定检材对象 + * @param drugs 待匹配毒品名称数组 + * @throws CheckedException 抛出检查异常 + */ + private void buildMatchedDrugs(Map drugLiteMap, EntrustmentIdentificationMaterial material,String[] drugs) { + ArrayList matchedDrugs = new ArrayList<>(); + if (drugs.length == 0 || (drugs.length == 1 && drugs[0].trim().isEmpty())) { + matchedDrugs.add(drugLiteMap.get("海洛因")); + } else { + for (String drugName : drugs) { + if (drugLiteMap.containsKey(drugName)) { + matchedDrugs.add(drugLiteMap.get(drugName)); + } else { + // 未匹配到任何已知毒品,则调用接口保存 + DrugLite newDrug = new DrugLite(); + newDrug.setId(IdWorker.get32UUID().toUpperCase()); + newDrug.setName(drugName); + R booleanR = remoteCommDrugService.innerSaveDrug(newDrug); + if (booleanR.getCode() == CommonConstants.FAIL) { + throw new CheckedException("新增未知毒品失败!"); + } + // 更新缓存 Map,避免重复插入 + drugLiteMap.put(drugName, newDrug); + matchedDrugs.add(newDrug); + } + } + } + material.setCandidateDrugs(matchedDrugs); + } + /** * 根据委托id分组,拼接嫌疑人姓名和身份证 + * * @param entrustmentVOList * @return */ From 1083fc878a53c0125c7be9be45dcdff62f8fa7bc Mon Sep 17 00:00:00 2001 From: chen <2710907404@qq.com> Date: Fri, 10 Oct 2025 14:09:33 +0800 Subject: [PATCH 4/5] =?UTF-8?q?202501010=20=E6=9B=B4=E6=96=B0=201.?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=AF=E5=AF=BC=E5=85=A5=E6=A3=80=E6=9D=90?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entrustment/enums/EntrustEvent.java | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 src/main/java/digital/laboratory/platform/entrustment/enums/EntrustEvent.java diff --git a/src/main/java/digital/laboratory/platform/entrustment/enums/EntrustEvent.java b/src/main/java/digital/laboratory/platform/entrustment/enums/EntrustEvent.java deleted file mode 100644 index f9caea6..0000000 --- a/src/main/java/digital/laboratory/platform/entrustment/enums/EntrustEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package digital.laboratory.platform.entrustment.enums; - -/** - * @author ChenJiangBao - * @version 1.0 - * @description: 委托事件枚举 - * @date 2025/3/14 16:11 - */ -public enum EntrustEvent { - SUBMIT, // 提交委托事件 - CLAIM_CHECK, // 认领审核 - APPROVE, // 审批 - CLAIM_APPROVE, // 审核通过后审批 - CONFIRM, // 送检确认 - DELIVER, // 送检 - ACCEPT, // 受理 - TEST_FINISH, // 检验完成 - TERMINATE, // 终止 - ABORT; // 中止 -} From d6137fb59cfd89145893732b3b79dad6cbd7ecd6 Mon Sep 17 00:00:00 2001 From: chen <2710907404@qq.com> Date: Sat, 11 Oct 2025 15:29:34 +0800 Subject: [PATCH 5/5] =?UTF-8?q?202501011=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entrustment/config/ErrorController.java | 71 ------------------- .../controller/EntrustmentController.java | 47 ------------ ...rustMaterialCheckoutResultServiceImpl.java | 12 +++- 3 files changed, 10 insertions(+), 120 deletions(-) delete mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java b/src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java deleted file mode 100644 index 48c7d37..0000000 --- a/src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java +++ /dev/null @@ -1,71 +0,0 @@ -package digital.laboratory.platform.entrustment.config; - -import digital.laboratory.platform.common.core.util.R; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.servlet.NoHandlerFoundException; - -import java.util.HashMap; -import java.util.Map; - -/** - * Spring Boot 自定义异常处理 - * 所有的异常都派生自 Exception, 如果我们定义了某个异常的处理 Handler, Spring Boot 会调用用对应的异常 Handler, 否则会调用 Exception Handler. - * 有一个前提是在 application.yml 中定义两个属性, 让 springboot 在没有找到 url 的处理器触发异常; 让 springboot 不要自作多情加 /error 这个 map - * mvc: - * throw-exception-if-no-handler-found: true - * web: - * resources: - * add-mappings: false - * 只有如此, springboot 才会触发异常。 - */ - - -@ControllerAdvice -public class ErrorController { - - @ExceptionHandler(Exception.class) - @ResponseBody - public ResponseEntity error(Exception ex) { - System.out.println("ErrorController.error Exception"); - ex.printStackTrace(); - Map map = new HashMap<>(); - map.put("Exception", ex.getClass().getName()); - map.put("message", ex.getMessage()); - map.put("localizedMessage", ex.getLocalizedMessage()); - map.put("toString", ex.toString()); - - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(R.failed(map, "发生异常 " + ex.getMessage())); - } - - - @ExceptionHandler(value = {NoHandlerFoundException.class}) - @ResponseBody - public ResponseEntity error(NoHandlerFoundException ex) { -//System.out.println("ErrorController.error NoHandlerFoundException"); -//ex.printStackTrace(); -// //ex.getRawStatusCode() - Map map = new HashMap<>(); - map.put("Exception", ex.getClass().getName()); - map.put("message", ex.getMessage()); - map.put("localizedMessage", ex.getLocalizedMessage()); - map.put("requestURL", ex.getRequestURL()); - map.put("httpMethod", ex.getHttpMethod()); -// map.put("cause", ex.getCause().toString()); - map.put("toString", ex.toString()); -// map.put("comments", "单独的 ExceptionHandler, 系统管理捕获的全局异常 NoHandlerFoundException"); -// //return map; -// //ResponseEntity> r = new ResponseEntity>(map, HttpStatus.INTERNAL_SERVER_ERROR); -// //ResponseEntity> r = new ResponseEntity>(map, HttpStatus.NOT_FOUND); -// //return r; -// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(map); - - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(R.failed(map, "没有找到")); - } - - -} - diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java index e9ab3fc..d7ad696 100644 --- a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java @@ -2195,53 +2195,6 @@ public class EntrustmentController { return R.ok(entrustmentService.updateImportData(excuteType)); } - //===================================================================================== - // 测试, 为现有的案件创建一些委托 - @GetMapping("/create100") - public R xxx_TestCreate100() { - List cjs = caseEventService.getCaseVoList(null, null, null, null); - for (CaseEvent cj : cjs) { - int num = RandomUtil.randomInt(1, 4); - for (int i = 0; i < num; i++) { - List ces = entrustmentService.list(Wrappers.query() - .eq("case_id", cj.getId())); - - if (ces.size() >= num) { - break; - } - Entrustment entrustment = new Entrustment(); - - entrustment.setCaseId(cj.getId()); - //entrustment.setEntrustmentNo(entrustmentService.getNewEntrustmentNo(cj.getCaseNo())); - entrustment.setEntrustmentNo(entrustmentService.getNewEntrustmentNo()); - //entrustment.setEntrustmentTime(LocalDateTime.now()); - entrustment.setClientOrgId(""); - //entrustment.setClientOrgName(""); - entrustment.setDeliverer1Name("李宏亮"); - entrustment.setDeliverer1Phone("13985001001"); - entrustment.setDeliverer1Id("522122199504042035"); - entrustment.setDeliverer2Name("西门吹雪"); - entrustment.setDeliverer2Phone("13985001002"); - entrustment.setDeliverer2Id("522122190504042031"); - - //entrustment.setIdentificationOrgName("国家毒品实验室陕西分中心"); // 鉴定机构名称 - entrustment.setIdentificationDomain("毒品检验"); // 鉴定专业 - entrustment.setQualitativeAnalysis(true); // 定性分析 - entrustment.setQuantitativeAnalysis(true); // 定量分析 - entrustment.setOtherIdentificationRequests("无"); // 鉴定要求 - entrustment.setId(IdWorker.get32UUID().toUpperCase()); - - if (entrustmentService.save(entrustment)) { - System.out.println("新增委托成功"); - } else { - System.out.println("新增委托失败"); - } - - } - } - return R.ok("已经为每个案件创建了 一些 委托"); - } - @GetMapping("/get/quantity/for/Inspection") @ApiOperation(value = "送检系统统计当前用户(机构)送检且已受理的所有检材数量", notes = "送检系统统计当前用户(机构)送检且已受理的所有检材数量") public R> getQuantityForInspection(HttpServletRequest httpServletRequest) { 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 cf13c63..5f2e5ce 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 @@ -204,6 +204,9 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl entrustIds = entrustmentList.stream().map(Entrustment::getId).collect(Collectors.toList()); + if (CollUtil.isEmpty(entrustIds)) { + throw new CheckedException("没有查询到符合条件的委托信息!"); + } // 获取检材信息, 排序的原因是需要数据是有序的 List materialList = entrustmentIdentificationMaterialService.list( Wrappers.lambdaQuery() @@ -851,8 +854,13 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl resultData = this.getResultData(excelDTO);