旺店通采购入库单与金蝶云星空数据集成案例分享
在电商业务中,实现不同系统之间的数据无缝对接一直是个技术挑战。本篇文章将集中探讨如何通过数据集成平台,将旺店通·企业奇门的采购入库单同步到金蝶云星空,确保高效、准确地处理大规模数据流。
1. 确保数据不漏单:接口调用与抓取机制
首先要解决的问题是如何确保从旺店通·企业奇门获取的数据不漏单。我们采用了wdt.stockin.order.query.purchase接口,通过定时任务来周期性地抓取最新的采购入库单数据。在实现过程中,我们利用分页及限流机制,避免因超时或并发请求量过大导致的数据丢失。同时,引入失败重试机制和日志记录功能,实现了实时监控整个抓取过程,可以快速定位并解决问题。
2. 大量数据快速写入金蝶云星空
从旺店通获取大量订单后,下一个难点是在保证性能和可靠性的前提下,将这些订单批量写入金蝶云星空。这里,我们使用了batchSave接口,通过批处理方式提高写入效率。此外,为应对潜在的网络抖动或系统故障,我们设计了一套完备的异常处理与错误重试机制,确保每一条重要的数据都能够成功录入目标系统。
3. 数据格式差异与映射策略
不同系统间通常会有各种各样的数据格式差异,这里也不例外。为了平滑迁移,并保障集成后的数据信息一致性,我们详细定义了数据映射规则,将旺店通中的字段逐个对应到金蝶云星空所需的格式上。同时在转换过程中,对关键字段如时间戳、金额等进行精确校验,以消除任何可能导致业务逻辑错误的不匹配情况。
这只是开始的一部分。在随后的具体步骤中,我将详细介绍如何通过轻易云平台配置完成这个复杂但至关重要的任务,包括API调用细节、配置示范以及实际操作中的典型问题及其解决方案。
调用源系统旺店通·企业奇门接口wdt.stockin.order.query.purchase获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query.purchase
,并对获取的数据进行初步加工。
接口调用配置
首先,我们需要了解接口的基本配置。根据提供的元数据配置,接口调用使用POST方法,主要参数如下:
- api:
wdt.stockin.order.query.purchase
- method:
POST
- number:
order_no
- id:
stockin_id
- pagination: 每页返回50条记录
- idCheck:
true
请求参数设置
为了实现增量数据获取,我们需要设置开始时间和结束时间。这两个参数可以通过模板变量动态生成:
- start_time: 增量获取数据的开始时间,格式为
yyyy-MM-dd HH:mm:ss
。使用模板变量{{LAST_SYNC_TIME|datetime}}
来表示上次同步时间。 - end_time: 增量获取数据的结束时间,格式为
yyyy-MM-dd HH:mm:ss
。使用模板变量{{CURRENT_TIME|datetime}}
来表示当前时间。
此外,还可以根据业务需求传递其他参数,例如入库单状态、上层单据编号和仓库编号等:
- status: 入库单状态(默认80,即已完成)
- src_order_no: 上层单据编号
- warehouse_no: 仓库编号
分页参数也需要配置,以确保能够完整获取所有数据:
- page_size: 每页返回的数据条数(默认为50)
- page_no: 页号(从0页开始)
条件过滤
为了过滤不需要的数据,可以设置条件过滤。例如,我们可以排除特定仓库的数据:
"condition_bk": [
[
{"field": "warehouse_name", "logic": "notlike", "value": "百媚"}
]
]
这个条件表示排除仓库名称包含“百媚”的记录。
数据请求与清洗
在完成请求参数设置后,通过轻易云平台发起API请求,获取原始数据。接下来,需要对这些数据进行清洗和初步加工,以便后续处理。
-
字段映射与转换
获取到的数据可能包含多个字段,但并非所有字段都是我们需要的。通过字段映射,可以筛选出所需字段,并进行必要的转换。例如,将日期字符串转换为标准日期格式,将数值字段统一单位等。
-
去重与合并
如果多次请求返回的数据存在重复记录,需要进行去重处理。此外,如果同一订单分批返回,可以通过订单号或其他唯一标识符将其合并为一条完整记录。
-
异常处理
在数据清洗过程中,还需处理可能出现的异常情况,例如缺失值、格式错误等。可以设置默认值或进行补全,以确保数据质量。
示例代码
以下是一个简化的示例代码,用于展示如何调用接口并处理返回的数据:
import requests
import json
from datetime import datetime
# 设置请求URL和头信息
url = "https://api.wangdian.cn/openapi2/wdt.stockin.order.query.purchase"
headers = {
"Content-Type": "application/json"
}
# 设置请求参数
params = {
"start_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"end_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"status": "80",
"page_size": 50,
"page_no": 0
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(params))
# 处理响应数据
if response.status_code == 200:
data = response.json()
# 数据清洗与加工逻辑
processed_data = []
for record in data.get("orders", []):
if record["warehouse_name"] != "百媚":
processed_data.append(record)
else:
print(f"Error: {response.status_code}")
# 输出处理后的数据
print(processed_data)
以上代码展示了如何通过Python脚本调用接口,并对返回的数据进行初步清洗和加工。在实际应用中,可以根据具体业务需求进一步完善清洗逻辑和异常处理机制。
通过上述步骤,我们实现了从源系统旺店通获取采购入库单数据,并进行了初步加工,为后续的数据转换与写入奠定了基础。这一步骤不仅确保了数据的准确性和完整性,也为提升业务透明度和效率提供了有力支持。
轻易云数据集成平台生命周期第二步:ETL转换与写入金蝶云星空API接口
在数据集成过程中,将源平台的数据转换为目标平台可接收的格式是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将旺店通采购入库单的数据经过ETL(提取、转换、加载)处理后,写入金蝶云星空API接口。
配置API接口元数据
为了实现数据的无缝对接,我们需要配置金蝶云星空的API接口元数据。以下是关键字段及其配置方式:
-
FBillTypeID(单据类型)
- 类型:string
- 描述:单据类型
- 解析器:ConvertObjectParser,参数为FNumber
- 值:通过
_findCollection
函数从源平台获取单据类型ID。{ "field": "FBillTypeID", "label": "单据类型", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "_findCollection find FBillTypeID from 54a13d51-c300-3d8c-ac6c-9fb3e3e3c580 where FBillNo={outer_no}" }
-
FBusinessType(业务类型)
- 类型:string
- 描述:业务类型下拉列表
- 值:通过
_findCollection
函数从源平台获取业务类型。{ "field": "FBusinessType", "label": "业务类型", "type": "string", "value": "_findCollection find FBusinessType from 54a13d51-c300-3d8c-ac6c-9fb3e3e3c580 where FBillNo={outer_no}" }
-
FStockOrgId(收料组织)
- 类型:string
- 描述:组织
- 解析器:ConvertObjectParser,参数为FNumber
- 值:通过
_findCollection
函数从源平台获取收料组织ID。{ "field": "FStockOrgId", "label": "收料组织", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "_findCollection find FStockOrgId from 54a13d51-c300-3d8c-ac6c-9fb3e3e3c580 where FBillNo={outer_no}" }
-
FPurchaseOrgId(采购组织)
- 类型:string
- 描述:组织
- 解析器:ConvertObjectParser,参数为FNumber
- 值:根据仓库名称进行条件判断,通过
_function
函数设置采购组织ID。{ "field": "FPurchaseOrgId", "label": "采购组织", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "_function case when '{warehouse_name}' like '%展欣%' then '106' else '100' end" }
-
FSupplierId(供应商)
- 类型:string
- 描述:基础资料
- 解析器:ConvertObjectParser,参数为FNumber
- 值:直接映射供应商编号。
{ "field": "FSupplierId", "label": "供应商", "type": "string", “parser”: { “name”: “ConvertObjectParser”, “params”: “FNumber” }, “value”: “{provider_no}” }
-
FInStockEntry(明细信息) 明细信息是一个数组,其中包含多个子字段,如物料编码、实收数量等。这些字段需要逐一配置,以确保每个字段都能正确映射到金蝶云星空的相应字段。
示例:
{ “field”: “FInStockEntry”, “label”: “明细信息”, “type”: “array”, “children”: [ { “field”: “FMaterialId”, “label”: “物料编码”, “type”: “string”, “parser”: { “name”: “ConvertObjectParser”, “params”: “FNumber” }, “value”: "{{details_list.spec_no}}" }, { “field”: “FRealQty”, “label”: 实收数量, ”type“: ”string“, ”describe“: ”数量“, ”value“: "{{details_list.goods_count}}" } // 更多子字段配置... ] }
数据请求与清洗
在上述元数据配置完成后,系统会自动发起数据请求,从源平台提取相关数据,并根据配置进行清洗和转换。例如,通过_findCollection
函数从源系统获取特定字段值,并使用ConvertObjectParser
将其转换为目标系统所需的格式。
数据转换与写入
在数据清洗和转换完成后,轻易云数据集成平台会将处理后的数据通过POST请求写入金蝶云星空API接口。以下是完整的请求示例:
{
”api“: ”batchSave“,
”method“: ”POST“,
”idCheck“: true,
”operation“: {
”rowsKey“: ”array“,
”rows“: 1,
”method“: ”batchArraySave“
},
request:[// 上述配置的所有字段]
otherRequest:[{
field:“FormId”, label:“业务对象表单Id”, type:“string”, describe:“必须填写金蝶的表单ID如:PUR_PurchaseOrder”, value:“STK_InStock”
},{
field:“IsAutoSubmitAndAudit”, label:“提交并审核”, type:“bool”, value:“true”
},{
field:“Operation”, label:“执行的操作”, type:“string”, value:“Save”
},{
field:“IsVerifyBaseDataField”, label:“验证基础资料”, type:“bool”, describe:“是否验证所有的基础资料有效性,布尔类,默认false(非必录)”, value:“true”
},{
field:“SubSystemId”, label:“系统模块”, type:“string”, describe:“默认仓库模块”, value:“21”
}]
}
通过上述步骤,我们可以确保旺店通采购入库单的数据经过ETL处理后,准确无误地写入到金蝶云星空系统中。这不仅提高了数据处理效率,还保证了各个环节的数据一致性和准确性。