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 c28ce8f..10b44f7 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 @@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.*; +import java.util.stream.Collectors; /** * @Description: 试验管理 @@ -116,6 +117,18 @@ public class ExperimentController extends JeecgController sampleInfoList = experiment.getSampleInfoList(); + List irradiationBoardList = experiment.getIrradiationBoardList(); + List deviationConditionList = experiment.getDeviationConditionList(); + Set sampleList = sampleInfoList.stream().map(v -> v.getSampleModel()).collect(Collectors.toUnmodifiableSet()); + Set boardList = irradiationBoardList.stream().map(v -> v.getSampleModel()).collect(Collectors.toUnmodifiableSet()); + Set conditionList = deviationConditionList.stream().map(v -> v.getSampleModel()).collect(Collectors.toUnmodifiableSet()); + if (!sampleList.equals(boardList)) { + return Result.error("辐照板信息不匹配!"); + } + if (!sampleList.equals(conditionList)) { + return Result.error("偏置条件信息不匹配!"); + } experiment.setStatus(ExperimentStatus.PRE_TEST); experimentService.saveWithDetail(experiment); @@ -181,6 +194,19 @@ public class ExperimentController extends JeecgController sampleInfoList = experiment.getSampleInfoList(); + List irradiationBoardList = experiment.getIrradiationBoardList(); + List deviationConditionList = experiment.getDeviationConditionList(); + Set sampleList = sampleInfoList.stream().map(v -> v.getSampleModel()).collect(Collectors.toUnmodifiableSet()); + Set boardList = irradiationBoardList.stream().map(v -> v.getSampleModel()).collect(Collectors.toUnmodifiableSet()); + Set conditionList = deviationConditionList.stream().map(v -> v.getSampleModel()).collect(Collectors.toUnmodifiableSet()); + if (!sampleList.equals(boardList)) { + return Result.error("辐照板信息不匹配!"); + } + if (!sampleList.equals(conditionList)) { + return Result.error("偏置条件信息不匹配!"); + } + experimentService.saveWithDetail(experiment); ExperimentLog experimentLog = new ExperimentLog(); experimentLog.setExperimentId(experiment.getId()); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentSampleInfoController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentSampleInfoController.java index 563592e..5461b1e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentSampleInfoController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentSampleInfoController.java @@ -64,6 +64,8 @@ public class ExperimentSampleInfoController extends JeecgController customeRuleMap = new HashMap<>(); // 自定义 sampleModel 字段的查询规则为:RIGHT_LIKE customeRuleMap.put("sampleModel", QueryRuleEnum.RIGHT_LIKE); + customeRuleMap.put("sampleType", QueryRuleEnum.RIGHT_LIKE); + customeRuleMap.put("sampleName", QueryRuleEnum.RIGHT_LIKE); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experimentSampleInfo, req.getParameterMap(), customeRuleMap); List pageList = experimentSampleInfoService.list(queryWrapper); @@ -153,7 +155,7 @@ public class ExperimentSampleInfoController extends JeecgController docTempalteMap = new HashMap<>(); + @Autowired + private ISysUserService sysUserService; + + @Autowired + private IClientService clientService; + + @Autowired + private IExperimentTestProcessService experimentTestProcessService; + @Autowired + private ITestStandardsService testStandardsService; + + static Map docTempalteMap = new HashMap<>(); static { //辐照试验计划表 @@ -49,8 +67,11 @@ public class ExperimentDocServiceImpl extends ServiceImpl maps = new HashMap<>(); - maps.put("title", "辐照试验计划表"); + TestStandards testStandards = new TestStandards(); + testStandards.setAttachment(""); + Path lastPathEle = PathUtil.getLastPathEle(Path.of(Optional.ofNullable(testStandards).map(TestStandards::getAttachment).orElse("")) + .getFileName()); + System.out.println(lastPathEle.toString()); //generateExperimentDoc("20241028号实验", "辐照试验计划表", maps); } @@ -72,19 +93,79 @@ public class ExperimentDocServiceImpl extends ServiceImpl params = assembleParams(experimentId, fileName); - XWPFDocument doc = WordExportUtil.exportWord07(absolutePath, params); - FileOutputStream fos = new FileOutputStream(outputFile); - doc.write(fos); - fos.close(); - String path = MinioUtil.upload(FileUtil.getInputStream(outputFile), - "experiment_doc/" + experimentId + "/" + version + "/" + experiment.getName() + "-" + fileName + ".docx"); - return path; + XWPFDocument document = WordExportUtil.exportWord07(absolutePath, params); + + List headers = document.getHeaderList(); + + // 遍历所有节,确保每个节的页眉都添加了页码 + for (XWPFHeader h : headers) { + // 添加页码到每个节的页眉 + addPageNumberToHeader("报告编号:" + experiment.getExperimentNo(), h); + } + + try (FileOutputStream out = new FileOutputStream("/Users/lise/" + fileName + ".docx")) { + document.write(out); + } + document.close(); + //String path = MinioUtil.upload(FileUtil.getInputStream(outputFile), + // "experiment_doc/" + experimentId + "/" + version + "/" + experiment.getName() + "-" + fileName + ".docx"); + return "path"; } catch (Exception e) { log.error(e.getMessage()); + e.printStackTrace(); return null; } } + private static void addPageNumberToHeader(String left, XWPFHeader header) { + + // 创建一个新的段落用于页码 + XWPFParagraph paragraph = header.createParagraph(); + + // 设置段落右对齐 + CTPPr pPr = paragraph.getCTP().addNewPPr(); + pPr.addNewJc().setVal(STJc.BOTH); + + // 添加页码文本 + // 添加文本“第” + XWPFRun run = paragraph.createRun(); + run.setText(left); + // 添加制表符(用于分隔左侧固定字符串和右侧页码) + run.addTab(); + + run = paragraph.createRun(); + run.setText("第 "); + + // 插入当前页码字段 + run = paragraph.createRun(); + run.getCTR().addNewFldChar().setFldCharType(org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType.BEGIN); + run.getCTR().addNewInstrText().setStringValue("PAGE"); + run.getCTR().addNewFldChar().setFldCharType(org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType.SEPARATE); + run.getCTR().addNewFldChar().setFldCharType(org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType.END); + + // 添加文本“页,共” + run = paragraph.createRun(); + run.setText(" 页,共 "); + + // 插入总页数字段 + run = paragraph.createRun(); + run.getCTR().addNewFldChar().setFldCharType(org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType.BEGIN); + run.getCTR().addNewInstrText().setStringValue("NUMPAGES"); + run.getCTR().addNewFldChar().setFldCharType(org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType.SEPARATE); + run.getCTR().addNewFldChar().setFldCharType(org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType.END); + + // 添加文本“页(含封面)” + run = paragraph.createRun(); + run.setText(" 页(含封面)"); + + // 设置制表符的对齐方式为右对齐 + CTTabs tabs = pPr.addNewTabs(); + CTTabStop tabStop = tabs.addNewTab(); + tabStop.setVal(STTabJc.RIGHT); // 右对齐 + tabStop.setPos(BigInteger.valueOf(8000)); // 设置制表符位置(单位:twips,1 cm = 567 twips) + + } + private Map assembleParams(String experimentId, String type) { switch (type) { case "辐照试验计划表": @@ -107,20 +188,37 @@ public class ExperimentDocServiceImpl extends ServiceImpl assembleSybg(String experimentId) { Experiment experiment = experimentService.getById(experimentId); + experimentService.fetchExperimentDetail(experiment); + if (Objects.isNull(experiment)) { + return new HashMap<>(); + } ExperimentReport latestReport = experimentReportService.getLatestReport(experimentId); Map params = new HashMap<>(); + if (Objects.nonNull(latestReport)) { + params.put("审核人员姓名", Optional.ofNullable(sysUserService.getById(latestReport.getAuditor())).map(SysUser::getRealname) + .orElse("")); + params.put("校对人员姓名", Optional.ofNullable(sysUserService.getById(latestReport.getProofreader())).map(SysUser::getRealname) + .orElse("")); + params.put("批准人员姓名", Optional.ofNullable(sysUserService.getById(latestReport.getConfirmer())).map(SysUser::getRealname) + .orElse("")); + } params.put("试验报告名称", experiment.getName()); params.put("试验编号", experiment.getExperimentNo()); - params.put("编制人员姓名", experiment.getExperimentNo()); - params.put("校对人员姓名", experiment.getExperimentNo()); - params.put("审核人员姓名", experiment.getExperimentNo()); - params.put("批准人员姓名", experiment.getExperimentNo()); - params.put("最后批准完成的日期", experiment.getExperimentNo()); - params.put("委托方单位名称", experiment.getExperimentNo()); - params.put("委托方单位地址", experiment.getExperimentNo()); - params.put("标准代号", experiment.getExperimentNo()); - params.put("标准名称", experiment.getExperimentNo()); - params.put("依据的文件名称", experiment.getExperimentNo()); + params.put("编制人员姓名", Optional.ofNullable(sysUserService.getUserByName(experiment.getCreateBy())).map(SysUser::getRealname) + .orElse("")); + params.put("最后批准完成的日期", DateUtils.formatDate(latestReport.getUpdateTime(), "yyyy年MM月dd日")); + Client client = clientService.getOne(new LambdaQueryWrapper().eq(Client::getName, experiment.getClientName()), false); + params.put("委托方单位名称", Optional.ofNullable(client).map(Client::getName).orElse("")); + params.put("委托方单位地址", Optional.ofNullable(client).map(Client::getAddress).orElse("")); + List experimentTestProcesses = experimentTestProcessService.getByExperimentId(experiment.getId()); + if (CollUtil.isNotEmpty(experimentTestProcesses)) { + String testStandardsId = experimentTestProcesses.get(0).getTestStandardsId(); + Optional testStandards = Optional.ofNullable(testStandardsService.getById(testStandardsId)); + params.put("标准代号", testStandards.map(TestStandards::getCode).orElse("")); + params.put("标准名称", testStandards.map(TestStandards::getName).orElse("")); + Path lastPathEle = PathUtil.getLastPathEle(Path.of(testStandards.map(TestStandards::getAttachment).orElse("")).getFileName()); + params.put("依据的文件名称", lastPathEle.toString()); + } params.put("样品名称", experiment.getExperimentNo()); params.put("样品型号", experiment.getExperimentNo()); params.put("批次", experiment.getExperimentNo()); diff --git a/templates/sybg.docx b/templates/sybg.docx index 542123d..56b6795 100644 Binary files a/templates/sybg.docx and b/templates/sybg.docx differ