From 272c9bcda70d801728251836a13980afe0a18f57 Mon Sep 17 00:00:00 2001 From: ls Date: Sat, 12 Jul 2025 23:56:44 +0800 Subject: [PATCH] update --- .../controller/ExperimentController.java | 74 ++++++++++++++++--- .../database/dto/ExperimentExportDTO.java | 43 ++++++++++- 2 files changed, 105 insertions(+), 12 deletions(-) diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java index 1222a20..4461325 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java @@ -3,6 +3,7 @@ package org.jeecg.modules.database.controller; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.core.util.StatusPrinter; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -37,9 +38,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.util.ReflectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -498,9 +501,26 @@ public class ExperimentController extends JeecgController experimentRatingList = ex.getExperimentRatingList(); - String rateStr = experimentRatingList.stream().map(v -> v.getRateUserName() + ":" + v.getTotalScore()).collect( - Collectors.joining("\n")); - dto.setRateUserAndScore(rateStr); + try { + for (int k = 0; k < experimentRatingList.size(); k++) { + ExperimentRating data = experimentRatingList.get(k); + + // 设置 rateUser1, rateUser2, rateUser3 + Field rateUserField = dto.getClass().getDeclaredField("rateUser" + (i + 1)); + rateUserField.setAccessible(true); + rateUserField.set(dto, data.getRateUserName()); + + // 设置 rateScore1, rateScore2, rateScore3 + Field rateScoreField = dto.getClass().getDeclaredField("rateScore" + (i + 1)); + rateScoreField.setAccessible(true); + rateScoreField.set(dto, data.getTotalScore()); + } + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + //String rateStr = experimentRatingList.stream().map(v -> v.getRateUserName() + ":" + v.getTotalScore()).collect( + // Collectors.joining("\n")); + //dto.setRateUserAndScore(rateStr); List radiationProcessList = experimentRadiationProcessService.getByExperimentId(ex.getId()); //辐照过程 List detailList = new ArrayList<>(); @@ -699,10 +719,44 @@ public class ExperimentController extends JeecgController fieldName = new ArrayList<>(); + int maxExperimentRatingListSize = getMaxExperimentRatingListSize(exportList); + + ReflectionUtils.doWithFields(ExperimentExportDTO.class, v -> { + String name = v.getName(); + if (!StringUtils.equals(name, "id") && !StringUtils.equals(name, "serialVersionUID")) { + if (StringUtils.startsWith(name, "rateUser")) { + String u = StrUtil.removePrefix(name, "rateUser"); + if (Integer.parseInt(u) <= maxExperimentRatingListSize) { + fieldName.add(name); + } + } else if (StringUtils.startsWith(name, "rateScore")) { + String u = StrUtil.removePrefix(name, "rateScore"); + if (Integer.parseInt(u) <= maxExperimentRatingListSize) { + fieldName.add(name); + } + } else { + fieldName.add(name); + } + } + }); + + mv.addObject(NormalExcelConstants.EXPORT_FIELDS, StrUtil.join(",", fieldName)); return mv; } + public static int getMaxExperimentRatingListSize(List exportList) { + int maxSize = 0; + for (Experiment experiment : exportList) { + List experimentRatingList = experiment.getExperimentRatingList(); // 假设有 getter 方法 + if (experimentRatingList != null) { + maxSize = Math.max(maxSize, experimentRatingList.size()); + } + } + return maxSize; + } + private void addIfNotEmpty(List detailList, RadiationProcessExportDTO dto) { if (dto != null) { detailList.add(dto); @@ -718,13 +772,13 @@ public class ExperimentController extends JeecgController sampleInfoList = radiationProcess.getSampleInfoList(); detail.setRadiateType(radiationProcess.getRadiationSource()); if (CollUtil.isNotEmpty(sampleInfoList)) { - detail.setSampleModel(sampleInfoList.stream().map(s -> s.getSampleModel()).collect(Collectors.joining(","))); - detail.setSampleType(sampleInfoList.stream().map(s -> s.getSampleType()).collect(Collectors.joining(","))); - detail.setSampleName(sampleInfoList.stream().map(s -> s.getSampleName()).collect(Collectors.joining(","))); + detail.setSampleModel(StrUtil.join(",", sampleInfoList.stream().map(s -> s.getSampleModel()).collect(Collectors.toSet()))); + detail.setSampleType(StrUtil.join(",", sampleInfoList.stream().map(s -> s.getSampleType()).collect(Collectors.toSet()))); + detail.setSampleName(StrUtil.join(",", sampleInfoList.stream().map(s -> s.getSampleName()).collect(Collectors.toSet()))); } - detail.setMeasurementRate( + detail.setMeasurementRate(StrUtil.join(",", xgy.stream().filter(v -> StringUtils.isNotBlank(v.getActualMeasurementRate())).map(v -> v.getActualMeasurementRate()) - .collect(Collectors.joining(","))); + .collect(Collectors.toSet()))); OptionalDouble maxRate = xgy.stream().map(obj -> obj.getActualMeasurementRate()) // 获取point字段 .filter(point -> StringUtils.isNotBlank(point)) .filter(str -> str.matches("-?\\d+(\\.\\d+)?")) // 只保留数字格式的字符串 @@ -733,8 +787,8 @@ public class ExperimentController extends JeecgController irradiationBoardList = experiment.getIrradiationBoardList(); if (CollUtil.isNotEmpty(irradiationBoardList)) { - detail.setSourceArea(irradiationBoardList.stream().filter(k -> StringUtils.isNotBlank(k.getSourceArea())) - .map(s -> s.getSourceArea()).collect(Collectors.joining(","))); + detail.setSourceArea(StrUtil.join(",", irradiationBoardList.stream().filter(k -> StringUtils.isNotBlank(k.getSourceArea())) + .map(s -> s.getSourceArea()).collect(Collectors.toSet()))); } //String measurementRate = radiationProcess.getMeasurementRate(); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/dto/ExperimentExportDTO.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/dto/ExperimentExportDTO.java index 11bc3d6..a831a90 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/dto/ExperimentExportDTO.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/dto/ExperimentExportDTO.java @@ -51,8 +51,47 @@ public class ExperimentExportDTO implements Serializable { private String supervisorName; @Excel(name = "已出报告份数", width = 15, needMerge = true) private String reportCount; - @Excel(name = "试验员及评分", width = 15, needMerge = true) - private String rateUserAndScore; + + @Excel(name = "试验员", width = 15, needMerge = true) + private String rateUser1; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore1; + @Excel(name = "试验员", width = 15, needMerge = true) + private String rateUser2; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore2; + @Excel(name = "试验员", width = 15, needMerge = true) + private String rateUser3; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore3; + @Excel(name = "试验员", width = 15, needMerge = true) + private String rateUser4; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore4; + @Excel(name = "试验员", width = 15, needMerge = true) + private String rateUser5; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore5; + + private String rateUser6; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore6; + + private String rateUser7; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore7; + + private String rateUser8; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore8; + + private String rateUser9; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore9; + + private String rateUser10; + @Excel(name = "评分", width = 15, needMerge = true) + private String rateScore10; //@ExcelCollection(name = "辐照过程") //private List radiationProcessList;