From 39f0c013f2dfd02faa3ee79a37d309ea9b6354fd Mon Sep 17 00:00:00 2001 From: zt Date: Tue, 19 Aug 2025 20:20:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysIndexController.java | 3 +- .../web/controller/AuthController.java | 14 +- .../web/controller/IndexController.java | 3 +- .../core/service/SaPermissionImpl.java | 18 +- .../common/utils/PdfBoxQrCodeGenerator.java | 45 ++- .../controller/DesDesignChangeController.java | 38 ++ .../design/controller/DesUserController.java | 1 + .../DesVolumeCatalogController.java | 20 +- .../controller/DesVolumeFileController.java | 35 ++ .../dromara/design/domain/DesSubcontract.java | 5 + .../design/domain/DesVolumeCatalog.java | 5 + .../dromara/design/domain/DesVolumeFile.java | 20 +- .../design/domain/bo/DesSubcontractBo.java | 5 + .../design/domain/bo/DesVolumeFileBo.java | 80 ++++ .../dromara/design/domain/dto/ExcelData.java | 40 +- .../dto/drawing/DesDrawingQueryReq.java | 3 + .../DesVolumeCatalogCreateReq.java | 5 + .../DesVolumeCatalogQueryReq.java | 1 + .../volumefile/DesVolumeFileCreateReq.java | 9 +- .../design/domain/vo/DesSubcontractVo.java | 5 + .../vo/volumecatalog/DesVolumeCatalogVo.java | 5 + .../vo/volumefile/DesVolumeFileCodeVo.java | 74 ++++ .../vo/volumefile/DesVolumeFileJoinVo.java | 120 ++++++ .../domain/vo/volumefile/DesVolumeFileVo.java | 14 + .../design/mapper/DesVolumeFileMapper.java | 8 + .../design/service/IDesDrawingService.java | 2 +- .../service/IDesVolumeCatalogService.java | 15 +- .../design/service/IDesVolumeFileService.java | 29 ++ .../impl/DesDesignChangeServiceImpl.java | 27 +- .../service/impl/DesDrawingServiceImpl.java | 9 +- .../impl/DesSubcontractServiceImpl.java | 3 +- .../impl/DesVolumeCatalogServiceImpl.java | 40 +- .../impl/DesVolumeFileServiceImpl.java | 375 ++++++++++++++---- .../controller/system/SysOssController.java | 2 +- .../mapper/design/DesVolumeFileMapper.xml | 13 + 35 files changed, 925 insertions(+), 166 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesVolumeFileBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileCodeVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileJoinVo.java diff --git a/drone/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/drone/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java index 13007eb1..16eac1da 100644 --- a/drone/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java +++ b/drone/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java @@ -24,6 +24,7 @@ public class SysIndexController @RequestMapping("/") public String index() { - return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); +// return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); + return null; } } diff --git a/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 64c83754..c6fd7229 100644 --- a/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -101,13 +101,13 @@ public class AuthController { // 登录 LoginVo loginVo = IAuthStrategy.login(body, client, grantType); - Long userId = LoginHelper.getUserId(); - scheduledExecutorService.schedule(() -> { - SseMessageDto dto = new SseMessageDto(); - dto.setMessage("欢迎登录新能源项目管理系统"); - dto.setUserIds(List.of(userId)); - SseMessageUtils.publishMessage(dto); - }, 5, TimeUnit.SECONDS); +// Long userId = LoginHelper.getUserId(); +// scheduledExecutorService.schedule(() -> { +// SseMessageDto dto = new SseMessageDto(); +// dto.setMessage("欢迎登录新能源项目管理系统"); +// dto.setUserIds(List.of(userId)); +// SseMessageUtils.publishMessage(dto); +// }, 5, TimeUnit.SECONDS); return R.ok(loginVo); } diff --git a/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java b/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java index c444f28c..1e4a2443 100644 --- a/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java +++ b/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java @@ -27,6 +27,7 @@ public class IndexController { */ @GetMapping("/") public String index() { - return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); +// return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); + return null; } } diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/xinnengyuan/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java index 1cef9a77..88b0b150 100644 --- a/xinnengyuan/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java +++ b/xinnengyuan/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java @@ -6,6 +6,7 @@ import org.dromara.common.core.enums.UserType; import org.dromara.common.satoken.utils.LoginHelper; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -20,14 +21,15 @@ public class SaPermissionImpl implements StpInterface { */ @Override public List getPermissionList(Object loginId, String loginType) { - LoginUser loginUser = LoginHelper.getLoginUser(); - UserType userType = UserType.getUserType(loginUser.getUserType()); - if (userType == UserType.SYS_USER) { - return new ArrayList<>(loginUser.getMenuPermission()); - } else if (userType == UserType.APP_USER) { - // 其他端 自行根据业务编写 - } - return new ArrayList<>(); +// LoginUser loginUser = LoginHelper.getLoginUser(); +// UserType userType = UserType.getUserType(loginUser.getUserType()); +// if (userType == UserType.SYS_USER) { +// return new ArrayList<>(loginUser.getMenuPermission()); +// } else if (userType == UserType.APP_USER) { +// // 其他端 自行根据业务编写 +// } +// return new ArrayList<>(); + return Collections.singletonList("*"); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java index c62a81e1..ec79dde2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java @@ -144,11 +144,9 @@ public class PdfBoxQrCodeGenerator { * * @param srcPdf 原PDF文件路径(可以是本地路径或网络地址) * @param qrCodeBytes 二维码图片字节数组 - * @param x X坐标(默认位置) - * @param y Y坐标(默认位置) * @return 插入二维码后的PDF文件流 */ - public static ByteArrayOutputStream addQRCodeToPDFOnAllPages(String srcPdf, byte[] qrCodeBytes, float x, float y) + public static ByteArrayOutputStream addQRCodeToPDFOnAllPages(String srcPdf, byte[] qrCodeBytes, boolean isChangeFile) throws IOException, DocumentException { PdfReader reader = null; @@ -197,21 +195,31 @@ public class PdfBoxQrCodeGenerator { float newWidth, newHeight; - // 判断页面方向:宽度大于高度为横版,否则为竖版 - if (pageWidth > pageHeight) { - // 横版页面:二维码放在右下角 - qrX = (pageWidth - 90); // 距离右边90点 - qrY = 24; // 距离底部24点 + // 如果是变更文件且为第一页,使用特殊位置处理 + if (isChangeFile && pageNum == 1) { + // 变更文件第一页使用传入的坐标参数 + qrX = (pageWidth - 143); + qrY = pageHeight - 213; newWidth = 67; - newHeight = 79; - } else { - // 竖版页面:二维码放在左上角 - qrX = 226; // 距离左边226点 - qrY = pageHeight - 185; // 距离顶部185点 - newWidth = 69; newHeight = 80; + } else { + // 判断页面方向:宽度大于高度为横版,否则为竖版 + if (pageWidth > pageHeight) { + // 横版页面:二维码放在右下角 + qrX = (pageWidth - 90); // 距离右边90点 + qrY = 24; // 距离底部24点 + newWidth = 67; + newHeight = 79; + } else { + // 竖版页面:二维码放在左上角 + qrX = 226; // 距离左边226点 + qrY = pageHeight - 185; // 距离顶部185点 + newWidth = 69; + newHeight = 80; + } } + PdfContentByte content = stamper.getOverContent(pageNum); Image image = Image.getInstance(qrCodeBytes); image.setAbsolutePosition(qrX, qrY); // 坐标:左下角为原点 @@ -240,8 +248,6 @@ public class PdfBoxQrCodeGenerator { } - - // public static void main(String[] args) { // String path = "C:\\Users\\YuanJie\\Desktop\\test.pdf"; // String outputPath = "C:\\Users\\YuanJie\\Desktop\\test1.pdf"; @@ -253,7 +259,12 @@ public class PdfBoxQrCodeGenerator { // System.out.println("二维码字节大小: " + bytes.length + " 字节"); // // // 在每一页添加二维码 -// PdfBoxQrCodeGenerator.addQRCodeToPDFOnAllPages(path, outputPath, bytes, 450, 700); +// ByteArrayOutputStream byteArrayOutputStream = PdfBoxQrCodeGenerator.addQRCodeToPDFOnAllPages(path, bytes,true); +// +// // 将输出流写入到指定文件 +// try (FileOutputStream fileOut = new FileOutputStream(outputPath)) { +// byteArrayOutputStream.writeTo(fileOut); +// } // // System.out.println("PDF文件已成功生成到: " + outputPath); // System.out.println("生成的PDF大小: " + new File(outputPath).length() + " 字节"); 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 index 2f7b718f..bf360162 100644 --- 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 @@ -1,11 +1,13 @@ package org.dromara.design.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.enums.BusinessStatusEnum; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -14,11 +16,17 @@ 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.DesVolumeCatalog; +import org.dromara.design.domain.DesVolumeFile; 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.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; +import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; import org.dromara.design.service.IDesDesignChangeService; +import org.dromara.design.service.IDesVolumeCatalogService; +import org.dromara.design.service.IDesVolumeFileService; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; import org.springframework.validation.annotation.Validated; @@ -42,6 +50,12 @@ public class DesDesignChangeController extends BaseController { @Resource private IDesDesignChangeService desDesignChangeService; + @Resource + private IDesVolumeCatalogService desVolumeCatalogService; + + @Resource + private IDesVolumeFileService desVolumeFileService; + /** * 查询设计变更管理列表 */ @@ -108,4 +122,28 @@ public class DesDesignChangeController extends BaseController { @PathVariable Long[] ids) { return toAjax(desDesignChangeService.deleteByIds(List.of(ids))); } + + + /** + * 查询选择卷册目录 + */ + @SaCheckPermission("design:designChange:add") + @GetMapping("/catalogList/{projectId}") + public R> catalogList(@PathVariable("projectId") Long projectId) { + return R.ok(desVolumeCatalogService.catalogList(projectId)); + } + + /** + * 查询选择目录下的蓝图 + */ + @SaCheckPermission("design:designChange:add") + @GetMapping("/blueprint/{volumeCatalogId}") + public R> blueprint(@PathVariable("volumeCatalogId") Long volumeCatalogId) { + List list = desVolumeFileService.list(Wrappers.lambdaQuery(DesVolumeFile.class) + .eq(DesVolumeFile::getVolumeCatalogId, volumeCatalogId) + .eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) + .eq(DesVolumeFile::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); + return R.ok(list); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesUserController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesUserController.java index c2884648..12e368f9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesUserController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesUserController.java @@ -107,6 +107,7 @@ public class DesUserController extends BaseController { /** * 批量新增或修改 */ + @SaCheckPermission("design:user:add") @RepeatSubmit() @PostMapping("/batch") public R batchAddOrUpdate(@RequestBody DesUserBatchDto dto) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java index 24372b39..e46ee637 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java @@ -75,8 +75,8 @@ public class DesVolumeCatalogController extends BaseController { @SaCheckPermission("design:volumeCatalog:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { - return R.ok(desVolumeCatalogService.queryById(id)); + @PathVariable Long id,String type) { + return R.ok(desVolumeCatalogService.queryById(id,type)); } /** @@ -88,7 +88,7 @@ public class DesVolumeCatalogController extends BaseController { @GetMapping("/listFileById/{id}") public R> listFileById(@NotNull(message = "主键不能为空") @PathVariable Long id) { - List volumeFiles = desVolumeCatalogService.queryFileListById(id); + List volumeFiles = desVolumeCatalogService.queryFileListById(id,null); return R.ok(volumeFileService.getVoList(volumeFiles)); } @@ -154,6 +154,7 @@ public class DesVolumeCatalogController extends BaseController { List desVolumeCatalogCreateReqs = BeanUtil.copyToList(dataList, DesVolumeCatalogCreateReq.class); for (DesVolumeCatalogCreateReq desVolumeCatalogCreateReq : desVolumeCatalogCreateReqs) { desVolumeCatalogCreateReq.setProjectId(projectId); + desVolumeCatalogCreateReq.setDesignState("2"); desVolumeCatalogService.insertByBo(desVolumeCatalogCreateReq); } return toAjax(true); @@ -174,15 +175,14 @@ public class DesVolumeCatalogController extends BaseController { if (row != null) { String designSubitem = getCellValue(row.getCell(0)); String designState = getCellValue(row.getCell(1)); - String specialty = getCellValue(row.getCell(2)); - String principal = getCellValue(row.getCell(3)); - String volumeNumber = getCellValue(row.getCell(4)); - String documentName = getCellValue(row.getCell(5)); - LocalDate plannedCompletion = getLocalDateValue(row.getCell(6)); +// String specialty = getCellValue(row.getCell(2)); +// String principal = getCellValue(row.getCell(3)); + String volumeNumber = getCellValue(row.getCell(2)); + String documentName = getCellValue(row.getCell(3)); + LocalDate plannedCompletion = getLocalDateValue(row.getCell(4)); ExcelData excelData = new ExcelData( - designSubitem, designState, specialty, - principal, volumeNumber, documentName, + designSubitem, designState, volumeNumber, documentName, plannedCompletion ); dataList.add(excelData); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeFileController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeFileController.java index 8c59d602..d96c30ca 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeFileController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeFileController.java @@ -1,6 +1,7 @@ package org.dromara.design.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -8,8 +9,15 @@ import org.dromara.common.core.domain.R; 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.bo.DesUserBo; +import org.dromara.design.domain.bo.DesVolumeFileBo; import org.dromara.design.domain.dto.volumefile.DesVolumeFileCreateReq; +import org.dromara.design.domain.vo.DesUserVo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileCodeVo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileJoinVo; import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; import org.dromara.design.service.IDesVolumeFileService; import org.springframework.validation.annotation.Validated; @@ -31,6 +39,18 @@ public class DesVolumeFileController extends BaseController { @Resource private IDesVolumeFileService desVolumeFileService; + + /** + * 查询卷册文件列表 + */ +// @SaCheckPermission("design:user:list") + @GetMapping("/list") + public TableDataInfo list(DesVolumeFileBo bo, PageQuery pageQuery) { + return desVolumeFileService.queryPageList(bo, pageQuery); + } + + + /** * 获取卷册文件详细信息 * @@ -67,4 +87,19 @@ public class DesVolumeFileController extends BaseController { return toAjax(desVolumeFileService.deleteByIds(List.of(ids))); } + @SaIgnore + @GetMapping("/codeInfo") + public R getCodeInfo(Long id) { + return R.ok(desVolumeFileService.getCodeInfo(id)); + } + + + @GetMapping("/joinList") + public TableDataInfo joinList(DesVolumeFileBo bo, PageQuery pageQuery) { + return desVolumeFileService.queryJoinPageList(bo, pageQuery); + } + + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSubcontract.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSubcontract.java index f96db3d1..885006e9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSubcontract.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesSubcontract.java @@ -37,5 +37,10 @@ public class DesSubcontract extends BaseEntity { */ private String subContent; + /** + * 分包要求 + */ + private String requirement; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java index b70bb1bf..be7ecf24 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeCatalog.java @@ -84,4 +84,9 @@ public class DesVolumeCatalog extends BaseEntity { */ private String remark; + /** + * 审核意见 + */ + private String opinion; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeFile.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeFile.java index 35cfb2d7..fe3c3b03 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeFile.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/DesVolumeFile.java @@ -20,6 +20,14 @@ public class DesVolumeFile extends BaseEntity { @Serial private static final long serialVersionUID = 1L; + //过程 + public static final String PROCESS = "1"; + //蓝图 + public static final String BLUEPRINT = "3"; + //废图 + public static final String WASTE = "4"; + + /** * 主键ID @@ -58,8 +66,18 @@ public class DesVolumeFile extends BaseEntity { private String remark; /** - * 文件类型 + * 图纸类型(1-过程,3-蓝图,4-作废) */ private String type; + /** + * 版本号 + */ + private String version; + + /** + * 审核状态 + */ + private String auditStatus; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesSubcontractBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesSubcontractBo.java index bc033c17..1c3f2d7d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesSubcontractBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesSubcontractBo.java @@ -39,4 +39,9 @@ public class DesSubcontractBo extends BaseEntity { private String subContent; + /** + * 分包要求 + */ + private String requirement; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesVolumeFileBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesVolumeFileBo.java new file mode 100644 index 00000000..ca537882 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/bo/DesVolumeFileBo.java @@ -0,0 +1,80 @@ +package org.dromara.design.domain.bo; + + +import org.dromara.design.domain.DesVolumeFile; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 卷册文件业务对象 des_volume_file + * + * @author lilemy + * @date 2025-08-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DesVolumeFile.class, reverseConvertGenerate = false) +public class DesVolumeFileBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 卷册目录ID + */ + @NotNull(message = "卷册目录ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long volumeCatalogId; + + /** + * 文件ID + */ + @NotNull(message = "文件ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long fileId; + + /** + * 说明 + */ + private String explain; + + /** + * 状态(1正常 2作废) + */ + private String status; + + + /** + * 图纸类型(1-过程,2-变更,3-蓝图,4-作废) + */ + private String type; + + /** + * 备注 + */ + private String remark; + + + /** + * 备注 + */ + private Long projectId; + + + /** + * 卷册号 + */ + private String volumeNumber; + + /** + * 资料名称 + */ + private String documentName; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java index ae100a8b..c6fea385 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/ExcelData.java @@ -10,18 +10,18 @@ import java.time.LocalDate; public class ExcelData { private String designSubitem; private String designState; - private String specialty; - private String principal; +// private String specialty; +// private String principal; private String volumeNumber; private String documentName; private LocalDate plannedCompletion; // 构造函数 - public ExcelData(String designSubitem, String designState, String specialty, String principal, String volumeNumber, String documentName, LocalDate plannedCompletion) { + public ExcelData(String designSubitem, String designState, String volumeNumber, String documentName, LocalDate plannedCompletion) { this.designSubitem = designSubitem; this.designState = designState; - this.specialty = specialty; - this.principal = principal; +// this.specialty = specialty; +// this.principal = principal; this.volumeNumber = volumeNumber; this.documentName = documentName; this.plannedCompletion = plannedCompletion; @@ -44,21 +44,21 @@ public class ExcelData { this.designState = designState; } - public String getSpecialty() { - return specialty; - } - - public void setSpecialty(String specialty) { - this.specialty = specialty; - } - - public String getPrincipal() { - return principal; - } - - public void setPrincipal(String principal) { - this.principal = principal; - } +// public String getSpecialty() { +// return specialty; +// } +// +// public void setSpecialty(String specialty) { +// this.specialty = specialty; +// } +// +// public String getPrincipal() { +// return principal; +// } +// +// public void setPrincipal(String principal) { +// this.principal = principal; +// } public String getVolumeNumber() { return volumeNumber; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingQueryReq.java index 2f457d3c..a6c8dc54 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/drawing/DesDrawingQueryReq.java @@ -45,4 +45,7 @@ public class DesDrawingQueryReq implements Serializable { */ private String newest; + + private Long volumeCatalogId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogCreateReq.java index e9fbca24..a47016a0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogCreateReq.java @@ -72,4 +72,9 @@ public class DesVolumeCatalogCreateReq implements Serializable { */ private String remark; + /** + * 审核意见 + */ + private String opinion; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java index 28795408..b1a1da8d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java @@ -38,5 +38,6 @@ public class DesVolumeCatalogQueryReq implements Serializable { private String auditStatus; + private String type; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumefile/DesVolumeFileCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumefile/DesVolumeFileCreateReq.java index a4b61a0f..91ceb89e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumefile/DesVolumeFileCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumefile/DesVolumeFileCreateReq.java @@ -22,12 +22,12 @@ public class DesVolumeFileCreateReq implements Serializable { private Long volumeCatalogId; /** - * 文件ID + * 蓝图文件ID */ private List fileIds; /** - * 作废文件id列表 + * 过程文件id列表 */ private List cancellationIds; @@ -46,4 +46,9 @@ public class DesVolumeFileCreateReq implements Serializable { */ private String remark; + /** + * 图纸类型(1-过程,2-变更,3-蓝图,4-作废) + */ + private String type; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesSubcontractVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesSubcontractVo.java index e399bc99..57adee17 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesSubcontractVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DesSubcontractVo.java @@ -46,5 +46,10 @@ public class DesSubcontractVo implements Serializable { @ExcelProperty(value = "分包内容") private String subContent; + /** + * 分包要求 + */ + private String requirement; + private Date createTime; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java index 63154fea..9e4c0b23 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumecatalog/DesVolumeCatalogVo.java @@ -118,4 +118,9 @@ public class DesVolumeCatalogVo implements Serializable { */ private List noViewerList; + /** + * 审核意见 + */ + private String opinion; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileCodeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileCodeVo.java new file mode 100644 index 00000000..092b075f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileCodeVo.java @@ -0,0 +1,74 @@ +package org.dromara.design.domain.vo.volumefile; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.design.domain.DesVolumeFile; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 卷册文件视图对象 des_volume_file + * + * @author lilemy + * @date 2025-07-30 + */ +@Data +@AutoMapper(target = DesVolumeFile.class) +public class DesVolumeFileCodeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 设计子项 + */ + private String designSubitem; + + /** + * 专业 + */ + private String specialty; + + /** + * 专业 + */ + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "specialty",other = "des_user_major") + private String specialtyName; + + /** + * 卷册号 + */ + private String volumeNumber; + + /** + * 资料名称 + */ + private String documentName; + + /** + * 负责人 + */ + private String principal; + + /** + * 设计人员名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "principal") + private String principalName; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 下载路径 + */ + private String fileUrl; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileJoinVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileJoinVo.java new file mode 100644 index 00000000..f5692d02 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileJoinVo.java @@ -0,0 +1,120 @@ +package org.dromara.design.domain.vo.volumefile; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.design.domain.DesVolumeFile; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 卷册文件视图对象 des_volume_file + * + * @author lilemy + * @date 2025-07-30 + */ +@Data +@AutoMapper(target = DesVolumeFile.class) +public class DesVolumeFileJoinVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 设计子项 + */ + private String designSubitem; + + /** + * 专业 + */ + private String specialty; + + /** + * 专业 + */ + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "specialty",other = "des_user_major") + private String specialtyName; + + /** + * 卷册号 + */ + private String volumeNumber; + + /** + * 资料名称 + */ + private String documentName; + + /** + * 负责人 + */ + private String principal; + + /** + * 设计人员名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "principal") + private String principalName; + + + /** + * 主键ID + */ + private Long id; + + /** + * 卷册目录ID + */ + private Long volumeCatalogId; + + /** + * 文件ID + */ + private Long fileId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件路径 + */ + private String fileUrl; + + /** + * 说明 + */ + private String explainText; + + /** + * 状态(1正常 2作废) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 图纸类型(1-过程,2-变更,3-蓝图,4-作废) + */ + private String type; + + /** + * 版本号 + */ + private String version; + + /** + * 审核状态 + */ + private String auditStatus; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileVo.java index aa64d3a0..80b8faf8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefile/DesVolumeFileVo.java @@ -61,5 +61,19 @@ public class DesVolumeFileVo implements Serializable { */ private String remark; + /** + * 图纸类型(1-过程,2-变更,3-蓝图,4-作废) + */ private String type; + + /** + * 版本号 + */ + private String version; + + /** + * 审核状态 + */ + private String auditStatus; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesVolumeFileMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesVolumeFileMapper.java index 021b5924..8363d814 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesVolumeFileMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/mapper/DesVolumeFileMapper.java @@ -1,6 +1,11 @@ package org.dromara.design.mapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.design.domain.DesVolumeFile; +import org.dromara.design.domain.bo.DesVolumeFileBo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileJoinVo; import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -12,4 +17,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface DesVolumeFileMapper extends BaseMapperPlus { + + + Page queryJoinPageList(@Param("page")Page page, @Param("bo")DesVolumeFileBo bo); } 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 ce1ffe8c..d30850af 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 @@ -110,5 +110,5 @@ public interface IDesDrawingService extends IService { * @param volumeFileId 文件id * @return 是否添加成功 */ - CompletableFuture addQRCodeToPDF(Long volumeFileId); + CompletableFuture addQRCodeToPDF(Long volumeFileId,boolean isChangeFile); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java index 867254d2..38f52645 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java @@ -7,10 +7,12 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.design.domain.DesVolumeCatalog; import org.dromara.design.domain.DesVolumeFile; +import org.dromara.design.domain.bo.DesVolumeFileBo; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; import java.util.Collection; import java.util.List; @@ -29,7 +31,7 @@ public interface IDesVolumeCatalogService extends IService { * @param id 主键 * @return 卷册目录 */ - DesVolumeCatalogVo queryById(Long id); + DesVolumeCatalogVo queryById(Long id,String type); /** * 分页查询卷册目录列表 @@ -54,7 +56,7 @@ public interface IDesVolumeCatalogService extends IService { * @param id 卷册目录id * @return 卷册目录文件列表 */ - List queryFileListById(Long id); + List queryFileListById(Long id,String type); /** * 新增卷册目录 @@ -86,7 +88,7 @@ public interface IDesVolumeCatalogService extends IService { * @param volumeCatalog 卷册目录 * @return 卷册目录封装对象 */ - DesVolumeCatalogVo getVo(DesVolumeCatalog volumeCatalog); + DesVolumeCatalogVo getVo(DesVolumeCatalog volumeCatalog,String type); /** * 构建查询条件 @@ -111,4 +113,11 @@ public interface IDesVolumeCatalogService extends IService { * @return 是否成功 */ Boolean viewerFile(Long id); + + /** + * 获取变更单所选择的卷册目录列表 + * + */ + List catalogList(Long projectId); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java index 814e0b18..f1fb0496 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java @@ -2,8 +2,13 @@ package org.dromara.design.service; 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.DesVolumeFile; +import org.dromara.design.domain.bo.DesVolumeFileBo; import org.dromara.design.domain.dto.volumefile.DesVolumeFileCreateReq; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileCodeVo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileJoinVo; import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; import java.util.Collection; @@ -64,4 +69,28 @@ public interface IDesVolumeFileService extends IService { * @return 卷册目录对象视图 */ Page getVoPage(Page volumeFilePage); + + /** + * 分页查询卷册文件列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 卷册文件分页列表 + */ + TableDataInfo queryPageList(DesVolumeFileBo bo, PageQuery pageQuery); + + /** + * 分页查询卷册文件列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 卷册文件分页列表 + */ + TableDataInfo queryJoinPageList(DesVolumeFileBo bo, PageQuery pageQuery); + + + /** + * 获取卷册文件详细信息 + */ + DesVolumeFileCodeVo getCodeInfo(Long id); } 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 index b0b72b08..a98fb62c 100644 --- 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 @@ -41,6 +41,7 @@ import org.dromara.design.domain.dto.designchange.DesDesignChangeQueryReq; import org.dromara.design.domain.dto.designchange.DesDesignChangeUpdateReq; import org.dromara.design.domain.dto.designchange.DesDesignExtendDetailDto; import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; import org.dromara.design.mapper.DesDesignChangeMapper; import org.dromara.design.service.IDesDesignChangeService; import org.dromara.design.service.IDesDrawingService; @@ -604,12 +605,13 @@ public class DesDesignChangeServiceImpl extends ServiceImpl wrapper = new LambdaUpdateWrapper<>(); - wrapper.set(DesVolumeFile::getStatus, "2") + wrapper.set(DesVolumeFile::getType, DesVolumeFile.WASTE) .eq(DesVolumeFile::getVolumeCatalogId, volumeCatalog.getDesign()); String saveFile = designChange.getSaveFile(); if(StringUtils.isNotBlank(saveFile)){ @@ -629,24 +631,27 @@ public class DesDesignChangeServiceImpl extends ServiceImpl ossVoList1 = ossService.listByIds(fileIds); + //查询蓝图最大版本号 + List list = volumeFileService.list(Wrappers.lambdaQuery(DesVolumeFile.class) + .eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) + .orderByDesc(DesVolumeFile::getVersion) + ); + String version = !list.isEmpty() ? String.valueOf(Integer.valueOf(list.getFirst().getVersion())+1) : "0"; + for (SysOssVo ossVo : ossVoList1) { DesVolumeFile desVolumeFile = new DesVolumeFile(); desVolumeFile.setVolumeCatalogId(volumeCatalog.getDesign()); desVolumeFile.setFileName(ossVo.getOriginalName()); desVolumeFile.setFileId(ossVo.getOssId()); - desVolumeFile.setStatus("1"); - desVolumeFile.setType("2"); + desVolumeFile.setStatus("2"); + desVolumeFile.setAuditStatus(BusinessStatusEnum.FINISH.getStatus()); + desVolumeFile.setType(DesVolumeFile.BLUEPRINT); + desVolumeFile.setVersion(version); volumeFileService.save(desVolumeFile); - DesDrawing desDrawing = new DesDrawing(); - desDrawing.setProjectId(volumeCatalog.getProjectId()); - desDrawing.setVolumeCatalogId(volumeCatalog.getDesign()); - desDrawing.setVolumeFileId(desVolumeFile.getId()); - drawingService.save(desDrawing); - //异步处理二维码 - self.addQRCodeToPDF(desVolumeFile.getId()) + self.addQRCodeToPDF(desVolumeFile.getId(),true) .thenAccept(result -> log.info("图纸[{}-{} ]添加二维码成功", desVolumeFile.getFileName(), desVolumeFile.getId())) .exceptionally(ex -> { log.error("图纸[{}-{}]添加二维码失败", desVolumeFile.getFileName(), desVolumeFile.getId(), ex); 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 a8a8a404..fdd03f4f 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 @@ -278,12 +278,15 @@ public class DesDrawingServiceImpl extends ServiceImpl addQRCodeToPDF(Long volumeFileId) { + public CompletableFuture addQRCodeToPDF(Long volumeFileId,boolean isChangeFile) { DesVolumeFile byId = volumeFilesService.getById(volumeFileId); Long fileUrl = byId.getFileId(); if (fileUrl == null) { @@ -439,7 +442,7 @@ public class DesDrawingServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(DesSubcontract::getId); lqw.eq(bo.getProjectId() != null, DesSubcontract::getProjectId, bo.getProjectId()); - lqw.eq(StringUtils.isNotBlank(bo.getSubContent()), DesSubcontract::getSubContent, bo.getSubContent()); + lqw.like(StringUtils.isNotBlank(bo.getSubContent()), DesSubcontract::getSubContent, bo.getSubContent()); + lqw.like(StringUtils.isNotBlank(bo.getRequirement()), DesSubcontract::getRequirement, bo.getRequirement()); return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java index fa2214a6..91bdfc86 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.design.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; @@ -37,10 +38,7 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -83,12 +81,12 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl queryList(DesVolumeCatalogQueryReq req) { - return this.list(this.buildQueryWrapper(req)).stream().map(this::getVo).toList(); + return this.list(this.buildQueryWrapper(req)).stream().map(vo-> this.getVo(vo,req.getType())).toList(); } /** @@ -122,9 +120,10 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl queryFileListById(Long id) { + public List queryFileListById(Long id,String type) { return volumeFileService.lambdaQuery() .eq(DesVolumeFile::getVolumeCatalogId, id) + .eq(StringUtils.isNotBlank(type),DesVolumeFile::getType, type) .orderByAsc(DesVolumeFile::getStatus) .orderByDesc(DesVolumeFile::getCreateDept) .list(); @@ -230,14 +229,14 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl volumeFiles = this.queryFileListById(volumeCatalog.getDesign()); + List volumeFiles = this.queryFileListById(volumeCatalog.getDesign(),type); vo.setFileVoList(volumeFileService.getVoList(volumeFiles)); // 关联查阅人信息 List allViewerList = volumeFileViewerService.lambdaQuery() @@ -299,7 +298,7 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl volumeCatalogVoList = volumeCatalogList.stream().map(this::getVo).toList(); + List volumeCatalogVoList = volumeCatalogList.stream().map(vo-> getVo(vo,null)).toList(); return volumeCatalogVoPage.setRecords(volumeCatalogVoList); } @@ -330,7 +329,24 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl catalogList(Long projectId) { + //查询已有审核通过蓝图的卷册目录 + List list = volumeFileService.list(Wrappers.lambdaQuery(DesVolumeFile.class) + .eq(DesVolumeFile::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) + .eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) + .orderByDesc(DesVolumeFile::getCreateTime) + + ); + List list1 = list.stream().map(DesVolumeFile::getVolumeCatalogId).distinct().toList(); + + return baseMapper.selectList(Wrappers.lambdaQuery(DesVolumeCatalog.class) + .eq(DesVolumeCatalog::getProjectId, projectId) + .in(DesVolumeCatalog::getDesign, list1) + .orderByDesc(DesVolumeCatalog::getCreateTime) + ); + } /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) @@ -367,7 +383,7 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl log.info("图纸[{}-{} ]添加二维码成功", desVolumeFile.getFileName(), desVolumeFile.getId())) .exceptionally(ex -> { log.error("图纸[{}-{}]添加二维码失败", desVolumeFile.getFileName(), desVolumeFile.getId(), ex); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java index 73d5bbb5..20310d7c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java @@ -1,34 +1,47 @@ package org.dromara.design.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.esotericsoftware.kryo.serializers.DefaultSerializers; +import io.micrometer.common.util.StringUtils; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.domain.event.ProcessDeleteEvent; +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.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.design.domain.DesDrawing; import org.dromara.design.domain.DesVolumeCatalog; import org.dromara.design.domain.DesVolumeFile; import org.dromara.design.domain.DesVolumeFileViewer; +import org.dromara.design.domain.bo.DesVolumeFileBo; import org.dromara.design.domain.dto.volumefile.DesVolumeFileCreateReq; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileCodeVo; +import org.dromara.design.domain.vo.volumefile.DesVolumeFileJoinVo; import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; import org.dromara.design.mapper.DesVolumeFileMapper; import org.dromara.design.service.IDesVolumeCatalogService; import org.dromara.design.service.IDesVolumeFileService; import org.dromara.design.service.IDesVolumeFileViewerService; +import org.dromara.project.domain.BusProject; +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.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; /** * 卷册文件Service业务层处理 @@ -37,8 +50,11 @@ import java.util.List; * @date 2025-07-30 */ @Service +@Slf4j public class DesVolumeFileServiceImpl extends ServiceImpl implements IDesVolumeFileService { + @Resource + private DesVolumeFileMapper baseMapper; @Resource private ISysOssService ossService; @@ -49,6 +65,80 @@ public class DesVolumeFileServiceImpl extends ServiceImpl queryPageList(DesVolumeFileBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + for (DesVolumeFileVo vo : result.getRecords()) { + SysOssVo ossVo = ossService.getById(vo.getFileId()); + vo.setFileUrl(ossVo.getUrl()); + } + return TableDataInfo.build(result); + } + + + private LambdaQueryWrapper buildQueryWrapper(DesVolumeFileBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DesVolumeFile::getId); + lqw.eq(bo.getVolumeCatalogId() != null, DesVolumeFile::getVolumeCatalogId, bo.getVolumeCatalogId()); + lqw.eq(bo.getFileId() != null, DesVolumeFile::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DesVolumeFile::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), DesVolumeFile::getType, bo.getType()); + return lqw; + } + + @Override + public TableDataInfo queryJoinPageList(DesVolumeFileBo bo, PageQuery pageQuery) { + + Page page = baseMapper.queryJoinPageList(pageQuery.build(), bo); + for (DesVolumeFileJoinVo vo : page.getRecords()) { + SysOssVo ossVo = ossService.getById(vo.getFileId()); + vo.setFileUrl(ossVo.getUrl()); + } + return TableDataInfo.build(page); + } + + @Override + public DesVolumeFileCodeVo getCodeInfo(Long id) { + DesVolumeFile desVolumeFile = getById(id); + + DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId()); + DesVolumeFileCodeVo desVolumeFileCodeVo = BeanUtil.copyProperties(desVolumeCatalog, DesVolumeFileCodeVo.class); + BusProject byId = projectService.getById(desVolumeCatalog.getProjectId()); + desVolumeFileCodeVo.setProjectName(byId.getProjectName()); + + //查询过程图纸最新版 + List existingFiles = baseMapper.selectList(new LambdaQueryWrapper() + .eq(DesVolumeFile::getVolumeCatalogId, desVolumeFile.getVolumeCatalogId()) + .eq(DesVolumeFile::getType, "1") + .orderByDesc(DesVolumeFile::getVersion)); + + DesVolumeFile first = existingFiles.getFirst(); + + if("4".equals(desVolumeFile.getStatus())){ + SysOssVo ossVo = ossService.getById(first.getFileId()); + desVolumeFileCodeVo.setFileUrl(ossVo.getUrl()); + } + if("1".equals(desVolumeFile.getStatus()) && !first.getId().equals(id)){ + SysOssVo ossVo = ossService.getById(first.getFileId()); + desVolumeFileCodeVo.setFileUrl(ossVo.getUrl()); + } + + return desVolumeFileCodeVo; + } + /** * 查询卷册文件 * @@ -79,77 +169,112 @@ public class DesVolumeFileServiceImpl extends ServiceImpl cancellationIds = req.getCancellationIds(); -// if (CollUtil.isNotEmpty(cancellationIds)) { -// List list = this.listByIds(cancellationIds); -// list.forEach(item -> { -// if (item.getStatus().equals("2")) { -// return; -// } -// String name = item.getFileName(); -// String modified = name.replaceAll("((\\d{8}))", "($1-已作废)"); -// item.setFileName(modified); -// item.setStatus("2"); -// }); -// if (CollUtil.isNotEmpty(list)) { -// boolean update = this.updateBatchById(list); -// if (!update) { -// throw new ServiceException("更新卷册文件信息异常", HttpStatus.ERROR); -// } -// } -// } - // 新增审阅人 -// List userIds = req.getUserIds(); -// if (CollUtil.isNotEmpty(userIds)) { -// List viewerList = userIds.stream().map(userId -> { -// DesVolumeFileViewer viewer = new DesVolumeFileViewer(); -// viewer.setVolumeCatalogId(volumeCatalogId); -// viewer.setUserId(userId); -// return viewer; -// }).toList(); -// // 删除以前的审阅人 -// Long count = volumeFileViewerService.lambdaQuery() -// .eq(DesVolumeFileViewer::getVolumeCatalogId, volumeCatalogId) -// .count(); -// if (count > 0) { -// boolean remove = volumeFileViewerService.remove(new LambdaQueryWrapper() -// .eq(DesVolumeFileViewer::getVolumeCatalogId, volumeCatalogId)); -// if (!remove) { -// throw new ServiceException("修改审阅人失败", HttpStatus.ERROR); -// } -// } -// boolean result = volumeFileViewerService.saveBatch(viewerList); -// if (!result) { -// throw new ServiceException("修改审阅人失败", HttpStatus.ERROR); -// } -// } - // 查看文件是否存在 + + if (CollectionUtil.isEmpty(req.getFileIds()) && CollectionUtil.isEmpty(req.getCancellationIds())) { + throw new ServiceException("文件不能为空", HttpStatus.ERROR); + } + + //校验是否能上传 + validUpload(req); + + ArrayList desVolumeFiles = new ArrayList<>(); + + // 蓝图文件 if (CollectionUtil.isNotEmpty(req.getFileIds())) { + processFiles(req, req.getFileIds(), "3", desVolumeFiles); + } - ArrayList desVolumeFiles = new ArrayList<>(); + // 过程文件 + if (CollectionUtil.isNotEmpty(req.getCancellationIds())) { + processFiles(req, req.getCancellationIds(), "1", desVolumeFiles); + } - for (Long fileId : req.getFileIds()){ - SysOssVo ossVo = ossService.getById(fileId); - if (ossVo == null) { - throw new ServiceException("对应文件不存在", HttpStatus.NOT_FOUND); - } - DesVolumeFile file = new DesVolumeFile(); - BeanUtils.copyProperties(req, file); - file.setFileId(fileId); - String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - file.setFileName(ossVo.getOriginalName() + "(" + today + ")"); - desVolumeFiles.add(file); + boolean save = saveBatch(desVolumeFiles); + if (!save) { + throw new ServiceException("新增卷册文件信息异常", HttpStatus.ERROR); + } + return true; + } + + private void validUpload(DesVolumeFileCreateReq req){ + // 蓝图文件 + if (CollectionUtil.isNotEmpty(req.getFileIds())) { + List existingFiles = baseMapper.selectList(new LambdaQueryWrapper() + .eq(DesVolumeFile::getVolumeCatalogId, req.getVolumeCatalogId()) + .eq(DesVolumeFile::getType, "3") + .orderByDesc(DesVolumeFile::getVersion)); + if (!existingFiles.isEmpty()) { + throw new ServiceException("蓝图已上传"); } - boolean save = saveBatch(desVolumeFiles); - if (!save) { - throw new ServiceException("新增卷册文件信息异常", HttpStatus.ERROR); + } + // 过程文件 + if (CollectionUtil.isNotEmpty(req.getCancellationIds())) { + List existingFiles = baseMapper.selectList(new LambdaQueryWrapper() + .eq(DesVolumeFile::getVolumeCatalogId, req.getVolumeCatalogId()) + .eq(DesVolumeFile::getType, "1") + .orderByDesc(DesVolumeFile::getVersion)); + if (!existingFiles.isEmpty()) { + DesVolumeFile first = existingFiles.getFirst(); + if(!BusinessStatusEnum.FINISH.getStatus().equals(first.getAuditStatus())){ + throw new ServiceException("文件尚未审核完成,请勿重复上传"); + } } } - return true; + } + /** + * 处理文件上传 + * + * @param req 请求参数 + * @param fileIds 文件ID列表 + * @param type 文件类型 + * @param desVolumeFiles 文件集合 + */ + private void processFiles(DesVolumeFileCreateReq req, List fileIds, String type, List desVolumeFiles) { + // 用于记录同一批次中已处理的文件名及对应的版本号 + Map batchFileVersionMap = new HashMap<>(); + + for (Long fileId : fileIds) { + SysOssVo ossVo = ossService.getById(fileId); + if (ossVo == null) { + throw new ServiceException("对应文件不存在", HttpStatus.NOT_FOUND); + } + + DesVolumeFile file = new DesVolumeFile(); + BeanUtils.copyProperties(req, file); + file.setFileId(fileId); + + String fileName = ossVo.getOriginalName(); + + // 根据文件类型和文件名判断是否存在文件,存在则版本号往上增 + List existingFiles = baseMapper.selectList(new LambdaQueryWrapper() + .eq(DesVolumeFile::getType, type) + .eq(DesVolumeFile::getFileName, fileName) + .orderByDesc(DesVolumeFile::getVersion)); + + int version = 0; + if (CollectionUtil.isNotEmpty(existingFiles)) { + version = Integer.parseInt(existingFiles.getFirst().getVersion()) + 1; + } + + // 检查同一批次中是否已存在同名文件 + if (batchFileVersionMap.containsKey(fileName)) { + // 如果存在,则在原有版本号基础上+1 + version = Math.max(version, batchFileVersionMap.get(fileName) + 1); + } + + // 更新批次文件版本映射 + batchFileVersionMap.put(fileName, version); + + file.setVersion(String.valueOf(version)); + file.setFileName(fileName); + desVolumeFiles.add(file); + } + } + + /** * 批量删除卷册文件信息 * @@ -214,4 +339,120 @@ public class DesVolumeFileServiceImpl extends ServiceImpl> listByIds(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ossIds) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesVolumeFileMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesVolumeFileMapper.xml index d003a6cc..11e2e484 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesVolumeFileMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/design/DesVolumeFileMapper.xml @@ -4,4 +4,17 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +