19 KiB
LeAudit 开发任务拆解清单
1. 目标
基于以下两份文档,进一步拆出一份可执行的开发任务清单,并尽量精确到建议修改文件:
docs/规则编辑/yaml规则在线编辑设计.mddocs/规则编辑/跑通全流程所需准备项.md
本清单覆盖的目标不是单点“规则编辑”,而是完整业务链路:
上传文档
→ 获取文件真源
→ OCR
→ 抽取
→ 评查
→ 结果落库
→ 查询运行状态 / 结果
→ 再扩展到 YAML 在线编辑 / 发布 / 回滚
2. 当前代码现状摘要
在开始任务前,先明确当前代码的真实状态。
2026-04-27 补充结论:结合
/home/wren-dev/Porject/leaudit/src源码确认, 当前leaudit的正式执行入口应视为:AuditCtx+AuditService.audit(ctx)。 因此本清单中的后续任务,默认都以“保留 Bridge,但禁止平台自己重写主流程编排”为前提。
2.1 已有骨架
- 评查控制器:
fastapi_modules/fastapi_leaudit/controllers/auditController.py
- 评查服务接口/实现:
fastapi_modules/fastapi_leaudit/services/auditService.pyfastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.py
- bridge 层:
fastapi_modules/fastapi_leaudit/leaudit_bridge/pipeline.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/rules_loader.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/storage_adapter.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/ctx_builder.py
- 模型:
fastapi_modules/fastapi_leaudit/models/leauditDocument.pyfastapi_modules/fastapi_leaudit/models/leauditDocumentFile.pyfastapi_modules/fastapi_leaudit/models/leauditAuditRun.py
- 规则服务接口骨架:
fastapi_modules/fastapi_leaudit/services/ruleService.pyfastapi_modules/fastapi_leaudit/domian/vo/ruleVo.py
2.2 当前主要缺口
AuditServiceImpl.Run()已可创建 run 并触发 NativeRunner 任务GetResult()已可查询leaudit_rule_results- 规则文件主链已开始支持
run -> rule_version -> oss_url -> 本地临时 YAML tasks.py仍保留LEAUDIT_RULES_DIR和_TYPE_ID_RULES_MAP作为 fallback- 尚未看到规则编辑控制器与
RuleServiceImpl - 尚未形成统一 OSS 文件服务
- 结果写入仍有“按 document_id 找最新 run”的简化逻辑
因此,任务拆解应该分两层:
- P0:先把上传 → OCR → 抽取 → 评查 → 查询打通
- P1/P2:再把规则 OSS 化、版本化、在线编辑化
3. 分阶段开发任务清单
P0:先打通最小评查闭环
目标:
上传文档
→ 创建 document / file / run
→ bridge 执行 OCR / 抽取 / 评查
→ 落库
→ 查到 run 状态与结果
P0-1:补齐评查服务入口
任务说明
把 POST /api/audit/run 从“只抛异常”改成真正可执行的评查入口。
需要修改
fastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.pyfastapi_modules/fastapi_leaudit/services/auditService.pyfastapi_modules/fastapi_leaudit/domian/Dto/auditDto.pyfastapi_modules/fastapi_leaudit/domian/vo/auditVo.py
具体工作
- 在
Run()中完成:- 校验文档是否存在
- 查当前可执行文件版本
- 计算
run_no - 创建
leaudit_audit_runs - 调用
dispatch_leaudit_task() - 返回
AuditRunVO
- 调整
IAuditService.Run()的接口定义,使其与实现参数一致 - 如有必要,为
AuditRunDTO增加可选字段:documentFileIdforceruleTyperuleVersionId(可选,便于指定版本重跑)
产出目标
- 调用
/api/audit/run不再报 “Celery 任务集成待实现” - 至少能创建 run 并触发 bridge 层执行
P0-2:补齐 run 创建与状态更新逻辑
任务说明
把 run 作为整条链的中心对象,保证每次执行都能明确追踪。
需要修改
fastapi_modules/fastapi_leaudit/models/leauditAuditRun.pyfastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/storage_adapter.py
具体工作
- 在触发评查前创建
leaudit_audit_runs - 明确 run 初始字段:
status=pendingphase=normalize或空startedAtdocumentFileIdruleSetIdruleVersionId
- 执行链中显式传递
run_id storage_adapter.py所有落库方法改为:- 不再“按
document_id查最新 run” - 统一显式使用
run_id
- 不再“按
产出目标
- 所有结果写入能严格绑定到唯一
run_id - 避免多次重跑 / 并发时结果串写
P0-3:补齐文件输入链
任务说明
在执行 OCR 前,明确“这次评查使用哪一个文件”。
需要修改
fastapi_modules/fastapi_leaudit/models/leauditDocument.pyfastapi_modules/fastapi_leaudit/models/leauditDocumentFile.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/ctx_builder.pyfastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.py
建议新增
fastapi_modules/fastapi_leaudit/services/documentService.pyfastapi_modules/fastapi_leaudit/services/impl/documentServiceImpl.py或fastapi_modules/fastapi_leaudit/services/fileService.pyfastapi_modules/fastapi_leaudit/services/impl/fileServiceImpl.py
具体工作
- 增加“获取当前有效文件”的服务方法
- 根据
document_id找到当前激活的leaudit_document_files - 如果文件在 OSS,先下载到本地临时路径
- 给 pipeline 提供稳定的
file_path
产出目标
- 评查入口不依赖调用方直接传原始字节
- 可以从数据库+文件真源独立还原执行输入
P0-4:打通 bridge 任务入口
任务说明
让 dispatch_leaudit_task() 真正成为评查执行入口,而不是演示性同步封装。
但注意:这里的“执行入口”不是继续扩写平台自编排 pipeline,而是逐步过渡到:
build AuditCtx
→ call AuditService.audit(ctx)
→ persist ctx outputs
需要修改
fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/__init__.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/pipeline.py
建议新增
fastapi_modules/fastapi_leaudit/leaudit_bridge/audit_ctx_builder.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/audit_service_factory.py
具体工作
- 统一
dispatch_leaudit_task()的入参:run_iddocument_iddocument_file_idrules_path或rule_version_id- 可选
trigger_user_id
- 逐步去掉
source_port作为主上下文依赖 - 允许先同步执行,后续再切 Celery
- 逐步让
pipeline.py退化为薄包装层,而不是 7 阶段自编排器 - 在 bridge 内部统一完成:
AuditServices构造AuditConfig构造- 原生
AuditCtx构造 AuditService.audit(ctx)调用
产出目标
- 业务层只调一个稳定入口
- bridge 层掌控实际执行上下文
- 主流程编排回归
leaudit原生服务层
P0-5:补齐结果查询接口
任务说明
不仅要能跑,还要能看到结果。
需要修改
fastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.pyfastapi_modules/fastapi_leaudit/controllers/auditController.pyfastapi_modules/fastapi_leaudit/domian/vo/auditVo.py
具体工作
GetRunStatus()查询真实 run 状态GetResult()从以下表联合查询:leaudit_audit_runsleaudit_rule_results- 可选
leaudit_field_results
- 把
rules=[]改成真实规则级返回 - 如有必要,为
AuditResultVO增加:timingfieldserrors
产出目标
/api/audit/result/{RunId}能返回真实评查结果
P0-6:补齐结果落库结构
任务说明
当前 StorageAdapter 已有雏形,但还需要工程化加固。
需要修改
fastapi_modules/fastapi_leaudit/leaudit_bridge/storage_adapter.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/result_adapter.py
具体工作
- 所有保存方法显式接收
run_id - 补
run_metrics写入 - 补
run_errors写入 - 梳理
artifacts与field_results的最小必要字段 - 保持
rule_results与AuditResultVO的结构一致
产出目标
- 结果写入不再依赖“最新 run”猜测
- 后续前端查询更稳定
P1:把规则执行链切到 OSS + DB
目标:
文档类型
→ 绑定表
→ 规则集
→ 当前版本
→ OSS YAML
→ 下载本地临时文件
→ leaudit 执行
P1-1:补规则读取服务
任务说明
把规则加载从“本地目录路径”升级成“DB + OSS + 临时文件”。
当前状态
这一项已经完成第一阶段落地:
auditServiceImpl.py会在建 run 时锁定ruleVersionId与ruleSourceOssUrltasks.py会优先按run_id解析规则来源ruleVersionResolver.py会把 OSS YAML 下载到本地临时文件RulesLoader.load(local_path)已接入执行链
当前剩余工作已经从“能不能执行”变成“如何把上传 / 发布 / 缓存 / 回收做完整”。
需要修改
fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/nativeRunner.pyfastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.py
建议新增
fastapi_modules/fastapi_leaudit/leaudit_bridge/ruleVersionResolver.py
具体工作
- 根据 run 锁定的
rule_version_id/rule_source_oss_url解析规则来源 - 下载 YAML 到本地临时文件
- 校验
rule_source_sha256 - 调
load_rules_file(local_path) - 继续保留本地
rules/作为 fallback
产出目标
- 执行时优先走 run 绑定规则版本,而不是
_TYPE_ID_RULES_MAP - 原生
AuditCtx.rules_file由 bridge 正式注入,而不是平台手工绕过服务编排层
P1-2:补统一 OSS 文件服务
任务说明
项目当前有 OSS 配置,但缺少统一文件服务。
需要修改
fastapi_admin/config/_settings.py(仅在配置不够时)
建议新增
fastapi_common/fastapi_common_storage/__init__.pyfastapi_common/fastapi_common_storage/oss_client.pyfastapi_common/fastapi_common_storage/oss_path_utils.py
如果不想放到 fastapi_common/,也可以先放:
fastapi_modules/fastapi_leaudit/services/ossService.pyfastapi_modules/fastapi_leaudit/services/impl/ossServiceImpl.py
具体工作
- 提供统一方法:
- 上传文件到 OSS
- 下载到本地临时文件
- 计算 / 校验 sha256
- 删除临时文件
- 同时兼容:
- 规则文件
- 原始文档
- 评查产物
产出目标
- 文档文件和规则文件都可以共用一套对象存储服务
P1-3:补规则版本与绑定的查询模型
任务说明
当前代码里还没有看到对应规则表的 ORM / 查询对象,后续查询会比较痛苦。
建议新增
fastapi_modules/fastapi_leaudit/models/leauditRuleSet.pyfastapi_modules/fastapi_leaudit/models/leauditRuleVersion.pyfastapi_modules/fastapi_leaudit/models/leauditRuleTypeBinding.py- 更新
fastapi_modules/fastapi_leaudit/models/__init__.py
具体工作
- 为规则集、规则版本、绑定表建立 ORM
- 后续服务层不必到处手写 SQL
产出目标
- 规则管理服务、规则解析服务都能清晰建模
P2:开放 YAML 在线编辑 / 发布 / 回滚
目标:
让规则成为后台可管理资产,而不是服务器上的裸文件。
P2-1:补规则控制器与服务实现
任务说明
当前只有 IRuleService 接口,需要真正落地规则后台。
需要修改
fastapi_modules/fastapi_leaudit/services/ruleService.pyfastapi_modules/fastapi_leaudit/domian/vo/ruleVo.py
建议新增
fastapi_modules/fastapi_leaudit/controllers/ruleController.pyfastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.pyfastapi_modules/fastapi_leaudit/domian/Dto/ruleDto.py
具体工作
- 完成接口:
- 列表
- 版本历史
- 查看内容
- 保存版本
- 校验
- 发布
- 回滚
- 为 controller 增加路由
产出目标
- 后台可以真正管理规则
P2-2:补规则内容查看/保存接口
建议新增
fastapi_modules/fastapi_leaudit/domian/Dto/ruleContentDto.py
具体工作
- 定义:
- 保存 YAML 文本请求 DTO
- 规则校验响应 VO
- 规则内容响应 VO
- 从 OSS 读回内容展示给前端
- 新版本保存时先写 OSS,再写 DB
产出目标
- 前端可以拿到 YAML 文本并保存新版本
P2-3:补 YAML 语法校验 + DSL 语义校验
建议新增
fastapi_modules/fastapi_leaudit/services/ruleValidationService.pyfastapi_modules/fastapi_leaudit/services/impl/ruleValidationServiceImpl.py
具体工作
- YAML 解析校验
leauditDSL schema 校验- 提取 metadata 快照
- 形成标准错误列表
产出目标
- 发布前可拦截坏规则
P2-4:补发布、回滚、审计
需要修改
fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py
建议新增
fastapi_modules/fastapi_leaudit/models/leauditRulePublishLog.pyfastapi_modules/fastapi_leaudit/models/leauditRuleValidationLog.py
如果暂时不建 ORM,也至少需要:
- 对应 SQL migration / 建表脚本
具体工作
- 发布时更新
current_version_id - 写发布日志
- 回滚时写回滚日志
- 记录操作者与时间
产出目标
- 规则变更具备可审计性
P3:补平台级工程能力
目标:
让系统从“能跑”升级到“可持续运行”。
P3-1:Celery / Redis 正式接入
需要修改
fastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.pyfastapi_modules/fastapi_leaudit/tasks/__init__.pyfastapi_admin/config/_settings.py
建议新增
fastapi_common/fastapi_common_cache/redis_pool.pyfastapi_modules/fastapi_leaudit/tasks/celery_app.py
具体工作
- 同步任务改为异步分发
- 配置任务超时 / 重试 / 队列
P3-2:规则缓存与发布失效
需要修改
fastapi_modules/fastapi_leaudit/leaudit_bridge/rules_loader.pyfastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py
具体工作
- 规则缓存 key 改为
rule_version_id或oss_url + sha256 - 发布后清缓存
- 多 worker 时设计统一失效策略
P3-3:结果增强与诊断能力
需要修改
fastapi_modules/fastapi_leaudit/leaudit_bridge/storage_adapter.pyfastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.py
具体工作
- 完整落
run_metrics - 完整落
run_errors - 补
rescue_outcomes - 前端可查看错误详情、阶段耗时
4. 建议新增文件总表
下面是我建议优先考虑新增的文件,便于你按模块建任务:
规则管理
fastapi_modules/fastapi_leaudit/controllers/ruleController.pyfastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.pyfastapi_modules/fastapi_leaudit/services/ruleValidationService.pyfastapi_modules/fastapi_leaudit/services/impl/ruleValidationServiceImpl.pyfastapi_modules/fastapi_leaudit/services/ruleResolverService.pyfastapi_modules/fastapi_leaudit/services/impl/ruleResolverServiceImpl.pyfastapi_modules/fastapi_leaudit/domian/Dto/ruleDto.pyfastapi_modules/fastapi_leaudit/domian/Dto/ruleContentDto.py
规则 ORM
fastapi_modules/fastapi_leaudit/models/leauditRuleSet.pyfastapi_modules/fastapi_leaudit/models/leauditRuleVersion.pyfastapi_modules/fastapi_leaudit/models/leauditRuleTypeBinding.pyfastapi_modules/fastapi_leaudit/models/leauditRulePublishLog.pyfastapi_modules/fastapi_leaudit/models/leauditRuleValidationLog.py
文件与存储
fastapi_common/fastapi_common_storage/oss_client.pyfastapi_common/fastapi_common_storage/oss_path_utils.py
原生 AuditCtx 接入
fastapi_modules/fastapi_leaudit/leaudit_bridge/audit_ctx_builder.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/audit_service_factory.py
文档执行输入
fastapi_modules/fastapi_leaudit/services/documentService.pyfastapi_modules/fastapi_leaudit/services/impl/documentServiceImpl.py
异步任务 / 缓存
fastapi_modules/fastapi_leaudit/tasks/celery_app.pyfastapi_common/fastapi_common_cache/redis_pool.py
5. 建议优先修改文件总表
如果按“先把主链跑通”的角度,最优先改的文件是:
fastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/tasks.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/storage_adapter.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/rules_loader.pyfastapi_modules/fastapi_leaudit/leaudit_bridge/ctx_builder.pyfastapi_modules/fastapi_leaudit/domian/vo/auditVo.pyfastapi_modules/fastapi_leaudit/services/ruleService.pyfastapi_modules/fastapi_leaudit/domian/vo/ruleVo.pyfastapi_modules/fastapi_leaudit/models/__init__.pyfastapi_admin/config/_settings.py
6. 推荐执行顺序
如果按最稳妥的方式推进,我建议这样做:
第一阶段:只做主链闭环
- 改
AuditServiceImpl - 改
tasks.py - 新增
audit_ctx_builder.py - 新增
audit_service_factory.py - 改
storage_adapter.py - 改
GetResult()
目标:先能跑通上传后评查与结果查询。
第二阶段:切规则到 OSS + DB
- 补规则 ORM
- 改
rules_loader.py - 加 OSS 文件服务
目标:评查执行真正使用数据库发布的规则版本。
第三阶段:开放规则后台
- 加
ruleController.py - 加
RuleServiceImpl - 加校验服务
- 加发布/回滚日志
目标:前端可编辑、发布、回滚 YAML。
第四阶段:工程化增强
- Celery / Redis
- 缓存失效
- 审计
- metrics / errors / rescue
目标:从“能跑”变成“可运营”。
7. 一句话结论
如果你要的是“基于当前代码库,把功能拆成能开发的任务”,那么真正的主线不是先做编辑器,而是:
- 先把
auditServiceImpl + bridge + storageAdapter打通 - 再把
rules_loader从本地目录切到OSS + DB - 最后再做
ruleController + RuleServiceImpl + 校验/发布/回滚
也就是说:
- 第一优先级是评查主链
- 第二优先级是规则执行链
- 第三优先级才是规则编辑后台
这样开发成本最低,验证路径也最清晰。