package com.hxzk.gps.service.impl.Role;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hxzk.gps.controller.Role.Results.AddRoleDto;
import com.hxzk.gps.controller.Role.Results.RoleCompanyList;
import com.hxzk.gps.controller.Role.Results.RoleResult;
import com.hxzk.gps.controller.Role.Results.RoleTreeTableDto;
import com.hxzk.gps.entity.Role.Rolemenu;
import com.hxzk.gps.entity.System.TbSystemOperationLog;
import com.hxzk.gps.mapper.Role.RoleMenuMapper;
import com.hxzk.gps.service.Role.RoleMenuService;
import com.hxzk.gps.service.System.TbSystemOperationLogService;
import com.hxzk.gps.util.GetUser.UserInfoUtil;
import com.hxzk.gps.util.Result.ReturnMessage;
import com.hxzk.gps.util.Result.TableDto;
import com.hxzk.gps.entity.Role.Role;
import com.hxzk.gps.mapper.Role.RoleMapper;
import com.hxzk.gps.service.Company.TbCompanyService;
import com.hxzk.gps.service.Role.IRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hxzk.gps.util.MessageUtils.MessageUtils;
import com.hxzk.gps.controller.User.Results.UserTreeTableDto;
import com.hxzk.gps.controller.System.SystemLogUtil;
import com.hxzk.gps.util.Time.TimeUtil;
import com.sun.org.apache.bcel.internal.generic.PUSH;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.sql.Time;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author YuZhiTong
* @since 2025-05-08
*/
@Service
public class RoleServiceImpl extends ServiceImpl implements IRoleService {
/*
* Service注入
* */
@Autowired
private TbCompanyService companyService;
@Autowired
private RoleMenuService roleMenuService;
@Autowired
public TbSystemOperationLogService systemOperationLogService;
/*
* 角色列表信息
* */
@Override
public RoleResult FindRoleInfo(RoleTreeTableDto roleTreeTableDto) {
// 创建查询包装器
QueryWrapper queryWrapper = new QueryWrapper<>();
// 处理部门 ID 为空的情况
if (StringUtils.isEmpty(roleTreeTableDto.getDepartmentId())) {
List list = companyService.getChildCompanyIds(UserInfoUtil.getUserCompanyId());
queryWrapper.in("companyid", list);
} else {
queryWrapper.eq("companyid", roleTreeTableDto.getDepartmentId());
}
// 处理角色名称查询条件
Optional.ofNullable(roleTreeTableDto.getName()).ifPresent(name ->
queryWrapper.like("name", name));
// 使用PageHelper进行分页查询
Page page = PageHelper.startPage(roleTreeTableDto.getPageNum(), roleTreeTableDto.getPageSize())
.doSelectPage(() -> baseMapper.selectList(queryWrapper));
// 封装角色列表
TableDto tableDto = new TableDto(page.getResult(), page.getPageNum(), page.getPageSize(), page.getTotal());
// 获取成功消息
String message = MessageUtils.getMessage("Success");
// 返回结果 - 根据RoleResult的构造函数调整参数
return new RoleResult(200, message, tableDto);
}
/*
* 获取当前登录用户公司所属角色信息列表
* @return 登录用户公司角色信息列表 lable -- value
* */
@Override
public List FindCompanyRole(String companyid) {
// 使用泛型指定 QueryWrapper 的类型
if (companyid.isEmpty()){
companyid = UserInfoUtil.getUserCompanyId();
}
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("companyid", companyid);
// 查询角色列表
List roleList = baseMapper.selectList(queryWrapper);
// 使用 Stream API 简化循环操作
return roleList.stream()
.map(role -> {
RoleCompanyList roleLists = new RoleCompanyList();
roleLists.setLabel(role.getName());
roleLists.setValue(String.valueOf(role.getId()));
return roleLists;
})
.collect(Collectors.toList());
}
/*
* 获取角色名称
* @return 角色名称
* @param id 角色ID
* */
@Override
public String FindRoleName(String id) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("id", id).or().eq("name", id);
return baseMapper.selectOne(queryWrapper).getName();
}
@Override
public ReturnMessage add(AddRoleDto addRoleDto) {
/*
声明操作状态
* */
boolean isSuccess = false;
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", addRoleDto.getName());
queryWrapper.eq("companyid", addRoleDto.getCompanyid());
//查重
Integer count = Math.toIntExact(baseMapper.selectCount(queryWrapper));
if (count > 0) {
//存在
return ReturnMessage.ReturnMessageError("RoleRepeat");
} else {
Role role = new Role();
role.setName(addRoleDto.getName());
if (addRoleDto.getCompanyid().equals("")){
addRoleDto.setCompanyid(UserInfoUtil.getUserCompanyId());
}
role.setCompanyname(companyService.getChildCompanyName(addRoleDto.getCompanyid()));
role.setUsername(UserInfoUtil.getUserName());
role.setCompanyid(addRoleDto.getCompanyid());
role.setAddtime(TimeUtil.GetTime());
if (addRoleDto.isAddrole()){
role.setAddrole(true);
}
if (addRoleDto.isEditrole()){
role.setEditrole(true);
}
if (addRoleDto.isDeleterole()){
role.setDeleterole(true);
}
baseMapper.insert(role);
isSuccess = true;
//添加角色成功
QueryWrapper queryWrapperselect = new QueryWrapper<>();
queryWrapperselect.eq("name", role.getName());
queryWrapperselect.eq("companyname", role.getCompanyname());
//查询角色ID
Role role1 = baseMapper.selectOne(queryWrapperselect);
Integer roleId = role1.getId();
Map map = new HashMap<>();
for (int k = 0; k < addRoleDto.getRolist().size();k++){
map.put(addRoleDto.getRolist().get(k).getId(),addRoleDto.getRolist().get(k).getId());
}
for (int i = 0; i < addRoleDto.getRolist().size();i++){
if (addRoleDto.getRolist().get(i).getParentId() != null){
if (!map.containsKey(addRoleDto.getRolist().get(i).getParentId())) {
//不包含
Rolemenu rolemenu = new Rolemenu();
rolemenu.setRoleId(roleId);
rolemenu.setMenuId(addRoleDto.getRolist().get(i).getParentId());
rolemenu.setIsall(0);
roleMenuService.save(rolemenu);
map.put(addRoleDto.getRolist().get(i).getParentId(),addRoleDto.getRolist().get(i).getParentId());
}
}
Rolemenu rolemenu = new Rolemenu();
rolemenu.setRoleId(roleId);
rolemenu.setMenuId(addRoleDto.getRolist().get(i).getId());
roleMenuService.save(rolemenu);
}
return SystemLogUtil.handleAddResult(isSuccess,"RoleAdd",role.getName());
}
}
@Override
public ReturnMessage update(AddRoleDto role) {
/*
声明操作状态
* */
boolean isSuccess = false;
Role role1 = new Role();
role1.setId(role.getId());
role1.setName(role.getName());
role1.setAddtime(TimeUtil.GetTime());
role1.setAddrole(role.isAddrole());
role1.setEditrole(role.isEditrole());
role1.setDeleterole(role.isDeleterole());
role1.setCompanyname(role.getCompanyname());
role1.setUsername(UserInfoUtil.getUserName());
role1.setCompanyid(role.getCompanyid());
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", role.getId());
try {
baseMapper.update(role1, queryWrapper);
roleMenuService.deleteRoleMenu(role.getId());
Integer roleId = role1.getId();
Map map = new HashMap<>();
for (int k = 0; k < role.getRolist().size();k++){
map.put(role.getRolist().get(k).getId(),role.getRolist().get(k).getId());
}
for (int i = 0; i < role.getRolist().size();i++){
if (role.getRolist().get(i).getParentId() != null){
if (!map.containsKey(role.getRolist().get(i).getParentId())) {
//不包含
Rolemenu rolemenu = new Rolemenu();
rolemenu.setRoleId(roleId);
rolemenu.setMenuId(role.getRolist().get(i).getParentId());
rolemenu.setIsall(0);
roleMenuService.save(rolemenu);
map.put(role.getRolist().get(i).getParentId(),role.getRolist().get(i).getParentId());
}
}
Rolemenu rolemenu = new Rolemenu();
rolemenu.setRoleId(roleId);
rolemenu.setMenuId(role.getRolist().get(i).getId());
roleMenuService.save(rolemenu);
}
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleUpdateResult(isSuccess,"RoleUpdate",role.getName());
}
@Override
public ReturnMessage delete(AddRoleDto role) {
/*
声明操作状态
* */
boolean isSuccess = false;
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", role.getId());
roleMenuService.deleteRoleMenu(role.getId());
try {
baseMapper.delete(queryWrapper);
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleDeleteResult(isSuccess,"RoleDelete",role.getName());
}
}