版本: 2.0.0 日期: 2026-01-23 作者: AI Assistant (Claude Opus 4.5) 关联文档: 数据提取规则系统设计.md
本文档规划「数据提取规则系统」的代码实现阶段。
设计理念变更(v2.0):
| 阶段 | 名称 | 主要产出 | 预估工作量 | 状态 |
|---|---|---|---|---|
| 1 | 数据模型重构 | 新表结构、实体类重构 | 中 | ✅ 已完成 |
| 2 | 模板管理 | Template 的 CRUD API | 中 | ⏳ 待开发 |
| 3 | 来源文件定义 | SourceFile 的 CRUD API | 小 | ⏳ 待开发 |
| 4 | 变量管理 | Variable 的 CRUD API | 中 | ⏳ 待开发 |
| 5 | 内容定位服务 | 按页码/章节/元素定位 | 中 | ⏳ 待开发 |
| 6 | AI 提取服务 | AI 字段提取、总结 | 中 | ⏳ 待开发 |
| 7 | 生成任务管理 | Generation 的 CRUD API | 中 | ⏳ 待开发 |
| 8 | 提取执行引擎 | 变量提取核心流程 | 大 | ⏳ 待开发 |
| 9 | 文档生成 | 替换变量、输出文档 | 中 | ⏳ 待开发 |
| 10 | 集成与优化 | 系统集成、性能优化 | 中 | ⏳ 待开发 |
当前进度: 1/10 阶段完成 (10%)
备注: v1.x 版本已完成的代码需要重构以适应新设计
第一阶段(数据模型重构)
│
├─────────────────────────────────────┐
▼ ▼
第二阶段(模板管理) 第五阶段(内容定位服务)
│ │
▼ │
第三阶段(来源文件定义) │
│ │
▼ │
第四阶段(变量管理) │
│ │
│ 第六阶段(AI提取服务)◄───┤
│ │ │
▼ ▼ │
第七阶段(生成任务管理) │
│ │
▼ │
第八阶段(提取执行引擎)◄─────────────────┘
│
▼
第九阶段(文档生成)
│
▼
第十阶段(集成与优化)
根据新设计重构数据模型,创建新的数据库表和实体类。
数据库迁移
templates、source_files、variables、generations实体类重构
Template.java - 模板实体(替代 Project)SourceFile.java - 来源文件定义(替代 SourceDocument)Variable.java - 变量(替代 ExtractRule)Generation.java - 生成任务(新增)Repository 重构
TemplateRepositorySourceFileRepositoryVariableRepositoryGenerationRepositoryDTO 类更新
VariableLocation)✅ 已完成 (2026-01-23)
实现概要:
- 数据库迁移脚本:V2026_01_23_01__refactor_extract_to_template.sql
- 新表:templates, source_files, variables, generations
- 实体类:Template, SourceFile, Variable, Generation
- DTO:VariableLocation, ReferenceSourceConfig
- Repository:TemplateRepository, SourceFileRepository, VariableRepository, GenerationRepository
现有代码处理方案:
Project → 重构为 TemplateSourceDocument → 重构为 SourceFileExtractRule → 重构为 VariableProjectService → 重构为 TemplateService实现模板的完整 CRUD 功能。
TemplateService
create(userId, request) - 创建模板getById(id) - 获取模板详情listByUserId(userId, pageRequest) - 分页查询update(id, request) - 更新模板delete(id) - 删除模板(级联删除)publish(id) - 发布模板duplicate(id) - 复制模板getTemplateWithDetails(id) - 获取完整详情(含来源文件和变量)请求/响应 DTO
CreateTemplateRequestUpdateTemplateRequestTemplateDetailResponseTemplateListResponseTemplateController
实现来源文件定义的管理功能。
SourceFileService
add(templateId, request) - 添加来源文件定义listByTemplateId(templateId) - 获取列表update(id, request) - 更新定义remove(id) - 删除定义reorder(templateId, orders) - 调整顺序请求/响应 DTO
AddSourceFileRequestUpdateSourceFileRequestSourceFileResponseSourceFileController
实现变量的创建和管理功能。
VariableService
create(templateId, request) - 创建变量getById(id) - 获取变量详情listByTemplateId(templateId) - 获取列表update(id, request) - 更新变量delete(id) - 删除变量validateConfig(variable) - 校验配置checkReferenceLoop(variable) - 检查引用循环变量位置 DTO
@Data
public class VariableLocation {
private String elementId; // DocumentElement ID
private String type; // text | table_cell | paragraph
private Integer startOffset; // 文本起始位置
private Integer endOffset; // 文本结束位置
private Integer rowIndex; // 表格行
private Integer colIndex; // 表格列
}
请求/响应 DTO
CreateVariableRequestUpdateVariableRequestVariableDetailResponseVariableController
实现从文档中定位内容的能力。
ContentLocatorService
locateByPage(documentId, pageStart, pageEnd, keyword) - 按页码定位locateByChapter(documentId, chapterPath) - 按章节定位locateByElement(documentId, elementIds) - 按元素ID定位locateExcelCell(documentId, sheetName, cellRef) - Excel单元格定位getContent(documentId, location) - 获取定位到的内容与 document-service 集成
封装 AI 提取和总结功能。
AIExtractService
extract(content, config) - AI 字段提取summarize(content, config) - AI 内容总结buildPrompt(config) - 构建 PromptPrompt 模板管理
结果数据结构
AIExtractResult: value, confidenceAISummarizeResult: summary实现生成任务的管理功能。
GenerationService
create(request) - 创建生成任务getById(id) - 获取任务详情listByUserId(userId, pageRequest) - 分页查询updateVariableValue(generationId, varName, value) - 修改变量值delete(id) - 删除任务来源文件映射验证
请求/响应 DTO
CreateGenerationRequestGenerationDetailResponseUpdateVariableValueRequestGenerationController
实现变量提取的核心执行流程。
变量执行器策略模式
interface VariableExtractor {
boolean supports(String sourceType, String extractType);
ExtractedValue extract(Variable variable, Generation generation);
}
实现类:
DocumentDirectExtractor - 文档直接提取DocumentAIExtractor - 文档AI提取DocumentAISummarizer - 文档AI总结ManualValueExtractor - 手动输入(返回待填写状态)ReferenceValueExtractor - 引用其他变量FixedValueExtractor - 固定值执行服务
ExecutionService.execute(generationId) - 执行所有变量提取ExecutionService.executeVariable(generationId, varName) - 执行单个变量ExecutionService.preview(generationId, varName) - 预览提取结果依赖排序
进度跟踪
将提取的变量值替换到模板文档中,生成新文档。
DocumentGeneratorService
generate(generationId) - 生成文档replaceVariables(document, variableValues) - 替换变量saveOutput(generationId, document) - 保存输出文档变量替换逻辑
文档输出
完善系统集成、错误处理和性能优化。
错误处理
日志完善
性能优化
API 文档
测试
目标:跑通「创建模板 → 标记变量 → 生成报告」的完整流程。
第一阶段 → 第二阶段 → 第三阶段 → 第四阶段 →
第五阶段 → 第七阶段 → 第八阶段(仅 direct 提取)→ 第九阶段
MVP 功能:
目标:添加 AI 提取能力
第六阶段 + 第八阶段完善(AI 提取器)
目标:完善用户体验
第十阶段(集成与优化)
| 风险 | 影响 | 缓解措施 |
|---|---|---|
| 变量位置偏移 | 文档修改后变量位置不准确 | 使用 Element ID 定位,而非绝对偏移 |
| AI 提取不稳定 | 提取结果需人工修正 | 提供预览和修改功能 |
| 大文档性能 | 解析和替换耗时 | 异步处理、进度显示 |
| 现有文件 | 处理方式 |
|---|---|
entity/Project.java |
重构为 Template.java |
entity/SourceDocument.java |
重构为 SourceFile.java |
entity/ExtractRule.java |
重构为 Variable.java |
entity/ExtractResult.java |
删除,结果存储在 Generation.variable_values |
entity/RuleTemplate.java |
删除,模板功能合并到 Template |
service/ProjectService.java |
重构为 TemplateService.java |
service/SourceDocumentService.java |
重构为 SourceFileService.java |
dto/config/* |
大部分复用,部分调整 |
backend/extract-service/
├── pom.xml
└── src/main/java/com/lingyue/extract/
├── ExtractServiceApplication.java
├── config/
│ └── ExtractConfig.java
├── controller/
│ ├── TemplateController.java
│ ├── SourceFileController.java
│ ├── VariableController.java
│ └── GenerationController.java
├── dto/
│ ├── request/
│ │ ├── CreateTemplateRequest.java
│ │ ├── UpdateTemplateRequest.java
│ │ ├── AddSourceFileRequest.java
│ │ ├── CreateVariableRequest.java
│ │ ├── UpdateVariableRequest.java
│ │ ├── CreateGenerationRequest.java
│ │ └── UpdateVariableValueRequest.java
│ ├── response/
│ │ ├── TemplateDetailResponse.java
│ │ ├── TemplateListResponse.java
│ │ ├── SourceFileResponse.java
│ │ ├── VariableDetailResponse.java
│ │ ├── GenerationDetailResponse.java
│ │ └── ExecuteProgressResponse.java
│ └── config/
│ ├── VariableLocation.java
│ ├── SourceConfig.java
│ ├── DocumentSourceConfig.java
│ ├── ManualSourceConfig.java
│ ├── ReferenceSourceConfig.java
│ ├── FixedSourceConfig.java
│ ├── ExtractConfig.java
│ ├── DirectExtractConfig.java
│ ├── AIExtractConfig.java
│ └── AISummarizeConfig.java
├── entity/
│ ├── Template.java
│ ├── SourceFile.java
│ ├── Variable.java
│ └── Generation.java
├── repository/
│ ├── TemplateRepository.java
│ ├── SourceFileRepository.java
│ ├── VariableRepository.java
│ └── GenerationRepository.java
├── service/
│ ├── TemplateService.java
│ ├── SourceFileService.java
│ ├── VariableService.java
│ ├── GenerationService.java
│ ├── ExecutionService.java
│ ├── ContentLocatorService.java
│ ├── AIExtractService.java
│ └── DocumentGeneratorService.java
└── extractor/
├── VariableExtractor.java
├── DocumentDirectExtractor.java
├── DocumentAIExtractor.java
├── DocumentAISummarizer.java
├── ManualValueExtractor.java
├── ReferenceValueExtractor.java
└── FixedValueExtractor.java
文档结束