whyclxw
2025-05-12 6b9c5406762080693b0da6b576cd8390f86e9895
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package com.whyc.service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.dto.Response;
import com.whyc.mapper.CommonMapper;
import com.whyc.mapper.PermitGroupMapper;
import com.whyc.mapper.PermitGroupUserMapper;
import com.whyc.mapper.UserMapper;
import com.whyc.pojo.db_user.Permitgroup;
import com.whyc.pojo.db_user.PermitgroupUsr;
import com.whyc.pojo.db_user.User;
import com.whyc.util.ActionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Service
@Transactional
public class PermitGroupService {
 
    @Resource
    private PermitGroupMapper mapper;
 
    @Resource
    private PermitGroupUserMapper permitGroupUserMapper;
 
    @Resource
    private CommonMapper commonMapper;
 
    @Resource
    private UserMapper userInfMapper;
 
    @Autowired
    private UserService userService;
 
    @Transactional
    public Response<Boolean> add(List<Permitgroup> permitGroupList) {
        //首先校验当前用户所在的权限组,是否存在权限编辑权限 permit_edit_permit
       // if (!checkUserPermit()) return new Response<Boolean>().set(1, false, "当前用户没有权限编辑权限组");
        Response<Boolean> response = new Response();
        //权限互斥,查询已存在的权限组,不允许存在权限完全一样的权限组
       /* QueryWrapper<PermitGroup> wrapper = Wrappers.query();
        //wrapper.select("permit_group_id","permit_item_name","permit_item_value");
        wrapper.select("permit_group_id","permit_item_value").ge("permit_group_id",100);
        List<PermitGroup> existGroupList = mapper.selectList(wrapper);
        Map<Integer, List<PermitGroup>> existGroupListMap = existGroupList.stream().collect(Collectors.groupingBy(PermitGroup::getPermitGroupId));
        Set<Integer> keySet = existGroupListMap.keySet();
        Iterator<Integer> iterator = keySet.iterator();
        while (iterator.hasNext()){
            boolean diff = false;
            List<PermitGroup> existGroupListII = existGroupListMap.get(iterator.next());
            for (int i = 0; i < existGroupListII.size(); i++) {
                if(!permitGroupList.get(i).getPermitItemValue().equals(existGroupListII.get(i).getPermitItemValue())){
                    //存在差异,进入下个组校验
                    diff = true;
                    break;
                }
            }
            //如果每项都不存在差异
            if(!diff){
                return response.set(1,false,"有存在权限完全相同的权限组,无法添加");
            }
        }*/
        //权限组id生成
        int maxValue = (int) commonMapper.getMaxValue("plus_user", "tb_user_permitgroup", "permit_group_id");
        int newPermitGroupId = maxValue+1;
        permitGroupList.stream().forEach(permitGroup -> permitGroup.setPermitGroupId(newPermitGroupId));
        mapper.insertBatchSomeColumn(permitGroupList);
        return response.set(1,true,"添加成功");
    }
    //验证权限
    private boolean checkUserPermit() {
        Integer uId = ActionUtil.getUser().getId();
        List<String> itemList = permitGroupUserMapper.getItemList(uId);
        if (!itemList.contains("permit_edit_permit")){
            return false;
        }
        return true;
    }
 
    //验证指定权限
    public boolean checkUserPermitWithName(String permitName) {
        Integer uid = ActionUtil.getUser().getId();
        List<String> itemList = permitGroupUserMapper.getItemList(uid);
        if (!itemList.contains(permitName)){
            return false;
        }
        return true;
    }
 
 
 
    @Transactional
    public Response<Boolean> update(List<Permitgroup> permitGroupList) {
        //首先校验当前用户所在的权限组,是否存在权限编辑权限 permit_edit_permit
        //if (!checkUserPermit()) return new Response<Boolean>().set(1, false, "当前用户没有权限编辑权限组");
        Response<Boolean> response = new Response<>();
        //权限互斥,查询已存在的权限组,不允许存在权限完全一样的权限组(应该剔除掉数据库中的自己权限组的校验,可以不更新)
        /*QueryWrapper<PermitGroup> wrapper = Wrappers.query();
        //wrapper.select("permit_group_id","permit_item_name","permit_item_value");
        wrapper.select("permit_group_id","permit_item_value").ge("permit_group_id",100).ne("permit_group_id",permitGroupList.get(0).getPermitGroupId());
        List<PermitGroup> existGroupList = mapper.selectList(wrapper);
        Map<Integer, List<PermitGroup>> existGroupListMap = existGroupList.stream().collect(Collectors.groupingBy(PermitGroup::getPermitGroupId));
        Set<Integer> keySet = existGroupListMap.keySet();
        Iterator<Integer> iterator = keySet.iterator();
        while (iterator.hasNext()){
            boolean diff = false;
            List<PermitGroup> existGroupListII = existGroupListMap.get(iterator.next());
            for (int i = 0; i < existGroupListII.size(); i++) {
                if(!permitGroupList.get(i).getPermitItemValue().equals(existGroupListII.get(i).getPermitItemValue())){
                    //存在差异,进入下个组校验
                    diff = true;
                    break;
                }
            }
            //如果每项都不存在差异
            if(!diff){
                return response.set(1,false,"有存在权限完全相同的权限组,无法更新");
            }
        }*/
        //先删除,后增加
        UpdateWrapper<Permitgroup> updateWrapper = Wrappers.update();
        updateWrapper.eq("permit_group_id",permitGroupList.get(0).getPermitGroupId());
        mapper.delete(updateWrapper);
 
        mapper.insertBatchSomeColumn(permitGroupList);
        return response.set(1,true,"更新成功");
    }
 
    @Transactional
    public boolean delete(Integer permitGroupId) {
        if(permitGroupId==100001){
            return false;
        }
        //删除权限组表记录
        UpdateWrapper<Permitgroup> groupWrapper = Wrappers.update();
        groupWrapper.eq("permit_group_id",permitGroupId);
        mapper.delete(groupWrapper);
        //删除权限组对应的用户记录
        UpdateWrapper<PermitgroupUsr> groupUserWrapper = Wrappers.update();
        groupUserWrapper.eq("permit_group_id",permitGroupId);
        permitGroupUserMapper.delete(groupUserWrapper);
        return true;
 
    }
 
    public List<Permitgroup> getList() {
        QueryWrapper<Permitgroup> wrapper = Wrappers.query();
        wrapper.select("distinct permit_group_id,permit_group_name");
        return mapper.selectList(wrapper);
    }
 
    public Map getPermitGroupInfo(Integer permitGroupId) {
        Map<String,List> resultMap = new HashMap<>();
        //查询权限组已添加的用户
        List<User> relatedUserInfList = permitGroupUserMapper.getUserInf(permitGroupId);
        //查询权限组未添加的用户
        //List<UserInf> allUserInfList = userInfMapper.selectList(null);
        //List<UserInf> notRelatedUserInfList = allUserInfList.stream().filter(userInf -> !relatedUserInfList.contains(userInf)).collect(Collectors.toList());
        //查询未被添加到所有权限组的用户
        List<User> notRelatedUserInfList = userService.searchCS_All2();
        //查询权限组的明细权限
        QueryWrapper<Permitgroup> wrapper = Wrappers.query();
        wrapper.eq("permit_group_id",permitGroupId);
        List<Permitgroup> permitGroupList = mapper.selectList(wrapper);
 
        resultMap.put("usersAdded",relatedUserInfList);
        resultMap.put("usersNotAdded",notRelatedUserInfList);
        resultMap.put("permits",permitGroupList);
        return resultMap;
    }
 
    public List<Permitgroup> getPermitList() {
        QueryWrapper<Permitgroup> wrapper = Wrappers.query();
        wrapper.select("distinct permit_item_name");
 
        List<Permitgroup> permitGroups = mapper.selectList(wrapper);
        return permitGroups;
    }
}