用友BIP数据集成到旺店通·企业奇门的技术实现方案
在本技术案例中,我们将详细探讨如何高效地将用友BIP的数据集成到旺店通·企业奇门系统,以解决YS其他出库数据对接云仓的问题。本次实施方案主要涉及以下几个关键点:确保集成过程中数据不漏单、大量数据的快速写入、定时抓取和批量处理等环节。
确保用友BIP数据不漏单
为了保证在与旺店通·企业奇门进行数据对接时,用友BIP系统中的YS其他出库记录不会遗漏,我们采用了实时监控与日志记录机制。通过调用/yonbip/scm/othoutrecord/list
API接口,能够及时获取最新的业务出库记录,并配合轻易云平台实时监控功能,实现每一条记录都被精准捕获并处理。
大量数据快速写入到旺店通·企业奇门
当从用友BIP成功获取大量YS其他出库数据后,需要高效、稳定地将其传输至旺店通·企业奇门。在这个步骤中,通过调用 wdt.vip.wms.stockinout.order.push
API接口,可以确保大批量的数据迅速且无误地写入,削减延迟和资源消耗。同时,为进一步优化性能,本方案设计了批量处理策略,每次提交指定数量的数据包,提高整体上传效率。
定时可靠的抓取用友BIP接口数据
基于任务调度器,我们设置了定期任务来自动抓取用友BIP新生成的业务出库单信息。这样不仅提升了系统自动化程度,还能减少人为干预可能带来的错误风险。此外,这种机制还能有效平衡服务器负载,避免因过于频繁请求导致API限流或分页问题发生。
处理分页与限流问题
由于API请求限制,当我们需要连续拉取大量数据信息时,不可避免会遇到分页及限流挑战。为应对此类情况,在每次调用 /yonbip/scm/othoutrecord/list
获取几十万条库存出库详情时,通过合理使用offset参数以及引入重试机制,有效规避被限流情形。同时结合缓存策略,大幅提高获取速度及响应率。
总之,本案例展示的不仅是基本流程,更包含了一系列针对实际应用场景下的问题解决方法,如异常处理与错误重试机制、自定义映射规则对接、不同格式间转换等等。这些技术细节将在本文余下章节得到详尽阐述。
调用用友BIP接口获取并加工数据的技术案例
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友BIP接口/yonbip/scm/othoutrecord/list
,并对获取的数据进行加工处理。
接口调用配置
首先,我们需要配置API调用的元数据。以下是该接口的基本配置:
{
"api": "/yonbip/scm/othoutrecord/list",
"method": "POST",
"number": "code",
"id": "othOutRecords_id",
"idCheck": true,
"formatResponse": [
{"old": "id", "new": "new_id", "format": "string"},
{"old": "warehouse", "new": "new_warehouse", "format": "string"},
{"old": "othOutRecords_id", "new": "new_othOutRecords_id", "format": "string"}
],
...
}
请求参数设置
在请求参数部分,我们需要根据业务需求设置相关字段。例如,分页参数、日期范围、仓库名称等。以下是一些关键请求参数的配置:
{
"request": [
{"field": "pageIndex", "label": "页码", "type": "string", "describe": "例:1 默认值:1", "value":"1"},
{"field": "pageSize", "label":"每页数","type":"string","describe":"例:10 默认值:10","value":"500"},
{"field":"isSum","label":"查询表头","type":"string","describe":"例:false 默认值:false"},
{"field":"code","label":"单据编码","type":"string"},
{"field":"open_vouchdate_begin","label":"开始日期","type":"string"},
{"field":"open_vouchdate_end","label":"结束日期","type":"string"},
...
]
}
数据过滤条件
为了确保获取的数据符合业务需求,可以使用过滤条件。例如,以下是一些常见的过滤条件配置:
{
"simpleVOs":[
{
"field1":{
...
{"field":"field","label":"查询字段","type":"string","parent":"params","value":"auditTime"},
{"field":"op","label":"比较符","type":"string","parent":"params","value":"egt"},
{"field":"value1","label":"值1","type":"string","describe":"","value":"{{LAST_SYNC_TIME|datetime}}"}
}
},
{
...
{"field2":{
...
{"field":"field","label":"查询字段","type":"string","parent":"params","value":"org"},
{"field":"op","label":"比较符","type":"string","parent":"params","value":"neq"},
{"field":"value1","label":"","type":"","describe":"","value":"","parent":"","value1":"","describe":"","value2":"","expr1":"","expr2":"","column":"","condition":[]}
}}
}
]
}
响应数据格式化
为了便于后续的数据处理和写入,需要对响应数据进行格式化。例如,将原始字段名转换为新的字段名,并指定数据类型:
{
...
{
"formatResponse":[
{"old": "id", "new": "new_id", "format" : "string"},
{"old" : "warehouse", "new" : "new_warehouse", "format" : "string"},
{"old" : "othOutRecords_id", "new" : "new_othOutRecords_id", "format" : "string"}
]
}
}
实际操作步骤
- 配置API调用:在轻易云平台上创建一个新的API调用任务,输入上述元数据配置。
- 设置请求参数:根据业务需求填写具体的请求参数,如页码、每页数量、日期范围等。
- 添加过滤条件:根据业务逻辑添加必要的过滤条件,以确保获取的数据准确无误。
- 格式化响应数据:设置响应数据格式化规则,将原始字段名转换为新的字段名,并指定相应的数据类型。
- 执行任务:运行API调用任务,获取并处理数据。
通过上述步骤,我们可以成功调用用友BIP接口/yonbip/scm/othoutrecord/list
,并对获取的数据进行有效的加工处理,为后续的数据转换与写入奠定基础。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程。
元数据配置解析
我们使用以下元数据配置来完成ETL转换:
{
"api": "wdt.vip.wms.stockinout.order.push",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "new_warehouse,code",
"bodyName": "details",
"bodySum": ["othOutRecords_qty"],
"header": ["new_warehouse", "omsOutWarehouse", "code", "memo", "bustype_name"],
"body": ["product_cCode", "othOutRecords_product_cCode", "othOutRecords_qty", "othOutRecords_memo"]
},
"request": [
{"field": "api_outer_no", "label": "外部单号", "type": "string", "describe": "外部单号", "value": "{code}"},
{"field": "warehouse_no", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "{omsOutWarehouse}"},
{"field": "order_type", "label": "出入类型", "type": string, describe: 可选值:1(出库);2(入库),"value":"1"},
{"field":"is_check","label":"是否审核","type":"string","describe":"是否审核","value":"1"},
{"field":"remark","label":"备注","type":"string","describe":"备注","value":"YS{bustype_name}-{memo}"},
{"field":"goods_list","label":"货品明细节点","type":"array","describe":"货品明细节点","value":"details","children":[{"field":"spec_no","label":"商家编码","type":"string","describe":"商家编码","value":"{{details.othOutRecords_product_cCode}}"},{"field":"num","label":"入库数量","type":"string","describe":"入库数量","value":"{{details.othOutRecords_qty}}"},{"field":"price","label":"原价","type":"string"},{"field":"remark","label":"备注","type:"string,"value:"{{details.othOutRecords_memo}}"}]}
],
otherRequest: [{"field:"stockin_info,"label:"stockin_info,"type:"string,"describe:"111"}]
}
数据转换与写入步骤
-
数据请求与清洗:
- 在此阶段,我们从源系统获取原始数据,并进行必要的数据清洗和预处理。这一步骤确保了后续的数据转换能够顺利进行。
-
数据转换:
- 使用元数据配置中的
operation
部分,我们将源数据字段映射到目标API所需的字段。 method
指定了合并操作,field
定义了用于合并的关键字段,bodyName
指定了子节点名称,bodySum
定义了需要汇总的字段。header
和body
分别定义了需要映射的头部和子节点字段。
- 使用元数据配置中的
-
构建请求体:
- 根据元数据配置中的
request
部分,我们构建API请求体。 - 每个字段都有明确的映射规则,例如,外部单号(api_outer_no)映射到源数据中的{code}字段,仓库编码(warehouse_no)映射到{omsOutWarehouse}字段等。
- 特别注意货品明细节点(goods_list)的构建,其中包括商家编码、入库数量、备注等信息。
- 根据元数据配置中的
-
发送请求:
- 使用HTTP POST方法,将构建好的请求体发送到旺店通·企业奇门API接口。
- 确保在发送前进行了必要的ID检查(idCheck: true),以避免重复提交或数据冲突。
-
处理响应:
- 接收到目标系统的响应后,根据响应状态和内容进行相应处理。
- 如果成功,则记录日志并更新相关状态;如果失败,则捕获错误信息并进行相应处理,如重试或报警。
示例代码
以下是一个简化的Python示例代码,用于展示如何使用上述元数据配置完成ETL转换并调用目标API:
import requests
import json
# 源数据示例
source_data = {
'code': '123456',
'omsOutWarehouse': 'WH001',
'bustype_name': '销售出库',
'memo': '订单123456',
'details': [
{'othOutRecords_product_cCode': 'P001', 'othOutRecords_qty': 10, 'othOutRecords_memo': '无'},
{'othOutRecords_product_cCode': 'P002', 'othOutRecords_qty': 5, 'othOutRecords_memo': '无'}
]
}
# 构建请求体
request_body = {
'api_outer_no': source_data['code'],
'warehouse_no': source_data['omsOutWarehouse'],
'order_type': '1',
'is_check': '1',
'remark': f"YS{source_data['bustype_name']}-{source_data['memo']}",
'goods_list': [
{
'spec_no': item['othOutRecords_product_cCode'],
'num': item['othOutRecords_qty'],
'price': '',
'remark': item['othOutRecords_memo']
} for item in source_data['details']
]
}
# 调用目标API
response = requests.post(
url='https://api.wangdian.cn/wdt/vip/wms/stockinout/order/push',
headers={'Content-Type': 'application/json'},
data=json.dumps(request_body)
)
# 处理响应
if response.status_code == 200:
print('Data successfully pushed to WDT API')
else:
print(f'Failed to push data: {response.text}')
通过上述步骤和示例代码,我们可以高效地将源平台的数据经过ETL转换后写入旺店通·企业奇门API接口,实现不同系统间的数据无缝对接。