从旺店通到金蝶云星辰V2的数据对接技术详解

  • 轻易云集成顾问-李国敏
### 旺店通·企业奇门数据集成到金蝶云星辰V2:采购订单V2.0技术实现 在本文中,我们将详细介绍如何通过轻易云数据集成平台,实现旺店通·企业奇门的采购订单数据与金蝶云星辰V2的对接。具体方案名称为:采购订单V2.0。该解决方案旨在确保跨系统的数据传输不仅高效快速,而且准确可靠。 #### 1. 确保集成旺店通·企业奇门数据不漏单 首先,我们使用 `wdt.purchase.order.query` 接口来抓取旺店通·企业奇门中的采购订单数据。为了保证不会遗漏任何一个订单,采用了定时任务机制,每隔一定时间自动调用接口获取增量更新的数据,并记录上一次成功抓取的位置。这种方式不仅能有效避免重复读取,也能确保新产生的所有交易数据都被捕获。 #### 2. 大量数据快速写入到金蝶云星辰V2 面对大量的数据,需要精心设计批处理策略,以提高写入效率。在实现过程中,通过将拉取到的原始交易记录进行适当分组和预处理后,再调用金蝶云星辰V2的 `/jdy/v2/scm/pur_order` API 完成交付。此外,通过调整API请求参数及并发数量,充分利用系统资源,将批次处理速度提升至最优状态。 #### 3. 如何调用旺店通·企业奇门接口 wdt.purchase.order.query 每次请求 `wdt.purchase.order.query` 时,需注意接口提供的一些关键参数,如时间区间、页码等。在实际操作中,一般会设置合理分页大小,逐页循环获取直到无更多页面可读。同时,还需要配置异常重试机制,当某一次查询失败时,可恢复上次位置重新启动,以此降低因网络或服务器问题带来的影响。 #### 4. 金蝶云星辰V2定制化数据映射对接 要向金蝶云星辰V2 推送采购订单信息,需要根据其特定的数据格式要求,对拿到的数据进行转换和映射。例如,把不同字段对应关系配置清楚,并依据业务规则补充必要信息,以匹配目标系统所需结构。这一阶段是整个流程是否顺畅的重要保障,因此需要格外关注细节和准确性。 以上是本案例开头部分,希望大家能够从中了解我们整体解决思路。随后的章节中,我们将继续探讨如何处理分页限流问题、错误重试机制以及实时监控与日志记录等内容。 ![打通企业微信数据接口](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工采购订单数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.purchase.order.query`,获取并加工采购订单数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,可以看到我们需要使用POST方法来请求`wdt.purchase.order.query`接口。以下是具体的请求参数配置: - **开始时间 (`start_time`)**: 这是一个字符串类型字段,用于指定查询的起始时间。其值可以动态设置为上次同步时间 `{{LAST_SYNC_TIME|datetime}}`。 - **结束时间 (`end_time`)**: 同样是字符串类型字段,用于指定查询的结束时间。其值可以动态设置为当前时间 `{{CURRENT_TIME|datetime}}`。 - **API单号 (`outer_no`)**: 外部创建采购单推送的单号,传该字段可以不传开始时间和结束时间。 - **采购单号 (`purchase_no`)**: ERP系统采购单编号,传该字段可以不传开始时间和结束时间。 - **采购单状态 (`status`)**: 字符串类型字段,用于过滤不同状态的采购单。例如,10表示已取消,20表示编辑中等。不传默认查询全部状态采购单。 - **仓库编码 (`warehouse_no`)**: 用于指定仓库编码。 此外,还有分页相关的参数: - **分页大小 (`page_size`)**: 每页返回的数据条数,默认值为40,可以根据需要调整。 - **页号 (`page_no`)**: 页码,从0页开始。 #### 数据请求与清洗 在完成接口调用配置后,我们需要处理返回的数据。这一步主要包括数据清洗和格式转换。 1. **检查ID重复性**:根据元数据配置中的`idCheck`参数,我们需要确保每条记录的唯一性。这里使用的是`purchase_id`作为唯一标识符。 2. **格式化响应数据**:根据元数据中的`formatResponse`配置,我们需要对返回的数据进行格式化处理。例如,将原始字段 `check_time` 转换为新的字段 `check_time_new` 并格式化为日期类型。 3. **条件过滤**:根据条件配置,我们只需处理状态大于或等于40的采购订单。这一步可以通过简单的逻辑判断来实现。 #### 实际操作步骤 1. **构建请求参数**: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "page_size": 100, "page_no": 0, "status": "40" } ``` 2. **发送请求并接收响应**: 使用POST方法将上述参数发送到`wdt.purchase.order.query`接口,并接收响应数据。 3. **处理响应数据**: - 检查每条记录是否有重复ID。 - 格式化日期字段,将 `check_time` 转换为 `check_time_new`。 - 根据条件过滤出符合要求的记录。 4. **示例代码实现(伪代码)**: ```python import requests from datetime import datetime # 构建请求参数 params = { "start_time": get_last_sync_time(), "end_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "page_size": 100, "page_no": 0, "status": "40" } # 发送请求 response = requests.post("https://api.wangdiantong.com/wdt.purchase.order.query", data=params) if response.status_code == 200: data = response.json() # 数据清洗与格式化 for record in data['orders']: if not is_duplicate(record['purchase_id']): record['check_time_new'] = format_date(record['check_time']) if int(record['status']) >= 40: process_record(record) def get_last_sync_time(): # 获取上次同步时间的逻辑 pass def is_duplicate(purchase_id): # 检查ID重复性的逻辑 pass def format_date(date_str): # 日期格式化逻辑 return datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d") def process_record(record): # 处理符合条件的记录逻辑 pass ``` 通过以上步骤,我们成功地从旺店通·企业奇门接口获取并加工了采购订单数据,为后续的数据转换与写入打下了坚实基础。这一过程不仅确保了数据的一致性和准确性,还提高了整体业务流程的透明度和效率。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口 在数据集成的过程中,将已经集成的源平台数据进行ETL转换,并将其转为目标平台金蝶云星辰V2API接口所能够接收的格式,是关键的一步。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,完成这一过程。 #### 数据请求与清洗 在数据请求与清洗阶段,我们已经从源系统获取了采购订单的数据。接下来,我们需要将这些数据进行转换,以符合金蝶云星辰V2API接口的要求。 #### 数据转换与写入 使用轻易云数据集成平台,我们可以通过配置元数据来实现这一过程。以下是具体的元数据配置: ```json { "api": "/jdy/v2/scm/pur_order", "effect": "EXECUTE", "method": "POST", "number": "1", "id": "1", "name": "1", "idCheck": true, "request": [ {"field":"bill_no","label":"单据编码","type":"string","value":"{purchase_no}"}, {"field":"bill_date","label":"出库日期","type":"string","value":"{modified}"}, {"field":"supplier_id","label":"供应商编码","type":"string","value":"_mongoQuery b073f5fa-5f89-395a-b289-3032f2b03051 findField=content.id where={\"content.number\": {\"$eq\":\"{provider_no}\"}}"}, {"field":"remark","label":"备注","type":"string","value":"{remark}"}, {"field":"operation_key","label":"操作类型","type":"string","value":"audit"}, { "field":"material_entity", "label":"商品分录", "type":"array", "value":"details_list", "children":[ {"field":"material_id","label":"商品","type":"string","value":"_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.id where={\"content.number\": {\"$eq\":\"{{details_list.goods_no}}\"}}"}, {"field":"stock_id","label":"仓库","type":"string","value":"_findCollection find id from 9cf5314a-709f-3e72-b021-c9edae06888f where number={warehouse_no}"}, {"field":"qty","label":"数量","type":"string","value":"{{details_list.num}}"}, {"field":"unit_id","label":"单位","type":"string","value":"_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.base_unit_id where={\"content.number\": {\"$eq\":\"{{details_list.goods_no}}\"}}"}, {"field":"tax_price","label":"含税单价","type":"string","value":"{{details_list.tax_price}}"}, {"field":"cess","label":"税率","type":"string","value":"_function {{details_list.tax}} * (100)"} ] } ] } ``` 以上配置包含了以下几个关键部分: 1. **API路径和方法**:指定了目标平台的API路径`/jdy/v2/scm/pur_order`和HTTP方法`POST`。 2. **基本字段映射**: - `bill_no` 对应 `purchase_no` - `bill_date` 对应 `modified` - `supplier_id` 使用 `_mongoQuery` 方法从MongoDB查询供应商编码。 - `remark` 对应 `remark` - `operation_key` 固定为 `audit` 3. **商品分录(material_entity)**: - 每个商品分录包括多个字段,如 `material_id`, `stock_id`, `qty`, `unit_id`, `tax_price`, 和 `cess`。 - 使用 `_mongoQuery` 和 `_findCollection` 方法从不同的数据源查询相应字段值。 - 特别注意的是,税率(cess)字段使用了 `_function` 方法进行计算,将原始税率乘以100以符合目标平台要求。 #### 实际应用案例 假设我们有如下源系统的数据: ```json { "purchase_no": "PO123456", "modified": "2023-10-01T12:00:00Z", "provider_no": "SUP001", "remark": "紧急采购订单", "details_list": [ { "goods_no": "G001", "warehouse_no": "WH001", "num": 100, "tax_price": 50.0, "tax": 0.13 } ] } ``` 通过上述元数据配置,我们可以将其转换为目标平台所需的格式,并通过API接口写入金蝶云星辰V2系统。 转换后的JSON请求体示例如下: ```json { "bill_no": "PO123456", "bill_date": "2023-10-01T12:00:00Z", "supplier_id": "<resolved_supplier_id>", "remark": "紧急采购订单", "operation_key": "audit", "material_entity": [ { "material_id": "<resolved_material_id>", "stock_id": "<resolved_stock_id>", "qty": 100, "unit_id": "<resolved_unit_id>", "tax_price": 50.0, "$cess$" :13.0 } ] } ``` 其中, `<resolved_supplier_id>`, `<resolved_material_id>`, `<resolved_stock_id>`, 和 `<resolved_unit_id>` 是通过查询和映射得到的实际值。 通过这种方式,我们实现了源系统到目标系统的数据无缝对接,确保每个字段都能正确映射并写入到金蝶云星辰V2中。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)