[add] 部门、角色、用户关联
This commit is contained in:
@ -188,12 +188,6 @@ api-decrypt:
|
||||
privateKey: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y=
|
||||
|
||||
springdoc:
|
||||
external-docs:
|
||||
url: /doc.html
|
||||
swagger-ui:
|
||||
path: /swagger-ui.html
|
||||
tags-sorter: alpha
|
||||
operations-sorter: alpha
|
||||
api-docs:
|
||||
# 是否开启接口文档
|
||||
enabled: true
|
||||
|
BIN
xinnengyuan/ruoyi-admin/src/main/resources/favicon.ico
Normal file
BIN
xinnengyuan/ruoyi-admin/src/main/resources/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
@ -9,6 +9,7 @@ import org.dromara.facility.service.IFacMatrixService;
|
||||
import org.dromara.facility.service.IFacPhotovoltaicPanelPartsService;
|
||||
import org.dromara.progress.service.IPgsProgressCategoryService;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.system.service.ISysDeptService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@ -38,6 +39,9 @@ public class DemoTest {
|
||||
@Resource
|
||||
private IDesTechnicalStandardService desTechnicalStandardService;
|
||||
|
||||
@Resource
|
||||
private ISysDeptService deptService;
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
Boolean result = photovoltaicPanelPartsService
|
||||
@ -79,4 +83,10 @@ public class DemoTest {
|
||||
.list();
|
||||
Boolean result = progressCategoryService.insertByTemplate(1906557369562726402L, matrixList, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDeptProject() {
|
||||
deptService.selectProjectIdById(100L);
|
||||
deptService.selectProjectIdById(1937478258803171329L);
|
||||
}
|
||||
}
|
||||
|
@ -57,6 +57,22 @@ public interface IBusUserProjectRelevancyService extends IService<BusUserProject
|
||||
*/
|
||||
Long insertByBo(BusUserProjectRelevancyCreateReq req);
|
||||
|
||||
/**
|
||||
* 批量新增用户和项目关联
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param userIdList 用户ID列表
|
||||
*/
|
||||
void saveBatchByUserList(Long projectId, List<Long> userIdList);
|
||||
|
||||
/**
|
||||
* 批量新增用户和项目关联
|
||||
*
|
||||
* @param projectIdList 项目ID列表
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
void saveBatchByProjectList(List<Long> projectIdList, Long userId);
|
||||
|
||||
/**
|
||||
* 修改系统用户与项目关联
|
||||
*
|
||||
@ -74,6 +90,21 @@ public interface IBusUserProjectRelevancyService extends IService<BusUserProject
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 根据用户ID删除系统用户与项目关联
|
||||
*
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
void deleteByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 根据项目ID和用户ID列表删除系统用户与项目关联
|
||||
*
|
||||
* @param oldProjectId 项目ID
|
||||
* @param userIds 用户ID列表
|
||||
*/
|
||||
void deleteByProjectAndUserIds(Long oldProjectId, List<Long> userIds);
|
||||
|
||||
/**
|
||||
* 获取当前登录用户项目列表
|
||||
*
|
||||
|
@ -50,9 +50,6 @@ import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||
import org.dromara.quality.service.IQltKnowledgeDocumentService;
|
||||
import org.dromara.safety.service.IHseKnowledgeDocumentService;
|
||||
import org.dromara.system.domain.bo.SysDeptBo;
|
||||
import org.dromara.system.domain.vo.SysDeptVo;
|
||||
import org.dromara.system.service.ISysDeptService;
|
||||
import org.dromara.workflow.service.IFlwDefinitionService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
@ -100,9 +97,6 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
|
||||
@Resource
|
||||
private IFacMatrixService matrixService;
|
||||
|
||||
@Resource
|
||||
private ISysDeptService deptService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private IHseKnowledgeDocumentService hseKnowledgeDocumentService;
|
||||
@ -323,26 +317,6 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
|
||||
if (this.lambdaQuery().eq(BusProject::getShortName, req.getShortName()).count() > 0) {
|
||||
throw new ServiceException("项目简称已存在", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
// 添加新部门
|
||||
SysDeptBo queryBo = new SysDeptBo();
|
||||
queryBo.setParentId(BusProjectConstant.PARENT_ID);
|
||||
// 查询父节点部门
|
||||
SysDeptVo deptVo = deptService.selectDeptList(queryBo).getFirst();
|
||||
Long deptId = deptVo.getDeptId();
|
||||
SysDeptBo createBo = new SysDeptBo();
|
||||
createBo.setParentId(deptId);
|
||||
String shortName = req.getShortName();
|
||||
createBo.setDeptName(shortName != null ? shortName : req.getProjectName());
|
||||
if (!deptService.checkDeptNameUnique(createBo)) {
|
||||
throw new ServiceException("新增项目部门'" + createBo.getDeptName() + "'失败,项目名称已存在");
|
||||
}
|
||||
// 新增部门
|
||||
int dept = deptService.insertDept(createBo);
|
||||
if (dept <= 0) {
|
||||
throw new ServiceException("新增项目部门'" + createBo.getDeptName() + "'失败");
|
||||
}
|
||||
Long newDeptId = deptService.selectIdByDeptName(createBo.getDeptName());
|
||||
project.setDeptId(newDeptId);
|
||||
// 写入数据库
|
||||
boolean save = this.save(project);
|
||||
if (!save) {
|
||||
|
@ -27,6 +27,7 @@ import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -46,6 +47,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
|
||||
@Resource
|
||||
private IBusProjectService projectService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private ISysUserService userService;
|
||||
|
||||
@ -120,6 +122,54 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
|
||||
return userProjectRelevancy.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增用户和项目关联
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param userIdList 用户ID列表
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveBatchByUserList(Long projectId, List<Long> userIdList) {
|
||||
if (ObjectUtils.isEmpty(projectId) || ObjectUtils.isEmpty(userIdList)) {
|
||||
return;
|
||||
}
|
||||
List<BusUserProjectRelevancy> userProjectRelevancyList = userIdList.stream().map(userId -> {
|
||||
BusUserProjectRelevancy userProjectRelevancy = new BusUserProjectRelevancy();
|
||||
userProjectRelevancy.setUserId(userId);
|
||||
userProjectRelevancy.setProjectId(projectId);
|
||||
return userProjectRelevancy;
|
||||
}).toList();
|
||||
boolean saveRelevancy = this.saveBatch(userProjectRelevancyList);
|
||||
if (!saveRelevancy) {
|
||||
throw new ServiceException("新增用户和项目关联失败,数据库异常", HttpStatus.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增用户和项目关联
|
||||
*
|
||||
* @param projectIdList 项目ID列表
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveBatchByProjectList(List<Long> projectIdList, Long userId) {
|
||||
if (ObjectUtils.isEmpty(projectIdList) || ObjectUtils.isEmpty(userId)) {
|
||||
return;
|
||||
}
|
||||
List<BusUserProjectRelevancy> userProjectRelevancyList = projectIdList.stream().map(projectId -> {
|
||||
BusUserProjectRelevancy userProjectRelevancy = new BusUserProjectRelevancy();
|
||||
userProjectRelevancy.setUserId(userId);
|
||||
userProjectRelevancy.setProjectId(projectId);
|
||||
return userProjectRelevancy;
|
||||
}).toList();
|
||||
boolean saveRelevancy = this.saveBatch(userProjectRelevancyList);
|
||||
if (!saveRelevancy) {
|
||||
throw new ServiceException("新增用户和项目关联失败,数据库异常", HttpStatus.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改系统用户与项目关联
|
||||
*
|
||||
@ -195,6 +245,46 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
|
||||
return this.removeBatchByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID删除系统用户与项目关联
|
||||
*
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByUserId(Long userId) {
|
||||
List<BusUserProjectRelevancy> relevancyList = this.lambdaQuery()
|
||||
.eq(BusUserProjectRelevancy::getUserId, userId)
|
||||
.list();
|
||||
if (CollUtil.isNotEmpty(relevancyList)) {
|
||||
boolean result = this.removeBatchByIds(relevancyList);
|
||||
if (!result) {
|
||||
throw new ServiceException("删除用户项目关联失败,数据库异常", HttpStatus.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据项目ID和用户ID列表删除系统用户与项目关联
|
||||
*
|
||||
* @param oldProjectId 项目ID
|
||||
* @param userIds 用户ID列表
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByProjectAndUserIds(Long oldProjectId, List<Long> userIds) {
|
||||
List<BusUserProjectRelevancy> relevancyList = this.lambdaQuery()
|
||||
.eq(BusUserProjectRelevancy::getProjectId, oldProjectId)
|
||||
.in(BusUserProjectRelevancy::getUserId, userIds)
|
||||
.list();
|
||||
if (CollUtil.isNotEmpty(relevancyList)) {
|
||||
boolean result = this.removeBatchByIds(relevancyList);
|
||||
if (!result) {
|
||||
throw new ServiceException("删除用户项目关联失败,数据库异常", HttpStatus.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录用户项目列表
|
||||
*
|
||||
|
@ -15,6 +15,7 @@ import org.dromara.system.domain.bo.SysDeptBo;
|
||||
import org.dromara.system.domain.bo.SysRoleBo;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.DeptTreeSelectVo;
|
||||
import org.dromara.system.domain.vo.SysDeptVo;
|
||||
import org.dromara.system.domain.vo.SysRoleVo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.service.ISysDeptService;
|
||||
@ -50,12 +51,12 @@ public class SysRoleController extends BaseController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色列表
|
||||
* 获取角色信息列表(不分页)
|
||||
*/
|
||||
@SaCheckPermission("system:role:list")
|
||||
@GetMapping("/listNoPage/isSubsetDept")
|
||||
public List<SysRoleVo> listNoPageByIsSubsetDept(SysRoleBo roleBo) {
|
||||
return roleService.selectRoleListByIsSubsetDept(roleBo);
|
||||
@GetMapping("/listNoPage")
|
||||
public List<SysRoleVo> listNoPage(SysRoleBo role) {
|
||||
return roleService.selectRoleList(role);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -94,8 +95,15 @@ public class SysRoleController extends BaseController {
|
||||
} else if (!roleService.checkRoleKeyUnique(role)) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
|
||||
}
|
||||
Long deptId = role.getDeptId();
|
||||
if (deptId == null) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,请选择关联的部门");
|
||||
}
|
||||
SysDeptVo deptVo = deptService.selectDeptById(deptId);
|
||||
if (deptVo == null) {
|
||||
return R.fail("新增角色'" + role.getRoleName() + "'失败,关联的部门不存在");
|
||||
}
|
||||
return toAjax(roleService.insertRole(role));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -34,6 +34,11 @@ public class SysDept extends TenantEntity {
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
@ -90,9 +95,4 @@ public class SysDept extends TenantEntity {
|
||||
*/
|
||||
private String isSubset;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private Long roleId;
|
||||
|
||||
}
|
||||
|
@ -3,10 +3,10 @@ package org.dromara.system.domain;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
|
||||
/**
|
||||
* 角色表 sys_role
|
||||
@ -26,6 +26,11 @@ public class SysRole extends TenantEntity {
|
||||
@TableId(value = "role_id")
|
||||
private Long roleId;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 角色名称
|
||||
*/
|
||||
|
@ -4,7 +4,6 @@ import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
|
||||
@ -29,6 +28,11 @@ public class SysDeptBo extends BaseEntity {
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
|
@ -28,6 +28,11 @@ public class SysRoleBo extends BaseEntity {
|
||||
*/
|
||||
private Long roleId;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 角色名称
|
||||
*/
|
||||
@ -88,11 +93,6 @@ public class SysRoleBo extends BaseEntity {
|
||||
*/
|
||||
private String isSpecial;
|
||||
|
||||
/**
|
||||
* 是否有子部门
|
||||
*/
|
||||
private String isSubsetDept;
|
||||
|
||||
public SysRoleBo(Long roleId) {
|
||||
this.roleId = roleId;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.dromara.common.mybatis.annotation.DataColumn;
|
||||
import org.dromara.common.mybatis.annotation.DataPermission;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
@ -75,4 +76,22 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
|
||||
*/
|
||||
List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly);
|
||||
|
||||
@Select("""
|
||||
WITH RECURSIVE dept_tree AS (
|
||||
SELECT dept_id, parent_id, project_id, is_subset
|
||||
FROM sys_dept
|
||||
WHERE dept_id = #{deptId}
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT d.dept_id, d.parent_id, d.project_id, d.is_subset
|
||||
FROM sys_dept d
|
||||
INNER JOIN dept_tree dt ON d.parent_id = dt.dept_id
|
||||
)
|
||||
SELECT DISTINCT project_id
|
||||
FROM dept_tree
|
||||
WHERE is_subset = '0' AND project_id IS NOT NULL
|
||||
""")
|
||||
List<Long> getProjectIdsByDept(@Param("deptId") Long deptId);
|
||||
|
||||
}
|
||||
|
@ -59,6 +59,14 @@ public interface ISysDeptService {
|
||||
// */
|
||||
// SysDeptBo selectDeptByIdBo(SysDeptBo dept);
|
||||
|
||||
/**
|
||||
* 根据部门ID查询所属项目ID列表
|
||||
*
|
||||
* @param deptId 部门id
|
||||
* @return 项目id列表
|
||||
*/
|
||||
List<Long> selectProjectIdById(Long deptId);
|
||||
|
||||
|
||||
/**
|
||||
* 通过部门名称查询部门ID
|
||||
|
@ -27,14 +27,6 @@ public interface ISysRoleService {
|
||||
*/
|
||||
List<SysRoleVo> selectRoleList(SysRoleBo role);
|
||||
|
||||
/**
|
||||
* 根据条件分页查询角色数据
|
||||
*
|
||||
* @param role 角色信息
|
||||
* @return 角色数据集合信息
|
||||
*/
|
||||
List<SysRoleVo> selectRoleListByIsSubsetDept(SysRoleBo role);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询角色列表
|
||||
*
|
||||
|
@ -9,10 +9,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.constant.CacheNames;
|
||||
import org.dromara.common.core.constant.HttpStatus;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.dto.DeptDTO;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.service.DeptService;
|
||||
@ -20,22 +20,19 @@ import org.dromara.common.core.utils.*;
|
||||
import org.dromara.common.mybatis.helper.DataBaseHelper;
|
||||
import org.dromara.common.redis.utils.CacheUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.project.domain.BusProject;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import org.dromara.system.domain.SysRole;
|
||||
import org.dromara.system.domain.SysUser;
|
||||
import org.dromara.system.domain.bo.SysDeptBo;
|
||||
import org.dromara.system.domain.bo.SysRoleBo;
|
||||
import org.dromara.system.domain.enums.SysDeptIsSubsetEnum;
|
||||
import org.dromara.system.domain.enums.SysRoleIsSpecialEnum;
|
||||
import org.dromara.system.domain.vo.SysDeptVo;
|
||||
import org.dromara.system.domain.vo.SysRoleVo;
|
||||
import org.dromara.system.mapper.SysDeptMapper;
|
||||
import org.dromara.system.mapper.SysRoleMapper;
|
||||
import org.dromara.system.mapper.SysUserMapper;
|
||||
import org.dromara.system.service.ISysDeptService;
|
||||
import org.dromara.system.service.ISysRoleService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.cache.annotation.Caching;
|
||||
@ -45,12 +42,14 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 部门管理 服务实现
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
@ -58,7 +57,8 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
private final SysDeptMapper baseMapper;
|
||||
private final SysRoleMapper roleMapper;
|
||||
private final SysUserMapper userMapper;
|
||||
private final ISysRoleService roleService;
|
||||
private final IBusProjectService projectService;
|
||||
private final IBusUserProjectRelevancyService userProjectRelevancyService;
|
||||
|
||||
/**
|
||||
* 查询部门管理数据
|
||||
@ -167,6 +167,17 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
return dept;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部门ID查询所属项目ID列表
|
||||
*
|
||||
* @param deptId 部门id
|
||||
* @return 项目id列表
|
||||
*/
|
||||
@Override
|
||||
public List<Long> selectProjectIdById(Long deptId) {
|
||||
return baseMapper.getProjectIdsByDept(deptId);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 根据部门ID查询信息
|
||||
// *
|
||||
@ -342,16 +353,13 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
if (LoginHelper.isSuperAdmin()) {
|
||||
return;
|
||||
}
|
||||
SysDept dept = baseMapper.selectById(deptId);
|
||||
if (dept.getIsSubset().equals(SysDeptIsSubsetEnum.YES.getCode()) && CollUtil.isNotEmpty(roleIds)) {
|
||||
List<SysRole> roleList = roleMapper.selectByIds(roleIds);
|
||||
for (SysRole role : roleList) {
|
||||
if (!role.getStatus().equals(SystemConstants.NORMAL)) {
|
||||
throw new ServiceException("角色停用,不允许分配", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (role.getIsSpecial().equals(SysRoleIsSpecialEnum.NO.getCode())) {
|
||||
throw new ServiceException("当前部门与角色不匹配,请重新选择", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
List<SysRole> roleList = roleMapper.selectByIds(roleIds);
|
||||
for (SysRole role : roleList) {
|
||||
if (!role.getStatus().equals(SystemConstants.NORMAL)) {
|
||||
throw new ServiceException("角色停用,不允许分配", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (!role.getDeptId().equals(deptId)) {
|
||||
throw new ServiceException("角色部门与部门不匹配", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -371,12 +379,35 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
if (!SystemConstants.NORMAL.equals(info.getStatus())) {
|
||||
throw new ServiceException("部门停用,不允许新增");
|
||||
}
|
||||
if (!"0".equals(info.getIsSubset())){
|
||||
if (SysDeptIsSubsetEnum.NO.getCode().equals(info.getIsSubset())) {
|
||||
throw new ServiceException("当前部门不允许有子部门");
|
||||
}
|
||||
SysDept dept = MapstructUtils.convert(bo, SysDept.class);
|
||||
if (dept == null) {
|
||||
throw new ServiceException("新增部门参数异常", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
dept.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + dept.getParentId());
|
||||
return baseMapper.insert(dept);
|
||||
String isSubset = bo.getIsSubset();
|
||||
if (SysDeptIsSubsetEnum.NO.getCode().equals(isSubset)) {
|
||||
Long projectId = bo.getProjectId();
|
||||
if (projectId != null) {
|
||||
BusProject project = projectService.getById(projectId);
|
||||
if (project == null) {
|
||||
throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
dept.setProjectId(projectId);
|
||||
// 判断是否有需要新增项目关联的用户
|
||||
List<Long> deptIds = this.getParentDeptIds(dept);
|
||||
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.select(SysUser::getUserId);
|
||||
lqw.in(SysUser::getDeptId, deptIds);
|
||||
List<Long> userIds = userMapper.selectList(lqw).stream().map(SysUser::getUserId).toList();
|
||||
if (CollUtil.isNotEmpty(userIds)) {
|
||||
userProjectRelevancyService.saveBatchByUserList(projectId, userIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
return baseMapper.insert(dept);
|
||||
// // cory 判断是否需要直接新增角色
|
||||
// SysRoleBo role = getSysRoleBo(bo);
|
||||
// roleService.checkRoleAllowed(role);
|
||||
@ -444,6 +475,37 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
} else {
|
||||
dept.setAncestors(oldDept.getAncestors());
|
||||
}
|
||||
// 新增逻辑:判断是否需要更新用户与项目的关联
|
||||
String isSubset = dept.getIsSubset();
|
||||
Long oldProjectId = oldDept.getProjectId();
|
||||
Long newProjectId = dept.getProjectId();
|
||||
if (SysDeptIsSubsetEnum.NO.getCode().equals(isSubset) && newProjectId != null) {
|
||||
// 检查新项目是否存在
|
||||
BusProject project = projectService.getById(newProjectId);
|
||||
if (project == null) {
|
||||
throw new ServiceException("关联项目不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
// 获取当前部门及其上级部门 ID 列表
|
||||
List<Long> deptIds = this.getParentDeptIds(dept);
|
||||
// 获取部门用户 ID
|
||||
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.select(SysUser::getUserId);
|
||||
lqw.in(SysUser::getDeptId, deptIds);
|
||||
List<Long> userIds = userMapper.selectList(lqw).stream()
|
||||
.map(SysUser::getUserId)
|
||||
.toList();
|
||||
if (CollUtil.isNotEmpty(userIds)) {
|
||||
// 情况 1:原本有项目,且项目 ID 改变 → 删除旧的,添加新的
|
||||
if (oldProjectId != null && !Objects.equals(oldProjectId, newProjectId)) {
|
||||
userProjectRelevancyService.deleteByProjectAndUserIds(oldProjectId, userIds);
|
||||
userProjectRelevancyService.saveBatchByUserList(newProjectId, userIds);
|
||||
}
|
||||
// 情况 2:原本没有项目,现在新增了 → 直接添加
|
||||
if (oldProjectId == null) {
|
||||
userProjectRelevancyService.saveBatchByUserList(newProjectId, userIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
int result = baseMapper.updateById(dept);
|
||||
if (SystemConstants.NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors())
|
||||
&& !StringUtils.equals(SystemConstants.NORMAL, dept.getAncestors())) {
|
||||
@ -522,4 +584,27 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||
return baseMapper.deleteById(deptId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取部门以及父部门ID列表
|
||||
*
|
||||
* @param dept 部门
|
||||
* @return 部门ID列表
|
||||
*/
|
||||
public List<Long> getParentDeptIds(SysDept dept) {
|
||||
List<Long> deptIds = new ArrayList<>();
|
||||
|
||||
if (StringUtils.isNotBlank(dept.getAncestors())) {
|
||||
String[] ids = dept.getAncestors().split(",");
|
||||
for (String id : ids) {
|
||||
if (!"0".equals(id)) {
|
||||
deptIds.add(Long.parseLong(id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 加上自己
|
||||
deptIds.add(dept.getDeptId());
|
||||
return deptIds;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -29,8 +29,6 @@ import org.dromara.system.domain.SysRoleDept;
|
||||
import org.dromara.system.domain.SysRoleMenu;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysRoleBo;
|
||||
import org.dromara.system.domain.enums.SysDeptIsSubsetEnum;
|
||||
import org.dromara.system.domain.enums.SysRoleIsSpecialEnum;
|
||||
import org.dromara.system.domain.vo.SysRoleVo;
|
||||
import org.dromara.system.mapper.SysRoleDeptMapper;
|
||||
import org.dromara.system.mapper.SysRoleMapper;
|
||||
@ -74,29 +72,11 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
|
||||
return baseMapper.selectRoleList(this.buildQueryWrapper(role));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据条件分页查询角色数据
|
||||
*
|
||||
* @param role 角色信息
|
||||
* @return 角色数据集合信息
|
||||
*/
|
||||
@Override
|
||||
public List<SysRoleVo> selectRoleListByIsSubsetDept(SysRoleBo role) {
|
||||
LambdaQueryWrapper<SysRole> lqw = new LambdaQueryWrapper<>();
|
||||
String isSubsetDept = role.getIsSubsetDept();
|
||||
if (StringUtils.isNotBlank(isSubsetDept)) {
|
||||
if (isSubsetDept.equals(SysDeptIsSubsetEnum.YES.getCode())) {
|
||||
lqw.eq(SysRole::getIsSpecial, SysRoleIsSpecialEnum.NO.getCode());
|
||||
}
|
||||
}
|
||||
lqw.eq(SysRole::getIsSpecial, true);
|
||||
return List.of();
|
||||
}
|
||||
|
||||
private Wrapper<SysRole> buildQueryWrapper(SysRoleBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
QueryWrapper<SysRole> wrapper = Wrappers.query();
|
||||
wrapper.eq("r.del_flag", SystemConstants.NORMAL)
|
||||
.eq(ObjectUtil.isNotNull(bo.getDeptId()), "r.dept_id", bo.getDeptId())
|
||||
.eq(ObjectUtil.isNotNull(bo.getIsSpecial()), "r.is_special", bo.getIsSpecial())
|
||||
.eq(ObjectUtil.isNotNull(bo.getRoleId()), "r.role_id", bo.getRoleId())
|
||||
.like(StringUtils.isNotBlank(bo.getRoleName()), "r.role_name", bo.getRoleName())
|
||||
|
@ -23,6 +23,7 @@ import org.dromara.common.core.utils.*;
|
||||
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.service.IBusUserProjectRelevancyService;
|
||||
import org.dromara.system.domain.*;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.SysPostVo;
|
||||
@ -30,6 +31,7 @@ import org.dromara.system.domain.vo.SysRoleVo;
|
||||
import org.dromara.system.domain.vo.SysUserExportVo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.mapper.*;
|
||||
import org.dromara.system.service.ISysDeptService;
|
||||
import org.dromara.system.service.ISysUserFileService;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
@ -57,6 +59,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
private final SysPostMapper postMapper;
|
||||
private final SysUserRoleMapper userRoleMapper;
|
||||
private final SysUserPostMapper userPostMapper;
|
||||
private final ISysDeptService deptService;
|
||||
private final IBusUserProjectRelevancyService userProjectRelevancyService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
@ -330,6 +334,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
insertUserPost(user, false);
|
||||
// 新增用户与角色管理
|
||||
insertUserRole(user, false);
|
||||
// 关联部门所属项目
|
||||
List<Long> projectIds = deptService.selectProjectIdById(user.getDeptId());
|
||||
userProjectRelevancyService.saveBatchByProjectList(projectIds, user.getUserId());
|
||||
return rows;
|
||||
}
|
||||
|
||||
@ -368,6 +375,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
if (flag < 1) {
|
||||
throw new ServiceException("修改用户" + user.getUserName() + "信息失败");
|
||||
}
|
||||
// 先删除旧关联
|
||||
userProjectRelevancyService.deleteByUserId(user.getUserId());
|
||||
// 添加新关联
|
||||
List<Long> projectIds = deptService.selectProjectIdById(user.getDeptId());
|
||||
userProjectRelevancyService.saveBatchByProjectList(projectIds, user.getUserId());
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user