轻易云平台的ETL转换实践:销售出库数据集成金蝶云星空

  • 轻易云集成顾问-黄宏棵
### 销售出库同步到金蝶——旺店通·企业奇门数据集成案例 在企业运营中,实时、稳定且高效的数据同步对于业务连续性起着至关重要的作用。本文将详细介绍如何通过轻易云的数据集成平台,实现旺店通·企业奇门系统销售出库数据与金蝶云星空的无缝对接。 此案例主要针对销售出库数据的高效传输及处理,确保不漏单、不重复,并提升了整个流程的透明度和可靠性。在此次集成过程中,我们利用了多个API接口,包括从旺店通·企业奇门获取销售出库订单的 `wdt.stockout.order.query.trade` API,以及向金蝶云星空写入批量保存数据的 `batchSave` API。 为了实现这一目标,我们配置了一套定时任务来抓取旺店通接口数据并进行处理。同时,通过自定义的数据转换逻辑和可视化的数据流设计工具,使得不同系统之间的数据格式差异问题得到有效解决。此外,为应对分页和限流的问题,我们设置了相应机制,以保证接口调用过程中的稳定性和效率。 监控与告警系统在这个方案中扮演者不可或缺角色。它帮助我们实时跟踪每一个数据集成任务,并及时发现任何异常情况,通过日志记录功能为后续故障排查提供支持。此外,高吞吐量的数据写入能力则保障大量订单信息能够快速准确地传递到金蝶云星空,提高整体业务运转速度。 本次技术实践不仅展示了如何通过API实现两大系统间的信息互联,更体现了现代技术手段在复杂业务场景下带来的便捷与高效。这一成功案例为未来类似项目提供了宝贵经验,也验证了该平台在实际应用中的强大适用性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取销售出库数据,并进行初步加工,为后续的数据转换与写入做好准备。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,可以看到该接口采用POST方法进行请求,主要用于查询销售出库订单。以下是关键字段及其配置: - **开始时间(start_time)**:用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`,值为上次同步时间。 - **结束时间(end_time)**:同样用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`,值为当前时间。 - **状态(status)**:指定订单状态,包括已取消、已审核、已发货、部分打款、已完成和异常发货等状态。 - **店铺编号(shop_no)**和**仓库编号(warehouse_no)**:分别用于区分不同店铺和仓库的数据。 此外,还包括分页参数`page_size`和`page_no`,用于控制每次请求返回的数据条数和页码。 #### 请求参数构建 在实际操作中,我们需要动态构建请求参数,以确保每次请求都能准确获取所需的数据。以下是一个示例请求参数构建过程: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "status": "95,105,110,113", "shop_no": "SHOP123", "warehouse_no": "WH456", "page_size": "{PAGINATION_PAGE_SIZE}", "page_no": "{PAGINATION_START_PAGE}" } ``` 其中,`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`分别代表上次同步时间和当前时间,通过模板变量动态填充。状态字段指定了我们感兴趣的订单状态,而店铺编号和仓库编号则根据实际需求填写。 #### 数据清洗与初步加工 在成功获取到原始数据后,需要对其进行初步清洗与加工,以便后续处理。例如,我们可能需要过滤掉某些不符合条件的数据,或者对某些字段进行格式转换。以下是一个简单的清洗与加工示例: 1. **过滤无效数据**:例如,只保留发货时间在特定范围内的订单。 2. **字段转换**:将日期字符串转换为标准日期格式,以便后续处理。 ```python import datetime def clean_and_process_data(raw_data): processed_data = [] for record in raw_data: # 过滤无效数据 if 'consign_time' in record and record['consign_time'] >= '2023-02-18 00:00:00': # 字段转换 record['consign_time'] = datetime.datetime.strptime(record['consign_time'], '%Y-%m-%d %H:%M:%S') processed_data.append(record) return processed_data ``` #### 自动填充响应 轻易云平台支持自动填充响应功能,这意味着我们可以直接将处理后的数据传递给下一个环节,无需手动干预。这极大地简化了集成流程,提高了效率。 ```json { "autoFillResponse": true } ``` 通过设置`autoFillResponse`为true,可以确保每次接口调用后的响应结果自动填充到下一步处理流程中,实现无缝衔接。 #### 条件过滤 在某些情况下,我们可能需要根据特定条件过滤数据。例如,仅处理发货时间在特定范围内的订单。可以通过配置条件过滤实现: ```json { "condition": [ [ {"field": "consign_time", "logic": "egt", "value": "2023-02-18 00:00:00"}, {"field": "consign_time", "logic": "elt", "value": "2023-02-21 00:00:00"} ] ] } ``` 以上配置表示仅处理发货时间在2023年2月18日至2023年2月21日之间的订单。 通过上述步骤,我们可以高效地调用旺店通·企业奇门接口获取销售出库数据,并进行初步清洗与加工,为后续的数据转换与写入做好准备。这一过程充分利用了轻易云平台的强大功能,实现了高效、透明的数据集成。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现销售出库同步到金蝶云星空的ETL转换 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台完成这一过程。 #### API接口配置 根据提供的元数据配置,我们需要调用金蝶云星空的`batchSave` API接口,具体配置如下: - **API**: `batchSave` - **请求方法**: `POST` - **验证ID**: `true` - **请求体字段**: - `FBillTypeID`: 单据类型,固定值`XSCKD01_SYS` - `FBillNo`: 单据编号,动态值 `{order_no}` - `FDate`: 日期,动态值 `{stock_check_time}` - `FSaleOrgId`: 销售组织,固定值`102` - `FCustomerID`: 客户,动态值 `{shop_no}` - `FStockOrgId`: 发货组织,固定值`102` - `FSaleDeptID`: 销售部门,固定值`BM000003` - `FDeliveryDeptID`: 发货部门,固定值`BM000003` - `FReceiptConditionID`: 收款条件,固定值`006` - `FNote`: 备注,固定值`旺店通对接` - `F_ora_Base1`: 司机,固定值`99` - `FSalesManID`: 销售员,固定值`SC016_GW000011_1` - `F_ora_Base`: 仓库,固定值`007` #### 明细信息字段 对于明细信息字段,我们需要处理一个数组列表,其中每个元素包含以下字段: - **FMaterialID**: 物料编码,对应 `{spec_no}` - **FRealQty**: 实发数量,对应 `{goods_count}` - **FPrice**: 单价,对应 `{price}` - **FTaxPrice**: 含税单价,对应 `{price}` - **FIsFree**: 是否赠品,通过逻辑判断实现:当 `{details_list.sell_price}` 大于0时为`false`,否则为`true` - **FEntryTaxRate**: 税率,对应 `{tax_rate}` - **FStockId**: 仓库,固定值`007` - **FStockStatusID**: 库存状态,默认值`KCZT01_SYS` #### 元数据解析器 为了确保数据格式和内容符合金蝶云星空的要求,我们使用了多个解析器(Parser)来转换和验证数据。例如: - **ConvertObjectParser** - 用于转换基础资料,如客户、销售组织、仓库等。 ```json "parser": { "name": "ConvertObjectParser", "params": "FNumber" } ``` #### 操作配置 除了上述字段外,还需要配置一些操作参数: - **FormId**: 表单ID,例如:`SAL_OUTSTOCK` - **Operation**: 操作类型,例如:`Save` - **IsVerifyBaseDataField**: 是否验证所有基础资料有效性,例如:`true` - **SubSystemId**: 子系统ID,例如:默认仓库模块为`21` - **StepBySubmitAndAudit**: 是否提交并审核,例如:`true` ```json "otherRequest": [ { "field": "FormId", "label": "FormId", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "SAL_OUTSTOCK" }, { "field": "Operation", "label": "Operation", "type": "string", "value": "Save" }, { "field": "IsVerifyBaseDataField", "label": "IsVerifyBaseDataField", "type": "bool", "describe": "是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": true }, { "field": "SubSystemId", "label": "SubSystemId", "type": "string", "describe": "默认仓库模块", { value: “21” } }, { “field”: “StepBySubmitAndAudit”, “label”: “StepBySubmitAndAudit”, “type”: “string”, “value”: “true” } ] ``` #### 批量保存操作 为了提高效率,我们采用批量保存操作,每次处理20条记录: ```json "operation": { “rowsKey”: “array”, “rows”: 20, “method”: “batchArraySave” } ``` 通过上述配置,我们能够高效地将销售出库数据从源平台转换并写入到金蝶云星空中。整个过程利用轻易云数据集成平台提供的全异步、多异构系统支持,实现了不同系统间的数据无缝对接。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)