Files
zt-base/zt-module-base/主数据同步说明.md
2025-11-25 08:47:37 +08:00

6.1 KiB
Raw Blame History

主数据同步功能说明

功能概述

主数据同步由“分类同步 + 物料同步”两条独立链路组成:

  1. 分类同步:从 mdm_wlfl_code 全量拉取 01 / 0101 / 010101 结构的编码,生成 BSE 三层分类。
  2. 物料同步:从 mdm_material_view 拉取物料主数据,依赖已存在的分类信息完成入库。
  3. 物料同步会维护物料与分类绑定关系,并将非主表字段落入属性表。
  4. 同步结束后可选地向外部回调推送执行报告。

同步入口

分类同步接口

  • 接口地址POST /base/master-data-sync/categories
  • 权限点base:master-data-sync:categories
  • 请求体:无(全量同步)
  • 返回体MasterDataCategorySyncReport

字段说明:

  • processedCategories:本次遍历的分类数量。
  • insertedCategories / updatedCategories:新增或更新的分类记录数。
  • missingParentReferences:外部数据缺失父级时的降级次数(会挂到根节点)。
  • successmessagestartedAtfinishedAt:同物料同步。

⚠️ 分类同步需先于物料同步执行,确保 BSE 中已存在三层分类结构。

物料同步接口

  • 接口地址POST /base/master-data-sync/execute
  • 权限点base:master-data-sync:execute
  • 请求体
    字段 类型 说明
    since yyyy-MM-dd HH:mm:ss (可选)增量同步起始时间,空值表示全量。
    batchSize Integer (可选)单批拉取条数,未填写则使用配置默认值。
    materialCodes List<String> (可选)限定仅同步指定物料编码,留空同步全部。
    recordLimit Long (可选)本次同步允许处理的最大记录数,留空则不做总量限制。

返回体MasterDataSyncReport,涵盖以下关键指标:

  • processedRecords:拉取并处理的记录数。
  • insertedMaterials / updatedMaterials:新增或更新的物料数量。
  • createdClassRelations / updatedClassRelations:物料与分类的关系处理次数。
  • insertedPropertyDefinitions / updatedPropertyDefinitions:属性定义的补齐情况。
  • insertedPropertyValues / updatedPropertyValues:属性值的写入情况。
  • success + message:执行状态及提示语。
  • startedAt / finishedAt:执行起止时间。
  • recordLimit:若请求指定了总量限制,会在报告中回显该值。

数据处理策略

  1. 属性字典
    • 程序会检查 MasterDataPropertyDefinition 枚举列出的全部属性(例如类别编码、规格、材质等)。
    • 若属性定义不存在即创建,存在但名称/排序有差异会自动更新。
  2. 分类管理
    • 通过分类同步接口预先写入 01/0101/010101 三层数据,物料同步阶段仅检查并使用现有分类,如缺失则记录日志并跳过绑定。
  3. 物料主体
    • material_code 进行 upsert保留基础字段物料编码、通用信息等
  4. 分类绑定
    • 若物料已有绑定但分类变化,则更新关系;否则创建新绑定。
  5. 属性值写入
    • 对比新旧值,仅在有变化或缺失时写入,避免无效更新。

配置项

application-*.yml 中通过 base.master-data-sync 节点进行控制:

base:
  master-data-sync:
    enabled: true                    # 是否开放同步入口
    batch-size: 500                  # 默认批量大小
    source-datasource-name: mdm      # 指向外部 MDM 的动态数据源
    notify-on-success: true          # 成功时是否回调
    notify-on-failure: true          # 失败时是否回调
    callback-url: http://example/callback
    callback-headers:
      X-TOKEN: xxx
    http:
      connect-timeout: 5s
      read-timeout: 30s
      write-timeout: 30s

⚠️ 请确保在 datasource.dynamic 中配置名为 mdm(或 source-datasource-name 指定值)的数据源,并指向外部 MDM 数据库。

数据源说明

  • master默认业务库BSE 表所在库),所有增删改依旧走 master 数据源,这部分无需额外配置。

  • mdm:主数据来源库(外部 MySQLMdmMaterialViewMapperMdmMaterialCategoryMapper 均通过 @DS("mdm") 读取该库。

  • base.master-data-sync.source-datasource-name:若外部库名称不是 mdm,可在此覆盖,示例:

    base:
       master-data-sync:
          source-datasource-name: mdm
    datasource:
       dynamic:
          datasource:
             master: { ...本地库配置... }
             mdm: { url: jdbc:mysql://mdm-host/mdm, username: xxx, password: yyy }
    

强调:主数据读取始终走 mdm(或你在 source-datasource-name 中声明的别名),不要与默认 master 数据源混淆。

回调机制

  • 当配置了 callbackUrl 时,系统会在同步结束后推送 JSON 结果。
  • 推送内容为:
{
  "report": { ...MasterDataSyncReport... },
  "errorMessage": "可选的错误提示"
}
  • 仅成功/失败分别受 notifyOnSuccessnotifyOnFailure 控制。
  • callbackHeaders 支持附加认证信息,如 Token、租户标识等。

常见问题排查

问题 检查点
数据源连接失败 确认 mdm 数据源配置、账号权限、网络可达性。
同步后未触发回调 检查 callbackUrlnotify-on-* 配置,以及目标地址是否可达。
属性值未生效 查看 MasterDataPropertyDefinition 是否包含该字段,或字段值是否为空/仅有空格。
只需同步单个物料 调用接口时在 materialCodes 中传入目标编码即可。

建议的使用流程

  1. 配置并验证外部数据源与 base.master-data-sync 参数。
  2. 先执行“分类同步接口”,确认三层分类齐全。
  3. 再执行“物料同步接口”,并确认报表数据、回调通知。
  4. 线上场景可定期以 since 参数驱动增量物料同步,也可按需指定 materialCodes 触发刷新;分类若有改动,可重新全量执行一次分类同步。