cuilei
7 天以前 b0ec9895cde2519bc085ac40acbeea89ae8b6f9d
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
package org.jeecg.modules.system.service.impl;
 
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
import javax.annotation.Resource;
 
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.system.entity.SysPermission;
import org.jeecg.modules.system.entity.SysPermissionDataRule;
import org.jeecg.modules.system.mapper.SysPermissionDataRuleMapper;
import org.jeecg.modules.system.mapper.SysPermissionMapper;
import org.jeecg.modules.system.service.ISysPermissionDataRuleService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
/**
 * <p>
 * 菜单权限规则  服务实现类
 * </p>
 *
 * @Author huangzhilin
 * @since 2019-04-01
 */
@Service
public class SysPermissionDataRuleImpl extends ServiceImpl<SysPermissionDataRuleMapper, SysPermissionDataRule>
        implements ISysPermissionDataRuleService {
 
    @Resource
    private SysPermissionMapper sysPermissionMapper;
 
    /**
     * 根据菜单id查询其对应的权限数据
     */
    @Override
    public List<SysPermissionDataRule> getPermRuleListByPermId(String permissionId) {
        LambdaQueryWrapper<SysPermissionDataRule> query = new LambdaQueryWrapper<SysPermissionDataRule>();
        query.eq(SysPermissionDataRule::getPermissionId, permissionId);
        query.orderByDesc(SysPermissionDataRule::getCreateTime);
        List<SysPermissionDataRule> permRuleList = this.list(query);
        return permRuleList;
    }
 
    /**
     * 根据前端传递的权限名称和权限值参数来查询权限数据
     */
    @Override
    public List<SysPermissionDataRule> queryPermissionRule(SysPermissionDataRule permRule) {
        QueryWrapper<SysPermissionDataRule> queryWrapper = QueryGenerator.initQueryWrapper(permRule, null);
        return this.list(queryWrapper);
    }
 
    @Override
    public List<SysPermissionDataRule> queryPermissionDataRules(String username,String permissionId) {
        List<String> idsList = this.baseMapper.queryDataRuleIds(username, permissionId);
        //update-begin--Author:scott  Date:20191119  for:数据权限失效问题处理--------------------
        if(idsList==null || idsList.size()==0) {
            return null;
        }
        //update-end--Author:scott  Date:20191119  for:数据权限失效问题处理--------------------
        Set<String> set = new HashSet<String>();
        for (String ids : idsList) {
            if(oConvertUtils.isEmpty(ids)) {
                continue;
            }
            String[] arr = ids.split(",");
            for (String id : arr) {
                if(oConvertUtils.isNotEmpty(id) && !set.contains(id)) {
                    set.add(id);
                }
            }
        }
        if(set.size()==0) {
            return null;
        }
        return this.baseMapper.selectList(new QueryWrapper<SysPermissionDataRule>().in("id", set).eq("status",CommonConstant.STATUS_1));
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule) {
        this.save(sysPermissionDataRule);
        SysPermission permission = sysPermissionMapper.selectById(sysPermissionDataRule.getPermissionId());
        boolean flag = permission != null && (permission.getRuleFlag() == null || permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_0));
        if(flag) {
            permission.setRuleFlag(CommonConstant.RULE_FLAG_1);
            sysPermissionMapper.updateById(permission);
        }
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deletePermissionDataRule(String dataRuleId) {
        SysPermissionDataRule dataRule = this.baseMapper.selectById(dataRuleId);
        if(dataRule!=null) {
            this.removeById(dataRuleId);
            Long count =  this.baseMapper.selectCount(new LambdaQueryWrapper<SysPermissionDataRule>().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId()));
            //注:同一个事务中删除后再查询是会认为数据已被删除的 若事务回滚上述删除无效
            if(count==null || count==0) {
                SysPermission permission = sysPermissionMapper.selectById(dataRule.getPermissionId());
                if(permission!=null && permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_1)) {
                    permission.setRuleFlag(CommonConstant.RULE_FLAG_0);
                    sysPermissionMapper.updateById(permission);
                }
            }
        }
        
    }
 
}