From edf0d1a5db3f6d3943f8db5e02e540f26e6b5cba Mon Sep 17 00:00:00 2001 From: zt Date: Sat, 25 Oct 2025 17:10:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/设计输入资料清单及评审表.docx | Bin 0 -> 13773 bytes .../main/resources/template/设计验证表.docx | Bin 0 -> 14370 bytes .../SubConstructionUserQueryReq.java | 3 + .../impl/SubConstructionUserServiceImpl.java | 2 + .../BusDrawingreviewReceiptsController.java | 110 ++++++++++++++++++ .../controller/DesCollectFileController.java | 107 ++++++++++++++++- .../domain/vo/DesCollectFileWordVo.java | 15 +++ 7 files changed, 233 insertions(+), 4 deletions(-) create mode 100644 xinnengyuan/ruoyi-admin/src/main/resources/template/设计输入资料清单及评审表.docx create mode 100644 xinnengyuan/ruoyi-admin/src/main/resources/template/设计验证表.docx create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesCollectFileWordVo.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/template/设计输入资料清单及评审表.docx b/xinnengyuan/ruoyi-admin/src/main/resources/template/设计输入资料清单及评审表.docx new file mode 100644 index 0000000000000000000000000000000000000000..216875d87f842621d7f9179adb2128569f7b54c7 GIT binary patch literal 13773 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 mKkw7uc^!Xiz5XZgZGtHlIMs3 literal 0 HcmV?d00001 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java index 549b363f..946d51c1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java @@ -101,4 +101,7 @@ public class SubConstructionUserQueryReq implements Serializable { */ private String userId; + + private String phone; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java index 8e76bc75..f9f52e75 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java @@ -209,8 +209,10 @@ public class SubConstructionUserServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(); // 从对象中取值 String userName = req.getUserName(); + String phone = req.getPhone(); // 模糊查询 + lqw.like(StringUtils.isNotBlank(phone), SubConstructionUser::getPhone, phone); lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName); lqw.isNull(SubConstructionUser::getProjectId); lqw.isNull(SubConstructionUser::getTeamId); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusDrawingreviewReceiptsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusDrawingreviewReceiptsController.java index 9e53b4e6..60ad7583 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusDrawingreviewReceiptsController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusDrawingreviewReceiptsController.java @@ -1,17 +1,40 @@ package org.dromara.design.controller; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import cn.hutool.core.util.StrUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.design.domain.BusDrawingreviewReceipts; +import org.dromara.design.domain.DesCollectFile; +import org.dromara.design.domain.DesDesignChange; import org.dromara.design.domain.bo.DesUserBo; +import org.dromara.design.domain.dto.designchange.DesDesignExtendDetailDto; +import org.dromara.design.domain.vo.DesCollectFileWordVo; import org.dromara.design.domain.vo.DesUserVo; +import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; +import org.dromara.design.service.IDesDesignChangeService; import org.dromara.design.service.IDesUserService; +import org.dromara.project.domain.BusProject; import org.dromara.project.domain.vo.project.BusSubProjectVo; import org.dromara.project.service.IBusProjectService; +import org.dromara.system.service.ISysDictDataService; +import org.dromara.system.service.ISysUserService; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -44,6 +67,12 @@ public class BusDrawingreviewReceiptsController extends BaseController { private final IDesUserService desUserService; + private final IDesDesignChangeService desDesignChangeService; + + private final ISysDictDataService dictDataService; + + private final ISysUserService userService; + /** * 查询设计-图纸评审验证列表 */ @@ -132,4 +161,85 @@ public class BusDrawingreviewReceiptsController extends BaseController { return R.ok(desUserService.queryList(bo)); } + + private static final String TEMPLATE_PATH = "template/设计验证表.docx"; + @PostMapping("/downloadWord") + public void generateDesignLeaderDoc(Long id, HttpServletResponse response) { + OutputStream outputStream = null; + try { + // 1. 调用Service生成目标模板的Word字节流 + byte[] docBytes = generateDocBytes(id); + + // 2. 配置响应头:确保前端正确下载(避免中文乱码、指定文件类型) + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); // 二进制流类型 + // 下载文件名:格式为“[项目名]-设计负责人任命通知单.docx”(此处用projectId拼接,真实场景可从数据中获取项目名) + String downloadFileName = URLEncoder.encode( + "设计验证表.docx", + "UTF-8" + ); + response.setHeader("Content-Disposition", "attachment;filename=" + downloadFileName); + response.setContentLength(docBytes.length); // 设置响应体长度(优化下载体验) + + // 3. 将Word字节流写入响应 + outputStream = response.getOutputStream(); + outputStream.write(docBytes); + outputStream.flush(); + + } catch (Exception e) { + e.printStackTrace(); + // 异常处理:返回500错误状态码 + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } finally { + // 关闭流,避免资源泄漏 + if (outputStream != null) { + try { + outputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + public byte[] generateDocBytes(Long id) throws Exception { + // -------------------------- 步骤1:按projectId查询项目数据(模拟真实业务) -------------------------- + // 实际场景替换为数据库查询(如调用DAO获取项目名称、负责人等) + DesDesignChangeVo desDesignChangeVo = desDesignChangeService.queryById(id); + BusDrawingreviewReceipts receipts = busDrawingreviewReceiptsService.lambdaQuery() + .eq(BusDrawingreviewReceipts::getDrawingreviewId, id) + .last("limit 1") + .one(); + DesDesignExtendDetailDto extendDetail = desDesignChangeVo.getExtendDetail(); + String s = dictDataService.selectDictLabel("des_user_major", receipts.getProfessional()); + String designerName = null; + if(StrUtil.isNotBlank(receipts.getDesigner())){ + Long userId = Long.parseLong(receipts.getDesigner()); + designerName= userService.queryNameById(userId); + } + + Map placeholderData = new HashMap<>(); + placeholderData.put("projectName", receipts.getProjectName()); + placeholderData.put("subName",extendDetail.getSubName()); + placeholderData.put("stage", receipts.getStage()); + placeholderData.put("professionalName", s); + placeholderData.put("volume", receipts.getVolume()); + placeholderData.put("designerName", designerName); + placeholderData.put("verificationOpinion", receipts.getVerificationOpinion()); + placeholderData.put("executionOpinion", receipts.getExecutionOpinion()); + // -------------------------- 步骤2:用poi-tl加载目标模板并替换占位符 -------------------------- + // 读取resources下的“设计项目负责人任命通知单.docx”模板 + ClassPathResource templateResource = new ClassPathResource(TEMPLATE_PATH); + try (InputStream templateIs = templateResource.getInputStream(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + + XWPFTemplate template = XWPFTemplate.compile(templateIs).render(placeholderData); + + // -------------------------- 步骤3:将生成的文档写入字节流 -------------------------- + template.write(outputStream); + template.close(); // 关闭模板资源 + return outputStream.toByteArray(); + } + } + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesCollectFileController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesCollectFileController.java index d81700be..036294ef 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesCollectFileController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesCollectFileController.java @@ -1,15 +1,31 @@ package org.dromara.design.controller; -import java.util.List; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.util.*; +import java.util.stream.Collectors; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.design.domain.DesCollectFile; import org.dromara.design.domain.bo.DesCollectFileBo; import org.dromara.design.domain.dto.ExportDto; +import org.dromara.design.domain.dto.designchange.DesDesignExtendDetailDto; import org.dromara.design.domain.vo.DesCollectFileVo; +import org.dromara.design.domain.vo.DesCollectFileWordVo; +import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; import org.dromara.design.service.IDesCollectFileService; +import org.dromara.project.domain.BusProject; +import org.dromara.project.service.IBusProjectService; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -39,6 +55,8 @@ public class DesCollectFileController extends BaseController { private final IDesCollectFileService desCollectFileService; + private final IBusProjectService projectService; + /** * 查询收资文件列表 */ @@ -106,7 +124,6 @@ public class DesCollectFileController extends BaseController { return toAjax(desCollectFileService.deleteWithValidByIds(List.of(ids), true)); } - /** * 上传资料文件 */ @@ -119,10 +136,92 @@ public class DesCollectFileController extends BaseController { return toAjax(desCollectFileService.addFile(file, catalogueId, projectId)); } - - @PostMapping("/exportZip") public void exportZip(ExportDto dto, HttpServletResponse response) throws Exception { desCollectFileService.exportAsZip(dto, response); } + + private static final String TEMPLATE_PATH = "template/设计输入资料清单及评审表.docx"; + @PostMapping("/downloadWord") + public void generateDesignLeaderDoc(Long projectId, HttpServletResponse response) { + OutputStream outputStream = null; + try { + // 1. 调用Service生成目标模板的Word字节流 + byte[] docBytes = generateDocBytes(projectId); + + // 2. 配置响应头:确保前端正确下载(避免中文乱码、指定文件类型) + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); // 二进制流类型 + // 下载文件名:格式为“[项目名]-设计负责人任命通知单.docx”(此处用projectId拼接,真实场景可从数据中获取项目名) + String downloadFileName = URLEncoder.encode( + "设计输入资料清单及评审表.docx", + "UTF-8" + ); + response.setHeader("Content-Disposition", "attachment;filename=" + downloadFileName); + response.setContentLength(docBytes.length); // 设置响应体长度(优化下载体验) + + // 3. 将Word字节流写入响应 + outputStream = response.getOutputStream(); + outputStream.write(docBytes); + outputStream.flush(); + + } catch (Exception e) { + e.printStackTrace(); + // 异常处理:返回500错误状态码 + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } finally { + // 关闭流,避免资源泄漏 + if (outputStream != null) { + try { + outputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + public byte[] generateDocBytes(Long projectId) throws Exception { + // -------------------------- 步骤1:按projectId查询项目数据(模拟真实业务) -------------------------- + // 实际场景替换为数据库查询(如调用DAO获取项目名称、负责人等) + List list = desCollectFileService.lambdaQuery() + .eq(DesCollectFile::getProjectId, projectId).list(); + + List files = new ArrayList<>(); + int i = 1; + for (DesCollectFile desCollectFile : list) { + DesCollectFileWordVo desCollectFileWordVo = new DesCollectFileWordVo(); + desCollectFileWordVo.setNum(i); + i++; + desCollectFileWordVo.setFileName(desCollectFile.getFileName()); + files.add(desCollectFileWordVo); + } + + BusProject project = projectService.getById(projectId); + + + Map placeholderData = new HashMap<>(); + placeholderData.put("projectName", project.getProjectName()); + placeholderData.put("files",files); + // -------------------------- 步骤2:用poi-tl加载目标模板并替换占位符 -------------------------- + // 读取resources下的“设计项目负责人任命通知单.docx”模板 + ClassPathResource templateResource = new ClassPathResource(TEMPLATE_PATH); + try (InputStream templateIs = templateResource.getInputStream(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + + Configure config = Configure.builder() + .bind("files", policy).build(); + + XWPFTemplate template = XWPFTemplate.compile(templateIs, config).render(placeholderData); + + // -------------------------- 步骤3:将生成的文档写入字节流 -------------------------- + template.write(outputStream); + template.close(); // 关闭模板资源 + return outputStream.toByteArray(); + } + } + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesCollectFileWordVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesCollectFileWordVo.java new file mode 100644 index 00000000..2ded510b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesCollectFileWordVo.java @@ -0,0 +1,15 @@ +package org.dromara.design.domain.vo; + +import lombok.Data; + +@Data +public class DesCollectFileWordVo { + + private Integer num; + + private String fileName; + + private String opinion; + + +}