From 9825e0ba1de4476f7d535fced4933d90f3c77a19 Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Sat, 10 May 2025 22:17:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=BA=A6+=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E9=87=8D=E6=9E=84+=E6=96=87=E4=BB=B6=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysOssController.java | 6 +- .../system/SysProfileController.java | 4 +- .../OaProjectScheduleStepController.java | 11 ++ .../oa/controller/SysOaFileController.java | 102 ------------ .../oa/controller/SysOaProjectController.java | 2 - .../controller/SysOaWarehouseController.java | 2 +- .../SysOaWarehouseMasterController.java | 14 +- .../oa/controller/SysOssAclController.java | 61 +++++++ .../oa/domain/OaProjectScheduleStep.java | 8 + .../com/ruoyi/oa/domain/SysOaWarehouse.java | 3 - .../java/com/ruoyi/oa/domain/SysOssAcl.java | 26 +++ .../java/com/ruoyi/oa/domain/bo/BatchBo.java | 13 ++ .../oa/domain/bo/OaProjectScheduleStepBo.java | 7 + .../com/ruoyi/oa/domain/bo/OssUserBo.java | 12 ++ .../com/ruoyi/oa/domain/bo/SysOaClaimBo.java | 5 +- .../oa/domain/bo/SysOaWarehouseDetailBo.java | 3 + .../oa/domain/vo/OaProjectScheduleStepVo.java | 10 ++ .../com/ruoyi/oa/domain/vo/SysOaFileVo.java | 51 ------ .../mapper/OaProjectScheduleStepMapper.java | 4 +- .../com/ruoyi/oa/mapper/SysOaFileMapper.java | 15 -- .../com/ruoyi/oa/mapper/SysOssAclMapper.java | 8 + .../IOaProjectScheduleStepService.java | 11 +- .../ruoyi/oa/service/ISysOaFileService.java | 59 ------- .../service/ISysOaWarehouseMasterService.java | 5 +- .../oa/service/ISysOaWarehouseService.java | 2 +- .../ruoyi/oa/service/SysOssAclService.java | 22 +++ .../impl/OaProjectScheduleServiceImpl.java | 7 +- .../OaProjectScheduleStepServiceImpl.java | 72 ++++++++- .../OaScheduleTemplateStepServiceImpl.java | 3 +- .../service/impl/SysOaClaimServiceImpl.java | 17 +- .../oa/service/impl/SysOaFileServiceImpl.java | 149 ------------------ .../impl/SysOaTaskItemServiceImpl.java | 8 +- .../oa/service/impl/SysOaTaskServiceImpl.java | 15 +- .../impl/SysOaWarehouseDetailServiceImpl.java | 27 ++-- .../impl/SysOaWarehouseMasterServiceImpl.java | 16 +- .../impl/SysOaWarehouseServiceImpl.java | 25 ++- .../oa/service/impl/SysOssAclServiceImpl.java | 111 +++++++++++++ .../mapper/oa/OaProjectScheduleMapper.xml | 88 +++++------ .../mapper/oa/OaProjectScheduleStepMapper.xml | 78 ++++++--- .../oa/OaScheduleTemplateStepMapper.xml | 11 +- .../resources/mapper/oa/SysOaClaimMapper.xml | 28 ++-- .../mapper/oa/SysOaProjectMapper.xml | 8 +- .../resources/mapper/oa/SysOaTaskMapper.xml | 61 +++---- .../mapper/oa/SysOaWarehouseDetailMapper.xml | 2 + .../mapper/oa/SysOaWarehouseMasterMapper.xml | 148 ++++++++++------- .../java/com/ruoyi/system/domain/SysOss.java | 4 + .../ruoyi/system/service/ISysOssService.java | 3 +- .../service/impl/SysOssServiceImpl.java | 22 ++- script/sql/20250507添加项目进度/schedule.sql | 53 ++++++- 49 files changed, 758 insertions(+), 664 deletions(-) delete mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFileController.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOssAclController.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOssAcl.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BatchBo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OssUserBo.java delete mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java delete mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFileMapper.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOssAclMapper.java delete mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/SysOssAclService.java delete mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOssAclServiceImpl.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java index a40ebf7..44674cf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java @@ -69,11 +69,13 @@ public class SysOssController extends BaseController { @SaCheckPermission("system:oss:upload") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R> upload(@RequestPart("file") MultipartFile file) { + public R> upload(@RequestPart("file") MultipartFile file, + // ★ 接收 isPublic,默认 0 + @RequestParam(name = "isPublic", defaultValue = "0") Long isPublic) { if (ObjectUtil.isNull(file)) { return R.fail("上传文件不能为空"); } - SysOssVo oss = iSysOssService.upload(file); + SysOssVo oss = iSysOssService.upload(file,isPublic); Map map = new HashMap<>(2); map.put("url", oss.getUrl()); map.put("fileName", oss.getOriginalName()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java index 9e646ec..409604e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -3,7 +3,6 @@ package com.ruoyi.web.controller.system; import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.io.FileUtil; import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; @@ -11,7 +10,6 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; -import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.domain.vo.SysOssVo; import com.ruoyi.system.service.ISysOssService; import com.ruoyi.system.service.ISysUserService; @@ -114,7 +112,7 @@ public class SysProfileController extends BaseController { if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { return R.fail("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式"); } - SysOssVo oss = iSysOssService.upload(avatarfile); + SysOssVo oss = iSysOssService.upload(avatarfile, 1L); String avatar = oss.getUrl(); if (userService.updateUserAvatar(getUsername(), avatar)) { ajax.put("imgUrl", avatar); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectScheduleStepController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectScheduleStepController.java index 7fcdb9d..dbed69a 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectScheduleStepController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectScheduleStepController.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.oa.domain.bo.BatchBo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -86,6 +87,16 @@ public class OaProjectScheduleStepController extends BaseController { return toAjax(iOaProjectScheduleStepService.updateByBo(bo)); } + + /** + * 修改项目进度步骤跟踪 + */ + @RepeatSubmit() + @PutMapping("/change-batch") + public R changeBatch(@Validated(EditGroup.class) @RequestBody BatchBo batchBo) { + return toAjax(iOaProjectScheduleStepService.changeBatch(batchBo)); + } + /** * 删除项目进度步骤跟踪 * diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFileController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFileController.java deleted file mode 100644 index 4878814..0000000 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFileController.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.ruoyi.oa.controller; - -import java.util.List; -import java.util.Arrays; -import java.util.concurrent.TimeUnit; - -import lombok.RequiredArgsConstructor; -import javax.servlet.http.HttpServletResponse; -import javax.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import com.ruoyi.common.annotation.RepeatSubmit; -import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.PageQuery; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.core.validate.AddGroup; -import com.ruoyi.common.core.validate.EditGroup; -import com.ruoyi.common.core.validate.QueryGroup; -import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.oa.domain.vo.SysOaFileVo; -import com.ruoyi.oa.domain.bo.SysOaFileBo; -import com.ruoyi.oa.service.ISysOaFileService; -import com.ruoyi.common.core.page.TableDataInfo; - -/** - * 文件存储 - * - * @author hdka - * @date 2024-12-15 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/oaFile") -public class SysOaFileController extends BaseController { - - private final ISysOaFileService iSysOaFileService; - - /** - * 查询文件存储列表 - */ - @GetMapping("/list") - public TableDataInfo list(SysOaFileBo bo, PageQuery pageQuery) { - return iSysOaFileService.queryPageList(bo, pageQuery); - } - - /** - * 导出文件存储列表 - */ - @Log(title = "文件存储", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(SysOaFileBo bo, HttpServletResponse response) { - List list = iSysOaFileService.queryList(bo); - ExcelUtil.exportExcel(list, "文件存储", SysOaFileVo.class, response); - } - - /** - * 获取文件存储详细信息 - * - * @param fileId 主键 - */ - @GetMapping("/{fileId}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long fileId) { - return R.ok(iSysOaFileService.queryById(fileId)); - } - - /** - * 新增文件存储 - */ - @Log(title = "文件存储", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody SysOaFileBo bo) { - return toAjax(iSysOaFileService.insertByBo(bo)); - } - - /** - * 修改文件存储 - */ - @Log(title = "文件存储", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody SysOaFileBo bo) { - return toAjax(iSysOaFileService.updateByBo(bo)); - } - - /** - * 删除文件存储 - * - * @param fileIds 主键串 - */ - @Log(title = "文件存储", businessType = BusinessType.DELETE) - @DeleteMapping("/{fileIds}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] fileIds) { - return toAjax(iSysOaFileService.deleteWithValidByIds(Arrays.asList(fileIds), true)); - } -} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java index 79d258d..96c4fc4 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java @@ -6,13 +6,11 @@ import java.util.Arrays; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; -import com.ruoyi.oa.domain.vo.SysOaFileVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import com.ruoyi.oa.mapper.SysOaTaskMapper; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java index c5a49de..0db9238 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseController.java @@ -114,7 +114,7 @@ public class SysOaWarehouseController extends BaseController { @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody SysOaWarehouseBo bo) { - return toAjax(iSysOaWarehouseService.insertByBo(bo)); + return toAjax(iSysOaWarehouseService.insertByBo(bo)>0); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseMasterController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseMasterController.java index fb70da4..150f154 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseMasterController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseMasterController.java @@ -55,15 +55,6 @@ public class SysOaWarehouseMasterController extends BaseController { return iSysOaWarehouseMasterService.queryPageList(bo, pageQuery); } - /** - * 查询出库单管理列表 - */ - @GetMapping("/list-task") - public TableDataInfo listTask(SysOaWarehouseMasterBo bo, PageQuery pageQuery) { - bo.setType(2L); - return iSysOaWarehouseMasterService.queryPageList(bo, pageQuery); - } - /** * 导出出库单管理列表 */ @@ -102,8 +93,9 @@ public class SysOaWarehouseMasterController extends BaseController { @RepeatSubmit() @PostMapping("/in") public R addIn(@Validated(AddGroup.class) @RequestBody SysOaWarehouseBo bo) { - warehouseService.insertByBo(bo); - return toAjax(iSysOaWarehouseMasterService.insertInWarehouse(bo)); + Long id = warehouseService.insertByBo(bo); + System.out.println(warehouseService.queryById(id)); + return toAjax(iSysOaWarehouseMasterService.insertInWarehouse(bo,id)); } /** diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOssAclController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOssAclController.java new file mode 100644 index 0000000..eb019fd --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOssAclController.java @@ -0,0 +1,61 @@ +package com.ruoyi.oa.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.oa.domain.vo.SysUserVo; +import com.ruoyi.oa.service.SysOssAclService; +import lombok.Data; +import org.flowable.spring.security.UserDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@RestController +@RequestMapping("/oa/oss/acl") +public class SysOssAclController { + + @Autowired + private SysOssAclService aclService; + + /** 授权 */ + @PostMapping("/grant") + public R grant(@RequestBody GrantDto dto) { + aclService.grant(dto.getOssId(), dto.getUserId(), dto.getGrantBy()); + return R.ok(); + } + + /** 取消共享 */ + @DeleteMapping("/revoke") + public R revoke(@RequestBody RevokeDto dto) { + aclService.revoke(dto.getOssId(), dto.getUserId()); + return R.ok(); + } + + /** 判断权限(示例) */ + @GetMapping("/check") + public R check(@RequestParam Long ossId, + @RequestParam Long userId) { + return R.ok(aclService.hasPerm(userId, ossId)); + } + + @GetMapping("/list") + public R> list(@RequestParam Long ossId) { + return R.ok(aclService.listUsersByOssId(ossId)); + } + + + // ====================== DTO ====================== + @Data + public static class GrantDto { + @NotNull private Long ossId; + @NotNull private Long userId; + @NotNull private Long grantBy; + } + + @Data + public static class RevokeDto { + @NotNull private Long ossId; + @NotNull private Long userId; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectScheduleStep.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectScheduleStep.java index 80732e8..dfc2e2b 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectScheduleStep.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectScheduleStep.java @@ -76,4 +76,12 @@ public class OaProjectScheduleStep extends BaseEntity { @TableLogic private String delFlag; + /** + * 使用标志 + */ + private Long useFlag; + + + private Long batchId; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java index a175b9d..9fba6d5 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouse.java @@ -3,9 +3,6 @@ package com.ruoyi.oa.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; -import java.io.Serializable; -import java.util.Date; -import java.math.BigDecimal; import com.ruoyi.common.core.domain.BaseEntity; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOssAcl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOssAcl.java new file mode 100644 index 0000000..9224453 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOssAcl.java @@ -0,0 +1,26 @@ +package com.ruoyi.oa.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import java.time.LocalDateTime; + +@Data +@TableName("sys_oss_acl") +public class SysOssAcl { + + /** 主键 */ + @TableId(type = IdType.AUTO) + private Long aclId; + + /** 文件 ID */ + private Long ossId; + + /** 被授权用户 */ + private Long userId; + + /** 授权人 */ + private Long grantBy; + + /** 授权时间 */ + private LocalDateTime grantTime; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BatchBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BatchBo.java new file mode 100644 index 0000000..bec3e65 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BatchBo.java @@ -0,0 +1,13 @@ +package com.ruoyi.oa.domain.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class BatchBo { + + private Long currentStep; + + private List boList; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectScheduleStepBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectScheduleStepBo.java index b59ce4a..e54c31d 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectScheduleStepBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectScheduleStepBo.java @@ -91,4 +91,11 @@ public class OaProjectScheduleStepBo extends BaseEntity { */ private String header; + /** + * 使用标志 + */ + private Long useFlag; + + private Long batchId; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OssUserBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OssUserBo.java new file mode 100644 index 0000000..f10e057 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OssUserBo.java @@ -0,0 +1,12 @@ +package com.ruoyi.oa.domain.bo; + + +import lombok.Data; + +@Data +public class OssUserBo { + + private Long ossId; + + private String userIds; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java index d111622..3aafc83 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java @@ -1,10 +1,7 @@ package com.ruoyi.oa.domain.bo; import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.core.validate.AddGroup; -import com.ruoyi.common.core.validate.EditGroup; -import com.ruoyi.oa.domain.SysOaClaimDetail; -import com.ruoyi.oa.domain.SysOaFile; + import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.*; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseDetailBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseDetailBo.java index 13349b5..5c48717 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseDetailBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseDetailBo.java @@ -63,4 +63,7 @@ public class SysOaWarehouseDetailBo extends BaseEntity { private Double signPrice; private Long masterId; + + // 当为1的时候为入库单 + private Long type; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleStepVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleStepVo.java index 4d29282..8fef3e3 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleStepVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleStepVo.java @@ -97,4 +97,14 @@ public class OaProjectScheduleStepVo { /** 附件列表(1 步骤可多附件) */ private List fileList; // 建议用 List + /** + * 使用标志 + */ + private Long useFlag; + + /** + * 批次号 + */ + private Long batchId; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java deleted file mode 100644 index eda57ea..0000000 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ruoyi.oa.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import com.ruoyi.common.annotation.ExcelDictFormat; -import com.ruoyi.common.convert.ExcelDictConvert; -import com.ruoyi.common.core.domain.BaseEntity; -import lombok.Data; -import java.util.Date; - - - -/** - * 文件存储视图对象 sys_oa_file - * - * @author hdka - * @date 2024-12-15 - */ -@Data -@ExcelIgnoreUnannotated -public class SysOaFileVo extends BaseEntity { - - private static final long serialVersionUID = 1L; - - /** - * 主键id - */ - @ExcelProperty(value = "主键id") - private Long fileId; - - /** - * 文件存储路径 - */ - @ExcelProperty(value = "文件存储路径") - private String fileUrl; - - /** - * 文件类型0打卡1出入库 - */ - @ExcelProperty(value = "文件类型", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "file_status") - private Long status; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - -} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleStepMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleStepMapper.java index ae2501b..2597122 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleStepMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleStepMapper.java @@ -15,9 +15,9 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; */ public interface OaProjectScheduleStepMapper extends BaseMapperPlus { - Page selectVoPagePlus(@Param("page")Page build, @Param(Constants.WRAPPER) QueryWrapper lqw); + Page selectVoPagePlus(@Param("page")Page build, @Param(Constants.WRAPPER) QueryWrapper lqw, @Param("userId") Long userId); - OaProjectScheduleStepVo selectVoPlusById(Long trackId); + OaProjectScheduleStepVo selectVoPlusById(@Param("trackId") Long trackId, @Param("userId") Long userId); OaProjectScheduleStepVo maxStepByScheduleId(Long scheduleId); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFileMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFileMapper.java deleted file mode 100644 index f7bc103..0000000 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFileMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ruoyi.oa.mapper; - -import com.ruoyi.oa.domain.SysOaFile; -import com.ruoyi.oa.domain.vo.SysOaFileVo; -import com.ruoyi.common.core.mapper.BaseMapperPlus; - -/** - * 文件存储Mapper接口 - * - * @author hdka - * @date 2024-12-15 - */ -public interface SysOaFileMapper extends BaseMapperPlus { - -} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOssAclMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOssAclMapper.java new file mode 100644 index 0000000..d885872 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOssAclMapper.java @@ -0,0 +1,8 @@ +package com.ruoyi.oa.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.oa.domain.SysOssAcl; + +public interface SysOssAclMapper extends BaseMapper { + /* 这里通常不需要额外方法,BaseMapper 提供了增删改查 */ +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectScheduleStepService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectScheduleStepService.java index 391d643..eb2d641 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectScheduleStepService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectScheduleStepService.java @@ -1,13 +1,11 @@ package com.ruoyi.oa.service; -import com.ruoyi.oa.domain.OaProjectScheduleStep; +import com.ruoyi.oa.domain.bo.BatchBo; import com.ruoyi.oa.domain.vo.OaProjectScheduleStepVo; import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; -import org.apache.ibatis.annotations.Param; -import javax.validation.constraints.NotNull; import java.util.Collection; import java.util.List; @@ -55,4 +53,11 @@ public interface IOaProjectScheduleStepService { OaProjectScheduleStepVo selectByCurrentStepAndScheduleId(Long currentStep, Long scheduleId); + /** + * 更换进度时间线 + * @param boList + * @return + */ + int changeBatch(BatchBo boList); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java deleted file mode 100644 index 7fd856e..0000000 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.ruoyi.oa.service; - -import com.ruoyi.oa.domain.SysOaFile; -import com.ruoyi.oa.domain.vo.SysOaFileVo; -import com.ruoyi.oa.domain.bo.SysOaFileBo; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.core.domain.PageQuery; - -import java.util.Collection; -import java.util.List; - -/** - * 文件存储Service接口 - * - * @author hdka - * @date 2024-12-15 - */ -public interface ISysOaFileService { - - /** - * 查询文件存储 - */ - SysOaFileVo queryById(Long fileId); - - /** - * 查询文件存储列表 - */ - TableDataInfo queryPageList(SysOaFileBo bo, PageQuery pageQuery); - - /** - * 查询文件存储列表 - */ - List queryList(SysOaFileBo bo); - - /** - * 新增文件存储 - */ - Boolean insertByBo(SysOaFileBo bo); - - /** - * 修改文件存储 - */ - Boolean updateByBo(SysOaFileBo bo); - - /** - * 校验并批量删除文件存储信息 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - Long insertByBoReturnId(SysOaFileBo bo); - - /** - * 新增文件返回他们的ID - * @param fileUrls - * @return - */ - String insertFiles(List fileUrls); - -} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseMasterService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseMasterService.java index c41f88b..f9134a0 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseMasterService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseMasterService.java @@ -1,6 +1,5 @@ package com.ruoyi.oa.service; -import com.ruoyi.oa.domain.SysOaWarehouseMaster; import com.ruoyi.oa.domain.bo.SysOaWarehouseBo; import com.ruoyi.oa.domain.vo.SysOaWarehouseMasterVo; import com.ruoyi.oa.domain.bo.SysOaWarehouseMasterBo; @@ -50,8 +49,10 @@ public interface ISysOaWarehouseMasterService { /** * 单个入库接口 + * * @param bo + * @param id * @return */ - int insertInWarehouse(SysOaWarehouseBo bo); + int insertInWarehouse(SysOaWarehouseBo bo, Long id); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseService.java index 8ccb6ac..565051c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseService.java @@ -34,7 +34,7 @@ public interface ISysOaWarehouseService { /** * 新增仓库管理 */ - Boolean insertByBo(SysOaWarehouseBo bo); + Long insertByBo(SysOaWarehouseBo bo); /** * 修改仓库管理 diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/SysOssAclService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/SysOssAclService.java new file mode 100644 index 0000000..7d7615c --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/SysOssAclService.java @@ -0,0 +1,22 @@ +package com.ruoyi.oa.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.oa.domain.SysOssAcl; +import com.ruoyi.oa.domain.vo.SysUserVo; + +import java.util.List; + +public interface SysOssAclService extends IService { + + /** 授权(有则更新,无则插入) */ + void grant(Long ossId, Long userId, Long grantBy); + + /** 取消共享 */ + void revoke(Long ossId, Long userId); + + /** 校验用户是否拥有 >= 指定权限 */ + boolean hasPerm(Long userId, Long ossId); + + List listUsersByOssId(Long ossId); + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java index 928c520..45d2e52 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java @@ -23,6 +23,7 @@ import com.ruoyi.oa.domain.vo.OaProjectScheduleVo; import com.ruoyi.oa.domain.OaProjectSchedule; import com.ruoyi.oa.mapper.OaProjectScheduleMapper; import com.ruoyi.oa.service.IOaProjectScheduleService; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @@ -123,6 +124,7 @@ public class OaProjectScheduleServiceImpl implements IOaProjectScheduleService { OaProjectScheduleStepBo step = bo.getSteps().get(i); step.setScheduleId(add.getScheduleId()); step.setStepOrder((long) (i+1)); + step.setBatchId(1L); if (i==0){ step.setActualStart(new Date()); } @@ -172,6 +174,7 @@ public class OaProjectScheduleServiceImpl implements IOaProjectScheduleService { } @Override + @Transactional(rollbackFor = Exception.class) public boolean complete(OaProjectScheduleBo bo) { // 0首先判断是否到最后一部 OaProjectScheduleStepVo scheduleStepVo = projectScheduleStepService.maxStepByScheduleId(bo.getScheduleId()); @@ -180,11 +183,13 @@ public class OaProjectScheduleServiceImpl implements IOaProjectScheduleService { // 1未完成全部进度,此时将currentStep更新到下一位 然后将当前的step的完成标志status改为1标志完成 projectScheduleStepService.updateByStepAndScheduleId(bo.getCurrentStep(),bo.getScheduleId()); bo.setCurrentStep(bo.getCurrentStep()+1L); - OaProjectScheduleStepVo stepVo = projectScheduleStepService.selectByCurrentStepAndScheduleId(bo.getCurrentStep()+1L,bo.getScheduleId()); + OaProjectScheduleStepVo stepVo = projectScheduleStepService.selectByCurrentStepAndScheduleId(bo.getCurrentStep(),bo.getScheduleId()); stepVo.setActualStart(new Date()); OaProjectScheduleStepBo update = BeanUtil.toBean(stepVo, OaProjectScheduleStepBo.class); projectScheduleStepService.updateByBo(update); }else{ + // 将最后一步完成 + projectScheduleStepService.updateByStepAndScheduleId(bo.getCurrentStep(),bo.getScheduleId()); // 2完成了全部进度,此时将此对象的status直接改为2代表完成了全部操作 OaProjectScheduleStepVo stepVo = projectScheduleStepService.selectByCurrentStepAndScheduleId(bo.getCurrentStep(),bo.getScheduleId()); OaProjectScheduleStepBo update = BeanUtil.toBean(stepVo, OaProjectScheduleStepBo.class); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java index 7b151ef..de6f694 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java @@ -1,13 +1,17 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.OaProjectSchedule; +import com.ruoyi.oa.domain.bo.BatchBo; +import com.ruoyi.oa.mapper.OaProjectScheduleMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo; @@ -15,10 +19,9 @@ import com.ruoyi.oa.domain.vo.OaProjectScheduleStepVo; import com.ruoyi.oa.domain.OaProjectScheduleStep; import com.ruoyi.oa.mapper.OaProjectScheduleStepMapper; import com.ruoyi.oa.service.IOaProjectScheduleStepService; +import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; /** * 项目进度步骤跟踪Service业务层处理 @@ -32,12 +35,14 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS private final OaProjectScheduleStepMapper baseMapper; + private final OaProjectScheduleMapper scheduleMapper; + /** * 查询项目进度步骤跟踪 */ @Override public OaProjectScheduleStepVo queryById(Long trackId){ - return baseMapper.selectVoPlusById(trackId); + return baseMapper.selectVoPlusById(trackId, LoginHelper.getUserId()); } /** @@ -46,7 +51,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS @Override public TableDataInfo queryPageList(OaProjectScheduleStepBo bo, PageQuery pageQuery) { QueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw); + Page result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw,LoginHelper.getUserId()); return TableDataInfo.build(result); } @@ -62,6 +67,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS private QueryWrapper buildQueryWrapper(OaProjectScheduleStepBo bo) { Map params = bo.getParams(); QueryWrapper lqw = Wrappers.query(); + lqw.eq("opss.use_flag", 1); lqw.eq(bo.getScheduleId() != null, "opss.schedule_id", bo.getScheduleId()); lqw.eq("opss.del_flag", 0); lqw.eq(bo.getStepOrder() != null, "opss.step_order", bo.getStepOrder()); @@ -89,6 +95,8 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS */ @Override public Boolean updateByBo(OaProjectScheduleStepBo bo) { + + // 除了做更新还需要编辑文件权限将涉及到的所有文件 都涉及到userId OaProjectScheduleStep update = BeanUtil.toBean(bo, OaProjectScheduleStep.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; @@ -127,4 +135,56 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS public OaProjectScheduleStepVo selectByCurrentStepAndScheduleId(Long currentStep, Long scheduleId) { return baseMapper.selectByCurrentStepAndScheduleId(currentStep,scheduleId); } + + @Override + @Transactional(rollbackFor = Exception.class) + public int changeBatch(BatchBo batchBo) { + List boList = batchBo.getBoList(); + OaProjectScheduleStepBo oaProjectScheduleStepBo = boList.get(0); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(OaProjectScheduleStep::getScheduleId, oaProjectScheduleStepBo.getScheduleId()); + wrapper.eq(OaProjectScheduleStep::getUseFlag, 1L); + List oaProjectScheduleSteps = baseMapper.selectList(wrapper); + Long batchId = 1L; + // 首先将上一批次的全部关闭 + for (OaProjectScheduleStep oaProjectScheduleStep : oaProjectScheduleSteps) { + oaProjectScheduleStep.setUseFlag(0L); + System.out.println(oaProjectScheduleStep); + baseMapper.updateById(oaProjectScheduleStep); + batchId = oaProjectScheduleStep.getBatchId(); + } + + + OaProjectSchedule oaProjectSchedule = new OaProjectSchedule(); + oaProjectSchedule.setScheduleId(oaProjectScheduleStepBo.getScheduleId()); + oaProjectSchedule.setCurrentStep(batchBo.getCurrentStep()); + scheduleMapper.updateById(oaProjectSchedule); + // 新批次进入 + int flag = 0; + batchId = batchId+1; + for (OaProjectScheduleStepBo projectScheduleStepBo : boList) { + projectScheduleStepBo.setTrackId(null); + projectScheduleStepBo.setUseFlag(1L); + projectScheduleStepBo.setScheduleId(oaProjectScheduleStepBo.getScheduleId()); + projectScheduleStepBo.setBatchId(batchId); + + // 将新增后的 + if (projectScheduleStepBo.getStepOrder()> batchBo.getCurrentStep()){ + projectScheduleStepBo.setActualStart(null); + projectScheduleStepBo.setActualEnd(null); + projectScheduleStepBo.setStatus(0L); + } + + // 将新增后的 + if (Objects.equals(projectScheduleStepBo.getStepOrder(), batchBo.getCurrentStep())){ + projectScheduleStepBo.setActualStart(new Date()); + projectScheduleStepBo.setActualEnd(null); + projectScheduleStepBo.setStatus(0L); + } + this.insertByBo(projectScheduleStepBo); + flag =1; + } + + return flag; + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java index e3e04b7..d6cc138 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java @@ -64,13 +64,12 @@ public class OaScheduleTemplateStepServiceImpl implements IOaScheduleTemplateSte QueryWrapper lqw = Wrappers.query(); lqw.eq(bo.getTemplateId() != null, "template_id", bo.getTemplateId()); - lqw.eq(bo.getStepOrder() != null, "step_order", bo.getStepOrder()); lqw.like(StringUtils.isNotBlank(bo.getStepName()), "step_name", bo.getStepName()); lqw.eq(bo.getExpectedDays() != null,"expected_days", bo.getExpectedDays()); lqw.eq(StringUtils.isNotBlank(bo.getHeader()), "header", bo.getHeader()); lqw.eq(StringUtils.isNotBlank(bo.getDescription()), "description", bo.getDescription()); - lqw.groupBy("step_name","header","step_id"); + lqw.groupBy("step_name","header","expected_days","description"); return lqw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java index 51dbdc9..fc36717 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java @@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.bo.SysOaClaimDetailBo; import com.ruoyi.oa.domain.bo.SysOaFileBo; import com.ruoyi.oa.service.ISysOaClaimDetailService; -import com.ruoyi.oa.service.ISysOaFileService; +import com.ruoyi.system.service.ISysOssService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 差旅费报销Service业务层处理 @@ -43,7 +44,8 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { private ISysOaClaimDetailService sysOaClaimDetailService; @Autowired - private ISysOaFileService sysOaFileService; + private ISysOssService ossService; + /** * 查询差旅费报销 @@ -128,15 +130,8 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { validEntityBeforeSave(add); // 处理文件 - List fileIds = new ArrayList<>(); - for (SysOaFileBo sysOaFile : bo.getFileList()) { - Long fileId = sysOaFileService.insertByBoReturnId(sysOaFile); - fileIds.add(fileId); - } - String fileIdsString = fileIds.stream() - .map(String::valueOf) // 将 Long 转换为 String - .reduce((id1, id2) -> id1 + "," + id2) // 合并为一个逗号分隔的字符串 - .orElse(""); // 如果列表为空,返回空字符串 + List fileUrls = bo.getFileList().stream().map(SysOaFileBo::getFileUrl).collect(Collectors.toList()); + String fileIdsString = ossService.insertFiles(fileUrls); add.setFileIds(fileIdsString); add.setUserId(LoginHelper.getUserId()); boolean flag = baseMapper.insert(add) > 0; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java deleted file mode 100644 index 9a3237d..0000000 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.ruoyi.oa.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.core.domain.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import com.ruoyi.oa.domain.bo.SysOaFileBo; -import com.ruoyi.oa.domain.vo.SysOaFileVo; -import com.ruoyi.oa.domain.SysOaFile; -import com.ruoyi.oa.mapper.SysOaFileMapper; -import com.ruoyi.oa.service.ISysOaFileService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; -import java.util.stream.Collectors; - -/** - * 文件存储Service业务层处理 - * - * @author hdka - * @date 2024-12-15 - */ -@RequiredArgsConstructor -@Service -public class SysOaFileServiceImpl implements ISysOaFileService { - - private final SysOaFileMapper baseMapper; - - /** - * 查询文件存储 - */ - @Override - public SysOaFileVo queryById(Long fileId){ - return baseMapper.selectVoById(fileId); - } - - /** - * 查询文件存储列表 - */ - @Override - public TableDataInfo queryPageList(SysOaFileBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询文件存储列表 - */ - @Override - public List queryList(SysOaFileBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(SysOaFileBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getFileUrl()), SysOaFile::getFileUrl, bo.getFileUrl()); - lqw.eq(bo.getStatus() != null, SysOaFile::getStatus, bo.getStatus()); - lqw.like(bo.getQueryCreateTime() != null, SysOaFile::getCreateTime, bo.getQueryCreateTime()); - return lqw; - } - - /** - * 新增文件存储 - */ - @Override - public Boolean insertByBo(SysOaFileBo bo) { - SysOaFile add = BeanUtil.toBean(bo, SysOaFile.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setFileId(add.getFileId()); - } - return flag; - } - - /** - * 新增文件存储 - */ - @Override - public Long insertByBoReturnId(SysOaFileBo bo) { - SysOaFile add = BeanUtil.toBean(bo, SysOaFile.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setFileId(add.getFileId()); - } - return add.getFileId(); - } - - @Override - public String insertFiles(List fileUrls) { - // 用于存放插入后返回的 fileId - List fileIds = fileUrls.stream().map(fileUrl -> { - // 这里假设你有一个插入方法, 返回插入后的主键ID: - // Long fileId = fileDao.insertFile(fileUrl); - - // 这里只是示例,假设插入后自增ID就是某个数字: - // 为演示,这里用当前时间戳模拟 - SysOaFile sysOaFile = new SysOaFile(); - sysOaFile.setFileUrl(fileUrl); - baseMapper.insert(sysOaFile); - - // 真实代码中应该返回数据库生成的主键ID - return sysOaFile.getFileId(); - }).collect(Collectors.toList()); - // 将 fileIds 转为逗号分隔的字符串 - return fileIds.stream() - .map(String::valueOf) - .collect(Collectors.joining(",")); - } - - - /** - * 修改文件存储 - */ - @Override - public Boolean updateByBo(SysOaFileBo bo) { - SysOaFile update = BeanUtil.toBean(bo, SysOaFile.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(SysOaFile entity){ - //TODO 做一些数据校验,如唯一约束 - } - - /** - * 批量删除文件存储 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ - //TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskItemServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskItemServiceImpl.java index 2b2b071..8560eb2 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskItemServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskItemServiceImpl.java @@ -7,7 +7,7 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.oa.service.ISysOaFileService; +import com.ruoyi.system.service.ISysOssService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaTaskItemBo; @@ -33,7 +33,9 @@ public class SysOaTaskItemServiceImpl implements ISysOaTaskItemService { private final SysOaTaskItemMapper baseMapper; - private final ISysOaFileService fileService; + + + private final ISysOssService ossService; /** * 查询报工任务单元 @@ -133,7 +135,7 @@ public class SysOaTaskItemServiceImpl implements ISysOaTaskItemService { List fileUrls = Arrays.stream(bo.getFiles().split(",")) .map(String::valueOf) .collect(Collectors.toList()); - String fileIds = fileService.insertFiles(fileUrls); + String fileIds = ossService.insertFiles(fileUrls); bo.setFiles(fileIds); } SysOaTaskItem update = BeanUtil.toBean(bo, SysOaTaskItem.class); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java index 7c5ec7a..39bf8a6 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java @@ -1,12 +1,8 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.helper.LoginHelper; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,9 +10,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.*; import com.ruoyi.oa.domain.bo.SysOaTaskItemBo; import com.ruoyi.oa.mapper.SysOaTaskItemMapper; -import com.ruoyi.oa.service.ISysOaFileService; import com.ruoyi.oa.service.ISysOaTaskItemService; -import com.ruoyi.system.service.ISysDictTypeService; +import com.ruoyi.system.service.ISysOssService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -43,13 +38,11 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { private final SysOaTaskMapper baseMapper; - private final ISysDictTypeService dictTypeService; - private final ISysOaTaskItemService taskItemService; private final SysOaTaskItemMapper taskItemMapper; - private final ISysOaFileService fileService; + private final ISysOssService ossService; /** * 查询任务管理 @@ -175,7 +168,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { List fileUrls = Arrays.stream(bo.getAccessory().split(",")) .map(String::valueOf) .collect(Collectors.toList()); - String fileIds = fileService.insertFiles(fileUrls); + String fileIds = ossService.insertFiles(fileUrls); bo.setAccessory(fileIds); } @@ -183,7 +176,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { List fileUrls = Arrays.stream(bo.getFiles().split(",")) .map(String::valueOf) .collect(Collectors.toList()); - String fileIds = fileService.insertFiles(fileUrls); + String fileIds = ossService.insertFiles(fileUrls); bo.setFiles(fileIds); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java index 3c48a85..44dd971 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java @@ -137,18 +137,21 @@ public class SysOaWarehouseDetailServiceImpl implements ISysOaWarehouseDetailSer public Boolean insertByBo(SysOaWarehouseDetailBo bo) { SysOaWarehouseDetail decrease = toBean(bo, SysOaWarehouseDetail.class); validEntityBeforeSave(decrease); - SysOaWarehouse warehouse = warehouseMapper.selectById(decrease.getWarehouseId()); - // 1 如果对应仓库表项目数量-将要出库数量<0,出库失败, 繁殖 , 增加该条 - if(warehouse == null) { - throw new Error("已不存在该物料"+decrease.getWarehouseId()); - } - if(warehouse.getInventory() - decrease.getAmount() < 0) { - throw new Error("剩余数量不足,出库失败"); - } - else { - warehouse.setInventory(warehouse.getInventory() - decrease.getAmount()); - warehouse.setUpdateTime(new Date()); - warehouseMapper.updateById(warehouse); + + if (!Objects.nonNull(bo.getType()) || bo.getType() != 1) { + SysOaWarehouse warehouse = warehouseMapper.selectById(decrease.getWarehouseId()); + // 1 如果对应仓库表项目数量-将要出库数量<0,出库失败, 繁殖 , 增加该条 + if(warehouse == null) { + throw new Error("已不存在该物料"+decrease.getWarehouseId()); + } + if(warehouse.getInventory() - decrease.getAmount() < 0) { + throw new Error("剩余数量不足,出库失败"); + } + else { + warehouse.setInventory(warehouse.getInventory() - decrease.getAmount()); + warehouse.setUpdateTime(new Date()); + warehouseMapper.updateById(warehouse); + } } // 2、减少仓库表中对应项目的数量 diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java index bc86682..0ca07d3 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java @@ -7,14 +7,12 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.SysOaWarehouseDetail; import com.ruoyi.oa.domain.bo.SysOaWarehouseBo; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; import com.ruoyi.oa.mapper.SysOaWarehouseDetailMapper; import com.ruoyi.oa.service.ISysOaWarehouseDetailService; -import com.ruoyi.oa.service.ISysOaWarehouseService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaWarehouseMasterBo; @@ -40,7 +38,6 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer private final SysOaWarehouseMasterMapper baseMapper; private final ISysOaWarehouseDetailService warehouseDetailService; - private final SysOaWarehouseDetailMapper warehouseDetailMapper; @@ -98,8 +95,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer // 单子新增后 新增出库元素同时减去现有的,这里要记录一个出库时单价 for (SysOaWarehouseDetailBo sysOaWarehouseDetailBo : bo.getWarehouseList()) { sysOaWarehouseDetailBo.setMasterId(add.getMasterId()); - SysOaWarehouseDetail add2 = toBean(sysOaWarehouseDetailBo, SysOaWarehouseDetail.class); - warehouseDetailMapper.insert(add2); + warehouseDetailService.insertByBo(sysOaWarehouseDetailBo); } } return flag; @@ -110,6 +106,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer */ @Override public Boolean updateByBo(SysOaWarehouseMasterBo bo) { + System.out.println(bo); // 判断是否为采购单,采购单,用户是直接点击完成按钮,所以直接更新单子状态就可以 if (bo.getType()!=2L){ SysOaWarehouseMaster update = BeanUtil.toBean(bo, SysOaWarehouseMaster.class); @@ -119,10 +116,12 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer List warehouseList = bo.getWarehouseList(); for (SysOaWarehouseDetailBo sysOaWarehouseDetailBo : warehouseList) { sysOaWarehouseDetailBo.setMasterId(bo.getMasterId()); + sysOaWarehouseDetailBo.setType(bo.getType()); warehouseDetailService.insertByBo(sysOaWarehouseDetailBo); - } + } } + return flag; }else{ SysOaWarehouseMaster update = BeanUtil.toBean(bo, SysOaWarehouseMaster.class); @@ -152,7 +151,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer } @Override - public int insertInWarehouse(SysOaWarehouseBo bo) { + public int insertInWarehouse(SysOaWarehouseBo bo, Long id) { SysOaWarehouseMaster sysOaWarehouseMaster = new SysOaWarehouseMaster(); sysOaWarehouseMaster.setMasterNum(UUID.randomUUID().toString()); sysOaWarehouseMaster.setRemark(bo.getRemark()); @@ -169,7 +168,10 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer sysOaWarehouseDetailBo.setCreateBy(LoginHelper.getNickName()); sysOaWarehouseDetailBo.setUpdateBy(LoginHelper.getNickName()); sysOaWarehouseDetailBo.setMasterId(sysOaWarehouseMaster.getMasterId()); + sysOaWarehouseDetailBo.setType(sysOaWarehouseMaster.getType()); + sysOaWarehouseDetailBo.setWarehouseId(id); warehouseDetailService.insertByBo(sysOaWarehouseDetailBo); + return flag; } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java index e81d61c..9bebe3c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java @@ -2,22 +2,18 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; import com.ruoyi.oa.domain.bo.SysOaWarehouseMasterBo; -import com.ruoyi.oa.listener.SysOaWarehouseListener; import com.ruoyi.oa.mapper.SysOaWarehouseDetailMapper; -import com.ruoyi.oa.mapper.SysOaWarehouseMasterMapper; import com.ruoyi.oa.service.ISysOaWarehouseMasterService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaWarehouseBo; import com.ruoyi.oa.domain.vo.SysOaWarehouseVo; @@ -33,6 +29,7 @@ import java.util.*; * @author liuzongkun999 * @date 2024-11-02 */ +@Slf4j @RequiredArgsConstructor @Service public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { @@ -75,6 +72,7 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { .like(StringUtils.isNotBlank(bo.getName()), "sow.model", bo.getName()); lqw.eq(StringUtils.isNotBlank(bo.getModel()), "sow.model", bo.getModel()); lqw.eq(StringUtils.isNotBlank(bo.getBrand()), "sow.brand", bo.getBrand()); + lqw.eq("sow.del_flag", 0); if (b){ lqw.apply("sow.inventory < sow.threshold"); }else{ @@ -141,7 +139,7 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { * 新增仓库管理 */ @Override - public Boolean insertByBo(SysOaWarehouseBo bo) { + public Long insertByBo(SysOaWarehouseBo bo) { SysOaWarehouse add = BeanUtil.toBean(bo, SysOaWarehouse.class); validEntityBeforeSave(add); // 1、查询仓库中是否有已存在项目 @@ -150,17 +148,16 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { lqw.eq(StringUtils.isNotBlank(bo.getModel()), SysOaWarehouse::getModel, bo.getModel()); SysOaWarehouse select = baseMapper.selectOne(lqw); // 2、 无则直接新增项目 有则直接增加库存数量 - boolean flag; + Long flag; if (select == null) { - flag = baseMapper.insert(add) > 0; + baseMapper.insert(add); + flag = add.getId(); } else { select.setInventory(select.getInventory() + bo.getInventory()); select.setPrice((select.getPrice()*select.getInventory() + bo.getPrice()*bo.getInventory())/(select.getInventory()+bo.getInventory())); - flag = baseMapper.updateById(select) > 0; - } - if (flag) { - bo.setId(add.getId()); + flag = select.getId(); } + return flag; } @@ -175,12 +172,14 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { lqw.eq(SysOaWarehouse::getName, bo.getName()); lqw.eq(StringUtils.isNotBlank(bo.getModel()), SysOaWarehouse::getModel, bo.getModel()); SysOaWarehouse select = baseMapper.selectOne(lqw); + System.out.println(select); // 2、 无则直接新增项目 有则直接增加库存数量 if (select == null) { baseMapper.insert(add); return add.getId(); } else { - select.setInventory(select.getInventory() + bo.getInventory()); + System.out.println(select); + select.setInventory(select.getInventory() + bo.getTaskInventory()); select.setPrice((select.getPrice()*select.getInventory() + bo.getPrice()*bo.getInventory())/(select.getInventory()+bo.getInventory())); baseMapper.updateById(select); return select.getId(); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOssAclServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOssAclServiceImpl.java new file mode 100644 index 0000000..6a63a5f --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOssAclServiceImpl.java @@ -0,0 +1,111 @@ +package com.ruoyi.oa.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.oa.domain.SysOssAcl; +import com.ruoyi.oa.domain.vo.SysUserVo; +import com.ruoyi.oa.mapper.SysOssAclMapper; +import com.ruoyi.oa.service.SysOssAclService; +import com.ruoyi.system.domain.SysOss; +import com.ruoyi.system.mapper.SysOssMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class SysOssAclServiceImpl extends ServiceImpl implements SysOssAclService { + + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private SysOssMapper sysOssMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public void grant(Long ossId, Long userId, Long grantBy) { + grantBy = LoginHelper.getUserId(); + SysOssAcl acl = lambdaQuery() + .eq(SysOssAcl::getOssId, ossId) + .eq(SysOssAcl::getUserId, userId) + .one(); + + if (acl == null) { + acl = new SysOssAcl(); + acl.setOssId(ossId); + acl.setUserId(userId); + acl.setGrantBy(grantBy); + save(acl); + } else { + updateById(acl); + } + } + + @Override + public void revoke(Long ossId, Long userId) { + lambdaUpdate() + .eq(SysOssAcl::getOssId, ossId) + .eq(SysOssAcl::getUserId, userId) + .remove(); + } + + @Override + public boolean hasPerm(Long userId, Long ossId) { + SysOssAcl acl = lambdaQuery() + .eq(SysOssAcl::getOssId, ossId) + .eq(SysOssAcl::getUserId, userId) + .one(); + return acl != null; + } + + @Override + public List listUsersByOssId(Long ossId) { + /* 1. 校验文件是否存在 / 是否已公开 */ + System.out.println(ossId); + SysOss oss = sysOssMapper.selectById(ossId); + if (oss == null) { + throw new ServiceException("文件不存在"); + } + if (oss.getIsPublic() == 1) { + // 公开文件:直接返回空集(前端可用 isPublic 判断) + return Collections.emptyList(); + } + + /* 2. 查询 ACL 获得已授权用户 ID */ + List aclList = this.lambdaQuery() + .eq(SysOssAcl::getOssId, ossId) + .list(); + if (aclList.isEmpty()) { + return Collections.emptyList(); + } + + List userIds = aclList.stream() + .map(SysOssAcl::getUserId) + .distinct() + .collect(Collectors.toList()); + + /* 3. 批量查询用户表 */ + List users = userMapper.selectBatchIds(userIds); + System.out.println(users); + /* 4. 转成 DTO */ + return users.stream().map(u -> { + SysUserVo dto = new SysUserVo(); + dto.setUserId(u.getUserId()); + dto.setNickName(u.getNickName()); + dto.setPhonenumber(u.getPhonenumber()); + // 若 SysUser 中已有 deptName,可直接取;否则自行拼装 + if (u.getDept() != null) { + dto.setDept(u.getDept()); + } + return dto; + }).collect(Collectors.toList()); + } +} diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml index bf73497..7706ab3 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml @@ -22,57 +22,53 @@ diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml index be2101b..674f07f 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml @@ -20,17 +20,29 @@ + - + + + + + + ( so.is_public = 1 + OR so.owner_id = #{userId} + OR EXISTS (SELECT 1 FROM sys_oss_acl a + WHERE a.oss_id = so.oss_id + AND a.user_id = #{userId}) ) + + UPDATE oa_project_schedule_step SET @@ -40,6 +52,7 @@ schedule_id = #{scheduleId} AND step_order = #{currentStep} AND del_flag = '0' + and use_flag = '1' @@ -130,11 +158,13 @@ plan_end, actual_start, actual_end, + opss.use_flag, status, header from oa_project_schedule_step opss WHERE schedule_id = #{scheduleId} AND step_order = #{currentStep} + and use_flag = '1' AND del_flag = '0' diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaScheduleTemplateStepMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaScheduleTemplateStepMapper.xml index c9fa027..49fa2ff 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaScheduleTemplateStepMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaScheduleTemplateStepMapper.xml @@ -20,17 +20,12 @@ @@ -73,9 +71,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" soc.del_flag, soc.proc_ins_id, soc.completed_time, - sof.file_id, - file_url, - status, + so.oss_id, + url, + so.file_name, socd.claim_detail_id, claim_type, socd.begin_time , @@ -93,7 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sop.project_name FROM sys_oa_claim soc left join sys_oa_claim_detail socd on soc.claim_id = socd.claim_id - left JOIN sys_oa_file sof ON FIND_IN_SET(sof.file_id, soc.file_ids) > 0 + left join sys_oss so on FIND_IN_SET(so.oss_id, soc.file_ids) > 0 left join sys_oa_project sop on soc.project_id = sop.project_id where soc.claim_id = #{claimId} @@ -144,9 +142,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" soc.del_flag, soc.proc_ins_id, soc.completed_time, - sof.file_id, - file_url, - status, + so.oss_id, + url, + so.file_name, socd.claim_detail_id, claim_type, socd.begin_time , @@ -164,7 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sop.project_name FROM sys_oa_claim soc left join sys_oa_claim_detail socd on soc.claim_id = socd.claim_id - left JOIN sys_oa_file sof ON FIND_IN_SET(sof.file_id, soc.file_ids) > 0 + left join sys_oss so on FIND_IN_SET(so.oss_id, soc.file_ids) > 0 left join sys_oa_project sop on soc.project_id = sop.project_id where soc.proc_ins_id = #{procInsId} diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml index b11f92d..04c1351 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml @@ -356,7 +356,7 @@ end AS sign_time, GROUP_CONCAT( - f.file_url + so.url SEPARATOR ',' ) AS file_urls @@ -373,11 +373,11 @@ LEFT JOIN sys_oa_task_item ti ON t.task_id = ti.task_id - LEFT JOIN sys_oa_file f + LEFT JOIN sys_oss so ON ( - (t.status = 0 AND FIND_IN_SET(CONCAT(f.file_id, ''), t.files) > 0) + (t.status = 0 AND FIND_IN_SET(CONCAT(so.oss_id, ''), t.files) > 0) OR - (t.status = 1 AND FIND_IN_SET(CONCAT(f.file_id, ''), ti.files) > 0) + (t.status = 1 AND FIND_IN_SET(CONCAT(so.oss_id, ''), ti.files) > 0) ) ${ew.getCustomSqlSegment} diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml index 3c83b75..5e886b7 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml @@ -62,9 +62,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sot.completed_time, sot.content, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, sot.accessory) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, sot.accessory) > 0 ) AS accessory, sot.rank_number, @@ -90,9 +90,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ELSE 0 END AS overDays, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, soti.files) > 0 + + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, soti.files) > 0 ) AS files FROM sys_oa_task sot @@ -148,9 +149,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" su2.nick_name AS workerNickName, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, sot.accessory) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, sot.accessory) > 0 ) AS accessory, sot.rank_number, @@ -177,9 +178,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" soti.end_time AS itemEndTime, soti.remark AS itemRemark, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, soti.files) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, soti.files) > 0 ) AS files, CASE WHEN sot.completed_time IS NULL @@ -325,9 +326,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sot.completed_time, sot.content, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, sot.accessory) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, sot.accessory) > 0 ) AS accessory, sot.rank_number, @@ -353,9 +354,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ELSE 0 END AS overDays, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, soti.files) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, soti.files) > 0 ) AS files FROM sys_oa_task_user sotu @@ -378,16 +379,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sot.create_user_id, sot.worker_id, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, sot.accessory) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, sot.accessory) > 0 ) AS accessory, su1.nick_name AS createUserNickName, su2.nick_name AS workerNickName, ( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, soti.files) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, soti.files) > 0 ) AS files FROM sys_oa_task sot LEFT JOIN sys_user su1 ON su1.user_id = sot.create_user_id @@ -399,14 +400,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND sot.del_flag = '0' AND ( IFNULL(( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, sot.accessory) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, sot.accessory) > 0 ), '') != '' OR IFNULL(( - SELECT GROUP_CONCAT(sof.file_url SEPARATOR ',') - FROM sys_oa_file sof - WHERE FIND_IN_SET(sof.file_id, soti.files) > 0 + SELECT GROUP_CONCAT(so.url SEPARATOR ',') + FROM sys_oss so + WHERE FIND_IN_SET(so.oss_id, soti.files) > 0 ), '') != '' ) diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseDetailMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseDetailMapper.xml index b87f46e..b9fec47 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseDetailMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseDetailMapper.xml @@ -106,4 +106,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseMasterMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseMasterMapper.xml index adca90a..465409d 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseMasterMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaWarehouseMasterMapper.xml @@ -4,69 +4,101 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - + SELECT + sowm.master_id, + sowm.master_num, + sowm.type, + sowm.project_id, + sowm.sign_time, + sowm.sign_user, + sowm.remark, + sowm.status, + sop.project_name + FROM sys_oa_warehouse_master sowm + LEFT JOIN sys_oa_project sop + ON sop.project_id = sowm.project_id ${ew.getCustomSqlSegment} + + + + + + + + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java index bed11d2..9e96203 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java @@ -49,4 +49,8 @@ public class SysOss extends BaseEntity { private String createBy; + private Long ownerId; + + private Long isPublic; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java index 7f5c090..a123500 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java @@ -24,10 +24,11 @@ public interface ISysOssService { SysOssVo getById(Long ossId); - SysOssVo upload(MultipartFile file); + SysOssVo upload(MultipartFile file, Long isPublic); void download(Long ossId, HttpServletResponse response) throws IOException; Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + String insertFiles(List fileUrls); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index d125e0c..bffb501 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.OssService; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.BeanCopyUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; @@ -120,7 +121,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService { } @Override - public SysOssVo upload(MultipartFile file) { + public SysOssVo upload(MultipartFile file, Long isPublic) { String originalfileName = file.getOriginalFilename(); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); OssClient storage = OssFactory.instance(); @@ -137,6 +138,9 @@ public class SysOssServiceImpl implements ISysOssService, OssService { oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(storage.getConfigKey()); + oss.setCreateBy(LoginHelper.getNickName()); + oss.setOwnerId(LoginHelper.getUserId()); + oss.setIsPublic(isPublic == null ? 0 : isPublic); baseMapper.insert(oss); SysOssVo sysOssVo = new SysOssVo(); BeanCopyUtils.copy(oss, sysOssVo); @@ -156,6 +160,22 @@ public class SysOssServiceImpl implements ISysOssService, OssService { return baseMapper.deleteBatchIds(ids) > 0; } + @Override + public String insertFiles(List fileUrls) { + List fileIds = new ArrayList<>(); + for (String fileUrl : fileUrls) { + SysOss sysOss = new SysOss(); + sysOss.setUrl(fileUrl); + sysOss.setCreateBy(LoginHelper.getNickName()); + baseMapper.insert(sysOss); + fileIds.add(sysOss.getOssId()); + } + + return fileIds.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + } + /** * 匹配Url * diff --git a/script/sql/20250507添加项目进度/schedule.sql b/script/sql/20250507添加项目进度/schedule.sql index 8a2f82c..2964054 100644 --- a/script/sql/20250507添加项目进度/schedule.sql +++ b/script/sql/20250507添加项目进度/schedule.sql @@ -73,4 +73,55 @@ CREATE TABLE `oa_project_schedule_step` ( CONSTRAINT `fk_project_step_main` FOREIGN KEY (`schedule_id`) REFERENCES `oa_project_schedule` (`schedule_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目进度步骤跟踪表'; -`` \ No newline at end of file +`` + +create table if not exists oa_project_schedule_step +( + track_id bigint auto_increment comment '跟踪记录主键' + primary key, + accessory varchar(500) null comment '文件列表', + schedule_id bigint not null comment '所属项目进度ID', + step_order int not null comment '步骤序号', + step_name varchar(64) not null comment '步骤名称(冗余存储模板名称)', + plan_start datetime null comment '计划开始', + plan_end datetime null comment '计划完成', + actual_start datetime null, + actual_end datetime null, + status int default 0 null comment '0进行中 1完成 2暂停', + create_by varchar(64) null, + create_time datetime default CURRENT_TIMESTAMP null, + update_by varchar(64) null, + update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP, + del_flag char default '0' null, + header varchar(40) null comment '进度负责人', + use_flag int default 1 null comment '使用标志 1为使用', + batch_id int null comment '批次号', + constraint uniq_schedule_order + unique (schedule_id, step_order,use_flag), + constraint fk_project_step_main + foreign key (schedule_id) references oa_project_schedule (schedule_id) +) + comment '项目进度步骤跟踪表' charset = utf8mb4; + + +ALTER TABLE oa_project_schedule_step -- 将其替换成上一步查到的 TABLE_NAME + DROP FOREIGN KEY uniq_schedule_order; + +-- 1) 删除旧唯一索引 +ALTER TABLE oa_project_schedule_step + DROP INDEX uniq_schedule_order; + +-- 3.1 新建包含 use_flag 的唯一索引 +ALTER TABLE oa_project_schedule_step + ADD UNIQUE KEY uniq_schedule_order_new (schedule_id, step_order, use_flag); + +SELECT + rc.CONSTRAINT_NAME, + rc.TABLE_NAME, + kcu.COLUMN_NAME +FROM information_schema.REFERENTIAL_CONSTRAINTS rc + JOIN information_schema.KEY_COLUMN_USAGE kcu + ON rc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME +WHERE rc.REFERENCED_TABLE_NAME = '' + AND rc.CONSTRAINT_SCHEMA = DATABASE(); +