郑永安
2023-06-19 7a6abd05683528032687c75e80e0bd2030a3e46c
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
package com.gkhy.safePlatform.account.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gkhy.safePlatform.account.model.dto.req.PermissionAddReqDTO;
import com.gkhy.safePlatform.account.model.dto.req.PermissionModReqDTO;
import com.gkhy.safePlatform.account.model.dto.resp.PermissionRespDTO;
import com.gkhy.safePlatform.account.entity.user.PermissionInfo;
import com.gkhy.safePlatform.account.entity.user.PermissionInfoDO;
import com.gkhy.safePlatform.account.enums.PermissionStatusEnum;
import com.gkhy.safePlatform.account.service.PermissionService;
import com.gkhy.safePlatform.account.service.baseService.PermissionInfoService;
import com.gkhy.safePlatform.account.service.baseService.RolePermissionInfoService;
import com.gkhy.safePlatform.commons.co.ContextCacheUser;
import com.gkhy.safePlatform.commons.enums.E;
import com.gkhy.safePlatform.commons.enums.ResultCodes;
import com.gkhy.safePlatform.commons.exception.AusinessException;
import com.gkhy.safePlatform.commons.exception.BusinessException;
import com.gkhy.safePlatform.commons.utils.BeanCopyUtils;
import com.gkhy.safePlatform.commons.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
@Service("permissionService")
public class PermissionServiceImpl implements PermissionService {
 
    @Autowired
    private PermissionInfoService permissionInfoService;
    @Autowired
    private RolePermissionInfoService rolePermissionInfoService;
 
    @Override
    public List<PermissionRespDTO> getEnablePermissions() {
        List<PermissionInfoDO> permissions = permissionInfoService.getPermissionsByStatus(PermissionStatusEnum.ENABLED);
        List<PermissionRespDTO> result = new ArrayList<>();
        PermissionRespDTO permissionRespDTO;
        for (PermissionInfoDO permissionInfoDO:permissions ) {
            permissionRespDTO = new PermissionRespDTO();
            permissionRespDTO.setPermissionId(permissionInfoDO.getId());
            permissionRespDTO.setPermissionCode(permissionInfoDO.getCode());
            permissionRespDTO.setPermissionName(permissionInfoDO.getName());
            result.add(permissionRespDTO);
        }
        return result;
    }
 
 
    /**
    * @Description: 新增权限
    */
    @Override
    public void addPermission(ContextCacheUser currentUser, PermissionAddReqDTO permissionAddReqDTO) {
        ;
        if (StringUtils.isBlank(permissionAddReqDTO.getCode())) {
            throw new AusinessException(E.DATA_PARAM_NULL,"权限编码不能为空");
        }
        if (StringUtils.isBlank(permissionAddReqDTO.getName())) {
            throw new AusinessException(E.DATA_PARAM_NULL, "权限名不能为空");
        }
        String code = permissionAddReqDTO.getCode().trim();
        String name = permissionAddReqDTO.getName().trim();
 
        PermissionInfo permission;
        // 编码重复校验
        permission = permissionInfoService.getPermissionInfoByCode(code);
        if (permission != null) {
            throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "权限编码已存在");
        }
        // 名称校验
        permission = permissionInfoService.getPermissionInfoByName(name);
        if (permission != null) {
            throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "权限名称已存在");
        }
 
        PermissionInfo permissionInfo = new PermissionInfo();
        permissionInfo.setCode(code);
        permissionInfo.setName(name);
        permissionInfo.setInfo(permissionAddReqDTO.getInfo());
        permissionInfo.setStatus(PermissionStatusEnum.ENABLED.getCode());
        permissionInfo.setGmtCreate(new Date());
        permissionInfoService.savePermissionInfo(permissionInfo);
 
    }
 
    /**
    * @Description: 修改权限
    */
    @Override
    public void modPermission(ContextCacheUser currentUser, PermissionModReqDTO permissionModReqDTO) {
        ;
        if (permissionModReqDTO.getId() == null) {
            throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL);
        }
 
        if (StringUtils.isBlank(permissionModReqDTO.getCode())) {
            throw new AusinessException(E.DATA_PARAM_NULL,"权限编码不能为空");
        }
        if (StringUtils.isBlank(permissionModReqDTO.getName())) {
            throw new AusinessException(E.DATA_PARAM_NULL, "权限名不能为空");
        }
        PermissionInfo permissionInfo = permissionInfoService.getById(permissionModReqDTO.getId());
        assert permissionInfo.getStatus() != null;
        PermissionStatusEnum status = PermissionStatusEnum.parse(permissionInfo.getStatus());
        if (status != PermissionStatusEnum.ENABLED) {
            throw new BusinessException(ResultCodes.CLIENT_PERMISSION_NOT_EXIST);
        }
 
        String code = permissionModReqDTO.getCode().trim();
        String name = permissionModReqDTO.getName().trim();
 
        PermissionInfo permissionDO;
        // 编码重复校验
        permissionDO = permissionInfoService.getPermissionInfoByCode(code);
        if (permissionDO != null && !permissionDO.getId().equals(permissionInfo.getId()) ) {
            throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "权限编码已存在");
        }
        // 名称校验
        permissionDO = permissionInfoService.getPermissionInfoByName(name);
        if (permissionDO != null && !permissionDO.getId().equals(permissionInfo.getId())) {
            throw new AusinessException(E.DATA_DATABASE_DUPLICATED, "权限名称已存在");
        }
 
 
        PermissionInfo permission = new PermissionInfo();
        permission.setId(permissionInfo.getId());
        permission.setName(name);
        permission.setCode(code);
        permission.setInfo(permissionModReqDTO.getInfo());
        permission.setGmtModified(new Date());
        permissionInfoService.updatePermissionInfo(permission);
 
    }
 
    @Override
    @Transactional
    public void delPermission(ContextCacheUser currentUser, Long id) {
        if (id == null) {
            throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL);
        }
        PermissionInfo permission = permissionInfoService.getById(id);
        if (permission == null) {
            throw new BusinessException(ResultCodes.CLIENT_PERMISSION_NOT_EXIST);
        }
        assert permission.getStatus() != null;
        PermissionStatusEnum status = PermissionStatusEnum.parse(permission.getStatus());
        if (status != PermissionStatusEnum.ENABLED) {
            throw new BusinessException(ResultCodes.CLIENT_PERMISSION_NOT_EXIST);
        }
        // 1.更新权限状态
        PermissionInfo permissionInfo = new PermissionInfo();
        permissionInfo.setId(permission.getId());
        permissionInfo.setStatus(PermissionStatusEnum.ABANDONED.getCode());
        permissionInfo.setGmtModified(new Date());
        permissionInfoService.updatePermissionInfo(permissionInfo);
 
        // 2.删除rolePermission 关系
        rolePermissionInfoService.unbindByPermissionId(permissionInfo.getId());
    }
 
 
}