将吉客云订单写入金蝶云星空的ETL案例解析

  • 轻易云集成顾问-姚缘
### 吉客云·奇门数据集成到金蝶云星空技术案例分享 在众多业务系统中进行数据对接和集成时,确保数据的准确性、实时性与高效性是至关重要的一环。本篇文章将聚焦一个具体的系统集成案例,即如何通过轻易云数据集成平台实现吉客云·奇门销售订单数据到金蝶云星空销售出库单的数据流转。 #### 确保吉客云·奇门数据不漏单 为了避免销售订单在传输过程中丢失,我们采用了jackyun.tradenotsensitiveinfos.list.get接口周期性抓取吉客云·奇门上的新订单信息。通过设置合理的定时任务,无缝衔接每次获取间隔,确保所有订单均能被及时获取。同时,通过接口返回值中的分页参数和时间戳扩展筛选条件,有效处理大批量订单分段抓取问题。 #### 大量数据快速写入到金蝶云星空 为提升大量订单写入金蝶云星空的效率,我们结合使用了batchSave接口,将多个订单打包后一次性提交,以减少API调用频率和网络延迟。此外,为应对突发大流量情况下可能出现的限流现象,我们设计了一套智能重试机制,当遇到限流错误码时,系统能够自动调整请求频率并重新尝试发送未成功的数据包。 #### 数据格式差异处理与日志监控机制 由于吉客云·奇门与金蝶云星空之间的数据结构存在差异,在实际匹配字段过程中,需要进行一系列的数据映射及转换操作。例如,对于日期格式、数值类型不同等问题,都需要分别制定对应的转换规则。此外,全程启用详细日志记录功能,对每次API请求和响应都进行完整记录。一旦出现意外情况,通过查看日志可以迅速定位并解决问题,从而保证整个流程平稳运行。 综上所述,本方案有效解决了从吉客云·奇门向金蝶云星空传递销售订相关关键技术难题,并利用定制化脚本实现两者间高效稳定的数据交互。这仅是开端,后续内容将详细解析配置步骤及具体代码实现。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用吉客云·奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的第一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用吉客云·奇门接口 `jackyun.tradenotsensitiveinfos.list.get` 获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据。根据提供的元数据配置,接口的基本信息如下: - **API名称**: `jackyun.tradenotsensitiveinfos.list.get` - **请求方法**: `POST` - **主要字段**: `tradeNo` 请求参数包括时间范围、分页信息、字段选择等。以下是具体的请求参数配置: ```json { "startModified": "{{LAST_SYNC_TIME|datetime}}", "endModified": "{{CURRENT_TIME|datetime}}", "pageSize": "{PAGINATION_PAGE_SIZE}", "pageIndex": "{PAGINATION_START_PAGE}", "fields": "tradeNo,orderNo,shopName,companyName,warehouseName,logisticName,mainPostid,goodsDetail.goodsNo,...", "isDelete": "", "tradeStatus": "6000", "tradeTypeList": ["1", "2", "3", "4", "5", "7", "6", "9", "10", "11", "13", "91", "92", "93", "100"] } ``` #### 数据请求与清洗 在发送请求之前,需要确保时间参数和分页参数已经正确设置。`startModified` 和 `endModified` 分别表示上次同步时间和当前时间,这两个参数用于限定查询的数据范围。分页参数 `pageSize` 和 `pageIndex` 则用于控制每次请求的数据量和起始位置。 ```python import requests import datetime # 设置时间参数 last_sync_time = datetime.datetime.now() - datetime.timedelta(days=1) current_time = datetime.datetime.now() # 设置分页参数 pagination_page_size = 100 pagination_start_page = 1 # 构建请求体 request_body = { 'startModified': last_sync_time.strftime('%Y-%m-%d %H:%M:%S'), 'endModified': current_time.strftime('%Y-%m-%d %H:%M:%S'), 'pageSize': pagination_page_size, 'pageIndex': pagination_start_page, 'fields': 'tradeNo,orderNo,...', # 剩余字段省略 'isDelete': '', 'tradeStatus': '6000', 'tradeTypeList': ['1', '2', ..., '100'] } # 发起POST请求 response = requests.post('https://api.jackyun.com/tradenotsensitiveinfos/list/get', json=request_body) data = response.json() ``` #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在这个过程中,可以利用轻易云平台提供的各种工具和功能,如字段映射、数据过滤、格式转换等。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for item in raw_data: cleaned_item = { '订单号': item['tradeNo'], '店铺名称': item['shopName'], '商品编号': item['goodsDetail']['goodsNo'], # 更多字段映射... } cleaned_data.append(cleaned_item) return cleaned_data cleaned_data = clean_data(data['result']) ``` #### 条件过滤与逻辑处理 在实际应用中,可能需要根据特定条件过滤数据。例如,根据店铺编码或商品编号进行筛选。元数据配置中的条件部分定义了这些逻辑: ```json "condition":[ [{"field":"shopCode","logic":"eqv2","value":"0007"},{"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"},{"field":"goodsDetail.goodsDelivery","logic":"notnull","value":""}], [{"field":"shopCode","logic":"like","value":"YF"},{"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"},{"field":"goodsDetail.goodsDelivery","logic":"notnull","value":""}] ] ``` 这些条件可以在清洗过程中应用,以确保只处理符合业务需求的数据。 ```python def filter_data(data): filtered_data = [] for item in data: if (item['shopCode'] == '0007' or item['shopCode'].startswith('YF')) and \ item['goodsDetail']['goodsNo'] != '88888' and \ item['goodsDetail']['goodsDelivery'] is not None: filtered_data.append(item) return filtered_data filtered_data = filter_data(cleaned_data) ``` 通过上述步骤,我们完成了从吉客云·奇门接口获取、清洗并加工数据的全过程。这些操作不仅提高了数据处理的效率,也为后续的数据写入和分析奠定了坚实基础。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售订单转换并写入金蝶云星空API接口的技术案例 在数据集成的过程中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台,将从吉客云奇门获取的销售订单数据进行转换,并通过金蝶云星空API接口写入目标平台。 #### 数据请求与清洗 在数据请求阶段,我们从吉客云奇门获取销售订单数据。这些原始数据需要经过清洗和预处理,以确保其符合目标系统的要求。此步骤包括数据格式的标准化、无效数据的剔除以及必要字段的补充。 #### 数据转换与写入 接下来,我们进入生命周期的第二步:将清洗后的数据进行转换,并通过金蝶云星空API接口写入目标平台。以下是具体实现步骤: 1. **配置元数据** 首先,根据元数据配置文件,定义请求参数和字段映射关系。这些配置决定了如何将源系统的数据字段映射到目标系统中相应的字段。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "tradeNo", "bodyName": "details", "bodySum": ["goodsDetail_goodsDelivery_sendCount"], "header": ["tradeNo", "shopCode", "warehouseCode", "sourceTradeNos", "consignTime", "customerCode", "onlineTradeNo"], "body": ["goodsDetail_goodsNo", "goodsDetail_goodsDelivery_sendCount", "goodsDetail_goodsDelivery_batchamount", "goodsDetail_goodsDelivery_batchNo", "goodsDetail_shareFavourableAfterFee", "goodsDetail_sellTotal", "goodsDetail_sellCount"] }, ... } ``` 2. **定义请求参数** 根据元数据配置文件中的`request`部分,定义每个字段的属性、类型及其对应的值。例如: ```json { "field": "FBillTypeID", "label": "单据类型", ... "value": "{tradeNo}" }, { ... "field": "FEntity", ... "children": [ { ... "field": "FMaterialID", ... // 使用模板语言动态填充值 // 将源系统中的商品编号映射到目标系统中的物料编码 // 例如:{{details.goodsDetail_goodsNo}} ... }, { ... // 其他子字段映射 ... } ] } ``` 3. **处理复杂字段** 对于一些复杂字段,如金额计算、批号等,需要使用自定义函数进行处理。例如: ```json { ... // 含税单价计算 // _function {{details.goodsDetail_shareFavourableAfterFee}}/{{details.goodsDetail_sellCount}} ... }, { ... // 是否赠品判断 // _function CASE WHEN {{details.goodsDetail_sellTotal}}>0 THEN 'false' ELSE 'true' END ... } ``` 4. **构建请求体** 根据上述配置,构建最终的API请求体。确保所有必需字段均已填充,并且格式符合金蝶云星空API接口规范。 5. **发送请求** 使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。确保响应处理机制能够正确捕获并处理返回结果,包括成功与失败情况。 #### 示例代码 以下是一个示例代码片段,用于展示如何通过轻易云平台发送转换后的销售订单到金蝶云星空: ```python import requests # 定义API URL和头信息 api_url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} # 构建请求体(根据前述配置) payload = { # ... 填充完整的请求体内容 } # 发送POST请求 response = requests.post(api_url, json=payload, headers=headers) # 处理响应结果 if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data: {response.text}") ``` 通过上述步骤,我们实现了从吉客云奇门到金蝶云星空的数据转换与写入过程。轻易云数据集成平台提供了强大的工具和灵活的配置选项,使得这一过程高效且透明。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)