轻易云平台下的数据ETL与金蝶云星辰API写入

  • 轻易云集成顾问-孙传友

案例分享:旺店通·企业奇门数据集成到金蝶云星辰V2——其他入库(生产)V2.0

在企业级应用集成的实际操作中,数据的高效流转和准确无误是成功与否的关键。本文将聚焦于一个具体技术案例,即如何将旺店通·企业奇门的数据通过轻易云平台集成到金蝶云星辰V2,实现方案名称为“其他入库(生产)V2.0”。

首先,我们需要从旺店通·企业奇门获取相关库存入库订单的数据,使用其提供的API接口wdt.stockin.order.query进行定时抓取。为了确保数据不漏单且实时性强,这里重点采用了支持高吞吐量的数据写入能力及实时监控机制,从而能够快速从大量订单信息中提取出所需内容。

其次,通过轻易云平台,可视化的数据流设计工具帮助我们在清晰了解每一步处理流程的基础上,自定义了一系列符合业务需求的数据转换逻辑。这些转换过程主要解决了两个系统之间可能存在的数据结构差异问题,并保障了最终输出格式完全满足金蝶云星辰V2系统要求。

进入数据写入阶段,我们调用的是金蝶云星辰V2提供的API接口/jdy/v2/scm/inv_other_in。由于涉及批量数据导入,因此不仅要考虑频繁调用带来的限流问题,还要特别注意对接过程中可能出现异常情况。在这方面,加设集中监控和告警系统,可以有效跟踪任务状态,一旦检测到错误立即触发重试机制,确保整个集成过程稳定可靠。

此外,在处理分页查询与限流设置时,对应逻辑同样至关重要。在分页环境下,每次请求只会返回部分结果,为此我们设计了自动翻页功能,将连续多次请求得到的数据合并后再统一进行处理,以达到全面覆盖目标记录的效果。同时,合理配置限流策略避免因过度调用而导致服务不可用,也是在实施过程中必须关注的一块内容。

综上,通过以上几个关键步骤,我们实现了从旺店通·企业奇门向金蝶云星辰V2的一整套高效、可靠、智能化的数据集成方案,对于进一步提升企业内部的信息透明度与管理效率具有显著意义。 金蝶与SCM系统接口开发配置

调用源系统旺店通·企业奇门接口wdt.stockin.order.query获取并加工数据

在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过调用旺店通·企业奇门接口wdt.stockin.order.query来获取并加工数据。

接口调用配置

首先,我们需要配置接口调用的元数据。以下是我们使用的元数据配置:

{
  "api": "wdt.stockin.order.query",
  "method": "POST",
  "number": "order_no",
  "id": "stockin_id",
  "pagination": {
    "pageSize": 50
  },
  "condition": [
    [
      {
        "field": "warehouse_no",
        "logic": "neq",
        "value": "WH2024052601"
      }
    ]
  ],
  "idCheck": true,
  "request": [
    {
      "field": "start_time",
      "label": "开始时间",
      "type": "string",
      "describe": "按最后修改时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
      "value": "{{LAST_SYNC_TIME|datetime}}"
    },
    {
      "field": "end_time",
      "label": "结束时间",
      "type": "string",
      "describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
      "value": "{{CURRENT_TIME|datetime}}"
    },
    {
      "field": "order_type",
      "label": "源单据类别",
      "type": "string",
      "describe":"源单据类别 1采购入库, 2调拨入库, 4盘盈入库, 5生产入库, 6其他入库, 7保修入库, 8纠错入库, 9初始化入库, 10预入库, 11JIT退货入库,12委外入库",
      "value":"5"
    },
    {
      "field":"status",
      "label":"入库单状态",
      “type":"string",
      “describe":"入库单状态10已取消20编辑中25待价格确认30待审核32待推送33推送失败35委外待入库60待结算80已完成(按照状态查询时必须传原单据类别,如果未传status则默认查询80已完成单据)”,
       “value”:”60,80”
     },
     {
       “field”:”warehouse_no”,
       “label”:”仓库编号”,
       “type”:”string”,
       “describe”:”代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据信息(不支持一次推送多个仓库编号)”
     },
     {
       “field”:”src_order_no”,
       “label”:”上层单据编号”,
       “type”:”string”,
       “describe”:”上层单据编号,传该字段可以不传开始时间和结束时间”
     },
     {
       “field”:”stockin_no”,
       “label”:”入库单号”,
       “type”:”string”,
       “describe”:”入库单号,传该字段可以不传开始时间和结束时间”
     }
   ],
   ”otherRequest":[
     {
       ”field”:”page_size”,
       ”label”:分页大小”,
       ”type”:string”,
       ”describe”:每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里”,
        ”value”:{PAGINATION_PAGE_SIZE}”
     },
     {
        ”field”:page_no”,
        ”label”:页号”,
        ”type”:string”,
        ”describe”:不传值默认从0页开始”,
        ”value”:{PAGINATION_START_PAGE}”
     }
   ]
}

请求参数解析

  1. 基本请求参数

    • start_timeend_time:用于按最后修改时间增量获取数据。start_timeend_time分别表示开始和结束时间。
    • order_type:指定为“5”,表示生产入库。
    • status:指定为“60,80”,表示查询状态为“待结算”和“已完成”的订单。
    • warehouse_nosrc_order_nostockin_no:这些字段用于更精确地过滤请求结果。
  2. 分页参数

    • page_sizepage_no:用于控制分页,每次请求返回的数据条数和当前页码。
  3. 条件过滤

    • 配置了一个条件过滤,即排除仓库编号为“WH2024052601”的记录。

数据处理流程

在调用接口并成功获取数据后,需要对数据进行清洗和转换,以便写入目标系统。以下是具体步骤:

  1. 数据清洗

    • 根据业务需求,对原始数据进行必要的清洗操作。例如,可以去除无效字段或格式化日期。
  2. 数据转换

    • 将清洗后的数据转换为目标系统所需的格式。这可能包括字段重命名、类型转换等操作。
  3. 写入目标系统

    • 最后,将处理好的数据通过轻易云平台写入到目标系统中。此过程可以通过配置相应的写入接口来实现。

实际案例

假设我们需要获取某个特定时间段内所有生产入库且状态为“待结算”和“已完成”的订单,并排除特定仓库的数据。我们可以按照以下步骤进行操作:

  1. 设置请求参数中的 start_time, end_time, order_type, 和 status.
  2. 配置分页参数以确保能够处理大量数据。
  3. 调用接口并获取响应结果。
  4. 对响应结果进行清洗和转换。
  5. 将处理后的数据写入目标系统。

通过这种方式,我们能够高效地实现不同系统间的数据集成,并确保每个环节都透明可控。 如何开发金蝶云星空API接口

使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口

在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式。本文将深入探讨如何利用轻易云数据集成平台,将数据转换并写入金蝶云星辰V2API接口。

元数据配置解析

根据提供的元数据配置,我们需要将源平台的数据转换为金蝶云星辰V2API接口所需的格式。以下是详细的配置解析:

{
  "api": "/jdy/v2/scm/inv_other_in",
  "effect": "EXECUTE",
  "method": "POST",
  "number": "id",
  "id": "id",
  "name": "id",
  "idCheck": true,
  "request": [
    {
      "field": "bill_date",
      "label": "单据日期",
      "type": "string",
      "value": "{stockin_time}"
    },
    {
      "field": "bill_no",
      "label": "单据编码",
      "type": "string",
      "value": "{order_no}"
    },
    {
      "field": "trans_type_id",
      "label": "业务类型id",
      "type": "string",
      "value": "12"
    },
    {
      "field": "operation_key",
      "label": "操作类型",
      "type": "string",
      "value": "audit"
    },
    {
      "field": "material_entity",
      ...
    }
  ]
}

数据请求与清洗

首先,我们需要从源平台获取相关数据,并进行必要的清洗和预处理。这一步骤确保我们获得的数据符合目标平台要求。以下是几个关键字段的映射和处理:

  • bill_date 映射到 {stockin_time}
  • bill_no 映射到 {order_no}
  • trans_type_id 固定值为 "12"
  • operation_key 固定值为 "audit"

数据转换与写入

接下来,我们将处理后的数据转换为金蝶云星辰V2API接口所需的格式,并通过POST请求写入目标系统。

商品分录处理

商品分录(material_entity)是一个复杂字段,包含多个子字段,需要特别注意:

  1. 商品ID (material_id):

    • 使用 _mongoQuery 查询,从MongoDB中获取商品ID。
    • 查询条件:{"content.number\": {\"$eq\":\"{{details_list.goods_no}}\"}}
    • 示例:假设 goods_no"12345",则查询条件为:{"content.number\": {\"$eq\":\"12345\"}}
  2. 数量 (qty):

    • 映射到 {{details_list.goods_count}}
  3. 单位 (unit_id):

    • 使用 _mongoQuery 查询,从MongoDB中获取单位ID。
    • 查询条件:同上,基于 goods_no
  4. 仓库 (stock_id):

    • 使用 _findCollection 查询,从指定集合中获取仓库ID。
    • 查询条件:基于 warehouse_no
示例代码

以下是一个简化示例代码,用于展示如何实现上述逻辑:

import requests
import json

# 定义请求URL和头信息
url = 'https://api.kingdee.com/jdy/v2/scm/inv_other_in'
headers = {'Content-Type': 'application/json'}

# 构建请求体
payload = {
    'bill_date': stockin_time,
    'bill_no': order_no,
    'trans_type_id': '12',
    'operation_key': 'audit',
    'material_entity': []
}

# 遍历商品分录列表,构建每个商品分录信息
for detail in details_list:
    material_id = mongo_query('d476a55d-acc7-3156-9c7f-b9f9dce596b5', 'content.id', {"content.number": detail['goods_no']})
    unit_id = mongo_query('d476a55d-acc7-3156-9c7f-b9f9dce596b5', 'content.base_unit_id', {"content.number": detail['goods_no']})
    stock_id = find_collection('9cf5314a-709f-3e72-b021-c9edae06888f', 'id', detail['warehouse_no'])

    material_entity_item = {
        'material_id': material_id,
        'qty': detail['goods_count'],
        'unit_id': unit_id,
        'stock_id': stock_id
    }

    payload['material_entity'].append(material_entity_item)

# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

# 检查响应状态
if response.status_code == 200:
    print('Data successfully written to Kingdee Cloud')
else:
    print('Failed to write data:', response.text)

以上代码展示了如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并通过API接口写入金蝶云星辰V2系统。通过这种方式,可以实现不同系统间的数据无缝对接,提升业务效率。 如何开发金蝶云星空API接口

更多系统对接方案