优化电商采购订单流转:从旺店通到金蝶云的一体化解决方案

  • 轻易云集成顾问-黄宏棵
### 技术案例分享:旺店通·企业奇门数据集成到金蝶云星空 在本次系统对接集成案例中,我们将重点探讨【纯采购业务】场景下,如何通过轻易云数据集成平台,将旺店通·企业奇门的数据高效、准确地传输并写入到金蝶云星空的过程。 #### 背景与挑战 在电商运营和财务管理过程中,采购订单信息准确无误地流转至ERP系统是关键环节。该任务涉及从旺店通·企业奇门获取采购单据,并将其写入到金蝶云星空作为采购订单。这一流程中的技术挑战主要集中在以下几方面: - **分页与限流处理**:由于API接口限制,需要分批次抓取大规模数据,以避免性能瓶颈和请求超时。 - **数据格式差异**:两套系统使用不同的数据模型,因此需要进行精细化的数据映射转换。 - **实时监控与日志记录**:确保每一个处理步骤都被详细记录,并且能够及时发现异常情况进行修复。 #### API调用方法详解 1. **获取旺店通·企业奇门接口数据** 首先,通过调用 `wdt.purchase.order.query` 接口定时并可靠地抓取最新的采购单列表。为了确保不漏单,每次会基于时间戳条件递增拉取新增或更新后的订单记录。同时,还需设置合理的分页参数来防止一次性过多请求导致接口限流问题。 2. **批量写入金蝶云星空** 获取到原始采购单据后,需要使用 `batchSave` API 将其快速、高效地提交给金蝶云星空。在此期间,要注意对字段进行相应的映射,如日期格式、货币单位等,以符合目标系统要求。 3. **错误重试机制** 为了提升整个数据传输过程的健壮性,必需加入错误重试机制。当某一批次提交失败时,根据具体错误原因(如网络问题或临时服务不可用)重新尝试特定次数,直至成功。同时,会有完善的日志记录所有操作详情以供后续审查。 以上方案不仅能够保障高效稳定的数据传递,还能最大程度上减少人为介入,提高整体业务自动化水平。接下来,我们将深入解析各个步骤及关键算法实现的方法及细节。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用旺店通·企业奇门接口获取采购单数据 在数据集成生命周期的第一步,我们需要从源系统中获取数据,并进行初步加工。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.purchase.order.query`,并对获取的数据进行处理。 #### 接口概述 接口`wdt.purchase.order.query`用于查询旺店通系统中的采购单信息。该接口采用POST请求方式,支持多种查询条件,包括时间范围、采购单号、状态等。以下是该接口的元数据配置: ```json { "api": "wdt.purchase.order.query", "effect": "QUERY", "method": "POST", "number": "purchase_no", "id": "purchase_id", "name": "purchase_no", "idCheck": true, "request": [ {"field": "start_time", "label": "开始时间", "type": "string", "describe": "开始时间", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "outer_no", "label": "外部单号", "type": "string", "describe": "外部创建采购单推送的单号,传该字段可以不传开始时间和结束时间"}, {"field": "purchase_no", "label": "采购单号", "type": "string", "describe": "ERP系统采购单编号,传该字段可以不传开始时间和结束时间"}, {"field": "status", "label": "采购单状态", "type": "string", "describe":"10 已取消,20 编辑中,30 待审核,35 待财审,40 已审核,43 待推送,45 推送失败,48 待收货,50 部分到货,60已到货,70 待结算,80 部分结算,90 已完成(不传默认查询全部状态采购单)","value":"90"}, {"field":"warehouse_no","label":"仓库编码","type":"string","describe":"仓库编码"}, {"field":"end_time","label":"结束时间","type":"string","describe":"结束时间","value":"{{CURRENT_TIME|datetime}}"} ], ... } ``` #### 请求参数详解 1. **start_time**: 查询的开始时间,通常使用上次同步的时间点。 2. **outer_no**: 外部创建的采购单推送的单号,可选。 3. **purchase_no**: ERP系统中的采购单编号,可选。 4. **status**: 采购单状态,默认查询已完成状态(90)。 5. **warehouse_no**: 仓库编码,可选。 6. **end_time**: 查询的结束时间,通常使用当前时间点。 此外,还有分页参数`page_size`和`page_no`用于控制返回结果的分页。 #### 数据请求与清洗 在轻易云平台上配置上述元数据后,我们可以通过以下步骤实现数据请求与清洗: 1. **配置API调用**:在轻易云平台上创建一个新的任务,选择API类型为POST,并填入上述元数据中的各项参数。 2. **设置动态参数**:使用模板变量如`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来动态设置请求参数,这样可以确保每次调用时都能获取最新的数据。 3. **执行API调用**:启动任务,平台会自动发送HTTP POST请求到旺店通·企业奇门接口,并获取响应数据。 #### 数据转换与写入 在获取到原始数据后,需要对其进行转换,以便写入目标系统(如金蝶)。这一步通常包括以下操作: 1. **字段映射**:将源系统中的字段映射到目标系统中的对应字段。例如,将`purchase_no`映射到金蝶中的采购订单编号。 2. **数据清洗**:根据业务需求,对原始数据进行清洗和格式化。例如,将日期格式统一转换为目标系统所需的格式。 3. **批量处理**:如果返回的数据量较大,可以分批处理,每次处理一页的数据。 #### 示例代码 以下是一个简化的示例代码,用于展示如何在Python中实现上述过程: ```python import requests import datetime # 设置动态参数 last_sync_time = datetime.datetime.now() - datetime.timedelta(days=1) current_time = datetime.datetime.now() # 配置请求参数 params = { 'start_time': last_sync_time.strftime('%Y-%m-%d %H:%M:%S'), 'end_time': current_time.strftime('%Y-%m-%d %H:%M:%S'), 'status': '90', 'page_size': '40', 'page_no': '0' } # 发起POST请求 response = requests.post('https://api.wangdian.cn/openapi2/wdt.purchase.order.query', data=params) # 检查响应状态 if response.status_code == 200: data = response.json() # 数据处理逻辑 else: print(f"Error: {response.status_code}") ``` 通过以上步骤,我们成功地从旺店通·企业奇门接口获取了采购单数据,并进行了初步加工,为后续的数据转换与写入奠定了基础。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据ETL转换 在数据集成过程中,将源平台的数据转换为目标平台所能接受的格式是至关重要的一步。本文将重点探讨如何使用轻易云数据集成平台将旺店通的采购单数据转换为金蝶云星空API接口所能接收的采购订单格式,并最终写入金蝶云星空。 #### 1. 数据请求与清洗 首先,我们从旺店通获取原始采购单数据。这一步已经通过轻易云平台完成,数据已被清洗并准备好进行ETL转换。 #### 2. 数据转换与写入 为了将清洗后的数据转换为金蝶云星空API接口所能接收的格式,我们需要详细配置元数据。以下是具体的元数据配置及其解析: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型\n标准采购订单:CGDD01 SYS\n标准委外订单:CGDD02 SYS\n直运采购订单:CGDD03 SYS\n资产采购订单:CGDD04 SYS\n费用采购订单:CGDD05 SYS\n补料采购订单:CGDD06 SYS\nVMI采购订单:CGDD07 SYS\n现购订单:CGDD08 SYS\n分销购销采购订单:CGDD09 SYS", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "CGDD01_SYS" }, { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{purchase_no}" }, { "field": "FDate", "label": "采购日期", "type": "string", "describe": "采购日期", "value": "{modified}" }, { ... } ], ... } ``` #### 配置解析 1. **FBillTypeID(单据类型)**: - 类型:`string` - 描述:指定不同类型的采购订单。 - 值:`"CGDD01_SYS"`,表示标准采购订单。 - 转换器:`ConvertObjectParser`,参数为`FNumber`。 2. **FBillNo(单据编号)**: - 类型:`string` - 描述:唯一标识每个采购单。 - 值:从源数据中获取,如`{purchase_no}`。 3. **FDate(采购日期)**: - 类型:`string` - 描述:记录下达采购单的日期。 - 值:从源数据中获取,如`{modified}`。 4. **FPurchaseOrgId(采购组织)**: - 类型:`string` - 描述:指定负责该笔交易的组织。 - 值:固定为`100`,使用转换器`ConvertObjectParser`和参数`FNumber`。 5. **FSupplierId(供应商)**: - 类型:`string` - 描述:供应商信息。 - 值:从源数据中获取,如 `{provider_no}`,并使用转换器 `ConvertObjectParser` 和参数 `FNumber`。 6. **FBusinessType(业务类型)**: - 类型:`string` - 描述:定义业务类型,例如标准采购、资产采购等。 - 值:固定为 `"CG"` 表示标准采购。 7. **FPOOrderFinance(财务信息)**: - 类型: `object` - 子字段包括结算币别和付款条件等。 8. **FPOOrderEntry(明细信息)**: - 类型: `array` - 包含多个子字段,如物料编码、采购数量、含税单价等,每个字段都从源数据中的 `details_list` 获取相应值。 #### 特殊配置项 - **FormId(业务对象表单Id)**: 必须填写金蝶的表单ID,如 `PUR_PurchaseOrder`. - **Operation(执行的操作)**: 固定为 `"BatchSave"`. - **IsAutoSubmitAndAudit(提交并审核)**: 设置为 `true`, 表示自动提交并审核该笔交易. - **IsVerifyBaseDataField(验证基础资料)**: 设置为 `true`, 验证所有基础资料的有效性. #### 执行批量保存 通过上述配置,我们可以使用轻易云平台提供的方法 `batchArraySave`, 将处理后的数组形式的数据批量保存到金蝶云星空系统中。具体调用方式如下: ```json { ... operation: { rowsKey: 'array', rows: 20, method: 'batchArraySave' } } ``` 该方法确保了高效的数据传输和写入操作,使得整个ETL过程顺利完成,并保证了数据的一致性和完整性。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)