### 旺店通销售出库单集成到金蝶云星空的技术实现
在本案例中,我们将分享如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据无缝对接至金蝶云星空,具体涉及将销售出库单(渠道关联)信息成功迁移到金蝶系统中。为了确保整个过程高效、可靠且透明,对各项技术细节进行了优化与详细配置。
首先,我们需要调用旺店通·企业奇门提供的API接口`wdt.stockout.order.query.trade`来获取最新的销售出库单数据。在获取过程中,由于数据量庞大且接口有分页和限流限制,需要合理设计调度任务,定时抓取并进行缓存处理,避免漏单现象。这一步骤通过批次操作及多线程技术,大幅度提升了数据提取效率。
随后,将抓取的数据迅速写入到金蝶云星空,其中利用其提供的批量保存接口`batchSave`。考虑到两端系统在字段格式及结构上的差异,通过定制化的数据映射以及转换逻辑,使得传输的数据能够完美适配目标系统。同时,为解决可能发生的异常情况,如网络故障或API响应错误,实现了完善的错误重试机制,并实时监控处理过程中的所有日志记录,以确保每条数据都得到妥善处理。
下面是关键步骤和代码示例:
```python
import requests
import json
# Step 1: Fetch data from 旺店通 using API
def fetch_wdt_data(api_url, params):
response = requests.get(api_url, params=params)
if response.status_code == 200:
return response.json()
else:
# Implement retry mechanism or log error
pass
# Example parameters for fetching data
params = {
'token': 'your_api_token',
'start_time': '2023-01-01',
}
wdt_data = fetch_wdt_data('https://api.wangdian.cn/wdtstockoutorderquerytrade', params)
# Step 2: Transform and map the fetched data to fit 金蝶's format
def transform_data(wdt_records):
transformed_records = []
for record in wdt_records:
transformed_record = {
# Map fields accordingly here...
}
transformed_records.append(transformed_record)
return transformed_records
mapped_data = transform_data(wdt_data['orders'])
# Step 3: Write data into 金蝶 using batchSave API
def write_to_kingdee(api_url, token, records):
headers = {'Content-Type': 'application/json'}
payload = {
"records": records,
"token": token,
# Other necessary parameters...
}
response = requests.post(api_url, headers=headers, json=payload
![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口获取并加工数据
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。
#### 接口概述
接口`wdt.stockout.order.query.trade`用于查询销售出库单信息。该接口支持POST请求,并且可以根据多种条件进行查询,例如时间范围、订单状态、店铺编号等。以下是该接口的元数据配置:
```json
{
"api": "wdt.stockout.order.query.trade",
"effect": "QUERY",
"method": "POST",
"number": "order_no",
"id": "stockout_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":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货","value":"95"},
{"field":"src_order_no","label":"系统订单编号","type":"string","describe":"系统订单编号"},
{"field":"src_tid","label":"原始单号","type":"string","describe":"原始单号"},
{"field":"stockout_no","label":"出库单号","type":"string","describe":"出库单号"},
{"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息","value":"HBJBT01"},
{"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"},
{"field":"is_by_modified","label":"is_by_modified","type":"string","describe":"is_by_modified"}
],
...
}
```
#### 数据请求与清洗
在调用该接口时,我们需要传递一系列参数来限定查询条件。以下是主要参数及其作用:
- `start_time` 和 `end_time`: 用于限定查询的时间范围,这两个参数通常使用上次同步时间和当前时间。
- `status`: 用于过滤订单状态,例如“95”表示已发货。
- `shop_no`: 店铺编号,用于区分不同店铺的数据。
- `warehouse_no`: 仓库编号,用于区分不同仓库的数据。
这些参数确保我们能够精确地获取所需的数据,并避免冗余信息。
#### 数据转换与写入
在获取到原始数据后,需要对其进行一定的转换,以便写入目标系统。在这个过程中,我们通常会进行以下操作:
1. **字段映射**: 将源系统中的字段映射到目标系统中的相应字段。例如,将`order_no`映射到目标系统中的订单编号字段。
2. **数据清洗**: 去除无效或重复的数据,并确保数据格式符合目标系统的要求。
3. **增量更新**: 根据上次同步的时间戳,仅处理新增或更新的数据,以提高效率。
#### 实际案例
假设我们需要从旺店通中获取某一时段内所有已发货的销售出库单,并将其写入金蝶系统。我们可以按照以下步骤进行配置和处理:
1. **配置请求参数**:
```json
{
...
{"field": "start_time", ... , "value": "{{LAST_SYNC_TIME|datetime}}"},
{"field": "end_time", ... , "value": "{{CURRENT_TIME|datetime}}"},
{"field": "status", ... , "value": "95"},
...
}
```
2. **调用API**:
使用轻易云平台提供的可视化界面配置上述参数,并发送POST请求以获取数据。
3. **处理返回结果**:
对返回的数据进行字段映射和清洗,例如:
```json
{
...
{source_field: 'order_no', target_field: 'kd_order_no'},
{source_field: 'stockout_id', target_field: 'kd_stockout_id'},
...
}
```
4. **写入目标系统**:
将处理后的数据通过轻易云平台写入金蝶系统,实现数据的无缝对接。
通过上述步骤,我们可以高效地完成从旺店通到金蝶系统的数据集成。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。
![如何开发企业微信API接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台金蝶云星空API接口所能接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
#### 1. 配置API接口
为了将数据写入金蝶云星空,我们需要配置API接口。根据提供的元数据配置,目标API为`batchSave`,使用POST方法提交请求。以下是关键配置:
```json
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "batchArraySave",
"rows": 1,
"rowsKey": "array"
},
...
}
```
#### 2. 数据字段映射与转换
在进行ETL转换时,需要确保源平台的数据字段能够正确映射到目标平台的字段,并进行必要的格式转换。以下是一些关键字段的配置示例:
- **单据类型** (`FBillTypeID`):
```json
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "XSCKD01_SYS"
}
```
- **单据编号** (`FBillNo`):
```json
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value": "{order_no}"
}
```
- **日期** (`FDate`):
```json
{
"field": "FDate",
"label": `日期{stock_check_time}`,
"type": `string`,
`describe`: `日期`,
`value`: `{consign_time}`
}
```
- **发货组织** (`FStockOrgId`):
```json
{
`field`: `FStockOrgId`,
`label`: `发货组织`,
`type`: `string`,
`describe`: `组织`,
`parser`: {
`name`: `ConvertObjectParser`,
`params`: `FNumber`
},
`value`: `_function case when '{warehouse_no}' in ('047','048','051') then '105' when '{warehouse_no}' in ('050','052','049','053','055','057') then '114' else '100' end`
}
```
#### 3. 明细信息处理
对于明细信息,需要特别注意数组结构和子字段的处理。例如,物料编码和实发数量等字段:
- **物料编码** (`FMaterialID`):
```json
{
`field`: `FMaterialID`,
`label`: `物料编码`,
`type`: `string`,
`describe`: `物料编码`,
`parser`: {
`name`: ConvertObjectParser,
params: FNumber
},
value: {{details_list.goods_no}}
}
```
- **实发数量** (`FRealQty`):
```json
{
field: FRealQty,
label: 实发数量,
type: string,
describe: 实发数量,
value: {{details_list.goods_count}}
}
```
#### 4. 特殊字段处理
有些字段需要特殊处理,例如根据条件判断值或通过查询获取值:
- **是否赠品** (`FIsFree`):
```json
{
field: FIsFree,
label: 是否赠品,
type: string,
describe: 是否赠品,
value: _function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END
}
```
- **税率** (`FEntryTaxRate`):
```json
{
field: FEntryTaxRate,
label: 税率,
type: string,
describe: 税率,
value: _mongoQuery findField=content.FEntryTaxRate where={content.FBillNo:{eq:{src_trade_no}},content.FMaterialId_Fnumber:{eq:{details_list.goods_no}}}
}
```
#### 总结
通过上述步骤,我们可以利用轻易云数据集成平台,将源平台的数据进行ETL转换,并写入到金蝶云星空API接口中。这一过程涉及多个关键技术点,包括API接口配置、数据字段映射与转换、明细信息处理以及特殊字段处理。通过合理配置元数据,可以确保数据在不同系统之间无缝对接,实现高效的数据集成。
![如何开发钉钉API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)