使用轻易云实现ETL,转换并写入广东省特殊食品平台
### 品牌--直接调拨单同步(销售):金蝶云星空集成到广东省特殊食品电子追溯平台
在数据驱动的业务环境中,实现不同系统间的数据无缝对接是保证企业运作效率和正确决策的重要环节。此次案例将介绍如何通过轻易云数据集成平台,将金蝶云星空中的数据高效、安全地同步到广东省特殊食品电子追溯平台,确保每一条记录准确、及时地传递,从而实现全流程跟踪。
#### 挑战背景与需求分析
在该方案中,需要解决的问题包括:如何大批量、高吞吐量地写入贸运营过程中产生的数据;针对API接口调用的限流与分页处理机制;以及实时监控和异常处理保障数据的一致性等。金蝶云星空获取销售单据的主要API为`executeBillQuery`,而目标系统广东省特殊食品电子追溯平台则使用`SaleDetailInfo` API接口进行信息写入。
#### 集成方案概述
我们采用了以下关键技术步骤来完成这一复杂任务:
1. **高性能的数据获取**:通过定时任务可靠抓取金蝶云星空的接口数据。在此过程中,为应对大量并发请求,设计了适当的限流策略,并将分页结果整合以确保不漏单。
2. **自定义转换逻辑**:由于两个系统之间存在一定的数据格式差异,我们利用轻易云的平台支持自定义转换逻辑功能,对获取到的数据进行必要转化,以符合广东省特殊食品电子追溯平台所需格式。
3. **集中监控和异常处理**:部署了实时监控与告警系统,通过可视化界面随时查看数据流动状况,并设置了自动重试机制应对网络或系统突发问题,确保即使出现错误也能迅速恢复正常。
4. **快速批量写入能力**:针对大量数据需要快速写入目标平台,我们配置了高吞吐量特性,使得批量操作更加顺畅。同时,在可能出现大量请求时,会动态调整资源分配以优化整体性能。
#### 技术细节初探
首先,通过调用`executeBillQuery`接口从金蝶云星空提取最新销售调拨单据。这一步保证得到全面且及时更新的信息。紧接着,在转换阶段,我们依据业务需求制定了一套完整的映射规则,将原始查询结果按需整理为符合 `SaleDetailInfo` 数据格式要求的信息包。
同时,为防止意外情况导致某些记录丢失,我们还引入了日志记录及状态标识,通过这些措施视频在线管理每一次导出和写入操作。当所有准备工作完毕后
![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。
#### 接口配置与请求
首先,我们需要配置元数据以便调用`executeBillQuery`接口。以下是元数据配置的关键部分:
```json
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FBillEntry_FEntryID",
"pagination": {"pageSize": 100},
"request": [
{"field": "FBillEntry_FEntryID", "label": "FEntryID", "type": "string", "value": "FBillEntry_FEntryID"},
{"field": "FID", "label": "实体主键", "type": "string", "value": "FID"},
{"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"},
// ...(省略其他字段)
],
// ...(省略其他配置)
}
```
在这个配置中,我们定义了请求方法为`POST`,并指定了分页参数和需要查询的字段。
#### 构建请求体
根据元数据配置,我们需要构建一个包含所有必要字段的请求体。以下是一个示例请求体:
```json
{
"FormId": "STK_TransferDirect",
"FieldKeys": [
// 字段列表,以逗号分隔
// 示例: FBillNo, FDate, FStockOrgId.FNumber, ...
],
"FilterString":
// 示例过滤条件
// FSupplierId.FNumber = 'VEN00010' and FApproveDate >= '2023-01-01'
// and FBillTypeID.FNumber = 'ZJDB02_SYS' and FOwnerId.FNumber='101'
// and FOwnerOutId.FNumber = '101' and FTransferDirect='GENERAL',
},
{
// 分页参数
Limit: "{PAGINATION_PAGE_SIZE}",
StartRow: "{PAGINATION_START_ROW}"
}
}
```
#### 调用接口
使用轻易云平台提供的API调用功能,我们可以发送上述请求体到金蝶云星空的`executeBillQuery`接口。以下是一个示例代码片段:
```python
import requests
url = "<轻易云平台API地址>"
headers = {
'Content-Type': 'application/json',
}
payload = {
# 构建的请求体内容
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
else:
print(f"Error: {response.status_code}")
```
#### 数据清洗与转换
获取到原始数据后,下一步是对数据进行清洗和转换。这一步骤包括但不限于:
1. **字段映射**:将金蝶云星空返回的数据字段映射到目标系统所需的字段。
2. **数据格式转换**:例如,将日期字符串转换为标准日期格式。
3. **过滤无效数据**:去除不符合业务逻辑的数据。
以下是一个简单的数据清洗示例:
```python
def clean_data(raw_data):
cleaned_data = []
for entry in raw_data:
cleaned_entry = {
'单据编号': entry['FBillNo'],
'日期': entry['FDate'],
'调入库存组织': entry['FStockOrgId.FNumber'],
# ... 映射其他字段
}
# 数据格式转换,例如日期格式
cleaned_entry['日期'] = convert_date_format(cleaned_entry['日期'])
cleaned_data.append(cleaned_entry)
return cleaned_data
def convert_date_format(date_str):
from datetime import datetime
return datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y/%m/%d')
```
#### 写入目标系统
最后,将清洗和转换后的数据写入目标系统。这一步通常通过轻易云平台提供的数据写入功能实现,可以直接将处理后的数据推送到目标数据库或应用系统。
```python
def write_to_target_system(cleaned_data):
url = "<目标系统API地址>"
for entry in cleaned_data:
response = requests.post(url, headers=headers, json=entry)
if response.status_code != 200:
print(f"Failed to write entry: {entry['单据编号']}")
```
通过上述步骤,我们完成了从调用金蝶云星空接口获取原始数据,到清洗、转换,并最终写入目标系统的整个过程。这一过程不仅确保了数据的一致性和准确性,也极大提升了业务流程的自动化程度。
![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台实现广东省特殊食品电子追溯平台API接口的数据转换与写入
在数据集成生命周期的第二阶段,核心任务是将已集成的源平台数据进行ETL(提取、转换、加载)处理,并转化为目标平台所能接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将源数据转换并写入到广东省特殊食品电子追溯平台API接口。
#### 元数据配置解析
元数据配置是整个ETL过程中的关键部分,它定义了如何从源系统提取数据,并将其转换为目标系统所需的格式。以下是具体的元数据配置:
```json
{
"api": "SaleDetailInfo",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "DOCUMENTID",
"label": "文档唯一标识号",
"type": "string",
"value": "_function CONCAT('{FBillNo}-{FID}', FLOOR(RAND() * 10001))"
},
{
"field": "dataset",
"label": "数据集",
"type": "array",
"children": [
{
"field": "saleNumber",
"label": "销售单号",
"type": "string",
"describe": "格式 :yyyy-mm-dd",
"value": "_function CONCAT('{FBillNo}', FLOOR(RAND() * 10001))"
},
{
...
}
]
}
]
}
```
#### 数据请求与清洗
在进行ETL操作之前,需要先从源系统请求数据并进行清洗。轻易云平台支持多种异构系统的数据请求,可以通过API、数据库查询等方式获取原始数据。以下是一个简单的数据请求示例:
```sql
SELECT FBillNo, FID, FDate, F_nsb_KH, F_nsb_wltm, FLot, FQty, FProduceDate, FUnitID
FROM SalesOrder
WHERE Status = 'Approved'
```
#### 数据转换
在获取到原始数据后,下一步是根据元数据配置对其进行转换。以下是各字段的详细转换规则:
1. **文档唯一标识号 (DOCUMENTID)**:
- 使用`CONCAT`函数生成唯一标识,结合`FBillNo`和`FID`字段,并附加一个随机数。
```json
"_function CONCAT('{FBillNo}-{FID}', FLOOR(RAND() * 10001))"
```
2. **销售单号 (saleNumber)**:
- 同样使用`CONCAT`函数生成,结合`FBillNo`字段和一个随机数。
```json
"_function CONCAT('{FBillNo}', FLOOR(RAND() * 10001))"
```
3. **销售日期 (saleDate)**:
- 使用日期格式化函数将`FDate`字段转换为目标格式。
```json
"{{FDate|date}}"
```
4. **购货企业许可证编号 (purchaseEnterprisePermitNumber)**:
- 如果源系统没有提供该字段,则设置为null。
```json
"isNull"
```
5. **购货企业名称 (purchaseEnterpriseName)**:
- 使用MongoDB查询,根据客户编号(`F_nsb_KH`)获取客户名称。
```json
"_mongoQuery da6fffcd-e55f-3237-8be1-72194dc4777d findField=content.FName where={\"content.FNumber\":{\"$eq\":\"{F_nsb_KH}\"}}"
```
6. **产品条形码 (productBarCode)**:
- 直接映射源字段`F_nsb_wltm`。
```json
"{F_nsb_wltm}"
```
7. **生产批号 (batch)**:
- 直接映射源字段`FLot`。
```json
"{FLot}"
```
8. **销售数量 (total)**:
- 直接映射源字段`FQty`。
```json
"{FQty}"
```
9. **生产日期 (produceDate)**:
- 使用日期格式化函数将生产日期字段转换为目标格式。
```json
"{{FProduceDate|date}}"
```
10. **计量单位 (packUnitName)**:
- 使用MongoDB查询,根据单位ID(`FUnitID`)获取单位名称。
```json
"_mongoQuery da6fffcd-e55f-3237-8be1-72194dc4777d findField=content.Name where={\"content.Id\":{\"$eq\":\"{FUnitID}\"}}"
```
11. **箱码 (boxCode)**:
- 如果源系统没有提供该字段,则设置为null。
```json
"isNull"
```
12. **追溯码 (traceCode)**:
- 直接映射生产批号字段(`FLot`)。
```json
"{FLot}"
```
#### 数据写入
完成上述所有字段的转换后,即可通过API将处理后的数据写入到广东省特殊食品电子追溯平台。轻易云平台支持多种HTTP方法,这里使用POST方法提交数据:
```http
POST /SaleDetailInfo HTTP/1.1
Host: target-platform.com
Content-Type: application/json
{
...
}
```
通过上述步骤,我们成功实现了从源系统到目标系统的数据ETL过程,确保每个环节的数据都被正确处理和转换。这不仅提高了业务透明度,也极大提升了工作效率。
![如何开发用友BIP接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)