AdminSubstationRoleController.java 3.53 KB
package com.diligrp.rider.controller;

import com.diligrp.rider.common.exception.BizException;
import com.diligrp.rider.common.result.Result;
import com.diligrp.rider.dto.AdminRoleMenuAssignDTO;
import com.diligrp.rider.dto.AdminRoleSaveDTO;
import com.diligrp.rider.service.SystemRoleService;
import com.diligrp.rider.service.impl.SystemRoleMenuServiceImpl;
import com.diligrp.rider.vo.AdminRoleMenuTreeVO;
import com.diligrp.rider.vo.AdminRoleVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 分站管理员侧角色管理接口(/api/admin/system/role/**)
 * 每个分站只能看到/操作自己 cityId 下的角色,菜单只能分配 SUBSTATION/BOTH scope
 */
@RestController
@RequestMapping("/api/admin/system/role")
@RequiredArgsConstructor
public class AdminSubstationRoleController {

    private final SystemRoleService systemRoleService;
    private final SystemRoleMenuServiceImpl systemRoleMenuService;

    @GetMapping("/list")
    public Result<List<AdminRoleVO>> list(HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        return Result.success(systemRoleService.listByCityId(cityId));
    }

    @PostMapping("/add")
    public Result<Void> add(@Valid @RequestBody AdminRoleSaveDTO dto, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        systemRoleService.addForCity(dto, cityId);
        return Result.success();
    }

    @PutMapping("/edit")
    public Result<Void> edit(@Valid @RequestBody AdminRoleSaveDTO dto, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        systemRoleService.editForCity(dto, cityId);
        return Result.success();
    }

    @PostMapping("/ban")
    public Result<Void> ban(@RequestParam Long id, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        systemRoleService.banForCity(id, cityId);
        return Result.success();
    }

    @PostMapping("/cancelBan")
    public Result<Void> cancelBan(@RequestParam Long id, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        systemRoleService.cancelBanForCity(id, cityId);
        return Result.success();
    }

    @DeleteMapping("/del")
    public Result<Void> del(@RequestParam Long id, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        systemRoleService.delForCity(id, cityId);
        return Result.success();
    }

    @GetMapping("/{roleId}/menu-tree")
    public Result<List<AdminRoleMenuTreeVO>> menuTree(@PathVariable Long roleId,
                                                       HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        return Result.success(systemRoleMenuService.getRoleMenuTreeForCity(roleId, cityId));
    }

    @PostMapping("/{roleId}/menus")
    public Result<Void> assignMenus(@PathVariable Long roleId,
                                     @Valid @RequestBody AdminRoleMenuAssignDTO dto,
                                     HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        systemRoleMenuService.assignMenusForCity(roleId, dto, cityId);
        return Result.success();
    }

    private Long resolveCityId(HttpServletRequest request) {
        Long cityId = (Long) request.getAttribute("cityId");
        if (cityId == null || cityId < 1) {
            throw new BizException("当前账号未绑定有效城市");
        }
        return cityId;
    }
}