使用轻易云平台完成ETL转换并高效写入班牛

  • 轻易云集成顾问-彭亮
### 吉客云·奇门数据集成到班牛:高效、精准的数据对接方案 在实际业务运作中,企业经常会遇到不同系统间的数据交互和整合需求。本文将专注于一个具体的技术案例——如何实现吉客云·奇门平台中的退换货单(发货)数据,通过轻易云数据集成平台,高效、精准地回写至班牛系统。 此次项目的主要任务是利用jackyun.tradenotsensitiveinfos.list.get接口,从吉客云·奇门获取相关数据,并通过task.update接口,将这些信息批量、高速地写入班牛库中。从而使两个系统之间保持数据的一致性和实时更新。 首先,我们需要解决几个关键技术问题,包括如何确保从吉客云·奇门提取的数据不遗漏,处理分页和限流机制,以及应对两者之间的数据格式差异。在此基础上,还需兼顾以下几点: 1. **高吞吐量**:支持大量退换货单的快速写入,使得大规模订单信息能够迅速被集成到班牛系统。 2. **自定义数据转换逻辑**:根据特定业务需求,对数据信息进行适配与转换,以满足输出要求。 3. **异常处理与重试机制**:为确保整个流程稳健运行,当出现错误时及时采取重试策略。 4. **集中监控与告警**:通过可视化工具实时监控整个集成过程,即时发现并处理潜在问题,提高整体效率和可靠性。 在接下来的文章内容中,我们将详细探讨如何配置轻易云平台,实现上述功能点及各环节的重要操作步骤,包括API调用细节、参数设置以及异常检出处理等方面,为读者提供一个全面且实用的参考案例。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口以获取数据是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台配置元数据,通过调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`来获取并加工数据。 #### 接口概述 吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`主要用于查询销售单的非敏感信息。该接口采用POST请求方式,支持多种查询条件和分页功能,能够高效地返回所需的订单数据。 #### 元数据配置解析 在轻易云平台上,我们需要配置元数据来定义如何调用该接口。以下是关键的元数据配置项及其含义: - **api**: `jackyun.tradenotsensitiveinfos.list.get` - 指定要调用的API接口名称。 - **effect**: `QUERY` - 表示这是一个查询操作。 - **method**: `POST` - 指定请求方法为POST。 - **number**: `tradeNo` - 定义销售单号字段,用于标识订单。 - **id**: `tradeId` - 定义订单ID字段。 - **name**: `tradeNo` - 再次定义销售单号字段,确保唯一性检查。 - **idCheck**: `true` - 启用ID唯一性检查。 #### 请求参数配置 请求参数是接口调用的重要组成部分,通过这些参数可以灵活地筛选和分页查询订单信息。以下是一些关键的请求参数: 1. **modified_begin** 和 **modified_end** - 用于指定修改时间的起始和结束时间,必须同时存在且时间间隔不能超过七天。 2. **startModified** 和 **endModified** - 用于指定最后修改时间的起始和截止时间。 3. **tradeNo** - 销售单号,可以传入多个单号,用半角逗号分隔。 4. **pageSize** - 每页记录数,默认50,最大1000。此处我们设置为100。 5. **pageIndex** - 页码,从0开始表示第一页。 6. **hasTotal** - 是否返回总记录数,首次调用时可以传1获取总记录数。 7. **startConsignTime** 和 **endConsignTime** - 发货时间的起始和截止时间,这里使用了函数`from_unixtime`来动态计算时间范围。 8. **tradeStatus** - 订单状态,用于筛选特定状态的订单。 9. **tradeType** - 订单类型,此处设置为92表示特定类型的订单。 10. **fields** - 需要返回的字段列表,用逗号分隔。 #### 自动填充响应 在轻易云平台上,我们可以启用自动填充响应功能(autoFillResponse),这将自动将API响应的数据填充到目标系统中,大大简化了数据处理流程。 #### 条件过滤 为了进一步精确地筛选所需的数据,我们可以配置条件过滤。例如: ```json "condition":[ [{"field":"tradeStatus","logic":"in","value":"6000,9090"}, {"field":"buyerMemo","logic":"like","value":"班牛"}] ] ``` 上述条件表示仅查询订单状态为6000或9090,并且买家备注包含“班牛”的订单。这些条件确保了我们获取的数据更加符合业务需求。 #### 数据清洗与转换 在获取到原始数据后,我们通常需要进行一定的数据清洗与转换,以便后续处理。例如,可以通过自定义脚本或内置函数对日期格式进行转换,对字段进行重命名等操作。这一步骤确保了数据的一致性和可用性,为后续的数据写入奠定基础。 通过以上步骤,我们成功地完成了从吉客云·奇门接口获取并加工数据的全过程。这不仅提高了数据集成效率,也确保了业务流程的顺畅运行。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入班牛API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台班牛API接口所能够接收的格式,最终写入目标平台。本文将详细介绍如何使用轻易云数据集成平台配置元数据,实现这一过程。 #### API接口配置 我们需要通过POST方法调用班牛的`task.update`接口,具体的元数据配置如下: ```json { "api": "task.update", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "app_id", "label": "小程序id", "type": "int", "value": "17000"}, {"field": "project_id", "label": "群组ID", "type": "int", "value": "25821"}, {"field": "task_id", "label": "工单id", "type": "int", "value": "_function substring_index( '{buyerMemo}' , ':' , -1)" }, { "field": "contents", "label": "contents", "type": "object", "children": [ { "field": "26644", "label": "补发/换货快递", "type": "string", "value": "_mongoQuery b3fe44c1-0495-3153-b6d4-3941b5fc359a findField=content.options_id where={\"content.options_title\":{\"$eq\":\"{logisticName}\"}}" }, { "field": "26645", "label": "补发/换货物流单号", "type": "string", "value": "{mainPostid}" }, { "field": "26643", "label":"补发/换货日期", ,"type":"string" ,"value":"{consignTime}" }, { ,"field":"78594" ,"label":"补发出库" ,"type":"int" ,"value":"78590" }, { ,"field":"5" ,"label":"工单状态" ,"type":"int" ,"value":"1" } ] } ] } ``` #### 数据请求与清洗 首先,我们从源平台获取原始数据,并进行必要的清洗和预处理。假设我们从吉客云获取了退换货单信息,这些信息包含了买家备注、物流名称、物流单号和发货时间等字段。 在清洗过程中,需要对这些字段进行标准化处理。例如,将买家备注中的特定部分提取出来作为工单ID,或者根据物流名称查询对应的选项ID。 #### 数据转换与写入 接下来,我们需要将清洗后的数据按照班牛API接口要求进行转换,并写入目标平台。以下是具体步骤: 1. **设置基础字段**: - `app_id` 和 `project_id` 是固定值,分别为17000和25821。 - `task_id` 通过函数 `_function substring_index( '{buyerMemo}' , ':' , -1)` 从买家备注中提取。 2. **设置嵌套对象字段**: - `contents` 字段是一个对象,包含多个子字段。 - `26644` 字段通过 `_mongoQuery` 查询MongoDB数据库,根据物流名称获取对应的选项ID。 - `26645`, `26643`, `78594`, 和 `5` 字段分别对应物流单号、发货日期、出库状态和工单状态。 以下是一个示例代码片段,用于实现上述逻辑: ```python import requests import json # 定义请求URL和头部信息 url = 'https://api.banniu.com/task.update' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'app_id': 17000, 'project_id': 25821, 'task_id': extract_task_id(buyer_memo), 'contents': { '26644': query_logistic_option(logistic_name), '26645': main_postid, '26643': consign_time, '78594': 78590, '5': 1 } } # 将请求体转换为JSON格式 data = json.dumps(payload) # 发起POST请求 response = requests.post(url, headers=headers, data=data) # 检查响应状态码 if response.status_code == 200: print("Data successfully written to Banniu") else: print(f"Failed to write data: {response.text}") ``` #### 函数实现 为了完成上述步骤,我们需要实现两个辅助函数:`extract_task_id` 和 `query_logistic_option`。 ```python def extract_task_id(buyer_memo): # 假设买家备注格式为: xxx:taskId return buyer_memo.split(':')[-1] def query_logistic_option(logistic_name): # 模拟MongoDB查询,根据物流名称获取选项ID # 实际实现中需要连接MongoDB并执行查询操作 mongo_query_result = { '顺丰速运': '12345', '圆通速递': '67890' } return mongo_query_result.get(logistic_name, '') ``` 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并通过班牛API接口写入了目标平台。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)