You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
5.0 KiB
Java
126 lines
5.0 KiB
Java
package com.supervision.police.service.impl;
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.lang.Assert;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.supervision.police.domain.SystemRole;
|
|
import com.supervision.police.domain.SystemRoleMenuRelation;
|
|
import com.supervision.police.domain.SystemUserRoleRelation;
|
|
import com.supervision.police.dto.RoleDTO;
|
|
import com.supervision.police.service.SystemRoleMenuRelationService;
|
|
import com.supervision.police.service.SystemRoleService;
|
|
import com.supervision.police.mapper.SystemRoleMapper;
|
|
import com.supervision.police.service.SystemUserRoleRelationService;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @author Administrator
|
|
* @description 针对表【system_role(角色表)】的数据库操作Service实现
|
|
* @createDate 2024-07-31 11:02:43
|
|
*/
|
|
@Slf4j
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class SystemRoleServiceImpl extends ServiceImpl<SystemRoleMapper, SystemRole>
|
|
implements SystemRoleService{
|
|
|
|
private final SystemRoleMenuRelationService systemRoleMenuRelationService;
|
|
|
|
private final SystemUserRoleRelationService systemUserRoleRelationService;
|
|
|
|
private final SystemRoleMenuRelationService roleMenuRelationService;
|
|
@Override
|
|
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
|
|
public String saveRole(RoleDTO roleDTO) {
|
|
|
|
Assert.notEmpty(roleDTO.getRoleName(), "角色名称不能为空");
|
|
Long count = super.lambdaQuery().eq(SystemRole::getRoleName, roleDTO.getRoleName()).count();
|
|
Assert.isTrue(count == 0, "角色名称已存在");
|
|
|
|
// 保存角色
|
|
SystemRole systemRole = roleDTO.toSystemRole();
|
|
super.save(systemRole);
|
|
|
|
// 保存角色关联的菜单信息
|
|
if (CollUtil.isNotEmpty(roleDTO.getMenuIdList())){
|
|
roleDTO.setId(systemRole.getId());
|
|
roleDTO.menuIdListToRoleMenu().forEach(systemRoleMenuRelationService::save);
|
|
}
|
|
|
|
return systemRole.getId();
|
|
}
|
|
|
|
@Override
|
|
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
|
|
public void updateRole(RoleDTO roleDTO) {
|
|
Assert.notEmpty(roleDTO.getId(), "角色id不能为空");
|
|
Assert.notEmpty(roleDTO.getRoleName(), "角色名称不能为空");
|
|
|
|
SystemRole dbSystemRole = super.getById(roleDTO.getId());
|
|
Assert.notNull(dbSystemRole, "角色不存在");
|
|
if (!StrUtil.equals(dbSystemRole.getRoleName(), roleDTO.getRoleName())){
|
|
// 判断角色名称是否重复
|
|
Long count = super.lambdaQuery().eq(SystemRole::getRoleName, roleDTO.getRoleName()).count();
|
|
Assert.isTrue(count == 0, "角色名称已存在");
|
|
}
|
|
|
|
dbSystemRole.setRoleName(roleDTO.getRoleName());
|
|
dbSystemRole.setRemark(roleDTO.getRemark());
|
|
|
|
// 更新角色基本数据
|
|
super.updateById(dbSystemRole);
|
|
|
|
// 更新角色关联的菜单信息
|
|
systemRoleMenuRelationService.updateRoleMenu(dbSystemRole.getId(), roleDTO.getMenuIdList());
|
|
|
|
}
|
|
|
|
@Override
|
|
public Boolean deleteRole(String roleId) {
|
|
|
|
Assert.notEmpty(roleId, "角色id不能为空");
|
|
boolean success = super.removeById(roleId);
|
|
if (success){
|
|
systemRoleMenuRelationService.deleteRoleMenu(roleId);
|
|
}
|
|
return success;
|
|
}
|
|
|
|
@Override
|
|
public IPage<RoleDTO> list(String roleName, Integer pageNum, Integer pageSize) {
|
|
|
|
Page<SystemRole> page = super.lambdaQuery().like(StrUtil.isNotEmpty(roleName), SystemRole::getRoleName, roleName)
|
|
.orderBy(true, false, SystemRole::getUpdateTime).page(new Page<>(pageNum, pageSize));
|
|
|
|
if (CollUtil.isEmpty(page.getRecords())){
|
|
return Page.of(pageNum, pageSize,page.getTotal());
|
|
}
|
|
|
|
List<String> roleIdList = page.getRecords().stream().map(SystemRole::getId).toList();
|
|
// 角色关联的用户数量
|
|
List<SystemUserRoleRelation> userRoleList = systemUserRoleRelationService.listUserRoleByRoleIdList(roleIdList);
|
|
Map<String, Long> roleUserCount = userRoleList.stream().collect(Collectors.groupingBy(SystemUserRoleRelation::getRoleId, Collectors.counting()));
|
|
// 角色关联的菜单数据
|
|
List<SystemRoleMenuRelation> roleMenuList = roleMenuRelationService.listRoleMenuByRoleIdList(roleIdList);
|
|
Map<String, List<SystemRoleMenuRelation>> roleMenuMap = roleMenuList.stream().collect(Collectors.groupingBy(SystemRoleMenuRelation::getRoleId));
|
|
|
|
return page.convert(systemRole ->
|
|
new RoleDTO(systemRole, roleUserCount.get(systemRole.getId()),roleMenuMap.get(systemRole.getId())));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|