package com.gkhy.labRiskManage.domain.account.service.impl; import cn.hutool.core.util.ObjectUtil; import com.gkhy.labRiskManage.commons.enums.ResultCode; import com.gkhy.labRiskManage.commons.exception.BusinessException; import com.gkhy.labRiskManage.domain.account.converter.UserRoleBindConverter; import com.gkhy.labRiskManage.domain.account.entity.SysUserRoleBind; import com.gkhy.labRiskManage.domain.account.model.dto.RoleInfoDoaminDTO; import com.gkhy.labRiskManage.domain.account.model.dto.SysUserRoleBindDomainDTO; import com.gkhy.labRiskManage.domain.account.model.dto.UserInfoDomainDTO; import com.gkhy.labRiskManage.domain.account.repository.jpa.UserRoleBindReposity; import com.gkhy.labRiskManage.domain.account.service.RoleDomainService; import com.gkhy.labRiskManage.domain.account.service.UserDomainService; import com.gkhy.labRiskManage.domain.account.service.UserRoleDomainService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @email 1603559716@qq.com * @author: zf * @date: 2023/3/13 * @time: 9:26 */ @Service public class UserRoleDomainServiceImpl implements UserRoleDomainService { @Autowired private UserRoleBindReposity userRoleBindReposity; @Autowired private RoleDomainService roleDomainService; @Autowired private UserDomainService userDomainService; @Autowired private UserRoleBindConverter converter; @Override public List insertBatchUserBindRole(List roleIds, Long userId) { if(ObjectUtil.isEmpty(roleIds) || ObjectUtil.isEmpty(userId)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失"); } //验证用户 UserInfoDomainDTO user = userDomainService.getUserInfoById(userId); if(ObjectUtil.isEmpty(user)){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_DATA_NOT_EXISIST.getCode(), "用户不存在"); } //验证角色是否都存在 List roleList = roleDomainService.findAllByIdIn(roleIds); for(Long roleId : roleIds){ List collect = roleList.stream().filter(role -> role.getId().equals(roleId)).collect(Collectors.toList()); if(collect.size() == 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_DATA_NOT_EXISIST.getCode(), "角色不存在"); } } //绑定用户角色 List sysUserRoleBindList = new ArrayList<>(); for(Long roleId : roleIds){ SysUserRoleBind sysUserRoleBind = new SysUserRoleBind(); sysUserRoleBind.setRoleId(roleId); sysUserRoleBind.setUserId(userId); sysUserRoleBindList.add(sysUserRoleBind); } List list = converter.userRoleBindDomainConverter(userRoleBindReposity.saveAll(sysUserRoleBindList)); return list; } @Transactional @Override public void updateUserRole(Long userId, List roleIds) { if(ObjectUtil.isEmpty(roleIds) || ObjectUtil.isEmpty(userId)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失"); } //获取原来的角色id List oldRoleIds = userRoleBindReposity.getByUserId(userId); List deleteRoleIdList = new ArrayList<>(); List addRoleIdList = roleIds; if (ObjectUtil.isNotEmpty(oldRoleIds)) { //新增 addRoleIdList = roleIds.stream().filter(item -> !oldRoleIds.contains(item)).collect(Collectors.toList()); //删除 deleteRoleIdList = oldRoleIds.stream().filter(item -> !roleIds.contains(item)).collect(Collectors.toList()); } List saveList = new ArrayList<>(); for(Long roleId : addRoleIdList){ SysUserRoleBind sysUserRoleBind = new SysUserRoleBind(); sysUserRoleBind.setRoleId(roleId); sysUserRoleBind.setUserId(userId); saveList.add(sysUserRoleBind); } //删除不需要角色 if(deleteRoleIdList.size()>0){ userRoleBindReposity.deleteByUserIdAndRoleIds(userId, deleteRoleIdList); } //绑定新增角色 if(saveList.size()>0){ userRoleBindReposity.saveAll(saveList); } } @Override public boolean deleteByUser(Long userId) { if(null == userId){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失"); } if(userRoleBindReposity.deleteByUserId(userId) > 0){ return true; } return false; } /*@Override public List getUserRoleBind(Long userId) { if(null == userId){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数缺失"); } return null; }*/ }