从销售出库到发货单:轻易云集成平台的实际应用

  • 轻易云集成顾问-李国敏
### 案例分享:旺店通·企业奇门数据集成到用友U8的解决方案 在本文中,我们将探讨如何通过轻易云数据集成平台,将旺店通·企业奇门(以下简称“奇门”)的数据高效地集成到用友U8系统。具体案例是将A oms销售出库单转换为u8发货单,方案名称为"A oms销售出库单 => u8发货单_211"。 我们的任务是利用wdt.stockout.order.query.trade API接口从奇门获取数据,并通过/apilink/u8api接口向用友U8写入数据。在实施过程中,需要关注以下几个关键技术点: 1. **高吞吐量的数据写入能力**: 在大量订单处理场景下,高效的数据写入能力至关重要。我们必须确保系统能够实时响应,并能快速批量导入到用友U8中,而不影响业务连续性。 2. **集中监控和告警系统**: 实时跟踪每个数据集成任务的状态和性能,这样可以及时发现并解决潜在问题。例如,当某一批次的订单未成功写入时,可迅速触发告警机制以进行人工干预或自动重试。 3. **分页与限流处理**: 由于API接口可能对查询结果进行分页且有访问频率限制,所以需要实现稳定可靠的抓取逻辑,以保证全量、无遗漏地获取所有必要的数据。这包括动态调整分页参数及管理请求频率,避免触碰API调用上限。 4. **自定义数据转换逻辑**: 奇门和用友U8之间存在不同的数据格式与结构差异。我们需要设计特定的映射规则来适应各种复杂需求,例如字段重命名、类型转化等,以确保两者间的数据准确匹配。 5. **异常处理与错误重试机制**: 在实际运行过程中,不可避免会遇到网络波动或服务不可达等情况。因此,需要一个健壮的异常处理框架,包括详细日志记录及智能化重试机制,以最高程度保障系统鲁棒性。 6. **可视化操作界面支持**: 利用轻易云提供的可视化设计工具,可以直观展示整个流程,使得配置调整更加简便,同时提升运维效率。这种透明度帮助技术团队全面掌握各个环节状态,从而更好定位并解决问题。 接下来,我们将详细介绍此方案具体实施步骤以及代码示例,旨在为类似需求提供实战参考依据。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`获取销售出库单数据,并进行初步的数据加工。 #### 接口概述 接口`wdt.stockout.order.query.trade`用于查询销售出库单信息,支持多种查询条件和分页功能。该接口采用POST请求方式,返回的数据包括订单状态、时间区间、店铺编号、仓库编号等信息。 #### 请求参数配置 根据元数据配置,以下是请求参数的详细说明: - **status**: 订单状态,类型为字符串。例如:5已取消,55已审核,95已发货等。 - **start_time**: 开始时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。 - **end_time**: 结束时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。 - **src_order_no**: 系统订单编号,可以单独按照系统单号查询。 - **src_tid**: 原始单号,可以单独按照原始单号查询。 - **stockout_no**: 出库单号,可以单独按照出库单号查询。 - **is_by_modified**: 时间查询条件,当指定状态字段后,传0按照原销售出库单接口规则返回,传1按照出库单的最后修改时间进行返回。 - **shop_nos**: 店铺编号,用于获取指定店铺的单据数据信息。 - **warehouse_no**: 仓库编号,用于获取指定仓库的单据数据信息(不支持一次推送多个仓库编号)。 - **page_size**: 每页返回的数据条数,默认值为40。 - **page_no**: 页号,从0开始。 #### 请求示例 以下是一个完整的请求示例: ```json { "status": "95", "start_time": "2024-01-30 23:59:59", "end_time": "2024-01-31 23:59:59", "shop_nos": "100001,100002,100003,100004,100005,100006,100010,020709", "warehouse_no": "100010", "page_size": "50", "page_no": "0" } ``` #### 数据加工 在获取到销售出库单数据后,需要对数据进行初步加工,以便后续的数据转换与写入。主要的加工步骤包括: 1. **字段映射与转换**:将源系统中的字段映射到目标系统所需的字段。例如,将`order_no`映射到U8发货单中的订单编号字段。 2. **数据清洗**:过滤掉无效或不符合业务规则的数据。例如,只保留状态为“已发货”的订单。 3. **增量更新处理**:根据时间戳或其他标识符处理增量更新的数据。例如,通过`start_time`和`end_time`参数获取最近一天内的新订单或更新订单。 #### 示例代码 以下是一个简单的数据加工示例代码: ```python import requests import json # 设置请求URL和头部信息 url = 'https://api.wangdian.cn/openapi2/wdt.stockout.order.query.trade' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { "status": "95", "start_time": "2024-01-30 23:59:59", "end_time": "2024-01-31 23:59:59", "shop_nos": "100001,100002,100003,100004,100005,100006,100010,020709", "warehouse_no": "100010", "page_size": "50", "page_no": "0" } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与转换 processed_data = [] for order in data['orders']: if order['status'] == '95': # 保留已发货订单 processed_order = { 'order_id': order['order_no'], 'order_type': order['order_type_name'], # 添加更多需要映射和转换的字段 } processed_data.append(processed_order) # 输出处理后的数据 print(json.dumps(processed_data, indent=4)) else: print(f"请求失败,状态码:{response.status_code}") ``` 通过上述步骤,我们能够有效地调用旺店通·企业奇门接口获取销售出库单数据,并进行初步的数据加工,为后续的数据转换与写入打下坚实基础。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 用友U8API接口数据转换与写入技术案例 在轻易云数据集成平台中,将源平台的OMS销售出库单数据转换并写入到目标平台用友U8的发货单,需要经过ETL(提取、转换、加载)过程。本文将详细探讨如何配置和使用元数据,将源数据转换为用友U8API接口所能接收的格式,并最终成功写入目标系统。 #### 数据请求与清洗 首先,我们需要确保从源平台OMS获取的数据是完整且干净的。通过轻易云平台的数据请求功能,可以提取所需的销售出库单数据,并进行必要的清洗操作,以确保数据的一致性和准确性。 #### 数据转换 在数据转换阶段,我们需要根据用友U8API接口的要求,对数据进行相应的格式化和映射。以下是关键字段及其对应关系的详细配置: 1. **单据信息** - 单据模版:固定值 "单据模版" - 红蓝标记:固定值 "蓝" 2. **单据头** - 发货单号:映射至 `{order_no}` - 发货日期:映射并格式化至 `{{consign_time|datetime}}` - 销售类型:固定值 "国内零售" - 客户简称:映射至 `{shop_name}`,并通过元数据配置进行正向映射 - 销售部门:同样映射至 `{shop_name}`,并通过元数据配置进行正向映射 - 税率:固定值 "13" - 交易编号:映射至 `{src_tids}` - 备注:组合字段,包含 `{logistics_name} {receiver_area}-{receiver_address}` - 制单人:映射至 `{operator_name}` - 订单号:映射至 `{trade_no}` - 客户地址:组合字段,包含 `{receiver_area}-{receiver_address}` - 货运公司:映射至 `{logistics_name}` - 业务员:固定值 "林鑫贵" - 审核日期:映射并格式化至 `{{consign_time|datetime}}` 3. **单据体** 每个“行”对象包含以下字段: - 仓库名称:映射至 `{warehouse_no}`,并通过元数据配置进行反向映射 - 存货编码:映射至 `{{details_list.goods_no}}` - 数量:映射至 `{{details_list.goods_count}}` - 税率:固定值 "13" - 含税单价:使用函数计算 `_function round({{details_list.share_amount}}/{{details_list.goods_count}},4)` #### 数据写入 完成上述转换后,即可将处理好的数据通过POST方法发送到用友U8API接口。以下是具体的API调用配置: - **接口URL**: `/apilink/u8api` - **方法**: POST - **执行效果**: EXECUTE - **ID检查**: true 具体请求体结构如下: ```json { "data": { "单据信息": { "单据模版": "单据模版", "红蓝标记": "蓝" }, "单据头": { "发货单号": "{order_no}", "发货日期": "{{consign_time|datetime}}", "销售类型": "国内零售", "客户简称": "{shop_name}", "销售部门": "{shop_name}", "税率": "13", "交易编号": "{src_tids}", "备注": "{logistics_name} {receiver_area}-{receiver_address}", "制单人": "{operator_name}", "订单号": "{trade_no}", "客户地址": "{receiver_area}-{receiver_address}", "货运公司": "{logistics_name}", "业务员": "林鑫贵", "审核日期": "{{consign_time|datetime}}" }, "单据体": [ { "行": { "仓库名称": "{warehouse_no}", "存货编码": "{{details_list.goods_no}}", "数量": "{{details_list.goods_count}}", "税率": "13", "_function round({{details_list.share_amount}}/{{details_list.goods_count}},4)" } } ] }, ... } ``` 最后,通过调用`consignment/create`和`consignment/audit`两个接口,实现发货单的创建和审核。 #### 小结 本文详细介绍了如何利用轻易云平台将OMS销售出库单的数据转换为用友U8API接口所能接收的格式,并成功写入目标系统。通过精确的元数据配置和ETL过程管理,确保了整个集成过程高效、可靠。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)