Files
Environment-Monitoring-System/ems-backend/.serena/memories/controller_implementations.md
ChuXun 4ce487588a 1
2025-10-19 20:31:01 +08:00

207 lines
6.3 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.
# EMS后端控制器实现详解
## 控制器架构概览
基于之前的分析现在补充实际的控制器实现细节。项目采用标准的Spring MVC架构所有控制器都位于`com.dne.ems.controller`包下。
## 核心控制器实现
### 1. AuthController - 认证控制器
**位置**: `src/main/java/com/dne/ems/controller/AuthController.java`
**主要功能**:
- 用户注册 (`/api/auth/signup`)
- 用户登录 (`/api/auth/login`)
- 用户登出 (`/api/auth/logout`)
- 发送验证码 (`/api/auth/send-verification-code`)
- 密码重置 (`/api/auth/reset-password-with-code`)
**关键特性**:
```java
@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
@Slf4j
public class AuthController {
private final AuthService authService;
private final VerificationCodeService verificationCodeService;
private final OperationLogService operationLogService;
}
```
**API设计亮点**:
- 使用`@Valid`进行请求参数验证
- 支持JWT令牌认证响应
- 提供新旧两套密码重置API向后兼容
- 完整的JavaDoc文档
### 2. FeedbackController - 反馈管理控制器
**位置**: `src/main/java/com/dne/ems/controller/FeedbackController.java`
**主要功能**:
- 反馈提交支持JSON和multipart格式
- 反馈查询(支持多条件过滤和分页)
- 反馈统计数据获取
- 反馈处理和状态更新
**权限控制**:
```java
@PreAuthorize("isAuthenticated()") // 提交反馈
@PreAuthorize("hasAnyRole('ADMIN', 'SUPERVISOR', 'DECISION_MAKER')") // 查看详情
@PreAuthorize("hasAnyRole('ADMIN', 'SUPERVISOR')") // 处理反馈
```
**高级查询支持**:
- 状态过滤PENDING_REVIEW/PROCESSED/REJECTED
- 污染类型AIR/WATER/SOIL/NOISE
- 严重程度LOW/MEDIUM/HIGH/CRITICAL
- 地理位置:城市/区县
- 时间范围:开始日期至结束日期
- 关键词模糊匹配
**文件上传支持**:
```java
@PostMapping(value = "/submit", consumes = {"multipart/form-data"})
public ResponseEntity<Feedback> submitFeedback(
@Valid @RequestPart("feedback") FeedbackSubmissionRequest request,
@RequestPart(value = "files", required = false) MultipartFile[] files,
@AuthenticationPrincipal CustomUserDetails userDetails)
```
### 3. TaskManagementController - 任务管理控制器
**位置**: `src/main/java/com/dne/ems/controller/TaskManagementController.java`
**主要功能**:
- 任务创建与分配
- 任务状态管理(审核、批准、拒绝、取消)
- 从反馈创建任务
- 任务查询与过滤
**权限设计**:
```java
@PreAuthorize("hasRole('SUPERVISOR')") // 类级别权限
@PreAuthorize("hasAnyAuthority('ADMIN', 'SUPERVISOR', 'DECISION_MAKER')") // 查询权限
@PreAuthorize("hasRole('ADMIN')") // 批准/拒绝权限
```
**任务生命周期管理**:
1. 创建任务 (`POST /api/management/tasks`)
2. 分配任务 (`POST /{taskId}/assign`)
3. 审核任务 (`POST /{taskId}/review`)
4. 批准任务 (`POST /{taskId}/approve`)
5. 拒绝任务 (`POST /{taskId}/reject`)
6. 取消任务 (`POST /{taskId}/cancel`)
**从反馈创建任务**:
```java
@PostMapping("/feedback/{feedbackId}/create-task")
@PreAuthorize("hasRole('SUPERVISOR')")
public ResponseEntity<TaskDetailDTO> createTaskFromFeedback(
@PathVariable Long feedbackId,
@RequestBody @Valid TaskFromFeedbackRequest request)
```
### 4. PersonnelController - 人员管理控制器
**位置**: `src/main/java/com/dne/ems/controller/PersonnelController.java`
**主要功能**:
- 用户账号CRUD操作
- 用户角色管理
- 用户信息查询与更新
**权限控制**:
```java
@PreAuthorize("hasRole('ADMIN')") // 类级别,仅管理员可访问
@PreAuthorize("hasRole('ADMIN') or hasRole('GRID_WORKER')") // 查询权限扩展
```
**用户管理功能**:
- 创建用户:`POST /api/personnel/users`
- 查询用户:`GET /api/personnel/users`(支持角色和姓名过滤)
- 获取用户详情:`GET /api/personnel/users/{userId}`
- 更新用户信息:`PUT /api/personnel/users/{userId}`
- 更新用户角色:`PATCH /api/personnel/users/{userId}/role`
- 删除用户:`DELETE /api/personnel/users/{userId}`
## 其他控制器
### 5. 其他重要控制器
根据目录结构,还包含以下控制器:
- **DashboardController**: 仪表板数据
- **FileController**: 文件管理
- **GridController**: 网格管理
- **GridWorkerTaskController**: 网格员任务
- **MapController**: 地图相关
- **OperationLogController**: 操作日志
- **PathfindingController**: 路径规划
- **ProfileController**: 用户配置
- **PublicController**: 公共接口
- **SupervisorController**: 主管功能
- **TaskAssignmentController**: 任务分配
## 设计模式与最佳实践
### 1. 统一的响应格式
```java
// 成功响应
ResponseEntity.ok(data)
ResponseEntity.status(HttpStatus.CREATED).body(data)
// 分页响应
PageDTO<T> pageDTO = new PageDTO<>(
page.getContent(),
page.getTotalElements(),
page.getTotalPages(),
page.getNumber(),
page.getSize()
);
```
### 2. 权限控制策略
- **类级别权限**: 整个控制器的基础权限
- **方法级别权限**: 特定操作的细粒度权限
- **角色层次**: ADMIN > SUPERVISOR > DECISION_MAKER > GRID_WORKER > USER
### 3. 参数验证
```java
@Valid @RequestBody // 请求体验证
@Valid @RequestPart // 文件上传验证
@NotBlank @Email String email // 参数级验证
```
### 4. API文档
- 使用Swagger/OpenAPI注解
- 详细的JavaDoc文档
- 参数说明和示例
### 5. 异常处理
- 全局异常处理器
- 自定义业务异常
- 统一错误响应格式
### 6. 日志记录
```java
@Slf4j // Lombok日志注解
log.debug("Creating user with username: {}", request.getUsername());
log.info("User created successfully with ID: {}", user.getId());
log.error("Failed to create user: {}", e.getMessage(), e);
```
## 控制器交互流程
### 典型的请求处理流程:
1. **请求接收**: Controller接收HTTP请求
2. **权限验证**: Spring Security进行权限检查
3. **参数验证**: @Valid注解触发参数验证
4. **业务处理**: 调用Service层处理业务逻辑
5. **响应返回**: 返回标准化的ResponseEntity
6. **异常处理**: 全局异常处理器处理异常情况
7. **日志记录**: 记录操作日志和审计信息
这种设计确保了代码的可维护性、安全性和可扩展性体现了现代Spring Boot应用的最佳实践。