轻易云平台在旺店通和金蝶云星空采购数据集成中的应用
### 旺店通·企业奇门数据集成到金蝶云星空:采购入库单对接实例分享
在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门的采购入库单(接口:wdt.stockin.order.query.purchase)与金蝶云星空系统(接口:batchSave)的高效对接。本文着重于API接口调用、高并发环境下的数据处理以及异常处理机制,帮助读者了解如何将复杂的业务流程简化为高效、透明且可监控的数据流。
首先,在实现这个系统对接的过程中,最关键的是确保从旺店通·企业奇门获取的数据不漏单。对此,可以利用定时可靠的抓取策略,通过定时任务周期性地调用`wdt.stockin.order.query.purchase`接口,从而保证及时读取最新的采购入库单数据,并避免由于网络或其他短暂故障导致的数据遗漏问题。此外,为了应对可能存在的大量数据,我们需要考虑分页和限流问题,这可以通过控制API请求参数中的分页大小来优化。
另外,在将采集到的大量数据批量写入到金蝶云星空时,需要特别关注两系统之间的数据格式差异。为此,规划了一系列映射规则及预处理逻辑,以便在导入前进行必要的数据转换。这部分工作既包括简单字段类型的转换,也涉及更复杂的自定义映射关系和业务逻辑匹配。
最后,由于集成过程中的任何环节都可能出现非预期状况,比如网络抖动、API限流等,因此必须设计一套健全的异常处理与错误重试机制。这不仅能确保每一个有效订单最终被成功传递至目标系统,而且能够提供详细日志记录以供实时监控和后续审计分析。在这方面,通过轻易云平台内置的一些工具,可以方便快捷地设置报警规则并自动触发相应恢复措施,大大提升了整体集成方案的稳定性与可靠性。
以上是关于此次技术案例开头部分的重要介绍,在随后的具体实施章节中,将进一步详解各个步骤及其代码实现细节。
![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口wdt.stockin.order.query.purchase获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.purchase`,以获取采购入库单数据并进行初步加工。
#### 接口调用配置
首先,我们需要配置接口调用的元数据。以下是该接口的元数据配置:
```json
{
"api": "wdt.stockin.order.query.purchase",
"effect": "QUERY",
"method": "POST",
"number": "order_no",
"id": "stockin_id",
"name": "order_no",
"idCheck": true,
"request": [
{
"field": "start_time",
"label": "开始时间",
"type": "datetime",
"describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{LAST_SYNC_TIME|datetime}}"
},
{
"field": "end_time",
"label": "结束时间",
"type": "datetime",
"describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{CURRENT_TIME|datetime}}"
},
{
"field": "status",
"label": "状态",
"type": "string",
"describe": "入库单状态 10已取消20编辑中25待价格确认30待审核60待结算80已完成(默认80)",
"value":"80"
},
{
"field":"src_order_no",
...
}
],
...
}
```
#### 请求参数详解
1. **start_time** 和 **end_time**:
- `start_time`和`end_time`用于指定增量获取数据的时间范围。通过设置这两个参数,可以确保每次只获取自上次同步以来的新数据。
- `{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`分别代表上次同步时间和当前时间。
2. **status**:
- 状态字段用于过滤不同状态的入库单。默认值为80,即只获取已完成的入库单。
3. **src_order_no** 和 **warehouse_no**:
- `src_order_no`用于指定上层单据编号,如果传递该字段,可以不传递开始时间和结束时间。
- `warehouse_no`用于指定仓库编号,以便获取特定仓库的数据。
4. **order_no**:
- 单号字段用于指定特定的入库单号。
5. **分页参数**:
- `page_size`和`page_no`用于控制分页,每页返回的数据条数和页码。
#### 数据请求与清洗
在配置好请求参数后,我们可以通过轻易云平台发送POST请求到旺店通·企业奇门接口。以下是一个示例请求:
```json
{
...
{
...
{
...
}
}
}
```
请求成功后,将返回包含采购入库单信息的数据集。接下来,我们需要对这些数据进行清洗和初步加工,以便后续的数据转换与写入。
#### 数据清洗步骤
1. **字段映射与转换**:
- 将返回的数据字段映射到目标系统所需的字段。例如,将返回的`order_no`映射为目标系统中的订单编号字段。
2. **数据格式化**:
- 确保日期、金额等字段符合目标系统要求的格式。例如,将日期格式从“yyyy-MM-dd HH:mm:ss”转换为目标系统所需的格式。
3. **异常处理**:
- 对于缺失或异常的数据进行处理,例如填充默认值或记录日志以便后续排查。
#### 示例代码
以下是一个示例代码片段,用于展示如何通过Python脚本实现上述过程:
```python
import requests
import json
from datetime import datetime
# 设置请求URL和头部信息
url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.purchase'
headers = {'Content-Type': 'application/json'}
# 设置请求参数
params = {
'start_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'status': '80',
'page_size': '40',
'page_no': '0'
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(params))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗与转换
cleaned_data = []
for item in data['orders']:
cleaned_item = {
'订单编号': item['order_no'],
'仓库编号': item['warehouse_no'],
# 更多字段映射...
}
cleaned_data.append(cleaned_item)
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4, ensure_ascii=False))
else:
print(f"请求失败,状态码: {response.status_code}")
```
通过上述步骤,我们成功地从旺店通·企业奇门接口获取了采购入库单数据,并进行了初步清洗和加工,为后续的数据转换与写入奠定了基础。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台:将采购入库单数据转换并写入金蝶云星空API接口
在轻易云数据集成平台上,完成数据集成生命周期的第二步,即将已经集成的源平台数据进行ETL转换,并写入目标平台金蝶云星空API接口,是一个关键环节。本文将详细探讨如何通过元数据配置,将旺店通的采购入库单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
#### 数据请求与清洗
在进行ETL转换之前,首先需要从源系统(旺店通)获取采购入库单的数据。假设我们已经完成了数据请求与清洗阶段,获得了如下结构的数据:
```json
{
"order_no": "PO123456",
"provider_no": "P001",
"check_time": "2023-10-01",
"operator_name": "张三",
"warehouse_no": "WH001",
"details_list": [
{
"spec_no": "M001",
"goods_count": 100,
"price": 10.5,
"tax_price": 11.5,
"tax": 13,
"remark": ""
},
{
"spec_no": "M002",
"goods_count": 200,
"price": 0,
"tax_price": 0,
"tax": 13,
"remark": ""
}
]
}
```
#### 数据转换与写入
为了将上述数据转换为金蝶云星空API接口所能接收的格式,我们需要按照元数据配置进行映射和转换。以下是详细的元数据配置解析及其应用。
##### 元数据配置解析
```json
{
...
}
```
1. **基本字段映射**
- `FBillTypeID`: 单据类型,固定值`RKD01_SYS`。
- `FBillNo`: 单据编号,对应源数据中的`order_no`。
- `FSupplierId`: 供应商,对应源数据中的`provider_no`,使用`ConvertObjectParser`进行解析。
- `FDate`: 入库日期,对应源数据中的`check_time`。
- `FBZ`: 固定值“旺店通采购入库单”。
- `FZDR`: 制单人,对应源数据中的`operator_name`。
2. **明细信息映射**
明细信息包含多个字段,每个字段都需要对应到源数据中的具体值:
- `FMaterialId`: 物料编码,对应源数据中明细列表的`spec_no`,使用`ConvertObjectParser`进行解析。
- `FRealQty`: 实收数量,对应源数据中明细列表的`goods_count`。
- `FPrice`: 单价,对应源数据中明细列表的`price`。
- `FStockId`: 仓库,对应源数据中的`warehouse_no`,使用`ConvertObjectParser`进行解析。
- `FGiveAway`: 是否赠品,通过判断价格是否为0来确定,使用CASE语句实现。
- `FTaxPrice`: 含税单价,对应源数据中明细列表的`tax_price`。
- `FSHUILV`: 旺店通税率,对应源数据中明细列表的`tax`。
- `FOWNERID`: 固定值“100”。
- `FNote`: 备注,对应源数据中明细列表的`remark`.
3. **其他请求参数**
除了上述字段外,还需要一些额外的请求参数来确保接口调用成功:
- `FormId`: 固定值“STK_InStock”。
- `Operation`: 固定值“Save”。
- `IsAutoSubmitAndAudit`: 固定值“true”。
- `IsVerifyBaseDataField`: 固定值“false”。
- `SubSystemId`: 固定值“21”。
##### 数据组装与写入
根据上述元数据配置,我们可以组装出符合金蝶云星空API接口要求的数据结构:
```json
{
"FormId":"STK_InStock",
"Operation":"Save",
...
}
```
通过HTTP POST方法,将上述组装好的JSON对象发送到金蝶云星空API接口,实现最终的数据写入。
#### 总结
通过轻易云数据集成平台,我们能够高效地将旺店通的采购入库单数据转换为金蝶云星空API接口所能接收的格式,并成功写入目标平台。这不仅提高了系统间的数据流动性和一致性,还极大地提升了业务处理效率。
![打通企业微信数据接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)