数据提取规则系统-实现阶段规划.md 29 KB

数据提取规则系统 - 代码实现阶段规划

版本: 1.0.0 日期: 2026-01-22 作者: AI Assistant (Claude Opus 4.5) 关联文档: 数据提取规则系统设计.md

一、概述

本文档规划「数据提取规则系统」的代码实现阶段,共分为 11 个阶段,按依赖关系和优先级排序。

1.1 阶段总览

阶段 名称 主要产出 预估工作量
1 基础设施搭建 extract-service 模块框架、数据库表
2 核心实体与 Repository 实体类、数据访问层
3 项目与文档管理 Project/SourceDocument 的 CRUD API
4 提取规则配置 ExtractRule 的配置与管理 API
5 内容定位服务 按页码/章节/元素定位文档内容
6 AI 提取服务 AI 字段提取、内容总结能力
7 提取执行引擎 规则执行核心流程
8 批量执行与异步任务 批量执行、进度跟踪
9 结果管理与人工干预 结果确认、修正 API
10 规则模板功能 模板保存与应用
11 集成与扩展 系统集成、文档完善

1.2 阶段依赖关系图

第一阶段(基础设施)
    │
    ▼
第二阶段(实体与Repository)
    │
    ├────────────────────────────────────────┐
    │                                        │
    ▼                                        ▼
第三阶段(项目与文档管理)              第五阶段(内容定位服务)
    │                                        │
    ▼                                        │
第四阶段(提取规则配置)                     │
    │                                        │
    ├──────► 第十阶段(规则模板)             │
    │                                        │
    │        第六阶段(AI提取服务)◄──────────┤
    │              │                         │
    │              ▼                         │
    └───────► 第七阶段(提取执行引擎)◄───────┘
                   │
        ┌──────────┴──────────┐
        ▼                     ▼
  第八阶段(批量执行)    第九阶段(结果管理)
        │                     │
        └──────────┬──────────┘
                   ▼
            第十一阶段(集成与扩展)

二、各阶段详细说明

第一阶段:基础设施搭建

2.1.1 目标

创建新模块 extract-service 的基础框架,确保服务可以启动并注册到服务中心。

2.1.2 工作内容

  1. 创建 Maven 模块

    • backend/ 下创建 extract-service 目录
    • 配置 pom.xml,依赖 common、mybatis-plus、nacos、openfeign 等
    • 在父 pom.xml 中添加子模块声明
  2. 创建启动类

    • ExtractServiceApplication.java
    • 配置 @EnableFeignClients@MapperScan 等注解
  3. 配置文件

    • application.propertiesapplication.yml
    • 配置服务端口(建议 8086)、数据库连接、Nacos 注册中心
  4. 网关路由

    • gateway-service 的路由配置中添加 extract-service 的路由规则
    • 路径前缀:/api/v1/extract/**
  5. 数据库表创建

    • 执行 SQL 脚本创建 5 张核心表
    • 表名:projects、source_documents、extract_rules、extract_results、rule_templates

2.1.3 验收标准

  • 服务可以正常启动
  • 服务注册到 Nacos 成功
  • 通过网关可以访问到服务的健康检查接口
  • 数据库表创建成功

2.1.4 依赖关系

无外部依赖,可独立完成。


第二阶段:核心实体与 Repository 层

2.2.1 目标

完成数据访问层,为上层业务逻辑提供数据操作能力。

2.2.2 工作内容

  1. 创建实体类(5 个)

    • Project.java - 项目实体
    • SourceDocument.java - 来源文档实体
    • ExtractRule.java - 提取规则实体
    • ExtractResult.java - 提取结果实体
    • RuleTemplate.java - 规则模板实体
  2. 创建 Repository 接口(5 个)

    • 继承 BaseMapper<T>
    • 添加自定义查询方法(使用 @Select 注解或 XML)
  3. 常用查询方法

| Repository | 方法 | | ---------- | ---- | | ProjectRepository | findByUserId, findByStatus | | SourceDocumentRepository | findByProjectId, findByDocumentId | | ExtractRuleRepository | findByProjectId, findByStatus, findByTargetFieldKey | | ExtractResultRepository | findByRuleId, findByProjectId, findByStatus | | RuleTemplateRepository | findByUserId, findPublicTemplates |

  1. 创建配置 DTO 类(约 15 个)

来源配置类:

  • SourceConfig.java - 基类/接口
  • DocumentSourceConfig.java - 文档来源配置
  • SelfReferenceSourceConfig.java - 自引用来源配置
  • FixedSourceConfig.java - 固定内容配置
  • ManualSourceConfig.java - 手动输入配置
  • LocationConfig.java - 定位配置
  • TransformConfig.java - 转换配置

提取配置类:

  • ExtractConfigBase.java - 基类/接口
  • DirectExtractConfig.java - 直接提取配置
  • AIExtractConfig.java - AI 提取配置
  • AISummarizeConfig.java - AI 总结配置
  • OcrExtractConfig.java - OCR 配置
  1. JSONB 序列化测试
    • 验证配置类可以正确序列化/反序列化到数据库 JSONB 字段

2.2.3 验收标准

  • 所有实体类创建完成,字段与数据库表对应
  • Repository 可以正常执行 CRUD 操作
  • JSONB 字段读写测试通过
  • 配置 DTO 类结构正确

2.2.4 依赖关系

依赖第一阶段完成。


第三阶段:项目与文档管理功能

2.3.1 目标

实现项目和来源文档的完整 CRUD 功能,支持用户创建项目并关联文档。

2.3.2 工作内容

  1. ProjectService

    • create(userId, request) - 创建项目
    • getById(id) - 获取项目详情
    • listByUserId(userId, pageRequest) - 分页查询用户的项目
    • update(id, request) - 更新项目
    • delete(id) - 删除项目(级联删除关联数据)
    • archive(id) - 归档项目
    • getProjectWithDocuments(id) - 获取项目详情(含来源文档列表)
  2. SourceDocumentService

    • add(projectId, request) - 添加来源文档
    • listByProjectId(projectId) - 获取项目的来源文档列表
    • update(id, request) - 更新来源文档信息
    • remove(id) - 移除来源文档
    • batchAdd(projectId, requests) - 批量添加来源文档
    • reorder(projectId, orders) - 调整文档顺序
  3. Controller 层

    • ProjectController - 项目管理 API
    • SourceDocumentController - 来源文档管理 API
  4. 请求/响应 DTO

    • CreateProjectRequest / UpdateProjectRequest
    • AddSourceDocumentRequest / BatchAddSourceDocumentsRequest
    • ProjectDetailResponse / ProjectListResponse
    • SourceDocumentResponse
  5. Feign Client 集成

    • 创建 DocumentServiceClient 接口
    • 调用 document-service 获取文档基本信息
    • 调用 document-service 检查文档解析状态
  6. 事件监听

    • 监听 DocumentParsedEvent 事件
    • 更新 SourceDocument 的 metadata 中的 parseStatus

2.3.3 验收标准

  • 可通过 API 创建项目
  • 可通过 API 添加来源文档到项目
  • 来源文档关联的 Document 信息可正确获取
  • 文档解析完成后状态自动更新
  • 项目删除时级联删除关联的来源文档和规则

2.3.4 依赖关系

  • 依赖第二阶段完成
  • 依赖 document-service 提供 Feign 接口

第四阶段:提取规则配置功能

2.4.1 目标

实现规则的配置与管理,支持多种来源类型和提取类型的配置。

2.4.2 工作内容

  1. ExtractRuleService

    • create(projectId, request) - 创建规则
    • getById(id) - 获取规则详情
    • listByProjectId(projectId) - 获取项目的规则列表(按 ruleIndex 排序)
    • update(id, request) - 更新规则
    • delete(id) - 删除规则
    • batchCreate(projectId, requests) - 批量创建规则
    • duplicate(id) - 复制规则
    • reorder(projectId, orders) - 调整规则顺序
    • validateConfig(rule) - 校验规则配置
  2. 配置校验逻辑

| 校验项 | 说明 | | ------ | ---- | | sourceType 与 sourceConfig 匹配 | document 类型必须有 sourceDocId 和 location | | extractType 与 extractConfig 匹配 | ai_extract 类型必须有 targetDescription | | self_reference 循环引用检测 | A 引用 B,B 引用 A 的情况 | | 必填字段校验 | targetFieldKey、targetFieldName 不能为空 | | targetFieldKey 唯一性 | 同一项目内 targetFieldKey 不能重复 |

  1. 依赖分析

    • analyzeDependencies(projectId) - 分析规则间的依赖关系
    • 返回依赖图(哪些规则依赖哪些字段)
    • 检测循环依赖
  2. Controller 层

    • ExtractRuleController
  3. 请求/响应 DTO

    • CreateRuleRequest / UpdateRuleRequest
    • BatchCreateRulesRequest
    • ReorderRulesRequest
    • RuleDetailResponse / RuleListResponse
    • DependencyAnalysisResponse

2.4.3 验收标准

  • 可通过 API 创建各种类型的规则
  • 规则配置校验正确拦截无效配置
  • 循环依赖可被检测
  • 批量创建和排序功能正常

2.4.4 依赖关系

依赖第三阶段完成。


第五阶段:内容定位服务

2.5.1 目标

实现从文档中定位和提取内容的能力,支持多种定位方式。

2.5.2 工作内容

  1. ContentLocatorService 接口

    locateElements(documentId, location) -> List<DocumentElement>
    locateContent(documentId, location) -> String
    locateByPage(documentId, pageStart, pageEnd, keyword) -> List<DocumentElement>
    locateByChapter(documentId, chapterPath, chapterTitle) -> List<DocumentElement>
    locateByElementIds(documentId, elementIds) -> List<DocumentElement>
    locateExcelCell(documentId, sheetName, cellRef) -> String
    
  2. 按页码定位实现

    • 调用 DocumentElementService 获取文档所有元素
    • 根据元素的页码信息(需扩展 DocumentElement 添加 pageNumber 字段,或从 metadata 获取)
    • 筛选指定页码范围内的元素
    • 支持段落关键词过滤(paragraphKeyword)
  3. 按章节定位实现

    • 解析章节路径(如 ["3", "5", "3", "3"] 表示 3.5.3.3)
    • 匹配 heading 类型元素的章节号(使用正则提取)
    • 定位到章节标题后,提取该章节下的所有内容(直到下一个同级或更高级标题)
  4. 按元素ID定位实现

    • 直接根据 elementIds 列表查询 DocumentElement
    • 适用于用户在界面上手动选择元素的场景
  5. Excel 定位实现

    • 调用 parse-service 的 ExcelTextExtractionService
    • 支持 Sheet 名 + 单元格范围定位(如 变电站扩建页 / A1:C10
    • 支持自定义格式(如 1.5.1 表示某种内部编号)
  6. 内容拼接

    • 将定位到的多个元素内容拼接为完整文本
    • 保留基本格式(段落分隔、表格文本等)
  7. Feign Client

    • 创建 DocumentElementServiceClient
    • 创建 ParseServiceClient(用于 Excel 解析)

2.5.3 验收标准

  • 按页码定位可正确提取内容
  • 按章节定位可正确识别章节范围
  • Excel 单元格定位可正确提取数据
  • 多元素内容拼接正确

2.5.4 依赖关系

  • 依赖第二阶段完成
  • 依赖 document-service 的 DocumentElementService
  • 依赖 parse-service 的 Excel 解析能力

第六阶段:AI 提取服务

2.6.1 目标

封装 AI 提取和总结功能,提供结构化的 AI 调用接口。

2.6.2 工作内容

  1. AIExtractService 接口

    extract(content, config) -> AIExtractResult
    summarize(content, config, context) -> AISummarizeResult
    
  2. AI 字段提取实现

    • 根据 AIExtractConfig 构建 Prompt
    • Prompt 模板包含:提取目标、字段类型、预期格式、示例
    • 调用 DeepSeekClient.complete() 执行
    • 解析返回结果,提取值
    • 评估置信度(可选,基于返回内容的匹配度)
  3. AI 内容总结实现

    • 根据 AISummarizeConfig 构建 Prompt
    • Prompt 模板包含:总结要求、关注维度、规则、风格、字数限制
    • 支持传入上下文字段值(contextFieldKeys 引用的已提取值)
    • 调用 DeepSeekClient.complete() 执行
  4. Prompt 模板管理

字段提取 Prompt 模板:

   你是一个专业的文档信息提取助手。请从以下文档内容中提取指定的信息。
   
   ## 提取目标
   {targetDescription}
   
   ## 字段类型
   {fieldType}
   
   ## 预期格式
   {expectedFormat}
   
   ## 示例
   {examples}
   
   ## 文档内容
   {content}
   
   ## 输出要求
   请直接输出提取的值,不要包含任何解释。

内容总结 Prompt 模板:

   你是一个专业的工程报告撰写助手。请对以下内容进行总结/提炼。
   
   ## 总结要求
   {summarizePrompt}
   
   ## 关注维度
   {focusPoints}
   
   ## 总结规则
   {rules}
   
   ## 输出风格
   {style}
   
   ## 字数限制
   {maxLength} 字以内
   
   ## 原文内容
   {content}
  1. 错误处理与重试

    • AI 调用超时重试(最多 3 次)
    • 返回结果为空时的处理
    • Token 超限时的内容截断策略
  2. 结果数据结构

    • AIExtractResult: value, confidence, reasoning
    • AISummarizeResult: summary, keyPoints

2.6.3 验收标准

  • AI 字段提取可正确提取工程名称、日期等字段
  • AI 内容总结可生成符合要求的总结
  • Prompt 模板参数替换正确
  • 错误处理和重试机制正常

2.6.4 依赖关系

  • 依赖 ai-service 的 DeepSeekClient
  • 可与第五阶段并行开发

第七阶段:提取执行引擎

2.7.1 目标

实现规则执行的核心流程,是整个系统的核心模块。

2.7.2 工作内容

  1. Executor 策略模式

    interface ExtractExecutor {
       boolean supports(String extractType);
       ExtractResult execute(ExtractRule rule, String sourceContent);
    }
    

实现类:

  • DirectExtractExecutor - 直接提取
  • AIExtractExecutor - AI 字段提取
  • AISummarizeExecutor - AI 总结提炼
  • OcrExtractExecutor - OCR 识别(可选,后续实现)
  1. DirectExtractExecutor 实现

    • 根据 DirectExtractConfig 处理内容
    • trimWhitespace - 去除首尾空白
    • removeLineBreaks - 移除换行符
    • mergeSpaces - 合并连续空格
    • 直接返回处理后的文本
  2. AIExtractExecutor 实现

    • 调用 AIExtractService.extract()
    • 将 AIExtractResult 转换为 ExtractResult
  3. AISummarizeExecutor 实现

    • 获取上下文字段值(contextFieldKeys)
    • 调用 AIExtractService.summarize()
    • 将 AISummarizeResult 转换为 ExtractResult
  4. ExtractExecuteService 核心流程

    executeRule(ruleId):
       1. 获取规则配置 ExtractRule
       2. 根据 sourceType 获取来源内容
          - document: 调用 ContentLocatorService
          - self_reference: 查询已提取的字段值
          - fixed: 返回 fixedContent
          - manual: 返回 defaultValue 或标记为待填写
       3. 选择对应的 Executor 执行提取
       4. 创建 ExtractResult 记录
          - 保存提取值
          - 保存来源追溯信息(sourceContent, sourceLocation)
       5. 更新 ExtractRule 的 status 和 extracted_value
       6. 返回结果
    
  5. self_reference 处理

    • 查询引用字段的已提取值
    • 如果引用字段未提取,返回错误或标记依赖
    • 支持多字段组合(combineTemplate)
    • 支持值转换(transform)
  6. 来源追溯信息

    {
     "documentId": "doc_001",
     "documentAlias": "可研批复",
     "locationType": "page",
     "pageStart": 1,
     "pageEnd": 2,
     "elementIds": ["elem_001", "elem_002"],
     "textPreview": "本项目建设必要性主要体现在..."
    }
    
  7. 状态管理

    • pending → extracting → extracted/error
    • 更新 ExtractRule.status
    • 更新 ExtractRule.extracted_value
    • 错误时保存 error_message

2.7.3 验收标准

  • DirectExtractExecutor 可正确直接提取内容
  • AIExtractExecutor 可正确调用 AI 提取
  • AISummarizeExecutor 可正确调用 AI 总结
  • self_reference 类型可正确引用已提取值
  • 来源追溯信息完整保存
  • 状态更新正确

2.7.4 依赖关系

  • 依赖第五阶段(ContentLocatorService)
  • 依赖第六阶段(AIExtractService)
  • 这是系统的核心阶段

第八阶段:批量执行与异步任务

2.8.1 目标

支持批量执行规则和后台异步任务,提供进度跟踪能力。

2.8.2 工作内容

  1. 规则依赖排序

    • 分析 self_reference 的依赖关系
    • 构建依赖图(DAG)
    • 拓扑排序确定执行顺序
    • 识别可并行执行的规则组(同一层级无依赖的规则)
  2. 批量执行实现

    executeRules(ruleIds):
       1. 获取所有规则
       2. 依赖排序
       3. 按顺序执行(或并行执行同层级规则)
       4. 返回所有结果
       
    executeProject(projectId):
       1. 获取项目所有规则
       2. 调用 executeRules
    
  3. 异步执行实现

    • 使用 @Async 或线程池执行
    • 或使用 RabbitMQ 消息队列(复用 parse-service 的模式)
    • 返回任务 ID
  4. 进度跟踪

    • 使用 Redis 存储执行进度
    • 数据结构:extract_task:{taskId} -> {total, completed, failed, currentRule, status}
    • 提供 SSE 或轮询接口查询进度
  5. Controller 层

    • ExtractExecuteController
    • POST /projects/{projectId}/execute - 执行项目
    • POST /rules/{ruleId}/execute - 执行单条
    • POST /rules/batch-execute - 批量执行
    • POST /rules/{ruleId}/preview - 预览
    • POST /rules/{ruleId}/retry - 重试
    • GET /tasks/{taskId}/progress - 获取进度
  6. 预览功能

    • 执行提取但不保存结果
    • 返回预览内容和来源信息
  7. 重试功能

    • 清除旧的提取结果
    • 重新执行规则

2.8.3 验收标准

  • 依赖排序正确
  • 批量执行按正确顺序执行
  • 异步执行可正常工作
  • 进度可实时查询
  • 预览和重试功能正常

2.8.4 依赖关系

依赖第七阶段完成。


第九阶段:结果管理与人工干预

2.9.1 目标

支持结果查看、确认、修正等人工干预操作。

2.9.2 工作内容

  1. ExtractResultService

    • listByProjectId(projectId) - 获取项目所有结果
    • listByRuleId(ruleId) - 获取规则的结果历史
    • getById(id) - 获取结果详情
    • confirm(id, userId) - 确认结果
    • reject(id, userId, reason) - 拒绝结果
    • modify(id, modifiedValue, userId) - 修正结果
    • batchConfirm(projectId, userId) - 批量确认所有待确认结果
  2. 状态流转

    extracted ──► confirmed(确认)
            ──► rejected(拒绝)
            ──► modified(修正)
    
  3. Controller 层

    • ExtractResultController
    • GET /projects/{projectId}/results - 项目结果列表
    • GET /rules/{ruleId}/results - 规则结果历史
    • POST /results/{id}/confirm - 确认
    • POST /results/{id}/reject - 拒绝
    • PUT /results/{id}/modify - 修正
    • POST /projects/{projectId}/results/confirm-all - 批量确认
  4. 响应 DTO

    • ExtractResultResponse - 包含来源追溯信息
    • ResultListResponse - 结果列表(含统计)
  5. 统计信息

    • 项目结果统计:总数、已确认、待确认、已拒绝
    • 提取成功率统计

2.9.3 验收标准

  • 结果查询 API 正常
  • 确认/拒绝/修正操作正常
  • 批量确认功能正常
  • 来源追溯信息可正确展示
  • 统计信息正确

2.9.4 依赖关系

依赖第七阶段完成。


第十阶段:规则模板功能

2.10.1 目标

支持规则配置的保存和复用,提高配置效率。

2.10.2 工作内容

  1. RuleTemplateService

    • create(userId, request) - 创建模板
    • getById(id) - 获取模板详情
    • listByUserId(userId) - 用户的模板列表
    • listPublic() - 公开模板列表
    • delete(id) - 删除模板
    • saveFromProject(projectId, name, description) - 从项目保存为模板
    • applyToProject(templateId, projectId) - 应用模板到项目
  2. 保存为模板

    • 快照项目当前的所有规则配置
    • 移除项目特定信息(projectId、sourceDocId)
    • 保存 documentAlias 作为文档匹配依据
  3. 应用模板

    • 根据 documentAlias 匹配项目中的来源文档
    • 创建规则副本,绑定到匹配的来源文档
    • 未匹配的规则标记为需要手动配置
  4. Controller 层

    • RuleTemplateController
    • POST /templates - 创建模板
    • GET /templates - 模板列表
    • GET /templates/{id} - 模板详情
    • DELETE /templates/{id} - 删除模板
    • POST /templates/{id}/apply - 应用模板
    • POST /projects/{projectId}/save-as-template - 保存为模板
  5. 模板分享

    • 支持设置模板为公开/私有
    • 公开模板所有用户可见

2.10.3 验收标准

  • 可将项目规则保存为模板
  • 可将模板应用到新项目
  • 模板应用时文档匹配正确
  • 公开/私有模板功能正常

2.10.4 依赖关系

依赖第四阶段完成,可与后续阶段并行开发。


第十一阶段:集成与扩展

2.11.1 目标

完善系统集成、错误处理、日志和文档。

2.11.2 工作内容

  1. 与 DataSourceService 集成

    • 提供将提取结果注册为数据源的功能
    • registerAsDataSource(resultId, userId) -> DataSource
    • 支持批量注册项目所有结果
    • 用于后续报告生成使用
  2. 错误处理完善

    • 定义错误码枚举 ExtractErrorCode
    • 统一异常类 ExtractException
    • 全局异常处理器

| 错误码 | 说明 | | ------ | ---- | | EXTRACT_001 | 项目不存在 | | EXTRACT_002 | 来源文档不存在 | | EXTRACT_003 | 规则配置无效 | | EXTRACT_004 | 文档未解析完成 | | EXTRACT_005 | 内容定位失败 | | EXTRACT_006 | AI 提取失败 | | EXTRACT_007 | 引用的字段未提取 | | EXTRACT_008 | 循环引用 |

  1. 日志完善

    • 规则执行日志(开始、结束、耗时)
    • AI 调用日志(Prompt、Token 使用)
    • 错误日志(详细错误信息)
  2. API 文档

    • 配置 SpringDoc/Swagger
    • 完善接口注释和示例
    • 生成 OpenAPI 文档
  3. 性能优化

    • 批量查询优化
    • AI 调用缓存(相同内容+配置的缓存)
    • 内容定位结果缓存
  4. 单元测试

    • Service 层单元测试
    • Executor 单元测试
    • 配置校验测试
  5. 集成测试

    • 完整流程测试(创建项目→配置规则→执行→确认)
    • 边界条件测试

2.11.3 验收标准

  • 提取结果可注册为数据源
  • 错误处理统一规范
  • 日志记录完整
  • API 文档可访问
  • 核心测试通过

2.11.4 依赖关系

依赖前面所有阶段完成。


三、开发优先级建议

3.1 MVP(最小可行产品)路径

目标:跑通「创建项目 → 添加文档 → 配置规则 → 直接提取 → 查看结果」的完整流程。

第一阶段 → 第二阶段 → 第三阶段 → 第四阶段 → 第五阶段 → 
第七阶段(仅 DirectExtractExecutor)→ 第九阶段

预计产出:

  • 可创建项目和添加文档
  • 可配置直接提取规则
  • 可执行直接提取并查看结果
  • 不含 AI 能力

3.2 第二优先级

目标:添加 AI 提取能力

第六阶段 + 第七阶段完善(AIExtractExecutor、AISummarizeExecutor)

预计产出:

  • AI 字段提取能力
  • AI 内容总结能力

3.3 第三优先级

目标:提升效率和体验

第八阶段(批量执行、异步任务)+ 第十阶段(规则模板)

预计产出:

  • 批量执行项目规则
  • 异步执行和进度跟踪
  • 规则模板复用

3.4 最后完善

目标:系统完善

第十一阶段(集成与扩展)

预计产出:

  • 与数据源集成
  • 完善的错误处理和日志
  • API 文档和测试

四、风险与注意事项

4.1 技术风险

风险 影响 缓解措施
AI 提取准确率不稳定 提取结果需要大量人工修正 优化 Prompt、提供人工修正功能
文档解析不完整 章节定位失败 增强解析能力、支持手动选择元素
大文档性能问题 执行超时 分批处理、异步执行

4.2 依赖风险

依赖 风险 缓解措施
document-service 接口变更 定义清晰的 Feign 接口契约
DeepSeekClient API 不稳定 重试机制、降级方案
parse-service Excel 解析能力不足 按需扩展解析能力

4.3 注意事项

  1. 数据库事务

    • 规则执行时使用事务,失败时回滚
    • 批量操作注意事务边界
  2. 并发控制

    • 同一规则不能同时执行
    • 使用 Redis 分布式锁
  3. 数据清理

    • 项目删除时级联清理所有数据
    • 定期清理已归档项目的提取结果
  4. 安全性

    • 校验用户对项目的访问权限
    • 敏感信息不记录到日志

五、附录:文件清单预览

5.1 extract-service 模块结构

backend/extract-service/
├── pom.xml
└── src/main/java/com/lingyue/extract/
    ├── ExtractServiceApplication.java
    ├── config/
    │   ├── ExtractConfig.java
    │   └── FeignConfig.java
    ├── controller/
    │   ├── ProjectController.java
    │   ├── SourceDocumentController.java
    │   ├── ExtractRuleController.java
    │   ├── ExtractExecuteController.java
    │   ├── ExtractResultController.java
    │   └── RuleTemplateController.java
    ├── dto/
    │   ├── request/
    │   │   ├── CreateProjectRequest.java
    │   │   ├── UpdateProjectRequest.java
    │   │   ├── AddSourceDocumentRequest.java
    │   │   ├── CreateRuleRequest.java
    │   │   ├── UpdateRuleRequest.java
    │   │   ├── BatchCreateRulesRequest.java
    │   │   ├── ExecuteRulesRequest.java
    │   │   ├── ConfirmResultRequest.java
    │   │   ├── ModifyResultRequest.java
    │   │   └── SaveAsTemplateRequest.java
    │   ├── response/
    │   │   ├── ProjectDetailResponse.java
    │   │   ├── ProjectListResponse.java
    │   │   ├── SourceDocumentResponse.java
    │   │   ├── RuleDetailResponse.java
    │   │   ├── RuleListResponse.java
    │   │   ├── ExtractResultResponse.java
    │   │   ├── ResultListResponse.java
    │   │   ├── ExecuteProgressResponse.java
    │   │   ├── PreviewResponse.java
    │   │   └── TemplateDetailResponse.java
    │   └── config/
    │       ├── SourceConfig.java
    │       ├── DocumentSourceConfig.java
    │       ├── SelfReferenceSourceConfig.java
    │       ├── FixedSourceConfig.java
    │       ├── ManualSourceConfig.java
    │       ├── LocationConfig.java
    │       ├── TransformConfig.java
    │       ├── ExtractConfigBase.java
    │       ├── DirectExtractConfig.java
    │       ├── AIExtractConfig.java
    │       ├── AISummarizeConfig.java
    │       └── OcrExtractConfig.java
    ├── entity/
    │   ├── Project.java
    │   ├── SourceDocument.java
    │   ├── ExtractRule.java
    │   ├── ExtractResult.java
    │   └── RuleTemplate.java
    ├── repository/
    │   ├── ProjectRepository.java
    │   ├── SourceDocumentRepository.java
    │   ├── ExtractRuleRepository.java
    │   ├── ExtractResultRepository.java
    │   └── RuleTemplateRepository.java
    ├── service/
    │   ├── ProjectService.java
    │   ├── SourceDocumentService.java
    │   ├── ExtractRuleService.java
    │   ├── ExtractExecuteService.java
    │   ├── ExtractResultService.java
    │   ├── ContentLocatorService.java
    │   ├── AIExtractService.java
    │   └── RuleTemplateService.java
    ├── executor/
    │   ├── ExtractExecutor.java
    │   ├── DirectExtractExecutor.java
    │   ├── AIExtractExecutor.java
    │   ├── AISummarizeExecutor.java
    │   └── OcrExtractExecutor.java
    ├── client/
    │   ├── DocumentServiceClient.java
    │   ├── DocumentElementServiceClient.java
    │   └── ParseServiceClient.java
    ├── exception/
    │   ├── ExtractException.java
    │   ├── ExtractErrorCode.java
    │   └── ExtractExceptionHandler.java
    └── listener/
        └── DocumentParsedEventListener.java

文档结束