未来功能计划(第二阶段)
第一阶段已完成:工单全流程(建单/分派/接单/挂起/恢复/完成/驳回/关闭/取消/改派/转派)、SLA 与超时检查、工单类型可配置、权限节点管理与同步、飞书集成(单聊通知 + 卡片接单 + 链接免登)、H5 接单端(工作台 + 手机模拟)、WebSocket 实时通知。
一、待办需求(用户提出)
1. 操作审计日志
新增 operation_logs 表(统一审计,独立于 work_order_status_log):
| 字段 |
说明 |
operator_type / operator_id |
user / system / api |
action |
动作码(login、assign、complete、feishu_send…) |
module |
模块(auth / workorder / feishu / config / permission) |
object_type / object_id |
对象(work_order、user、type、feishu_setting…) |
detail |
JSON 明细(改前/改后、原因、飞书 message_id) |
ip / ua |
来源 |
result |
ok / fail(含错误信息) |
created_at |
时间 |
覆盖范围:
- 登录 / 登出 / 飞书免登 / 票据消费
- 工单全部操作(建单/分派/接单/挂起/恢复/完成/驳回/关闭/取消/改派/评论/附件)
- 所有配置改动(飞书/工单类型/SLA/人员/景点/权限节点/OAuth 设置)
- 权限刷新、权限节点同步到 oauth
- 飞书推送(与推送日志关联)
后台页面:/console/logs(权限 admin:audit),按操作人/动作/对象/时间/结果筛选。
2. 飞书推送日志
新增 feishu_push_logs 表:
| 字段 |
说明 |
order_id / work_order_no |
关联工单 |
user_id / receive_id |
目标用户 / open_id |
channel |
chat / group |
card_type |
new / reassign / timeout / comment / test |
status |
pending / success / fail / skipped |
feishu_code / feishu_msg / message_id |
飞书返回 |
retry_count / sent_at |
重试与发送时间 |
后台:飞书集成页新增「推送日志」区块(或独立页),按工单/状态/时间筛选,失败可一键重发。
二、查漏补缺(按优先级)
P0 — 安全(建议最先做)
| 项 |
现状 |
风险 |
| 后端越权校验 review |
只有「接单」校验了 assignee;完成/挂起/驳回/关闭/评论/附件等未逐一核对 |
有 workorder:process 权限的人可操作他人工单 |
| 登录防爆破 |
无失败计数 / 锁定 / 限流 |
弱密码可被撞库 |
| 免登与票据审计 |
票据消费无日志 |
出现安全问题无法追溯 |
P1 — 可靠性
| 项 |
现状 |
风险 |
| 飞书推送持久化队列 |
用 Timer 进程内异步,进程重启即丢 |
推送丢失、无补偿 |
| 健康检查 |
无 /healthz |
无法被负载均衡 / 监控探活 |
| 定时任务心跳 |
SlaChecker 每分钟跑,无运行记录 |
挂了不知道 |
| 数据备份 |
无 |
SQLite 单文件 + MySQL 依赖,缺备份策略 |
P2 — 功能补全
| 项 |
现状 |
| 报表页 |
/admin/stats 接口存在,需核对页面是否完整 |
| 评论/附件触达 |
评论已通知处理人;附件上传是否需通知待定 |
| 事件/外部系统接入 |
/internal/v1/events、/open/v1 已实现,需补幂等与回归测试 |
P3 — 工程化
| 项 |
现状 |
| 自动化测试 |
目前靠手工 smoke + 浏览器脚本,无 CI 回归 |
| 部署 |
无 Docker / 部署脚本,环境变量文档分散 |
| 权限快照过期 |
长期不登录的用户,快照会过期(配合日志/告警) |
三、实施阶段拆解
2.1 审计与日志 ← 用户两个需求
operation_logs + feishu_push_logs + 后台查询页
2.2 安全加固
后端越权校验补全 + 登录限流/锁定 + 免登/票据审计
2.3 可靠性
飞书推送持久化队列(DB 表 + 定时重试)+ /healthz
+ 定时任务心跳 + 备份
2.4 功能与工程
报表页核对、自动化测试、部署脚本
四、待拍板事项
- 审计粒度:是否记录
detail 里的「改前/改后」完整快照,还是只记关键字段?
- 推送队列:失败重试几次、间隔多久?(建议 3 次,指数退避)
- 登录限流:阈值定多少?(建议同 IP 连续 5 次失败锁 10 分钟)
- 报表:第二阶段是否要一并做报表页,还是先聚焦日志与安全?