diff --git a/physical-base-core/pom.xml b/physical-base-core/pom.xml index 90d540d..4af7454 100644 --- a/physical-base-core/pom.xml +++ b/physical-base-core/pom.xml @@ -287,16 +287,6 @@ - - org.apache.poi - poi - 4.1.2 - - - org.apache.poi - poi-ooxml - 4.1.2 - org.jeecgframework.boot3 autopoi-web @@ -374,6 +364,16 @@ cn.hutool hutool-crypto - + + org.jeecgframework.boot3 + autopoi + 3.7.0 + compile + + + com.deepoove + poi-tl + 1.12.2 + \ No newline at end of file diff --git a/physical-launcher/src/main/resources/application-dev.yml b/physical-launcher/src/main/resources/application-dev.yml index afcc277..918c458 100644 --- a/physical-launcher/src/main/resources/application-dev.yml +++ b/physical-launcher/src/main/resources/application-dev.yml @@ -1,4 +1,5 @@ server: + ip: 47.102.126.67 port: 8080 undertow: # 平替 tomcat server.tomcat.max-swallow-siz, undertow该值默认为-1 diff --git a/physical-launcher/src/main/resources/application-prod.yml b/physical-launcher/src/main/resources/application-prod.yml index ebea8f3..d5045a7 100644 --- a/physical-launcher/src/main/resources/application-prod.yml +++ b/physical-launcher/src/main/resources/application-prod.yml @@ -1,4 +1,5 @@ server: + ip: 47.102.126.67 port: 8080 undertow: # 平替 tomcat server.tomcat.max-swallow-siz, undertow该值默认为-1 diff --git a/physical-module-system/physical-system-biz/pom.xml b/physical-module-system/physical-system-biz/pom.xml index 1656d31..eb4c853 100644 --- a/physical-module-system/physical-system-biz/pom.xml +++ b/physical-module-system/physical-system-biz/pom.xml @@ -14,20 +14,10 @@ - org.apache.poi - poi - 4.1.2 + com.deepoove + poi-tl + 1.12.2 - - org.apache.poi - poi-ooxml - 4.1.2 - - - - - - org.jeecgframework.boot physical-system-api diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentDocServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentDocServiceImpl.java index 425ffa5..63c9d65 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentDocServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentDocServiceImpl.java @@ -5,8 +5,12 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.PathUtil; +import com.alibaba.fastjson.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.data.Tables; +import com.deepoove.poi.data.style.BorderStyle; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.*; @@ -17,16 +21,17 @@ import org.jeecg.modules.database.mapper.ExperimentDocMapper; import org.jeecg.modules.database.service.*; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.ISysUserService; -import org.jeecgframework.poi.word.WordExportUtil; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.io.*; +import java.io.File; +import java.io.IOException; import java.math.BigInteger; import java.nio.file.Path; import java.util.*; +import java.util.stream.Collectors; /** * @Description: 试验文档 @@ -40,6 +45,8 @@ public class ExperimentDocServiceImpl extends ServiceImpl docTempalteMap = new HashMap<>(); @@ -94,20 +103,25 @@ public class ExperimentDocServiceImpl extends ServiceImpl params = assembleParams(experimentId, fileName); - XWPFDocument document = WordExportUtil.exportWord07(absolutePath, params); + XWPFTemplate render = XWPFTemplate.compile(absolutePath).render(params); + /* NiceXWPFDocument document = render.getXWPFDocument(); + //render + //.writeToFile(outputFile); + //XWPFDocument document = WordExportUtil.exportWord07(absolutePath, params); List headers = document.getHeaderList(); // 遍历所有节,确保每个节的页眉都添加了页码 for (XWPFHeader h : headers) { // 添加页码到每个节的页眉 - addPageNumberToHeader("报告编号:" + experiment.getExperimentNo(), h); + //addPageNumberToHeader("报告编号:" + experiment.getExperimentNo(), h); } try (FileOutputStream out = new FileOutputStream(outputFile)) { document.write(out); } - document.close(); + document.close();*/ + render.writeToFile(outputFile); String path = MinioUtil.upload(FileUtil.getInputStream(outputFile), "experiment_doc/" + experimentId + "/" + version + "/" + experiment.getName() + "-" + fileName + ".docx"); return path; @@ -213,33 +227,76 @@ public class ExperimentDocServiceImpl extends ServiceImpl experimentTestProcesses = experimentTestProcessService.getByExperimentId(experiment.getId()); if (CollUtil.isNotEmpty(experimentTestProcesses)) { - String testStandardsId = experimentTestProcesses.get(0).getTestStandardsId(); + ExperimentTestProcess experimentTestProcess = experimentTestProcesses.get(0); + String testStandardsId = experimentTestProcess.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()); + + String testParameters = experimentTestProcess.getTestParameters(); + if (StringUtils.isNotBlank(testParameters)) { + JSONArray jsonObject = JSON.parseArray(testParameters); + String collect = jsonObject.stream().map(v -> ((JSONObject) v).getString("name")).collect(Collectors.joining(",")); + params.put("测试参数", collect); + } + params.put("测试环境温度", experimentTestProcess.getEnvironmentalTemperature()); + params.put("测试环境湿度", experimentTestProcess.getEnvironmentalHumidity()); } - 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("注量率", 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()); + List sampleInfoList = experiment.getSampleInfoList(); + if (CollUtil.isNotEmpty(sampleInfoList)) { + for (int i = 0; i < sampleInfoList.size(); i++) { + ExperimentSampleInfo info = sampleInfoList.get(i); + params.put("table" + i, Tables.of( + new String[][] {new String[] {"试验样品名称", info.getSampleName(), "试验样品型号", info.getSampleModel()}, + new String[] {"批 次", info.getSampleBatch(), "试验样品编号", info.getSampleType()}, + new String[] {"生产厂家", info.getSampleManufacturer(), "试验样品数量", sampleInfoList.size() + ""}, + new String[] {"放置地点", "", "接收日期", ""},}).border(BorderStyle.DEFAULT).create()); + } + } + + params.put("试验日期", experiment.getStartDate() + " ~ " + experiment.getEndDate()); + params.put("负责人名称", experiment.getSupervisorName()); + params.put("剂量管理员名称", ""); + String operatorName = experiment.getExperimentUserList().stream().map(v -> v.getUserName()).collect(Collectors.joining(",")); + params.put("操作员名称", operatorName); + List radiationProcessList = experimentRadiationProcessService.getByExperimentId(experimentId); + if (CollUtil.isNotEmpty(radiationProcessList)) { + String name = radiationProcessList.stream().map(v -> v.getRadiationSource()).collect(Collectors.joining(",")); + params.put("辐射源名称", name); + String lv = radiationProcessList.stream().map(v -> v.getMeasurementRate()).collect(Collectors.joining(",")); + params.put("辐照注量率", lv); + params.put("累积注量点", ""); + String temp = radiationProcessList.stream().map(v -> v.getEnvironmentalTemperature()).collect(Collectors.joining(",")); + params.put("辐照环境温度", temp); + + } + params.put("辐照总注量", experiment.getExperimentNo()); + params.put("实际能量", experiment.getExperimentNo()); + + String imgUrls = latestReport.getImgUrls(); + if (!StringUtils.startsWith(imgUrls, "http")) { + imgUrls = "http://" + serverIp + imgUrls; + } + params.put("偏置原理图", imgUrls); + + List deviationEquipmentList = experiment.getDeviationEquipmentList(); + String[][] strings = new String[deviationEquipmentList.size() + 1][5]; + strings[0] = new String[] {"序号", "名称", "编号", "计量有效期", "备注"}; + + if (CollUtil.isNotEmpty(deviationEquipmentList)) { + for (int i = 0; i < deviationEquipmentList.size(); i++) { + ExperimentDeviationEquipment deviationEquipment = deviationEquipmentList.get(i); + strings[i + 1] = new String[] {(i + 1) + "", + Optional.ofNullable(deviationEquipment.getEquipmentName()).orElse(""), + Optional.ofNullable(deviationEquipment.getEquipmentNo()).orElse(""), + Optional.ofNullable(deviationEquipment.getMeasurementValidity()).orElse(""), + Optional.ofNullable(deviationEquipment.getRoomNo()).orElse(""), + }; + } + } + params.put("装置表格", Tables.of(strings).border(BorderStyle.DEFAULT).create()); return params; } diff --git a/pom.xml b/pom.xml index a80b864..0da1ca2 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ 3.11.0 3.2.2 1.4.9 - 1.4.11 + 3.7.0 8.5.7 1.4.0 1.6.1 @@ -72,6 +72,7 @@ physical-base-core physical-module-system physical-launcher + autopoi diff --git a/templates/sybg.docx b/templates/sybg.docx index 56b6795..281df3f 100644 Binary files a/templates/sybg.docx and b/templates/sybg.docx differ