Merge branch 'main' of ssh://192.168.1.205:9922/cf_devdept2/cf_imes_server

This commit is contained in:
lym
2024-04-25 14:47:06 +08:00
20 changed files with 85 additions and 38 deletions
@@ -111,7 +111,6 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
// 2.2 将 user 并设置到 login-user 的请求头,使用 json 存储值
ServerWebExchange newExchange = exchange.mutate()
.request(builder -> SecurityFrameworkUtils.setLoginUserHeader(builder, user))
.request(builder -> SecurityFrameworkUtils.setOrganHeader(builder, user))
.build();
return chain.filter(newExchange);
});
@@ -104,6 +104,7 @@ public class SecurityFrameworkUtils {
public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) {
builder.header(LOGIN_USER_HEADER, JsonUtils.toJsonString(user));
builder.header(DATA_CODE, user.getDataCode());
builder.header(ORGAN_ID, user.getOrganId().toString());
}
public static void setOrganHeader(ServerHttpRequest.Builder builder, LoginUser user) {
@@ -191,7 +191,8 @@ public interface ErrorCodeConstants {
ErrorCode DEFAULT_TEMPLATE_COUNT = new ErrorCode(1_002_029_002, "默认模板数量异常");
ErrorCode DEFAULT_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_029_003, "该类型机台默认模板不存在");
ErrorCode DEFAULT_TEMPLATE_NOT_DELETED = new ErrorCode(1_002_029_004, "不能删除默认模板");
ErrorCode NOT_TEMPLATE_AUTH = new ErrorCode(1_002_029_005, "该组织无此机台权限");
ErrorCode NOT_TEMPLATE_AUTH = new ErrorCode(1_002_029_005, "该组织无此机台模板权限");
ErrorCode NOT_MACHINE_AUTH = new ErrorCode(1_002_029_005, "该组织无此机台权限");
// ========== 标签模板 1-002-300-000 ==========
ErrorCode LABEL_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_300_000, "标签模板不存在");
@@ -75,9 +75,9 @@ public class PostController {
@GetMapping(value = {"/list-all-simple", "simple-list"})
@Operation(summary = "获取岗位全列表", description = "只包含被开启的岗位,主要用于前端的下拉选项")
public CommonResult<List<PostSimpleRespVO>> getSimplePostList() {
public CommonResult<List<PostSimpleRespVO>> getSimplePostList(@RequestParam(value = "organId", required = false) Long organId) {
// 获得岗位列表,只要开启状态的
List<PostDO> list = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus()));
List<PostDO> list = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus()), organId);
// 排序后,返回给前端
list.sort(Comparator.comparing(PostDO::getSort));
return success(BeanUtils.toBean(list, PostSimpleRespVO.class));
@@ -76,8 +76,9 @@ public class PermissionController {
reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId));
});
}
Long organId = reqVO.getOrganId() == null? OrganContextHolder.getOrganId(): reqVO.getOrganId();
// 执行菜单的分配
permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds());
permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds(), organId);
return success(true);
}
@@ -101,7 +102,8 @@ public class PermissionController {
@PostMapping("/assign-user-role")
@PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')")
public CommonResult<Boolean> assignUserRole(@Validated @RequestBody PermissionAssignUserRoleReqVO reqVO) {
permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds(),OrganContextHolder.getOrganId());
Long organId = reqVO.getOrganId() == null ? OrganContextHolder.getOrganId() : reqVO.getOrganId();
permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds(), organId);
return success(true);
}
@@ -124,4 +126,13 @@ public class PermissionController {
return success(true);
}
@Operation(summary = "获得拥有角色的用户列表")
@Parameter(name = "roleId", description = "角色id", required = true)
@GetMapping("/list-role-users")
@PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')")
public CommonResult<Set<Long>> listRoleUsers(@RequestParam("roleId") Long roleId, @RequestParam(value = "organId", required = false) Long organId) {
return success(permissionService.getListRoleUsers(roleId, organId));
}
}
@@ -18,4 +18,7 @@ public class PermissionAssignRoleMenuReqVO {
@Schema(description = "菜单编号列表", example = "1,3,5")
private Set<Long> menuIds = Collections.emptySet(); // 兜底
@Schema(description = "组织id")
private Long organId;
}
@@ -18,4 +18,7 @@ public class PermissionAssignUserRoleReqVO {
@Schema(description = "角色编号列表", example = "1,3,5")
private Set<Long> roleIds = Collections.emptySet(); // 兜底
@Schema(description = "组织id")
private Long organId;
}
@@ -126,8 +126,9 @@ public class UserController {
@GetMapping({"/list-all-simple", "/simple-list"})
@Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项")
public CommonResult<List<UserSimpleRespVO>> getSimpleUserList() {
List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus());
public CommonResult<List<UserSimpleRespVO>> getSimpleUserList( @RequestParam(value = "organId", required = false) Long organId,
@RequestParam(value = "deptId", required = false) Long deptId) {
List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus(), organId, deptId);
// 拼接数据
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
convertList(list, AdminUserDO::getDeptId));
@@ -6,6 +6,8 @@ import com.cf.imes.module.system.controller.admin.machine.vo.CuttingSaveReqVO;
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
import com.cf.imes.module.system.dal.dataobject.machine.MachineLimitDO;
import java.util.Objects;
/**
* @author Beal
*/
@@ -31,9 +33,9 @@ public class MachineConvert {
.name(machineDO.getName())
.machineType(machineDO.getMachineType())
.labelId(machineDO.getLabelId())
.showAutoNotePrinter(machineLimitDO.getShowAutoNotePrinter())
.showDualWorkstation(machineLimitDO.getShowDualWorkstation())
.showPriorFacing(machineLimitDO.getShowPriorFacing())
.showAutoNotePrinter(Objects.isNull(machineLimitDO)? Boolean.FALSE: machineLimitDO.getShowAutoNotePrinter())
.showDualWorkstation(Objects.isNull(machineLimitDO)? Boolean.FALSE: machineLimitDO.getShowDualWorkstation())
.showPriorFacing(Objects.isNull(machineLimitDO)? Boolean.FALSE: machineLimitDO.getShowPriorFacing())
.build();
}
@@ -17,8 +17,9 @@ import java.util.Objects;
@Mapper
public interface PostMapper extends BaseMapperX<PostDO> {
default List<PostDO> selectList(Collection<Long> ids, Collection<Integer> statuses) {
default List<PostDO> selectList(Collection<Long> ids, Collection<Integer> statuses, Long organId) {
return selectList(new LambdaQueryWrapperX<PostDO>()
.eqIfPresent(PostDO::getOrganId, organId)
.inIfPresent(PostDO::getId, ids)
.inIfPresent(PostDO::getStatus, statuses));
}
@@ -62,8 +62,12 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
return selectList(new LambdaQueryWrapperX<AdminUserDO>().like(AdminUserDO::getNickname, nickname));
}
default List<AdminUserDO> selectListByStatus(Integer status) {
return selectList(AdminUserDO::getStatus, status);
default List<AdminUserDO> selectListByStatus(Integer status, Long organId, Long deptId) {
return selectList(new LambdaQueryWrapperX<AdminUserDO>()
.eqIfPresent(AdminUserDO::getOrganId, organId)
.eqIfPresent(AdminUserDO::getDeptId, deptId)
.eq(AdminUserDO::getStatus, status));
// return selectList(AdminUserDO::getStatus, status);
}
default List<AdminUserDO> selectListByDeptIds(Collection<Long> deptIds) {
@@ -54,7 +54,9 @@ public interface PostService {
* @return 部门列表
*/
List<PostDO> getPostList(@Nullable Collection<Long> ids,
@Nullable Collection<Integer> statuses);
@Nullable Collection<Integer> statuses,
Long organId
);
/**
* 获得岗位分页列表
@@ -118,8 +118,8 @@ public class PostServiceImpl implements PostService {
}
@Override
public List<PostDO> getPostList(Collection<Long> ids, Collection<Integer> statuses) {
return postMapper.selectList(ids, statuses);
public List<PostDO> getPostList(Collection<Long> ids, Collection<Integer> statuses, Long organId) {
return postMapper.selectList(ids, statuses, organId);
}
@Override
@@ -43,8 +43,7 @@ import javax.annotation.Resource;
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.MACHINE_NOT_EXISTS;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.NOT_TEMPLATE_AUTH;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
/**
* 机台 Service 实现类
@@ -85,18 +84,15 @@ public class MachineServiceImpl implements MachineService {
.eq(MachineTemplateLimitDO::getMachineId, createReqVO.getTemplateId())
.eq(MachineTemplateLimitDO::getOrganId, loginUser.getOrganId())
);
if (Objects.isNull(organMachineTemplateDO)) {
throw exception(NOT_TEMPLATE_AUTH);
}
// 插入
MachineDO machineDO = MachineConvert.convert(createReqVO);
machineMapper.insert(machineDO);
MachineLimitDO machineLimitDO = MachineLimitDO.builder()
.organId(loginUser.getOrganId())
.machineId(machineDO.getId())
.showPriorFacing(organMachineTemplateDO.getShowPriorFacing())
.showAutoNotePrinter(organMachineTemplateDO.getShowAutoNotePrinter())
.showDualWorkstation(organMachineTemplateDO.getShowDualWorkstation())
.showPriorFacing(Objects.isNull(organMachineTemplateDO)? Boolean.FALSE: organMachineTemplateDO.getShowPriorFacing())
.showAutoNotePrinter(Objects.isNull(organMachineTemplateDO)? Boolean.FALSE: organMachineTemplateDO.getShowAutoNotePrinter())
.showDualWorkstation(Objects.isNull(organMachineTemplateDO)? Boolean.FALSE: organMachineTemplateDO.getShowDualWorkstation())
.build();
machineLimitMapper.insert(machineLimitDO);
@@ -145,9 +141,6 @@ public class MachineServiceImpl implements MachineService {
.eq(MachineLimitDO::getMachineId, id)
.eq(MachineLimitDO::getOrganId, loginUser.getOrganId())
);
if (Objects.isNull(machineLimitDO)) {
throw exception(NOT_TEMPLATE_AUTH);
}
CuttingRespVO respVO = MachineConvert.convert(machineDO, machineLimitDO);
return respVO;
}
@@ -174,7 +174,7 @@ public class OrganServiceImpl implements OrganService {
.setSort(0).setRemark("系统自动生成").setOrganId(organId);
Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
// 分配权限
permissionService.assignRoleMenu(roleId, tenantPackage.getMenuIds());
permissionService.assignRoleMenu(roleId, tenantPackage.getMenuIds(), organId);
return roleId;
}
@@ -249,14 +249,14 @@ public class OrganServiceImpl implements OrganService {
roles.forEach(role -> {
// 如果是组织管理员,重新分配其权限为组织套餐的权限
if (Objects.equals(role.getCode(), RoleCodeEnum.TENANT_ADMIN.getCode())) {
permissionService.assignRoleMenu(role.getId(), menuIds);
permissionService.assignRoleMenu(role.getId(), menuIds, organId);
log.info("[updateTenantRoleMenu][组织管理员({}/{}) 的权限修改为({})]", role.getId(), role.getOrganId(), menuIds);
return;
}
// 如果是其他角色,则去掉超过套餐的权限
Set<Long> roleMenuIds = permissionService.getRoleMenuListByRoleId(role.getId());
roleMenuIds = CollUtil.intersectionDistinct(roleMenuIds, menuIds);
permissionService.assignRoleMenu(role.getId(), roleMenuIds);
permissionService.assignRoleMenu(role.getId(), roleMenuIds, organId);
log.info("[updateTenantRoleMenu][角色({}/{}) 的权限修改为({})]", role.getId(), role.getOrganId(), roleMenuIds);
});
});
@@ -43,7 +43,7 @@ public interface PermissionService {
* @param roleId 角色编号
* @param menuIds 菜单编号集合
*/
void assignRoleMenu(Long roleId, Set<Long> menuIds);
void assignRoleMenu(Long roleId, Set<Long> menuIds, Long organId);
/**
* 处理角色删除时,删除关联授权数据
@@ -156,4 +156,11 @@ public interface PermissionService {
Set<Long> getRoleMenuListByRoleId2(Set<Long> roleIds);
void bathAssignUserRole(List<PermissionAssignUserRoleReqVO> listReqVO);
/**
* 获得拥有角色的用户列表
* @param roleId
* @return
*/
Set<Long> getListRoleUsers(Long roleId, Long organId);
}
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cf.imes.framework.common.enums.CommonStatusEnum;
import com.cf.imes.framework.common.util.collection.CollectionUtils;
import com.cf.imes.framework.datapermission.core.annotation.DataPermission;
@@ -39,6 +40,7 @@ import javax.annotation.Resource;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet;
@@ -146,7 +148,7 @@ public class PermissionServiceImpl implements PermissionService {
@DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换
@CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST,
allEntries = true) // allEntries 清空所有缓存,主要一次更新涉及到的 menuIds 较多,反倒批量会更快
public void assignRoleMenu(Long roleId, Set<Long> menuIds) {
public void assignRoleMenu(Long roleId, Set<Long> menuIds, Long organId) {
// 获得角色拥有菜单编号
Set<Long> dbMenuIds = null;
if (Objects.equals(roleId, ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, ORGAN_STAFF_ROLE_ID)) {
@@ -167,6 +169,8 @@ public class PermissionServiceImpl implements PermissionService {
entity.setMenuId(menuId);
if (Objects.equals(roleId, ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, ORGAN_STAFF_ROLE_ID)) {
entity.setOrganId(0L);
}else {
entity.setOrganId(organId);
}
return entity;
};
@@ -238,12 +242,27 @@ public class PermissionServiceImpl implements PermissionService {
@Override
@DSTransactional
public void bathAssignUserRole(List<PermissionAssignUserRoleReqVO> listReqVO) {
Long organId = OrganContextHolder.getOrganId();
Long contextOrganId = OrganContextHolder.getOrganId();
listReqVO.forEach(e->{
Long organId = e.getOrganId() ==null ? contextOrganId : e.getOrganId();
assignUserRole(e.getUserId(), e.getRoleIds(), organId);
});
}
@Override
public Set<Long> getListRoleUsers(Long roleId, Long organId) {
List<UserRoleDO> userRoleDOS = userRoleMapper.selectList(new LambdaQueryWrapperX<UserRoleDO>()
.eqIfPresent(UserRoleDO::getOrganId, organId)
.eq(UserRoleDO::getRoleId, roleId)
.select(UserRoleDO::getUserId)
);
if(CollUtil.isEmpty(userRoleDOS)) {
return new HashSet<>();
}
return userRoleDOS.stream().map(UserRoleDO::getUserId).collect(Collectors.toSet());
}
@Override
@Cacheable(value = RedisKeyConstants.MENU_ROLE_ID_LIST, key = "#menuId")
public Set<Long> getMenuRoleIdListByMenuIdFromCache(Long menuId) {
@@ -206,7 +206,7 @@ public interface AdminUserService {
* @param status 状态
* @return 用户们
*/
List<AdminUserDO> getUserListByStatus(Integer status);
List<AdminUserDO> getUserListByStatus(Integer status, Long organId, Long deptId);
/**
* 判断密码是否匹配
@@ -489,8 +489,8 @@ public class AdminUserServiceImpl implements AdminUserService {
}
@Override
public List<AdminUserDO> getUserListByStatus(Integer status) {
return userMapper.selectListByStatus(status);
public List<AdminUserDO> getUserListByStatus(Integer status, Long organId, Long deptId) {
return userMapper.selectListByStatus(status, organId, deptId);
}
@Override
@@ -710,7 +710,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
Integer status = CommonStatusEnum.DISABLE.getStatus();
// 调用
List<AdminUserDO> result = userService.getUserListByStatus(status);
List<AdminUserDO> result = userService.getUserListByStatus(status, 1L);
// 断言
assertEquals(1, result.size());
assertEquals(user, result.get(0));