From 348ff6fc2b929c806153c930125066eb210b4577 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 3 Jul 2025 20:50:55 +0800 Subject: [PATCH] =?UTF-8?q?[add]=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=8C=89?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=86=E7=B1=BB=EF=BC=8C=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=B7=A5=E5=8D=95=E3=80=81=E4=B8=93=E9=A1=B9?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/设计变更申请单模版.docx | Bin 0 -> 13965 bytes .../design/constant/DesDesignConstant.java | 39 ++ .../constant/DesSpecialSchemeConstant.java | 24 + .../controller/DesDesignChangeController.java | 107 ++++ .../controller/DesDrawingController.java | 10 +- .../DesSpecialSchemeController.java | 94 ++++ .../design/domain/DesDesignChange.java | 112 ++++ .../org/dromara/design/domain/DesDrawing.java | 2 +- .../design/domain/DesSpecialScheme.java | 82 +++ .../DesDesignChangeCreateReq.java | 101 ++++ .../designchange/DesDesignChangeQueryReq.java | 66 +++ .../DesDesignChangeUpdateReq.java | 101 ++++ .../dto/drawing/DesDrawingCreateReq.java | 5 + .../dto/drawing/DesDrawingUpdateReq.java | 5 + .../DesSpecialSchemeCreateReq.java | 43 ++ .../DesSpecialSchemeQueryReq.java | 38 ++ .../DesSpecialSchemeUpdateReq.java | 43 ++ .../vo/designchange/DesDesignChangeVo.java | 132 +++++ .../domain/vo/drawing/DesDrawingVo.java | 14 +- .../vo/specialscheme/DesSpecialSchemeVo.java | 81 +++ .../design/enums/DesChangeReasonTypeEnum.java | 42 ++ .../design/mapper/DesDesignChangeMapper.java | 15 + .../design/mapper/DesSpecialSchemeMapper.java | 15 + .../service/IDesDesignChangeService.java | 105 ++++ .../design/service/IDesDrawingService.java | 10 +- .../service/IDesSpecialSchemeService.java | 97 ++++ .../impl/DesDesignChangeServiceImpl.java | 482 ++++++++++++++++++ .../service/impl/DesDrawingServiceImpl.java | 72 +-- .../impl/DesSpecialSchemeServiceImpl.java | 303 +++++++++++ .../mapper/design/DesDesignChangeMapper.xml | 7 + .../mapper/design/DesSpecialSchemeMapper.xml | 7 + .../controller/FlwDefinitionController.java | 19 +- .../workflow/domain/bo/FlowDefinitionBo.java | 25 + .../service/IFlwDefinitionService.java | 14 +- .../impl/FlwDefinitionServiceImpl.java | 28 +- xinnengyuan/script/sql/menuInitValue.sql | 40 ++ xinnengyuan/script/sql/xinnengyuan.sql | 52 +- 37 files changed, 2354 insertions(+), 78 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/constant/DesDesignConstant.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesSpecialSchemeConstant.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDesignChangeController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesSpecialSchemeController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDesignChange.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSpecialScheme.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeCreateReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeQueryReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeUpdateReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeCreateReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeQueryReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeUpdateReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/designchange/DesDesignChangeVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/specialscheme/DesSpecialSchemeVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/enums/DesChangeReasonTypeEnum.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesDesignChangeMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesSpecialSchemeMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDesignChangeService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesSpecialSchemeService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDesignChangeServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesSpecialSchemeServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesDesignChangeMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesSpecialSchemeMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowDefinitionBo.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..2b6dadc8712e3c2cf9b2c74820272715ce92cd74 GIT binary patch literal 13965 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 literal 0 HcmV?d00001 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 new file mode 100644 index 00000000..f9f7ee4d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesDesignConstant.java @@ -0,0 +1,39 @@ +package org.dromara.design.constant; + +import org.dromara.common.core.utils.DateUtils; +import org.dromara.design.domain.DesDesignChange; + +import java.text.SimpleDateFormat; + +/** + * @author lcj + * @date 2025/7/3 19:42 + */ +public interface DesDesignConstant { + + /** + * 设计变更申请单模版路径 + */ + String DESIGN_CHANGE_TEMPLATE_PATH = "template/设计变更申请单模版.docx"; + + /** + * 设计变更申请单文件路径 + */ + String DESIGN_CHANGE_FILE_URL = "docs/design/change/"; + + /** + * 设计变更申请单文件名 + */ + static String getDesignChangeFileUrl(DesDesignChange designChange) { + String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(designChange.getUpdateTime()); + return String.format("%s%s/%s", DESIGN_CHANGE_FILE_URL, designChange.getId(), timestamp); + } + + /** + * 设计变更申请单文件名 + */ + static String getDesignChangeFileName(DesDesignChange designChange) { + String createDate = DateUtils.formatDate(designChange.getCreateTime()); + return String.format("设计变更申请单(%s).docx", createDate); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesSpecialSchemeConstant.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesSpecialSchemeConstant.java new file mode 100644 index 00000000..64d8ecf2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/constant/DesSpecialSchemeConstant.java @@ -0,0 +1,24 @@ +package org.dromara.design.constant; + +/** + * @author lcj + * @date 2025/7/3 11:35 + */ +public interface DesSpecialSchemeConstant { + + /** + * 对象存储前缀 + */ + String OSS_PREFIX = "doc/design/special/scheme/"; + + /** + * 获取项目对象存储前缀 + * + * @param projectId 项目id + * @return 项目对象存储前缀 + */ + static String getProjectOssPrefix(Long projectId) { + return String.format("%s%s/", OSS_PREFIX, projectId); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDesignChangeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDesignChangeController.java new file mode 100644 index 00000000..8816b300 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDesignChangeController.java @@ -0,0 +1,107 @@ +package org.dromara.design.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.design.domain.dto.designchange.DesDesignChangeCreateReq; +import org.dromara.design.domain.dto.designchange.DesDesignChangeQueryReq; +import org.dromara.design.domain.dto.designchange.DesDesignChangeUpdateReq; +import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; +import org.dromara.design.service.IDesDesignChangeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 设计变更管理 + * + * @author lcj + * @date 2025-07-03 + */ +@Validated +@RestController +@RequestMapping("/design/designChange") +public class DesDesignChangeController extends BaseController { + + @Resource + private IDesDesignChangeService desDesignChangeService; + + /** + * 查询设计变更管理列表 + */ + @SaCheckPermission("design:designChange:list") + @GetMapping("/list") + public TableDataInfo list(DesDesignChangeQueryReq req, PageQuery pageQuery) { + return desDesignChangeService.queryPageList(req, pageQuery); + } + + /** + * 根据主键设计变更单 + */ + @SaCheckPermission("design:designChange:export") + @Log(title = "设计变更管理", businessType = BusinessType.EXPORT) + @PostMapping("/export/word") + public void exportWordById(@NotNull(message = "主键不能为空") Long id, + HttpServletResponse response) { + desDesignChangeService.exportWordById(id, response); + } + + /** + * 获取设计变更管理详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("design:designChange:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(desDesignChangeService.queryById(id)); + } + + /** + * 新增设计变更管理 + */ + @SaCheckPermission("design:designChange:add") + @Log(title = "设计变更管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DesDesignChangeCreateReq req) { + return R.ok(desDesignChangeService.insertByBo(req)); + } + + /** + * 修改设计变更管理 + */ + @SaCheckPermission("design:designChange:edit") + @Log(title = "设计变更管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DesDesignChangeUpdateReq req) { + return toAjax(desDesignChangeService.updateByBo(req)); + } + + /** + * 删除设计变更管理 + * + * @param ids 主键串 + */ + @SaCheckPermission("design:designChange:remove") + @Log(title = "设计变更管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(desDesignChangeService.deleteByIds(List.of(ids))); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDrawingController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDrawingController.java index 552dc2da..bcf9ea37 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDrawingController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesDrawingController.java @@ -5,7 +5,6 @@ import jakarta.annotation.Resource; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.EditGroup; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -19,7 +18,6 @@ import org.dromara.design.domain.vo.drawing.DesDrawingVo; import org.dromara.design.service.IDesDrawingService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -65,8 +63,8 @@ public class DesDrawingController extends BaseController { @Log(title = "图纸管理", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@RequestPart("file") MultipartFile file, DesDrawingCreateReq req) { - return R.ok(desDrawingService.insertByBo(file, req)); + public R add(@RequestBody DesDrawingCreateReq req) { + return R.ok(desDrawingService.insertByBo(req)); } /** @@ -76,8 +74,8 @@ public class DesDrawingController extends BaseController { @Log(title = "图纸管理", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody DesDrawingUpdateReq req) { - return toAjax(desDrawingService.updateByBo(req)); + public R edit(@RequestBody DesDrawingUpdateReq req) { + return R.ok(desDrawingService.updateByBo(req)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesSpecialSchemeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesSpecialSchemeController.java new file mode 100644 index 00000000..2d75d49e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesSpecialSchemeController.java @@ -0,0 +1,94 @@ +package org.dromara.design.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.design.domain.dto.specialscheme.DesSpecialSchemeCreateReq; +import org.dromara.design.domain.dto.specialscheme.DesSpecialSchemeQueryReq; +import org.dromara.design.domain.dto.specialscheme.DesSpecialSchemeUpdateReq; +import org.dromara.design.domain.vo.specialscheme.DesSpecialSchemeVo; +import org.dromara.design.service.IDesSpecialSchemeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 专项方案管理 + * + * @author lcj + * @date 2025-07-03 + */ +@Validated +@RestController +@RequestMapping("/design/specialScheme") +public class DesSpecialSchemeController extends BaseController { + + @Resource + private IDesSpecialSchemeService desSpecialSchemeService; + + /** + * 查询专项方案管理列表 + */ + @SaCheckPermission("design:specialScheme:list") + @GetMapping("/list") + public TableDataInfo list(DesSpecialSchemeQueryReq req, PageQuery pageQuery) { + return desSpecialSchemeService.queryPageList(req, pageQuery); + } + + /** + * 获取专项方案管理详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("design:specialScheme:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(desSpecialSchemeService.queryById(id)); + } + + /** + * 新增专项方案管理 + */ + @SaCheckPermission("design:specialScheme:add") + @Log(title = "专项方案管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@RequestBody DesSpecialSchemeCreateReq req) { + return R.ok(desSpecialSchemeService.insertByBo(req)); + } + + /** + * 修改专项方案管理 + */ + @SaCheckPermission("design:specialScheme:edit") + @Log(title = "专项方案管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DesSpecialSchemeUpdateReq req) { + return R.ok(desSpecialSchemeService.updateByBo(req)); + } + + /** + * 删除专项方案管理 + * + * @param ids 主键串 + */ + @SaCheckPermission("design:specialScheme:remove") + @Log(title = "专项方案管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(desSpecialSchemeService.deleteByIds(List.of(ids))); + } +} 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 new file mode 100644 index 00000000..dacbc2a3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDesignChange.java @@ -0,0 +1,112 @@ +package org.dromara.design.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 设计变更管理对象 des_design_change + * + * @author lcj + * @date 2025-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("des_design_change") +public class DesDesignChange extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 申请单编号 + */ + private String formNo; + + /** + * 工程名称 + */ + private String projectName; + + /** + * 提出单位 + */ + private String submitUnit; + + /** + * 专业 + */ + private String specialty; + + /** + * 提出日期 + */ + private Date submitDate; + + /** + * 卷册名称 + */ + private String volumeName; + + /** + * 卷册号 + */ + private String volumeNo; + + /** + * 附图 + */ + private String attachmentPic; + + /** + * 变更原因 + */ + private String changeReason; + + /** + * 变更内容 + */ + private String changeContent; + + /** + * 变更费用估算 + */ + private String costEstimation; + + /** + * 变更费用估算计算表 + */ + private String costEstimationFile; + + /** + * 变更文件 + */ + private String fileId; + + /** + * 审核状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDrawing.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDrawing.java index b0a59cf7..63e7d078 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDrawing.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesDrawing.java @@ -47,7 +47,7 @@ public class DesDrawing extends BaseEntity { /** * 文件访问路径 */ - private String fileUrl; + private Long fileUrl; /** * 文件类型(1过程图纸 2蓝图 3变更图纸) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSpecialScheme.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSpecialScheme.java new file mode 100644 index 00000000..9fb538c9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSpecialScheme.java @@ -0,0 +1,82 @@ +package org.dromara.design.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 专项方案管理对象 des_special_scheme + * + * @author lcj + * @date 2025-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("des_special_scheme") +public class DesSpecialScheme extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 版本号 + */ + private String versionNumber; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件访问路径 + */ + private Long fileUrl; + + /** + * 文件后缀 + */ + private String fileSuffix; + + /** + * 状态(0正常 1删除) + */ + private String fileStatus; + + /** + * 原文件名 + */ + private String originalName; + + /** + * 审核状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 删除时间 + */ + private Date deletedAt; + +} 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 new file mode 100644 index 00000000..5be1cce3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeCreateReq.java @@ -0,0 +1,101 @@ +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 lcj + * @date 2025/7/3 18:48 + */ +@Data +public class DesDesignChangeCreateReq implements Serializable { + + @Serial + private static final long serialVersionUID = -8811234168299834882L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 申请单编号 + */ + private String formNo; + + /** + * 工程名称 + */ + private String projectName; + + /** + * 提出单位 + */ + private String submitUnit; + + /** + * 专业 + */ + private String specialty; + + /** + * 提出日期 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date submitDate; + + /** + * 卷册名称 + */ + private String volumeName; + + /** + * 卷册号 + */ + private String volumeNo; + + /** + * 附图 + */ + private String attachmentPic; + + /** + * 变更原因 + */ + private String changeReason; + + /** + * 变更内容 + */ + private String changeContent; + + /** + * 变更费用估算 + */ + private String costEstimation; + + /** + * 变更费用估算计算表 + */ + private String costEstimationFile; + + /** + * 变更文件 + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeQueryReq.java new file mode 100644 index 00000000..9bd23b84 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeQueryReq.java @@ -0,0 +1,66 @@ +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 lcj + * @date 2025/7/3 18:48 + */ +@Data +public class DesDesignChangeQueryReq implements Serializable { + + @Serial + private static final long serialVersionUID = -270854871043405421L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 申请单编号 + */ + private String formNo; + + /** + * 工程名称 + */ + private String projectName; + + /** + * 提出单位 + */ + private String submitUnit; + + /** + * 专业 + */ + private String specialty; + + /** + * 提出日期 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date submitDate; + + /** + * 卷册名称 + */ + private String volumeName; + + /** + * 卷册号 + */ + private String volumeNo; + + /** + * 审核状态 + */ + private String status; + +} 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 new file mode 100644 index 00000000..ca0cf4f9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/designchange/DesDesignChangeUpdateReq.java @@ -0,0 +1,101 @@ +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 lcj + * @date 2025/7/3 18:49 + */ +@Data +public class DesDesignChangeUpdateReq implements Serializable { + + @Serial + private static final long serialVersionUID = 1764866203240580206L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 申请单编号 + */ + private String formNo; + + /** + * 工程名称 + */ + private String projectName; + + /** + * 提出单位 + */ + private String submitUnit; + + /** + * 专业 + */ + private String specialty; + + /** + * 提出日期 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date submitDate; + + /** + * 卷册名称 + */ + private String volumeName; + + /** + * 卷册号 + */ + private String volumeNo; + + /** + * 附图 + */ + private String attachmentPic; + + /** + * 变更原因 + */ + private String changeReason; + + /** + * 变更内容 + */ + private String changeContent; + + /** + * 变更费用估算 + */ + private String costEstimation; + + /** + * 变更费用估算计算表 + */ + private String costEstimationFile; + + /** + * 变更文件 + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingCreateReq.java index 9dc2ef15..7a1f3a9b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingCreateReq.java @@ -35,6 +35,11 @@ public class DesDrawingCreateReq implements Serializable { */ private String fileType; + /** + * 文件路径 + */ + private Long fileUrl; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingUpdateReq.java index 47053214..2bbbce1f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingUpdateReq.java @@ -30,6 +30,11 @@ public class DesDrawingUpdateReq implements Serializable { */ private String fileName; + /** + * 文件路径 + */ + private Long fileUrl; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeCreateReq.java new file mode 100644 index 00000000..fe4f3b44 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeCreateReq.java @@ -0,0 +1,43 @@ +package org.dromara.design.domain.dto.specialscheme; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/7/3 11:27 + */ +@Data +public class DesSpecialSchemeCreateReq implements Serializable { + + @Serial + private static final long serialVersionUID = 6963615629792446908L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 版本号 + */ + private String versionNumber; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件id + */ + private Long fileUrl; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeQueryReq.java new file mode 100644 index 00000000..5d544797 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeQueryReq.java @@ -0,0 +1,38 @@ +package org.dromara.design.domain.dto.specialscheme; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/7/3 11:28 + */ +@Data +public class DesSpecialSchemeQueryReq implements Serializable { + + @Serial + private static final long serialVersionUID = -6490770086658766211L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 状态(0正常 1删除) + */ + private String fileStatus; + + /** + * 原文件名 + */ + private String originalName; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeUpdateReq.java new file mode 100644 index 00000000..e3c075a0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/specialscheme/DesSpecialSchemeUpdateReq.java @@ -0,0 +1,43 @@ +package org.dromara.design.domain.dto.specialscheme; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/7/3 11:29 + */ +@Data +public class DesSpecialSchemeUpdateReq implements Serializable { + + @Serial + private static final long serialVersionUID = -6314226629118163829L; + + /** + * 主键id + */ + private Long id; + + /** + * 版本号 + */ + private String versionNumber; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件路径 + */ + private Long fileUrl; + + /** + * 备注 + */ + private String remark; + +} 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 new file mode 100644 index 00000000..d49746e4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/designchange/DesDesignChangeVo.java @@ -0,0 +1,132 @@ +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.system.domain.vo.SysOssVo; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 设计变更管理视图对象 des_design_change + * + * @author lcj + * @date 2025-07-03 + */ +@Data +@AutoMapper(target = DesDesignChange.class) +public class DesDesignChangeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 申请单编号 + */ + private String formNo; + + /** + * 工程名称 + */ + private String projectName; + + /** + * 提出单位 + */ + private String submitUnit; + + /** + * 专业 + */ + private String specialty; + + /** + * 提出日期 + */ + private Date submitDate; + + /** + * 卷册名称 + */ + private String volumeName; + + /** + * 卷册号 + */ + private String volumeNo; + + /** + * 附图 + */ + private String attachmentPic; + + /** + * 附图列表 + */ + private List attachmentPicList; + + /** + * 变更原因 + */ + private String changeReason; + + /** + * 变更内容 + */ + private String changeContent; + + /** + * 变更费用估算 + */ + private String costEstimation; + + /** + * 变更费用估算计算表 + */ + private String costEstimationFile; + + /** + * 变更费用估算计算表列表 + */ + private List costEstimationFileList; + + /** + * 变更文件 + */ + private String fileId; + + /** + * 变更文件 + */ + private SysOssVo file; + + /** + * 审核状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/drawing/DesDrawingVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/drawing/DesDrawingVo.java index 05afda18..72bbf3d8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/drawing/DesDrawingVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/drawing/DesDrawingVo.java @@ -3,9 +3,11 @@ package org.dromara.design.domain.vo.drawing; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.design.domain.DesDrawing; +import org.dromara.system.domain.vo.SysOssVo; import java.io.Serial; import java.io.Serializable; +import java.util.Date; /** @@ -44,7 +46,7 @@ public class DesDrawingVo implements Serializable { /** * 文件访问路径 */ - private String fileUrl; + private Long fileUrl; /** * 文件类型(1过程图纸 2蓝图 3变更图纸) @@ -56,6 +58,11 @@ public class DesDrawingVo implements Serializable { */ private String fileSuffix; + /** + * 文件 + */ + private SysOssVo file; + /** * 原文件名 */ @@ -76,4 +83,9 @@ public class DesDrawingVo implements Serializable { */ private String remark; + /** + * 创建时间 + */ + private Date createTime; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/specialscheme/DesSpecialSchemeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/specialscheme/DesSpecialSchemeVo.java new file mode 100644 index 00000000..696d7834 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/specialscheme/DesSpecialSchemeVo.java @@ -0,0 +1,81 @@ +package org.dromara.design.domain.vo.specialscheme; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.design.domain.DesSpecialScheme; +import org.dromara.system.domain.vo.SysOssVo; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 专项方案管理视图对象 des_special_scheme + * + * @author lcj + * @date 2025-07-03 + */ +@Data +@AutoMapper(target = DesSpecialScheme.class) +public class DesSpecialSchemeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 版本号 + */ + private String versionNumber; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件访问路径 + */ + private Long fileUrl; + + /** + * 文件后缀 + */ + private String fileSuffix; + + /** + * 原文件名 + */ + private String originalName; + + /** + * 文件 + */ + private SysOssVo file; + + /** + * 审核状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/enums/DesChangeReasonTypeEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/enums/DesChangeReasonTypeEnum.java new file mode 100644 index 00000000..ecf9aaa7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/enums/DesChangeReasonTypeEnum.java @@ -0,0 +1,42 @@ +package org.dromara.design.enums; + +import lombok.Getter; + +import java.util.Objects; + +/** + * @author lcj + * @date 2025/7/3 19:46 + */ +@Getter +public enum DesChangeReasonTypeEnum { + + LEAK("设计漏项", "1"), + IMPROVE("设计改进", "2"), + ERROR("设计差错", "3"), + INTERFACE("接口差错", "4"), + OWNER("业主要求", "5"), + CONTRACTOR("施工承包商要求", "6"), + CONFLICT("外部资料与最终情况不符", "7"), + OTHER("材料代用或其他", "8"); + + private final String text; + + private final String value; + + + DesChangeReasonTypeEnum(String text, String value) { + this.text = text; + this.value = value; + } + + // 根据 value 获取对应的 text + public static String getTextByValue(String value) { + for (DesChangeReasonTypeEnum type : values()) { + if (Objects.equals(type.getValue(), value)) { + return type.getText(); + } + } + return null; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesDesignChangeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesDesignChangeMapper.java new file mode 100644 index 00000000..6295bb40 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesDesignChangeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.design.mapper; + +import org.dromara.design.domain.DesDesignChange; +import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设计变更管理Mapper接口 + * + * @author lcj + * @date 2025-07-03 + */ +public interface DesDesignChangeMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesSpecialSchemeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesSpecialSchemeMapper.java new file mode 100644 index 00000000..c2e64b05 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesSpecialSchemeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.design.mapper; + +import org.dromara.design.domain.DesSpecialScheme; +import org.dromara.design.domain.vo.specialscheme.DesSpecialSchemeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 专项方案管理Mapper接口 + * + * @author lcj + * @date 2025-07-03 + */ +public interface DesSpecialSchemeMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDesignChangeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDesignChangeService.java new file mode 100644 index 00000000..4f6be8df --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDesignChangeService.java @@ -0,0 +1,105 @@ +package org.dromara.design.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletResponse; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.design.domain.DesDesignChange; +import org.dromara.design.domain.dto.designchange.DesDesignChangeCreateReq; +import org.dromara.design.domain.dto.designchange.DesDesignChangeQueryReq; +import org.dromara.design.domain.dto.designchange.DesDesignChangeUpdateReq; +import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; + +import java.util.Collection; +import java.util.List; + +/** + * 设计变更管理Service接口 + * + * @author lcj + * @date 2025-07-03 + */ +public interface IDesDesignChangeService extends IService { + + /** + * 查询设计变更管理 + * + * @param id 主键 + * @return 设计变更管理 + */ + DesDesignChangeVo queryById(Long id); + + /** + * 分页查询设计变更管理列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 设计变更管理分页列表 + */ + TableDataInfo queryPageList(DesDesignChangeQueryReq req, PageQuery pageQuery); + + /** + * 查询符合条件的设计变更管理列表 + * + * @param req 查询条件 + * @return 设计变更管理列表 + */ + List queryList(DesDesignChangeQueryReq req); + + /** + * 根据主键id导出设计变更单 + * + * @param id 设计变更主键id + */ + void exportWordById(Long id, HttpServletResponse response); + + /** + * 新增设计变更管理 + * + * @param req 设计变更管理 + * @return 新增设计变更管理主键id + */ + Long insertByBo(DesDesignChangeCreateReq req); + + /** + * 修改设计变更管理 + * + * @param req 设计变更管理 + * @return 是否修改成功 + */ + Boolean updateByBo(DesDesignChangeUpdateReq req); + + /** + * 校验并批量删除设计变更管理信息 + * + * @param ids 待删除的主键集合 + * @return 是否删除成功 + */ + Boolean deleteByIds(Collection ids); + + /** + * 构建设计变更管理封装对象 + * + * @param designChange 设计变更管理 + * @return 设计变更管理封装对象 + */ + DesDesignChangeVo getVo(DesDesignChange designChange); + + /** + * 构建查询条件 + * + * @param req 查询条件 + * @return 查询条件 + */ + LambdaQueryWrapper buildQueryWrapper(DesDesignChangeQueryReq req); + + /** + * 获取设计变更管理对象视图 + * + * @param designChangePage 设计变更管理对象 + * @return 设计变更管理对象视图 + */ + Page getVoPage(Page designChangePage); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDrawingService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDrawingService.java index e9f60158..6bfe0ddd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDrawingService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesDrawingService.java @@ -10,7 +10,6 @@ import org.dromara.design.domain.dto.drawing.DesDrawingCreateReq; import org.dromara.design.domain.dto.drawing.DesDrawingQueryReq; import org.dromara.design.domain.dto.drawing.DesDrawingUpdateReq; import org.dromara.design.domain.vo.drawing.DesDrawingVo; -import org.springframework.web.multipart.MultipartFile; import java.util.Collection; import java.util.List; @@ -51,19 +50,18 @@ public interface IDesDrawingService extends IService { /** * 新增图纸管理 * - * @param file 文件 - * @param req 图纸管理 + * @param req 图纸管理 * @return 新增图纸管理主键id */ - DesDrawingVo insertByBo(MultipartFile file, DesDrawingCreateReq req); + DesDrawingVo insertByBo(DesDrawingCreateReq req); /** * 修改图纸管理 * * @param req 图纸管理 - * @return 是否修改成功 + * @return 图纸管理 */ - Boolean updateByBo(DesDrawingUpdateReq req); + DesDrawingVo updateByBo(DesDrawingUpdateReq req); /** * 校验并批量删除图纸管理信息 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesSpecialSchemeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesSpecialSchemeService.java new file mode 100644 index 00000000..b57fa98c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesSpecialSchemeService.java @@ -0,0 +1,97 @@ +package org.dromara.design.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.design.domain.DesSpecialScheme; +import org.dromara.design.domain.dto.specialscheme.DesSpecialSchemeCreateReq; +import org.dromara.design.domain.dto.specialscheme.DesSpecialSchemeQueryReq; +import org.dromara.design.domain.dto.specialscheme.DesSpecialSchemeUpdateReq; +import org.dromara.design.domain.vo.specialscheme.DesSpecialSchemeVo; + +import java.util.Collection; +import java.util.List; + +/** + * 专项方案管理Service接口 + * + * @author lcj + * @date 2025-07-03 + */ +public interface IDesSpecialSchemeService extends IService { + + /** + * 查询图纸管理 + * + * @param id 主键 + * @return 图纸管理 + */ + DesSpecialSchemeVo queryById(Long id); + + /** + * 分页查询图纸管理列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 图纸管理分页列表 + */ + TableDataInfo queryPageList(DesSpecialSchemeQueryReq req, PageQuery pageQuery); + + /** + * 查询符合条件的图纸管理列表 + * + * @param req 查询条件 + * @return 图纸管理列表 + */ + List queryList(DesSpecialSchemeQueryReq req); + + /** + * 新增图纸管理 + * + * @param req 图纸管理 + * @return 新增图纸管理 + */ + DesSpecialSchemeVo insertByBo(DesSpecialSchemeCreateReq req); + + /** + * 修改图纸管理 + * + * @param req 图纸管理 + * @return 图纸管理 + */ + DesSpecialSchemeVo updateByBo(DesSpecialSchemeUpdateReq req); + + /** + * 校验并批量删除图纸管理信息 + * + * @param ids 待删除的主键集合 + * @return 是否删除成功 + */ + Boolean deleteByIds(Collection ids); + + /** + * 构建图纸管理封装对象 + * + * @param specialScheme 图纸管理 + * @return 图纸管理封装对象 + */ + DesSpecialSchemeVo getVo(DesSpecialScheme specialScheme); + + /** + * 构建查询条件 + * + * @param req 查询条件 + * @return 查询条件 + */ + LambdaQueryWrapper buildQueryWrapper(DesSpecialSchemeQueryReq req); + + /** + * 获取图纸管理对象视图 + * + * @param specialSchemePage 图纸管理对象 + * @return 图纸管理对象视图 + */ + Page getVoPage(Page specialSchemePage); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDesignChangeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDesignChangeServiceImpl.java new file mode 100644 index 00000000..66a7c77c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDesignChangeServiceImpl.java @@ -0,0 +1,482 @@ +package org.dromara.design.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.xwpf.usermodel.*; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.ObjectUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.file.FileUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.oss.core.OssClient; +import org.dromara.common.oss.exception.OssException; +import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.utils.DocumentUtil; +import org.dromara.design.constant.DesDesignConstant; +import org.dromara.design.domain.DesDesignChange; +import org.dromara.design.domain.dto.designchange.DesDesignChangeCreateReq; +import org.dromara.design.domain.dto.designchange.DesDesignChangeQueryReq; +import org.dromara.design.domain.dto.designchange.DesDesignChangeUpdateReq; +import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; +import org.dromara.design.mapper.DesDesignChangeMapper; +import org.dromara.design.service.IDesDesignChangeService; +import org.dromara.project.service.IBusProjectService; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.service.ISysOssService; +import org.springframework.beans.BeanUtils; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.zip.ZipOutputStream; + +/** + * 设计变更管理Service业务层处理 + * + * @author lcj + * @date 2025-07-03 + */ +@Slf4j +@Service +public class DesDesignChangeServiceImpl extends ServiceImpl + implements IDesDesignChangeService { + + @Resource + private IBusProjectService projectService; + + @Resource + private ISysOssService ossService; + + /** + * 查询设计变更管理 + * + * @param id 主键 + * @return 设计变更管理 + */ + @Override + public DesDesignChangeVo queryById(Long id) { + DesDesignChange designChange = this.getById(id); + if (designChange == null) { + throw new ServiceException("设计变更不存在", HttpStatus.NOT_FOUND); + } + return this.getVo(designChange); + } + + /** + * 分页查询设计变更管理列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 设计变更管理分页列表 + */ + @Override + public TableDataInfo queryPageList(DesDesignChangeQueryReq req, PageQuery pageQuery) { + Page changePage = this.page(pageQuery.build(), this.buildQueryWrapper(req)); + return TableDataInfo.build(this.getVoPage(changePage)); + } + + /** + * 查询符合条件的设计变更管理列表 + * + * @param req 查询条件 + * @return 设计变更管理列表 + */ + @Override + public List queryList(DesDesignChangeQueryReq req) { + LambdaQueryWrapper lqw = buildQueryWrapper(req); + return this.list(lqw).stream().map(this::getVo).toList(); + } + + /** + * 根据主键id导出设计变更单 + * + * @param id 设计变更主键id + */ + @Override + public void exportWordById(Long id, HttpServletResponse response) { + DesDesignChange designChange = this.getById(id); + if (designChange == null) { + throw new ServiceException("质量-检查工单不存在"); + } + Map replacementMap = getReplacementMap(designChange); + Path targetDir = Paths.get(DesDesignConstant.getDesignChangeFileUrl(designChange)); + // 如果存在目录则直接返回,不存在则生成文件并返回 + if (!Files.exists(targetDir)) { + // 清理旧文件 + String baseUrl = DesDesignConstant.DESIGN_CHANGE_FILE_URL + designChange.getId(); + try { + Path dirPath = Paths.get(baseUrl); + if (Files.exists(dirPath)) { + FileUtils.deleteDirectory(dirPath); + } + } catch (IOException e) { + log.error("文件目录:{},清理失败", baseUrl, e); + } + // 生成文件 + try (InputStream is = getClass().getClassLoader().getResourceAsStream(DesDesignConstant.DESIGN_CHANGE_TEMPLATE_PATH)) { + if (is == null) { + throw new ServiceException("模板文件不存在"); + } + try (XWPFDocument document = new XWPFDocument(is)) { + // 替换段落中的文本 + for (XWPFParagraph paragraph : document.getParagraphs()) { + replaceInParagraph(paragraph, replacementMap, document, designChange); + } + // 替换表格中的文本(如果模板中有表格) + for (XWPFTable table : document.getTables()) { + for (XWPFTableRow row : table.getRows()) { + for (XWPFTableCell cell : row.getTableCells()) { + for (XWPFParagraph paragraph : cell.getParagraphs()) { + replaceInParagraph(paragraph, replacementMap, document, designChange); + } + } + } + } + // 创建目标目录 + if (!Files.exists(targetDir)) { + Files.createDirectories(targetDir); + } + // 组合目标文件名 + String fileName = DesDesignConstant.getDesignChangeFileName(designChange); + // 保存修改后的文件 + try (FileOutputStream fos = new FileOutputStream(targetDir.resolve(fileName).toFile())) { + document.write(fos); + } + } + } catch (IOException | InvalidFormatException 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()); + } + } + + /** + * 新增设计变更管理 + * + * @param req 设计变更管理 + * @return 新增设计变更管理主键id + */ + @Override + public Long insertByBo(DesDesignChangeCreateReq req) { + DesDesignChange entity = new DesDesignChange(); + BeanUtils.copyProperties(req, entity); + validEntityBeforeSave(entity, true); + boolean save = this.save(entity); + if (!save) { + throw new ServiceException("新增设计变更失败", HttpStatus.ERROR); + } + return entity.getId(); + } + + /** + * 修改设计变更管理 + * + * @param req 设计变更管理 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DesDesignChangeUpdateReq req) { + DesDesignChange entity = new DesDesignChange(); + BeanUtils.copyProperties(req, entity); + validEntityBeforeSave(entity, false); + boolean result = this.updateById(entity); + if (!result) { + throw new ServiceException("修改设计变更失败", HttpStatus.ERROR); + } + return true; + } + + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DesDesignChange entity, Boolean create) { + Long projectId = entity.getProjectId(); + if (create) { + if (projectId == null) { + throw new ServiceException("项目id不能为空", HttpStatus.BAD_REQUEST); + } + } + if (projectId != null && projectService.getById(projectId) == null) { + throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); + } + } + + /** + * 校验并批量删除设计变更管理信息 + * + * @param ids 待删除的主键集合 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteByIds(Collection ids) { + return removeBatchByIds(ids); + } + + /** + * 构建设计变更管理封装对象 + * + * @param designChange 设计变更管理 + * @return 设计变更管理封装对象 + */ + @Override + public DesDesignChangeVo getVo(DesDesignChange designChange) { + DesDesignChangeVo vo = new DesDesignChangeVo(); + if (designChange == null) { + return vo; + } + BeanUtils.copyProperties(designChange, vo); + List allFileIdList = new ArrayList<>(); + // 1. 添加单个 fileId(前提是非空) + String fileId = designChange.getFileId(); + if (StringUtils.isNotBlank(fileId)) { + allFileIdList.add(Long.valueOf(fileId)); + } + // 2. 添加 attachmentPic 多个 ID + String attachmentPic = designChange.getAttachmentPic(); + if (StringUtils.isNotBlank(attachmentPic)) { + String[] attachmentPicStr = attachmentPic.split(","); + for (String idStr : attachmentPicStr) { + if (StringUtils.isNotBlank(idStr)) { + allFileIdList.add(Long.valueOf(idStr.trim())); + } + } + } + // 3. 添加 costEstimationFile 多个 ID + String costEstimationFile = designChange.getCostEstimationFile(); + if (StringUtils.isNotBlank(costEstimationFile)) { + String[] costEstimationFileStr = costEstimationFile.split(","); + for (String idStr : costEstimationFileStr) { + if (StringUtils.isNotBlank(idStr)) { + allFileIdList.add(Long.valueOf(idStr.trim())); + } + } + } + if (CollUtil.isNotEmpty(allFileIdList)) { + // 获取文件对象 + List ossVoList = ossService.listByIds(allFileIdList); + Map ossMap = ossVoList.stream() + .collect(Collectors.toMap(SysOssVo::getOssId, Function.identity(), (a, b) -> a)); + // 1. 处理 file(单个) + if (StringUtils.isNotBlank(fileId)) { + Long file = Long.valueOf(fileId); + SysOssVo fileVo = ossMap.get(file); + vo.setFile(fileVo); + } + // 2. 处理 attachmentPicList(多个) + if (StringUtils.isNotBlank(attachmentPic)) { + List attachmentList = Arrays.stream(attachmentPic.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .map(ossMap::get) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + vo.setAttachmentPicList(attachmentList); + } + // 3. 处理 costEstimationFileList(多个) + if (StringUtils.isNotBlank(costEstimationFile)) { + List costList = Arrays.stream(costEstimationFile.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .map(ossMap::get) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + vo.setCostEstimationFileList(costList); + } + } + return vo; + } + + /** + * 构建查询条件 + * + * @param req 查询条件 + * @return 查询条件 + */ + @Override + public LambdaQueryWrapper buildQueryWrapper(DesDesignChangeQueryReq req) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + if (req == null) { + return lqw; + } + Long projectId = req.getProjectId(); + String formNo = req.getFormNo(); + String projectName = req.getProjectName(); + String submitUnit = req.getSubmitUnit(); + String specialty = req.getSpecialty(); + Date submitDate = req.getSubmitDate(); + String volumeName = req.getVolumeName(); + String volumeNo = req.getVolumeNo(); + String status = req.getStatus(); + lqw.eq(ObjectUtils.isNotEmpty(projectId), DesDesignChange::getProjectId, projectId); + lqw.eq(ObjectUtils.isNotEmpty(formNo), DesDesignChange::getFormNo, formNo); + lqw.eq(ObjectUtils.isNotEmpty(submitDate), DesDesignChange::getSubmitDate, submitDate); + lqw.eq(StringUtils.isNotEmpty(status), DesDesignChange::getStatus, status); + lqw.like(StringUtils.isNotEmpty(projectName), DesDesignChange::getProjectName, projectName); + lqw.like(StringUtils.isNotEmpty(submitUnit), DesDesignChange::getSubmitUnit, submitUnit); + lqw.like(StringUtils.isNotEmpty(specialty), DesDesignChange::getSpecialty, specialty); + lqw.like(StringUtils.isNotEmpty(volumeName), DesDesignChange::getVolumeName, volumeName); + lqw.like(StringUtils.isNotEmpty(volumeNo), DesDesignChange::getVolumeNo, volumeNo); + return lqw; + } + + /** + * 获取设计变更管理对象视图 + * + * @param designChangePage 设计变更管理对象 + * @return 设计变更管理对象视图 + */ + @Override + public Page getVoPage(Page designChangePage) { + List designChangeList = designChangePage.getRecords(); + Page designChangeVoPage = new Page<>( + designChangePage.getCurrent(), + designChangePage.getSize(), + designChangePage.getTotal()); + if (CollUtil.isEmpty(designChangeList)) { + return designChangeVoPage; + } + // todo 待优化 + List designChangeVoList = designChangeList.stream().map(this::getVo).toList(); + designChangeVoPage.setRecords(designChangeVoList); + return designChangeVoPage; + } + + /** + * 根据实体获取Word的文本Map + * + * @param designChange 质量-检查工单对象 + * @return Map + */ + private Map getReplacementMap(DesDesignChange designChange) { + Map replacementMap = new HashMap<>(); + replacementMap.put("${formNo}", designChange.getFormNo()); + replacementMap.put("${projectName}", designChange.getProjectName()); + replacementMap.put("${submitUnit}", designChange.getSubmitUnit()); + replacementMap.put("${specialty}", designChange.getSpecialty()); + Date submitDate = designChange.getSubmitDate(); + String date = DateUtil.format(submitDate, "yyyy年MM月dd日"); + replacementMap.put("${submitDate}", date); + replacementMap.put("${attachmentPic}", designChange.getAttachmentPic()); + replacementMap.put("${volumeName}", designChange.getVolumeName()); + replacementMap.put("${volumeNo}", designChange.getVolumeNo()); + String[] reasonList = designChange.getChangeReason().split(","); + Set reasonSet = new HashSet<>(Arrays.asList(reasonList)); + for (int i = 1; i <= 8; i++) { + if (reasonSet.contains(String.valueOf(i))) { + replacementMap.put("${changeReason" + i + "}", "√"); + } else { + replacementMap.put("${changeReason" + i + "}", " "); + } + } + replacementMap.put("${changeContent}", designChange.getChangeContent()); + replacementMap.put("${costEstimation}", designChange.getCostEstimation()); + replacementMap.put("${costEstimationFile}", designChange.getCostEstimationFile()); + return replacementMap; + } + + /** + * 替换段落中所有文本运行的占位符内容,对于 checkFile 和 rectificationFile + * 插入图片或超链接(附件)展示。 + * + * @param paragraph 当前段落 + * @param replacements 占位符与替换内容的映射 + * @param document 当前文档,用于插入图片或创建超链接 + */ + private void replaceInParagraph(XWPFParagraph paragraph, + Map replacements, + XWPFDocument document, + DesDesignChange designChange) + throws InvalidFormatException, IOException { + // 先拷贝 paragraph 里所有的 run + List runs = new ArrayList<>(paragraph.getRuns()); + // 在拷贝上遍历,修改原 paragraph(增删 run)都不会抛 CME + for (XWPFRun run : runs) { + String text = run.getText(0); + if (text != null) { + // 针对每个占位符进行检查 + for (Map.Entry entry : replacements.entrySet()) { + String placeholder = entry.getKey(); + String value = entry.getValue(); + if (text.contains(placeholder)) { + // 针对 file 进行特殊处理 + if (placeholder.equals("${costEstimationFile}") || placeholder.equals("${attachmentPic}")) { + // 判断该 run 中的文本是否仅包含该占位符(建议模板中独占一行) + if (text.trim().equals(placeholder)) { + // 清空原有文本 + run.setText("", 0); + // 根据附件的后缀决定以图片或超链接展示 + if (StringUtils.isBlank(value)) { + continue; + } + // 获取附件的ossId + List ossIdList = Arrays.stream(value.split(",")).map(Long::parseLong).toList(); + List ossVoList = ossService.listByIds(ossIdList); + String baseFile = DesDesignConstant.getDesignChangeFileUrl(designChange) + "/file"; + for (SysOssVo ossVo : ossVoList) { + String lowerVal = ossVo.getUrl().toLowerCase(); + OssClient storage = OssFactory.instance(ossVo.getService()); + String fileDownload = storage.fileDownload(ossVo.getUrl(), ossVo.getOriginalName(), baseFile); + if (lowerVal.endsWith(".png") || lowerVal.endsWith(".jpg") || lowerVal.endsWith(".jpeg") || lowerVal.endsWith(".gif")) { + try { + DocumentUtil.insertImageDynamic(run, fileDownload, document, 50); + } catch (Exception e) { + throw new ServiceException("插入图片失败"); + } + } else { + // —— 非图片:插入超链接 —— + XWPFHyperlinkRun link = paragraph.createHyperlinkRun(ossVo.getUrl()); + link.setText(ossVo.getOriginalName()); + link.setColor("0000FF"); + link.setUnderline(UnderlinePatterns.SINGLE); + } + } + } else { + // 如果占位符与其它文本混合,可进行文本替换,提示附件展示请单独使用占位符 + text = text.replace(placeholder, "[附件]"); + run.setText(text, 0); + } + } else { + // 普通文本占位符直接替换 + if (StringUtils.isBlank(value)) { + // 如果填入值为空,清空原有文本 + run.setText("", 0); + continue; + } + text = text.replace(placeholder, value); + run.setText(text, 0); + } + } + } + } + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDrawingServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDrawingServiceImpl.java index f9121976..2c49c799 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDrawingServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesDrawingServiceImpl.java @@ -3,7 +3,6 @@ package org.dromara.design.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -16,12 +15,11 @@ import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.service.WorkflowService; import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.design.constant.DesDrawingConstant; import org.dromara.design.domain.DesDrawing; import org.dromara.design.domain.dto.drawing.DesDrawingCreateReq; import org.dromara.design.domain.dto.drawing.DesDrawingQueryReq; @@ -32,16 +30,15 @@ import org.dromara.design.enums.DesDrawingNewestEnum; import org.dromara.design.mapper.DesDrawingMapper; import org.dromara.design.service.IDesDrawingService; import org.dromara.project.service.IBusProjectService; -import org.dromara.system.domain.vo.SysOssUploadVo; +import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; import org.springframework.beans.BeanUtils; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; -import java.util.Collection; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 图纸管理Service业务层处理 @@ -60,6 +57,9 @@ public class DesDrawingServiceImpl extends ServiceImpl ids) { - return baseMapper.deleteByIds(ids) > 0; + List drawingList = this.listByIds(ids); + if (CollUtil.isEmpty(drawingList)) { + throw new ServiceException("参数错误,请勿删除不存在的图纸", HttpStatus.BAD_REQUEST); + } + workflowService.deleteInstance((List) ids); + // 删除oss文件 + Set fileIdList = drawingList.stream().map(DesDrawing::getFileUrl).collect(Collectors.toSet()); + ossService.deleteWithValidByIds(fileIdList, false); + return removeBatchByIds(ids); } /** @@ -216,7 +213,9 @@ public class DesDrawingServiceImpl extends ServiceImpl ossVoList = ossService.listByIds(drawingList.stream().map(DesDrawing::getFileUrl).toList()); + Map> ossMap = ossVoList.stream().collect(Collectors.groupingBy(SysOssVo::getOssId)); List drawingVoList = drawingList.stream().map(entity -> { DesDrawingVo drawingVo = new DesDrawingVo(); BeanUtils.copyProperties(entity, drawingVo); + drawingVo.setFile(ossMap.get(entity.getFileUrl()).getFirst()); return drawingVo; }).toList(); drawingVoPage.setRecords(drawingVoList); @@ -319,7 +323,9 @@ public class DesDrawingServiceImpl extends ServiceImpl + implements IDesSpecialSchemeService { + @Resource + private IBusProjectService projectService; + + @Resource + private ISysOssService ossService; + + @Resource + private WorkflowService workflowService; + + /** + * 查询图纸管理 + * + * @param id 主键 + * @return 图纸管理 + */ + @Override + public DesSpecialSchemeVo queryById(Long id) { + DesSpecialScheme specialScheme = this.getById(id); + if (specialScheme == null) { + throw new ServiceException("图纸不存在", HttpStatus.NOT_FOUND); + } + return this.getVo(specialScheme); + } + + /** + * 分页查询图纸管理列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 图纸管理分页列表 + */ + @Override + public TableDataInfo queryPageList(DesSpecialSchemeQueryReq req, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(req); + Page result = this.page(pageQuery.build(), lqw); + return TableDataInfo.build(this.getVoPage(result)); + } + + /** + * 查询符合条件的图纸管理列表 + * + * @param req 查询条件 + * @return 图纸管理列表 + */ + @Override + public List queryList(DesSpecialSchemeQueryReq req) { + LambdaQueryWrapper lqw = buildQueryWrapper(req); + return this.list(lqw).stream().map(this::getVo).toList(); + } + + /** + * 新增图纸管理 + * + * @param req 图纸管理 + * @return 新增图纸管理 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public DesSpecialSchemeVo insertByBo(DesSpecialSchemeCreateReq req) { + Long fileUrl = req.getFileUrl(); + SysOssVo ossVo = ossService.getById(fileUrl); + // 数据校验 + if (ObjectUtils.isEmpty(ossVo)) { + throw new ServiceException("图纸文件不能为空", HttpStatus.BAD_REQUEST); + } + Long projectId = req.getProjectId(); + if (projectService.getById(projectId) == null) { + throw new ServiceException("项目不存在", HttpStatus.BAD_REQUEST); + } + // 文件信息赋值 + DesSpecialScheme desSpecialScheme = new DesSpecialScheme(); + desSpecialScheme.setProjectId(projectId); + desSpecialScheme.setOriginalName(ossVo.getOriginalName()); + String name = req.getFileName(); + if (StringUtils.isBlank(name)) { + name = FileUtil.getPrefix(ossVo.getOriginalName()); + } + desSpecialScheme.setFileName(name); + desSpecialScheme.setFileUrl(fileUrl); + desSpecialScheme.setFileSuffix(ossVo.getFileSuffix()); + desSpecialScheme.setVersionNumber(req.getVersionNumber()); + boolean result = this.save(desSpecialScheme); + if (!result) { + throw new ServiceException("保存新图纸失败"); + } + return this.getVo(this.getById(desSpecialScheme.getId())); + } + + /** + * 修改图纸管理 + * + * @param req 图纸管理 + * @return 是否修改成功 + */ + @Override + public DesSpecialSchemeVo updateByBo(DesSpecialSchemeUpdateReq req) { + Long id = req.getId(); + DesSpecialScheme oldSpecialScheme = this.getById(id); + if (oldSpecialScheme == null) { + throw new ServiceException("图纸不存在", HttpStatus.NOT_FOUND); + } + DesSpecialScheme desSpecialScheme = new DesSpecialScheme(); + BeanUtils.copyProperties(req, desSpecialScheme); + boolean result = this.updateById(desSpecialScheme); + if (!result) { + throw new ServiceException("修改图纸失败", HttpStatus.ERROR); + } + return this.getVo(this.getById(id)); + } + + /** + * 校验并批量删除图纸管理信息 + * + * @param ids 待删除的主键集合 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteByIds(Collection ids) { + List specialSchemeList = this.listByIds(ids); + if (CollUtil.isEmpty(specialSchemeList)) { + throw new ServiceException("参数错误,请勿删除不存在的图纸", HttpStatus.BAD_REQUEST); + } + workflowService.deleteInstance((List) ids); + // 删除oss文件 + Set fileIdList = specialSchemeList.stream().map(DesSpecialScheme::getFileUrl).collect(Collectors.toSet()); + ossService.deleteWithValidByIds(fileIdList, false); + return removeBatchByIds(ids); + } + + /** + * 构建图纸管理封装对象 + * + * @param specialScheme 图纸管理 + * @return 图纸管理封装对象 + */ + @Override + public DesSpecialSchemeVo getVo(DesSpecialScheme specialScheme) { + DesSpecialSchemeVo vo = new DesSpecialSchemeVo(); + if (specialScheme == null) { + return vo; + } + BeanUtils.copyProperties(specialScheme, vo); + SysOssVo ossVo = ossService.getById(specialScheme.getFileUrl()); + vo.setFile(ossVo); + return vo; + } + + /** + * 构建查询条件 + * + * @param req 查询条件 + * @return 查询条件 + */ + @Override + public LambdaQueryWrapper buildQueryWrapper(DesSpecialSchemeQueryReq req) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + if (req == null) { + return lqw; + } + Long projectId = req.getProjectId(); + String fileName = req.getFileName(); + String fileStatus = req.getFileStatus(); + String originalName = req.getOriginalName(); + lqw.like(StringUtils.isNotBlank(fileName), DesSpecialScheme::getFileName, fileName); + lqw.like(StringUtils.isNotBlank(originalName), DesSpecialScheme::getOriginalName, originalName); + lqw.eq(ObjectUtils.isNotEmpty(projectId), DesSpecialScheme::getProjectId, projectId); + lqw.eq(StringUtils.isNotBlank(fileStatus), DesSpecialScheme::getFileStatus, fileStatus); + lqw.orderByDesc(DesSpecialScheme::getCreateTime); + return lqw; + } + + /** + * 获取图纸管理对象视图 + * + * @param specialSchemePage 图纸管理对象 + * @return 图纸管理对象视图 + */ + @Override + public Page getVoPage(Page specialSchemePage) { + List specialSchemeList = specialSchemePage.getRecords(); + Page specialSchemeVoPage = new Page<>( + specialSchemePage.getCurrent(), + specialSchemePage.getSize(), + specialSchemePage.getTotal()); + if (CollUtil.isEmpty(specialSchemeList)) { + return specialSchemeVoPage; + } + List ossVoList = ossService.listByIds(specialSchemeList.stream().map(DesSpecialScheme::getFileUrl).toList()); + Map> ossMap = ossVoList.stream().collect(Collectors.groupingBy(SysOssVo::getOssId)); + List specialSchemeVoList = specialSchemeList.stream().map(entity -> { + DesSpecialSchemeVo specialSchemeVo = new DesSpecialSchemeVo(); + BeanUtils.copyProperties(entity, specialSchemeVo); + specialSchemeVo.setFile(ossMap.get(entity.getFileUrl()).getFirst()); + return specialSchemeVo; + }).toList(); + specialSchemeVoPage.setRecords(specialSchemeVoList); + return specialSchemeVoPage; + } + + /** + * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) + * 正常使用只需#processEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processEvent 参数 + */ + @EventListener(condition = "#processEvent.flowCode == 'specialScheme'") + public void processHandler(ProcessEvent processEvent) { + log.info("图纸审核任务执行了{}", processEvent.toString()); + DesSpecialScheme specialScheme = this.getById(Convert.toLong(processEvent.getBusinessId())); + specialScheme.setStatus(processEvent.getStatus()); + if (processEvent.getSubmit()) { + specialScheme.setStatus(BusinessStatusEnum.WAITING.getStatus()); + } + this.updateById(specialScheme); + } + + /** + * 执行任务创建监听 + * 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断 + * 在方法中判断流程节点key + * if ("xxx".equals(processTaskEvent.getNodeCode())) { + * //执行业务逻辑 + * } + * + * @param processTaskEvent 参数 + */ + @EventListener(condition = "#processTaskEvent.flowCode == 'specialScheme'") + public void processTaskHandler(ProcessTaskEvent processTaskEvent) { + log.info("图纸审核任务创建了{}", processTaskEvent.toString()); + } + + /** + * 监听删除流程事件 + * 正常使用只需#processDeleteEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processDeleteEvent 参数 + */ + @EventListener(condition = "#processDeleteEvent.flowCode == 'specialScheme'") + public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) { + log.info("监听删除流程事件,图纸审核任务执行了{}", processDeleteEvent.toString()); + DesSpecialScheme specialScheme = this.getById(Convert.toLong(processDeleteEvent.getBusinessId())); + if (ObjectUtil.isNull(specialScheme)) { + return; + } + this.removeById(specialScheme.getId()); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesDesignChangeMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesDesignChangeMapper.xml new file mode 100644 index 00000000..961b11cb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesDesignChangeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesSpecialSchemeMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesSpecialSchemeMapper.xml new file mode 100644 index 00000000..b7df8808 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesSpecialSchemeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java index 10d9de83..e21a1a58 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java @@ -13,6 +13,7 @@ import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.orm.entity.FlowDefinition; import org.dromara.workflow.common.ConditionalOnEnable; +import org.dromara.workflow.domain.bo.FlowDefinitionBo; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.service.IFlwDefinitionService; import org.springframework.transaction.annotation.Transactional; @@ -41,23 +42,23 @@ public class FlwDefinitionController extends BaseController { /** * 查询流程定义列表 * - * @param flowDefinition 参数 - * @param pageQuery 分页 + * @param flowDefinitionBo 参数 + * @param pageQuery 分页 */ @GetMapping("/list") - public TableDataInfo list(FlowDefinition flowDefinition, PageQuery pageQuery) { - return flwDefinitionService.queryList(flowDefinition, pageQuery); + public TableDataInfo list(FlowDefinitionBo flowDefinitionBo, PageQuery pageQuery) { + return flwDefinitionService.queryList(flowDefinitionBo, pageQuery); } /** * 查询未发布的流程定义列表 * - * @param flowDefinition 参数 - * @param pageQuery 分页 + * @param flowDefinitionBo 参数 + * @param pageQuery 分页 */ @GetMapping("/unPublishList") - public TableDataInfo unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery) { - return flwDefinitionService.unPublishList(flowDefinition, pageQuery); + public TableDataInfo unPublishList(FlowDefinitionBo flowDefinitionBo, PageQuery pageQuery) { + return flwDefinitionService.unPublishList(flowDefinitionBo, pageQuery); } /** @@ -72,8 +73,6 @@ public class FlwDefinitionController extends BaseController { /** * 新增流程定义 - * - * @param flowDefinition 参数 */ @Log(title = "流程定义", businessType = BusinessType.INSERT) @PostMapping diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowDefinitionBo.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowDefinitionBo.java new file mode 100644 index 00000000..9bf4dc38 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowDefinitionBo.java @@ -0,0 +1,25 @@ +package org.dromara.workflow.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.warm.flow.orm.entity.FlowDefinition; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/7/3 16:54 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class FlowDefinitionBo extends FlowDefinition implements Serializable { + + @Serial + private static final long serialVersionUID = 2120294203941407990L; + + /** + * 项目id + */ + private Long projectId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java index 54743b72..50e31811 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java @@ -3,7 +3,7 @@ package org.dromara.workflow.service; import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.warm.flow.orm.entity.FlowDefinition; +import org.dromara.workflow.domain.bo.FlowDefinitionBo; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.springframework.web.multipart.MultipartFile; @@ -20,20 +20,20 @@ public interface IFlwDefinitionService { /** * 查询流程定义列表 * - * @param flowDefinition 参数 - * @param pageQuery 分页 + * @param flowDefinitionBo 参数 + * @param pageQuery 分页 * @return 返回分页列表 */ - TableDataInfo queryList(FlowDefinition flowDefinition, PageQuery pageQuery); + TableDataInfo queryList(FlowDefinitionBo flowDefinitionBo, PageQuery pageQuery); /** * 查询未发布的流程定义列表 * - * @param flowDefinition 参数 - * @param pageQuery 分页 + * @param flowDefinitionBo 参数 + * @param pageQuery 分页 * @return 返回分页列表 */ - TableDataInfo unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery); + TableDataInfo unPublishList(FlowDefinitionBo flowDefinitionBo, PageQuery pageQuery); /** * 发布流程定义 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java index e595f46e..508441d3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java @@ -31,6 +31,7 @@ import org.dromara.warm.flow.orm.mapper.FlowSkipMapper; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.FlowCategory; +import org.dromara.workflow.domain.bo.FlowDefinitionBo; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.service.IFlwCommonService; @@ -69,13 +70,13 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { /** * 查询流程定义列表 * - * @param flowDefinition 流程定义信息 - * @param pageQuery 分页 + * @param flowDefinitionBo 流程定义信息 + * @param pageQuery 分页 * @return 返回分页列表 */ @Override - public TableDataInfo queryList(FlowDefinition flowDefinition, PageQuery pageQuery) { - LambdaQueryWrapper wrapper = buildQueryWrapper(flowDefinition); + public TableDataInfo queryList(FlowDefinitionBo flowDefinitionBo, PageQuery pageQuery) { + LambdaQueryWrapper wrapper = buildQueryWrapper(flowDefinitionBo); wrapper.eq(FlowDefinition::getIsPublish, PublishStatus.PUBLISHED.getKey()); Page page = flowDefinitionMapper.selectPage(pageQuery.build(), wrapper); List list = BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class); @@ -85,27 +86,28 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { /** * 查询未发布的流程定义列表 * - * @param flowDefinition 流程定义信息 - * @param pageQuery 分页 + * @param flowDefinitionBo 流程定义信息 + * @param pageQuery 分页 * @return 返回分页列表 */ @Override - public TableDataInfo unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery) { - LambdaQueryWrapper wrapper = buildQueryWrapper(flowDefinition); + public TableDataInfo unPublishList(FlowDefinitionBo flowDefinitionBo, PageQuery pageQuery) { + LambdaQueryWrapper wrapper = buildQueryWrapper(flowDefinitionBo); wrapper.in(FlowDefinition::getIsPublish, Arrays.asList(PublishStatus.UNPUBLISHED.getKey(), PublishStatus.EXPIRED.getKey())); Page page = flowDefinitionMapper.selectPage(pageQuery.build(), wrapper); List list = BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class); return new TableDataInfo<>(list, page.getTotal()); } - private LambdaQueryWrapper buildQueryWrapper(FlowDefinition flowDefinition) { + private LambdaQueryWrapper buildQueryWrapper(FlowDefinitionBo flowDefinitionBo) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.like(StringUtils.isNotBlank(flowDefinition.getFlowCode()), FlowDefinition::getFlowCode, flowDefinition.getFlowCode()); - wrapper.like(StringUtils.isNotBlank(flowDefinition.getFlowName()), FlowDefinition::getFlowName, flowDefinition.getFlowName()); - if (StringUtils.isNotBlank(flowDefinition.getCategory())) { - List categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowDefinition.getCategory())); + wrapper.like(StringUtils.isNotBlank(flowDefinitionBo.getFlowCode()), FlowDefinition::getFlowCode, flowDefinitionBo.getFlowCode()); + wrapper.like(StringUtils.isNotBlank(flowDefinitionBo.getFlowName()), FlowDefinition::getFlowName, flowDefinitionBo.getFlowName()); + if (StringUtils.isNotBlank(flowDefinitionBo.getCategory())) { + List categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowDefinitionBo.getCategory())); wrapper.in(FlowDefinition::getCategory, StreamUtils.toList(categoryIds, Convert::toStr)); } + wrapper.likeRight(FlowDefinition::getFlowCode, flowDefinitionBo.getProjectId() + "_"); wrapper.orderByDesc(FlowDefinition::getCreateTime); return wrapper; } diff --git a/xinnengyuan/script/sql/menuInitValue.sql b/xinnengyuan/script/sql/menuInitValue.sql index 373fbf8b..231b4791 100644 --- a/xinnengyuan/script/sql/menuInitValue.sql +++ b/xinnengyuan/script/sql/menuInitValue.sql @@ -907,3 +907,43 @@ values(1940367276851081221, '图纸管理删除', 1940367276851081217, '4', '#' insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) values(1940367276851081222, '图纸管理导出', 1940367276851081217, '5', '#', '', 1, 0, 'F', '0', '0', 'design:drawing:export', '#', 103, 1, sysdate(), null, null, ''); + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940612372729274369, '专项方案管理', '1940300237524451330', '1', 'specialScheme', 'design/specialScheme/index', 1, 0, 'C', '0', '0', 'design:specialScheme:list', '#', 103, 1, sysdate(), null, null, '专项方案管理菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940612372729274370, '专项方案管理查询', 1940612372729274369, '1', '#', '', 1, 0, 'F', '0', '0', 'design:specialScheme:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940612372729274371, '专项方案管理新增', 1940612372729274369, '2', '#', '', 1, 0, 'F', '0', '0', 'design:specialScheme:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940612372729274372, '专项方案管理修改', 1940612372729274369, '3', '#', '', 1, 0, 'F', '0', '0', 'design:specialScheme:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940612372729274373, '专项方案管理删除', 1940612372729274369, '4', '#', '', 1, 0, 'F', '0', '0', 'design:specialScheme:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940612372729274374, '专项方案管理导出', 1940612372729274369, '5', '#', '', 1, 0, 'F', '0', '0', 'design:specialScheme:export', '#', 103, 1, sysdate(), null, null, ''); + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940723160391405569, '设计变更管理', '1940300237524451330', '1', 'designChange', 'design/designChange/index', 1, 0, 'C', '0', '0', 'design:designChange:list', '#', 103, 1, sysdate(), null, null, '设计变更管理菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940723160391405570, '设计变更管理查询', 1940723160391405569, '1', '#', '', 1, 0, 'F', '0', '0', 'design:designChange:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940723160391405571, '设计变更管理新增', 1940723160391405569, '2', '#', '', 1, 0, 'F', '0', '0', 'design:designChange:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940723160391405572, '设计变更管理修改', 1940723160391405569, '3', '#', '', 1, 0, 'F', '0', '0', 'design:designChange:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940723160391405573, '设计变更管理删除', 1940723160391405569, '4', '#', '', 1, 0, 'F', '0', '0', 'design:designChange:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1940723160391405574, '设计变更管理导出', 1940723160391405569, '5', '#', '', 1, 0, 'F', '0', '0', 'design:designChange:export', '#', 103, 1, sysdate(), null, null, ''); diff --git a/xinnengyuan/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 146ab566..fc5132c7 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -1383,7 +1383,57 @@ CREATE TABLE `des_drawing` `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', `deleted_at` datetime null comment '删除时间', primary key (`id`) using btree, - UNIQUE KEY `uk_project_type_newest` (`project_id`, `file_type`, `newest`), index `idx_project_id` (`project_id` asc) using btree comment '项目id', index `idx_file_type` (`file_type` asc) using btree comment '文件类型' ) comment '图纸管理' collate = utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `des_special_scheme`; +CREATE TABLE `des_special_scheme` +( + `id` bigint not null auto_increment comment '主键id', + `project_id` bigint not null comment '项目id', + `version_number` varchar(50) not null comment '版本号', + `file_name` varchar(255) not null comment '文件名称', + `file_url` bigint null comment '文件访问路径', + `file_suffix` varchar(20) null comment '文件后缀', + `file_status` char(1) default '0' not null comment '状态(0正常 1删除)', + `original_name` varchar(255) null comment '原文件名', + `status` varchar(255) default 'draft' not null comment '审核状态', + `remark` text null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + `deleted_at` datetime null comment '删除时间', + primary key (`id`) using btree, + index `idx_project_id` (`project_id` asc) using btree comment '项目id' +) comment '专项方案管理' collate = utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `des_design_change`; +CREATE TABLE `des_design_change` +( + `id` bigint not null auto_increment comment '主键id', + `project_id` bigint not null comment '项目id', + `form_no` varchar(50) null comment '申请单编号', + `project_name` varchar(255) null comment '工程名称', + `submit_unit` varchar(255) null comment '提出单位', + `specialty` varchar(100) null comment '专业', + `submit_date` date null comment '提出日期', + `volume_name` varchar(255) null comment '卷册名称', + `volume_no` varchar(100) null comment '卷册号', + `attachment_pic` varchar(1024) null comment '附图', + `change_reason` varchar(255) null comment '变更原因', + `change_content` text null comment '变更内容', + `cost_estimation` text null comment '变更费用估算', + `cost_estimation_file` varchar(1024) null comment '变更费用估算计算表', + `file_id` varchar(255) null comment '变更文件', + `status` varchar(255) null comment '审核状态', + `remark` text null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_project_id` (`project_id` asc) using btree comment '项目id' +) comment '设计变更管理' collate = utf8mb4_unicode_ci; +