Merge remote-tracking branch 'origin/feature/REQ-2227' into feature/REQ-2227
This commit is contained in:
commit
ebed487c99
@ -1,12 +1,15 @@
|
||||
package cn.axzo.tyr.client.feign;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiListResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryRoleByNameReq;
|
||||
import cn.axzo.tyr.client.model.req.QuerySaasRoleReq;
|
||||
import cn.axzo.tyr.client.model.res.RoleTreeRes;
|
||||
import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq;
|
||||
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.TreeRoleReq;
|
||||
import cn.axzo.tyr.client.model.res.IsSuperAdminRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||
@ -140,4 +143,13 @@ public interface TyrSaasRoleApi {
|
||||
*/
|
||||
@PostMapping("api/saasRole/changeGroupLeaderRole")
|
||||
ApiResult<Void> changeGroupLeaderRole(@RequestBody @Valid List<ChangeGroupLeaderRoleReq> req);
|
||||
|
||||
/**
|
||||
* 查询角色树
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/saasRole/tree")
|
||||
ApiListResult<RoleTreeRes> treeSaasRole(@RequestBody @Valid TreeRoleReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TreeRoleReq {
|
||||
|
||||
private Boolean needRole;
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package cn.axzo.tyr.client.model.res;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RoleTreeRes {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 根节点的code
|
||||
*/
|
||||
private String workspaceTypeCode;
|
||||
|
||||
/**
|
||||
* 名字
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 类型:ROLE_GROUP(分组)、ROLE(角色)、ROOT(根节点)
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 是否显示
|
||||
*/
|
||||
private Boolean isDisplay;
|
||||
|
||||
private List<RoleTreeRes> children;
|
||||
}
|
||||
@ -66,4 +66,8 @@ public class SaasRoleGroupVO {
|
||||
|
||||
private Date updateAt;
|
||||
|
||||
/**
|
||||
* 上级分组id
|
||||
*/
|
||||
private Long parentId;
|
||||
}
|
||||
|
||||
@ -101,6 +101,10 @@
|
||||
<artifactId>maokai-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.axzo.pokonyan</groupId>
|
||||
<artifactId>pokonyan</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
|
||||
@ -1,14 +1,20 @@
|
||||
package cn.axzo.tyr.server.controller.role;
|
||||
|
||||
import cn.axzo.basics.common.exception.ServiceException;
|
||||
import cn.axzo.framework.domain.web.result.ApiListResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.feign.TyrSaasRoleApi;
|
||||
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.CommonDictQueryReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryRoleByNameReq;
|
||||
import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq;
|
||||
import cn.axzo.tyr.client.model.req.QuerySaasRoleReq;
|
||||
import cn.axzo.tyr.client.model.res.RoleTreeRes;
|
||||
import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq;
|
||||
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.TreeRoleReq;
|
||||
import cn.axzo.tyr.client.model.res.CommonDictResp;
|
||||
import cn.axzo.tyr.client.model.res.IsSuperAdminRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||
@ -16,20 +22,34 @@ import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO;
|
||||
import cn.axzo.tyr.server.model.PermissionCacheKey;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleGroupRelationDao;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRole;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
|
||||
import cn.axzo.tyr.server.service.PermissionCacheService;
|
||||
import cn.axzo.tyr.server.service.RoleService;
|
||||
import cn.axzo.tyr.server.service.SaasCommonDictService;
|
||||
import cn.axzo.tyr.server.service.SaasRoleGroupService;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 权限
|
||||
@ -49,6 +69,17 @@ public class SaasRoleController implements TyrSaasRoleApi {
|
||||
PermissionCacheService permissionCacheService;
|
||||
@Autowired
|
||||
private SaasRoleUserRelationDao saasRoleUserRelationDao;
|
||||
@Autowired
|
||||
private SaasCommonDictService saasCommonDictService;
|
||||
@Autowired
|
||||
private SaasRoleGroupService saasRoleGroupService;
|
||||
@Autowired
|
||||
private SaasRoleGroupRelationDao saasRoleGroupRelationDao;
|
||||
|
||||
/**
|
||||
* 角色组里面parentId = 0
|
||||
*/
|
||||
private static final Long ROOT_ROLE_GROUP_PARENT_ID = 0L;
|
||||
|
||||
@Override
|
||||
public ApiResult<Long> saveOrUpdate(SaveOrUpdateRoleVO saveOrUpdateRole) {
|
||||
@ -133,4 +164,135 @@ public class SaasRoleController implements TyrSaasRoleApi {
|
||||
roleService.changeGroupLeaderRole(reqs);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiListResult<RoleTreeRes> treeSaasRole(TreeRoleReq req) {
|
||||
|
||||
// 因为根节点在roleGroup里面没有,都是workspaceTypeCode,描述是放在字典表里
|
||||
List<CommonDictResp> commonDicts = listRootRole();
|
||||
|
||||
List<RoleTreeRes> roots = commonDicts.stream()
|
||||
.map(e -> RoleTreeRes.builder()
|
||||
.workspaceTypeCode(e.getDictCode())
|
||||
.name(e.getDictValue())
|
||||
.type("ROOT")
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<String, List<RoleTreeRes>> roleGroups = listRoleGroupTree(commonDicts, req);
|
||||
|
||||
List<RoleTreeRes> result = roots.stream()
|
||||
.peek(root -> root.setChildren(roleGroups.get(root.getWorkspaceTypeCode())))
|
||||
.collect(Collectors.toList());
|
||||
return ApiListResult.ok(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询角色
|
||||
* Map<角色分组Id, List<RoleTreeRes>>
|
||||
* @param roleGroups
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
private Map<Long, List<RoleTreeRes>> listRole(List<SaasRoleGroupVO> roleGroups,
|
||||
TreeRoleReq req) {
|
||||
|
||||
List<Long> roleGroupIds = roleGroups.stream().map(SaasRoleGroupVO::getId).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(roleGroupIds) || BooleanUtils.isNotTrue(req.getNeedRole())) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<SaasRoleGroupRelation> saasRoleGroupRelations = saasRoleGroupRelationDao.getByGroupIds(roleGroupIds);
|
||||
|
||||
Map<Long, SaasRole> saasRoles = roleService.list(RoleService.ListSaasRoleParam.builder()
|
||||
.roleIds(Lists.transform(saasRoleGroupRelations, SaasRoleGroupRelation::getRoleId))
|
||||
.build())
|
||||
.stream()
|
||||
.collect(Collectors.toMap(SaasRole::getId, Function.identity()));
|
||||
|
||||
return saasRoleGroupRelations.stream()
|
||||
.collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId))
|
||||
.entrySet()
|
||||
.stream()
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue()
|
||||
.stream()
|
||||
.map(value -> toRoleTree(saasRoles.get(value.getRoleId())))
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList())));
|
||||
}
|
||||
|
||||
private Map<String, List<RoleTreeRes>> listRoleGroupTree(List<CommonDictResp> commonDicts,
|
||||
TreeRoleReq req) {
|
||||
if (CollectionUtils.isEmpty(commonDicts)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<SaasRoleGroupVO> roleGroups = saasRoleGroupService.getList(QuerySaasRoleGroupReq.builder()
|
||||
.workspaceTypeCode(Lists.transform(commonDicts, CommonDictResp::getDictCode))
|
||||
.build())
|
||||
.stream()
|
||||
.sorted(Comparator.comparing(SaasRoleGroupVO::getSort))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<Long, List<RoleTreeRes>> roles = listRole(roleGroups, req);
|
||||
|
||||
Map<String, List<RoleTreeRes>> rootRoleGroups = roleGroups.stream()
|
||||
.filter(e -> Objects.equals(e.getParentId(), ROOT_ROLE_GROUP_PARENT_ID))
|
||||
.collect(Collectors.groupingBy(SaasRoleGroupVO::getWorkspaceTypeCode,
|
||||
LinkedHashMap::new,
|
||||
Collectors.mapping(this::toRoleTree, Collectors.toList())));
|
||||
|
||||
rootRoleGroups.values().forEach(e -> e.forEach(root -> appendChildren(root, roleGroups, roles)));
|
||||
|
||||
return rootRoleGroups;
|
||||
}
|
||||
|
||||
private RoleTreeRes toRoleTree(SaasRoleGroupVO roleGroup) {
|
||||
return RoleTreeRes.builder()
|
||||
.workspaceTypeCode(roleGroup.getWorkspaceTypeCode())
|
||||
.id(roleGroup.getId())
|
||||
.name(roleGroup.getName())
|
||||
.type("ROLE_GROUP")
|
||||
.build();
|
||||
}
|
||||
|
||||
private RoleTreeRes toRoleTree(SaasRole role) {
|
||||
if (role == null) {
|
||||
return null;
|
||||
}
|
||||
return RoleTreeRes.builder()
|
||||
.id(role.getId())
|
||||
.name(role.getName())
|
||||
.type("ROLE")
|
||||
.build();
|
||||
}
|
||||
|
||||
private void appendChildren(RoleTreeRes rootRoleGroup,
|
||||
List<SaasRoleGroupVO> roleGroups,
|
||||
Map<Long, List<RoleTreeRes>> roles) {
|
||||
if (rootRoleGroup == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 因为children可能是role或者roleGroup
|
||||
List<RoleTreeRes> childrenRoleGroups = roleGroups.stream()
|
||||
.filter(p -> Objects.equals(p.getParentId(), rootRoleGroup.getId()))
|
||||
.map(this::toRoleTree)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<RoleTreeRes> childrenRoles = roles.get(rootRoleGroup.getId());
|
||||
if (CollectionUtils.isNotEmpty(childrenRoles)) {
|
||||
childrenRoleGroups.addAll(childrenRoles);
|
||||
}
|
||||
|
||||
rootRoleGroup.setChildren(childrenRoleGroups);
|
||||
|
||||
childrenRoleGroups.forEach(e -> appendChildren(e, roleGroups, roles));
|
||||
}
|
||||
|
||||
private List<CommonDictResp> listRootRole() {
|
||||
return saasCommonDictService.query(CommonDictQueryReq.builder()
|
||||
.scope("role")
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,8 +3,11 @@ package cn.axzo.tyr.server.repository.entity;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -19,6 +22,9 @@ import java.io.Serializable;
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SaasRoleGroup extends BaseEntity<SaasRoleGroup> implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 972205950455439772L;
|
||||
@ -69,6 +75,10 @@ public class SaasRoleGroup extends BaseEntity<SaasRoleGroup> implements Serializ
|
||||
*/
|
||||
private String categoryCode;
|
||||
|
||||
/**
|
||||
* 上级分组id
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 获取主键值
|
||||
|
||||
@ -1,8 +1,15 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.framework.domain.page.PageResp;
|
||||
import cn.axzo.pokonyan.dao.page.IPageParam;
|
||||
import cn.axzo.pokonyan.dao.wrapper.CriteriaField;
|
||||
import cn.axzo.pokonyan.dao.wrapper.Operator;
|
||||
import cn.axzo.tyr.client.model.enums.IdentityType;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryRoleByNameReq;
|
||||
import cn.axzo.tyr.client.model.req.QuerySaasRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq;
|
||||
import cn.axzo.tyr.client.model.res.IsSuperAdminRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||
@ -16,6 +23,12 @@ import cn.axzo.tyr.server.model.RoleWithFeature;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRole;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser;
|
||||
import cn.axzo.tyr.server.service.impl.TyrSaasAuthServiceImpl;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@ -27,7 +40,7 @@ import java.util.Set;
|
||||
* @author: ZhanSiHu
|
||||
* @date: 2023/9/6 15:51
|
||||
*/
|
||||
public interface RoleService {
|
||||
public interface RoleService extends IService<SaasRole> {
|
||||
|
||||
|
||||
List<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId, Boolean includePermissionGroup);
|
||||
@ -103,5 +116,38 @@ public interface RoleService {
|
||||
/** 查询超管和管理员角色 **/
|
||||
List<SaasRole> listAdmins(Long workspaceId, Long ouId);
|
||||
|
||||
List<SaasRole> list(ListSaasRoleParam param);
|
||||
|
||||
Page<SaasRole> page(PageSaasRoleParam param);
|
||||
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class ListSaasRoleParam {
|
||||
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
private List<Long> roleIds;
|
||||
}
|
||||
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class PageSaasRoleParam extends ListSaasRoleParam implements IPageParam {
|
||||
@CriteriaField(ignore = true)
|
||||
Integer page;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
Integer pageSize;
|
||||
|
||||
/**
|
||||
* 排序:使用示例,createTime__DESC
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
List<String> sort;
|
||||
}
|
||||
|
||||
|
||||
List<RoleWithFeature> listWithFeatures(Set<Long> roleIds, Set<Long> featureIds);
|
||||
}
|
||||
|
||||
@ -1,9 +1,51 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.pokonyan.dao.page.IPageParam;
|
||||
import cn.axzo.pokonyan.dao.wrapper.CriteriaField;
|
||||
import cn.axzo.pokonyan.dao.wrapper.Operator;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SaasRoleGroupRelationService {
|
||||
public interface SaasRoleGroupRelationService extends IService<SaasRoleGroupRelation> {
|
||||
void saveOrUpdate(List<SaasRoleGroupRelation> relations);
|
||||
|
||||
List<SaasRoleGroupRelation> list(ListSaasRoleGroupRelationParam param);
|
||||
|
||||
Page<SaasRoleGroupRelation> page(PageSaasRoleGroupRelationParam param);
|
||||
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class ListSaasRoleGroupRelationParam {
|
||||
|
||||
@CriteriaField(field = "roleId", operator = Operator.IN)
|
||||
private List<Long> roleId;
|
||||
}
|
||||
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class PageSaasRoleGroupRelationParam extends ListSaasRoleGroupRelationParam implements IPageParam {
|
||||
@CriteriaField(ignore = true)
|
||||
Integer page;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
Integer pageSize;
|
||||
|
||||
/**
|
||||
* 排序:使用示例,createTime__DESC
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
List<String> sort;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,8 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.basics.common.exception.ServiceException;
|
||||
import cn.axzo.framework.domain.page.PageResp;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.pokonyan.dao.converter.PageConverter;
|
||||
import cn.axzo.pokonyan.dao.mysql.QueryWrapperHelper;
|
||||
import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||
import cn.axzo.tyr.client.model.enums.IdentityType;
|
||||
@ -45,6 +47,7 @@ import cn.axzo.tyr.server.repository.entity.SaasRoleGroup;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser;
|
||||
import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper;
|
||||
import cn.axzo.tyr.server.service.PermissionGroupService;
|
||||
import cn.axzo.tyr.server.service.RoleService;
|
||||
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService;
|
||||
@ -56,13 +59,16 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
@ -93,7 +99,8 @@ import java.util.stream.Stream;
|
||||
@RequiredArgsConstructor
|
||||
@RefreshScope
|
||||
@Service
|
||||
public class RoleServiceImpl implements RoleService {
|
||||
public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
implements RoleService {
|
||||
|
||||
@Autowired
|
||||
SaasRoleUserRelationDao roleUserRelationDao;
|
||||
@ -1003,4 +1010,22 @@ public class RoleServiceImpl implements RoleService {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SaasRole> list(ListSaasRoleParam param) {
|
||||
return PageConverter.drainAll(pageNumber -> {
|
||||
PageSaasRoleParam pageParam = PageSaasRoleParam.builder().build();
|
||||
BeanUtils.copyProperties(param, pageParam);
|
||||
pageParam.setPage(pageNumber);
|
||||
pageParam.setPageSize(500);
|
||||
return page(pageParam);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<SaasRole> page(PageSaasRoleParam param) {
|
||||
QueryWrapper<SaasRole> wrapper = QueryWrapperHelper.fromBean(param, SaasRole.class);
|
||||
wrapper.eq("is_delete", 0);
|
||||
return this.page(PageConverter.convertToMybatis(param, SaasRole.class), wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@ -99,14 +100,26 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
|
||||
// 新增时候
|
||||
if (req.getId() == null) {
|
||||
baseResource.setCreateBy(req.getOperatorId());
|
||||
baseResource.setDisplayOrder(0);
|
||||
List<SaasFeatureResource> parallelResources = featureResourceDao.lambdaQuery().eq(SaasFeatureResource::getParentId, req.getParentId()).list();
|
||||
if (CollectionUtil.isNotEmpty(parallelResources)) {
|
||||
SaasFeatureResource maxOrderResource = parallelResources.stream().max(Comparator.comparingInt(SaasFeatureResource::getDisplayOrder)).orElse(new SaasFeatureResource());
|
||||
baseResource.setDisplayOrder(maxOrderResource.getDisplayOrder() + 1);
|
||||
}
|
||||
newResource(baseResource);
|
||||
} else {
|
||||
featureResourceDao.updateById(baseResource);
|
||||
}
|
||||
|
||||
if (CollectionUtil.isNotEmpty(req.getComponentSaveReqList())) {
|
||||
for (FeatureComponentSaveReq componentSaveReq : req.getComponentSaveReqList()) {
|
||||
saveOrUpdateFeatureComponent(componentSaveReq, baseResource.getPath(), req.getOperatorId());
|
||||
List<FeatureComponentSaveReq> components = req.getComponentSaveReqList();
|
||||
for (int i = 0; i < components.size(); i++) {
|
||||
FeatureComponentSaveReq childComponent = components.get(i);
|
||||
if (childComponent.getParentId() != null) {
|
||||
childComponent.setParentId(baseResource.getId());
|
||||
}
|
||||
// 递归新增修改删除子节点
|
||||
saveOrUpdateFeatureComponent(childComponent, baseResource.getPath(), req.getOperatorId(), i);
|
||||
}
|
||||
} else {
|
||||
deleteComponentRecursionById(baseResource.getId(), null, req.getOperatorId());
|
||||
@ -122,10 +135,11 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
|
||||
|
||||
}
|
||||
|
||||
private void saveOrUpdateFeatureComponent(FeatureComponentSaveReq featureComponentSaveReq, String parentPath, Long operatorId) {
|
||||
private void saveOrUpdateFeatureComponent(FeatureComponentSaveReq featureComponentSaveReq, String parentPath, Long operatorId, Integer displayOrder) {
|
||||
// 批量保存path
|
||||
SaasFeatureResource saasFeatureResource = BeanMapper.copyBean(featureComponentSaveReq, SaasFeatureResource.class);
|
||||
saasFeatureResource.setUpdateBy(operatorId);
|
||||
saasFeatureResource.setDisplayOrder(displayOrder);
|
||||
if (saasFeatureResource.getId() != null) {
|
||||
featureResourceDao.updateById(saasFeatureResource);
|
||||
} else {
|
||||
@ -141,12 +155,13 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
|
||||
|
||||
// 更新前端提交的数据;
|
||||
if (!CollectionUtil.isEmpty(children)) {
|
||||
for (FeatureComponentSaveReq childComponent : children) {
|
||||
for (int i = 0; i < children.size(); i++) {
|
||||
FeatureComponentSaveReq childComponent = children.get(i);
|
||||
if (childComponent.getParentId() != null) {
|
||||
childComponent.setParentId(saasFeatureResource.getId());
|
||||
}
|
||||
// 递归新增修改删除子节点
|
||||
saveOrUpdateFeatureComponent(childComponent, saasFeatureResource.getPath(), operatorId);
|
||||
saveOrUpdateFeatureComponent(childComponent, saasFeatureResource.getPath(), operatorId, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -165,6 +180,7 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
|
||||
for (SaasFeatureResource deleteChild : deleteChildren) {
|
||||
// 删除自己及自己的子集
|
||||
featureResourceDao.lambdaUpdate()
|
||||
.eq(BaseEntity::getIsDelete,0)
|
||||
.apply("FIND_IN_SET('" + deleteChild.getId() + "', path)")
|
||||
.set(SaasFeatureResource::getUpdateBy, operatorId)
|
||||
.set(BaseEntity::getIsDelete,1);
|
||||
|
||||
@ -1,12 +1,19 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
|
||||
import cn.axzo.pokonyan.dao.converter.PageConverter;
|
||||
import cn.axzo.pokonyan.dao.mysql.QueryWrapperHelper;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleGroupRelationDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
|
||||
import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupRelationMapper;
|
||||
import cn.axzo.tyr.server.service.SaasRoleGroupRelationService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -17,7 +24,8 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SaasRoleGroupRelationServiceImpl implements SaasRoleGroupRelationService {
|
||||
public class SaasRoleGroupRelationServiceImpl extends ServiceImpl<SaasRoleGroupRelationMapper, SaasRoleGroupRelation>
|
||||
implements SaasRoleGroupRelationService {
|
||||
private final SaasRoleGroupRelationDao saasRoleGroupRelationDao;
|
||||
|
||||
@Override
|
||||
@ -42,4 +50,23 @@ public class SaasRoleGroupRelationServiceImpl implements SaasRoleGroupRelationSe
|
||||
saasRoleGroupRelationDao.removeByIds(deleteList.stream().map(SaasRoleGroupRelation::getId).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SaasRoleGroupRelation> list(ListSaasRoleGroupRelationParam param) {
|
||||
return PageConverter.drainAll(pageNumber -> {
|
||||
PageSaasRoleGroupRelationParam pageParam = PageSaasRoleGroupRelationParam.builder().build();
|
||||
BeanUtils.copyProperties(param, pageParam);
|
||||
pageParam.setPage(pageNumber);
|
||||
pageParam.setPageSize(500);
|
||||
return page(pageParam);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<SaasRoleGroupRelation> page(PageSaasRoleGroupRelationParam param) {
|
||||
QueryWrapper<SaasRoleGroupRelation> wrapper = QueryWrapperHelper.fromBean(param, SaasRoleGroupRelation.class);
|
||||
wrapper.eq("is_delete", 0);
|
||||
|
||||
return this.page(PageConverter.convertToMybatis(param, SaasRoleGroupRelation.class), wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,6 +156,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService {
|
||||
saasRoleGroup.setSort(req.getSort());
|
||||
saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId() : -1L);
|
||||
saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId() : -1L);
|
||||
saasRoleGroup.setParentId(req.getParentId());
|
||||
return saasRoleGroup;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user