ETL流程:将旺店通数据写入金蝶云星空的最佳实践

  • 轻易云集成顾问-钟家寿
### 案例分享:销售出库单从旺店通·企业奇门集成到金蝶云星空 在快速变化的业务环境中,如何高效、安全地将不同平台的数据进行无缝对接,是各大企业关注的重要问题。在本技术案例中,我们聚焦于实现旺店通·企业奇门与金蝶云星空间的销售出库单数据集成,将介绍具体实施方案和关键技术要点。 我们的目标是确保从**旺店通·企业奇门**获取到的每一笔销售出库单数据能够准确、完整地写入到**金蝶云星空**中。首先,通过调用`wdt.stockout.order.query.trade`接口定时抓取最新的出库单数据。为了确保不漏单,我们设计了可靠的数据抓取机制,包括分页处理和限流策略,这不仅有效应对了API返回结果中的分页问题,也保证了系统稳定性。 为了满足大规模数据传输需求,我们采用批量写入的方法,通过调用**金蝶云星空**的`batchSave`接口,实现大量出库单记录快速、高效地同步到目标系统。此外,对于两端系统在数据格式上的差异,我们通过自定义映射规则进行了转换,确保数据字段的一致性和正确性。 过程中,为了实时监控整个操作流程,并详细记录操作日志,以便后续排查潜在问题及优化方案执行效果。同时,在异常处理方面我们制定了一套完善的错误重试机制,以应对突发状况所导致的数据传输失败,从而提高整个集成过程中的鲁棒性和可靠性。 这一系列措施构建起一个稳健、高效的数据桥梁,将源头系统与目标应用无缝连接,为业务流程的信息化管理提供坚实保障。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用接口。以下是元数据配置的关键部分: ```json { "api": "wdt.stockout.order.query.trade", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockout_id", "name": "order_no", "idCheck": true, "request": [ {"field":"start_time","label":"开始时间","type":"datetime","describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_time","label":"结束时间","type":"datetime","describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{CURRENT_TIME|datetime}}"}, {"field":"status","label":"状态","type":"string","describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货","value":"95"}, {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"系统订单编号"}, {"field":"src_tid","label":"原始单号","type":"string","describe":"原始单号"}, {"field":"stockout_no","label":"出库单号","type":"string","describe":"出库单号"}, {"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息"}, {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"}, {"field":"is_by_modified","label":"is_by_modified","type":"string"} ], "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}"}, {"field": "FilterString", "label": "过滤条件", "type": "string"} ], "autoFillResponse": true } ``` #### 请求参数解析 1. **时间参数**: - `start_time` 和 `end_time` 用于定义数据增量同步的时间范围。`start_time` 使用上次同步时间(`{{LAST_SYNC_TIME|datetime}}`),而 `end_time` 则使用当前时间(`{{CURRENT_TIME|datetime}}`)。 2. **状态参数**: - `status` 参数设置为 `95` 表示只查询已发货的订单。 3. **分页参数**: - `page_size` 和 `page_no` 用于控制分页,每次请求返回的数据条数和当前页码。 #### 数据请求与清洗 在配置好请求参数后,通过POST方法调用接口可以获取到销售出库单的数据。以下是一个示例请求: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "status": 95, ... } ``` #### 数据转换与写入 获取到的数据需要进行初步清洗和转换,以便后续写入目标系统金蝶。常见的数据清洗操作包括: 1. **字段映射**:将源系统中的字段映射到目标系统所需的字段。例如,将 `order_no` 映射为金蝶中的订单编号。 2. **格式转换**:确保日期、金额等字段符合目标系统的格式要求。 3. **数据校验**:检查必要字段是否存在以及其值是否有效。 以下是一个简单的数据转换示例: ```python def transform_data(source_data): transformed_data = [] for record in source_data: transformed_record = { '订单编号': record['order_no'], '出库单号': record['stockout_no'], '状态': record['status'], '店铺编号': record['shop_no'], '仓库编号': record['warehouse_no'], '创建时间': record['created_at'] } transformed_data.append(transformed_record) return transformed_data ``` 通过上述步骤,我们可以确保从旺店通·企业奇门接口获取的数据经过清洗和转换后能够顺利写入金蝶系统,实现不同系统间的数据无缝对接。 以上就是通过轻易云数据集成平台调用旺店通·企业奇门接口并进行初步数据加工的详细技术案例。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现销售出库单的ETL转换与写入金蝶云星空 在数据集成过程中,将源平台的数据转换为目标平台可接受的格式是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将销售出库单从旺店通转换并写入到金蝶云星空API接口中。 #### 元数据配置解析 在进行ETL(Extract, Transform, Load)操作之前,首先需要理解元数据配置。以下是我们将使用的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_no}"}, {"field":"FCorrespondOrgId","label":"对应组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FStockOrgId","label":"发货组织","type":"string","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, ... ], "otherRequest":[ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "", "value": ""}, ... ] } ``` #### 数据请求与清洗 在此阶段,我们从旺店通获取销售出库单的数据,并进行必要的清洗和预处理。清洗后的数据将按照上述元数据配置中的字段映射关系进行转换。 #### 数据转换与写入 接下来,我们进入关键的ETL转换阶段。通过轻易云的数据集成平台,我们可以利用其强大的解析器和转换工具,将清洗后的数据转化为金蝶云星空API接口所需的格式。 ##### 配置解析器和字段映射 1. **单据类型(FBillTypeID)**:固定值为`XSCKD01_SYS`,通过`ConvertObjectParser`解析。 2. **单据编号(FBillNo)**:直接映射自源平台的`order_no`字段。 3. **日期(FDate)**:映射自源平台的`consign_time`字段。 4. **销售组织(FSaleOrgId)**:固定值为`100`,通过`ConvertObjectParser`解析。 5. **客户(FCustomerID)**:映射自源平台的`shop_no`字段,通过`ConvertObjectParser`解析。 6. **对应组织(FCorrespondOrgId)**:固定值为`100`,通过`ConvertObjectParser`解析。 7. **发货组织(FStockOrgId)**:固定值为`100`,通过`ConvertObjectParser`解析。 8. **收货人姓名(FLinkMan)**、备注(FNote)、订单来源类型(FBillLy)、旺店通备注(FWDTBZ)、订单编号(FDDH)、旺店通制单人(FZDR)、子单原始单号(FYSDH)、物流单号(FWLDH)、打印备注(FDYBZ)、客服备注(FKFBZ):这些字段直接从源平台对应字段中获取。 ##### 明细信息配置 明细信息部分是整个ETL过程中的一个重点,也是最复杂的部分。我们需要将每一条明细记录逐一映射到目标系统中: 1. **物料编码(FMaterialID)**:映射自源平台的 `details_list.spec_no`, 使用 `ConvertObjectParser`. 2. **实发数量(FRealQty)**:映射自 `details_list.goods_count`. 3. **含税单价(FTaxPrice)**:使用函数 `_function {{details_list.paid}}/{{details_list.goods_count}}`. 4. **是否赠品(FIsFree)**:使用条件表达式 `_function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END`. ##### 提交与审核 在完成所有字段的映射和转换后,我们需要将这些数据提交到金蝶云星空系统,并执行自动审核操作。以下是相关配置: ```json { "FormId": "SAL_OUTSTOCK", "Operation": "Save", "IsAutoSubmitAndAudit": true, ... } ``` #### 实际操作步骤 1. **获取源数据**:从旺店通获取销售出库单的数据。 2. **清洗与预处理**:对获取的数据进行必要的清洗和预处理,确保数据质量。 3. **字段映射与转换**:利用轻易云的数据集成工具,根据元数据配置进行字段映射和格式转换。 4. **提交与审核**:将转换后的数据通过API接口提交至金蝶云星空,并执行自动审核操作。 通过以上步骤,我们能够高效地实现销售出库单从旺店通到金蝶云星空系统的无缝对接。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)