feat(dispatch): 新增报修派单与维保派单模块全栈实现
- 后端: repair_request/repair_dispatch/maintenance_order/maintenance_detail 实体、DTO、Service(事务/单号/状态流转/行级权限)、Controller - 安全: JWT+RBAC 接入(dispatch:repair/dispatch:maintenance)、全参数化防SQL注入、操作日志埋点 - 前端: 报修派单(双页签)、维保派单(主从表单)页面, API封装, /dispatch 路由 - 菜单: db_seed.sql 与远程库同步 id=36/37, ADMIN/SALESMAN 角色绑定
This commit is contained in:
1 parent
1803ad679c
commit
d42e858fb0
21 files changed
+3760
-4
No files matched your search
@@ -0,0 +1,77 @@
|
||||
# 派单管理模块(报修派单 + 维保派单)Spec
|
||||
|
||||
## Why
|
||||
运营派单模块目前仅有"安装派单"落地(项目管理下)。根据系统设计文档(db_design.html D8 报修域 / D9 维保域),报修派单、维保派单是运营核心业务(客户小程序报修 → 运营平台派单 → APP 电工接单处理 → 客户评分),当前 Web 端缺失完整实现。
|
||||
|
||||
## What Changes
|
||||
- 后端新增报修派单全链路:报修单查询 + 报修派单 CRUD/派单/完成(`repair_request` / `repair_dispatch` 表已存在)
|
||||
- 后端新增维保派单全链路:维保单主从(单头 `maintenance_order` + 明细 `maintenance_detail`)CRUD/完成
|
||||
- 全部接口接入 JWT + RBAC 鉴权、防 SQL 注入(参数化)、操作日志埋点、统一响应格式兼容 APP
|
||||
- 前端新增"报修派单"、"维保派单"两个台账页面(复用安装派单页面模式),挂载到"运营派单"菜单
|
||||
- 菜单 seed 与远程库同步(父菜单 id=3 "运营派单" 下新增子菜单)
|
||||
|
||||
## Impact
|
||||
- Affected specs: 运营派单域(D8 报修域、D9 维保域)
|
||||
- Affected code:
|
||||
- server: entity/ dto/ service/ controller/(新增 4 个实体域文件组)、middleware/rbac.middleware.ts、service/log.service.ts(复用)
|
||||
- client: views/dispatch/repair、views/dispatch/maintenance、api/、router/index.ts
|
||||
- database: db_seed.sql(菜单 seed)、远程库 sys_menu/sys_role_menu 同步
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 报修单查询(repair_request)
|
||||
系统 SHALL 提供报修单列表与详情查询接口,支持按客户、状态(0待处理 1已派单 2已完成)、报修时间范围、关键字(单号/报修人/报修电话)筛选。
|
||||
|
||||
#### Scenario: 查询报修单列表
|
||||
- **WHEN** 运营人员带筛选条件 GET /api/repair-requests
|
||||
- **THEN** 返回分页列表 {code,message,data:{list,total,page,pageSize}}
|
||||
|
||||
### Requirement: 报修派单(repair_dispatch)
|
||||
系统 SHALL 支持从"待处理"报修单创建报修派单(选择共享电工),事务内将报修单状态置为"已派单",并自动生成派单号 `WH-REP-YYYY-NNNN`。报修派单支持 CRUD、标记完成(status 0→1,写 completed_at)、评分(rating)查看。已完成派单不可编辑。
|
||||
|
||||
#### Scenario: 报修单派单成功
|
||||
- **WHEN** 运营人员对 status=0 的报修单提交派单(customer_id + worker_id + 报修信息)
|
||||
- **THEN** 创建 repair_dispatch 记录,报修单 status 变为 1,返回新派单数据
|
||||
|
||||
#### Scenario: 重复派单被拒绝
|
||||
- **WHEN** 对已派单(status=1/2)的报修单再次派单
|
||||
- **THEN** 返回 400 错误"该报修单已派单"
|
||||
|
||||
### Requirement: 维保派单主从(maintenance_order + maintenance_detail)
|
||||
系统 SHALL 支持维保单(手工录入单号 maintenance_no + 客户 + 维保人 + 维保日期 + 备注 + 状态)及其明细行(客户设备 equip_id/equip_name/equip_type、建筑/楼层/位置、配电间情况/回路情况/终端情况/维保情况说明、照片)的一体化创建、更新、列表、详情、完成、删除。
|
||||
|
||||
#### Scenario: 创建维保单(含明细)
|
||||
- **WHEN** 运营人员提交维保单头 + ≥1 条明细
|
||||
- **THEN** 事务内创建 maintenance_order 及 maintenance_detail 多条记录,返回主单详情
|
||||
|
||||
### Requirement: 接口鉴权
|
||||
所有 `/api/repair-requests`、`/api/repair-dispatchs`、`/api/maintenance-orders` 接口 SHALL 经过 JWT 鉴权,并按权限码 `dispatch:repair` / `dispatch:maintenance` 做 RBAC 校验(ADMIN 放行,非 ADMIN 需菜单权限);未带 token 返回 401,无权限返回 403。
|
||||
|
||||
#### Scenario: 未登录访问
|
||||
- **WHEN** 无 token 调用上述接口
|
||||
- **THEN** 返回 401 "未登录"
|
||||
|
||||
### Requirement: 防 SQL 注入
|
||||
后端查询 SHALL 全部使用 Sequelize 参数化查询(Op.like 绑定参数、排序白名单),禁止字符串拼接 SQL。
|
||||
|
||||
### Requirement: 行级数据权限
|
||||
非 ADMIN 用户 SHALL 仅能访问其名下客户(customer_id 归属过滤)的数据,与 install_order 模式一致。列表 SHALL 支持按 workerId 筛选(供 APP 电工查本人派单)。
|
||||
|
||||
### Requirement: 操作日志
|
||||
报修派单创建/更新/完成/删除、维保派单创建/更新/完成/删除 SHALL 写入 sys_operation_log(复用 log.service.logAction)。
|
||||
|
||||
### Requirement: 前端页面
|
||||
系统 SHALL 提供"报修派单"(views/dispatch/repair/index.vue)与"维保派单"(views/dispatch/maintenance/index.vue)两个台账页面,复用安装派单页面的搜索区/表格/分页/弹窗表单模式;前端 SHALL 禁止 v-html(防 XSS),全部文本插值输出。
|
||||
|
||||
#### Scenario: 报修派单页操作
|
||||
- **WHEN** 运营人员在报修派单页对报修单执行"派单"并选择电工
|
||||
- **THEN** 提交成功提示"派单成功",列表刷新,报修单状态更新
|
||||
|
||||
### Requirement: 接口兼容 APP
|
||||
所有接口 SHALL 返回统一结构 {code,message,data},分页参数统一 page/pageSize/total,时间字段 ISO 字符串,报修/维保列表支持 workerId 查询参数,便于 APP/小程序消费。
|
||||
|
||||
## MODIFIED Requirements
|
||||
(无既有需求修改)
|
||||
|
||||
## REMOVED Requirements
|
||||
(无)
|
||||
Reference in new issue
Block a user