旺店通·旗舰奇门数据集成到金蝶云星空案例分享:物料同步
在本次技术案例中,将重点介绍如何实现旺店通·旗舰奇门平台上的商品数据(物料)高效而准确地同步至金蝶云星空ERP系统。通过配置轻易云数据集成平台,我们巧妙利用了多个关键API接口,确保整个流程的可靠性和实时监控。
首先,为了抓取旺店通·旗舰奇门的数据,我们使用其提供的wdt.goods.goods.querywithspec
接口。这一接口允许我们在支持分页查询的情况下,高效获取所有商品及规格信息。由此,我们需要解决分页和限流问题,以避免因频繁请求造成的数据遗漏或访问受限。
其次,考虑到两端系统的数据格式差异,为确保数据一致性,在导入前需进行定制化的数据映射对接。在这一过程中,通过轻易云平台内置的大量转换工具,对接不同格式的数据成为可能,可以自动处理并统一转换,以适配金蝶云星空要求的标准格式。
为了高效批量写入大量商品数据至金蝶云星空ERP系统,我们调用其batchSave
API接口,该接口支持多条记录一次性提交,有效减少请求次数,与此同时也最大程度提升了传输效率。此外,通过精密设计的重试机制与异常处理策略,当遇到网络不稳定或其他突发情况时,能够保障数据传输过程中的完整性和一致性。
不仅如此,整个集成过程还设置了定时任务,从而周期性地从旺店通·旗舰奇门抓取最新更新的数据,并增量同步至目标系统。同时,由于轻易云提供全透明可视化操作界面,每个环节都清晰呈现,即便是复杂环境下依然能做到实时监控与日志记录,让运维管理更加得心应手。
调用旺店通·旗舰奇门接口wdt.goods.goods.querywithspec获取并加工数据
在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的环节。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口wdt.goods.goods.querywithspec
,并对获取的数据进行初步加工。
接口配置与调用
首先,我们需要配置元数据以便正确调用wdt.goods.goods.querywithspec
接口。以下是该接口的元数据配置:
{
"api": "wdt.goods.goods.querywithspec",
"method": "POST",
"number": "goods_no",
"id": "goods_id",
"pagination": {
"pageSize": 100
},
"idCheck": true,
"request": [
{
"field": "pager",
"label": "分页",
"type": "object",
"children": [
{
"field": "page_size",
"label": "page_size",
"type": "string",
"value": "{PAGINATION_PAGE_SIZE}"
},
{
"field": "page_no",
"label": "page_no",
"type": "string",
"value": "1"
}
]
},
{
"field": "params",
"label": "查询参数",
"type": "object",
"children": [
{
"field": "start_time",
"label": "开始时间",
"type": "string",
"value":"{{LAST_SYNC_TIME|datetime}}"
},
{
{
field: 'end_time',
label: '结束时间',
type: 'string',
value: '{{CURRENT_TIME|datetime}}'
}
}
]
}
],
'effect': 'QUERY',
'autoFillResponse': true
}
分页机制与请求参数
为了高效处理大批量数据,接口支持分页机制。每次请求的数据量由page_size
字段控制,这里设置为100条记录。通过page_no
字段指定当前页码,从第一页开始逐页获取。
查询参数包括start_time
和end_time
,分别表示上次同步时间和当前时间。这些参数确保我们只获取在特定时间范围内更新或新增的数据。
数据请求与清洗
在实际操作中,调用该接口时需要注意以下几点:
- 分页处理:由于一次请求只能返回有限数量的数据,需要循环调用接口直到所有数据都被获取完毕。
- 时间戳转换:确保传递给接口的时间戳格式正确,以避免查询结果不准确。
- 错误处理:在每次请求后检查返回状态码和错误信息,并根据情况进行重试或记录日志。
示例代码如下:
import requests
import datetime
def fetch_data(last_sync_time, current_time):
page_no = 1
page_size = 100
all_data = []
while True:
payload = {
'pager': {
'page_size': page_size,
'page_no': page_no
},
'params': {
'start_time': last_sync_time.strftime('%Y-%m-%d %H:%M:%S'),
'end_time': current_time.strftime('%Y-%m-%d %H:%M:%S')
}
}
response = requests.post('https://api.wangdian.cn/flagship/wdt.goods.goods.querywithspec', json=payload)
if response.status_code != 200:
print(f"Error fetching data: {response.text}")
break
data = response.json()
if not data['data']:
break
all_data.extend(data['data'])
if len(data['data']) < page_size:
break
page_no += 1
return all_data
last_sync_time = datetime.datetime.strptime('2023-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')
current_time = datetime.datetime.now()
data = fetch_data(last_sync_time, current_time)
print(f"Fetched {len(data)} records")
数据清洗与转换
获取到的数据通常需要进行清洗和转换,以便后续处理。常见的清洗操作包括:
- 去重:根据商品编号(goods_no)或商品ID(goods_id)去重。
- 格式转换:将日期、金额等字段转换为标准格式。
- 缺失值处理:填充或删除缺失值。
示例代码如下:
import pandas as pd
def clean_data(raw_data):
df = pd.DataFrame(raw_data)
# 去重
df.drop_duplicates(subset=['goods_no'], inplace=True)
# 格式转换
df['created_at'] = pd.to_datetime(df['created_at'])
# 缺失值处理
df.fillna({'price': 0}, inplace=True)
return df
cleaned_data = clean_data(data)
print(cleaned_data.head())
通过上述步骤,我们成功地从旺店通·旗舰奇门系统中获取了物料数据,并进行了初步的清洗和转换,为后续的数据写入和进一步处理奠定了基础。
使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口
在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口的要求,并最终写入目标平台。本文将详细探讨如何利用元数据配置完成这一任务。
元数据配置解析
我们使用的元数据配置如下:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field": "FName", "label": "名称", "type": "string", "describe": "名称", "value": "{goods_name}"},
{"field": "FNumber", "label": "编码", "type": "string", "describe": "编码", "value": "{goods_no}"},
{"field": "FDescription", "label": "描述", "type": "string", "describe": "描述"},
{"field": "FCreateOrgId", "label": "创建组织", ...
],
...
}
该配置中,api
字段指定了我们要调用的金蝶云星空API接口为batchSave
,并且采用POST
方法提交请求。idCheck
字段设置为true
,表示在执行操作前会检查ID是否存在。
请求参数解析
请求参数部分定义了需要传递给API的字段及其对应的数据映射关系。以下是几个关键字段及其解释:
FName
: 名称,对应源数据中的goods_name
FNumber
: 编码,对应源数据中的goods_no
FDescription
: 描述,无需映射具体值FCreateOrgId
: 创建组织,使用固定值100并通过ConvertObjectParser
进行转换SubHeadEntity
: 嵌套对象,包含物料属性、基本单位等信息
例如,基本单位(FBaseUnitId
)字段使用了一个名为ConvertObjectParser
的解析器,将源数据中的单位名称(即 {unit_name}
)转换为目标系统所需格式。
操作参数解析
除了请求参数,还需要设置一些操作参数:
"otherRequest":[
{"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_MATERIAL"},
{"field":"Operation","label":"执行的操作","type":"string","value":"Save"},
{"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"},
...
]
这些参数定义了具体的业务操作,例如表单ID(FormId: BD_MATERIAL
)、执行操作类型(Operation: Save
)以及是否自动提交和审核(IsAutoSubmitAndAudit: true
)。
数据转换与写入流程
- 数据请求与清洗:从源平台获取原始物料数据,并进行初步清洗和预处理。
- ETL转换:
- 利用元数据配置,将源数据字段映射到目标API所需格式。
- 应用必要的数据解析器(如
ConvertObjectParser
) 对特定字段进行转换。
- 构建请求体:
- 根据元数据配置生成符合API要求的JSON请求体。
- 发送请求:
- 使用HTTP POST方法将构建好的请求体发送至金蝶云星空API接口。
- 结果处理:
- 接收并处理API返回结果,根据返回状态判断操作是否成功。
实际案例应用
假设我们有一条源物料记录如下:
{
"goods_name": "电子元件",
"goods_no": "ELEC123",
...
}
通过上述元数据配置和ETL流程,我们可以生成如下符合金蝶云星空API要求的请求体:
{
...
{
"FName": "电子元件",
"FNumber": "ELEC123",
...
{
...
{
...
{
...
{
...
}
}
}
}
}
}
最后,通过HTTP POST方法将该请求体发送至金蝶云星空API接口,实现物料同步。
以上就是利用轻易云数据集成平台进行ETL转换并将数据写入金蝶云星空API接口的技术案例。通过合理配置元数据和精确执行ETL流程,可以确保不同系统间的数据无缝对接和高效传输。