### 案例分享:02-WK-采购入库单同步
在本案例中,我们将重点介绍如何实现旺店通·旗舰奇门数据与金蝶云星空的数据集成,具体方案名称为“02-WK-采购入库单同步”。我们采用轻易云数据集成平台,通过配置多个API接口,成功实现了大批量的采购入库单从旺店通·旗舰奇门系统高效、无缝地导入至金蝶云星空。
首先,我们需要调用旺店通·旗舰奇门的`wdt.wms.stockin.purchase.querywithdetail`接口以获取所需的采购入库单详细信息。为了保证数据抓取准确和实时可靠,我们设置了定时任务来定期抓取这些数据,并通过处理分页和限流问题来确保每次请求的数据完整性。此外,为解决接口响应中的限流问题,在API调用过程中进行了优化,使得即便在大量数据传输时也能保持稳定、高效。
接下来,针对从旺店通·旗舰奇门系统获取到的大量原始数据,我们对其进行格式转换,以符合金蝶云星空的数据规范。这一步骤尤为关键,因为两套系统在字段命名和结构上存在差异,需要利用映射规则将两者兼容。
在完成上述转换后,将处理好的批量数据通过金蝶云星空的`batchSave` API写入到目标系统中。为了提高写入效率,同时降低出错率,本次方案开发了一套异常处理与错误重试机制。如果由于网络或其他不可控因素导致部分记录未能成功写入,则可自动发起重试,提高整体操作的可靠性。
以上步骤仅涵盖了整个集成过程的一小部分。在实际实现中,每个环节都配有实时监控及日志记录功能,以便随时追踪并快速定位可能出现的问题。这不仅增强了业务透明度,也极大提升了运维人员对于故障排查和维护工作的效率。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/D18.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·旗舰奇门接口获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过调用旺店通·旗舰奇门接口`wdt.wms.stockin.purchase.querywithdetail`来获取并加工数据,以实现采购入库单的同步。
#### 接口概述
接口`wdt.wms.stockin.purchase.querywithdetail`用于查询采购入库单的详细信息。该接口采用POST请求方式,支持分页查询,并可根据多种业务参数进行过滤。以下是该接口的元数据配置:
```json
{
"api": "wdt.wms.stockin.purchase.querywithdetail",
"method": "POST",
"number": "order_no",
"id": "order_no",
"idCheck": true,
"request": [
{
"field": "pager",
"label": "分页参数",
"type": "object",
"children": [
{
"field": "page_size",
"label": "分页大小",
"type": "string",
"value": "50",
"parent": "pager"
},
{
"field": "page_no",
"label": "页号",
"type": "string",
"value": "1",
"parent": "pager"
}
]
},
{
"field": "params",
"label": "业务参数",
"type": "object",
...
}
]
}
```
#### 请求参数解析
1. **分页参数**:
- `page_size`: 每页返回的数据条数,默认设置为50。
- `page_no`: 当前页码,默认从第一页开始。
2. **业务参数**:
- `start_time`: 查询的开始时间,通常设置为上次同步时间(`{{LAST_SYNC_TIME|datetime}}`)。
- `end_time`: 查询的结束时间,通常设置为当前时间(`{{CURRENT_TIME|datetime}}`)。
- `status`: 入库单状态,默认值为80(已完成)。
- `warehouse_no`: 仓库编号,可选参数。
- `stockin_no`: 入库单号,可选参数。
- `purchase_no`: 采购单号,可选参数。
#### 数据请求与清洗
在实际操作中,我们需要根据上述元数据配置构建请求体,并发送POST请求以获取数据。以下是一个示例请求体:
```json
{
"pager": {
"page_size": 50,
"page_no": 1
},
...
}
```
接收到响应数据后,需要对其进行清洗和转换,以确保数据格式和内容符合目标系统的要求。例如,对于日期字段,可以使用标准化日期格式;对于状态字段,可以进行映射转换。
#### 数据转换与写入
清洗后的数据需要进一步转换,以适应目标系统的数据结构。这一步骤可能包括字段重命名、数据类型转换等操作。最终,将处理好的数据写入目标系统,实现采购入库单的同步。
#### 实践案例
假设我们需要同步某个时间段内所有已完成的采购入库单,具体操作步骤如下:
1. **构建请求体**:
```json
{
...
{
...
{
...
{
...
{
...
}
}
}
}
}
```
2. **发送请求并获取响应**:
```python
import requests
url = 'https://api.wangdian.cn/erp/openapi2/wdt.wms.stockin.purchase.querywithdetail'
headers = {'Content-Type': 'application/json'}
response = requests.post(url, json=request_body, headers=headers)
if response.status_code == 200:
data = response.json()
# 对响应数据进行清洗和转换
cleaned_data = clean_data(data)
# 将清洗后的数据写入目标系统
write_to_target_system(cleaned_data)
else:
print(f"Error: {response.status_code}")
```
3. **清洗和转换数据**:
```python
def clean_data(data):
# 清洗和转换逻辑
return cleaned_data
def write_to_target_system(data):
# 写入目标系统逻辑
pass
```
通过以上步骤,我们可以高效地调用旺店通·旗舰奇门接口获取采购入库单详细信息,并进行必要的数据清洗和转换,实现不同系统间的数据无缝对接。
![数据集成平台API接口配置](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image)
### 采购入库单同步至金蝶云星空的ETL转换与写入
在轻易云数据集成平台中,将源平台的数据转换并写入目标平台金蝶云星空API接口是一个关键步骤。本文将深入探讨如何通过ETL(Extract, Transform, Load)过程,将采购入库单数据转换为金蝶云星空API所能接收的格式,并最终成功写入。
#### 数据请求与清洗
在ETL生命周期的第一步,我们已经完成了从源系统的数据请求和清洗。接下来,我们重点关注如何将这些清洗后的数据进行转换,并通过API接口写入金蝶云星空。
#### 数据转换与写入
为了将采购入库单数据成功同步到金蝶云星空,我们需要遵循其API接口的要求。以下是详细的元数据配置和实现步骤:
##### API接口配置
根据提供的元数据配置,目标平台为金蝶云星空,使用的是`batchSave` API,方法为`POST`。以下是具体字段及其对应关系:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","value":"RKD01_SYS"},
{"field":"FBusinessType","label":"业务类型","type":"string","value":"CG"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"{order_no}"},
{"field":"FStockOrgId","label":"收料组织","type":"string","value":"100"},
{"field":"FStockDeptId","label":"收料部门","type":"string","value":"BM000014"},
{"field":"FPurchaseOrgId","label":"采购组织","type":"string","value":"100"},
{"field":"FSupplierId","label":"供应商","type":"string","value":"{provider_no}"},
{"field":"FDate","label":"入库日期","type":"string","value":"{{check_time|dateTime}}"},
{"field":"FDeliveryBill","label":"送货单号","type":"string"},
{"field":"FTakeDeliveryBill","label":"提货单号","type":"string"},
{"field":"FSupplyId","label":"供货方","type":""},
{
"field": "FInStockFin",
"label": "财务信息",
"type": "object",
"children": [
{"field": "FSettleOrgId", "label": "结算组织", "type": "", "value": ""},
{"field": ""}
]
},
{
""
}
],
""
}
```
##### 字段映射与转换
1. **基础字段映射**:
- `FBillTypeID`: 固定值 `"RKD01_SYS"`。
- `FBusinessType`: 固定值 `"CG"`。
- `FBillNo`: 从源系统获取 `{order_no}`。
- `FStockOrgId`, `FPurchaseOrgId`, `FSettleOrgId`, `FPayOrgId`: 固定值 `"100"`。
- `FSupplierId`, `FSupplyId`: 从源系统获取 `{provider_no}`。
- `FDate`: 使用模板引擎格式化日期 `{{check_time|dateTime}}`。
2. **嵌套对象与数组**:
- 财务信息字段 `FInStockFin` 包含多个子字段,如结算组织、付款组织等。
- 明细信息字段 `FInStockEntry` 是一个数组,包含物料编码、零售条形码、实收数量等多个子字段。
3. **动态计算字段**:
- 是否赠品字段 `FGiveAway`:基于条件判断税价是否为0,返回布尔值。
- 库存状态字段 `FSTOCKSTATUSID`:基于缺陷状态返回不同的库存状态编码。
##### 数据写入
通过配置好的元数据,我们可以构建请求体并发送至金蝶云星空的API接口:
```json
{
...
}
```
#### 实现步骤
1. **构建请求体**:根据元数据配置和实际数据,构建符合金蝶云星空API要求的JSON请求体。
2. **发送请求**:使用HTTP POST方法,将构建好的请求体发送至金蝶云星空的`batchSave` API接口。
3. **处理响应**:解析API返回的响应结果,根据响应状态判断操作是否成功,并进行相应处理。
通过以上步骤,我们可以实现将采购入库单从源系统成功同步至金蝶云星空,实现无缝的数据集成。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)