package com.gkhy.safePlatform.account.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.gkhy.safePlatform.account.entity.user.*;
|
import com.gkhy.safePlatform.account.model.dto.req.RoleAddReqDTO;
|
import com.gkhy.safePlatform.account.model.dto.req.RoleModReqDTO;
|
import com.gkhy.safePlatform.account.model.dto.resp.RoleRespDTO;
|
import com.gkhy.safePlatform.account.enums.ProjectStatusEnum;
|
import com.gkhy.safePlatform.account.enums.RoleStatusEnum;
|
import com.gkhy.safePlatform.account.service.RoleService;
|
import com.gkhy.safePlatform.account.service.baseService.*;
|
import com.gkhy.safePlatform.commons.co.ContextCacheUser;
|
import com.gkhy.safePlatform.commons.enums.E;
|
import com.gkhy.safePlatform.commons.enums.ResultCodes;
|
import com.gkhy.safePlatform.commons.exception.AusinessException;
|
import com.gkhy.safePlatform.commons.exception.BusinessException;
|
import com.gkhy.safePlatform.commons.utils.BeanCopyUtils;
|
import com.gkhy.safePlatform.commons.utils.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service("roleService")
|
public class RoleServiceImpl implements RoleService {
|
|
@Autowired
|
private RoleInfoService roleInfoService;
|
@Autowired
|
private ProjectInfoService projectInfoService;
|
@Autowired
|
private RoleProjectInfoService roleProjectInfoService;
|
@Autowired
|
private UserInfoService userInfoService;
|
@Autowired
|
private RoleMenuInfoService roleMenuInfoService;
|
|
@Override
|
@Transactional
|
public void addRole(RoleAddReqDTO roleAddDto, ContextCacheUser currentUser) {
|
;
|
if (StringUtils.isBlank(roleAddDto.getRoleCode())) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "角色编码不能为空");
|
}
|
if (StringUtils.isBlank(roleAddDto.getRoleName())) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "角色名称不能为空");
|
}
|
String code = roleAddDto.getRoleCode().trim();
|
String name = roleAddDto.getRoleName().trim();
|
RoleInfo role;
|
// 编码判重
|
role = roleInfoService.getRoleInfoByCode(code);
|
if (role != null) {
|
throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "角色编码已经存在");
|
}
|
// 名称判重
|
role = roleInfoService.getRoleInfoByName(name);
|
if (role != null) {
|
throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "角色名称已经存在");
|
}
|
|
// 1.新增角色
|
RoleInfo roleInfo = new RoleInfo();
|
roleInfo.setCode(code);
|
roleInfo.setName(name);
|
roleInfo.setGmtCreate(new Date());
|
roleInfo.setInfo(roleAddDto.getRoleInfo());
|
roleInfo.setStatus(RoleStatusEnum.ENABLED.getCode());
|
roleInfoService.saveRoleInfo(roleInfo);
|
|
// 2.角色和所有项目绑定(以后可能是手动分配项目)
|
List<ProjectInfo> projects = projectInfoService.getAllProject(ProjectStatusEnum.ENABLED);
|
if (projects.size() > 0) {
|
List<RoleProjectInfo> roleProjectInfos = new ArrayList<>();
|
RoleProjectInfo roleProjectInfo;
|
for (ProjectInfo projectInfo : projects) {
|
roleProjectInfo = new RoleProjectInfo();
|
roleProjectInfo.setRoleId(roleInfo.getId());
|
roleProjectInfo.setProjectId(projectInfo.getId());
|
roleProjectInfos.add(roleProjectInfo);
|
}
|
roleProjectInfoService.saveRoleProjectInfos(roleProjectInfos);
|
}
|
}
|
|
@Override
|
@Transactional
|
public void modRole(RoleModReqDTO roleModDto,ContextCacheUser currentUser) {
|
|
if (roleModDto.getRoleId() == null) {
|
throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL);
|
}
|
if (StringUtils.isBlank(roleModDto.getRoleCode())) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "角色编码不能为空");
|
}
|
if (StringUtils.isBlank(roleModDto.getRoleName())) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "角色名称不能为空");
|
}
|
String code = roleModDto.getRoleCode().trim();
|
String name = roleModDto.getRoleName().trim();
|
// 1.获取数据库角色
|
RoleInfo roleInfo = roleInfoService.getRoleInfoById(roleModDto.getRoleId());
|
if (roleInfo == null) {
|
// 角色不存在
|
throw new BusinessException(ResultCodes.CLIENT_ROLE_NOT_EXIST);
|
}
|
if (StringUtils.isNotBlank(roleModDto.getRoleInfo())) {
|
roleInfo.setInfo(roleModDto.getRoleInfo());
|
}
|
|
|
// 2.检查字段重复
|
RoleInfo role;
|
// 编码判重
|
role = roleInfoService.getRoleInfoByCode(code);
|
if (role != null && !role.getId().equals(roleInfo.getId())) {
|
throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "角色编码已经存在");
|
}
|
// 名称判重
|
role = roleInfoService.getRoleInfoByName(name);
|
if (role != null && !role.getId().equals(roleInfo.getId())) {
|
throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "角色名称已经存在");
|
}
|
roleInfo.setGmtModified(new Date());
|
roleInfo.setCode(code);
|
roleInfo.setName(name);
|
roleInfoService.updateRoleInfo(roleInfo);
|
// 3.角色与项目 不做操作
|
|
}
|
|
|
/**
|
* @Description: 获取所有启用的角色
|
*/
|
@Override
|
public List<RoleRespDTO> getEnableRoleInfos() {
|
List<RoleInfoDO> roleInfos = roleInfoService.getRoleInfoByStatus(RoleStatusEnum.ENABLED);
|
RoleRespDTO roleRespDTO;
|
List<RoleRespDTO> result = new ArrayList<>(roleInfos.size());
|
RoleStatusEnum status;
|
for (RoleInfoDO roleInfoDo : roleInfos) {
|
roleRespDTO = new RoleRespDTO();
|
roleRespDTO.setRoleId(roleInfoDo.getId());
|
roleRespDTO.setRoleCode(roleInfoDo.getCode());
|
roleRespDTO.setRoleInfo(roleInfoDo.getInfo());
|
roleRespDTO.setRoleName(roleInfoDo.getName());
|
roleRespDTO.setStatus(roleInfoDo.getStatus());
|
status = RoleStatusEnum.parse(roleInfoDo.getStatus());
|
assert status != null;
|
roleRespDTO.setStatusDesc(status.getValue());
|
result.add(roleRespDTO);
|
}
|
return result;
|
}
|
|
@Override
|
@Transactional
|
public void delRole(Long roleId, ContextCacheUser currentUser) {
|
;
|
RoleInfo roleInfo = roleInfoService.getRoleInfoById(roleId);
|
if (roleInfo == null) {
|
throw new BusinessException(ResultCodes.CLIENT_ROLE_NOT_EXIST);
|
}
|
assert roleInfo.getStatus() != null;
|
RoleStatusEnum status = RoleStatusEnum.parse(roleInfo.getStatus());
|
if (status != RoleStatusEnum.ENABLED) {
|
throw new BusinessException(ResultCodes.CLIENT_ROLE_NOT_EXIST);
|
}
|
if (roleId.equals(currentUser.getRoleId())) {
|
throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "当前删除角色与所处角色相同");
|
}
|
|
// 用户占用判断
|
long count = userInfoService.countByRoleId(roleId);
|
if (count > 0) {
|
throw new AusinessException(E.DATA_BING_RELATION, "请解除用户该角色");
|
}
|
|
RoleInfo role = new RoleInfo();
|
role.setId(roleInfo.getId());
|
role.setStatus(RoleStatusEnum.ABANDONED.getCode());
|
role.setGmtModified(new Date());
|
// 1.角色删除
|
roleInfoService.updateRoleInfo(role);
|
|
// 2.用户解绑角色
|
userInfoService.resetRoleToNullByRoleId(roleId);
|
|
// 3.角色项目解绑
|
roleProjectInfoService.unbindProjectByRoleId(roleId);
|
|
// 4.角色菜单解绑
|
roleMenuInfoService.unbindMenuByRoleId(roleId);
|
|
|
}
|
|
|
}
|