package com.fdkankan.sale.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fdkankan.sale.common.PageInfo;
import com.fdkankan.sale.common.ResultCode;
import com.fdkankan.sale.entity.SysRole;
import com.fdkankan.sale.entity.SysUser;
import com.fdkankan.sale.exception.BusinessException;
import com.fdkankan.sale.mapper.ISysRoleMapper;
import com.fdkankan.sale.service.ISysMenuService;
import com.fdkankan.sale.service.ISysRoleMenuService;
import com.fdkankan.sale.service.ISysRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.sale.service.ISysUserService;
import com.fdkankan.sale.vo.request.SysRoleMenuParam;
import com.fdkankan.sale.vo.request.SysRoleParam;
import com.fdkankan.sale.vo.response.SysRoleVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author
* @since 2022-12-09
*/
@Service
public class SysRoleServiceImpl extends ServiceImpl implements ISysRoleService {
@Autowired
ISysUserService sysUserService;
@Autowired
ISysRoleMenuService roleMenuService;
@Autowired
ISysMenuService sysMenuService;
@Override
public void addOrUpdate(SysRoleParam param) {
SysRole sysRole = new SysRole();
BeanUtils.copyProperties(param,sysRole);
sysRole.setUpdateTime(null);
this.saveOrUpdate(sysRole);
}
@Override
public PageInfo pageList(SysRoleParam param) {
HashMap countMap = sysUserService.groupByRoleId();
Page page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
for (SysRoleVo record : page.getRecords()) {
record.setAdminCount(countMap.get(record.getId()) == null ? 0 : countMap.get(record.getId()));
}
return PageInfo.PageInfo(page);
}
@Override
public void delete(Long id) {
if(StringUtils.isEmpty(id)){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getRoleId,id);
long count = sysUserService.count(wrapper);
if(count >0){
throw new BusinessException(ResultCode.DEL_ROLE_ERROR);
}
roleMenuService.deleteByRoleId(id);
this.removeById(id);
}
@Override
public void giveMenu(SysRoleMenuParam param) {
if(param.getRoleId() == null){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
roleMenuService.deleteByRoleId(param.getRoleId());
roleMenuService.saveBatchByRoleId(param.getRoleId(),param.getMenuIds());
}
@Override
public List getByRoleType(Integer roleType) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRole::getRoleType,roleType);
return this.list(wrapper);
}
}