跳到主要内容

工单服务业务逻辑实现文档

文档概述

本文档详细记录了邮轮穿舱件管理系统后台中工单处理流程的业务逻辑实现。通过分析工单相关的模型、服务、路由和模式文件,全面展示了工单从创建到处理的完整生命周期管理。

1. 系统架构概览

1.1 工单模块架构

工单管理系统采用分层架构设计,包含以下核心组件:

  • 数据模型层 (Ticket 模型):定义工单数据结构
  • 业务逻辑层 (ticket_service):实现工单CRUD操作
  • API接口层 (ticket_router):提供RESTful API接口
  • 数据验证层 (ticket_schema):定义输入输出数据格式

1.2 架构依赖关系图

flowchart TD
A[客户端请求] --> B[ticket_router]
B --> C[verify_jwt_token]
B --> D[service_create_access_log]
B --> E[ticket_service]
E --> F[Ticket模型]
E --> G[异常处理]
F --> H[数据库]

style A fill:#e1f5fe
style B fill:#f3e5f5
style E fill:#e8f5e8
style F fill:#fff3e0

2. 数据模型设计

2.1 工单实体模型

工单模型定义了完整的工单数据结构,包含以下核心字段:

class Ticket(Model):
ticket_id = fields.IntField(description="工单ID", primary_key=True)
ticket_type = fields.CharField(max_length=255, description="工单类型")
ticket_status = fields.CharField(max_length=255, description="工单状态")
target_workpiece = fields.IntField(description="目标产品ID")
ticket_from = fields.CharField(max_length=255, description="工单来源")
ticket_tos = fields.CharField(max_length=255, description="工单目标")
ticket_content = fields.TextField(description="工单内容")
ticket_title = fields.CharField(max_length=255, description="工单标题")
feedback_text = fields.TextField(description="工单反馈内容")
image_list = fields.CharField(max_length=1025, description="工单图片列表")
reference_list = fields.CharField(max_length=1025, description="工单引用列表")
created_by = fields.IntField(description="创建人")
updated_by = fields.IntField(description="更新人")
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)

参考源文件:

2.2 数据验证模式

系统使用Pydantic模式进行数据验证:

class TicketInSchema(BaseModel):
ticket_type: Literal['inspect','maintenance'] = "inspect"
ticket_status: str = Literal['open','running','closed','issue']
# ... 其他字段

class TicketOutSchema(BaseModel):
ticket_id: int = -1
ticket_type: Literal['inspect','maintenance']
ticket_status: Literal['open','running','closed','issue']
# ... 其他字段

参考源文件:

3. 业务逻辑实现

3.1 工单服务核心功能

工单服务层实现了完整的CRUD操作:

3.1.1 创建工单流程

sequenceDiagram
participant Client
participant Router
participant Service
participant Model
participant DB

Client->>Router: POST /ticket
Router->>Router: 验证JWT令牌
Router->>Router: 记录访问日志
Router->>Service: service_create_ticket()
Service->>Model: Ticket.create()
Model->>DB: INSERT操作
DB-->>Model: 返回新工单
Model-->>Service: 返回工单对象
Service-->>Router: 返回结果
Router-->>Client: 返回工单详情

业务逻辑代码:

async def service_create_ticket(ticket_schema: TicketInSchema) -> Ticket:
try:
ticket = await Ticket.create(**ticket_schema.model_dump())
return ticket
except IntegrityError:
logger.error("创建工单失败,工单类型或状态不存在")
raise HTTPException(status_code=400, detail="工单类型或状态不存在")

参考源文件:

3.1.2 工单状态管理

系统支持以下工单状态:

  • open:工单已创建,等待处理
  • running:工单正在处理中
  • closed:工单已完成
  • issue:工单存在问题

3.2 异常处理机制

系统实现了完善的异常处理:

async def service_get_ticket_by_id(ticket_id: int) -> TicketOutSchema:
try:
ticket = await Ticket.filter(ticket_id=ticket_id).first()
return ticket
except DoesNotExist:
logger.error(f"获取工单详情失败,工单ID {ticket_id} 不存在")
raise HTTPException(status_code=404, detail="工单不存在")

参考源文件:

4. API接口设计

4.1 工单路由接口

系统提供完整的RESTful API接口:

方法路径功能认证要求
POST/ticket创建新工单JWT认证
GET/ticket/{ticket_id}获取工单详情JWT认证
PUT/ticket/{ticket_id}更新工单信息JWT认证
DELETE/ticket/{ticket_id}删除工单JWT认证
GET/ticketEntity/all获取所有工单JWT认证

4.2 访问日志记录

每个API调用都会记录访问日志:

await service_create_access_log(
action_type="ticket_router",
action_title="创建工单",
action_description=f"创建新工单",
related_users=str(g.user_id),
related_tickets=None,
related_workpieces=None,
)

参考源文件:

5. 工单处理流程图

5.1 完整工单生命周期

stateDiagram-v2
[*] --> 创建工单
创建工单 --> 待处理 : 工单创建成功
待处理 --> 处理中 : 开始处理工单
处理中 --> 已完成 : 工单处理完成
处理中 --> 问题工单 : 发现问题
问题工单 --> 处理中 : 问题解决
问题工单 --> 已关闭 : 问题无法解决
已完成 --> 已关闭 : 确认关闭工单
已关闭 --> [*] : 工单归档

5.2 数据流图

flowchart LR
A[工单创建请求] --> B[数据验证]
B --> C[权限验证]
C --> D[业务逻辑处理]
D --> E[数据持久化]
E --> F[访问日志记录]
F --> G[返回响应]

style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#f3e5f5
style D fill:#e8f5e8

6. 依赖关系分析

6.1 模块依赖关系

flowchart TD
subgraph API层
A[ticket_router]
end

subgraph 业务逻辑层
B[ticket_service]
end

subgraph 数据层
C[Ticket模型]
D[ticket_schema]
end

subgraph 基础设施层
E[访问日志服务]
F[认证服务]
G[数据库]
end

A --> B
A --> E
A --> F
B --> C
B --> D
C --> G

6.2 关键依赖说明

  • 认证依赖:所有工单操作都需要JWT令牌验证
  • 日志依赖:每个操作都会记录访问日志用于审计
  • 数据验证:使用Pydantic进行严格的输入数据验证
  • 异常处理:统一的异常处理机制确保系统稳定性

7. 实现模式与最佳实践

7.1 设计模式应用

  1. 分层架构模式:清晰分离关注点
  2. 依赖注入模式:通过FastAPI的Depends实现
  3. 仓储模式:通过Tortoise-ORM实现数据访问抽象
  4. DTO模式:使用Schema进行数据传输对象定义

7.2 性能优化考虑

  • 数据库查询优化:使用ORM的延迟加载和查询优化
  • 缓存策略:可扩展的缓存机制支持
  • 并发控制:支持高并发工单处理
  • 日志分级:不同级别的日志记录优化性能

8. 索引

工单服务系统实现了完整的工单生命周期管理,具备以下特点:

  1. 完整的CRUD操作:支持工单的创建、读取、更新、删除
  2. 严格的数据验证:使用Pydantic确保数据完整性
  3. 完善的权限控制:基于JWT的认证机制
  4. 详细的审计日志:完整的操作记录和追踪
  5. 健壮的异常处理:统一的错误处理机制

系统架构清晰,代码结构良好,为邮轮穿舱件管理系统提供了可靠的工单处理能力。

主要参考源文件: