从旺店通到金蝶云:赠品销售出库单数据的ETL过程

  • 轻易云集成顾问-彭萍
### 旺店通·旗舰奇门数据集成到金蝶云星空的最佳实践:23 赠品销售出库单(婵圈圈)集成方案-P-T 在复杂且庞大的电商业务中,确保各系统间的数据流动顺畅、无缝对接至关重要。本案例分享的是通过轻易云数据集成平台,将旺店通·旗舰奇门中的赠品销售出库单数据高效可靠地集成到金蝶云星空。以下是我们如何实现这一目标的一些关键技术点和方法。 首先,我们需要调用旺店通·旗舰奇门提供的专用API接口`wdt.wms.stockout.sales.querywithdetail`来抓取相关的数据。这一步骤要求我们处理分页和限流问题,以便稳定而持续地获取大量订单数据。在此过程中,为了避免遗漏或重复,我们采用定时任务调度机制来确保每个时间段内所有符合条件的新订单都被读取并持久化存储。 其次,由于两个系统之间存在一定的数据格式差异,我们需要进行精确的数据映射转换操作。在这个环节中,对各字段进行一一对应,并按照金蝶云星空所需的数据格式重新组织是一项关键任务。例如,需要将日期、金额等字段从旺店通的格式转换为适应金蝶云批量写入API `batchSave` 的格式,同时注意保留其完整的业务逻辑关系。 为了加快大量数据的高速写入,我们使用了批量处理的方法,通过一次性提交多条记录减少网络交互频率,提高效率。值得指出的是,在批量提交操作中,如果出现异常或错误,我们已经提前配置好详细的日志记录与错误重试机制,确保在最短时间内发现并解决问题,而不影响整体数据同步进程。此外,对于任何意外中断,还设有实时监控功能以快速响应和修复故障,使得整个流程更加稳健可靠。 接下来,会进一步解析具体方案,包括如何处理分页请求、结合轻易云平台特性优化调度策略以及最终在金蝶云形成完整闭环管理等详细步骤。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口获取并加工数据 在数据集成生命周期的第一步中,我们需要调用源系统的API接口获取原始数据,并进行初步的清洗和加工。本文将详细介绍如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockout.sales.querywithdetail`,并对返回的数据进行处理。 #### 接口配置与请求参数 首先,我们需要配置调用接口的元数据。根据提供的元数据配置,接口`wdt.wms.stockout.sales.querywithdetail`采用POST方法,主要用于查询销售出库单的详细信息。以下是该接口的请求参数配置: - **分页参数(pager)**: - `page_size`: 每页记录数,默认为50。 - `page_no`: 页码,默认为1。 - **业务参数(params)**: - `start_time`: 查询开始时间,默认值为当前时间前30分钟。 - `end_time`: 查询结束时间,默认值为当前时间。 - `status_type`: 出库单状态,默认值为3(按照指定的status状态字段查询)。 - `status`: 出库单状态详细,默认值为110。 - `warehouse_no`: 仓库编码。 - `stockout_no`: 出库单编号。 - `shop_nos`: 店铺编号,多个店铺编号使用英文逗号分隔,默认值为B0887。 - `src_order_no`: 销售订单号。 - `need_sn`: 是否返回sn信息。 - `position`: 是否按照货位排序。 #### 数据请求与清洗 在轻易云数据集成平台中,我们可以通过配置上述参数来发起对旺店通·旗舰奇门接口的请求。以下是一个示例请求体: ```json { "pager": { "page_size": 50, "page_no": 1 }, "params": { "start_time": "{{MINUTE_AGO_30|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "status_type": "3", "status": "110", "shop_nos": "B0887" } } ``` 在实际操作中,可以根据业务需求动态调整这些参数。例如,可以通过调整`start_time`和`end_time`来控制查询时间范围,通过修改`shop_nos`来指定不同的店铺编号。 #### 数据转换与写入 获取到原始数据后,需要对其进行初步清洗和转换,以便后续处理和存储。常见的数据清洗操作包括: - **字段映射**:将原始数据中的字段映射到目标系统所需的字段。例如,将原始数据中的`order_no`映射到目标系统中的订单编号字段。 - **格式转换**:将日期、时间等字段转换为目标系统所需的格式。例如,将UNIX时间戳转换为标准日期时间格式。 - **过滤无效数据**:根据业务规则过滤掉不符合条件的数据。例如,只保留状态为110的出库单记录。 以下是一个简单的数据转换示例: ```python def transform_data(raw_data): transformed_data = [] for record in raw_data: transformed_record = { "订单编号": record["order_no"], "出库单ID": record["stockout_id"], "店铺编号": record["shop_nos"], # 添加其他需要转换的字段 } transformed_data.append(transformed_record) return transformed_data ``` #### 异常处理与补偿机制 在实际操作过程中,不可避免地会遇到各种异常情况,如网络故障、接口超时等。为了确保数据集成过程的稳定性和可靠性,需要设计相应的异常处理和补偿机制。 轻易云平台提供了丰富的异常处理功能,例如可以通过定时任务(crontab)来定期检查并补偿遗漏的数据请求。在本案例中,可以设置如下定时任务,每天晚上23点执行一次补偿操作: ```json { "crontab": "0 23 * * *", "takeOverRequest": [ { "field": "params.start_time", "value": "_function FROM_UNIXTIME( unix_timestamp() -7200 , '%Y-%m-%d %H:%i:%s' )", "type": "datetime" }, { "field": "params.end_time", "value": "_function FROM_UNIXTIME( unix_timestamp() -3600 , '%Y-%m-%d %H:%i:%s' )", "type": "datetime" } ] } ``` 该配置表示每晚23点执行一次任务,将查询开始时间设置为当前时间前2小时,结束时间设置为当前时间前1小时,以确保遗漏的数据能够被及时补偿。 通过以上步骤,我们可以高效地调用旺店通·旗舰奇门接口获取销售出库单详细信息,并对返回的数据进行清洗、转换和存储,为后续的数据处理奠定基础。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换为金蝶云星空API接口格式并写入 在数据集成过程中,将源平台的数据转换为目标平台所需的格式是关键的一步。本文将详细探讨如何使用轻易云数据集成平台将源数据进行ETL转换,并最终通过金蝶云星空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"},"value":"{shop_no}"}, {"field":"FDeptId","label":"领料部门","type":"","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":"", "children":[ {"field":"", "children":[ {"field":"", "children":[ {"field":"", "children":[ {"field":"", "children":[ {"field":"", "children":[ { "api":"", "", "", "", "", "", "", "", "", "" } ] } ] } ] } ] } ] } ] }, { "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" }, ], ... } ``` #### 数据字段解析与映射 在上述配置中,每个字段都包含了详细的解析和映射信息。例如: - `FBillNo`(单据编号)直接从源数据中的 `order_no` 字段获取。 - `FBillTypeID`(单据类型)使用 `ConvertObjectParser` 将固定值 `QTCKD01_SYS` 转换为目标系统所需的格式。 - `FStockOrgId` 和 `FPickOrgId` 分别对应库存组织和领用组织,均使用 `ConvertObjectParser` 来解析并映射固定值。 这些字段通过不同的解析器(如 `ConvertObjectParser`)和参数进行转换,以确保符合目标系统的要求。 #### 明细信息处理 对于复杂的数据结构,如明细信息,可以通过嵌套数组来表示。在配置中,`FEntity` 字段用于描述明细信息,其中每个子字段(如 `FMaterialId`, `FQty`, 等)都有相应的解析和映射规则。例如: - `FMaterialId`(物料编码)从 `details_list.goods_no` 获取,并通过 `ConvertObjectParser` 进行解析。 - `FQty`(实发数量)直接从 `details_list.goods_count` 获取。 这种嵌套结构允许我们灵活地处理多层级的数据,并确保每个子字段都能正确映射到目标系统中。 #### 调用API接口 配置完成后,通过调用金蝶云星空的 API 接口来实现数据写入。以下是一个典型的 API 调用示例: ```json { "FormId": "STK_MisDelivery", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": true, "Operation": "Save", ... } ``` 在实际操作中,我们会使用 HTTP POST 方法将上述 JSON 数据发送到金蝶云星空的 API 接口,实现批量保存操作。 #### 总结 通过以上步骤,我们可以使用轻易云数据集成平台将源平台的数据进行ETL转换,并最终通过金蝶云星空API接口写入目标系统。这一过程充分利用了元数据配置、字段解析与映射以及API调用等技术手段,实现了高效、准确的数据集成。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)