梁华东
Published on 2025-10-09 / 21 Visits
0
0

行业包数据一致性详细方案设计

行业包数据一致性详细方案设计

一、 背景说明

在行业包系统集成场景下,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='同步资源记录表';


Comment