Skip to content

feature: add sync service in semantic#32

Open
mengnankkkk wants to merge 10 commits into
mainfrom
feature/add_sync_datasource
Open

feature: add sync service in semantic#32
mengnankkkk wants to merge 10 commits into
mainfrom
feature/add_sync_datasource

Conversation

@mengnankkkk

@mengnankkkk mengnankkkk commented Jul 4, 2026

Copy link
Copy Markdown
Member

后端主要修改总结:

包结构调整与导入更新:

DomainService 及其实现类 DomainServiceImpl 被移动到 io.github.malonetalk.service.semantic 包下。
相关的 GetDomainsTool 和 DomainController 中的导入路径也随之更新。

新增控制器和功能模块:

TableRelationWorkspaceController.java:新增了一个REST控制器,用于提供语义表关系工作区的接口,包含一个GET方法来获取工作区数据。
TableSemanticSyncController.java:新增了一个REST控制器,用于处理语义表同步功能,包括:
获取物理表候选列表 (GET /candidates)。
同步语义表 (POST /)。
刷新物理状态 (POST /physical-status)。

新增语义同步和关系工作区相关的DTOs(数据传输对象):

PhysicalTableCandidatePageQuery
PhysicalTableCandidateResponse
RefreshPhysicalStatusRequest
RelationWorkspaceColumnResponse
RelationWorkspacePageQuery
RelationWorkspaceResponse
RelationWorkspaceTableResponse
SyncTableResult
SyncTableSemanticsRequest
SyncTableSemanticsResponse
这些DTOs定义了新功能所需的数据结构。

实体类增强 (ColumnInfo.java, TableInfo.java):

ColumnInfo 实体新增了 physicalColumnDescription、typeName、primaryKey 和 physicalStatus 字段,用于缓存物理列的信息和状态。
TableInfo 实体新增了 physicalTableDescription 和 physicalStatus 字段,用于缓存物理表的信息和状态。
####Mapper层更新:

ColumnSemanticInfoMapper 新增了按多个表名查询列信息的方法,并将原有的 update 方法拆分为 updateSemanticFields 和 updatePhysicalCacheFields,以区分语义数据和物理缓存数据的更新。
LogicalTableRelationMapper 新增了按多个源表名查询逻辑表关系的方法。
TableInfoMapper 也将原有的 update 方法拆分为 updateSemanticFields 和 updatePhysicalCacheFields。

语义服务层增强和新服务引入:

PromptConverter.java:修改了列和表的Prompt映射逻辑,引入 SemanticAvailabilityHelper 和 SemanticUtils.firstNonBlank 来更健壮地处理语义可见性和描述。
SemanticConverter.java:增强了转换为响应对象时的逻辑,包含了物理描述、类型、主键以及可用性/不可用原因等信息,并新增了 toWorkspaceTable 和 toWorkspaceColumn 方法支持工作区功能。
SemanticAvailabilityHelper.java (新文件):引入了一个全新的工具类,集中处理语义表和列的可用性检查逻辑,定义了 UsageLevel (AI_PROMPT, FRONTEND_DISPLAY, USER_OPERATION),并提供了判断可用性、获取物理状态、获取不可用原因等方法。
SemanticMergeService.java:更新了表和列名称的规范化方式(使用 SemanticUtils.objectKey),并利用 SemanticAvailabilityHelper 进行表可见性检查。
ColumnSemanticServiceImpl.java:更新了名称规范化和使用新的 updateSemanticFields 方法,并在新增列时设置 physicalStatus。
LogicalTableRelationHelper.java:更新了表和列名称的规范化逻辑。
RelationSemanticService.java (接口) 和 RelationSemanticServiceImpl.java:
RelationSemanticService 接口新增 getRelationWorkspace 方法。
RelationSemanticServiceImpl 实现了 getRelationWorkspace 方法,用于分页获取表节点和关系,支持关系工作区功能。
引入了 ensureRelationOperandsOperable、ensureTableOperable 和 ensureColumnsOperable 方法,以在创建或更新关系时,基于 SemanticAvailabilityHelper 校验参与关系的表和列是否可操作。
SemanticSyncApplyService.java (新文件):引入了一个重要的全新服务,负责处理语义同步的具体应用逻辑,包括:
ensureTablePresent 和 ensureColumnPresent:确保物理表和列在语义层存在,并处理新增、重新激活和更新逻辑。
markMissingTable 和 markMissingColumns:将语义层中不再有对应物理实体的表和列标记为缺失。
定义了 TableSyncDiff 和 ColumnSyncDiff 记录用于跟踪同步结果。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants