From 1a7ba7297852585462bbb0784e19d58c99057006 Mon Sep 17 00:00:00 2001 From: zt Date: Tue, 12 Aug 2025 21:38:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E8=B5=84=EF=BC=8C=E6=8F=90=E8=B5=84?= =?UTF-8?q?=E6=B8=85=E5=8D=95=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 -> 12731 bytes .../resources/template/收集资料清单模板.docx | Bin 33280 -> 13125 bytes .../design/constant/DesDesignConstant.java | 31 ++++- .../controller/DesExtractController.java | 12 ++ .../design/domain/DesDesignChange.java | 5 + .../DesCollectCatalogueWordDto.java | 2 - .../DesDesignChangeCreateReq.java | 5 + .../DesDesignChangeUpdateReq.java | 5 + .../DesDesignExtendDetailDto.java | 50 ++++++++ .../vo/designchange/DesDesignChangeVo.java | 6 + .../design/service/IDesExtractService.java | 6 + .../service/impl/DesCollectServiceImpl.java | 2 + .../impl/DesDesignChangeServiceImpl.java | 19 +++- .../service/impl/DesExtractServiceImpl.java | 107 ++++++++++++++++++ 14 files changed, 243 insertions(+), 7 deletions(-) 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/dto/designchange/DesDesignExtendDetailDto.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..67381aa621008acfb1c69c1dc1a2bd03d64a7144 GIT binary patch literal 12731 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 UR04BDutN;K2 literal 0 HcmV?d00001 diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/template/收集资料清单模板.docx b/xinnengyuan/ruoyi-admin/src/main/resources/template/收集资料清单模板.docx index d096183f58f2e69a620572a5198d771072851b97..a7d2e2335e8d2727b7d8a0c06ccc8e099762bd5b 100644 GIT binary patch literal 13125 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 DqS8)j diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesDesignConstant.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesDesignConstant.java index 1413b4fe..8f3a48de 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesDesignConstant.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesDesignConstant.java @@ -3,6 +3,7 @@ package org.dromara.design.constant; import org.dromara.common.core.utils.DateUtils; import org.dromara.design.domain.DesCollect; import org.dromara.design.domain.DesDesignChange; +import org.dromara.design.domain.DesExtract; import java.text.SimpleDateFormat; @@ -22,6 +23,10 @@ public interface DesDesignConstant { */ String DESIGN_COLLECT_TEMPLATE_PATH = "template/收集资料清单模板.docx"; + /** + * 提资清单模版路径 + */ + String DESIGN_EXTRACT_TEMPLATE_PATH = "template/互相提交资料清单模板.docx"; /** * 设计变更申请单文件路径 @@ -29,10 +34,15 @@ public interface DesDesignConstant { String DESIGN_CHANGE_FILE_URL = "docs/design/change/"; /** - * 设计变更申请单文件路径 + * 收集资料清单文件路径 */ String DESIGN_COLLECT_FILE_URL = "docs/design/collect/"; + /** + * 提资清单文件路径 + */ + String DESIGN_EXTRACT_FILE_URL = "docs/design/extract/"; + /** * 设计变更申请单文件名 */ @@ -63,6 +73,23 @@ public interface DesDesignConstant { */ static String getDesignCollectFileName(DesCollect desCollect) { String createDate = DateUtils.formatDate(desCollect.getCreateTime()); - return String.format("设计变更申请单(%s).docx", createDate); + return String.format("收集清单(%s).docx", createDate); + } + + + /** + * 提资清单路径 + */ + static String getDesignExtractFileUrl(DesExtract desExtract) { + String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(desExtract.getUpdateTime()); + return String.format("%s%s/%s", DESIGN_EXTRACT_FILE_URL, desExtract.getId(), timestamp); + } + + /** + * 提资清单文件名 + */ + static String getDesignExtractFileName(DesExtract desExtract) { + String createDate = DateUtils.formatDate(desExtract.getCreateTime()); + return String.format("提资清单(%s).docx", createDate); } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesExtractController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesExtractController.java index 0813031b..c9c39518 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesExtractController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesExtractController.java @@ -113,4 +113,16 @@ public class DesExtractController extends BaseController { public R batchAddOrUpdate(@RequestBody DesExtractBatchDto dto) { return R.ok(desExtractService.batchAddOrUpdate(dto)); } + + + + /** + * 清单导出 + */ + @SaCheckPermission("design:extract:export") + @Log(title = "提资清单", businessType = BusinessType.EXPORT) + @PostMapping("/exportWord") + public void exportWordById(Long id, HttpServletResponse response){ + desExtractService.exportWordById(id, response); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDesignChange.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDesignChange.java index e55005ef..80c7f899 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDesignChange.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDesignChange.java @@ -109,4 +109,9 @@ public class DesDesignChange extends BaseEntity { */ private String remark; + /** + * 额外内容 + */ + private String detail; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/desCollect/DesCollectCatalogueWordDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/desCollect/DesCollectCatalogueWordDto.java index 1e559713..a8d03e85 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/desCollect/DesCollectCatalogueWordDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/desCollect/DesCollectCatalogueWordDto.java @@ -5,8 +5,6 @@ import lombok.Data; @Data public class DesCollectCatalogueWordDto { - - private Integer num; private String catalogueName; private String remark; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeCreateReq.java index 3f6def44..f7a6ac1c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeCreateReq.java @@ -98,4 +98,9 @@ public class DesDesignChangeCreateReq implements Serializable { */ private String remark; + /** + * 额外参数 + */ + private DesDesignExtendDetailDto extendDetail; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeUpdateReq.java index 3eab45b5..52d67be8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeUpdateReq.java @@ -98,4 +98,9 @@ public class DesDesignChangeUpdateReq implements Serializable { */ private String remark; + /** + * 额外参数 + */ + private DesDesignExtendDetailDto extendDetail; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignExtendDetailDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignExtendDetailDto.java new file mode 100644 index 00000000..9b42708f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignExtendDetailDto.java @@ -0,0 +1,50 @@ +package org.dromara.design.domain.dto.designchange; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * @author lilemy + * @date 2025/7/3 18:48 + */ +@Data +public class DesDesignExtendDetailDto implements Serializable { + + + /** + * 子项名称 + */ + private String subName; + + /** + * 设计阶段 + */ + private String designPhase; + + /** + * 原设计处置(1-原图作废,2-原图保留,部分修改,3-原图保留,补充设计) + */ + private String designDisposal; + + /** + * 变更类别(1-重大,2-一般) + */ + private String changeCategory; + + /** + * 实施程序(1-建设单位重新申报初步设计审批,2-建设单位送原施工图审查机构审查、建设主管部门备案后交付实施;,3-建设单位确认后交付实施) + */ + private String ImpProcedure; + + /** + * 涉及专业 + */ + private String involvingProfessions; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/designchange/DesDesignChangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/designchange/DesDesignChangeVo.java index 09687388..093dcb9a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/designchange/DesDesignChangeVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/designchange/DesDesignChangeVo.java @@ -3,6 +3,7 @@ package org.dromara.design.domain.vo.designchange; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.design.domain.DesDesignChange; +import org.dromara.design.domain.dto.designchange.DesDesignExtendDetailDto; import org.dromara.system.domain.vo.SysOssVo; import java.io.Serial; @@ -129,4 +130,9 @@ public class DesDesignChangeVo implements Serializable { */ private Date createTime; + /** + * 额外参数 + */ + private DesDesignExtendDetailDto extendDetail; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesExtractService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesExtractService.java index cd258fbf..33c36e77 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesExtractService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesExtractService.java @@ -1,5 +1,6 @@ package org.dromara.design.service; +import jakarta.servlet.http.HttpServletResponse; import org.dromara.design.domain.dto.desExtract.DesExtractBatchDto; import org.dromara.design.domain.vo.DesExtractVo; import org.dromara.design.domain.bo.DesExtractBo; @@ -75,4 +76,9 @@ public interface IDesExtractService extends IService{ * 批量添加或更新提资清单 */ Long batchAddOrUpdate(DesExtractBatchDto dto); + + /** + * 导出Word + */ + void exportWordById(Long id, HttpServletResponse response); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesCollectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesCollectServiceImpl.java index 0ab9a247..4c1df76c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesCollectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesCollectServiceImpl.java @@ -219,6 +219,8 @@ public class DesCollectServiceImpl extends ServiceImpl itemList = extractCatalogueService.list(Wrappers. + lambdaQuery().eq(DesExtractCatalogue::getExtractId, id)); + DesCollectWordDto data = this.getReplacementDto(desExtract, itemList); + // 生成文件 + try (InputStream is = getClass().getClassLoader().getResourceAsStream(DesDesignConstant.DESIGN_EXTRACT_TEMPLATE_PATH)) { + if (is == null) { + throw new ServiceException("模板文件不存在"); + } + LoopRowTableRenderPolicy hackLoopTableRenderPolicy = new LoopRowTableRenderPolicy(); + Configure config = Configure.builder().bind("items", hackLoopTableRenderPolicy).build(); + XWPFTemplate template = XWPFTemplate.compile(is, config); + template.render(data); + // 创建目标目录 + if (!Files.exists(targetDir)) { + Files.createDirectories(targetDir); + } + // 组合目标文件名 + String fileName = DesDesignConstant.getDesignExtractFileName(desExtract); + // 保存修改后的文件 + try (FileOutputStream fos = new FileOutputStream(targetDir.resolve(fileName).toFile())) { + template.write(fos); + } + template.close(); + } catch (IOException e) { + throw new OssException("生成Word文件失败,错误信息: " + e.getMessage()); + } + } + // 设置响应头,返回ZIP文件 + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); + try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) { + DocumentUtil.zipDirectory(targetDir, targetDir, zos); + zos.flush(); + } catch (Exception e) { + throw new OssException("生成ZIP文件失败,错误信息: " + e.getMessage()); + } + } + + /** + * 根据实体获取替换数据 + */ + private DesCollectWordDto getReplacementDto(DesExtract desExtract, List items) { + DesCollectWordDto dto = new DesCollectWordDto(); + BeanUtils.copyProperties(desExtract, dto); + dto.setProjectName(projectService.getById(desExtract.getProjectId()).getProjectName()); + dto.setMajorName(dictService.getDictLabel("des_user_major", desExtract.getUserMajor())); + + // 明细项信息 + List dtoItems = new ArrayList<>(); + for (DesExtractCatalogue desc : items) { + DesCollectCatalogueWordDto itemDto = new DesCollectCatalogueWordDto(); + BeanUtils.copyProperties(desc, itemDto); + dtoItems.add(itemDto); + } + dto.setItems(dtoItems); + return dto; + } + + + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1'