旺店通·企业奇门数据集成到用友BIP案例分享:盘盈单-p
在本次技术案例中,我们将探讨如何实现旺店通·企业奇门的盘盈单数据集成至用友BIP系统。具体来说,本文将聚焦于通过调用wdt.stockin.order.query
接口从旺店通·企业奇门获取库存盘盈信息,并利用用友BIP的API /yonbip/scm/othinrecord/single/save
进行数据写入。
首先,方案采用高吞吐量的数据写入能力设计,以确保在快速抓取大量库存盘盈数据的同时,保证时效性。由于业务需求,每次运行都需要处理大批量的数据,这样就要求我们的系统不仅能够定时精准地抓取接口数据,还要能稳定可靠地完成向用友BIP的传输。
为了适应特定业务场景中的各种复杂逻辑,我们自定义了数据转换逻辑,对从旺店通·企业奇门获取到的数据进行了格式化处理。特别是针对分页和限流问题,通过合理配置和优化请求机制,实现了对分页结果的全量拉取与整合。此外,对于接口调用过程中可能出现的异常情况,我们设计了完善的错误重试机制以及实时监控与告警系统,以确保整个流程无缝衔接,不漏单、不失误。
最后,在实际实施过程中,集中式监控平台对每一次操作环节,包括API调用、数据转移、格式转换等,都提供了详细记录,使得任何潜在问题都可以被及时发现并解决。这一切不仅提高了整体效率,也为我们完美执行该项目奠定了坚实基础。
接下来的章节,我们将详细介绍具体实现步骤及核心代码片段,希望这份经验分享能为大家提供有价值的参考。
调用源系统旺店通·企业奇门接口wdt.stockin.order.query获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query
,以获取盘盈单相关的数据,并进行初步加工。
接口配置与调用
首先,我们需要配置并调用wdt.stockin.order.query
接口。该接口使用POST方法,通过传递一系列参数来获取指定条件下的入库单信息。以下是详细的元数据配置:
{
"api": "wdt.stockin.order.query",
"method": "POST",
"number": "stockin_no",
"id": "stockin_no",
"pagination": {
"pageSize": 50
},
"idCheck": true,
"request": [
{
"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": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{CURRENT_TIME|datetime}}"
},
{
"field": "order_type",
"label": "源单据类别",
"type": "string",
"describe": "源单据类别 1采购入库, 2调拨入库, 4盘盈入库, 5生产入库, 6其他入库, 7保修入库, 8纠错入库, 9初始化入库 10预入库11 JIT退货入库12 委外入库",
"value":"6"
},
{
"field":"status",
"label":"入库单状态",
"type":"string",
"describe":"入库单状态10已取消20编辑中25待价格确认30待审核32待推送33推送失败35委外待入库60待结算80已完成(按照状态查询时必须传原单据类别,如果未传status则默认查询80已完成单据)",
"value":"60,80"
},
{
...
}
],
...
}
参数详解
start_time
和end_time
:用于按最后修改时间增量获取数据,确保我们只获取到自上次同步以来的新数据。order_type
:设置为6
,表示我们只关心盘盈入库的数据。status
:设置为60,80
,表示我们只获取状态为“待结算”和“已完成”的盘盈单。warehouse_no
,src_order_no
,stockin_no
:这些字段用于更精确地过滤数据,但在本例中不做强制要求。
分页处理
为了避免一次性拉取大量数据导致性能问题,我们采用分页机制。配置中的分页参数如下:
{
...
“pagination”: {
“pageSize”:50
},
...
}
通过设置每页返回的数据条数为50,我们可以逐页拉取数据,并在后续处理过程中合并这些分页结果。
数据清洗与转换
在成功调用接口并获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。常见的清洗操作包括:
- 字段映射:将源系统中的字段名映射到目标系统的字段名。
- 格式转换:例如,将日期格式从字符串转换为标准日期类型。
- 过滤无效数据:移除不符合业务需求的数据记录。
以下是一个简单的数据清洗示例:
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
cleaned_record = {
'stock_in_number': record['stockin_no'],
'warehouse_code': record['warehouse_no'],
'order_status': record['status'],
'last_modified': datetime.strptime(record['modified'], '%Y-%m-%d %H:%M:%S')
}
cleaned_data.append(cleaned_record)
return cleaned_data
通过上述步骤,我们可以确保从旺店通·企业奇门接口获取到的数据经过清洗和转换后,能够顺利写入目标系统。
实时监控与日志记录
在整个过程中,实时监控和日志记录是确保数据集成过程顺利进行的重要手段。通过轻易云平台提供的可视化界面,我们可以实时监控每个环节的数据流动和处理状态,并及时发现和解决潜在问题。
综上所述,通过合理配置和调用旺店通·企业奇门接口wdt.stockin.order.query
,结合有效的数据清洗与转换策略,可以高效地实现盘盈单相关数据的集成,为后续的数据处理和分析打下坚实基础。
轻易云数据集成平台:将源数据转换并写入用友BIPAPI接口
在轻易云数据集成平台中,ETL(Extract, Transform, Load)过程是数据集成生命周期的核心环节之一。本文将深入探讨如何将已经集成的源平台数据进行ETL转换,并转为用友BIPAPI接口所能够接收的格式,最终写入目标平台。
数据请求与清洗
在数据请求与清洗阶段,我们从源系统获取原始数据,并进行必要的数据清洗和预处理。这一步骤确保了后续的ETL转换能够顺利进行。以下是一个简单的数据请求示例:
{
"source_system": "ERP",
"query": "SELECT * FROM stock_in WHERE status = 'pending'"
}
数据转换与写入
在完成初步的数据请求与清洗后,接下来进入关键的ETL转换阶段。我们需要将清洗后的数据转换为用友BIPAPI接口所能接收的格式,并通过API写入目标系统。下面是具体的元数据配置和实现细节。
API接口配置
根据提供的元数据配置,我们需要向/yonbip/scm/othinrecord/single/save
API端点发送POST请求。以下是完整的元数据配置:
{
"api": "/yonbip/scm/othinrecord/single/save",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "resubmitCheckKey",
"label": "保证请求的幂等性",
"type": "string",
"describe": "该值由客户端生成,并且必须是全局唯一的,长度不能超过32位。",
"value": "{stockin_no}"
},
{
"field": "id",
"label": "主表id",
"type": "string",
"value": "{src_order_id}"
},
{
"field": "needCalcLines",
"label": "表体行计算标识",
"type": "string",
"describe": "",
"value": false
},
{
...
}
]
}
数据字段映射
在实际操作中,我们需要将源系统中的字段映射到目标系统所需的字段。例如:
stockin_no
映射到resubmitCheckKey
src_order_id
映射到id
check_time
映射到vouchdate
warehouse_no
映射到warehouse
这些字段映射确保了数据的一致性和完整性。
子表处理
对于包含子表的数据,如其他入库单子表,需要特别注意其结构和字段映射。例如:
{
...
{
"field":"othInRecords",
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{"field":"qty","label":"数量,实收数量与应收数量不能同时为空","type":"string","describe":"例:10","value":"{{details_list.goods_count}}","parent":"othInRecords"},
{"field":"unit","label":"主计量单位,传入id或code","type":"string","describe":"例:KGM","value":"_findCollection find code from f9eedcc9-f1ff-31c0-9081-6aee9cf21740 where name={goods_unit}","parent":"othInRecords"},
{"field":"invExchRate","label":"换算率","type":"string","describe":"例:件(精度2)","value":"1","parent":"details"},
{"field":"subQty","label":"件数","type":"string","describe":"","value":"{{details_list.goods_count}}"}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
},
{"field":"memo",...,"value":"{{details_list.remark}}"}
]
}
实现代码示例
以下是一个基于上述配置和映射关系的实现代码示例:
import requests
import json
# 定义API端点和头信息
url = 'https://api.yonyoucloud.com/yonbip/scm/othinrecord/single/save'
headers = {'Content-Type': 'application/json'}
# 构建请求体
payload = {
'resubmitCheckKey': 'unique_key_123',
'id': 'order_id_456',
'needCalcLines': False,
'code': 'QTRK0000001',
'defines!define1': 'outer_no_789',
'org': '_findCollection find org_code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where code=warehouse_no_101112',
'accountOrg': '_findCollection find org_code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where code=warehouse_no_101112',
'vouchdate': '2023-10-01',
'bustype': '001',
'warehouse': 'ck01',
'memo': '',
'_status': 'Insert',
'othInRecords': [
{'id': '',
'rowno': 1,
...,
'_status': 'Insert'}
]
}
# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码及内容
if response.status_code == 200:
print('Data successfully written to target platform.')
else:
print(f'Failed to write data. Status code: {response.status_code}, Response: {response.text}')
通过上述步骤,我们成功地将源平台的数据进行了ETL转换,并通过用友BIPAPI接口写入了目标平台。这一过程不仅确保了数据的一致性和准确性,还大大提升了业务流程的自动化程度。