完成项目、用户与项目关系模块

This commit is contained in:
lcj
2025-03-06 10:12:29 +08:00
parent a17f735969
commit b891b59cd7
4 changed files with 72 additions and 12 deletions

View File

@ -125,15 +125,7 @@ public class UserProjectRelevancyController extends BaseController {
@RepeatSubmit()
@PostMapping("/add/project/list")
public R<Boolean> addBatchByProjectList(@RequestBody ProjectBatchByProjectListReq req) {
Long userId = req.getUserId();
Long[] projectIdList = req.getProjectIdList();
List<UserProjectRelevancy> 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);
}

View File

@ -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<UserProjectReleva
* @return 查询条件封装
*/
QueryWrapper<UserProjectRelevancy> getQueryWrapper(UserProjectRelevancyQueryReq req);
/**
* 批量新增用户和项目关联
*
* @param req 新增参数
* @return 是否增加成功
*/
Boolean insertBatchByProjectList(ProjectBatchByProjectListReq req);
}

View File

@ -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<UserProjectRele
BeanUtils.copyProperties(req, userProjectRelevancy);
// 数据校验
validEntityBeforeSave(userProjectRelevancy);
// 判断对应项目是否存在
if (projectService.getById(userProjectRelevancy.getProjectId()) == null) {
throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND);
}
// 判断对应的用户与项目关联是否存在
if (this.getOne(new LambdaQueryWrapper<UserProjectRelevancy>()
.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<UserProjectRele
public List<LoginUserProjectRelevancyResp> queryListByUserId(Long userId) {
// 添加查询条件,根据当前用户,获取数据
LambdaQueryWrapper<UserProjectRelevancy> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(UserProjectRelevancy::getUserId, userId);
// 如果是超级管理员查看所有
if (!LoginHelper.isSuperAdmin()) {
queryWrapper.eq(UserProjectRelevancy::getUserId, userId);
}
// 查询数据库,获取数据
List<UserProjectRelevancy> list = this.list(queryWrapper);
// 获取封装
@ -249,8 +266,11 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl<UserProjectRele
public Page<UserProjectRelevancyVo> queryPageByUserId(Long userId, UserProjectRelevancyQueryReq req) {
long current = req.getCurrent();
long size = req.getPageSize();
// 添加查询条件
req.setUserId(userId);
// 如果是超级管理员查看所有
if (!LoginHelper.isSuperAdmin()) {
// 添加查询条件
req.setUserId(userId);
}
QueryWrapper<UserProjectRelevancy> queryWrapper = this.getQueryWrapper(req);
// 查询数据库
Page<UserProjectRelevancy> result = this.page(new Page<>(current, size), queryWrapper);
@ -280,4 +300,41 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl<UserProjectRele
underlineSortField);
return queryWrapper;
}
/**
* 批量新增用户和项目关联
*
* @param req 新增参数
* @return 是否增加成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertBatchByProjectList(ProjectBatchByProjectListReq req) {
Long userId = req.getUserId();
Long[] projectIdList = req.getProjectIdList();
long count = projectService.count(new QueryWrapper<Project>().in("id", (Object[]) projectIdList));
if (count < projectIdList.length) {
throw new ServiceException("项目ID列表错误一个或多个项目不存在", HttpStatus.NOT_FOUND);
}
List<UserProjectRelevancy> userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> {
UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy();
userProjectRelevancy.setUserId(userId);
userProjectRelevancy.setProjectId(projectId);
// 查询对应用户与项目关联信息是否存在
QueryWrapper<UserProjectRelevancy> 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);
}
}

View File

@ -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)