This commit is contained in:
ls
2025-07-12 23:56:44 +08:00
parent a4965dbb9b
commit 272c9bcda7
2 changed files with 105 additions and 12 deletions

View File

@@ -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<Experiment, IExperimen
dto.setSupervisorName(ex.getSupervisorName());
dto.setReportCount(ex.getExperimentReportList().size() + "");
List<ExperimentRating> 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<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(ex.getId());
//辐照过程
List<RadiationProcessExportDTO> detailList = new ArrayList<>();
@@ -699,10 +719,44 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
//update-end--Author:liusq Date:20210126 for图片导出报错ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS, exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, resultList);
List<String> 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<Experiment> 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<RadiationProcessExportDTO> detailList, RadiationProcessExportDTO dto) {
if (dto != null) {
detailList.add(dto);
@@ -718,13 +772,13 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
List<ExperimentSampleInfo> 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<Experiment, IExperimen
detail.setTotalMeasurementRate(maxRate.isPresent() ? String.valueOf(maxRate.getAsDouble()) : "");
List<ExperimentIrradiationBoard> 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();

View File

@@ -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<RadiationProcessExportDTO> radiationProcessList;