### 礼顿销售单对接(1-零售业务):吉客云·奇门数据集成到金蝶云星空
在本文中,我们将聚焦于一个具体的系统对接案例,介绍如何通过轻易云数据集成平台,实现吉客云·奇门中的销售单据高效、准确地同步至金蝶云星空系统。本次实现方案名为“礼顿销售单对接(1-零售业务)”。
为了保障这一过程的顺利进行,此集成方案充分利用了平台提供的一系列技术特性。例如,通过调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get` 定时可靠地抓取销售订单数据,并通过批量写入机制,将其快速导入到金蝶云星空API `batchSave` 中。此外,为确保数据处理过程中的实时监控和异常检测,平台配置了一套完整的数据质量监控体系,一旦发现问题,可以立即报警并自动触发错误重试机制。
在实际操作中,需要特别注意以下几个关键点:
1. **分页和限流处理**:吉客云·奇门接口返回的数据可能会因为数量庞大而需要分页处理,同时也有可能受到接口调用频率限制,这要求我们设计合理的调度策略来确保所有订单都被及时且无遗漏地获取。
2. **数据格式差异**:不同系统间由于底层架构与实务逻辑的不一致,常常导致数据格式不兼容。此方案通过自定义的数据转换逻辑,对源数据进行清洗、转换,以符合目标系统所需格式。
3. **实时监控与日志记录**:为追踪整个过程中各环节的状态及性能情况,本次实现还配备了集中式实时监控工具和详细日志记录功能,使得运维人员可以全面掌握任务执行情况,并及时应对突发事件。
总之,通过精细化设计与多层面优化,本次集成方案不仅达到了高吞吐量、高可靠性的目标,还有效提升了礼顿公司内部各系统间的数据透明度与联动效率。在后续内容中,我将进一步详述每个步骤的具体实现方法以及遇到的问题和解决经验。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细介绍如何通过轻易云数据集成平台调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`,并对获取的数据进行初步加工处理。
#### 接口调用配置
首先,我们需要配置API接口调用的元数据。以下是关键的配置项:
- **API名称**: `jackyun.tradenotsensitiveinfos.list.get`
- **请求方法**: `POST`
- **分页配置**: 每页记录数为20
- **字段映射**: 将响应中的`consignTime`字段重新命名为`consignTime_new`,并将其格式化为日期类型
- **条件过滤**: 仅获取订单状态大于等于6000的记录
以下是完整的元数据配置:
```json
{
"api": "jackyun.tradenotsensitiveinfos.list.get",
"method": "POST",
"number": "tradeNo",
"id": "tradeId",
"pagination": {"pageSize": 20},
"beatFlat": ["goodsDetail"],
"formatResponse": [{"old": "consignTime", "new": "consignTime_new", "format": "date"}],
"idCheck": true,
"condition": [[{"field":"tradeStatus","logic":"egt","value":"6000"}]],
"request": [
{"field":"modified_begin","label":"起始时间","type":"string","describe":"修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空"},
{"field":"modified_end","label":"结束时间","type":"string","describe":"修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空"},
{"field":"startModified","label":"最后修改时间(起始)","type":"string"},
{"field":"endModified","label":"最后修改时间(截止)","type":"string"},
{"field":"tradeNo","label":"销售单号,多个用半角逗号分隔","type":"string"},
{"field":"pageSize","label":"每页记录数,默认50,最大1000","type":"string","value":"50"},
{"field":"pageIndex","label":"页码,0为第1页","type":"string"},
{"field":"hasTotal","label":"默认返回,首次调用时可以传1获取总记录数","type":"string","value":"1"},
{"field":"startCreated","label":"创建时间(起始)","type":"string"},
{"field":"endCreated","label":"创建时间(截止)","type":"string"},
{"field":"startAuditTime","label":"审核时间(起始)","type":"string"},
{"field":"endAuditTime","label":"审核时间(截止)","type":"string"},
{"field": "startConsignTime", "label": "发货时间(起始)", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}"},
{"field": "endConsignTime", "label": "发货时间(截止)", "type": "string", "value": "{{CURRENT_TIME|datetime}}"},
{"field": "tradeStatus", "label": "订单状态", "type": "string"},
{"field": "tradeType", "label": "订单类型", "type": "string", "value": 1},
{
...
// 省略部分字段以保持简洁
...
}
],
...
}
```
#### 数据请求与清洗
在完成元数据配置后,我们开始实际的数据请求。通过POST方法向吉客云·奇门接口发送请求,并根据配置的条件和分页参数逐页获取数据。
```python
import requests
import json
url = 'https://api.jackyun.com/tradenotsensitiveinfos/list/get'
headers = {'Content-Type': 'application/json'}
payload = {
'modified_begin': '2023-01-01T00:00:00',
'modified_end': '2023-01-07T23:59:59',
'pageSize': 20,
'pageIndex': 0,
'tradeStatus': 6000,
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
```
在获取到数据后,我们需要对其进行清洗和转换。例如,将`consignTime`字段重新命名为`consignTime_new`并格式化为日期类型。
```python
from datetime import datetime
def format_data(data):
for item in data['trades']:
if 'consignTime' in item:
item['consignTime_new'] = datetime.strptime(item['consignTime'], '%Y-%m-%dT%H:%M:%S').date()
del item['consignTime']
format_data(data)
```
#### 数据转换与写入
经过清洗后的数据可以进一步转换并写入目标系统。在这个阶段,可以根据业务需求对数据进行更复杂的处理,例如计算衍生指标、合并多源数据等。
```python
def transform_and_write(data):
transformed_data = []
for item in data['trades']:
transformed_item = {
'tradeId': item['tradeId'],
'tradeNo': item['tradeNo'],
'consignTime_new': item['consignTime_new'],
# 添加更多需要的字段
}
transformed_data.append(transformed_item)
# 假设目标系统有一个API用于接收处理后的数据
target_url = 'https://target-system.com/api/receive'
for record in transformed_data:
response = requests.post(target_url, headers=headers, data=json.dumps(record))
transform_and_write(data)
```
通过上述步骤,我们实现了从吉客云·奇门接口获取销售单信息,并对其进行初步加工处理。这是轻易云数据集成平台生命周期中的第一步,为后续的数据转换与写入奠定了基础。
![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台:将源数据转换并写入金蝶云星空API接口的技术案例
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口所能接收的格式,最终写入目标平台。以下将详细介绍如何利用轻易云数据集成平台实现这一过程。
#### API接口配置与元数据解析
为了实现数据从源系统到金蝶云星空的无缝对接,我们首先需要配置API接口。根据提供的元数据配置,目标API为`batchSave`,请求方法为`POST`。我们将逐一解析这些元数据字段,并将其映射到金蝶云星空所需的数据格式。
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
...
}
```
#### 请求参数解析与映射
1. **出库单号(FBillNo)**:
- 类型:字符串
- 描述:出库单号
- 示例值:由源系统提供
2. **单据类型(FBillTypeID)**:
- 类型:字符串
- 描述:单据类型
- 固定值:`XSCKD07_SYS`
- 转换器:`ConvertObjectParser`,参数为`FNumber`
3. **日期(FDate)**:
- 类型:字符串
- 描述:日期
- 示例值:由字段`consignTime_new`提供
4. **销售组织(FSaleOrgId)**:
- 类型:字符串
- 描述:组织
- 固定值:`201`
- 转换器:`ConvertObjectParser`,参数为`FNumber`
5. **客户(FCustomerID)**:
- 类型:字符串
- 描述:基础资料
- 示例值:通过函数从字段`shopCodenew`中提取前缀部分
6. **发货组织(FStockOrgId)**:
- 类型:字符串
- 描述:组织
- 固定值:`201`
- 转换器:`ConvertObjectParser`,参数为`FNumber`
7. **备注(FNote)**:
- 类型:字符串
- 描述:多行文本
- 固定值:“零售发货”
8. **API标识(FAPI)**:
- 类型:字符串
- 描述:多行文本
- 固定值:“true”
9. **货主类型(FOwnerTypeIdHead)**:
...
#### 明细信息处理
明细信息是整个ETL过程中最复杂的一部分,需要对多个字段进行汇总和转换:
- **物料编码(FMaterialID)**:
```json
{
"field": "FMaterialID",
"label": "物料编码",
"type": "string",
...
"value": "{{details.goodsDetail_goodsNo}}"
}
```
- **实发数量(FRealQty)**:
```json
{
"field": "FRealQty",
...
"value": "{{details.goodsDetail_sellCount}}"
}
```
- **含税单价(FTaxPrice)**:
```json
{
...
"value": "_function {{details.goodsDetail_shareFavourableAfterFee}}/{{details.goodsDetail_sellCount}}"
}
```
- **税率%(FEntryTaxRate)**:
```json
{
...
"value": "13"
}
```
- **仓库(FStockID)**:
```json
{
...
"value": "{warehouseCode}"
}
```
- **批次号(FLot)**:
```json
{
...
"value": "2018"
}
```
#### 最终请求示例
最终生成的请求示例如下:
```json
{
"FormId": "SAL_OUTSTOCK",
...
"Model": {
...
"FBillNo": "<出库单号>",
...
"SubHeadEntity": {
...
// 财务信息等其他子对象配置同上文类似处理方式。
},
...
// 明细信息数组处理,如上文所示。
...
},
...
}
```
通过以上步骤,我们成功地将源系统的数据转换为金蝶云星空API接口所需的格式,并通过轻易云数据集成平台实现了高效的数据写入。这一过程不仅保证了数据的一致性和准确性,还极大提升了业务流程的自动化水平。
![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)