From 82ce59218139d9fefeae7b9e5fbc88b499ff023f Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 08 十月 2026 13:35:06 +0800
Subject: [PATCH] feat(inspect): 新增新聚检验订单编辑功能并优化报告生成流程 - 新增 updateNewJuInsOrder 接口支持新聚检验订单修改 - 增加文件上传大小限制至200MB,请求大小限制至400MB - 在设备信息中新增出厂编号字段显示 - 优化温湿度处理逻辑,报告中仅显示温度信息 - 新增印章管理功能,支持MA标志章、报告章和骑缝章配置 - 完善检验报告生成流程,增加多种报告类型常量定义 - 优化附件上传功能,增加空值检查和返回值处理 - 调整委托编号生成逻辑,完善新聚订单可编辑性判断 - 更新CNAS流程中报告编号使用正式报告编号替代委托编号
---
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java | 543 +++++++++++++++++++-----------------------------------
1 files changed, 191 insertions(+), 352 deletions(-)
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
index df3defe..42c93eb 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
@@ -3,6 +3,7 @@
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
@@ -13,7 +14,15 @@
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.SignatureImageUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.mapper.InsOrderMapper;
+import com.ruoyi.inspect.mapper.InsReportMapper;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsReport;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.process.dto.ProcessReportDto;
import com.ruoyi.process.mapper.ProcessReportMapper;
import com.ruoyi.process.pojo.ProcessReport;
import com.ruoyi.process.service.ProcessReportService;
@@ -25,13 +34,18 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
import java.io.*;
+import java.net.URLEncoder;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -39,7 +53,7 @@
* 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 鏈嶅姟瀹炵幇绫�
* </p>
*
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @author
* @since 2024-11-05 08:58:39
*/
@Service
@@ -48,376 +62,201 @@
@Resource
private ProcessReportMapper processReportMapper;
-
-
+ @Value("${file.path}")
+ private String imgUrl;
@Value("${wordUrl}")
private String wordUrl;
@Resource
private UserMapper userMapper;
+ @Resource
+ private InsReportMapper insReportMapper;
+
+ @Resource
+ private InsOrderMapper insOrderMapper;
+
@Override
- public IPage<ProcessReport> pageProcessReport(Page page, ProcessReport processReport) {
- //todo 浠呯湅鎴�
- IPage<ProcessReport> processReportIPage = processReportMapper.pageProcessReport(page, QueryWrappers.queryWrappers(processReport));
-// for (ProcessReport record : processReportIPage.getRecords()) {
-// List<String> name = new ArrayList<>();
-// for (String s : record.getSignatory().split(",")) {
-// User user = userMapper.selectById(Integer.parseInt(s));
-// name.add(user.getName());
-// }
-// String signatoryName = name.stream().collect(Collectors.joining(","));
-// record.setSignatoryName(signatoryName);
-// }
+ public IPage<ProcessReportDto> pageProcessReport(Page page, ProcessReportDto processReport) {
+ // #21 鎵撳紑鍒楄〃鏃讹紝鑷姩甯﹀嚭宸查�氳繃瀹℃壒锛堟壒鍑嗙姸鎬�=鎵瑰噯锛変絾灏氭湭鐧昏鐨勬楠屽崟
+ autoBringOutApproved();
+ IPage<ProcessReportDto> processReportIPage = processReportMapper.pageProcessReport(page, QueryWrappers.queryWrappers(processReport));
return processReportIPage;
}
- @Override
- public String exportProcessReport() {
- List<ProcessReport> processReports = processReportMapper.selectList(null);
- for (ProcessReport processReport : processReports) {
- List<String> name = new ArrayList<>();
- for (String s : processReport.getSignatory().split(",")) {
- User user = userMapper.selectById(Integer.parseInt(s));
- name.add(user.getName());
+ /**
+ * 鎵弿宸叉壒鍑嗕絾灏氭湭杩涘叆鎶ュ憡缁撴灉鐧昏琛ㄧ殑妫�楠屾姤鍛婏紝鑷姩鐢熸垚寰呯櫥璁拌褰曪紙浠ユ姤鍛婄紪鍙峰幓閲嶏紝骞傜瓑锛夈��
+ */
+ private void autoBringOutApproved() {
+ List<InsReport> approved = insReportMapper.selectList(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getIsRatify, 1)
+ .eq(InsReport::getIsPass, 1));
+ if (approved.isEmpty()) {
+ return;
+ }
+ Set<String> existing = this.list(Wrappers.<ProcessReport>lambdaQuery()
+ .select(ProcessReport::getInsReportCode)).stream()
+ .map(ProcessReport::getInsReportCode)
+ .filter(StringUtils::isNotBlank)
+ .collect(Collectors.toCollection(HashSet::new));
+ for (InsReport report : approved) {
+ String code = report.getCode();
+ if (StringUtils.isBlank(code) || existing.contains(code)) {
+ continue;
}
- String signatoryName = name.stream().collect(Collectors.joining(","));
- processReport.setSignatoryName(signatoryName);
+ ProcessReport pr = new ProcessReport();
+ pr.setInsReportCode(code);
+ pr.setInspectionOrderId(report.getInsOrderId());
+ if (report.getRatifyTime() != null) {
+ pr.setSendTime(report.getRatifyTime().toLocalDate());
+ }
+ if (report.getInsOrderId() != null) {
+ InsOrder order = insOrderMapper.selectById(report.getInsOrderId());
+ if (order != null) {
+ pr.setSend(order.getCompany());
+ pr.setMethod(getReportDeliveryName(order));
+ }
+ }
+ this.save(pr);
+ existing.add(code);
}
- //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
- String url;
- try {
- InputStream inputStream = this.getClass().getResourceAsStream("/static/report-deal.docx");
- File file = File.createTempFile("temp", ".tmp");
- OutputStream outputStream = new FileOutputStream(file);
- IOUtils.copy(inputStream, outputStream);
- url = file.getAbsolutePath();
- } catch (FileNotFoundException e) {
- throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- ConfigureBuilder builder = Configure.builder();
- builder.useSpringEL(true);
+ }
- List<Map<String, Object>> reportList = new ArrayList<>();
- Integer index = 1;
- Integer index1 = 1;
- for (int c = 0; c < processReports.size(); c++) {
- //瓒呰繃15琛屾崲椤�
- if (c % 15 == 0) {
- List<RowRenderData> rows = new ArrayList<>();
- //琛ㄦ牸鐨勮鏁�
- for (int i = 0; i < 16; i++) {
- RowRenderData rowRenderData = new RowRenderData();
- RowStyle rowStyle = new RowStyle();
- rowStyle.setHeight(40);
- rowRenderData.setRowStyle(rowStyle);
- List<CellRenderData> cells = new ArrayList<>();
- //琛ㄦ牸鐨勫垪鏁�
- for (int j = 0; j < 10; j++) {
- CellRenderData cellRenderData = new CellRenderData();
- CellStyle cellStyle = new CellStyle();
- cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
- cellRenderData.setCellStyle(cellStyle);
- List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
- ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
- ParagraphStyle paragraphStyle = new ParagraphStyle();
- paragraphStyle.setAlign(ParagraphAlignment.CENTER);
- paragraphRenderData.setParagraphStyle(paragraphStyle);
- List<RenderData> renderData = new ArrayList<>();
- TextRenderData textRenderData = new TextRenderData();
- Style style = new Style();
- style.setFontFamily("瀹嬩綋");
- style.setColor("000000");
- textRenderData.setStyle(style);
- if (i == 0) {
- //绗竴琛�
- if (j == 0) {
- //绗竴鍒楀簭鍙�
- textRenderData.setText("搴忓彿@No.");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 1) {
- //绗簩鍒�
- textRenderData.setText("妫�楠屾姤鍛婄紪鍙稝Inspection report number");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 2) {
- //绗笁鍒�
- textRenderData.setText("椤垫暟@Pages");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 3) {
- //绗洓鍒�
- textRenderData.setText("鍙戦�佷唤鏁癅Number of copies sent");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 4) {
- //绗簲鍒�
- textRenderData.setText("鍙戝線浣曞@Where to send to");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 5) {
- //绗叚鍒�
- textRenderData.setText("鍙戦�佹柟寮廆Send method");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 6) {
- //绗竷鍒�
- textRenderData.setText("鍙戦�佹棩鏈烜Date sent");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }else if (j == 7) {
- //绗叓鍒�
- textRenderData.setText("鍙戦�佷汉@Sender");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }else if (j == 8) {
- //绗節鍒�
- textRenderData.setText("绛炬敹浜篅Signatory");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }else{
- //绗崄鍒�
- textRenderData.setText("澶囨敞@Remark");
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- }
- else {
- //鍏朵粬琛�
- if (j == 0) {
- //绗竴鍒�
- try{
- String insReportCode = processReports.get((i-1) + (index1 - 1) * 20).getInsReportCode();
- textRenderData.setText(index + "");
- } catch (Exception e) {
- textRenderData.setText("");
- }
- index++;
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- } else if (j == 1) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getInsReportCode());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 2) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getPages());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 3) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getNumber());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 4) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSend());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 5) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getMethod());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 6) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSendTime()+"");
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 7) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSendUserName());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else if (j == 8) {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSignatoryName());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- else {
- try{
- textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getRemark());
- } catch (Exception e) {
- textRenderData.setText("");
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- }
- }
- rowRenderData.setCells(cells);
- if (rowRenderData.getCells().size() != 0) {
- rows.add(rowRenderData);
- }
- }
- TableRenderData tableRenderData = new TableRenderData();
- tableRenderData.setRows(rows);
- int countSize = tableRenderData.getRows().get(0).getCells().size();
- for (RowRenderData row : tableRenderData.getRows()) {
- if (row.getCells().size() != countSize) {
- throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
- }
- }
- TableStyle tableStyle = new TableStyle();
- tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
- tableStyle.setAlign(TableRowAlign.CENTER);
- BorderStyle borderStyle = new BorderStyle();
- borderStyle.setColor("000000");
- borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
- borderStyle.setSize(14);
- tableStyle.setLeftBorder(borderStyle);
- tableStyle.setTopBorder(borderStyle);
- tableStyle.setRightBorder(borderStyle);
- tableStyle.setBottomBorder(borderStyle);
- tableRenderData.setTableStyle(tableStyle);
- Map<String, Object> table = new HashMap<>();
- table.put("report", tableRenderData);
- table.put("index1", index1);
- reportList.add(table);
- index1++;
+ private String getReportDeliveryName(InsOrder order) {
+ if (order.getReportDelivery() != null) {
+ switch (order.getReportDelivery()) {
+ case 1:
+ return "鑷彇";
+ case 2:
+ return "蹇��";
+ case 3:
+ return "鐢靛瓙浼犻��";
+ default:
+ break;
}
}
- Integer finalIndex = index1;
- XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ // 鍏煎灏氭湭缁存姢 report_delivery 鐨勫巻鍙插鎵樺崟銆�
+ return order.getSend() != null && order.getSend() == 1 ? "鑷彇" : "鍏朵粬";
+ }
+
+ @Override
+ public void downloadStampedReport(Integer id, String format, HttpServletResponse response) {
+ if (id == null) {
+ throw new ErrorException("鎶ュ憡缁撴灉涓嶈兘涓虹┖");
+ }
+ ProcessReport processReport = getById(id);
+ if (processReport == null) {
+ throw new ErrorException("鎶ュ憡缁撴灉涓嶅瓨鍦�");
+ }
+ if (StringUtils.isBlank(processReport.getInsReportCode())
+ && processReport.getInspectionOrderId() == null) {
+ throw new ErrorException("璇ヨ褰曟湭鍏宠仈妫�楠屾姤鍛婏紝鏃犳硶涓嬭浇");
+ }
+
+ String downloadFormat = StringUtils.isBlank(format) ? "pdf" : format.trim().toLowerCase();
+ if (!"pdf".equals(downloadFormat) && !"word".equals(downloadFormat)) {
+ throw new ErrorException("涓嬭浇鏍煎紡涓嶆纭�");
+ }
+
+ com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<InsReport> query =
+ Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getIsRatify, 1)
+ .eq(StringUtils.isNotBlank(processReport.getInsReportCode()),
+ InsReport::getCode, processReport.getInsReportCode())
+ .eq(processReport.getInspectionOrderId() != null,
+ InsReport::getInsOrderId, processReport.getInspectionOrderId())
+ .orderByDesc(InsReport::getId)
+ .last("limit 1");
+ InsReport report = insReportMapper.selectOne(query);
+ if (report == null) {
+ throw new ErrorException("鏈壘鍒板凡鎵瑰噯鐨勬姤鍛婏紝鏃犳硶涓嬭浇鏈夌珷鎶ュ憡");
+ }
+
+ String fileUrl;
+ String extension;
+ String contentType;
+ if ("word".equals(downloadFormat)) {
+ fileUrl = StringUtils.isNotBlank(report.getUrlS()) ? report.getUrlS() : report.getUrl();
+ extension = ".docx";
+ contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+ } else {
+ fileUrl = report.getTempUrlPdf();
+ extension = ".pdf";
+ contentType = "application/pdf";
+ }
+ if ("pdf".equals(downloadFormat) && StringUtils.isBlank(fileUrl)) {
+ String reportUrl = StringUtils.isNotBlank(report.getUrlS()) ? report.getUrlS() : report.getUrl();
+ if (StringUtils.isNotBlank(reportUrl) && reportUrl.toLowerCase().endsWith(".docx")) {
+ fileUrl = reportUrl.substring(0, reportUrl.length() - 5) + ".pdf";
+ }
+ }
+ if (StringUtils.isBlank(fileUrl) || !fileUrl.replace('\\', '/').startsWith("/word/")) {
+ throw new ErrorException("鏈夌珷鎶ュ憡灏氭湭鐢熸垚锛岃鍏堝畬鎴愭姤鍛婃壒鍑�");
+ }
+
+ Path root = Paths.get(wordUrl).toAbsolutePath().normalize();
+ Path file = root.resolve(fileUrl.replace('\\', '/').substring("/word/".length())).normalize();
+ if (!file.startsWith(root) || !Files.isRegularFile(file)) {
+ throw new ErrorException("鏈夌珷鎶ュ憡鏂囦欢涓嶅瓨鍦紝璇烽噸鏂版壒鍑嗙敓鎴�");
+ }
+
+ try {
+ String filename = StringUtils.isNotBlank(processReport.getInsReportCode())
+ ? processReport.getInsReportCode() + extension : file.getFileName().toString();
+ String encodedName = URLEncoder.encode(filename, "UTF-8").replace("+", "%20");
+ response.setContentType(contentType);
+ response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedName);
+ response.setHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
+ response.setHeader("download-filename", encodedName);
+ response.setContentLengthLong(Files.size(file));
+ try (InputStream inputStream = Files.newInputStream(file);
+ OutputStream outputStream = response.getOutputStream()) {
+ IOUtils.copy(inputStream, outputStream);
+ outputStream.flush();
+ }
+ } catch (IOException e) {
+ throw new ErrorException("鏈夌珷鎶ュ憡涓嬭浇澶辫触");
+ }
+ }
+
+ @Override
+ public void exportProcessReport(ProcessReportDto dto, HttpServletResponse response) {
+ List<ProcessReportDto> processReports = processReportMapper.exportProcessReport();
+ for (ProcessReportDto processReport : processReports) {
+ // 鍙戦�佷汉鐢熸垚绛惧悕鍥剧墖
+ processReport.setSendUserRender(StringUtils.isNotBlank(processReport.getSendUserUrl())
+ ? Pictures.ofLocal(imgUrl + "/" + processReport.getSendUserUrl()).create() : null);
+
+ // 绛炬敹浜虹敓鎴愬浘鐗�
+ processReport.setSignatoryRender(StringUtils.isNotBlank(processReport.getSignatory())
+ ? Pictures.ofStream(SignatureImageUtil.saveImageToFile(processReport.getSignatory())).create() : null);
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-deal.docx");
+ Configure configure = Configure.builder()
+ .bind("reportList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
new HashMap<String, Object>() {{
- put("reportList", reportList);
+ put("reportList", processReports);
}});
- String name = UUID.randomUUID() + "_妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃" + ".docx";
try {
- template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
- } catch (IOException e) {
- throw new RuntimeException(e);
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
}
- //澶勭悊涓嫳鏂囨崲琛岀殑闂
- String path = wordUrl + "/" + name;
- try {
- FileInputStream stream1 = new FileInputStream(path);
- XWPFDocument document1 = new XWPFDocument(stream1);
- List<XWPFTable> xwpfTables1 = document1.getTables();
- for (int i = 0; i < xwpfTables1.size(); i++) {
- for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
- for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
- if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
- String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
- String[] split = text.split("@");
- xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
- XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
- XWPFRun run = xwpfParagraph.createRun();
- run.setText(split[0]);
- if (ObjectUtils.isNotNull(split[1])) {
- run.addBreak();
- run.setText(split[1]);
- }
- xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
- }
- }
- }
- }
- FileOutputStream fileOutputStream1 = new FileOutputStream(path);
- document1.write(fileOutputStream1);
- fileOutputStream1.close();
- } catch (FileNotFoundException e) {
- throw new RuntimeException(e);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- return name;
}
}
--
Gitblit v1.9.3