旺店通·企业奇门数据集成到金蝶云星空的技术案例分享
在构建现代化企业信息系统时,不同平台间的数据集成显得尤为重要。本文将展示一个具体的系统对接集成案例,介绍如何通过轻易云数据集成平台高效完成旺店通·企业奇门的数据无缝对接到金蝶云星空。本次实例中的方案被命名为“物料旺店通→金蝶”,重点解决了从数据抓取、处理到最终写入各个环节的痛点。
集成背景与目标
我们的主要任务是定时可靠地抓取旺店通·企业奇门接口(wdt.goods.query)的物料数据信息,并大批量、高速稳定地写入至金蝶云星空的数据存储中(batchSave)。在这一过程中,确保数据不漏单及实时监控整个流程状态是重中之重。
技术挑战与解决方案概述
-
快速和大量数据写入: 面临大规模物料信息需要迅速导入的问题,通过优化轻易云平台的数据处理速度和并发性能,实现了快速且高效的大批量数据写入。
-
分页和限流管理: 旺店通接口返回的数据有分页限制,为此我们设计了一套有效的分页机制,加上针对API调用频率进行智能限流控制,以确保数据获取持续稳定,不受阻碍。
-
格式差异适配: 旺店通与金蝶之间存在不同的数据格式要求,我们运用了动态映射策略,将源端复杂多变的JSON结构转换为目标端统一规范的格式。这一过程结合了脚本转化及字段映射功能,使所有关键字段能够精准匹配,从而避免任何因格式问题导致的信息丢失或错误。
-
异常处理机制: 实现自动异常捕获与分类处置。在遇到意外情况如网络故障或接口超时时,系统能即时记录详细日志并触发重试机制,保证业务连续性,并及时通知相关人员加以人工干预。
-
实时监控与日志记录: 通过内置监控模块,我们实现了全程可视化操作和实时跟踪每一次请求、响应及整体运行状况,极大提升了透明度。同时,日志记录详实准确,为后续问题溯源提供依据。
下面将具体阐述各个步骤,包括接口调用方式、代码示例、参数解析等细节内容。敬请期待!
以上是文章开头部分,如需继续编写完整方案,请告知,谢谢!
调用旺店通·企业奇门接口wdt.goods.query获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统获取数据,并进行初步的清洗和加工。本文将详细探讨如何通过调用旺店通·企业奇门接口wdt.goods.query
来实现这一目标。
接口概述
wdt.goods.query
接口用于查询旺店通系统中的货品信息。该接口支持按货品编号、删除状态、最后修改时间等条件进行查询,并返回符合条件的货品数据。我们将使用POST方法来调用此接口,并根据业务需求对返回的数据进行处理。
元数据配置解析
以下是元数据配置的详细解析:
{
"api": "wdt.goods.query",
"effect": "QUERY",
"method": "POST",
"number": "goods_no",
"id": "goods_id",
"name": "goods_no",
"idCheck": true,
"request": [
{"field": "spec_no", "label": "货品编号", "type": "string", "describe": "货品编号"},
{"field": "deleted", "label": "已删除货品", "type": "string",
"describe": "默认为0, 0:只返回未删除货品 1:返回未删除和已删除货品"},
{"field": "start_time",
"label": "开始时间",
"type": "string",
"describe":
"按最后修改时间增量查询数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
"value":"{{LAST_SYNC_TIME|datetime}}"},
{"field":
"end_time",
"label":"结束时间",
"type":"string",
describe:"111",
value:"{{CURRENT_TIME|datetime}}"}
],
otherRequest: [
{"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"{PAGINATION_PAGE_SIZE}"},
{"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始","value":"{PAGINATION_START_PAGE}"}
],
autoFillResponse: true
}
请求参数详解
- spec_no(货品编号):用于指定特定的货品编号进行查询。
- deleted(已删除货品):默认为0,仅返回未删除的货品;设置为1时,返回所有包括已删除的货品。
- start_time(开始时间):按最后修改时间增量查询数据,格式为
yyyy-MM-dd HH:mm:ss
。 - end_time(结束时间):查询截止时间,格式同上。
- page_size(分页大小):每页返回的数据条数,默认值为40。
- page_no(页号):分页查询的页码,从0开始。
调用示例
以下是一个调用该接口的示例代码:
import requests
import datetime
# 设置请求URL和头部信息
url = 'https://api.wangdian.cn/openapi2/wdt_goods_query.php'
headers = {'Content-Type': 'application/json'}
# 获取当前时间和上次同步时间
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
last_sync_time = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')
# 构建请求体
payload = {
'spec_no': '',
'deleted': '0',
'start_time': last_sync_time,
'end_time': current_time,
'page_size': '40',
'page_no': '0'
}
# 发起POST请求
response = requests.post(url, headers=headers, json=payload)
# 检查响应状态码并处理响应数据
if response.status_code == 200:
data = response.json()
# 在此处添加对data的处理逻辑,例如清洗和转换
else:
print(f"Error: {response.status_code}")
数据清洗与加工
在获取到原始数据后,我们需要对其进行清洗和加工,以便后续的数据转换与写入步骤。以下是一些常见的数据清洗操作:
- 去除无效或重复记录:检查并移除无效或重复的记录。
- 字段映射与转换:将源系统中的字段映射到目标系统所需的字段,并进行必要的数据类型转换。
- 异常值处理:识别并处理异常值,如缺失值或超出合理范围的数据。
例如,对于获取到的货品数据,我们可以根据业务规则过滤掉已删除的货品,并将其转换为目标系统所需的格式:
cleaned_data = []
for item in data['goods_list']:
if item['deleted'] == '0':
cleaned_item = {
'goods_id': item['goods_id'],
'goods_no': item['goods_no'],
# 添加其他必要字段映射
}
cleaned_data.append(cleaned_item)
通过上述步骤,我们完成了从源系统获取数据并进行初步清洗和加工,为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体业务需求进一步细化和优化这些操作。
利用轻易云数据集成平台实现物料数据ETL转换并写入金蝶云星空
在数据集成生命周期的第二步中,我们将聚焦于如何将已经集成的源平台数据进行ETL转换,并最终写入目标平台金蝶云星空API接口。本文将通过具体的元数据配置案例,详细讲解这一过程。
数据请求与清洗
首先,我们需要从源平台(如物料旺店通)获取原始数据。假设我们已经完成了这一阶段,接下来我们将重点放在数据转换与写入阶段。
数据转换与写入
为了将源平台的数据转换为金蝶云星空API接口所能接收的格式,我们需要配置元数据。以下是一个典型的元数据配置示例:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field":"FName","label":"名称","type":"string","describe":"111","value":"{goods_name}"},
{"field":"FNumber","label":"编码","type":"string","describe":"111","value":"{{spec_list.spec_no}}"},
{"field":"FDescription","label":"描述","type":"string","describe":"111"},
{"field":"FCreateOrgId","label":"创建组织","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FUseOrgId","label":"使用组织","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FSpecification","label":"规格型号","type":"string","value":"{{spec_list.spec_name}}"},
{"field":"SubHeadEntity","label":"基本","type":"object","describe":"111",
"children":[
{"field":"FErpClsID","label":"物料属性","type":"string","describe":"111","value":"1"},
{"field":"FBaseUnitId","label":"基本单位","type":"string","describe":"111",
"parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "tai"
},
{"field": "FCategoryID", "label": "存货类别", "type": "string",
"describe": "CHLB01_SYS",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "CHLB05_SYS"
}
]
},
{"field": "FMaterialGroup",
"label": "分组",
"type": "string",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
}
}
],
...
}
配置解析
-
API Endpoint:
batchSave
是金蝶云星空用于批量保存物料信息的API接口。 -
HTTP Method:使用
POST
方法提交数据。 -
ID Check:
idCheck: true
表示在写入前会检查是否存在重复ID。 -
Request Fields:
FName
: 对应物料名称,值来自{goods_name}
。FNumber
: 对应物料编码,值来自{{spec_list.spec_no}}
。FDescription
: 描述字段,可以为空或填充描述信息。FCreateOrgId
和FUseOrgId
: 创建和使用组织,通过ConvertObjectParser
转换为目标格式,固定值为100
。FSpecification
: 对应规格型号,值来自{{spec_list.spec_name}}
。SubHeadEntity
: 包含多个子字段,如物料属性、基本单位和存货类别等,这些字段也通过相应的解析器进行转换。
-
Other Request Fields:
FormId
: 固定值为"BD_MATERIAL"
,表示表单ID。Operation
: 操作类型,固定值为"Save"
。IsAutoSubmitAndAudit
: 自动提交和审核标志,布尔值为true
。IsVerifyBaseDataField
: 验证基础资料有效性,布尔值为false
。
数据写入
在配置完成后,通过轻易云的数据集成平台,将上述配置应用于ETL流程。在执行过程中,系统会自动根据配置规则,将源平台的数据转换为符合金蝶云星空API要求的格式,并通过HTTP POST请求批量提交到目标系统。
通过这种方式,我们能够高效地实现跨平台的数据集成,并确保数据在不同系统间无缝对接。这不仅提高了业务流程的自动化程度,也大大减少了人工干预和潜在错误。