### 旺店通·企业奇门数据集成到金蝶云星辰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)