数据转换与映射:从旺店通到金蝶云的销售订单无缝对接

  • 轻易云集成顾问-黄宏棵

案例介绍:同步旺店通销售订单至金蝶云星辰V2

在当今数字化时代,如何高效地进行系统对接成为很多企业面临的一大挑战。本文将分享一个具体的技术案例——如何通过API接口实现旺店通·企业奇门数据集成到金蝶云星辰V2,以便在两者之间同步销售订单。

接口简要说明

首先,我们需要了解两个关键API接口:

  1. wdt.trade.query:这是旺店通·企业奇门提供的用于获取销售订单信息的API接口。
  2. /jdy/v2/scm/sal_order:这是金蝶云星辰V2用来接收并写入销售信息的数据源接口。

数据抓取与质量监控

为了确保数据不漏单且能及时捕捉,我们采用定时任务机制,通过周期性调用wdt.trade.query接口从旺店通·企业奇门中抓取最新的销售订单数据。同时,为了保证数据质量和准确性,引入了实时监控和异常检测功能。每次调用后,系统会自动检查返回结果中的异常情况,并记录详细日志,方便后续排错处理。

高吞吐量的数据写入能力

由于每日需要处理大量的新订单信息,对系统性能提出了较高要求。在这一点上,大量数据快速写入到金蝶云星辰V2显得尤为重要。我们选用了支持高吞吐量的数据写入方案,使得批量数据能够以最快速率稳定传输到目标系统,有效提升整体业务处理效率。

数据转换与映射

由于两套系统之间存在不同的数据结构,我们设置了自定义的数据转换逻辑。例如,在从旺店通·企业奇门拉取的原始JSON格式需被解析、映射为符合金蝶云星辰V2规范的数据格式。这中间不仅包括字段名、类型转化,还要考虑某些特殊业务规则,例如税费计算或折扣应用等特定需求,这一步骤使得整个集成流程更加灵活可控。

下一步,将详细展示完整技术方案及其实施过程,包括分页处理、限流控制,以及错误重试机制等更多细节内容…… 钉钉与ERP系统接口开发配置

调用旺店通·企业奇门接口wdt.trade.query获取并加工数据

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

接口配置与请求参数

首先,我们需要配置接口的元数据,以确保能够正确调用并获取所需的数据。以下是元数据配置的详细内容:

{
  "api": "wdt.trade.query",
  "method": "POST",
  "number": "trade_no",
  "id": "trade_id",
  "pagination": {"pageSize": 100},
  "idCheck": true,
  "buildModel": true,
  "request": [
    {"field": "status", "label": "订单状态", "type": "string"},
    {"field": "start_time", "label": "开始时间", "type": "string", "value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field": "end_time", "label": "结束时间", "type": "string", "value":"{{CURRENT_TIME|datetime}}"},
    {"field": "src_tid", "label": "原始单号", "type": "string"},
    {"field": "trade_no", "label":"订单编号","type":"string"},
    {"field":"shop_no","label":"店铺编号","type":"string"},
    {"field":"warehouse_no","label":"仓库编号","type":"string"},
    {"field":"goodstax","label":"使用税率","type":"string"},
    {"field":"has_logistics_no","label":"物流单号限制","type":"string"},
    {"field":"src","label":"是否返回交易流水号、付款状态、付款时间","type":"string"},
    {"field":"logistics_no","label":"物流单号","type":"string"}
  ],
  ...
}

请求参数解析

  1. status(订单状态):用于筛选特定状态的订单。
  2. start_time(开始时间)end_time(结束时间):通过动态变量{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}设置时间范围,确保只获取最新的订单数据。
  3. src_tid(原始单号)trade_no(订单编号)shop_no(店铺编号)等字段用于进一步细化查询条件。

分页处理

由于每次请求返回的数据量有限,我们需要进行分页处理。元数据配置中的分页参数如下:

{
  ...
  "otherRequest":[
    {"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"100"},
    {"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始"}
  ],
  ...
}

通过设置page_size为100,可以一次性获取最多100条记录,并通过递增page_no来逐页获取所有符合条件的数据。

数据清洗与转换

在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗操作:

  1. 字段映射与重命名:将源系统中的字段名映射为目标系统所需的字段名。
  2. 数据类型转换:确保所有字段的数据类型符合目标系统的要求。例如,将字符串类型的日期转换为日期类型。
  3. 缺失值处理:对于缺失或异常值进行填充或删除操作。

实际案例

假设我们需要同步最近一天内所有已完成的销售订单,可以按照以下步骤进行:

  1. 设置请求参数:

    {
     ...
     {"status": ["completed"]},
     {"start_time": "{{LAST_SYNC_TIME|datetime}}"},
     {"end_time": "{{CURRENT_TIME|datetime}}"}
     ...
    }
  2. 调用接口并处理分页:

    page_no = 0
    while True:
       response = call_api(api="wdt.trade.query", method="POST", params={
           ...
           'page_size': '100',
           'page_no': str(page_no)
           ...
       })
       if not response['data']:
           break
       process_data(response['data'])
       page_no += 1
  3. 清洗与转换数据:

    def process_data(data):
       for record in data:
           record['order_date'] = convert_to_date(record['order_date'])
           record['total_amount'] = float(record['total_amount'])
           # 更多清洗操作...
       save_to_target_system(data)

通过以上步骤,我们可以高效地从旺店通·企业奇门接口获取并加工销售订单数据,为后续的数据集成打下坚实基础。 金蝶云星空API接口配置

使用轻易云数据集成平台将销售订单转换为金蝶云星辰V2API接口格式

在数据集成过程中,ETL(Extract, Transform, Load)是一个关键步骤。本文将重点探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星辰V2 API接口所能够接收的格式,并最终写入目标平台。

数据请求与清洗

首先,我们需要从源平台(例如旺店通)获取销售订单的数据。假设我们已经完成了数据请求与清洗阶段,现在我们进入数据转换与写入阶段。

数据转换与写入

在这一阶段,我们需要将清洗后的数据转换为金蝶云星辰V2 API接口所能接受的格式。以下是具体的元数据配置:

{
    "api": "/jdy/v2/scm/sal_order",
    "effect": "EXECUTE",
    "method": "POST",
    "idCheck": true,
    "request": [
        {"field": "bill_no", "label": "订单编码", "type": "string", "describe": "销售订单编码", "value": "{trade_no}"},
        {"field": "remark", "label": "单据备注", "type": "string", "describe": "备注", "value": "{cs_remark}"},
        {"field": "customerid_id", "label": "客户ID", "type": "string", "describe":"旺店通订单上店铺编码"},
        {"field": "bill_date", "label": "订单日期", "type": "string",   "describe":"销售订单日期","value":"{trade_time}"},
        {"field":"customer_number","label":"客户编码","type":"string","describe":"单据来源","value":"{shop_no}"},
        {"field":"operation_key","label":"状态","type":"string","value":"audit"},
        {
            "field":"material_entity",
            "label":"分录明细",
            "type":"array",
            "describe":"分录明细",
            "value":"goods_list",
            "children":[
                {"field":"material_number","label":"物料编码","type":"string","describe":"物料编码","value":"{{goods_list.spec_no}}"},
                {"field":"qty","label":"数量","type":"string","describe":"数量","value":"{{goods_list.num}}"},
                {"field":"unit_id","label":"单位","type":"string","describe":"单位","value":
                    "_mongoQuery 4827771f-056c-36b0-ab02-07e302215554 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"{{details_list.spec_no}}\"}}"
                },
                {"field":"price","label":"单价","type":"string","describe":
                    单价,"value":
                    "{{goods_list.order_price}}"
                },
                {"field":
                    sp_id,"label":
                    仓位ID,"type":
                    string,"describe":
                    仓位ID},
                {"field":
                    is_free,"label":
                    是否赠品,"type":
                    string,"describe":
                    是否赠品,"value":
                    _function case {{goods_list.order_price}} when 0 then 'true' else 'false' end
                },
                {"field":
                    stock_id,"label":
                    仓库id,"type":
                    string,"describe":
                    仓库id},
                {"field":
                    aux_prop_id,"label":
                    辅助属性--待优化,"type":
                    string,"value":
                    _mongoQuery 4827771f-056c-36b0-ab02-07e302215554 findField=content.aux_entity.0.id where={\"content.number\":{\"$eq\":\"{{goods_list.spec_no}}\"}}
                },
                {
                    field:
                        custom_entity_field,
                        label:
                        自定义字段,
                        type:
                        object,
                        children:[
                            { field: custom_entity_field__1__3dyhdyhgxieaqcieuxie, label: 原始单号, type: string, value: {{goods_list.src_tid}}--{shop_name}},
                            { field: custom_entity_field__1__3bpy91cjiaxierk5, label: 旺店通行内码, type: string, value: {{goods_list.rec_id}}
                            }
                        ]
                }
            ]
        }
    ]
}

元数据配置解析

  1. API路径/jdy/v2/scm/sal_order

    • 这是金蝶云星辰V2 API的具体路径,用于接收销售订单数据。
  2. HTTP方法POST

    • 数据通过POST方法发送到目标平台。
  3. 字段映射

    • bill_no 映射到 {trade_no}:表示销售订单编码。
    • remark 映射到 {cs_remark}:表示单据备注。
    • customerid_id:表示旺店通订单上店铺编码。
    • bill_date 映射到 {trade_time}:表示销售订单日期。
    • customer_number 映射到 {shop_no}:表示单据来源。
    • operation_key 固定值 audit:表示状态。
  4. 分录明细

    • material_entity 是一个数组,包含多个子字段,如物料编码、数量、单位、单价等。
      • material_number 映射到 {{goods_list.spec_no}}:表示物料编码。
      • qty 映射到 {{goods_list.num}}:表示数量。
      • unit_id 使用 _mongoQuery 查询获取单位ID。
      • price 映射到 {{goods_list.order_price}}:表示单价。
      • is_free 使用 _function case ... end 判断是否为赠品。
  5. 自定义字段

    • 包含原始单号和旺店通行内码等信息,通过嵌套对象结构实现。

实际应用案例

在实际应用中,首先需要从源平台(旺店通)获取原始销售订单数据。然后,通过轻易云的数据集成平台,根据上述元数据配置进行ETL转换。最终,将转换后的数据通过POST方法发送至金蝶云星辰V2 API接口,实现无缝对接和写入。

这种方式不仅提高了数据处理效率,还确保了数据的一致性和准确性。在整个过程中,轻易云提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,大大提升了业务的透明度和效率。 如何对接钉钉API接口

更多系统对接方案