### 吉客云·奇门数据集成到金蝶云星空的技术实现分享
在现代企业管理体系中,数据的无缝对接和高效处理至关重要。本次案例分享旨在探讨如何将吉客云·奇门平台的数据通过轻易云数据集成平台,高效、准确地同步到金蝶云星空系统,实现销售订单向销售出库单(无批号)的转化。
本案例中的实现方案名称为:**(吉客云奇门->金蝶)(线上)销售订单->销售出库单(无批号)**。该方案主要涉及两个API接口——`jackyun.tradenotsensitiveinfos.list.get`用于获取吉客云·奇门的数据,`batchSave`则用于将转换后的数据写入到金蝶云星空。
#### 数据获取与初步处理
首先,通过调用`jackyun.tradenotsensitiveinfos.list.get`接口,从吉客云·奇门中抓取所有未标记敏感信息的交易列表。由于此过程需要应对分页和限流问题,我们设计了自动重试机制,并结合定时任务,确保不漏单、不重单。此外,为保证高吞吐量的数据写入能力,我们引入异步并发处理策略,使得大量交易数据能够快速进入后续流程。
```python
# 示例代码片段(伪代码)
response = call_api('jackyun.tradenotsensitiveinfos.list.get', params)
if response.is_paginated:
while not end_of_data(response):
results = process_response(response)
save_to_temp_storage(results)
response = get_next_page()
```
通过上述步骤,我们能够可靠且有效地从吉客云·奇门获取所需的数据,这为后续步骤打下了坚实基础。
#### 数据转换与清洗
为了适配特定业务需求和不同的数据结构,在进入正式写入环节之前,需要对原始数据进行一系列自定义转换逻辑。这包括但不限于字段映射、格式转换以及缺失字段填补等操作。基于轻易云提供的可视化数据流设计工具,这些操作变得更加直观和易于管理,大大提升了开发效率:
```sql
-- 伪SQL示例
SELECT
src_order_id AS order_id,
src_customer_name AS customer_name,
FORMAT_DATE(src_order_date) AS order_date,
FROM temp_storage;
```
在完成这些基础工作后,下一步我们会针对每一条记录生成符合金蝶标准的销售出库单。
#### 实现技术要点细节待续……
以上是整个解决方案的开篇介绍部分。在接下来的文章内容中,将详细解析如何利用batchSave API进行高效、高质量的数据同步,同时探究各类异常
![如何对接钉钉API接口](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image)
### 使用吉客云·奇门接口获取并加工数据的技术案例
在轻易云数据集成平台中,调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`是数据集成生命周期的第一步。本文将详细探讨如何配置和调用该接口以获取所需数据,并对其进行初步加工。
#### 接口配置与调用
首先,我们需要理解接口的元数据配置。以下是关键配置项及其含义:
- **API**: `jackyun.tradenotsensitiveinfos.list.get`
- **请求方法**: `POST`
- **主键字段**: `tradeNo`
- **请求参数**:
- `startModified`: 起始修改时间,动态值为上次同步时间(`{{LAST_SYNC_TIME|datetime}}`)。
- `endModified`: 结束修改时间,动态值为当前时间(`{{CURRENT_TIME|datetime}}`)。
- `pageSize`: 每页记录数,使用分页参数(`{PAGINATION_PAGE_SIZE}`)。
- `pageIndex`: 当前页码,使用分页参数(`{PAGINATION_START_PAGE}`)。
- `fields`: 请求字段列表,包括订单号、商品详情等。
- `isDelete`: 是否删除标记。
- `tradeStatus`: 交易状态,固定值为`6000`。
- `tradeTypeList`: 交易类型列表,通过解析器将字符串转换为数组。
#### 请求参数示例
根据元数据配置,我们构造的请求参数如下:
```json
{
"startModified": "2023-10-01T00:00:00Z",
"endModified": "2023-10-02T00:00:00Z",
"pageSize": "50",
"pageIndex": "1",
"fields": "tradeNo,orderNo,shopName,companyName,warehouseName,logisticName,mainPostid,goodsDetail.goodsNo,...",
"isDelete": "",
"tradeStatus": "6000",
"tradeTypeList": ["1", "2", "3", "4", ..., "100"]
}
```
#### 数据过滤与条件设置
在实际应用中,我们可能需要对返回的数据进行过滤,以满足特定业务需求。元数据中的条件配置如下:
```json
[
{"field":"shopCode","logic":"neqv2","value":"0007"},
{"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"},
{"field":"goodsDetail.goodsDelivery","logic":"isnull","value":"null"},
{"field":"shopCode","logic":"notlike","value":"YF"}
]
```
这些条件确保了我们只获取符合特定要求的数据。例如,排除店铺代码为`0007`的数据,以及商品编号为`88888`的数据。
#### 数据清洗与初步加工
获取到原始数据后,需要进行清洗和初步加工,以便后续处理。以下是一些常见的清洗操作:
1. **去重**:确保每条记录唯一,可以通过主键字段`tradeNo`去重。
2. **格式转换**:将日期字符串转换为标准日期格式,将金额字段转换为数值类型等。
3. **字段映射**:根据业务需求,对字段进行重命名或映射。例如,将接口返回的字段名映射到目标系统所需的字段名。
#### 示例代码
以下是一个简单的Python示例代码,用于调用接口并处理返回的数据:
```python
import requests
import json
from datetime import datetime
# 配置请求参数
params = {
"startModified": datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"),
"endModified": datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"),
"pageSize": 50,
"pageIndex": 1,
"fields": "...", # 完整字段列表
"isDelete": "",
"tradeStatus": 6000,
"tradeTypeList": ["1", "2", ..., "100"]
}
# 发起POST请求
response = requests.post("https://api.jackyun.com/tradenotsensitiveinfos/list/get", data=json.dumps(params))
data = response.json()
# 数据清洗与初步加工
cleaned_data = []
for record in data['result']:
if record['shopCode'] != '0007' and record['goodsDetail']['goodsNo'] != '88888':
cleaned_data.append(record)
# 输出处理后的数据
print(cleaned_data)
```
通过上述步骤,我们实现了从吉客云·奇门接口获取并初步加工数据,为后续的数据转换与写入奠定了基础。在实际项目中,还可以根据具体需求进一步优化和扩展这些操作。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将吉客云奇门销售订单转换为金蝶云星空销售出库单
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将吉客云奇门的销售订单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
#### 数据请求与清洗
首先,从吉客云奇门获取销售订单数据。此步骤包括数据的提取和初步清洗,确保数据的完整性和准确性。这部分内容在本文不做详细讨论,重点放在ETL转换和写入阶段。
#### 数据转换与写入
在轻易云数据集成平台上,我们需要配置元数据,以便将源数据正确地映射到目标系统的API接口。以下是具体的元数据配置及其解析:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{tradeNo}"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{consignTime|date}}"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shopCode}"},
{"field":"FCorrespondOrgId","label":"对应组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FCarriageNO","label":"运输单号","type":null,"describe":null},
{"field":null,"label":null,"type":null,"describe":null},
...
],
"otherRequest":[
{"field":null,"label":null,"type":null,"describe":null},
...
]
}
```
##### 核心字段解析
1. **FBillTypeID**: 单据类型,固定值`XSCKD01_SYS`。
2. **FBillNo**: 单据编号,对应源系统中的`tradeNo`。
3. **FDate**: 日期,通过模板语言将`consignTime`字段格式化为日期。
4. **FSaleOrgId**: 销售组织,固定值`100`。
5. **FCustomerID**: 客户,通过`shopCode`字段映射。
6. **FCorrespondOrgId**: 对应组织,固定值`100`。
##### 明细信息(FEntity)
明细信息部分是整个配置中的核心,它包含了每个商品的详细信息。以下是几个关键字段:
- **FMaterialID**: 物料编码,通过`goodsDetail.goodsNo`映射。
- **FRealQty**: 实发数量,通过`goodsDetail.sellCount`映射。
- **FTaxPrice**: 含税单价,通过函数计算得到: `{{goodsDetail.shareFavourableAfterFee}}/{{goodsDetail.sellCount}}`
- **FIsFree**: 是否赠品,通过条件判断: `CASE WHEN {{goodsDetail.sellTotal}}>0 THEN 'false' ELSE 'true' END`
- **FStockID**: 仓库,通过`warehouseCode`字段映射。
##### 操作配置
操作配置部分定义了如何处理数组类型的数据:
```json
{
"operation":{
"method": "merge",
"field": "tradeNo",
"bodyName": "goodsDetail",
"bodySum":["sellCount"],
"header":["tradeNo", "customerCode"],
"body":["goodsNo", "sellCount", "warehouseCode", "batchNo"]
}
}
```
该配置表明,对于每个订单(由`tradeNo`标识),我们需要合并其下所有商品明细(由`goodsDetail`标识),并计算出总数量(由`sellCount`求和)。
##### 写入目标系统
最后,将转换后的数据通过POST请求写入金蝶云星空:
```json
{
"api": "/k3cloud/api/batchSave",
"method": "POST",
...
}
```
通过上述元数据配置和操作,我们实现了从吉客云奇门到金蝶云星空的数据无缝对接。每个字段都经过精确映射和转换,确保目标系统能够正确接收和处理这些数据。
以上内容展示了如何利用轻易云数据集成平台进行复杂的数据ETL转换,并成功将源系统的数据写入目标系统。
![打通企业微信数据接口](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)