从金蝶云星空到聚水潭的采购订单ETL流程

  • 轻易云集成顾问-钟家寿
### 金蝶云星空到聚水潭的采购订单数据集成案例分析 在本文中,我们将详细探讨如何使用轻易云数据集成平台将金蝶云星空中的采购订单数据高效、准确地同步至聚水潭系统。通过[自动]-采购订单同步[kd->jst]-V1.0方案的实际应用,展示整个流程涉及的重要技术细节和关键步骤。 首先,考虑到金蝶云星空执行`executeBillQuery` API查询大量采购订单数据时,需要处理分页和限流问题,以确保抓取操作的可靠性。通过合理配置调用频率和并发量,可以从源头上避免漏单现象。同时,为了满足业务需求,我们自定义了特定的数据转换逻辑,对获取的数据进行格式化处理,使其符合目标系统聚水潭的接口规范 `/open/jushuitan/purchase/upload`. 此外,在批量写入大量数据到聚水潭时,高吞吐量的数据写入能力成为实现快速、稳定对接的关键。在遭遇网络波动或API响应异常情况下,通过实现错误重试机制与集中监控告警系统,可及时发现并处理异常情况,保障整体流程顺畅运行。 为提高可视化管理水平,该集成方案还提供了一套完整的数据流设计工具,不仅使得数据处理过程更加直观,并且帮助我们实时跟踪各个环节的数据流动状态。因此,通过全透明的操作界面,从任务开始到结束,每一个节点都精准把控,大幅提升了业务效率与运营透明度。 总之,通过灵活运用轻易云平台强大的功能,我们成功解决了金蝶云星空与聚水潭之间多项复杂技术难题,实现了两大系统间无缝、高效的数据集成。接下来,将进一步深入探讨具体实施步骤及最佳实践。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购订单数据,并进行初步的数据加工。 #### 接口配置 首先,我们需要配置接口的元数据,以确保能够正确地调用金蝶云星空的API。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FDetailEntity_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FMaterialId","label":"物料编码","type":"string","value":"FMaterialId.fnumber"}, // ...其他字段省略 ], "otherRequest": [ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"开始行索引","type":"int","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"FilterString","label":"过滤条件","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FApproveDate>='{{LAST_SYNC_TIME|datetime}}'"}, {"field":"FieldKeys","label":"需查询的字段key集合","type":"array","describe":"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber"} ], "buildModel": true } ``` #### 请求参数解析 在上述配置中,`request`部分定义了需要从金蝶云星空获取的字段,包括单据编号、单据状态、物料编码等。这些字段将用于后续的数据处理和分析。 - `FBillNo`: 单据编号,用于唯一标识每一条采购订单。 - `FDocumentStatus`: 单据状态,表示采购订单当前所处的状态。 - `FMaterialId.fnumber`: 物料编码,用于标识具体采购的物料。 此外,`otherRequest`部分定义了分页参数和过滤条件: - `Limit`: 每次请求返回的数据行数上限。 - `StartRow`: 数据起始行索引,用于分页。 - `FilterString`: 数据过滤条件,例如根据最后同步时间筛选数据。 #### 数据请求与清洗 通过上述配置,我们可以构建HTTP POST请求来调用`executeBillQuery`接口。以下是一个示例请求体: ```json { "FormId": "PUR_ReceiveBill", "FieldKeys": ["FBillNo", "FDocumentStatus", "FMaterialId.fnumber"], "FilterString": "FApproveDate>='2023-01-01'", "Limit": 500, "StartRow": 0 } ``` 该请求将返回符合条件的采购订单数据。接下来,我们需要对返回的数据进行清洗和初步加工,以便后续处理。 #### 数据转换与写入 在获取到原始数据后,需要进行必要的数据转换。例如,将日期字符串转换为标准日期格式,将数值字段转换为浮点数等。这些操作可以通过轻易云平台提供的数据处理工具实现。 ```python def clean_data(raw_data): for record in raw_data: record['FApproveDate'] = parse_date(record['FApproveDate']) record['FAmount'] = float(record['FAmount']) # ...其他清洗操作 return raw_data ``` 经过清洗后的数据可以直接写入目标系统或数据库,完成整个数据集成过程中的第一步。 #### 实时监控与调试 轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。在调试过程中,可以利用平台提供的日志和错误报告功能,快速定位并解决问题。 通过以上步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,并对获取到的数据进行了初步加工,为后续的数据处理奠定了基础。这一步骤不仅确保了数据的一致性和准确性,也为整个集成流程提供了可靠保障。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image) ### 采购订单同步至聚水潭API接口的ETL转换与写入 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,并将其转为目标平台——聚水潭API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### 数据转换与写入目标平台 我们使用元数据配置来指导整个ETL过程。以下是关键步骤和相关配置。 ##### 1. API接口配置 首先,我们需要明确聚水潭API接口的基本信息: ```json { "api": "/open/jushuitan/purchase/upload", "method": "POST" } ``` 该接口采用`POST`方法,路径为`/open/jushuitan/purchase/upload`。 ##### 2. 数据请求参数配置 为了确保数据能够正确传递到聚水潭API,我们需要配置请求参数。以下是主要字段及其含义: - `is_confirm`: 是否自动确认单据,固定值为`1`。 - `supplier_id`: 供应商编号,通过MongoDB查询获取。 - `external_id`: 外部采购单号,对应源系统的单据编号。 - `remark`: 备注信息,同样对应源系统的单据编号。 - `wms_co_id`: 分仓编号,对应源系统的仓库ID。 - `tax_rate`: 税率,需要根据业务逻辑填充。 - `purchaser_name`: 采购员,固定值为"金蝶自动对接"。 - `term`: 合同条款,包含同步标识和单据编号。 - `items`: 商品列表,包含商品编码、数量、单价、预计到货时间和备注。 具体配置如下: ```json { "request": [ {"field": "is_confirm", "value": "1"}, {"field": "supplier_id", "value": "_mongoQuery 9a177523-62a5-3767-b094-6897f5abf61e findField=content.supplier_id where={\"content.name\":{\"$eq\":\"{FSupplierId_FName}\"}}"}, {"field": "external_id", "value": "{FBillNo}"}, {"field": "remark", "value": "{FBillNo}"}, {"field": "wms_co_id", "value": "{FStockID}"}, {"field": "tax_rate"}, {"field": "purchaser_name", "value": "金蝶自动对接"}, {"field": "term", "value": "金蝶同步{FBillNo}"}, { "field": "items", "children": [ {"field": "sku_id", "value": "{{items.FMaterialId}}"}, {"field": "qty", "value": "_function {{items.FActReceiveQty}}*1"}, {"field": "price", "value": "{{items.FTaxPrice}}"}, {"field":"plan_arrive_date","value":"{{items.FPreDeliveryDate}}"}, {"field":"remark","value":"{FBillNo}"} ] } ] } ``` ##### 3. 数据转换逻辑 在数据转换过程中,我们需要处理多个字段,并确保它们符合目标平台的要求。例如: - 将`FSupplierId_FName`通过MongoDB查询转换为`supplier_id`。 - 将源系统中的数量字段乘以1,以确保类型一致性。 - 将日期字段直接映射到目标平台。 ##### 4. 数据写入操作 在完成数据转换后,我们使用HTTP POST请求将数据发送到聚水潭API接口。以下是一个示例代码片段,用于执行该操作: ```python import requests import json def post_to_jushuitan(data): url = 'https://api.jushuitan.com/open/jushuitan/purchase/upload' headers = {'Content-Type': 'application/json'} response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print("Data successfully posted to Jushuitan") else: print(f"Failed to post data: {response.text}") # Example data payload data_payload = { # Fill in the transformed data here } post_to_jushuitan(data_payload) ``` 通过上述代码,我们可以将经过ETL转换的数据发送到聚水潭API接口,实现采购订单的同步。 #### 总结 本文详细介绍了如何使用元数据配置和ETL技术,将源平台的数据转换并写入聚水潭API接口。在实际操作中,需要根据具体业务需求调整和优化各个字段的映射和处理逻辑,以确保数据准确无误地传递到目标平台。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)