Files
number/后端架构设计/10-管理后台-part3-Controller.md
2026-03-17 12:09:43 +08:00

158 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 管理后台开发文档 - Part 3AdminController
## AdminController.java
```java
package com.openclaw.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.openclaw.common.Result;
import com.openclaw.dto.admin.*;
import com.openclaw.entity.PointsRule;
import com.openclaw.service.admin.AdminService;
import com.openclaw.util.UserContext;
import com.openclaw.vo.admin.*;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/admin")
@RequiredArgsConstructor
public class AdminController {
private final AdminService adminService;
// ==================== 数据看板 ====================
@GetMapping("/dashboard")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR')")
public Result<DashboardVO> dashboard() {
return Result.ok(adminService.getDashboard());
}
// ==================== 用户管理 ====================
@GetMapping("/users")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR')")
public Result<IPage<AdminUserVO>> listUsers(AdminUserQueryDTO query) {
return Result.ok(adminService.listUsers(query));
}
@GetMapping("/users/{userId}")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR')")
public Result<AdminUserVO> getUser(@PathVariable Long userId) {
return Result.ok(adminService.getUserDetail(userId));
}
@PostMapping("/users/{userId}/ban")
@PreAuthorize("hasRole('ADMIN')")
public Result<Void> banUser(
@PathVariable Long userId,
@RequestParam(required = false) String reason) {
adminService.banUser(userId, reason);
return Result.ok();
}
@PostMapping("/users/{userId}/unban")
@PreAuthorize("hasRole('ADMIN')")
public Result<Void> unbanUser(@PathVariable Long userId) {
adminService.unbanUser(userId);
return Result.ok();
}
@PostMapping("/users/{userId}/points")
@PreAuthorize("hasRole('ADMIN')")
public Result<Void> adjustPoints(
@PathVariable Long userId,
@Valid @RequestBody AdjustPointsDTO dto) {
adminService.adjustPoints(userId, dto.getDelta(), dto.getRemark());
return Result.ok();
}
// ==================== Skill 审核 ====================
@GetMapping("/skills")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR','AUDITOR')")
public Result<IPage<AdminSkillVO>> listSkills(AdminSkillQueryDTO query) {
return Result.ok(adminService.listSkills(query));
}
@PostMapping("/skills/audit")
@PreAuthorize("hasAnyRole('ADMIN','AUDITOR')")
public Result<Void> auditSkill(@Valid @RequestBody SkillAuditDTO dto) {
adminService.auditSkill(dto, UserContext.getUserId());
return Result.ok();
}
@PostMapping("/skills/{skillId}/offline")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR')")
public Result<Void> offlineSkill(
@PathVariable Long skillId,
@RequestParam(required = false) String reason) {
adminService.offlineSkill(skillId, reason);
return Result.ok();
}
// ==================== 订单管理 ====================
@GetMapping("/orders")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR','FINANCE')")
public Result<IPage<AdminOrderVO>> listOrders(AdminOrderQueryDTO query) {
return Result.ok(adminService.listOrders(query));
}
@PostMapping("/refunds/{refundId}/process")
@PreAuthorize("hasAnyRole('ADMIN','FINANCE')")
public Result<Void> processRefund(
@PathVariable Long refundId,
@Valid @RequestBody RefundProcessDTO dto) {
adminService.processRefund(
refundId, dto.getAction(), dto.getRemark(), UserContext.getUserId());
return Result.ok();
}
// ==================== 积分规则 ====================
@GetMapping("/points-rules")
@PreAuthorize("hasAnyRole('ADMIN','OPERATOR')")
public Result<List<PointsRule>> listRules() {
return Result.ok(adminService.listPointsRules());
}
@PutMapping("/points-rules/{ruleId}")
@PreAuthorize("hasRole('ADMIN')")
public Result<Void> updateRule(
@PathVariable Long ruleId,
@RequestParam int points) {
adminService.updatePointsRule(ruleId, points);
return Result.ok();
}
}
```
---
## API 汇总
| 方法 | 路径 | 说明 | 权限 |
|------|------|------|------|
| GET | /api/admin/dashboard | 数据看板 | ADMIN/OPERATOR |
| GET | /api/admin/users | 用户列表 | ADMIN/OPERATOR |
| GET | /api/admin/users/{id} | 用户详情 | ADMIN/OPERATOR |
| POST | /api/admin/users/{id}/ban | 封禁用户 | ADMIN |
| POST | /api/admin/users/{id}/unban | 解封用户 | ADMIN |
| POST | /api/admin/users/{id}/points | 调整积分 | ADMIN |
| GET | /api/admin/skills | Skill列表 | ADMIN/OPERATOR/AUDITOR |
| POST | /api/admin/skills/audit | Skill审核 | ADMIN/AUDITOR |
| POST | /api/admin/skills/{id}/offline | Skill下架 | ADMIN/OPERATOR |
| GET | /api/admin/orders | 订单列表 | ADMIN/OPERATOR/FINANCE |
| POST | /api/admin/refunds/{id}/process | 处理退款 | ADMIN/FINANCE |
| GET | /api/admin/points-rules | 积分规则列表 | ADMIN/OPERATOR |
| PUT | /api/admin/points-rules/{id} | 更新积分规则 | ADMIN |
---
**文档版本**v1.0 | **创建日期**2026-03-16