### PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单技术案例分享
在本案例中,我们将聚焦如何通过轻易云数据集成平台实现旺店通·企业奇门的数据无缝对接到金蝶云星辰V2,重点探讨"PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单"的技术细节。
首先,我们需要调用旺店通·企业奇门提供的`wdt.stockin.order.query.refund` API接口,从中抓取具体的销售退货数据。这个过程需特别注意处理分页和限流问题,以确保不会因请求过多而触发系统保护机制。在获取数据后,利用轻易云的平台能力完成必要的数据清洗、转换,并根据业务需求自定义转换逻辑解决两边系统之间的数据格式差异。
为保证这些批量化的数据能够快速、安全地写入金蝶云星辰V2,需要配置其API接口(`/jdy/v2/scm/sal_in_bound`)来接受并处理输入的数据。这一步包含多个关键技术点:高吞吐量支持、实时监控以及异常检测和告警。集中监控和日志记录功能可以让我们及时发现潜在的问题,并通过自动化重试机制提高整体流程的可靠性。
此外,为保障整个集成过程中不漏单,设置定时任务以定期从旺店通·企业奇门接口抓取更新的数据,同时要考虑实现批量操作,以减少频繁请求所带来的负载压力。在实际实施过程中,也会结合具体使用场景进行优化,例如缓存策略和动态调整批次大小等。
以上便是本项目所涉及的一些核心技术点。在下文中,我们将详细拆解各个开发步骤及其对应的代码实现,包括如何准确调用相关API、配置数据映射规则以及处理异常情况等内容。
![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取初始数据。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`来获取销售退货单数据,并进行初步加工。
#### 接口概述
接口`wdt.stockin.order.query.refund`用于查询销售退货单信息,支持增量获取和分页查询。该接口采用POST请求方式,返回的数据包括订单号、入库单ID等关键字段。
#### 元数据配置解析
根据提供的元数据配置,我们可以看到以下几个关键点:
- **API名称**: `wdt.stockin.order.query.refund`
- **请求方法**: POST
- **主要字段**:
- `order_no`: 订单号
- `stockin_id`: 入库单ID
- **请求参数**:
- `start_time`: 开始时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`
- `end_time`: 结束时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`
- `status`: 入库单状态,默认查询已完成的单据(状态码80)
- `shop_no`: 店铺编号,用于区分不同店铺的数据
- 分页参数:`page_size`和`page_no`
#### 请求参数设置
在实际操作中,我们需要设置好请求参数,以确保能够正确地调用接口并获取所需的数据。以下是一个典型的请求参数设置示例:
```json
{
"start_time": "{{LAST_SYNC_TIME|datetime}}",
"end_time": "{{CURRENT_TIME|datetime}}",
"status": "80",
"shop_no": "SHOP123",
"page_size": "40",
"page_no": "0"
}
```
- `start_time`和`end_time`分别表示上次同步时间和当前时间,用于实现增量数据获取。
- `status`设置为80,表示只查询已完成的退货单。
- `shop_no`指定了特定店铺编号。
- 分页参数设置为每页40条记录,从第0页开始。
#### 数据处理与清洗
在成功调用API并获取到原始数据后,需要对数据进行初步清洗和处理,以便后续的数据转换与写入步骤。以下是一些常见的数据处理操作:
1. **字段映射**: 将API返回的字段映射到目标系统所需的字段。例如,将返回的`order_no`映射到目标系统中的订单号字段。
2. **数据类型转换**: 确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为日期对象。
3. **去重与过滤**: 移除重复记录,并根据业务规则过滤不需要的数据。
#### 示例代码
以下是一个示例代码片段,展示如何通过轻易云平台调用接口并处理返回的数据:
```python
import requests
import json
from datetime import datetime
# 设置请求URL和头信息
url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.refund'
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",
"shop_no": "SHOP123",
"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()
# 数据处理与清洗
processed_data = []
for record in data['orders']:
processed_record = {
'order_number': record['order_no'],
'stockin_id': record['stockin_id'],
# 添加更多字段映射和处理逻辑...
}
processed_data.append(processed_record)
# 输出处理后的数据
print(processed_data)
else:
print(f"Error: {response.status_code}, {response.text}")
```
通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取销售退货单数据,并进行必要的清洗和处理,为后续的数据转换与写入打下坚实基础。
![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image)
### 将源平台数据转换为金蝶云星辰V2API接口格式并写入目标平台
在数据集成的生命周期中,ETL(提取、转换、加载)过程是关键的一环。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。
#### 数据请求与清洗
在ETL流程中,首先要从源系统中提取数据并进行清洗。假设我们已经完成了这一步,接下来需要将清洗后的数据进行格式转换,以符合金蝶云星辰V2API接口的要求。
#### 数据转换与写入
根据元数据配置,我们需要将源平台的数据字段映射到金蝶云星辰V2API接口的相应字段。以下是具体的字段映射和转换逻辑:
1. **出库日期(bill_date)**
- 类型:date
- 描述:格式为`YYYY-MM-DD`
- 源字段:`check_time`
- 转换逻辑:直接映射源字段值。
2. **客户编码(customer_number)**
- 类型:string
- 描述:客户编码
- 源字段:`shop_no`
- 转换逻辑:直接映射源字段值。
3. **单据编码(bill_no)**
- 类型:string
- 描述:单据编码
- 源字段:`order_no`
- 转换逻辑:直接映射源字段值。
4. **分录明细行(material_entity)**
- 类型:array
- 描述:包含多个子字段
1. **商品编码(material_number)**
- 类型:string
- 描述:商品编码
- 源字段:`details_list.spec_no`
- 转换逻辑:直接映射源字段值。
2. **价税合计(all_amount)**
- 类型:string
- 描述:价税合计
- 源字段:`details_list.right_cost`
- 转换逻辑:直接映射源字段值。
3. **仓库编码(stock_number)**
- 类型:string
- 描述:仓库编码
- 源字段:`warehouse_no`
- 转换逻辑:直接映射源字段值。
4. **数量(qty)**
- 类型:float
- 描述:数量
- 源字段:`details_list.goods_count`
- 转换逻辑:直接映射源字段值。
5. **是否赠品(is_free)**
- 类型:string
- 描述:“true”或“false”
- 源字段:`details_list.right_cost`
- 转换逻辑:
```sql
case '{{details_list.right_cost}}' when "0.0000" then 'true' else 'false' end
```
6. **生产日期(kf_date)**
- 类型: string
- 描述: 生产日期
7. **单位id(unit_id)**
- 类型: string
- 描述: 单位id,通过MongoDB查询获取:
```sql
_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={"content.number":{"$eq":"{{details_list.spec_no}}"}}
```
#### 实际操作示例
假设我们有如下JSON格式的数据从源平台提取:
```json
{
"check_time": "2023-10-01",
"shop_no": "CUST001",
"order_no": "ORD12345",
"warehouse_no": "WH001",
"details_list": [
{
"spec_no": "PROD001",
"right_cost": "100.00",
"goods_count": 10,
"production_date": "2023-09-01"
},
{
"spec_no": "PROD002",
"right_cost": "0.0000",
"goods_count": 5,
"production_date": "2023-09-05"
}
]
}
```
通过上述元数据配置和转换逻辑,生成的目标平台数据格式如下:
```json
{
"bill_date": "2023-10-01",
"customer_number": "CUST001",
"bill_no": "ORD12345",
"material_entity": [
{
"material_number": "PROD001",
"all_amount": "100.00",
"stock_number": "WH001",
"qty": 10,
"is_free": false,
// MongoDB查询结果填充unit_id,例如:
// "_mongoQuery result for PROD001"
// 此处假设查询结果为"UNIT001"
// 实际操作中需替换为真实查询结果:
// "_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"PROD001\"}}"
// 查询结果示例:
// {"content.base_unit_id":"UNIT001"}
// 则unit_id填充为"UNIT001"
// 单位id:
// 此处假设查询结果为"UNIT001"
// 实际操作中需替换为真实查询结果:
"_mongoQuery result for PROD001"
![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)