### 吉客云·奇门数据集成到金蝶云星空:销售单对接销售出库_类型91批采销售
在开展吉客云·奇门和金蝶云星空的系统对接项目中,我们面临着诸多技术挑战:确保数据不漏单、实现大量数据快速写入、处理分页与限流问题,以及异常处理与错误重试机制。以下是我们在“销售单对接销售出库_类型91批采销售”这个具体案例中的详细技术方案。
为了从吉客云·奇门接口中抓取必要的数据,我们首先使用了API `jackyun.tradenotsensitiveinfos.list.get`。这一接口能够定时可靠地获取交易信息,确保及时获得最新销售记录。而后,通过轻易云平台设置的数据生命周期管理与透明可视化操作界面,我们实时监控并处理了这些数据的流动状态,有效提升了业务透明度。
在获取到所需数据后,下一步的是将其快速且准确地写入到金蝶云星空。这一步通过调用金蝶提供的`batchSave` API 实现。在此过程中,为解决吉客云·奇门与金蝶两体系之间的数据格式差异问题,我们设计了定制化的数据映射规则,确保所有字段的信息准确无误地对应。同时,在执行过程中也对分页和限流进行有效处理,以规避因请求频率过高而导致的阻塞或失败。
针对可能出现的对接异常情况,从后台日志记录开始,到建立完善的错误重试机制,每一个细节都经过精密规划。例如,当某条记录由于网络波动未能成功写入时,系统会自动触发重试流程,并保留详尽的操作日志以备查证,保证任何潜在的问题都能被迅速发现和解决。
综合以上内容,本次集成任务不仅解决了各类技术难题,还显著提高了企业的大规模数据交互效率,为未来更多复杂场景下的数据集成提供了一套科学可靠的方法论。
![打通用友BIP数据接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云·奇门接口获取并加工数据
在轻易云数据集成平台中,调用源系统吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`是数据集成生命周期的第一步。本文将详细探讨如何通过该接口获取销售单数据,并进行初步加工处理。
#### 接口调用配置
根据元数据配置,我们需要通过POST方法调用`jackyun.tradenotsensitiveinfos.list.get`接口。以下是关键的请求参数及其配置:
- **modified_begin** 和 **modified_end**:用于指定修改时间范围,必须同时存在,且时间间隔不能超过七天。
- **pageSize** 和 **pageIndex**:分页参数,默认每页记录数为200,页码从0开始。
- **tradeStatus**:订单状态,使用逻辑运算符`egt`(大于等于)过滤状态值大于等于6000的订单。
- **fields**:指定需要返回的字段列表,以逗号分隔。
以下是一个示例请求体:
```json
{
"modified_begin": "2023-09-01 00:00:00",
"modified_end": "2023-09-07 23:59:59",
"pageSize": 200,
"pageIndex": 0,
"tradeStatus": "6000",
"fields": "tradeNo,postFee,goodsDetail.goodsNo,goodsDetail.goodsName,goodsDetail.sellCount"
}
```
#### 数据清洗与初步加工
在获取到原始数据后,需要对数据进行清洗和初步加工。以下是一些常见的数据清洗操作:
1. **字段筛选与重命名**:
根据业务需求,仅保留必要字段,并对字段进行重命名以便后续处理。例如,将`goodsDetail.goodsNo`重命名为`商品编号`。
2. **数据类型转换**:
将某些字段的数据类型进行转换,例如将字符串类型的日期转换为日期对象,以便后续计算和比较。
3. **缺失值处理**:
对于缺失值,可以根据业务规则进行填充或删除。例如,如果某些订单的邮费(postFee)缺失,可以设置默认值为0。
以下是一个示例代码片段,用于对获取到的数据进行清洗和初步加工:
```python
import pandas as pd
from datetime import datetime
# 假设response_data是从接口获取到的原始数据
response_data = [
{"tradeNo": "T12345", "postFee": None, "goodsDetail": [{"goodsNo": "G001", "goodsName": "商品A", "sellCount": 10}]},
{"tradeNo": "T12346", "postFee": 5.0, "goodsDetail": [{"goodsNo": "G002", "goodsName": "商品B", "sellCount": 20}]}
]
# 转换为DataFrame
df = pd.DataFrame(response_data)
# 字段重命名
df.rename(columns={"tradeNo": "销售单号", "postFee": "邮费"}, inplace=True)
# 数据类型转换
df["邮费"] = df["邮费"].fillna(0).astype(float)
# 展开嵌套的商品详情
goods_details = df["goodsDetail"].apply(pd.Series)
df = df.drop("goodsDetail", axis=1).join(goods_details.explode().apply(pd.Series))
# 重命名商品详情字段
df.rename(columns={"goodsNo": "商品编号", "goodsName": "商品名称", "sellCount": "销售数量"}, inplace=True)
print(df)
```
#### 异常处理与日志记录
在调用API和处理数据过程中,异常处理和日志记录是必不可少的。可以通过捕获异常并记录详细日志来确保问题能够及时发现和解决。例如:
```python
import logging
logging.basicConfig(level=logging.INFO)
try:
# 模拟API调用
response = api_call()
if response.status_code != 200:
raise Exception(f"API调用失败,状态码:{response.status_code}")
# 数据处理逻辑...
except Exception as e:
logging.error(f"发生异常:{e}")
```
通过上述步骤,我们能够高效地调用吉客云·奇门接口获取销售单数据,并对其进行清洗和初步加工,为后续的数据转换与写入奠定基础。
![打通企业微信数据接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将销售单数据转换并写入金蝶云星空API接口
在数据集成生命周期的第二步中,我们需要将已经从源平台获取并清洗过的数据进行ETL转换,以符合目标平台——金蝶云星空API接口所能接收的格式,最终实现数据的写入。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
#### API接口配置
根据提供的元数据配置,我们需要调用金蝶云星空的`batchSave` API接口,采用`POST`请求方法。以下是关键的配置项:
- `api`: "batchSave"
- `method`: "POST"
- `idCheck`: true
- `operation`:
- `rowsKey`: "array"
- `rows`: 10
- `method`: "batchArraySave"
#### 请求字段解析
请求字段定义了从源数据到目标格式的映射规则。以下是主要字段及其配置:
1. **单据类型 (`FBillTypeID`)**
- 类型: string
- 描述: 单据类型
- 值: 固定值 `"XSCKD01_SYS"`
- 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`)
2. **单据编号 (`FBillNo`)**
- 类型: string
- 描述: 单据编号
- 值: `{tradeNo}` (从源数据中提取)
3. **日期 (`FDate`)**
- 类型: string
- 描述: 日期
- 值: `{consignTime}` (从源数据中提取)
4. **销售组织 (`FSaleOrgId`)**
- 类型: string
- 描述: 组织
- 值: 动态查询 `_mongoQuery`
```json
{
"findField": "content.warehouseCompanyCode",
"where": "{\"content.warehouseCode\" : {\"$eq\":\"{warehouseCode}\"}}"
}
```
- 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`)
5. **客户 (`FCustomerID`)**
- 类型: string
- 描述: 基础资料
- 值: `{shopCode}` (从源数据中提取)
- 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`)
6. **备注 (`FNote`)**
- 类型: string
- 描述: 多行文本
- 值: `{sellerMemo}` (从源数据中提取)
#### 明细信息配置
明细信息字段用于描述销售单中的具体商品信息,以下是主要字段及其配置:
1. **物料编码 (`FMaterialId`)**
- 类型: string
- 描述: 基础资料
- 值:
```json
"{{goodsDetail.goodsNo}}"
```
- 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`)
2. **实退数量 (`FRealQty`)**
- 类型: string
- 描述: 数量
- 值:
```json
"{{goodsDetail.sellCount}}"
```
3. **批号 (`Flot`)**
- 类型: string
- 描述: 批号
- 值:
```json
"01"
```
4. **单价 (`FPrice`)**
```json
"_function round(({{goodsDetail.shareFavourableAfterFee}}/{{goodsDetail.sellCount}}),4)"
```
5. **金额 (`FAmount`)**
```json
"{{goodsDetail.shareFavourableAfterFee}}"
```
6. **仓库 (`FStockId`)**
```json
"_mongoQuery 38faaa66-9955-34e5-bd58-7c4099b53af5 findField=content.warehouseCompanyCode where={\"content.warehouseCode\" : {\"$eq\":\"{warehouseCode}\"}}"
```
7. **备注 (`FEntrynote`)**
```json
"{goodsMemo}"
```
#### 执行操作与其他请求参数
除了上述字段映射外,还需要指定一些操作参数和其他请求参数:
1. **业务对象表单Id (`FormId`)**
```json
"SAL_OUTSTOCK"
```
2. **执行的操作 (`Operation`)**
```json
"Save"
```
3. **提交并审核 (`IsAutoSubmitAndAudit`)**
```json
true
```
4. **验证基础资料有效性 (`IsVerifyBaseDataField`)**
```json
true
```
5. **系统模块 (`SubSystemId`)**
```json
"21" (默认仓库模块)
```
6. **允许负库存 (`InterationFlags`)**
```json
"STK_InvCheckResult"
```
7. **服务端开启的线程数 (`BatchCount`)**
```json
"5"
```
通过上述配置,我们可以确保将清洗后的源平台数据准确地转换为金蝶云星空API接口所需的格式,并成功写入目标平台。这一过程充分利用了轻易云数据集成平台提供的元数据配置功能,实现了高效、透明的数据集成。
![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)