使用数据集成平台实现数据转换并写入金蝶云星空

  • 轻易云集成顾问-吴伟

旺店通·企业奇门数据集成到金蝶云星空:查询出库单

在实现旺店通·企业奇门与金蝶云星空的数据集成过程中,高效、准确地完成数据对接是关键。本文将探讨如何通过调用wdt.stockout.order.query接口获取出库单,并利用轻易云平台的可视化工具和实时监控特性,将数据可靠、高效地写入至金蝶云星空的batchSave接口,实现批量、定时的数据抓取与处理。

为确保整个流程中的每一环节都不出现漏单,首先需要解决分页和限流等技术难题。通过确定高效的请求频率和合理的分页策略,保障从旺店通·企业奇门 API 获取到完整且连续的数据。同时,通过轻易云平台提供的数据处理过程全生命周期管理,提高系统透明度与操作效率,使得业务人员可以直观地了解每个任务节点运行状态,并及时发现并解决可能存在的问题。

实现大量数据快速写入金蝶云星空,需要特别注意两者之间的数据格式差异。在这个案例中,我们使用了灵活配置映射规则的方法,根据实际业务需求对字段进行自定义转换,从而保障数据无缝迁移。同时,为应对异常情况,我们还设计了自动重试机制,以提升系统整体稳定性。

下一部分将详细介绍如何使用轻易云平台配置上述功能和调用相关API,确保出库单记录能够顺畅、安全地从旺店通·企业奇门传输至金蝶云星空。 如何开发钉钉API接口

调用旺店通·企业奇门接口获取并加工出库单数据

在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query来查询出库单,并对数据进行初步加工。

接口配置与请求参数

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

{
  "api": "wdt.stockout.order.query",
  "method": "POST",
  "number": "order_no",
  "id": "stockout_id",
  "pagination": {
    "pageSize": 30
  },
  "idCheck": true,
  "condition": [
    [
      {"field":"order_type","logic":"eqv2","value":"2"},
      {"field":"status","logic":"ineqv2","value":"5"}
    ],
    [
      {"field":"order_type","logic":"eqv2","value":"2"},
      {"field":"status","logic":"ineqv2","value":"113"}
    ]
  ],
  "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":"2调拨出库,3采购退货出库,4盘亏出库,5生产出库,7其他出库,8多发出库,9纠错出库,10保修配件出库,11初始化出库,12jit拣货出库,13委外出库"},
    {"field":"status","label":"出库单状态","type":"string","describe":"出库单状态5:已取消,50:待审核,55:已审核,95:已发货,110:已完成(默认查已发货已完成单据),113:异常发货"},
    {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)(不支持一次推送多个仓库编号)"},
    {"field":"src_order_no","label":"源单号","type":"string","describe":"源单号"},
    {"field":"stockout_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 用于指定查询时间范围,这两个参数分别取自上次同步时间和当前时间。
    • order_type 固定为"2",表示调拨出库。
    • status 排除值为"5"(已取消)和"113"(异常发货),确保查询到有效的订单。
    • warehouse_no, src_order_no, stockout_no 等字段根据实际需求可选填。
  2. 分页处理

    • 使用 page_sizepage_no 参数进行分页,每次请求最多返回30条记录。
  3. 条件过滤

    • 配置了两个条件组,每组包含两个条件,用于过滤符合特定条件的订单。

数据转换与写入

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

  1. 字段映射

    • 将API返回的数据字段映射到目标系统所需的字段。例如,将 order_no 映射为目标系统中的订单编号。
  2. 数据类型转换

    • 确保所有日期、数值等字段的数据类型符合目标系统要求。例如,将日期字符串转换为标准日期格式。
  3. 去重与校验

    • 根据配置的主键字段如 stockout_id 对数据进行去重。
    • 校验关键字段是否为空或无效,如订单编号、仓库编号等。
  4. 错误处理

    • 对于无法解析或缺失关键字段的数据记录,可以记录日志或发送告警,以便后续人工干预。

通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取并处理出库单数据,为后续的数据集成工作打下坚实基础。 打通钉钉数据接口

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例

在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何通过轻易云数据集成平台配置元数据,实现这一过程。

1. 配置API接口元数据

首先,我们需要配置金蝶云星空API接口的元数据。以下是一个典型的元数据配置示例:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 20,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{src_order_no}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"ZJDB10_SYS"},
    {"field":"FBizType","label":"业务类型","type":"string","describe":"下拉列表","value":"NORMAL"},
    {"field":"FTransferDirect","label":"调拨方向","type":"string","describe":"下拉列表","value":"GENERAL"},
    {"field":"FTransferBizType","label":"调拨类型","type":"string","describe":"下拉列表","value":"InnerOrgTransfer"},
    {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"FStockOutOrgId","label":"调出库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"FOwnerTypeOutIdHead","label":"调出货主类型","type": "string", "describe": "多类别基础资料列表", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}},
    {"field": "FOwnerOutIdHead", "label": "调出货主", "type": "string", "describe": "多类别基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}},
    {"field": "FStockOrgId", "label": "调入库存组织", "type": "string", "describe": "组织",     "parser":{"name" :  "ConvertObjectParser" , "params" :  "FNumber"}},
    {"field" :  "FSETTLECURRID" ,   "label" :   "结算币别" ,    "type" :    "string" ,  "describe" :    "基础资料",     "parser":{"name" :  "ConvertObjectParser" , "params" :  "FNumber"}},
    {"field" :  "FDate",    "label" :   日期,     "type:" string,     describe: 日期},
    {"field: FNote, label: 备注, type: string, describe: 多行文本},
    {
      field: FBillEntry,
      label: 明细信息,
      type: array,
      describe: 1,
      children: [
        { field: FMaterialId, label: 物料编码, type: string, describe: 基础资料, parser: { name: ConvertObjectParser, params: FNumber }, value: {{details_list.goods_no}}, parent: FBillEntry },
        { field: FCMKBarCode, label: 零售条形码, type: string, describe: 文本, parent: FBillEntry },
        { field: FQty, label: 调拨数量, type:string , describe:数量, value:{{details_list.goods_count}},parent:FBillEntry},
        { field:FSrcStockId,label:调出仓库,type:string,describe:基础资料,parser:{name:ConvertObjectParser,params:FNumber},value:{src_order_no},parent:FBillEntry},
        { field:FSrcStockLocId,label:调出仓位,type:string ,describe维度关联字段,parser:{name:"ConvertObjectParser",params:"FNumber"},parent:"FBillEntry"},
        { field:"FDestStockId", label:"调入仓库", type:"string", describe:"基础资料", parser:{ name:"ConvertObjectParser", params:"FNumber"}, value:"CK006", parent:"FBillEntry"},
        { field:"FDestStockLocId", label:"调入仓位", type:"string", describe:"维度关联字段", parser:{ name:"ConvertObjectParser", params:"FNumber"}, parent:"FBillEntry"},
        { field:"FNoteEntry", label:"备注", type:"string", describe:"多行文本", parent:"FBillEntry"},
        { field:"FISFREE", label:"赠品", type:"string", describe:"复选框", parent:"FBillEntry"}
      ]
    },
    { label :旺店通调拨单号 , field : F_wk_WDTDH , type : string , value :{src_order_no}},
    { label :实际调入仓库 , field : F_wk_SJDRCK , type : string , value : KC-001-WDT , parser :{ name : ConvertObjectParser , params : FNumber}},
    { label :实际调出仓库 , field : F_wk_SJDCCK , type : string , value :{warehouse_no}, parser :{ name : ConvertObjectParser , params : FNumber}}
  ],
  otherRequest:[
     {
        field :"FormId",
        label :"业务对象表单Id",
        type :"string",
        describe :"必须填写金蝶的表单ID如:PUR_PurchaseOrder",
        value :"STK_TransferDirect"
     },
     {
        field :"IsAutoSubmitAndAudit",
        label :"提交并审核",
        type :"bool",
        value :"true"
     },
     {
        field :"IsVerifyBaseDataField",
        label :"验证基础资料",
        type :"bool",
        describe :"是否验证所有的基础资料有效性,布尔类,默认false(非必录)",
        value :"false"
     },
     {
        field :"Operation",
        label :"执行的操作",
        type :"string",
        value :"Save"
     }
   ]
}

2. 数据提取与清洗

在ETL过程中,我们首先需要从源系统提取原始数据,并进行必要的数据清洗和预处理。例如,从源系统中提取订单编号、物料编码、数量等信息,并确保这些数据符合目标系统的要求。

3. 数据转换

接下来,我们将清洗后的数据按照金蝶云星空API接口的要求进行转换。通过配置元数据中的parser字段,可以实现对特定字段的数据转换。例如,将src_order_no转换为目标系统中的FBillNo字段,将details_list.goods_no转换为FBillEntry.FMaterialId字段等。

示例代码

以下是一个简单的数据转换示例:

def transform_data(source_data):
    transformed_data = []

    for order in source_data:
        transformed_order = {
            'FBillNo': order['src_order_no'],
            'FBillTypeID': {'FNumber': 'ZJDB10_SYS'},
            'FBizType': 'NORMAL',
            'FTransferDirect': 'GENERAL',
            'FTransferBizType': 'InnerOrgTransfer',
            'FSaleOrgId': {'FNumber': order['sale_org_id']},
            'FSettleOrgId': {'FNumber': order['settle_org_id']},
            'FStockOutOrgId': {'FNumber': order['stock_out_org_id']},
            'FOwnerTypeOutIdHead': {'FNumber': order['owner_type_out_id_head']},
            'FOwnerOutIdHead': {'FNumber': order['owner_out_id_head']},
            'FStockOrgId': {'FNumber': order['stock_org_id']},
            'FSETTLECURRID': {'FNumber': order['settle_curr_id']},
            'FDate': order['date'],
            'FBillEntry': [
                {
                    'FMaterialId': {'FNumber': detail['goods_no']},
                    'FCMKBarCode': detail['barcode'],
                    'FQty': detail['goods_count'],
                    'FSrcStockId': {'src_order_no'},
                    'FDestStockId': {'CK006'}
                } for detail in order['details_list']
            ],
            # Additional fields...
        }

        transformed_data.append(transformed_order)

    return transformed_data

4. 数据加载

最后,将转换后的数据通过轻易云平台提供的API接口写入到金蝶云星空系统中。我们可以使用HTTP POST请求将数据发送到目标系统:

import requests

def load_data(transformed_data):
    url = "<金蝶云星空API地址>"

    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.post(url, json=transformed_data, headers=headers)

    if response.status_code == 200:
        print("Data loaded successfully")
    else:
        print("Failed to load data:", response.text)

# 示例调用
source_data = get_source_data() # 从源系统获取原始数据
transformed_data = transform_data(source_data) # 转换数据
load_data(transformed_data) # 加载到目标系统

通过上述步骤,我们成功地完成了从源系统到金蝶云星空系统的数据ETL过程。每个环节都严格按照元数据配置进行,以确保数据在不同系统之间无缝对接和高效传输。 钉钉与WMS系统接口开发配置

更多系统对接方案