行业包数据一致性详细方案设计
一、 背景说明
在行业包系统集成场景下,MBM 作为主数据平台,需要向行业包提供资源数据。行业包通过拉取日志与资源接口实现资源同步,保证业务数据的一致性和完整性。
目标
● 提供统一的资源变更获取方式(日志拉取)。
● 行业包能够根据变更日志,查询指定资源的完整信息。
● 确保数据传输的一致性、可靠性和可追溯性。
● 支持按资源类型、时间增量拉取,减少冗余数据传输。
二、 数据流程
1、 拉取变更日志(行业包 -> MBM)
● 行业包定时或按需调用 MBM 的日志接口。
● 请求参数:最后同步时间戳 / 分页参数。
● 响应内容:变更的资源 ID、资源类型、变更时间、变更类型(新增/更新/删除)。
2、 行业包接收变更日志
● 行业包解析响应结果,逐条获取 资源ID + 类型 + 时间。
3、 查询资源详情(行业包 -> MBM)
● 行业包根据资源 ID 调用 MBM 的资源详情接口。
● 支持单个查询和批量查询模式。
● 请求参数:资源 ID、资源类型。
4、 返回资源完整信息(MBM -> 行业包)
● MBM 返回完整的资源对象,包括基本属性、扩展属性、上下文信息。
● 行业包落地存储,用于业务场景。
三、 系统组件设计
四、 MBM日志查询接口
1、 基本信息
● 微服务:msm
● 请求方式:POST
● 接口路径:/openapi/v1/om/operation-log/query
● 功能说明:提供操作日志的查询功能,支持按时间范围、模块、功能、资源 ID、执行结果等条件过滤,并支持分页与 marker 翻页机制。
2、 请求参数
| 参数名称 | 参数说明 | 类型 | 备注 |
|---|---|---|---|
| limit | 单页面最大数量 | int | 最大 100,默认 50 条 |
| offset | 偏移量 | int | 最大 2000;若单页 50 条,则支持最多翻 20 页 |
| marker | 分页基准行 ID | string | 上一次分页查询最后一条记录的 ID |
| start_time | 查询开始时间点 | string | 格式:yyyy-MM-dd'T'HH:mm:ss.SSS'Z';包含起始 |
| end_time | 查询结束时间点 | string | 格式:yyyy-MM-dd'T'HH:mm:ss.SSS'Z';不包含结束 |
| operate_type | 操作类型 | string | - |
| module | 模块名称 | string | - |
| function | 功能名称 | string | 可选 |
| resource_id | 资源 ID | string | - |
| operate_result | 执行结果 | string | 枚举:success / failed |
| api_name | API 名称 | string | - |
| api_url | API URL | string | 大小写不敏感 |
3、 响应参数
| 参数名称 | 参数说明 | 类型 | 备注 |
|---|---|---|---|
| status | 接口状态码 | int | - |
| message | 接口结果说明 | string | - |
| data | 查询结果对象 | object | 类型:QueryOperationLogResponse |
| i18n | 国际化信息 | string | - |
QueryOperationLogResponse
| 参数名称 | 参数说明 | 类型 | 备注 |
|---|---|---|---|
| log_list | 日志详细信息列表 | array | 数组元素类型:QueryLog |
| page | 分页信息 | object | 类型:Page |
QueryLog
| 参数名称 | 参数说明 | 类型 | 备注 |
|---|---|---|---|
| log_type | 日志类型 | string | - |
| request_content | 请求内容 | string | - |
| response_content | 响应内容 | string | - |
| client_info | 客户端信息 | string | 包含 IP + 浏览器信息 |
| api_url | API URL | string | - |
| api_name | API 名称 | string | - |
| module | 模块名称 | string | - |
| create_time | 创建时间 | string | - |
| operate_result | 操作结果 | string | 枚举:success / failed |
| operator | 操作者 | string | - |
| resource_id | 资源 ID | string | - |
| resource_name | 资源名称 | string | - |
| function | 功能名称 | string | - |
| operate_description | 操作描述 | string | - |
4、 请求示例
POST /openapi/v1/om/operation-log/query
{
"limit": 50,
"offset": 0,
"start_time": "2025-08-17T00:00:00.000Z",
"end_time": "2025-08-18T00:00:00.000Z",
"operate_result": "success",
"module": "order",
"function": "createOrder"
}
5、 响应示例
{
"status": 200,
"message": "success",
"data": {
"log_list": [
{
"log_type": "API_CALL",
"request_content": "{\"orderId\":\"123\"}",
"response_content": "{\"status\":\"ok\"}",
"client_info": "192.168.1.1|Chrome",
"api_url": "/openapi/v1/order/create",
"api_name": "createOrder",
"module": "order",
"create_time": "2025-08-17T12:30:00.000Z",
"operate_result": "success",
"operator": "user01",
"resource_id": "12345",
"resource_name": "订单A",
"function": "createOrder",
"operate_description": "订单创建成功"
}
],
"page": {
"marker": "log_12345"
}
},
"i18n": "操作成功"
}
五、 场景示例
1、 架构数据流程
异常与幂等处理
1. 幂等:使用组合唯一,重复拉取不会重复写入。
2. 数据一致性:日志记录 operate\_type(新增/更新/删除),删除时将 status 更新为 inactive。
3. 补偿机制:支持按 last\_sync\_time 重新拉取,防止漏数。
2、 表结构
同步资源定义表(sync_resource_definition)
CREATE TABLE sync_resource_definition (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
resource_type VARCHAR(64) NOT NULL COMMENT '资源类型,如 material, customer, supplier, process, operation',
resource_name VARCHAR(128) NOT NULL COMMENT '资源名称,用于展示',
source_system VARCHAR(64) NOT NULL DEFAULT 'MBM' COMMENT '来源系统,如 MBM',
target_system VARCHAR(64) NOT NULL DEFAULT 'IndustryPkg' COMMENT '目标系统',
api_url VARCHAR(255) NOT NULL COMMENT '拉取资源的接口地址',
sync_mode VARCHAR(32) NOT NULL DEFAULT 'incremental' COMMENT '同步模式:incremental增量 / full全量',
sync_frequency VARCHAR(32) NOT NULL DEFAULT '5m' COMMENT '同步频率,如 5m, 1h, 1d',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1=启用,0=停用',
last_sync_time DATETIME DEFAULT NULL COMMENT '最近一次同步时间',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_resource_type (resource_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='同步资源定义表';
同步资源记录表(sync_resource_log)
只保留1个月的数据
CREATE TABLE sync_resource_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
resource_type VARCHAR(64) NOT NULL COMMENT '资源类型,如customer, material',
resource_code VARCHAR(128) NOT NULL COMMENT '资源业务编码,如客户编码、物料编码',
resource_id VARCHAR(128) DEFAULT NULL COMMENT '资源唯一ID,来源系统主键',
change_type VARCHAR(32) NOT NULL COMMENT '变更类型:insert/update/delete',
active_status TINYINT NOT NULL DEFAULT 1 COMMENT '是否有效:1=有效,0=已删除',
operate_time DATETIME NOT NULL COMMENT '操作发生时间(来源系统日志时间)',
sync_status TINYINT NOT NULL DEFAULT 0 COMMENT '同步状态:0=待处理,1=成功,2=失败',
sync_time DATETIME DEFAULT NULL COMMENT '同步完成时间',
error_message VARCHAR(1024) DEFAULT NULL COMMENT '失败原因',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_resource (resource_type, resource_code, version),
KEY idx_status (sync_status, sync_time),
KEY idx_operate_time (operate_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='同步资源记录表';