利用轻易云平台进行金蝶云星空的数据ETL转换

  • 轻易云集成顾问-杨嫦

聚水潭数据集成到金蝶云星空——盘盈同步方案

在实际业务操作中,企业需要将多种数据源进行有效整合,以提升数据处理的效率和准确性。本案例分享的是如何通过轻易云数据集成平台,实现从聚水潭系统到金蝶云星空的高效、可靠的数据对接,即“盘盈同步”方案。我们将在本文重点探讨以下几个关键技术点:

  1. 确保集成聚水潭数据不漏单
    在抓取聚水潭接口/open/inventory/count/query时,通过定时任务机制,每隔一定时间段(如每小时)去拉取最新的数据。同时,为了避免漏单,我们会记录每次拉取的最大ID或者时间戳,并以此为基础执行下一次抓取。此外,还设置了重试机制,如果某次数据获取失败,将自动重新尝试,保证每条记录都能被正确获取。

  2. 大量数据快速写入到金蝶云星空
    对于从聚水潭获得的大量库存数据信息,需要快速、高效地批量写入到金蝶云星空系统。我们利用其提供的批量写入API batchSave 接口,通过并发处理及分片上传,将大量的数据拆分为多个小块,以提高传输效率和稳定性。

  3. 处理分页与限流问题
    由于接口访问存在分页限制,我们在调用 /open/inventory/count/query 时,会动态调整每页大小,根据返回结果中的分页信息继续请求剩余页面。另外,为应对接口调用频率限制问题,我们采用熔断器模式,当检测到异常或超过频率限制时,会暂缓请求,从而避免触发API封禁。

  4. 数据格式差异转换及映射
    聚水潭与金蝶云星空之间的数据格式存在差异。为了顺利完成两个系统间的数据流转,对原始获得的数据需要进行清洗、转换,并按照目标系统要求重新组织结构。在这过程中,通过自定义脚本实现字段映射,可以灵活地根据业务需求完成复杂转换逻辑,使得最终导入满足预期标准。

  5. 异常处理与错误重试机制
    数据传输过程中的任何异常,如网络中断、服务超时等,都可能导致部分记录未成功写入。针对这些场景,平台内置了完善的日志监控和告警机制,一旦发生异常情况,立即捕获并发送通知,同时启用错误重试功能,在下一周期内再次尝试之前失败的操作,力求达到无缝衔接和容错能力提高。

以上是“盘盈同步”案例的一些核心技术要点,其目的是通过科学 钉钉与MES系统接口开发配置

调用聚水潭接口获取并加工数据的技术实现

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭接口/open/inventory/count/query,并对获取的数据进行加工处理。

接口调用配置

首先,我们需要配置元数据以便正确调用聚水潭的API接口。以下是关键的元数据配置项:

  • API路径: /open/inventory/count/query
  • 请求方法: POST
  • 分页参数:
    • page_index: 开始页码,默认为1。
    • page_size: 每页条数,默认为30,最大50。
  • 时间参数:
    • modified_begin: 修改开始时间,必须与结束时间同时存在。
    • modified_end: 修改结束时间,必须与开始时间同时存在。
  • 单据状态: 默认为Confirmed

这些参数确保我们能够灵活地分页获取数据,并根据时间范围和单据状态过滤结果。

请求参数示例

以下是一个典型的请求参数示例:

{
  "page_index": "1",
  "page_size": "50",
  "modified_begin": "{{LAST_SYNC_TIME|datetime}}",
  "modified_end": "{{CURRENT_TIME|datetime}}",
  "status": "Confirmed"
}

在这个请求中,我们使用了动态变量{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}来指定时间范围,这些变量会在实际调用时被替换为具体的日期时间值。

数据过滤与清洗

在获取到原始数据后,需要对数据进行过滤和清洗,以确保符合业务需求。根据元数据配置中的条件,我们只需要保留库存数量大于零的记录:

"condition":[[{"field":"items.qty","logic":"gt","value":0}]]

这意味着我们需要遍历返回的数据集合,并移除库存数量小于或等于零的记录。

异常处理与补偿机制

为了确保数据同步的完整性和准确性,我们还需要配置异常处理和补偿机制。例如,通过定时任务(Crontab)来定期检查并补偿遗漏的数据:

"omissionRemedy":{
  "crontab":"20 9 * * *",
  "takeOverRequest":[
    {
      "field":"modified_begin",
      "label":"修改开始时间",
      "type":"string",
      "is_required":false,
      "describe":"修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空",
      "value":"{{DAYS_AGO_3|datetime}}"
    }
  ]
}

这个配置表示每天早上9点20分执行一次补偿任务,从三天前开始重新拉取修改过的数据,以防止因网络或其他原因导致的数据遗漏。

数据转换与写入

在完成数据清洗后,需要将其转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及字段映射、格式转换等操作。具体实现方式依赖于目标系统的要求,可以通过轻易云平台提供的可视化工具进行配置和测试。

实践案例

假设我们需要从聚水潭系统中同步最近七天内所有已确认状态且库存数量大于零的盘点单记录。以下是一个完整的实现步骤:

  1. 配置API请求参数

    {
     "page_index": "1",
     "page_size": "50",
     "modified_begin": "{{LAST_SYNC_TIME|datetime}}",
     "modified_end": "{{CURRENT_TIME|datetime}}",
     "status": "Confirmed"
    }
  2. 发送请求并获取响应: 使用轻易云平台提供的API调用功能发送上述请求,并接收返回的数据集合。

  3. 过滤与清洗数据: 遍历返回的数据集合,只保留库存数量大于零的记录。

  4. 异常处理与补偿: 配置定时任务,每天定期检查并补偿遗漏的数据。

  5. 转换与写入: 将清洗后的数据转换为目标系统所需格式,并写入目标数据库。

通过以上步骤,我们可以高效地实现从聚水潭系统到目标系统的数据同步,确保数据的一致性和完整性。这不仅提升了业务透明度,还极大地提高了工作效率。 用友与CRM系统接口开发配置

利用轻易云数据集成平台进行金蝶云星空API接口的数据ETL转换

在数据集成的生命周期中,将源平台的数据转换为目标平台所能接收的格式是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL(提取、转换、加载)处理,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。

数据请求与清洗

在这个阶段,我们已经完成了从源系统中提取原始数据,并进行了必要的清洗操作。接下来,我们需要将这些清洗后的数据转换为金蝶云星空API所需的格式。

数据转换与写入

我们使用轻易云数据集成平台提供的元数据配置来实现这一过程。以下是具体的配置和操作步骤:

API接口配置

根据提供的元数据配置,我们需要调用金蝶云星空的batchSave API接口,使用POST方法提交数据。以下是关键字段和它们的配置说明:

  • FBillNo(单据编号):这是一个字符串类型字段,用于标识单据编号,值来自于源数据中的io_id
  • FBillTypeID(单据类型):这是一个字符串类型字段,固定值为PYRKD
  • FStockOrgId(库存组织):这是一个字符串类型字段,固定值为100
  • FStockDirect(库存方向):这是一个字符串类型字段,固定值为GENERAL
  • FDate(日期):这是一个字符串类型字段,值来自于源数据中的io_date
  • FOwnerTypeIdHead(货主类型):这是一个字符串类型字段,固定值为BD_OwnerOrg
  • FOwnerIdHead(货主):这是一个字符串类型字段,固定值为100
  • FNOTE(备注):这是一个多行文本字段,值来自于源数据中的remark
明细信息配置

明细信息是一个数组类型字段,每个元素包含以下子字段:

  • FMATERIALID(物料编码):这是一个字符串类型字段,通过查询MongoDB数据库获取物料编码。
  • FSTOCKID(收货仓库):这是一个字符串类型字段,固定值为CK
  • FQty(实收数量):这是一个字符串类型字段,值来自于源数据中的项目项中的数量 {{items.qty}}
  • FPrice(成本价):这是一个字符串类型字段,需要根据业务逻辑计算或从其他来源获取。
  • FEntryNote(备注):这是一个多行文本字段,可以根据需要填写。
其他请求参数

除了上述主要字段外,还有一些其他必要的请求参数:

  • FormId:业务对象表单Id,必须填写金蝶的表单ID,如 STK_MISCELLANEOUS
  • IsVerifyBaseDataField:验证基础资料有效性,这里设置为 true
  • Operation:执行的操作,这里设置为 Save
  • IsAutoSubmitAndAudit:是否自动提交并审核,这里设置为 true
配置示例

以下是完整的元数据配置示例:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{io_id}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PYRKD"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
    {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"},
    {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
    {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
    {"field":"FNOTE","label":"备注","type": "string", "describe": "多行文本", "value": "{remark}"},
    {
      "field": "FEntity",
      "label": "明细信息",
      "type": "array",
      "children": [
        {"field": "FMATERIALID", "label": "物料编码", "type": "string", 
            "describe": "基础资料", 
            "parser":{"name": "ConvertObjectParser", 
            "params": "FNumber"}, 
            "value": "_mongoQuery 505fc4bf-5dc6-3093-8a24-fe58decc8e65 findField=content.i_id where={\"content.sku_id\" : {\"$eq\":\"{{items.sku_id}}\"}}", 
            "parent": "FEntity"
        },
        {"field": "FSTOCKID", "label": "收货仓库", 
            "type": "string", 
            "describe": "基础资料", 
            "parser":{"name": ConvertObjectParser, 
            "params": FNumber}, 
            "value: CK, parent: FEntity
        },
        {"field: FQty, label: 实收数量, type: string, describe: 数量, value: {{items.qty}}, parent: FEntity},
        {"field: FPrice, label: 成本价, type: string, describe: 单价, parent: FEntity},
        {"field: FEntryNote, label: 备注, type: string, describe: 多行文本, parent: FEntity}
      ],
      value: items
    },
    {
      field:"FDEPTID",
      label:"部门",
      type:"string",
      value:"BM000001",
      parser:{
        name:"ConvertObjectParser",
        params:"FNumber"
      }
    }
  ],
  otherRequest:[
    {"field:"FormId,label:"业务对象表单Id,type:string,describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder,value:"STK_MISCELLANEOUS},
    {"field:IsVerifyBaseDataField,label:"验证基础资料,type,bool,describe:"是否验证所有的基础资料有效性,布尔类,默认false(非必录),value:true},
    {"field:Operation,label:"执行的操作,type:string,value:"Save},
    {"field:IsAutoSubmitAndAudit,label:"提交并审核,type,bool,value:true}
  ]
}

通过上述配置,我们可以确保将源平台的数据准确地转换并写入到金蝶云星空系统中,实现不同系统间的数据无缝对接。这种全异步、支持多种异构系统集成的平台特性,使得我们能够高效地处理复杂的数据集成任务。 金蝶与MES系统接口开发配置

更多系统对接方案