利用轻易云平台实现订单出库数据的高效管理与集成

  • 轻易云集成顾问-冯潇
### 20 赠品销售出库单集成方案-P-T:从旺店通·旗舰奇门到金蝶云星空的高效数据对接 在繁忙的电商业务环境中,确保各环节的数据精准流转和及时处理至关重要。本文将探讨如何通过“20 赠品销售出库单集成方案-P-T”实现旺店通·旗舰奇门与金蝶云星空系统之间无缝数据对接。本技术案例核心任务是将来自旺店通·旗舰奇门接口`wdt.wms.stockout.sales.querywithdetail`的数据快速、可靠地写入到金蝶云星空,通过批量操作提高效率,并保证全程监控与异常处理机制。 首先,在实施此种集成方案时,我们面临的主要挑战之一是确保从旺店通·旗舰奇门获取的所有订单数据不漏单,同时能够应对大规模数据写入到金蝶云星空。为了达到这一目标,我们利用轻易云提供的平台进行可靠定时抓取及分页限流管理。具体步骤包括: 1. **调用接口获取详细出库信息**: 我们使用`wdt.wms.stockout.sales.querywithdetail` API实时抓取销售出库相关详情,通过设置合理的分页参数避免请求过程中因超量导致的数据丢失。 2. **快速写入大量订单到目标系统**: 使用金蝶云星空的`batchSave` API,以高效、批量方式将获取的数据导入,提高了整体流程速度并保障了稳定性。在每个批次完成之后,对返回结果进行校验以确认成功写入。 3. **应对数据格式差异和映射问题**: 在两个系统间传输过程中,不同字段格式及定义可能导致读取错误或存储失败。因此,我么专为实际情况设计了一套自定义转换规则,将所有必要字段适配至目标格式。同时,这也意味着我们要在处理前后都能实时日志记录,追踪每一步骤,以便排查潜在问题。 4. **异常处理与重试机制**: 在遇到网络波动或服务器负载引发的问题时,实现全面异常捕获及自动重试策略显得尤为关键。从而可保证整个ETL过程不会因为短暂故障而中断,使最终交付任务更具韧性与稳定性。 5. **定制化服务满足多样需求**: 定制化映射功能使我们可以灵活匹配不同类型业务场景中的特定需求,不仅同步常规标准信息,还能根据实际添加自定义属性字段。这一特性能极大提升上下游之间的协同工作效果,为企业带来持续竞争优势。 通过上述方法 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail获取并加工数据 在数据集成生命周期的第一步中,我们需要调用源系统接口以获取原始数据,并对其进行初步加工。本文将详细探讨如何使用旺店通·旗舰奇门接口`wdt.wms.stockout.sales.querywithdetail`来实现这一过程。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,接口采用POST方法,主要参数包括分页参数和业务参数。 ```json { "api": "wdt.wms.stockout.sales.querywithdetail", "method": "POST", "number": "order_no", "id": "stockout_id", "idCheck": true, "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ { "field": "page_size", "label": "分页大小", "type": "int", "value": 50, "parent": "pager" }, { "field": "page_no", "label": "页号", "type": "int", "value": 1, "parent": "pager" } ] }, { "field": "params", ... } ], ... } ``` #### 分页参数设置 分页参数用于控制每次请求返回的数据量和页码。默认情况下,`page_size`设为50,`page_no`设为1。这些参数可以根据实际需求进行调整,以优化数据获取效率。 ```json { "field": "pager", ... } ``` #### 业务参数设置 业务参数包括开始时间、结束时间、出库单状态、仓库编码等。这些参数用于过滤和查询特定条件下的出库单信息。 ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { field: 'start_time', label: '开始时间', type: 'string', value: '{{MINUTE_AGO_30|datetime}}', parent: 'params' }, field: 'end_time', label: '结束时间', type: 'string', value: '{{CURRENT_TIME|datetime}}', parent: 'params' }, field: 'status_type', label: '出库单状态', type: 'string', describe: '出库单状态...', value: '3', parent: 'params' }, field: 'status', label: '出库单状态详细', type: 'string', describe: '传status_type=3情况下...', value: '110', parent: 'params' }, field: 'warehouse_no', label: '仓库编码', type: 'string', parent: 'params' }, field: 'stockout_no', label: '出库单编号', type: 'string', parent: 'params' }, field: 'shop_nos', label: '店铺编号', type: 'string', describe:'多个店铺编号使用英文逗号分隔...', value:'B0002', parent:'params' }, field:'src_order_no', label:'销售订单号', type:'string', describe:'系统订单号', parent:'params' }, field:'need_sn', label:'是否返回sn信息', type:'string', describe:'是否返回sn信息', parent:'params' }, field:'position', label:'是否按照货位排序', type:'string', describe:'等于0为否,不等于0为是,不填为否...', parent:'params' } } } } } } } ``` #### 条件过滤 条件过滤部分定义了多个条件组,用于进一步筛选符合特定条件的数据。例如: ```json { ..., condition_bk:[ [ {"field":"platform_id","logic":"eqv2","value":"127"}, {"field":"src_trade_no","logic":"like","value":"BCKSQD"}, {"field":"shop_no","logic":"eqv2","value":"B0002"} ], [ {"field":"platform_id","logic":"eqv2","value":"127"}, {"field":"src_trade_no","logic":"like","value":"B_CKSQD"}, {"field":"shop_no","logic":"eqv2","value":"B0002"} ] ], condition:[ [ {"field":"platform_id","logic":"eqv2","value":"127"}, {"field":"src_trade_no","logic":"like","value":"BCKSQD"}, {"field":"shop_no","logic":"eqv2","value":"B0002"} ], [ {"field":"platform_id","logic":"eqv2","value":"127"}, {"field":"src_trade_no","logic":"like","value":"B_CKSQD"}, {"field":"shop_no","logic":"eqv2","value":"B0002"} ], [ {"field":"platform_id","logic":"eqv2","value":"127"}, {"field":"shop_no","logic':'eqv2','value':'B0002'}, {'field':'src_trade_no','logic':'like','value':'CKSQ'} ] ] } ``` 这些条件组确保了我们能够精确地获取所需的数据,从而提高数据处理的效率和准确性。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换。这一步骤通常包括去除无效数据、标准化字段格式以及根据业务需求进行必要的计算和转换。例如,可以使用Python或其他编程语言编写脚本来实现这些操作。 ```python import json import requests # 设置请求URL和头部信息 url = "<API_ENDPOINT>" headers = {'Content-Type': 'application/json'} # 构建请求体 payload = json.dumps({ # 分页参数 ..., # 业务参数 ..., }) # 发起POST请求 response = requests.post(url, headers=headers, data=payload) # 检查响应状态码并处理响应数据 if response.status_code == 200: data = response.json() # 数据清洗与转换逻辑 cleaned_data = clean_and_transform(data) else: print(f"Error {response.status_code}: {response.text}") ``` 通过上述步骤,我们可以高效地调用源系统接口,获取并加工所需的数据,为后续的数据处理和分析奠定基础。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 配置元数据 首先,我们需要配置元数据,以便正确映射源数据字段到目标API接口字段。以下是我们需要配置的元数据: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKD01_SYS","mappingDirection":"positive"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"106"}, {"field":"FPickOrgId","label":"领用组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"}, {"field":"FCustId","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FDeptId","label":"领料部门","type":"","describe":"","parser":{"name":"","params":""},"value":"","mapping":"","mappingDirection":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":"","mappingDirection":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":"","mappingDirection":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":"","mappingDirection":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":"", ... ], "otherRequest":[ {"field":"", ... ] } ``` #### 数据请求与清洗 在这个阶段,我们从源系统请求原始数据,并进行必要的清洗和预处理。这一步确保了所有的数据都是准确且符合目标系统要求的。 例如,假设我们从一个订单管理系统获取了以下JSON格式的数据: ```json { "order_no": "SO123456", "consign_time": "2023-10-01", ... } ``` #### 数据转换 接下来,我们使用轻易云的数据转换功能,将这些原始数据字段映射到金蝶云星空API所需的字段。例如,将`order_no`映射到`FBillNo`,将`consign_time`映射到`FDate`。 具体的映射配置如下: ```json { "request":[ { "field": "FBillNo", "value": "{order_no}" }, { "field": "FDate", "value": "{consign_time}" } ] } ``` #### 写入目标平台 最后一步是将转换后的数据通过API接口写入金蝶云星空。我们使用配置好的元数据,通过HTTP POST请求将处理后的数据发送到目标平台。 ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { ... } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully written to Kingdee Cloud") else: print("Failed to write data:", response.text) ``` 通过上述步骤,我们实现了从源系统到金蝶云星空的无缝数据集成。每个环节都经过精心配置和验证,确保了数据的准确性和一致性。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)