From a4ee8b2e144ae1118ff714554911b7d34705416e Mon Sep 17 00:00:00 2001 From: zhuo <2089219845@qq.com> Date: 星期三, 07 五月 2025 17:45:52 +0800 Subject: [PATCH] 导出添加自定义签名功能 --- cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java | 397 +++++-------------------------------------------------- 1 files changed, 41 insertions(+), 356 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..08556d3 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,10 @@ 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.ruoyi.framework.exception.ErrorException; +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,7 +29,9 @@ 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.Paths; import java.util.ArrayList; @@ -39,7 +45,7 @@ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 鏈嶅姟瀹炵幇绫� * </p> * - * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃 + * @author * @since 2024-11-05 08:58:39 */ @Service @@ -48,376 +54,55 @@ @Resource private ProcessReportMapper processReportMapper; - - - @Value("${wordUrl}") - private String wordUrl; + @Value("${file.path}") + private String imgUrl; @Resource private UserMapper userMapper; @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) { + 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()); - } - String signatoryName = name.stream().collect(Collectors.joining(",")); - processReport.setSignatoryName(signatoryName); - } - //鐢熸垚妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃 - 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); + 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); - 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++; - } + // 绛炬敹浜虹敓鎴愬浘鐗� + processReport.setSignatoryRender(StringUtils.isNotBlank(processReport.getSignatory()) + ? Pictures.ofStream(SignatureImageUtil.saveImageToFile(processReport.getSignatory())).create() : null); } - Integer finalIndex = index1; - XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render( + + // 鑾峰彇璺緞 + 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(); + } 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