版本: 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 | 集成与优化 | 系统集成、性能优化 | 中 | ⏳ 待开发 |
当前进度: 8/10 阶段完成 (80%)
备注: 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
✅ 已完成 (2026-01-23)
实现概要:
- TemplateService: create, getById, getTemplateDetail, listByUserId, update, delete, publish, archive, duplicate
- TemplateController: 完整 RESTful API
- DTO: CreateTemplateRequest, UpdateTemplateRequest, TemplateDetailResponse, TemplateListResponse
实现来源文件定义的管理功能。
SourceFileService
add(templateId, request) - 添加来源文件定义listByTemplateId(templateId) - 获取列表update(id, request) - 更新定义remove(id) - 删除定义reorder(templateId, orders) - 调整顺序请求/响应 DTO
AddSourceFileRequestUpdateSourceFileRequestSourceFileResponseSourceFileController
✅ 已完成 (2026-01-23)
实现概要:
- SourceFileService: add, batchAdd, getById, listByTemplateId, update, delete, forceDelete
- 集成到 TemplateController(/api/v1/templates/{templateId}/source-files)
- DTO: AddSourceFileRequest, SourceFileResponse
实现变量的创建和管理功能。
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
✅ 已完成 (2026-01-23)
实现概要:
- VariableService: add, batchAdd, getById, getByName, listByTemplateId, update, delete, forceDelete
- 支持按来源文件、来源类型、分组过滤
- 引用变量检测: findReferencingVariables
- 集成到 TemplateController(/api/v1/templates/{templateId}/variables)
- DTO: AddVariableRequest, VariableResponse
实现从文档中定位内容的能力。
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✅ 已完成 (2026-01-24)
实现概要:
- ExtractionService: extractByAI(), summarizeByAI(), callAIService()
- 支持调用 ai-service 的 DeepSeek API
- Prompt 模板构建: buildExtractionPrompt(), buildSummarizePrompt()
实现生成任务的管理功能。
GenerationService
create(request) - 创建生成任务getById(id) - 获取任务详情listByUserId(userId, pageRequest) - 分页查询updateVariableValue(generationId, varName, value) - 修改变量值delete(id) - 删除任务来源文件映射验证
请求/响应 DTO
CreateGenerationRequestGenerationDetailResponseUpdateVariableValueRequestGenerationController
✅ 已完成 (2026-01-24)
实现概要:
- GenerationService: create, getById, getDetail, listByUserId, delete
- GenerationController: 完整 RESTful API
- DTO: CreateGenerationRequest, GenerationResponse, UpdateVariableValueRequest
实现变量提取的核心执行流程。
变量执行器策略模式
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) - 预览提取结果依赖排序
进度跟踪
✅ 已完成 (2026-01-24)
实现概要:
- ExtractionService: executeExtraction(), processReferenceVariables()
- 支持 4 种来源类型: document, manual, reference, fixed
- 支持 3 种提取类型: direct, ai_extract, ai_summarize
- 异步执行 + 进度跟踪
- 预览接口: previewExtract()
将提取的变量值替换到模板文档中,生成新文档。
DocumentGeneratorService
generate(generationId) - 生成文档replaceVariables(document, variableValues) - 替换变量saveOutput(generationId, document) - 保存输出文档变量替换逻辑
文档输出
✅ 已完成 (2026-01-24)
实现概要:
- DocumentGenerationService: generateDocument(), getOutputFileResource()
- 生成文本报告(基础版,TODO: Word 格式)
- 文件下载: ResponseEntity
- 下载信息接口: getDownloadInfo()
第十阶段:集成与优化
2.10.1 目标
完善系统集成、错误处理和性能优化。
2.10.2 工作内容
错误处理
- 定义错误码
- 统一异常处理
- 友好的错误提示
日志完善
- 变量执行日志
- AI 调用日志
性能优化
- 批量查询优化
- AI 调用缓存
API 文档
- SpringDoc/Swagger 配置
- 接口注释完善
测试
- 单元测试
- 集成测试
- 完整流程测试
2.10.3 验收标准
- 错误处理完善
- 日志记录完整
- API 文档可访问
- 核心测试通过
三、开发优先级建议
3.1 MVP(最小可行产品)路径
目标:跑通「创建模板 → 标记变量 → 生成报告」的完整流程。
第一阶段 → 第二阶段 → 第三阶段 → 第四阶段 → 第五阶段 → 第七阶段 → 第八阶段(仅 direct 提取)→ 第九阶段MVP 功能:
- 可创建模板并添加来源文件定义
- 可创建变量(仅支持 document + direct 类型)
- 可创建生成任务并上传来源文件
- 可执行提取并生成文档
3.2 第二优先级
目标:添加 AI 提取能力
第六阶段 + 第八阶段完善(AI 提取器)3.3 第三优先级
目标:完善用户体验
第十阶段(集成与优化)
四、风险与注意事项
4.1 技术风险
风险 影响 缓解措施 变量位置偏移 文档修改后变量位置不准确 使用 Element ID 定位,而非绝对偏移 AI 提取不稳定 提取结果需人工修正 提供预览和修改功能 大文档性能 解析和替换耗时 异步处理、进度显示 4.2 现有代码处理
现有文件 处理方式 entity/Project.java重构为 Template.javaentity/SourceDocument.java重构为 SourceFile.javaentity/ExtractRule.java重构为 Variable.javaentity/ExtractResult.java删除,结果存储在 Generation.variable_values entity/RuleTemplate.java删除,模板功能合并到 Template service/ProjectService.java重构为 TemplateService.javaservice/SourceDocumentService.java重构为 SourceFileService.javadto/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
文档结束