### 有赞云数据集成到敦煌种业先锋的技术实践分享
在当今复杂而多样化的业务环境中,跨系统的数据集成需求日益迫切。针对有赞云和敦煌种业先锋两大系统的对接,本案例展示了如何通过批量查询订单(总部)-ok方案,实现高效、稳定的数据同步。
我们首先需要从有赞云获取最新交易数据,这里使用其提供的API接口`/youzan.trades.sold.get.4.0.4`来抓取订单信息。在实际操作中,由于有赞云API具有分页和限流机制,因此必须设计合理的数据提取策略,以确保每个请求都能顺利执行并获得完整数据。为了避免漏单,我们采取了定时任务周期性调用该API,并结合事务管理进行异常重试处理。
随后,为将抓取到的大量订单数据快速写入到敦煌种业先锋,我们使用其提供的写入接口`/Api/QEasyCloud/OtOOrder`进行批量提交。在这个过程中,通过轻易云平台可视化的数据流设计工具,自定义转换逻辑,实现有序、高效的数据传输。同时,该平台支持实时监控与日志记录功能,使得整个数据处理过程透明可靠,一旦出现问题能够及时预警并进行修正。
特别值得一提的是,在处理两个系统之间的格式差异时,我们部署了一套定制化映射规则。这不仅使不同结构的数据得以无缝衔接,还提升了整体数据质量,有效减少了潜在错误。此外,针对可能发生的一些异常情况,例如网络波动或目标系统负载过高等,制定严格且有效地重试机制,确保最终一致性和可靠性。
![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image)
### 调用有赞云接口youzan.trades.sold.get.4.0.4获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将深入探讨如何通过调用有赞云接口`youzan.trades.sold.get.4.0.4`来获取订单数据,并进行初步的数据加工。
#### 接口概述
有赞云提供了丰富的API接口,其中`youzan.trades.sold.get.4.0.4`用于批量查询订单信息。该接口支持多种查询参数,可以根据不同的业务需求灵活配置。本次集成方案的元数据配置如下:
```json
{
"api": "/youzan.trades.sold.get.4.0.4",
"effect": "QUERY",
"method": "GET",
"number": "{{order_info.tid}}",
"id": "{{order_info.tid}}",
"idCheck": true,
"request": [
{"field": "start_update", "label": "创建开始时间", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}"},
{"field": "end_update", "label": "创建结束时间", "type": "string", "value": "{{CURRENT_TIME|datetime}}"},
{"field": "page_no", "label": "页码", "type": "string", "value": "1"},
{"field": "page_size", "label": "每页数量", "type": "string", "value":"100"},
{"field":"status","label":"状态","type":"string","value":"WAIT_SELLER_SEND_GOODS"}
],
"autoFillResponse": true,
"beatFlat":["orders"],
...
}
```
#### 请求参数解析
1. **start_update** 和 **end_update**: 用于指定订单创建的时间范围。通过模板变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`动态生成。
2. **page_no** 和 **page_size**: 分页参数,分别指定当前页码和每页返回的数据量。
3. **status**: 筛选订单状态为“等待卖家发货”。
这些参数确保了我们能够精确地获取到所需时间范围内、特定状态的订单信息。
#### 数据请求与清洗
在实际操作中,首先需要通过GET请求调用有赞云API,获取原始订单数据。以下是一个示例请求:
```http
GET /youzan.trades.sold.get.4.0.4?start_update=2023-01-01T00:00:00&end_update=2023-01-02T00:00:00&page_no=1&page_size=100&status=WAIT_SELLER_SEND_GOODS HTTP/1.1
Host: open.youzan.com
Authorization: Bearer YOUR_ACCESS_TOKEN
```
响应结果通常包含多个字段,我们需要对其进行清洗和转换,以便后续处理。例如:
```json
{
...
"response":{
...
"trades":[
{
...
// 原始订单数据
}
]
}
}
```
通过配置中的`beatFlat:["orders"]`,我们可以将嵌套的订单列表平铺展开,方便后续的数据处理。
#### 数据转换与写入
在获取并清洗了原始数据后,需要对其进行转换,以适应目标系统的数据结构。这一步通常包括字段映射、格式转换等操作。例如,将有赞云返回的时间戳转换为目标系统所需的日期格式。
```json
{
...
// 转换后的订单数据结构
}
```
最后,将处理好的数据写入目标系统,这一步可以通过轻易云平台提供的数据写入功能实现。
#### 异常处理与补偿机制
为了确保数据集成过程的可靠性,我们需要设计异常处理和补偿机制。在元数据配置中,通过`omissionRemedy`字段定义了一个定时任务(crontab),用于定期检查和补偿可能遗漏的数据请求:
```json
"omissionRemedy":{
...
// 定时任务配置
}
```
该机制确保即使在某些情况下出现请求失败或数据遗漏,也能及时进行补偿,保证数据的一致性和完整性。
通过以上步骤,我们完成了从调用有赞云接口获取原始订单数据,到清洗、转换并写入目标系统的全过程。这一系列操作不仅提高了数据处理效率,也增强了业务透明度和可靠性。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入敦煌种业先锋API接口
在数据集成的生命周期中,将已经集成的源平台数据进行ETL转换是关键步骤之一。本文将重点探讨如何利用轻易云数据集成平台,将源平台的数据转换为目标平台敦煌种业先锋API接口所能够接收的格式,并最终写入目标平台。
#### 元数据配置解析
在进行ETL转换之前,我们首先需要理解元数据配置。以下是针对敦煌种业先锋API接口的元数据配置:
```json
{
"api": "/Api/QEasyCloud/OtOOrder",
"effect": "EXECUTE",
"method": "POST",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
"request": [
{"field":"OrderNo","label":"订单号","type":"string","value":"{bfn_num}"},
{"field":"OrderTime","label":"下单时间","type":"string","value":"{{order_info.created}}"},
{"field":"StoreId","label":"门店id","type":"string","value":"{{order_info.node_kdt_id}}"},
{"field":"CustomerId","label":"客户id","type":"string","value":"{{buyer_info.yz_open_id}}"},
{"field":"ProductName","label":"产品名称","type":"string","value":"{orders_newtitle}"},
{"field":"ProductSPec","label":"产品编码","type":"string","value":"{orders_newSpecNo}"},
{"field":"Num","label":"数量","type":"string","value":"{orders_num}"},
{"field":"Amount","label":"金额","type":"string","value":"{orders_price}"},
{"field":"Name","label":"收货人姓名","type":"string","value":"{{address_info.receiver_name}}"},
{"field":"MobilePhone","label":"收货人电话","type":"string","value":"{{address_info.receiver_tel}}"},
{"field":"ProvinceName","label":"省","type":"string","value":"{{address_info.delivery_province}}"},
{"field":"CityName","label":"市","type":"string","value":"{{address_info.delivery_city}}"},
{"field":"DistrictName","label":"区","type":"string","value":"{{address_info.delivery_district}}"},
{"field":"Address","label":"详细地址","type":"","value":{"address_info.delivery_address}}
]
}
```
#### 数据请求与清洗
在数据请求阶段,我们从源系统中提取所需的数据。这些数据通常包括订单信息、客户信息和地址信息等。在清洗过程中,我们会对这些数据进行标准化处理,确保其符合目标系统的要求。例如,日期格式的统一、字符串长度的校验等。
#### 数据转换与写入
在完成数据清洗后,我们进入数据转换阶段。此时,需要将清洗后的数据映射到目标系统所需的字段格式,并通过API接口将其写入目标系统。以下是具体操作步骤:
1. **设置API接口参数**:
- `api`: 接口路径 `/Api/QEasyCloud/OtOOrder`
- `method`: 请求方法 `POST`
- `effect`: 执行类型 `EXECUTE`
- `number`, `id`, `name`, `idCheck`: 用于唯一标识请求的参数配置
2. **字段映射**:
- 将源系统中的字段映射到目标系统所需的字段。例如:
- `{bfn_num}` 映射到 `OrderNo`(订单号)
- `{{order_info.created}}` 映射到 `OrderTime`(下单时间)
- `{orders_newtitle}` 映射到 `ProductName`(产品名称)
3. **构建请求体**:
根据元数据配置构建请求体,确保每个字段都正确映射并包含相应的数据。例如:
```json
{
"OrderNo": "{bfn_num}",
"OrderTime": "{{order_info.created}}",
"StoreId": "{{order_info.node_kdt_id}}",
...
"Address": "{{address_info.delivery_address}}"
}
```
4. **发送请求**:
使用POST方法将构建好的请求体发送到目标API接口 `/Api/QEasyCloud/OtOOrder`。
5. **处理响应**:
接收并处理API接口返回的响应,确保数据成功写入目标系统。如果出现错误,需要根据错误信息进行调试和修正。
#### 技术要点
- **异步处理**:由于轻易云平台支持全异步处理,确保在大批量数据传输时不会阻塞主线程,提高效率。
- **实时监控**:利用平台提供的实时监控功能,可以随时查看数据流动和处理状态,及时发现并解决问题。
- **多系统兼容性**:该平台支持多种异构系统集成,能够灵活适应不同业务场景和技术需求。
通过以上步骤,我们可以高效地将源平台的数据进行ETL转换,并成功写入敦煌种业先锋API接口,从而实现不同系统间的数据无缝对接。
![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)