465 lines
14 KiB
Markdown
465 lines
14 KiB
Markdown
### 2.2 类和对象的设计
|
|
|
|
本节定义了系统核心业务对象的静态结构,即类图。这些类图展示了系统中的主要实体、它们的属性和方法,以及它们之间的关系。
|
|
|
|
#### 2.2.1 `UserAccount` 类图
|
|
|
|
`UserAccount`类是系统中用户账户的核心模型,包含用户的基本信息、认证信息和角色信息。
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class UserAccount {
|
|
-Long id
|
|
-String name
|
|
-String phone
|
|
-String email
|
|
-String password
|
|
-Gender gender
|
|
-UserRole role
|
|
-UserStatus status
|
|
-Integer gridX
|
|
-Integer gridY
|
|
-String region
|
|
-String level
|
|
-List~String~ skills
|
|
-Boolean enabled
|
|
-Double currentLatitude
|
|
-Double currentLongitude
|
|
-Integer failedLoginAttempts
|
|
-LocalDateTime lockoutEndTime
|
|
-LocalDateTime createdAt
|
|
-LocalDateTime updatedAt
|
|
+getId() Long
|
|
+getName() String
|
|
+getPhone() String
|
|
+getEmail() String
|
|
+getPassword() String
|
|
+getRole() UserRole
|
|
+getStatus() UserStatus
|
|
+isEnabled() Boolean
|
|
+setPassword(String) void
|
|
+updateProfile(UserUpdateRequest) void
|
|
+isAccountNonLocked() Boolean
|
|
}
|
|
|
|
class UserRole {
|
|
<<enumeration>>
|
|
ADMIN
|
|
SUPERVISOR
|
|
GRID_WORKER
|
|
DECISION_MAKER
|
|
PUBLIC_USER
|
|
}
|
|
|
|
class UserStatus {
|
|
<<enumeration>>
|
|
ACTIVE
|
|
INACTIVE
|
|
SUSPENDED
|
|
}
|
|
|
|
class Gender {
|
|
<<enumeration>>
|
|
MALE
|
|
FEMALE
|
|
OTHER
|
|
}
|
|
|
|
UserAccount --> UserRole
|
|
UserAccount --> UserStatus
|
|
UserAccount --> Gender
|
|
```
|
|
|
|
#### 2.2.2 `Feedback` 类图
|
|
|
|
`Feedback`类表示用户提交的环境问题反馈,是系统的核心业务对象之一。
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class Feedback {
|
|
-Long id
|
|
-String eventId
|
|
-String title
|
|
-String description
|
|
-PollutionType pollutionType
|
|
-SeverityLevel severityLevel
|
|
-FeedbackStatus status
|
|
-String textAddress
|
|
-Integer gridX
|
|
-Integer gridY
|
|
-Double latitude
|
|
-Double longitude
|
|
-UserAccount submitter
|
|
-LocalDateTime createdAt
|
|
-LocalDateTime updatedAt
|
|
-List~Attachment~ attachments
|
|
-Task relatedTask
|
|
+getId() Long
|
|
+getEventId() String
|
|
+getTitle() String
|
|
+getDescription() String
|
|
+getPollutionType() PollutionType
|
|
+getSeverityLevel() SeverityLevel
|
|
+getStatus() FeedbackStatus
|
|
+updateStatus(FeedbackStatus) void
|
|
+addAttachment(Attachment) void
|
|
}
|
|
|
|
class PollutionType {
|
|
<<enumeration>>
|
|
AIR
|
|
WATER
|
|
SOIL
|
|
NOISE
|
|
LIGHT
|
|
OTHER
|
|
}
|
|
|
|
class SeverityLevel {
|
|
<<enumeration>>
|
|
LOW
|
|
MEDIUM
|
|
HIGH
|
|
CRITICAL
|
|
}
|
|
|
|
class FeedbackStatus {
|
|
<<enumeration>>
|
|
SUBMITTED
|
|
AI_REVIEWED
|
|
PENDING_REVIEW
|
|
APPROVED
|
|
REJECTED
|
|
PROCESSED
|
|
CLOSED
|
|
}
|
|
|
|
class Attachment {
|
|
-Long id
|
|
-String fileName
|
|
-String filePath
|
|
-String fileType
|
|
-Long fileSize
|
|
-LocalDateTime uploadedAt
|
|
+getId() Long
|
|
+getFileName() String
|
|
+getFilePath() String
|
|
}
|
|
|
|
Feedback --> PollutionType
|
|
Feedback --> SeverityLevel
|
|
Feedback --> FeedbackStatus
|
|
Feedback --> UserAccount : submitter
|
|
Feedback "1" --> "*" Attachment
|
|
Feedback "1" --> "0..1" Task
|
|
```
|
|
|
|
#### 2.2.3 `Task` 类图
|
|
|
|
`Task`类表示网格员需要执行的工作任务,通常由反馈生成。
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class Task {
|
|
-Long id
|
|
-Feedback feedback
|
|
-UserAccount assignee
|
|
-UserAccount createdBy
|
|
-TaskStatus status
|
|
-LocalDateTime assignedAt
|
|
-LocalDateTime completedAt
|
|
-LocalDateTime createdAt
|
|
-LocalDateTime updatedAt
|
|
-String title
|
|
-String description
|
|
-PollutionType pollutionType
|
|
-SeverityLevel severityLevel
|
|
-String textAddress
|
|
-Integer gridX
|
|
-Integer gridY
|
|
-Double latitude
|
|
-Double longitude
|
|
-List~TaskHistory~ history
|
|
-Assignment assignment
|
|
-List~TaskSubmission~ submissions
|
|
+getId() Long
|
|
+getStatus() TaskStatus
|
|
+getAssignee() UserAccount
|
|
+updateStatus(TaskStatus) void
|
|
+assign(UserAccount) void
|
|
+addSubmission(TaskSubmission) void
|
|
}
|
|
|
|
class TaskStatus {
|
|
<<enumeration>>
|
|
CREATED
|
|
ASSIGNED
|
|
ACCEPTED
|
|
IN_PROGRESS
|
|
SUBMITTED
|
|
APPROVED
|
|
REJECTED
|
|
COMPLETED
|
|
}
|
|
|
|
class TaskHistory {
|
|
-Long id
|
|
-Task task
|
|
-UserAccount actor
|
|
-TaskStatus oldStatus
|
|
-TaskStatus newStatus
|
|
-String remarks
|
|
-LocalDateTime timestamp
|
|
+getId() Long
|
|
+getTask() Task
|
|
+getOldStatus() TaskStatus
|
|
+getNewStatus() TaskStatus
|
|
}
|
|
|
|
class TaskSubmission {
|
|
-Long id
|
|
-Task task
|
|
-UserAccount submitter
|
|
-String description
|
|
-LocalDateTime submittedAt
|
|
-List~Attachment~ attachments
|
|
+getId() Long
|
|
+getTask() Task
|
|
+getSubmitter() UserAccount
|
|
+addAttachment(Attachment) void
|
|
}
|
|
|
|
Task --> TaskStatus
|
|
Task --> UserAccount : assignee
|
|
Task --> UserAccount : createdBy
|
|
Task "1" --> "*" TaskHistory
|
|
Task "1" --> "0..1" Assignment
|
|
Task "1" --> "*" TaskSubmission
|
|
Task "0..1" --> "1" Feedback
|
|
TaskHistory --> Task
|
|
TaskHistory --> UserAccount : actor
|
|
TaskSubmission --> Task
|
|
TaskSubmission --> UserAccount : submitter
|
|
TaskSubmission "1" --> "*" Attachment
|
|
```
|
|
|
|
#### 2.2.4 `Grid` 和 `Assignment` 类图
|
|
|
|
`Grid`类表示地理空间的网格单元,`Assignment`类表示任务分配记录。
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class Grid {
|
|
-Long id
|
|
-Integer gridX
|
|
-Integer gridY
|
|
-String cityName
|
|
-String districtName
|
|
-String description
|
|
-Boolean isObstacle
|
|
+getId() Long
|
|
+getGridX() Integer
|
|
+getGridY() Integer
|
|
+isObstacle() Boolean
|
|
}
|
|
|
|
class Assignment {
|
|
-Long id
|
|
-Task task
|
|
-UserAccount assigner
|
|
-LocalDateTime assignmentTime
|
|
-LocalDateTime deadline
|
|
-AssignmentStatus status
|
|
-String remarks
|
|
+getId() Long
|
|
+getTask() Task
|
|
+getAssigner() UserAccount
|
|
+getStatus() AssignmentStatus
|
|
+updateStatus(AssignmentStatus) void
|
|
}
|
|
|
|
class AssignmentStatus {
|
|
<<enumeration>>
|
|
PENDING
|
|
ACCEPTED
|
|
REJECTED
|
|
COMPLETED
|
|
}
|
|
|
|
Assignment --> Task
|
|
Assignment --> UserAccount : assigner
|
|
Assignment --> AssignmentStatus
|
|
```
|
|
|
|
### 2.3 动态模型设计
|
|
|
|
本节描述了系统在运行时,对象之间的交互行为。通过时序图和状态图,展示了系统的动态行为和状态转换。
|
|
|
|
#### 2.3.1 核心时序图
|
|
|
|
时序图展示了系统中对象之间的交互序列,清晰地表达了业务流程的执行顺序和对象间的消息传递。
|
|
|
|
**用户登录认证时序图**
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant User as 用户
|
|
participant AuthController as 认证控制器
|
|
participant AuthService as 认证服务
|
|
participant JwtUtil as JWT工具
|
|
|
|
User->>AuthController: POST /api/auth/login (email, password)
|
|
AuthController->>AuthService: signIn(LoginRequest)
|
|
AuthService->>AuthService: 验证凭证
|
|
alt 验证成功
|
|
AuthService->>JwtUtil: generateToken(user)
|
|
JwtUtil-->>AuthService: 返回JWT令牌
|
|
AuthService-->>AuthController: 返回JwtAuthenticationResponse
|
|
AuthController-->>User: 200 OK (token)
|
|
else 验证失败
|
|
AuthService-->>AuthController: 抛出AuthenticationException
|
|
AuthController-->>User: 401 Unauthorized
|
|
end
|
|
```
|
|
|
|
**反馈提交与处理时序图**
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant User as 用户
|
|
participant FeedbackController as 反馈控制器
|
|
participant FeedbackService as 反馈服务
|
|
participant EventPublisher as 事件发布器
|
|
participant FeedbackAiReviewService as AI审核服务
|
|
participant TaskService as 任务服务
|
|
|
|
User->>FeedbackController: POST /api/feedback/submit
|
|
FeedbackController->>FeedbackService: submitFeedback(request, files)
|
|
FeedbackService->>FeedbackService: 生成事件ID
|
|
FeedbackService->>FeedbackService: 保存反馈和附件
|
|
FeedbackService->>EventPublisher: publishEvent(FeedbackSubmittedEvent)
|
|
FeedbackService-->>FeedbackController: 返回反馈信息
|
|
FeedbackController-->>User: 201 Created
|
|
|
|
EventPublisher-->>FeedbackAiReviewService: 异步触发AI审核
|
|
FeedbackAiReviewService->>FeedbackAiReviewService: 分析反馈内容
|
|
FeedbackAiReviewService->>FeedbackService: updateFeedbackStatus(AI_REVIEWED)
|
|
|
|
Note over User,TaskService: 主管审核流程
|
|
|
|
alt 主管批准反馈
|
|
FeedbackService->>TaskService: createTaskFromFeedback(feedback)
|
|
TaskService->>TaskService: 创建任务
|
|
TaskService-->>FeedbackService: 返回创建的任务
|
|
FeedbackService->>FeedbackService: updateFeedbackStatus(PROCESSED)
|
|
else 主管拒绝反馈
|
|
FeedbackService->>FeedbackService: updateFeedbackStatus(REJECTED)
|
|
end
|
|
```
|
|
|
|
**主管分配任务时序图**
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant Supervisor as 主管
|
|
participant TaskMgmtController as 任务管理控制器
|
|
participant TaskService as 任务服务
|
|
participant AssignmentService as 分配服务
|
|
participant NotificationService as 通知服务
|
|
participant GridWorker as 网格员
|
|
|
|
Supervisor->>TaskMgmtController: POST /tasks/{taskId}/assign (workerId)
|
|
TaskMgmtController->>TaskService: assignTask(taskId, workerId)
|
|
TaskService->>TaskService: 验证任务状态
|
|
TaskService->>AssignmentService: createAssignment(task, worker)
|
|
AssignmentService->>AssignmentService: 创建分配记录
|
|
AssignmentService-->>TaskService: 返回Assignment
|
|
TaskService->>TaskService: 更新任务状态为ASSIGNED
|
|
TaskService->>NotificationService: notifyWorker(workerId, taskId)
|
|
NotificationService->>NotificationService: 创建通知
|
|
TaskService-->>TaskMgmtController: 分配成功
|
|
TaskMgmtController-->>Supervisor: 200 OK
|
|
|
|
NotificationService-->>GridWorker: 发送任务通知
|
|
```
|
|
|
|
**网格员处理任务时序图**
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant GridWorker as 网格员
|
|
participant WorkerTaskController as 网格员任务控制器
|
|
participant TaskService as 任务服务
|
|
participant PathfindingService as 寻路服务
|
|
participant Supervisor as 主管
|
|
|
|
GridWorker->>WorkerTaskController: POST /api/worker/tasks/{taskId}/accept
|
|
WorkerTaskController->>TaskService: acceptTask(taskId, workerId)
|
|
TaskService->>TaskService: 更新任务状态为ACCEPTED
|
|
TaskService-->>WorkerTaskController: 返回更新后的任务
|
|
WorkerTaskController-->>GridWorker: 200 OK
|
|
|
|
GridWorker->>WorkerTaskController: GET /api/pathfinding/find?start=x,y&end=a,b
|
|
WorkerTaskController->>PathfindingService: findPath(start, end)
|
|
PathfindingService->>PathfindingService: 执行A*算法
|
|
PathfindingService-->>WorkerTaskController: 返回路径点列表
|
|
WorkerTaskController-->>GridWorker: 200 OK (路径数据)
|
|
|
|
GridWorker->>WorkerTaskController: POST /api/worker/tasks/{taskId}/submit
|
|
WorkerTaskController->>TaskService: submitTaskCompletion(taskId, workerId, request, files)
|
|
TaskService->>TaskService: 验证并更新任务状态为SUBMITTED
|
|
TaskService->>TaskService: 保存处理结果和附件
|
|
TaskService-->>WorkerTaskController: 返回更新后的任务
|
|
WorkerTaskController-->>GridWorker: 200 OK
|
|
|
|
Note over GridWorker,Supervisor: 主管审核流程
|
|
|
|
alt 主管批准任务完成
|
|
TaskService->>TaskService: 更新任务状态为COMPLETED
|
|
else 主管拒绝任务完成
|
|
TaskService->>TaskService: 更新任务状态为REJECTED
|
|
TaskService->>NotificationService: 通知网格员重新处理
|
|
end
|
|
```
|
|
|
|
#### 2.3.2 核心状态图
|
|
|
|
状态图展示了系统中关键对象的状态变化和转换条件,帮助理解对象的生命周期。
|
|
|
|
**反馈状态机 (Feedback Status)**
|
|
```mermaid
|
|
stateDiagram-v2
|
|
[*] --> SUBMITTED: 用户提交反馈
|
|
SUBMITTED --> AI_REVIEWED: AI自动审核
|
|
AI_REVIEWED --> PENDING_REVIEW: 进入人工审核队列
|
|
PENDING_REVIEW --> APPROVED: 主管批准
|
|
PENDING_REVIEW --> REJECTED: 主管拒绝
|
|
APPROVED --> PROCESSED: 创建关联任务
|
|
PROCESSED --> CLOSED: 任务完成
|
|
REJECTED --> [*]
|
|
CLOSED --> [*]
|
|
```
|
|
|
|
**任务状态机 (Task Status)**
|
|
```mermaid
|
|
stateDiagram-v2
|
|
[*] --> CREATED: 创建任务
|
|
CREATED --> ASSIGNED: 分配给网格员
|
|
ASSIGNED --> ACCEPTED: 网格员接受
|
|
ASSIGNED --> CREATED: 网格员拒绝
|
|
ACCEPTED --> IN_PROGRESS: 开始处理
|
|
IN_PROGRESS --> SUBMITTED: 提交处理结果
|
|
SUBMITTED --> APPROVED: 主管批准
|
|
SUBMITTED --> REJECTED: 主管拒绝
|
|
REJECTED --> IN_PROGRESS: 重新处理
|
|
APPROVED --> COMPLETED: 完成归档
|
|
COMPLETED --> [*]
|
|
```
|
|
|
|
**用户状态机 (User Status)**
|
|
```mermaid
|
|
stateDiagram-v2
|
|
[*] --> ACTIVE: 创建账户
|
|
ACTIVE --> SUSPENDED: 管理员暂停
|
|
SUSPENDED --> ACTIVE: 管理员重新激活
|
|
ACTIVE --> INACTIVE: 长期未使用
|
|
INACTIVE --> ACTIVE: 用户登录
|
|
INACTIVE --> [*]: 账户删除
|
|
SUSPENDED --> [*]: 账户删除
|
|
``` |