package com.dy.pmsBase.role; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pmsGlobal.daoBa.BaPrivilegeMapper; import com.dy.pmsGlobal.daoBa.BaRoleMapper; import com.dy.pmsGlobal.daoBa.BaRolePrivilegeMapper; import com.dy.pmsGlobal.pojoBa.BaRole; import com.dy.pmsGlobal.pojoBa.BaRolePrivilege; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @Slf4j @Service public class RoleSv { private BaRoleMapper dao; private BaRolePrivilegeMapper rpDao; private BaPrivilegeMapper priDao; @Autowired public RoleSv(BaRoleMapper dao, BaRolePrivilegeMapper rpDao,BaPrivilegeMapper priDao) { this.dao = dao; this.rpDao = rpDao; this.priDao = priDao; } @Transactional public int save(BaRole role) { int count = dao.insert(role); // 添加角色权限 updateRolePrivileges(role.id,role.priIds); return count; } /** * 逻辑删除实体 * @param id 实体ID * @return 影响记录数量 */ @Transactional public int delete(Long id) { return this.dao.deleteLogicById(id); } @Transactional public int update(BaRole role) { int count = dao.updateByPrimaryKeySelective(role); // 更新角色权限 updateRolePrivileges(role.id,role.priIds); return count; } /** * 添加或更新角色权限 * @param roleId 角色ID * @param priIds 权限id * @return */ private void updateRolePrivileges(Long roleId,List priIds) { if(CollectionUtils.isEmpty(priIds)){ throw new RuntimeException("权限id不能为空"); } // 删除角色权限 rpDao.deleteByRoleId(roleId); priIds.stream().forEach(rp -> { if(priDao.selectByPrimaryKey(rp.longValue()) != null){ rpDao.insert(new BaRolePrivilege(roleId, rp.longValue())); } }); } public BaRole selectById(String roleId) { return dao.selectByPrimaryKey(Long.valueOf(roleId)); } /** * 获取角色列表 */ public QueryResultVo> selectSome(QueryVo queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); //查询符合条件的记录总数 Long itemTotal = this.dao.selectSomeCount(params); QueryResultVo> rsVo = new QueryResultVo<>(queryVo.pageSize, queryVo.pageCurr) ; //计算分页等信息 rsVo.calculateAndSet(itemTotal, params); //查询符合条件的记录 rsVo.obj = this.dao.selectSome(params) ; return rsVo ; } }