package com.zy.asrs.wms.system.controller;  
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;  
 | 
import com.zy.asrs.framework.common.Cools;  
 | 
import com.zy.asrs.framework.common.R;  
 | 
import com.zy.asrs.framework.exception.CoolException;  
 | 
import com.zy.asrs.wms.common.annotation.CacheData;  
 | 
import com.zy.asrs.wms.common.annotation.OperationLog;  
 | 
import com.zy.asrs.wms.common.domain.BaseParam;  
 | 
import com.zy.asrs.wms.common.domain.KeyValVo;  
 | 
import com.zy.asrs.wms.common.domain.PageParam;  
 | 
import com.zy.asrs.wms.system.controller.param.RoleScopeParam;  
 | 
import com.zy.asrs.wms.system.entity.Role;  
 | 
import com.zy.asrs.wms.system.entity.RoleMenu;  
 | 
import com.zy.asrs.wms.system.service.RoleMenuService;  
 | 
import com.zy.asrs.wms.system.service.RoleService;  
 | 
import com.zy.asrs.wms.utils.ExcelUtil;  
 | 
import org.springframework.beans.factory.annotation.Autowired;  
 | 
import org.springframework.security.access.prepost.PreAuthorize;  
 | 
import org.springframework.transaction.annotation.Transactional;  
 | 
import org.springframework.web.bind.annotation.*;  
 | 
  
 | 
import javax.servlet.http.HttpServletResponse;  
 | 
import java.util.ArrayList;  
 | 
import java.util.Date;  
 | 
import java.util.List;  
 | 
import java.util.Map;  
 | 
  
 | 
/**  
 | 
 * Created by vincent on 2/13/2024  
 | 
 */  
 | 
@RestController  
 | 
@RequestMapping("/api")  
 | 
public class RoleController extends BaseController {  
 | 
  
 | 
    @Autowired  
 | 
    private RoleService roleService;  
 | 
    @Autowired  
 | 
    private RoleMenuService roleMenuService;  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @PostMapping("/role/page")  
 | 
    @CacheData(tableName = {"sys_role"})  
 | 
    public R page(@RequestBody Map<String, Object> map) {  
 | 
        BaseParam baseParam = buildParam(map, BaseParam.class);  
 | 
        PageParam<Role, BaseParam> pageParam = new PageParam<>(baseParam, Role.class);  
 | 
        return R.ok().add(roleService.page(pageParam, pageParam.buildWrapper(true, (wrapper) -> wrapper.orderByAsc("create_time"))));  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @PostMapping("/role/list")  
 | 
    @CacheData(tableName = {"sys_role"})  
 | 
    public R list(@RequestBody Map<String, Object> map) {  
 | 
        return R.ok().add(roleService.list());  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @GetMapping("/role/{id}")  
 | 
    @CacheData(tableName = {"sys_role"})  
 | 
    public R get(@PathVariable("id") Long id) {  
 | 
        return R.ok().add(roleService.getById(id));  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:save')")  
 | 
    @OperationLog("添加角色")  
 | 
    @PostMapping("/role/save")  
 | 
    public R save(@RequestBody Role role) {  
 | 
        if (!Cools.isEmpty(role.getName())  
 | 
                && roleService.count(new LambdaQueryWrapper<Role>().eq(Role::getName, role.getName())) > 0) {  
 | 
            return R.error("角色名称已存在");  
 | 
        }  
 | 
        if (!Cools.isEmpty(role.getCode())  
 | 
                && roleService.count(new LambdaQueryWrapper<Role>().eq(Role::getCode, role.getCode())) > 0) {  
 | 
            return R.error("角色标识已存在");  
 | 
        }  
 | 
        role.setCreateTime(new Date());  
 | 
        role.setUpdateTime(new Date());  
 | 
        if (!roleService.save(role)) {  
 | 
            return R.error("添加失败");  
 | 
        }  
 | 
        return R.ok("添加成功");  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:update')")  
 | 
    @OperationLog("修改角色")  
 | 
    @PostMapping("/role/update")  
 | 
    public R update(@RequestBody Role role) {  
 | 
        if (!Cools.isEmpty(role.getCode()) && roleService.count(new LambdaQueryWrapper<Role>()  
 | 
                .eq(Role::getCode, role.getCode())  
 | 
                .ne(Role::getId, role.getId())) > 0) {  
 | 
            return R.error("角色标识已存在");  
 | 
        }  
 | 
        if (!Cools.isEmpty(role.getName()) && roleService.count(new LambdaQueryWrapper<Role>()  
 | 
                .eq(Role::getName, role.getName())  
 | 
                .ne(Role::getId, role.getId())) > 0) {  
 | 
            return R.error("角色名称已存在");  
 | 
        }  
 | 
        role.setUpdateTime(new Date());  
 | 
        if (!roleService.updateById(role)) {  
 | 
            return R.error("修改失败");  
 | 
        }  
 | 
        return R.ok("修改成功");  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:remove')")  
 | 
    @OperationLog("删除角色")  
 | 
    @PostMapping("/role/remove/{ids}")  
 | 
    @Transactional  
 | 
    public R remove(@PathVariable Long[] ids) {  
 | 
        for (Long roleId : ids) {  
 | 
            if (roleId == 1) {  
 | 
                throw new CoolException("超级管理员禁止删除");  
 | 
            }  
 | 
  
 | 
            if (!roleService.removeById(roleId)) {  
 | 
                throw new CoolException("服务器内部错误");  
 | 
            }  
 | 
            if (!roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId))) {  
 | 
                throw new CoolException("服务器内部错误");  
 | 
            }  
 | 
        }  
 | 
        return R.ok("删除成功");  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @PostMapping("/role/query")  
 | 
    public R query(@RequestParam(required = false) String condition) {  
 | 
        List<KeyValVo> vos = new ArrayList<>();  
 | 
        LambdaQueryWrapper<Role> wrapper = new LambdaQueryWrapper<>();  
 | 
        if (!Cools.isEmpty(condition)) {  
 | 
            wrapper.like(Role::getName, condition);  
 | 
        }  
 | 
        roleService.page(new Page<>(1, 30), wrapper).getRecords().forEach(  
 | 
                item -> vos.add(new KeyValVo(item.getId(), item.getName()))  
 | 
        );  
 | 
        return R.ok().add(vos);  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @PostMapping("/role/export")  
 | 
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {  
 | 
        ExcelUtil.build(ExcelUtil.create(roleService.list(), Role.class), response);  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @GetMapping("/role/scope/list")  
 | 
    public R scopeList(@RequestParam Long roleId) {  
 | 
//        List<RoleMenu> list = roleMenuService.list(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId));  
 | 
//        if (!Cools.isEmpty(list)) {  
 | 
//            return R.ok().add(list.stream().map(RoleMenu::getMenuId).collect(Collectors.toList()));  
 | 
//        }  
 | 
        return R.ok().add(roleMenuService.listStrictlyMenuByRoleId(roleId));  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:update')")  
 | 
    @OperationLog("分配权限")  
 | 
    @PostMapping("/role/scope/update")  
 | 
    @Transactional  
 | 
    public R scopeUpdate(@RequestBody RoleScopeParam param) {  
 | 
        Long roleId = param.getId();  
 | 
        List<Long> menuIds = new ArrayList<>(param.getMenuIds().getChecked());  
 | 
        menuIds.addAll(param.getMenuIds().getHalfChecked());  
 | 
        roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId));  
 | 
        for (Long menuId : menuIds) {  
 | 
            if (!roleMenuService.save(new RoleMenu(roleId, menuId))) {  
 | 
                throw new CoolException("服务器内部错误");  
 | 
            }  
 | 
        }  
 | 
        return R.ok("分配成功");  
 | 
    }  
 | 
  
 | 
    @PreAuthorize("hasAuthority('system:role:list')")  
 | 
    @GetMapping("/role/list/name/{ids}")  
 | 
    public R listName(@PathVariable Long[] ids) {  
 | 
        List<String> nameList = new ArrayList<>();  
 | 
        for (Long id : ids) {  
 | 
            nameList.add(roleService.getById(id).getName());  
 | 
        }  
 | 
        return R.ok().add(nameList);  
 | 
    }  
 | 
  
 | 
}  
 |