利用轻易云实现ETL并将数据写入金蝶云星空

  • 轻易云集成顾问-贺强

旺店通·旗舰奇门数据集成到金蝶云星空技术案例分享

在此次系统对接项目中,我们成功实现了旺店通·旗舰奇门销售出库单数据无缝集成至金蝶云星空平台。这一过程不仅提升了企业的数据处理效率,还确保信息的精准和实时更新。具体运行方案命名为「旺店通销售出库单-金蝶直接调拨单【202305】」。

1. 调用接口抓取订单数据

首先,通过调用旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail,我们能够按时、可靠地获取最新的销售出库单数据。在处理过程中,我们特别关注分页和限流问题,以避免系统崩溃或因流量过大导致的数据丢失。

2. 数据格式转换与映射

在获得原始数据后,我们进行了必要的数据格式转换。考虑到两个系统间的字段差异和结构不一致性,通过定制化脚本实现自动映射,这一步骤是确保数据信息正确传递给金蝶云星空的重要前提。

3. 批量写入与性能优化

使用金蝶云星空提供的API batchSave,我们实现了从源头大量订单数据快速批量写入目标系统。在执行过程中,为防止服务器压力过高引发故障,对读写操作进行合理排程,并设置相应缓存策略以提升整体性能表现。

4. 实时监控与日志记录

为了进一步提高透明度及异常排查效率,本次集成方案中还加入了实时监控机制,将每个操作步骤详尽记录于日志文件。一旦发生错误,可以通过预设重试机制及时恢复链条运作,保障业务连续性及准确率。

以上是此次案例的开端描述,在后续内容中,将详细阐述各环节具体实施方法以及实际遇到的问题解决策略。 企业微信与OA系统接口开发配置

调用旺店通·旗舰奇门接口获取并加工数据

在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过调用旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail来获取销售出库单的详细信息,并对数据进行初步加工。

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的元数据配置,接口调用采用POST方法,主要参数包括分页参数和业务参数。

分页参数

分页参数用于控制每次请求的数据量和页码:

  • page_size: 每页返回的数据条数,默认值为50。
  • page_no: 当前请求的页码,默认值为1。
{
  "pager": {
    "page_size": "50",
    "page_no": "1"
  }
}
业务参数

业务参数用于指定查询条件,包括时间范围、出库单状态、仓库编码等:

  • start_timeend_time: 查询时间范围,分别表示开始时间和结束时间。
  • status_type: 出库单状态类型,默认值为3(按照指定的status状态字段查询)。
  • status: 出库单状态详细信息,当status_type=3时生效。
  • 其他可选参数如warehouse_no(仓库编码)、stockout_no(出库单编号)、shop_nos(店铺编号)等。
{
  "params": {
    "start_time": "{{MINUTE_AGO_30|datetime}}",
    "end_time": "{{CURRENT_TIME|datetime}}",
    "status_type": "3",
    "status": "110",
    "warehouse_no": "",
    "stockout_no": "",
    "shop_nos": "",
    "src_order_no": "",
    "need_sn": "",
    "position": ""
  }
}

数据请求与清洗

在实际操作中,我们首先需要构建请求体,并通过HTTP POST方法向接口发送请求。以下是一个示例代码片段,用于发起请求并接收响应:

import requests
import json

url = 'https://api.wangdian.cn/openapi2/wdt.wms.stockout.sales.querywithdetail'
headers = {'Content-Type': 'application/json'}
payload = {
  "pager": {
    "page_size": "50",
    "page_no": "1"
  },
  "params": {
    "start_time": "{{MINUTE_AGO_30|datetime}}",
    "end_time": "{{CURRENT_TIME|datetime}}",
    "status_type": "3",
    "status": "110"
  }
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()

在接收到响应后,我们需要对数据进行清洗和初步加工。通常,这一步包括以下几个方面:

  1. 数据格式转换:将JSON格式的数据转换为适合后续处理的结构,如DataFrame。
  2. 字段筛选:根据需求筛选出必要的字段,如订单编号、商品详情等。
  3. 异常处理:处理可能存在的数据异常,如空值、重复值等。

以下是一个简单的数据清洗示例:

import pandas as pd

# 假设data包含了从API返回的JSON数据
orders = data['orders']
df = pd.DataFrame(orders)

# 筛选必要字段
df_filtered = df[['order_no', 'stockout_id', 'warehouse_no', 'shop_nos', 'src_order_no']]

# 异常处理:去除空值和重复值
df_cleaned = df_filtered.dropna().drop_duplicates()

数据转换与写入

完成初步清洗后,我们可以将数据转换为目标系统所需的格式,并写入目标数据库或文件系统。这一步通常涉及到更多复杂的逻辑,如字段映射、数据类型转换等。

例如,将清洗后的DataFrame写入数据库:

from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://user:password@host/dbname')
df_cleaned.to_sql('sales_orders', con=engine, if_exists='append', index=False)

通过上述步骤,我们实现了从旺店通·旗舰奇门接口获取销售出库单详细信息,并对数据进行了初步加工,为后续的数据集成奠定了基础。在整个过程中,轻易云平台提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,大大提升了业务透明度和效率。 电商OMS与WMS系统接口开发配置

将源平台数据转换并写入金蝶云星空API接口

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

数据请求与清洗

在生命周期的第一步,我们已经成功从源平台(如旺店通)提取了销售出库单的数据,并进行了必要的清洗和预处理。接下来,我们需要将这些数据转换为金蝶云星空所需的格式。

数据转换与写入

根据提供的元数据配置,我们需要将源数据映射到金蝶云星空API的字段中。以下是关键字段及其映射规则:

  1. 单据编号(FBillNo)

    • 源数据字段:order_no
    • 目标字段:FBillNo
    • 类型:string
  2. 单据类型(FBillTypeID)

    • 固定值:ZJDB06_SYS
    • 目标字段:FBillTypeID
    • 类型:string
    • 解析器:ConvertObjectParser
  3. 业务类型(FBizType)

    • 固定值:NORMAL
    • 目标字段:FBizType
    • 类型:string
  4. 调拨方向(FTransferDirect)

    • 固定值:GENERAL
    • 目标字段:FTransferDirect
    • 类型:string
  5. 调拨类型(FTransferBizType)

    • 固定值:InnerOrgTransfer
    • 目标字段:FTransferBizType
    • 类型:string
  6. 销售组织、结算组织、调出库存组织、调入库存组织等(FSaleOrgId, FSettleOrgId, FStockOutOrgId, FStockOrgId)

    • 源数据字段需要通过解析器进行转换,例如使用 ConvertObjectParserFNumber 转换为相应的组织编码。
  7. 日期(FDate)

    • 源数据字段:consign_time
    • 目标字段:FDate
    • 类型:string
    • 格式化为日期时间格式
  8. 备注(FNote)

    • 源数据字段:remark
    • 目标字段:FNote
    • 类型:string
  9. 明细信息(FBillEntry): 明细信息是一个数组,包含多个子项,每个子项需要进行单独映射。

    "children":[
        {"field":"FMaterialId","label":"物料编码","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{details_list.spec_no}}"},
        {"field":"FCMKBarCode","label":"零售条形码","type":"string"},
        {"field":"FQty","label":"调拨数量","type":"string","value":"{goods_count}"},
        {"field":"FSrcStockId","label":"调出仓库","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{warehouse_no}"},
        {"field":"FDestStockId","label":"调入仓库","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"FCSP"},
        {"field":"FDestStockLocId","label":"调入仓位","type":"string"}
    ]
  10. 客户信息(F_POIH_Base)

    {"field": "F_POIH_Base", "label": "客户", "type": "string", "value": "{shop_no}", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}}

API 请求配置

根据元数据配置,我们需要构建一个HTTP POST请求,向金蝶云星空的 batchSave 接口发送转换后的数据。以下是请求配置示例:

{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 20,
        "method": "batchArraySave"
    },
    "request": [
        // 上述映射后的字段
    ],
    "otherRequest": [
        {"field": "FormId", "label": "业务对象表单Id", "type": "string", "value": "STK_TransferDirect"},
        {"field": "IsAutoSubmitAndAudit", "label": "提交并审核", "type": bool, value: false},
        {"field": IsVerifyBaseDataField, label: 验证基础资料, type: bool, value: true},
        {"field": Operation, label: 执行的操作, type: string, value: Save}
    ]
}

实际案例应用

假设我们从旺店通获取了一条销售出库单,包含以下信息:

{
    order_no: 'SO202305001',
    consign_time: '2023-05-01T10:00:00',
    remark: '紧急订单',
    details_list: [
        {
            spec_no: 'MAT001',
            goods_count: '100',
            warehouse_no: 'WH001',
            src_oid: 'ORD123'
        }
    ],
    shop_no: 'SHOP001'
}

我们将这些信息按照上述映射规则转换,并构建HTTP请求体:

{
    api: 'batchSave',
    method: 'POST',
    idCheck: true,
    operation: {
        rowsKey: 'array',
        rows: 20,
        method: 'batchArraySave'
    },
    request:[
        { field:'FBillNo', value:'SO202305001' },
        { field:'FBillTypeID', value:'ZJDB06_SYS' },
        { field:'FBizType', value:'NORMAL' },
        { field:'FTransferDirect', value:'GENERAL' },
        { field:'FTransferBizType', value:'InnerOrgTransfer' },
        { field:'FSaleOrgId', value:'' }, // 根据实际情况填写
        { field:'FSettleOrgId', value:'' }, // 根据实际情况填写
        { field:'FStockOutOrgId', value:'' }, // 根据实际情况填写
        { field:'FOwnerOutIdHead', value:'' }, // 根据实际情况填写
        { field:'FOwnerTypeOutIdHead', value:'' }, // 根据实际情况填写
        { field:'FOwnerOutIdHead', value:'' }, // 根据实际情况填写
        { field:'FOwnerOutIdHead', value:'' }, // 根据实际情况填写
        { field:'FOwnerOutIdHead', value:'' }, // 根据实际情况填写
         ...
         ...
         ...
         ...
         ...
         ...
         ...
         ...
         ... 
     ],
     otherRequest:[
         { field:"FormId", label:"业务对象表单Id", type:"string", describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder",value:"STK_TransferDirect" },
         { field:"IsAutoSubmitAndAudit", label:"提交并审核", type:"bool", describe:"是否验证所有的基础资料有效性,布尔类,默认false(非必录),value:true},
         { Operation,label : 执行的操作,type : string,value : Save}
     ]
}

通过这种方式,我们可以确保源平台的数据被准确地转换并成功写入到金蝶云星空系统中,实现不同系统间的数据无缝对接。 泛微OA与ERP系统接口开发配置

更多系统对接方案