diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java index aa647e4c..b4a8d1ae 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java @@ -125,15 +125,7 @@ public class UserProjectRelevancyController extends BaseController { @RepeatSubmit() @PostMapping("/add/project/list") public R addBatchByProjectList(@RequestBody ProjectBatchByProjectListReq req) { - Long userId = req.getUserId(); - Long[] projectIdList = req.getProjectIdList(); - List userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> { - UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); - userProjectRelevancy.setUserId(userId); - userProjectRelevancy.setProjectId(projectId); - return userProjectRelevancy; - }).toList(); - boolean result = userProjectRelevancyService.saveBatch(userProjectRelevancyList); + Boolean result = userProjectRelevancyService.insertBatchByProjectList(req); return R.ok(result); } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IUserProjectRelevancyService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IUserProjectRelevancyService.java index 68faf699..dd2044a8 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IUserProjectRelevancyService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IUserProjectRelevancyService.java @@ -7,6 +7,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.project.domain.UserProjectRelevancy; import org.dromara.project.domain.bo.UserProjectRelevancyBo; +import org.dromara.project.domain.req.project.ProjectBatchByProjectListReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyCreateReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; @@ -114,4 +115,12 @@ public interface IUserProjectRelevancyService extends IService getQueryWrapper(UserProjectRelevancyQueryReq req); + + /** + * 批量新增用户和项目关联 + * + * @param req 新增参数 + * @return 是否增加成功 + */ + Boolean insertBatchByProjectList(ProjectBatchByProjectListReq req); } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java index 45461a78..b0828e3b 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java @@ -15,9 +15,11 @@ import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.sql.SqlUtil; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.project.domain.Project; import org.dromara.project.domain.UserProjectRelevancy; import org.dromara.project.domain.bo.UserProjectRelevancyBo; +import org.dromara.project.domain.req.project.ProjectBatchByProjectListReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyCreateReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; @@ -28,7 +30,9 @@ import org.dromara.project.service.IProjectService; import org.dromara.project.service.IUserProjectRelevancyService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -148,6 +152,16 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl() + .eq(UserProjectRelevancy::getUserId, userProjectRelevancy.getUserId()) + .eq(UserProjectRelevancy::getProjectId, userProjectRelevancy.getProjectId())) != null) { + throw new ServiceException("用户和项目关联已存在", HttpStatus.CONFLICT); + } // 写入数据库 boolean save = this.save(userProjectRelevancy); if (!save) { @@ -220,7 +234,10 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl queryListByUserId(Long userId) { // 添加查询条件,根据当前用户,获取数据 LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(UserProjectRelevancy::getUserId, userId); + // 如果是超级管理员查看所有 + if (!LoginHelper.isSuperAdmin()) { + queryWrapper.eq(UserProjectRelevancy::getUserId, userId); + } // 查询数据库,获取数据 List list = this.list(queryWrapper); // 获取封装 @@ -249,8 +266,11 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl queryPageByUserId(Long userId, UserProjectRelevancyQueryReq req) { long current = req.getCurrent(); long size = req.getPageSize(); - // 添加查询条件 - req.setUserId(userId); + // 如果是超级管理员查看所有 + if (!LoginHelper.isSuperAdmin()) { + // 添加查询条件 + req.setUserId(userId); + } QueryWrapper queryWrapper = this.getQueryWrapper(req); // 查询数据库 Page result = this.page(new Page<>(current, size), queryWrapper); @@ -280,4 +300,41 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl().in("id", (Object[]) projectIdList)); + if (count < projectIdList.length) { + throw new ServiceException("项目ID列表错误,一个或多个项目不存在", HttpStatus.NOT_FOUND); + } + List userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> { + UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); + userProjectRelevancy.setUserId(userId); + userProjectRelevancy.setProjectId(projectId); + // 查询对应用户与项目关联信息是否存在 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId); + queryWrapper.eq("project_id", projectId); + // 如果存在则不保存 + UserProjectRelevancy one = this.getOne(queryWrapper); + if (one != null) { + return null; + } + return userProjectRelevancy; + }).filter(Objects::nonNull).toList(); + if (userProjectRelevancyList.isEmpty()) { + throw new ServiceException("对应用户与项目关系均已存在,无需重复添加", HttpStatus.BAD_REQUEST); + } + // 当用户与项目关系存在时修改,不存在则保存 + return this.saveOrUpdateBatch(userProjectRelevancyList); + } } diff --git a/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql b/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql index 7b3aaf54..090a6651 100644 --- a/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql +++ b/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql @@ -57,6 +57,8 @@ CREATE TABLE `user_project_relevancy` COLLATE = utf8mb4_general_ci COMMENT = '系统用户与项目关联' ROW_FORMAT = DYNAMIC; + + -- 菜单 SQL insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)