使用轻易云平台进行ETL转换和数据写入实战

  • 轻易云集成顾问-彭亮
### 旺店通·企业奇门销售退货单数据集成到金蝶云星辰V2 在本案例中,我们将深入探讨如何高效地将旺店通·企业奇门系统中的销售退货单数据集成到金蝶云星辰V2。主要聚焦于API接口的调用、数据格式转换及大规模数据处理等技术细节。 首先,通过调用`wdt.stockin.order.query.refund`接口,从旺店通·企业奇门系统中获取全部待处理的销售退货单数据。这一过程需应对分页和限流问题,确保每次请求都完整且不重复。此外,实现定时可靠的数据抓取也是关键,以便保持与源系统的数据同步。 接下来解决的是多批次、大量数据快速写入到金蝶云星辰V2的问题。在这一阶段,需要通过调用其提供的`/jdy/v2/scm/sal_in_bound`API,将拉取到的数据准确无误地写入目标系统。为保证效率,同时避免对接口施加过大的压力,采取批量操作方式,并结合错误重试机制,以应对可能出现的网络故障或其他异常情况。 值得注意的是,源端和目标端可能存在数据格式差异,比如字段名称的不一致或编码格式不同,这就需要我们进行精确的数据映射和格式转换。通过轻易云平台定制化的映射工具,可以直观地完成这一复杂步骤,提高整体开发配置效率并减少出错几率。 最后,在整个集成流程中,通过实时监控与日志记录功能,我们可以随时了解各个环节的数据处理状态。一旦发生异常情况,可迅速查明原因并进行及时调整,从而保障整个集成任务稳定运行。 以上仅为该技术方案开篇部分,接下来将详细描述具体实现流程及相关代码示例,为大家呈现一个完整、高效并具备实用价值的系统对接实践案例。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D18.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockin.order.query.refund获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`,获取销售退货单数据并进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据,以便正确调用接口并获取所需数据。以下是元数据配置的详细信息: ```json { "api": "wdt.stockin.order.query.refund", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockin_id", "name": "order_no", "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "status", "label": "状态", "type": "string", "describe": "入库单状态 10已取消20编辑中30待审核60待结算80已完成(默认查询80已完成单据)", "value": "80" }, { "field": "shop_no", "label": "店铺编号", "type": "string", "describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息" } ], ... } ``` #### 请求参数详解 - `start_time` 和 `end_time`:用于指定增量获取数据的时间范围。`start_time`表示上次同步的时间点,而`end_time`则为当前时间。这两个字段确保我们只获取到最新的变动数据。 - `status`:默认值为"80",表示只查询已完成的入库单据。 - `shop_no`:用于区分不同店铺的数据。 此外,还有分页参数: - `page_size`:每页返回的数据条数,默认为40。 - `page_no`:页号,从0开始。 这些参数确保了我们能够有效地分页处理大量数据。 #### 数据请求与清洗 在调用接口后,我们会收到一个包含多个退货单记录的响应。为了进一步处理这些数据,我们需要进行初步清洗和转换。 1. **解析响应**:首先解析API返回的数据结构,提取出有用的信息。例如,每个退货单的订单号、入库单ID等关键字段。 2. **过滤无效数据**:根据业务需求过滤掉不符合条件的数据。例如,只保留状态为"80"(已完成)的记录。 3. **格式转换**:将日期、金额等字段转换为统一格式,以便后续处理和存储。 #### 实际案例 假设我们从接口返回了以下JSON响应: ```json { ... “data”: [ { “order_no”: “SO123456”, “stockin_id”: “SI123456”, “status”: “80”, “shop_no”: “SHOP001”, ... }, ... ] } ``` 我们可以编写如下代码进行初步处理: ```python import json from datetime import datetime # 假设response是API返回的JSON字符串 response = ''' { ... } ''' # 将JSON字符串解析为Python字典 data = json.loads(response) # 提取有用的信息 orders = data.get('data', []) # 初步清洗和转换 cleaned_orders = [] for order in orders: if order['status'] == '80': # 保留已完成订单 cleaned_order = { 'order_no': order['order_no'], 'stockin_id': order['stockin_id'], 'shop_no': order['shop_no'], 'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S') } cleaned_orders.append(cleaned_order) # 输出清洗后的订单列表 print(cleaned_orders) ``` 通过上述步骤,我们成功调用了旺店通·企业奇门接口,并对返回的数据进行了初步清洗和加工,为后续的数据转换与写入奠定了基础。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换:将销售退货单数据写入金蝶云星辰V2 在数据集成生命周期的第二步,我们需要将已经从源平台(如旺店通)获取并清洗过的数据,转换为目标平台(金蝶云星辰V2 API接口)所能够接收的格式,并最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台进行这一过程的配置和实现。 #### 元数据配置解析 我们需要将销售退货单的数据转换为金蝶云星辰V2 API接口所需的格式。以下是元数据配置的详细解析: ```json { "api": "/jdy/v2/scm/sal_in_bound", "effect": "EXECUTE", "method": "POST", "number": "{random}", "id": "{random}", "name": "{random}", "idCheck": true, "request": [ { "field": "bill_date", "label": "出库日期", "type": "date", "describe": "格式:2019-01-01", "value": "{check_time}" }, { "field": "customer_number", "label": "客户编码", "type": "string", "describe": "客户编码", "value": "{shop_no}" }, { "field": "bill_no", "label": "单据编码", "type": "string", "describe": "单据编码", "value": "{order_no}" }, { "field": "IsAutoSubmitAndAudit", "label": "是否自动审核", "type": "string", "value":"true" }, { ... ``` #### 数据字段映射与转换 1. **出库日期 (`bill_date`)** - 类型:日期 - 描述:格式为`2019-01-01` - 来源字段:`{check_time}` 2. **客户编码 (`customer_number`)** - 类型:字符串 - 描述:客户编码 - 来源字段:`{shop_no}` 3. **单据编码 (`bill_no`)** - 类型:字符串 - 描述:单据编码 - 来源字段:`{order_no}` 4. **是否自动审核 (`IsAutoSubmitAndAudit`)** - 类型:字符串 - 固定值:`true` 5. **商品明细 (`material_entity`)** - 类型:数组 - 描述:商品明细列表,包含以下子字段: - 商品编码 (`material_number`) - 类型:字符串 - 来源字段:`{{details_list.spec_no}}` - 价税合计 (`all_amount`) - 类型:字符串 - 来源字段:`{{details_list.tax_amount}}` - 仓库编码 (`stock_number`) - 类型:字符串 - 来源字段:`{warehouse_no}` - 数量 (`qty`) - 类型:浮点数 - 来源字段:`{{details_list.goods_count}}` - 是否赠品 (`is_free`) - 类型:字符串 - 转换逻辑: ```sql CASE WHEN {{details_list.tax_amount}}>0 THEN 'false' ELSE 'true' END ``` ... #### 配置示例 以下是一个完整的配置示例,用于将销售退货单的数据转换并写入金蝶云星辰V2: ```json { ... // 数据请求部分省略,详见上文解析部分。 } ``` #### 实现步骤 1. **定义API接口和请求方法** 在轻易云数据集成平台中,定义API接口路径为`/jdy/v2/scm/sal_in_bound`,请求方法为POST。 2. **配置请求参数** 根据元数据配置,将每个字段对应到源数据中的相应字段。例如,将出库日期映射到源数据中的`check_time`,客户编码映射到`shop_no`等。 3. **处理数组类型的字段** 对于数组类型的字段,如商品明细(`material_entity`),需要遍历源数据中的商品列表,并逐一映射各个子字段。 4. **应用转换逻辑** 对于需要特殊处理的字段,如是否赠品(`is_free`),根据价税合计(`tax_amount`)的值应用条件逻辑进行转换。 5. **发送请求并处理响应** 配置完成后,通过轻易云平台发送POST请求至金蝶云星辰V2 API接口,并处理返回结果,确保数据成功写入目标系统。 通过以上步骤,我们可以高效地完成从源平台到目标平台的数据ETL转换,实现不同系统间的数据无缝对接。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)