ETL转换:金蝶移仓单到旺店通·企业奇门数据集成详析

  • 轻易云集成顾问-何语琴
### 从金蝶云星辰V2到旺店通·企业奇门的系统集成案例分享 在现代企业的信息化管理中,数据集成的重要性不言而喻。本文将详细介绍如何通过轻易云数据集成平台,将金蝶云星辰V2的数据无缝对接至旺店通·企业奇门,并成功实现"金蝶移仓单=>旺店通其他出库单-ok"这一业务场景。在本次技术分享中,我们主要聚焦于API接口的调用与处理,包括从获取金蝶云星辰V2移仓单数据到批量写入旺店通·企业奇门。 首先,我们需要确保在整个集成过程中,数据不会出现漏单的情况。这就要求我们能够稳定可靠地抓取和处理来自金蝶云星辰V2接口(/jdy/v2/scm/inv_tfmove)的分页和限流问题。利用定时任务机制,从源头保证每一条移仓记录都能被及时、完整地捕获。 其次,为了应对大量数据写入需求,我们使用高效的数据批处理方式,将获取到的移仓单信息快速推送至旺店通·企业奇门相应接口(wdt.stockout.order.push)。在这个过程中,特别注意两者之间的数据格式差异,通过自定义映射规则进行转换,以保证目标系统能够正确解析并存储这些信息。 最后,在实际运行环境中,对接过程中的异常处理与错误重试机制尤为关键。任何一个环节出现问题,都可能导致整体流程停滞或部分订单丢失。因此,通过实时监控与日志记录,不仅可以主动发现潜在问题,还能确保当发生错误时立即采取补救措施,提高系统整体的健壮性和可靠性。 这只是整个方案实施的一部分,接下来我们将深入探讨具体实现方法及各个细节环节,希望读者能够从中汲取有益经验应用于自身项目之中。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星辰V2接口/jdy/v2/scm/inv_tfmove获取并加工数据 在轻易云数据集成平台的生命周期中,第一步是调用源系统接口以获取数据。本文将详细探讨如何通过调用金蝶云星辰V2接口 `/jdy/v2/scm/inv_tfmove` 获取移仓单数据,并进行必要的数据加工。 #### 接口调用配置 我们首先需要配置元数据,以便正确地调用金蝶云星辰V2的API。以下是元数据配置的详细信息: ```json { "api": "/jdy/v2/scm/inv_tfmove", "effect": "QUERY", "method": "GET", "number": "bill_no", "id": "id", "name": "{random}", "idCheck": true, "request": [ { "field": "bill_status", "label": "单据状态(所有:“”,已审核:“C”,未审核:“Z”)", "type": "string", "value": "C" }, { "field": "modify_end_time", "label": "修改时间-结束时间的时间戳(毫秒)", "type": "string", "value": "{CURRENT_TIME}000" }, { "field": "modify_start_time", "label": "修改时间-开始时间的时间戳(毫秒)", "type": "string", "value": "{LAST_SYNC_TIME}000" } ], "otherRequest": [ { "field": "detailAPI", "label": "detailAPI", "type": "string", "value": "/jdy/v2/scm/inv_tfmove_detail" } ], "autoFillResponse": true, "beatFlat":["material_entity"] } ``` #### 请求参数详解 1. **bill_status**: 单据状态,值为"C"表示只查询已审核的单据。 2. **modify_end_time**: 修改时间的结束时间戳,使用当前时间戳。 3. **modify_start_time**: 修改时间的开始时间戳,使用上次同步时间戳。 这些参数确保我们能够获取到最新且已审核的移仓单数据。 #### 数据请求与清洗 在发起请求后,我们会得到一个包含移仓单信息的数据集。为了确保数据质量和一致性,需要对返回的数据进行清洗和验证。以下是一些关键步骤: 1. **字段验证**: 确保每个必填字段都存在且格式正确。例如,`bill_no` 和 `id` 是必须存在且唯一的。 2. **数据转换**: 将时间戳转换为可读日期格式,以便后续处理和分析。 3. **去重处理**: 对于重复的数据记录进行去重操作,确保每条记录都是唯一的。 #### 数据转换与写入 在完成数据清洗后,需要将其转换为目标系统所需的格式,并写入到目标系统中。在本案例中,我们需要将移仓单数据转换为旺店通其他出库单的数据格式。以下是一些关键步骤: 1. **字段映射**: 将金蝶云星辰V2中的字段映射到旺店通其他出库单所需的字段。例如,将 `bill_no` 映射为 `order_no`。 2. **格式调整**: 根据目标系统要求调整数据格式,例如日期格式、数值精度等。 3. **批量写入**: 使用批量写入接口,将转换后的数据高效地写入到目标系统中。 通过以上步骤,我们可以实现从金蝶云星辰V2获取移仓单数据,并将其无缝集成到旺店通其他出库单中。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:将金蝶移仓单数据转换为旺店通·企业奇门API接口格式 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,确保数据能够被目标平台——旺店通·企业奇门API接口所接收并成功写入。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现这一过程。 #### 接口配置与元数据解析 为了实现从金蝶移仓单到旺店通其他出库单的数据转换,我们需要配置好相关API接口和元数据。以下是我们使用的元数据配置: ```json { "api": "wdt.stockout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "bill_no", "bodyName": "items", "bodySum": ["material_entity_qty"], "header": ["id", "bill_no", "material_entity_out_stock_number"], "body": ["material_entity_material_number", "material_entity_qty"] }, "request": [ {"field":"outer_no","label":"外部单号","type":"string","value":"{bill_no}-{id}"}, {"field":"warehouse_no","label":"仓库编号","type":"string","value":"{{material_entity_out_stock_number}}"}, {"field":"remark","label":"备注","type":"string","value":"金蝶移仓单对接-{bill_no}"}, {"field":"is_check","label":"是否审核","type":"string","value":"1"}, { "field":"detail_list", "label":"货品列表节点", "type":"array", "value":"items", "children":[ {"field":"spec_no","label":"商家编码","type":"string","value":"{{items.material_entity_material_number}}"}, {"field":"num","label":"出库数量","type":"string","value":"{{items.material_entity_qty}}"}, {"field":"price","label":"价格","type":"string"} ] } ], "otherRequest":[{"field":"stockout_info","label":"stockout_info","type":"string","describe":"111","value":"1"}] } ``` #### 数据请求与清洗 首先,我们从源系统(金蝶)中获取移仓单的数据。这一步已经在生命周期的第一步完成。接下来,我们需要对这些数据进行清洗和转换,以符合目标系统(旺店通·企业奇门)的要求。 #### 数据转换与写入 在ETL过程中,最关键的一步是将清洗后的数据按照目标平台的格式进行转换,并通过API接口写入。以下是具体的操作步骤: 1. **字段映射与合并**: - `operation`部分定义了如何合并和映射字段。例如,`method: merge`表示将多个记录合并为一个记录。 - `bodyName: items`指明了货品列表节点。 - `header`和`body`分别定义了表头和表体字段。 2. **请求参数配置**: - `request`部分定义了请求参数,包括外部单号、仓库编号、备注等。 - 使用占位符如`{bill_no}-{id}`来动态生成外部单号。 - `detail_list`节点下包含了货品列表的详细信息,如商家编码、出库数量等。 3. **其他请求参数**: - `otherRequest`部分可以包含一些额外的请求参数,如示例中的`stockout_info`。 #### 示例代码 以下是一个示例代码片段,展示如何利用上述元数据配置,通过轻易云平台实现从金蝶移仓单到旺店通其他出库单的数据转换与写入: ```python import requests import json # 定义API URL api_url = 'https://api.wangdian.cn/openapi2/stockout_order_push.php' # 准备请求头 headers = { 'Content-Type': 'application/json' } # 准备请求体,根据元数据配置生成 payload = { 'outer_no': f"{source_data['bill_no']}-{source_data['id']}", 'warehouse_no': source_data['material_entity_out_stock_number'], 'remark': f"金蝶移仓单对接-{source_data['bill_no']}", 'is_check': '1', 'detail_list': [ { 'spec_no': item['material_entity_material_number'], 'num': item['material_entity_qty'], 'price': '' # 假设价格为空或根据实际情况填写 } for item in source_data['items'] ], 'stockout_info': '1' } # 发起POST请求 response = requests.post(api_url, headers=headers, data=json.dumps(payload)) # 检查响应状态 if response.status_code == 200: print("Data successfully pushed to Wangdian Tong API.") else: print(f"Failed to push data. Status code: {response.status_code}, Response: {response.text}") ``` 通过上述步骤,我们成功地将金蝶移仓单的数据转换为旺店通·企业奇门API接口所需的格式,并通过POST请求写入目标系统。这一过程不仅确保了数据的一致性和完整性,还大大提升了业务处理效率。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)