ETL关键步骤:将金蝶销售退货数据写入网易互客

  • 轻易云集成顾问-叶威宏
### 金蝶云星空与网易互客的退货订单数据集成方案 在电商和企业管理系统的对接项目中,如何将不同平台的数据高效、准确地传输并处理一直是一个技术挑战。此次我们分享的是一个具体案例——如何通过轻易云平台实现金蝶销售退货数据实时同步到网易互客订单关闭。 #### 项目背景 本次任务涉及两个核心系统:金蝶云星空和网易互客。在业务流程上,当客户在金蝶云中完成销售退货后,我们需要及时将这一信息传递到网易互客的订单处理模块,以便触发相应的订单关闭操作。这一过程所需的数据集成不仅要求高效率,还必须确保绝对可靠性,以避免任何漏单或错误通知。 #### 解决方案概述 1. **接口调用与数据抓取** - 为了获取金蝶云中的销售退货数据,我们采用了`executeBillQuery` API接口。此接口能够查询指定时间段内所有符合条件的销售退货记录。 - 数据抓取方面,通过定时任务来保证每个周期都能准时执行,并考虑分页查询以应对大规模数据场景下接口限制的问题。 2. **数据格式转换** - 两个平台的数据格式存在一定差异,为了解决这个问题,在获取到原始数据之后,需要进行字段映射和格式转换。这一步骤包括但不限于日期格式调整、数值类型转换等。 3. **批量写入与异常处理** - 使用网易互客提供的`openapi/trade/requestRefund` API,将转化后的销售信息批量写入目标系统。 - 考虑网络波动及其它不可预见的问题,设置重试机制,对于失败请求进行记录并二次尝试,同时支持人工干预查看详细日志。 4. **实时监控与日志管理** - 集成过程中,每个步骤都会有日志输出,便于追踪问题。同时利用轻易云平台自带的实时监控功能,对整个流转过程中的各个环节进行细致观察,有效提升整体透明度和可维护性。 以上只是该项目总体思路的一部分,在实际实施过程中,还有许多细节需要注意,尤其是在API调用频率控制、防止限流异常,以及如何优化批量写入性能等方面都有针对性的策略将在后续分享。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取销售退货单据数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。根据提供的元数据配置,我们可以看到以下关键参数: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `SAL_RETURNSTOCK` - **FieldKeys**: 需要查询的字段集合 - **FilterString**: 过滤条件 - **Pagination**: 分页参数 #### 请求示例 我们需要构建一个POST请求,包含必要的请求体参数。以下是一个示例请求体: ```json { "FormId": "SAL_RETURNSTOCK", "FieldKeys": "FID,FBillNo,FDocumentStatus,FSaleOrgId,FDate,FStockOrgId,FRetcustId,FStockerGroupId,FStockerId,FStockDeptId,FSaleGroupId,FSaledeptid,FSalesManId,FSettleCustId,FPayCustId,FCreatorId,FCreateDate,FModifierId,FModifyDate,FApproverId,FApproveDate,FCancellerId,FCancelDate,FCancelStatus,FBillTypeID,FReceiveCustId,FOwnerTypeIdHead,FOwnerIdHead,FBussinessType,FReturnReason,FReceiveAddress,FHeadLocId,FCreditCheckResult,FTransferBizType,FCorrespondOrgId,FReceiveCusContact,FIsInterLegalPerson,FHeadNote,FIsTotalServiceOrCost,FGenFromPOS_CMK,FBranchId,FSHOPNUMBER,FGYDATE", "FilterString": "FApproveDate>='2023-01-01'", "Limit": 100, "StartRow": 0, "TopRowCount": true } ``` 在这个请求体中,我们指定了要查询的字段集合、过滤条件(例如查询2023年1月1日之后的数据)、分页参数等。 #### 数据处理与清洗 获取到原始数据后,我们需要对其进行初步清洗和加工,以便后续的数据转换和写入操作。以下是一些常见的数据处理步骤: 1. **字段映射与重命名**:根据业务需求,将原始字段映射到目标系统所需的字段。例如,将`FBillNo`映射为订单编号,将`FDate`映射为订单日期等。 2. **数据类型转换**:确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为标准日期格式。 3. **过滤无效数据**:移除不符合业务规则或缺少关键字段的数据记录。 #### 示例代码 以下是一个示例代码片段,展示如何使用Python进行上述操作: ```python import requests import json # 配置请求URL和头信息 url = "https://api.kingdee.com/executeBillQuery" headers = { "Content-Type": "application/json" } # 构建请求体 payload = { "FormId": "SAL_RETURNSTOCK", "FieldKeys": ",".join([ "FID", "FBillNo", "FDocumentStatus", # ...其他字段... "FGYDATE" ]), "FilterString": "FApproveDate>='2023-01-01'", "Limit": 100, "StartRow": 0, "TopRowCount": True } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与加工 processed_data = [] for record in data['Result']: processed_record = { '订单编号': record['FBillNo'], '订单日期': record['FDate'], # ...其他字段映射... } processed_data.append(processed_record) # 输出处理后的数据 print(json.dumps(processed_data, indent=4)) else: print(f"请求失败,状态码:{response.status_code}") ``` #### 总结 通过上述步骤,我们成功调用了金蝶云星空的`executeBillQuery`接口,获取了销售退货单据的数据,并进行了初步的清洗和加工。这一步骤为后续的数据转换和写入奠定了基础。在实际应用中,可以根据具体业务需求进一步调整和优化数据处理逻辑,以确保数据集成过程的高效性和准确性。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 将金蝶销售退货数据转换并写入网易互客API接口 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将深入探讨如何将金蝶销售退货数据通过ETL转换为网易互客API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,从源平台(金蝶)中提取销售退货数据。假设我们已经完成了数据请求与清洗阶段,获得了需要处理的原始数据。接下来,我们重点关注如何将这些数据转换为网易互客API接口所需的格式。 #### 数据转换与写入 在本案例中,我们需要将金蝶销售退货数据通过ETL转换为网易互客订单关闭接口所需的数据格式。根据提供的元数据配置,目标API接口为`openapi/trade/requestRefund`,采用POST方法提交请求。 ##### 元数据配置解析 ```json { "api": "openapi/trade/requestRefund", "method": "POST", "idCheck": true, "request": [ { "field": "tid", "label": "订单tid", "type": "string", "value": "_findCollection find platform_code from 436a21f0-9e70-359a-9f2f-b409cf4691e7 where deliverys_mail_no={FHeadNote}" } ] } ``` 从元数据配置中可以看出,目标API接口需要一个名为`tid`的字段,其值来源于一个查询操作: - `field`: `tid` - `label`: `订单tid` - `type`: `string` - `value`: `_findCollection find platform_code from 436a21f0-9e70-359a-9f2f-b409cf4691e7 where deliverys_mail_no={FHeadNote}` 该查询操作从一个特定集合中查找`platform_code`字段,其条件是`deliverys_mail_no`等于金蝶退货单中的`FHeadNote`字段。 ##### 数据转换步骤 1. **提取FHeadNote**: 从金蝶退货单中提取`FHeadNote`字段。 2. **查询platform_code**: 使用提取的`FHeadNote`值执行查询操作,以获取对应的`platform_code`。 3. **构建请求体**: 将查询到的`platform_code`赋值给请求体中的`tId`字段。 以下是一个伪代码示例,展示了上述步骤的实现: ```python # 假设我们有一个函数get_kd_return_data()可以获取金蝶退货单数据 kd_return_data = get_kd_return_data() # 提取FHeadNote fhead_note = kd_return_data['FHeadNote'] # 查询platform_code query_result = execute_query(f"SELECT platform_code FROM collection WHERE deliverys_mail_no='{fhead_note}'") platform_code = query_result['platform_code'] # 构建请求体 request_body = { 'tid': platform_code } # 发起POST请求到网易互客API response = requests.post("https://api.netease.com/openapi/trade/requestRefund", json=request_body) if response.status_code == 200: print("订单关闭成功") else: print(f"订单关闭失败: {response.text}") ``` ##### 注意事项 1. **ID检查**: 根据元数据配置中的"idCheck"字段,需要确保在发起请求之前进行ID检查,以防止重复或无效的数据提交。 2. **错误处理**: 在实际应用中,需要对可能出现的各种错误情况进行处理,例如网络异常、API响应错误等。 3. **日志记录**: 为了便于后续问题排查和性能优化,建议对每次API调用及其结果进行详细日志记录。 通过上述步骤,我们成功地将金蝶销售退货数据转换为网易互客API接口所需的格式,并完成了数据写入。这不仅提高了系统间的数据交互效率,也确保了业务流程的顺畅运行。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)