From d8b5536c53c7eddd0c6705d63babeaea005944b0 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 06 三月 2025 18:07:31 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/xiaochen991015/xizang --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java | 106 ++++++++++++++++++++++++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java | 1 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java | 98 +++++++++++++++++------- 6 files changed, 179 insertions(+), 32 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java index bdd80b0..e38938d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java @@ -331,7 +331,6 @@ } String url = wordUtil.generatePdf("/template", "1_yzj_租赁合同.xml", templateParam, "租赁合同", "E:\\"); - System.out.println(url); res.add(url); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java index c786d9b..9c274d7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java @@ -12,6 +12,7 @@ import java.io.*; import java.net.URL; import java.nio.file.Files; +import java.util.concurrent.TimeUnit; @Slf4j @Component @@ -23,44 +24,85 @@ * * @param url */ - public String wordToPdf(String url,String filePath, String fileName) { +// public String wordToPdf(String url,String filePath, String fileName) { +// try { +// DocumentType documentType = DocumentType.DOC; +// if(url.contains(".docx")){ +// documentType = DocumentType.DOCX; +// } +// if(url.contains(".doc")){ +// documentType = DocumentType.DOC; +// } +// if(url.contains(".xlsx")){ +// documentType = DocumentType.XLSX; +// }else { +// if(url.contains(".xls")){ +// documentType = DocumentType.XLS; +// } +// } +// InputStream inputStream = new URL(url).openStream(); +// ByteArrayOutputStream stream = new ByteArrayOutputStream(); +// IConverter converter = LocalConverter.builder().build(); +// converter.convert(inputStream) +// .as(documentType) +// .to(stream) +// .as(DocumentType.PDF).execute(); +// +// //上传图片 +// byte2File(stream.toByteArray(),filePath + "/pdf",fileName.substring(0,fileName.lastIndexOf(".")) + ".pdf"); +// MultipartFile multipartFile = convertToMultipartFile(stream,fileName.substring(0,fileName.lastIndexOf(".")) ); +// String s = tencentCosUtil.upLoadFile(multipartFile,"/wordToPdf"); +// +// stream.close(); +// inputStream.close(); +// return s; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// } + + public String wordToPdf(String url, String filePath, String fileName) { try { DocumentType documentType = DocumentType.DOC; - if(url.contains(".docx")){ + if (url.contains(".docx")) { documentType = DocumentType.DOCX; - } - if(url.contains(".doc")){ + } else if (url.contains(".doc")) { documentType = DocumentType.DOC; - } - if(url.contains(".xlsx")){ + } else if (url.contains(".xlsx")) { documentType = DocumentType.XLSX; - }else { - if(url.contains(".xls")){ - documentType = DocumentType.XLS; - } + } else if (url.contains(".xls")) { + documentType = DocumentType.XLS; } - InputStream inputStream = new URL(url).openStream(); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - IConverter converter = LocalConverter.builder().build(); - converter.convert(inputStream) - .as(documentType) - .to(stream) - .as(DocumentType.PDF).execute(); - //上传图片 - byte2File(stream.toByteArray(),filePath + "/pdf",fileName.substring(0,fileName.lastIndexOf(".")) + ".pdf"); - MultipartFile multipartFile = convertToMultipartFile(stream,fileName.substring(0,fileName.lastIndexOf(".")) ); - String s = tencentCosUtil.upLoadFile(multipartFile,"/wordToPdf"); + // Ensure the URL has a protocol part + if (!url.startsWith("file://") && !url.startsWith("http://") && !url.startsWith("https://")) { + url = "file://" + url; + } - stream.close(); - inputStream.close(); - return s; + // 使用LibreOffice进行转换 + ProcessBuilder pb = new ProcessBuilder( + "soffice", + "--headless", + "--convert-to", "pdf", + "--outdir", new File(filePath+ "/pdf"+fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf").getParent(), + filePath+fileName + ); + Process process = pb.start(); + + // 等待转换完成 + int exitCode = process.waitFor(); + if (exitCode == 0) { + System.out.println("PDF转换成功!"); + } else { + System.out.println("PDF转换失败!"); + } + return ""; } catch (Exception e) { e.printStackTrace(); + throw new RuntimeException("Failed to generate PDF: " + e.getMessage(), e); } - return null; } - public static MultipartFile convertToMultipartFile(ByteArrayOutputStream baos, String fileName) throws IOException { @@ -209,10 +251,10 @@ } public String test(String fileName){ - String url = "file:///E:\\"+fileName; + String url = "file:///usr/local/project/file/"+fileName; // String filePath = "E:\\qiyeweixin\\WXWork\\1688855207501340\\Cache\\File\\2024-09"; // String fileName = "专业技术工作总结.docx";4 - String filePath = "E:\\"; + String filePath = "/usr/local/project/file/"; String s = wordToPdf(url, filePath, fileName); System.err.println(s); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java new file mode 100644 index 0000000..990e621 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java @@ -0,0 +1,106 @@ +//package com.ruoyi.web.controller.tool; +// +//import org.apache.poi.xwpf.usermodel.*; +//import java.io.*; +//import java.time.LocalDateTime; +//import java.time.format.DateTimeFormatter; +// +//public class WordPdfGenerator { +// +// // 示例数据类 +// public static class UserData { +// private String name; +// private String id; +// private String department; +// private LocalDateTime createTime; +// +// public UserData(String name, String id, String department) { +// this.name = name; +// this.id = id; +// this.department = department; +// this.createTime = LocalDateTime.now(); +// } +// +// // getter方法省略 +// } +// +// public static void generateDocument(UserData userData, String outputPath) { +// try (XWPFDocument document = new XWPFDocument()) { +// // 创建标题 +// XWPFParagraph title = document.createParagraph(); +// title.setAlignment(ParagraphAlignment.CENTER); +// XWPFRun titleRun = title.createRun(); +// titleRun.setText("用户信息表"); +// titleRun.setBold(true); +// titleRun.setFontSize(20); +// titleRun.setFontFamily("宋体"); +// +// // 添加空行 +// document.createParagraph(); +// +// // 创建表格 +// XWPFTable table = document.createTable(5, 2); +// table.setWidth("100%"); +// +// // 设置表格数据 +// setCellText(table, 0, "姓名", userData.name); +// setCellText(table, 1, "ID", userData.id); +// setCellText(table, 2, "部门", userData.department); +// setCellText(table, 3, "创建时间", +// userData.createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); +// +// // 保存Word文档 +// String wordFile = outputPath + ".docx"; +// try (FileOutputStream out = new FileOutputStream(wordFile)) { +// document.write(out); +// } +// +// // 转换为PDF +// convertToPdf(wordFile, outputPath + ".pdf"); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// private static void setCellText(XWPFTable table, int row, String label, String value) { +// XWPFTableRow tableRow = table.getRow(row); +// tableRow.getCell(0).setText(label); +// tableRow.getCell(1).setText(value); +// } +// +// private static void convertToPdf(String wordPath, String pdfPath) { +// try { +// // 使用LibreOffice进行转换 +// ProcessBuilder pb = new ProcessBuilder( +// "soffice", +// "--headless", +// "--convert-to", "pdf", +// "--outdir", new File(pdfPath).getParent(), +// wordPath +// ); +// Process process = pb.start(); +// +// // 等待转换完成 +// int exitCode = process.waitFor(); +// if (exitCode == 0) { +// System.out.println("PDF转换成功!"); +// } else { +// System.out.println("PDF转换失败!"); +// } +// +// // 删除临时Word文件 +// new File(wordPath).delete(); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// public static void main(String[] args) { +// // 示例使用 +// UserData userData = new UserData("张三", "EMP001", "技术部"); +// String outputPath = "E:\\"; +// generateDocument(userData, outputPath); +// } +//} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java index 73a6b1f..2241179 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java @@ -651,11 +651,10 @@ } case CATEGORY3: { // 合同提前终止审批 - int submitStatus = status == 0 ? 4 : (status == 1 ? 6 : 5); + int submitStatus = status == 0 ? 4 : (status == 1 ? 7 : 5); contractService.updateContractAuditStatus(processParameter.getString("projectId"), submitStatus); // 生成验收记录 TContract contract = contractService.getById(processParameter.getString("projectId")); - contract.setStatus("7"); TCheckAcceptRecord tCheckAcceptRecord = new TCheckAcceptRecord(); tCheckAcceptRecord.setContractId(contract.getId()); tCheckAcceptRecord.setHouseId(contract.getHouseId()); @@ -667,7 +666,6 @@ int size = checkAcceptRecordMapper.selectList(new LambdaQueryWrapper<TCheckAcceptRecord>() .likeRight(TCheckAcceptRecord::getAcceptanceTime, LocalDate.now())).size(); tCheckAcceptRecord.setCode(replace.substring(2) + String.format("%03d", size + 1)); - checkAcceptRecordMapper.insert(tCheckAcceptRecord); // 将所有未缴费账单设置未已失效 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java index cbefcad..51145a8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java @@ -1365,6 +1365,7 @@ sysUserMap = new HashMap<>(); } for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + processTaskListVO.setStatus(processTaskListVO.getTaskState() == 10 ? "2" : processTaskListVO.getTaskState().toString()); processTaskListVO.setTaskId(processTaskListVO.getId()); SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); if (Objects.nonNull(sysUser)) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java index 6d2af5c..097518b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java @@ -36,6 +36,7 @@ private Date createTime; private String status; + private Integer taskState; private String taskId; -- Gitblit v1.7.1