liuxm
2024-04-29 9644fb41cd6f23a032c56beba0c548e64b2693de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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);
    }
 
    /**
     * 禁用或启用角色信息
     * @param id
     * @param disabled
     * @return
     */
    public int disabled(Long id,Boolean disabled) {
        BaRole role=new BaRole();
        role.id=id;
        role.disabled=disabled;
        return dao.updateByPrimaryKeySelective(role);
    }
 
    @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<Integer> 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<List<BaRole>> selectSome(QueryVo queryVo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
        //查询符合条件的记录总数
        Long itemTotal = this.dao.selectSomeCount(params);
 
        QueryResultVo<List<BaRole>> rsVo = new QueryResultVo<>(queryVo.pageSize, queryVo.pageCurr) ;
        //计算分页等信息
        rsVo.calculateAndSet(itemTotal, params);
 
        //查询符合条件的记录
        rsVo.obj = this.dao.selectSome(params) ;
        return rsVo ;
    }
 
}