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 00000000..67381aa6 Binary files /dev/null and b/xinnengyuan/ruoyi-admin/src/main/resources/template/互相提交资料清单模板.docx differ diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/template/收集资料清单模板.docx b/xinnengyuan/ruoyi-admin/src/main/resources/template/收集资料清单模板.docx index d096183f..a7d2e233 100644 Binary files a/xinnengyuan/ruoyi-admin/src/main/resources/template/收集资料清单模板.docx and b/xinnengyuan/ruoyi-admin/src/main/resources/template/收集资料清单模板.docx differ 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'