从旺店通到金蝶云,实现ERP系统数据无缝对接

  • 轻易云集成顾问-卢剑航
### 案例分享:旺店通回写星空销售出库-物流单号 在企业运营中,订单处理和库存管理是两个关键环节。如何高效地将订单数据从电商系统集成到ERP系统,可以极大提升业务处理效率。本文聚焦于使用轻易云数据集成平台,把旺店通·企业奇门的数据流无缝对接到金蝶云星空的实际案例。 #### 系统对接背景及需求 在此次项目中,我们的主要任务是解决以下问题: 1. 如何通过调取`wdt.stockout.order.query.trade` API接口抓取旺店通·企业奇门中的销售出库订单及其物流信息。 2. 将获取的数据经过必要转换后,通过金蝶云星空的`batchSave` API接口快速写入系统,实现数据的批量导入。 3. 确保整个数据集成过程中不出现漏单,同时要处理API分页、限流等技术难题。 #### 实施方案概要 ##### 数据获取与初始过滤 首先,我们通过调用旺店通·企业奇门提供的`wdt.stockout.order.query.trade` API接口,从中抓取所有待回写的销售信息。这一步骤需要考虑到API分页策略,以防止单次请求超时或失败。此外,为提高效率,我们实现了定时可靠的数据抓取机制,每隔固定时间间隔自动拉取最新数据,并进行初步过滤和储存。 ##### 数据转换与格式匹配 由于两套系统的数据结构存在差异,需要利用自定义规则进行数据格式转换。在这一步骤中,定制化的数据映射逻辑尤为重要,它确保我们能准确且完整地将原始订单信息转化为符合金蝶云星空要求的数据格式。 ##### 高吞吐量数据写入与异常处理机制 随后,通过金蝶云星空提供的`batchSave` API接口,将整理好的数据信息批量推送至ERP系统。为了应对大规模数据传输带来的潜在性能瓶颈和错误风险,我们专门设计了一套实时监控与告警体系,不仅能够跟踪每个任务执行情况,还可以及时发现并重试因网络抖动等原因导致的问题请求,保障全流程顺畅运行。 以上实施方案只是整个实践过程的一部分,在具体操作中,还有许多细节考验着我们的专业能力。例如如何确保接口调用次数不超过限制、如何优化批量处理速度,这些都将在后续章节详细展开。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置接口的元数据。根据提供的metadata,我们可以看到该接口使用POST方法进行调用,主要参数包括订单编号(order_no)、出库单ID(stockout_id)等。分页参数也被包含在内,以确保能够处理大量数据。 ```json { "api": "wdt.stockout.order.query.trade", "method": "POST", "number": "order_no", "id": "stockout_id", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "_function from_unixtime(({CURRENT_TIME}-259200),'%Y-%m-%d %H:%i:%s')" }, { "field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "_function from_unixtime(({CURRENT_TIME}-172800),'%Y-%m-%d %H:%i:%s')" }, { "field": "status", "label": "状态", "type": "string", "describe": "" }, { "field": "src_order_no", ... ``` #### 参数设置 - **start_time 和 end_time**:这两个参数用于指定增量获取数据的时间范围。通过`from_unixtime`函数,我们可以动态生成当前时间的前72小时和前48小时作为查询区间。 - **status**:订单状态字段,用于过滤不同状态的订单,例如已取消、已审核、已发货等。 - **src_order_no 和 src_tid**:分别代表系统订单编号和原始单号,用于唯一标识订单。 - **shop_no 和 warehouse_no**:分别代表店铺编号和仓库编号,用于区分不同店铺和仓库的数据。 #### 分页处理 为了处理大规模的数据,我们需要使用分页机制。元数据中已经定义了分页大小(page_size)和页号(page_no),默认情况下每页返回100条记录。从第一页开始逐页请求,直到没有更多数据为止。 ```json { ... "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}"} } ] } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换。这一步骤通常包括以下几个方面: 1. **字段映射**:将源系统中的字段映射到目标系统中对应的字段。例如,将`src_order_no`映射到目标系统中的订单编号字段。 2. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。 3. **数据过滤**:根据业务需求过滤掉不需要的数据。例如,只保留状态为“已发货”的订单。 #### 实际案例 假设我们需要获取最近48小时内所有状态为“已发货”的订单,并将其写入目标系统。我们可以配置如下请求参数: ```json { ... { ... {"field":"start_time","value":"_function from_unixtime(({CURRENT_TIME}-172800),'%Y-%m-%d %H:%i:%s')"}, {"field":"end_time","value":"_function from_unixtime({CURRENT_TIME},'%Y-%m-%d %H:%i:%s')"}, {"field":"status","value":"95"} } } ``` 通过上述配置,我们可以确保只获取最近48小时内已发货的订单,并进行相应的数据清洗与转换,然后写入目标系统。 综上所述,通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,我们能够高效地获取并加工所需的数据,为后续的数据处理和分析奠定坚实基础。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 将源平台数据转换并写入金蝶云星空API接口的技术案例 在轻易云数据集成平台的生命周期中,数据转换与写入是至关重要的一步。本文将详细探讨如何将已经集成的源平台数据通过ETL转换,最终写入金蝶云星空API接口。我们将以一个具体的集成方案为例:从旺店通回写星空销售出库-物流单号。 #### 元数据配置解析 以下是用于将数据写入金蝶云星空的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ { "field": "FID", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "_function substring_index('{src_tids}','_',-1)" }, { "field": "FEntity", "label": "明细", "type": "array", "children": [ { "parent": "FPAYBILLENTRY", "label": "单据体", "field": "FEntryID", "type": "string", "value": "_function substring_index('{{details_list.src_oid}}','_',1)" }, { "parent": "FPAYBILLENTRY", "label": "物流单号", "field": "F_VTRK_Text5", "type": "string", "value": "{logistics_no}" } ], "value": "details_list" } ], ... } ``` #### 数据请求与清洗 在数据请求阶段,我们从旺店通获取订单信息,包括订单编号(`src_tids`)、订单明细(`details_list`)和物流单号(`logistics_no`)。这些信息将被用于后续的数据转换。 #### 数据转换 在数据转换阶段,我们需要将上述信息转换为金蝶云星空API能够接受的格式。具体步骤如下: 1. **单据编号转换**: - 使用 `_function substring_index('{src_tids}','_',-1)` 从 `src_tids` 中提取最后一部分作为 `FID`。 2. **明细处理**: - `FEntity` 字段被定义为一个数组,其中包含两个子字段:`FEntryID` 和 `F_VTRK_Text5`。 - `FEntryID`: 使用 `_function substring_index('{{details_list.src_oid}}','_',1)` 从 `details_list.src_oid` 中提取第一部分作为 `FEntryID`。 - `F_VTRK_Text5`: 直接使用 `{logistics_no}`。 #### 数据写入 完成数据转换后,我们使用以下配置将处理后的数据通过POST方法写入金蝶云星空API: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsUserModelInit","label":"是否网控","type":"bool","value":"true"}, {"field":"IsDeleteEntry","label":"是否删除分录","type":"bool","describe":"是否删除分录,布尔类,改false(非必录)","value":"false"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"}, {"label":"NeedUpDateFields","field":"NeedUpDateFields","type":"string","value":"FEntity,F_VTRK_Text5","parser":{"name":"StringToArray","params":","}}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"} } ``` 其中,关键字段解释如下: - `FormId`: 指定业务对象表单ID,这里为销售出库单 (`SAL_OUTSTOCK`)。 - `Operation`: 批量保存操作 (`BatchSave`)。 - `IsUserModelInit`: 是否启用网控。 - `IsDeleteEntry`: 是否删除分录,设置为 `false`。 - `IsVerifyBaseDataField`: 是否验证基础资料有效性,设置为 `false`。 - `NeedUpDateFields`: 指定需要更新的字段,这里包括 `FEntity` 和 `F_VTRK_Text5`。 - `IsAutoSubmitAndAudit`: 是否自动提交并审核,设置为 `true`。 通过以上配置和步骤,我们实现了从旺店通到金蝶云星空的数据无缝对接。该过程不仅确保了数据的一致性和准确性,还大大提升了业务处理效率。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)