### 旺店通·企业奇门销售出库单数据集成到金蝶云星空的技术实现
在本案例中,我们将详细分享如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据与金蝶云星空系统的无缝对接,具体涉及销售出库单(京采关联)的批量导入过程。本次方案实际运行名称为:旺店通销售出库单(京采关联)>金蝶销售出库单。
#### 数据获取与接口调用
为了确保从旺店通·企业奇门平台有效抓取所有需要的数据,本次案例使用了`wdt.stockout.order.query.trade` API接口。我们重点关注以下几个技术点:
1. **分页和限流处理**:
为避免因大量请求导致的网络波动和API限流问题,我们采用了分页查询机制,每页设定合理条数并配置限流策略,确保高效、稳定地获取大规模订单数据。
2. **调用频率控制**:
依据接口文档及平台规定设定合适的轮询间隔,以规避触发反爬机制,同时保证数据更新及时性。如每10分钟一次拉取最新订单,并设置最大重试次数防止漏单。
3. **数据格式转换与映射**:
因两个系统间的数据结构差异,在获取到原始JSON格式的数据后,通过自定义脚本进行字段映射和格式转换,使其能够被金蝶云星空系统正确解析接收。例如,将旺店通中的“order_id”字段映射为金蝶所需的“saleOrderId”。
#### 数据写入与异常处理
成功完成数据准备后,我们将开始向金蝶云星空系统提交这些信息,本案主要采用`salesOrder.batchSave` API接口,以实现批量导入功能。以下是关键步骤:
1. **快速写入大量数据**:
批量保存机制优化了一次性写入上百条记录的方法,大幅提升效率。同时,引入多线程并行处理以加速传输速度,对于超数千级别的大型订单数量具有显著优势。
2. **异常监控与重试机制**:
实现过程中不可避免会遇到网络不稳或服务响应超时等情况,为此建立起完善的错误捕捉及日志记录模块。一旦检测到失败尝试,则自动重新发送请求直至成功或达到最大重试次数。此外,实时监控面板展示各环节状态,有助于迅速定位和解决问题。
综上所述,这些措施组合在一起,不仅确保了整个对接流程顺畅高效,也极大程度降低了可能发生的问题风险,为两套异构系统提供可靠、高效、透明化
![金蝶云星空API接口配置](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image)
### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取并加工销售出库单数据。
#### 接口调用配置
首先,我们需要配置接口的元数据,以便正确地请求和处理数据。以下是接口`wdt.stockout.order.query.trade`的元数据配置:
```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:异常发货"
},
{
...
}
],
...
}
```
#### 请求参数详解
1. **开始时间(start_time)**和**结束时间(end_time)**:
- 用于增量获取数据。`start_time`和`end_time`分别表示查询的起始和结束时间。
- 格式为`yyyy-MM-dd HH:mm:ss`。
- `{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`为动态变量,用于自动填充上次同步时间和当前时间。
2. **状态(status)**:
- 表示订单的状态,如95表示已发货,110表示已完成等。
- 可以根据业务需求设置不同的状态过滤条件。
3. **系统订单编号(src_order_no)**、**原始单号(src_tid)**、**出库单号(stockout_no)**等:
- 用于进一步筛选特定订单。
4. **店铺编号(shop_no)**和**仓库编号(warehouse_no)**:
- 用于区分不同店铺和仓库的数据。
- 支持自定义编码,用于获取指定店铺或仓库的单据数据信息。
5. **分页参数(page_size, page_no)**:
- `page_size`表示每页返回的数据条数,范围为1~100。
- `page_no`表示页码,不传值默认从0页开始。
#### 条件过滤
在实际应用中,我们可能需要对请求的数据进行条件过滤。以下是一些常见的过滤条件:
- **店铺编号过滤条件**:
```json
[
{
"field":"shop_no",
...
...
}
]
```
- **状态过滤条件**:
```json
[
{
...
}
]
```
这些条件可以根据业务需求进行调整,以确保获取到符合要求的数据。
#### 数据处理与清洗
在成功调用接口并获取到原始数据后,需要对数据进行清洗和转换。这一步骤包括但不限于:
1. **去除冗余字段**:只保留业务需要的字段,如订单号、出库单号、状态等。
2. **字段重命名**:将原始字段名转换为目标系统所需的字段名。
3. **数据格式转换**:如日期格式转换、金额单位转换等。
例如,将原始返回的数据中的日期字段从字符串格式转换为标准日期格式:
```python
import datetime
def convert_date(date_str):
return datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
```
#### 数据写入目标系统
经过清洗和转换后的数据,可以通过轻易云平台写入到目标系统中,如金蝶销售出库单。这一步骤通常包括:
1. **建立目标系统连接**:配置目标系统的API或数据库连接信息。
2. **映射字段关系**:将处理后的字段与目标系统字段一一对应。
3. **批量写入操作**:采用批量写入方式,提高效率并减少网络开销。
通过上述步骤,我们可以高效地实现从旺店通·企业奇门接口到金蝶销售出库单的数据集成。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将旺店通销售出库单转换并写入金蝶云星空API接口的技术案例
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细介绍如何使用轻易云数据集成平台完成这一过程。
#### 1. 配置API接口元数据
首先,我们需要配置金蝶云星空API接口的元数据。以下是配置示例:
```json
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "batchArraySave",
"rows": 1,
"rowsKey": "array"
},
"request": [
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "XSCKD01_SYS"
},
{
...
}
],
...
}
```
#### 2. 数据字段映射与转换
为了确保数据能够正确地从源系统(旺店通)转换到目标系统(金蝶云星空),我们需要对每个字段进行映射和转换。
- **单据类型 (FBillTypeID)**: 固定值 `XSCKD01_SYS`,通过 `ConvertObjectParser` 转换。
- **单据编号 (FBillNo)**: 映射到 `{order_no}`。
- **日期 (FDate)**: 映射到 `{consign_time}`。
- **发货组织 (FStockOrgId)**: 映射到 `{warehouse_no}`,并通过 `ConvertObjectParser` 转换。
- **销售组织 (FSaleOrgId)**: 映射到 `{shop_no}`,并通过 `ConvertObjectParser` 转换。
- **客户 (FCustomerID)**: 映射到 `{shop_name}`,并通过 `ConvertObjectParser` 转换。
例如:
```json
{
...
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value":"{order_no}"
},
{
...
}
}
```
#### 3. 特殊字段处理
某些字段需要进行特殊处理,例如货主、销售员等:
- **货主 (FOwnerIdHead)**:
```json
{
...
{
"field":"FOwnerIdHead",
"label":"货主",
"type":"string",
...
,"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"
}
}
```
- **销售员 (FSalesManID)**:
```json
{
...
{
...
,"value":"_mongoQuery cccd77b8-cea5-3862-99c0-c3cc6815a86a findField=content.FNumber where={\"content.FName\":{\"$eq\":\"{fullname}\"}}"
}
}
```
#### 4. 明细信息处理
对于明细信息,我们需要将其作为数组处理,并逐项映射和转换:
```json
{
...
{
...
,"children":[
{
...
,"value":"{{details_list.goods_no}}"
},
{
...
,"value":"{{details_list.goods_count}}"
},
{
...
,"value":"_function ({{details_list.total_amount}}+{{details_list.share_post}})/{{details_list.goods_count}}"
},
{
...
,"value":"_function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END"
},
...
]
}
}
```
#### 5. 最终请求生成与提交
配置完成后,通过轻易云数据集成平台生成最终请求,并提交至金蝶云星空API接口:
```json
{
...
,"otherRequest":[
{"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"},
{"field":"Operation","label":"Operation","type":"string","describe":"Operation","value":"Save"},
{"field":"IsVerifyBaseDataField","label":"IsVerifyBaseDataField","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"},
{"field":"SubSystemId","label":"SubSystemId","type":"string","describe":"默认仓库模块"},
{"field":"IsAutoSubmitAndAudit","label":"IsAutoSubmitAndAudit","type":"bool","describe":"IsAutoSubmitAndAudit","value":"_function case when '{warehouse_no}' = '054' then 'false' else 'true' end"}
]
}
```
通过上述步骤,可以实现从旺店通销售出库单到金蝶云星空销售出库单的数据无缝对接。每个字段都经过精确映射和转换,以确保数据准确性和一致性。
![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)