lxw
2022-12-21 108da8c66924e7fc4015a0598f79b606f7436ad5
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
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.UserInfMapper;
import com.whyc.pojo.PermitGroup;
import com.whyc.pojo.PermitGroupUser;
import com.whyc.pojo.UserInf;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
 
@Service
@Transactional
public class PermitGroupService {
 
    @Resource
    private PermitGroupMapper mapper;
 
    @Resource
    private PermitGroupUserMapper permitGroupUserMapper;
 
    @Resource
    private CommonMapper commonMapper;
 
    @Resource
    private UserInfMapper userInfMapper;
 
    @Transactional
    public Response<Boolean> add(List<PermitGroup> permitGroupList) {
        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");
        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("db_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,"添加成功");
    }
 
 
    @Transactional
    public Response<Boolean> update(List<PermitGroup> permitGroupList) {
        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");
        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();
        wrapper.eq("permit_group_id",permitGroupList.get(0).getPermitGroupId());
        mapper.delete(wrapper);
 
        mapper.insertBatchSomeColumn(permitGroupList);
        return response.set(1,true,"更新成功");
    }
 
 
    public void delete(Integer permitGroupId) {
        //删除权限组表记录
        UpdateWrapper<PermitGroup> groupWrapper = Wrappers.update();
        groupWrapper.eq("permit_group_id",permitGroupId);
        mapper.delete(groupWrapper);
        //删除权限组对应的用户记录
        UpdateWrapper<PermitGroupUser> groupUserWrapper = Wrappers.update();
        groupUserWrapper.eq("permit_group_id",permitGroupId);
        permitGroupUserMapper.delete(groupUserWrapper);
 
    }
 
    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<UserInf> relatedUserInfList = permitGroupUserMapper.getUserInf(permitGroupId);
        //查询权限组未添加的用户
        List<UserInf> allUserInfList = userInfMapper.selectList(null);
        List<UserInf> notRelatedUserInfList = allUserInfList.stream().filter(userInf -> !relatedUserInfList.contains(userInf)).collect(Collectors.toList());
        //查询权限组的明细权限
        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;
    }
}