PermissionServiceImpl.java 5 KB
package com.uccc.admin.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.uccc.admin.domain.Permission;
import com.uccc.admin.mapper.PermissonMapper;
import com.uccc.admin.service.PermissionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * Created by bert on 2021-09-13 14:53
 */
@Service
public class PermissionServiceImpl implements PermissionService {

    final private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private PermissonMapper permissonMapper;


    @Override
    public List<Permission> getPermissionByUserId(Long id) {
        return permissonMapper.selectUserPermission(id);
    }


    /**
     *
     * 'role': {
     *                         'name': '管理员',
     *                         'describe': '拥有所有权限',
     *                         'permissions': [ ] // 菜单数组
     *                         'companu':company
     *                     },
     * @param permissions
     * @return
     */
    @Override
    public JSONArray formatPermissionList(List<Permission> permissions) {
        JSONArray arr = new JSONArray();


        permissions.forEach( d1-> {
            if (d1.getParentId() == 0) { //一级
                JSONObject json1 = new JSONObject();
                json1.put("title", d1.getName());
                json1.put("key", d1.getId());
                JSONArray jsonArray = new JSONArray();
                json1.put("children", jsonArray);
                permissions.forEach( d2-> { //二级
                    if (d2.getParentId() == d1.getId()) {
                        JSONObject json2 = new JSONObject();
                        json2.put("title", d2.getName());
                        json2.put("key", d2.getId());
                        JSONArray jsonArray2 = new JSONArray();
                        json2.put("children", jsonArray2);
                        permissions.forEach(d3 ->{
                            if (d3.getParentId() == d2.getId()) {
                                JSONObject json3 = new JSONObject();
                                json3.put("title", d3.getName());
                                json3.put("key", d3.getId());
                                jsonArray2.add(json3);
                            }
                        });
                        jsonArray.add(json2);
                    }
                });
                arr.add(json1);
            }
        });

        return arr;
    }

    @Override
    public List<Permission> selectAllUserPermission(int type) {
        return permissonMapper.selectAllUserPermission(type);
    }

    @Override
    public JSONArray formatPermissions(List<Permission> permissions) {
        JSONArray jsonArray = new JSONArray();
        permissions.forEach(d->{
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("roleId", d.getRoleName());
            jsonObject.put("permissionId", d.getSubClass());
            jsonObject.put("permissionName", d.getName());
            jsonArray.add(jsonObject);
        });
        return jsonArray;
    }

    @Override
    public boolean createRolePermission(int[] permissions, Long userId) {
        AtomicBoolean result = new AtomicBoolean(true);
        Arrays.stream(permissions).forEach(permissionId->{
            int permissionCount = permissonMapper.createRolePermission(permissionId, userId);
            if (!(permissionCount > 0)) {
                result.set(false);
            }
        });

        return result.get();
    }

    @Override
    public boolean updateRolePermission(Long roleId, int[] permissions) {
        AtomicBoolean result = new AtomicBoolean(true);
        permissonMapper.deleteRolePermissionByUserId(roleId);
        Arrays.stream(permissions).forEach(permissionId->{
            int permissionCount = permissonMapper.createRolePermission(permissionId, roleId);
            if (!(permissionCount > 0)) {
                result.set(false);
            }
        });
        return result.get();
    }

    @Override
    public int[] formatRoleIds(List<Permission> permissionList) {
        int[] roleIds = new int[permissionList.size()];
        for (int i = 0; i<permissionList.size(); i++) {
            int roleId = permissionList.get(i).getRoleId().intValue();
            roleIds[i] = roleId;
        }
        HashSet<Integer> hashSet = new HashSet<Integer>(); // 去重
        for (int i = 0; i < roleIds.length; i++){
            hashSet.add(roleIds[i]);
        }

        Set<Integer> set = new TreeSet(hashSet);            // 利用TreeSet排序
        Integer[] integers = set.toArray(new Integer[]{});

        int[] result = new int[integers.length];            // 我们排序、去重后的结果数组
        for (int i = 0; i < integers.length; i++){
            result[i] = integers[i];
        }
        return result;
    }
}