ETL转换与金蝶云星空API集成详解

  • 轻易云集成顾问-陈洁琳
### 线上退换货查询-销售退货单 在电子商务运营中,处理客户的退换货请求是企业必须面对的重要环节。本文将分享一个成功的系统集成案例:如何实现旺店通·企业奇门的数据集成到金蝶云星空,以便形成线上退换货查询及销售退货单。 在该技术方案中,我们使用了`wdt.refund.query` API进行旺店通·企业奇门平台数据的获取,并通过金蝶云星空的`batchSave` API实现高效的数据写入。整个过程需要解决以下几项关键技术问题: 1. **确保数据不漏单**:定时抓取并处理旺店通·企业奇门接口返回的数据,通过可靠性机制避免任何可能发生的丢失情况。 2. **分页与限流管理**:由于旺店通API响应数据量大,必须设计分页策略,同时要注意限流设置以符合API调用频率限制。 3. **数据格式差异处理**:磨平两个系统之间的数据结构差异,这涉及自定义转换逻辑以及复杂字段映射。 4. **质量监控和异常检测**:引入实时监控和日志记录功能,当出现错误或异常状况时能即时告警并执行重试机制。 5. **批量快速写入**: 支持高吞吐量的数据操作,加速大量退款订单的信息同步至金蝶云星空,提高整体流程效率。 6. **完整生命周期管理**(简要提及):从初始配置、持续调优到最终业务上线,每个步骤都经过严密规划和测试,保证全程透明可视化可跟踪。 接下来,我们将详细介绍各个技术环节中的具体实施方法与代码示例,包括如何调用相关API、分页策略设计、异常重试机制等内容。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D8.png~tplv-syqr462i7n-qeasy.image) ### 使用旺店通·企业奇门接口wdt.refund.query进行数据集成 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何使用旺店通·企业奇门接口`wdt.refund.query`获取并加工线上退换货查询-销售退货单的数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是具体的配置细节: ```json { "api": "wdt.refund.query", "method": "POST", "number": "refund_no", "id": "refund_no", "pagination": { "pageSize": 40 }, "idCheck": true, "condition": [ [ {"field":"shop_no","logic":"neq","value":"01"}, {"field":"shop_no","logic":"neq","value":"02"}, {"field":"shop_no","logic":"neq","value":"03"}, {"field":"shop_no","logic":"neq","value":"04"}, {"field":"shop_no","logic":"neq","value":"05"}, {"field":"shop_no","logic":"neq","value":"06"}, {"field":"shop_no","logic":"neq","value":"07"}, {"field":"shop_no","logic":"neq","value":"08"}, {"field":"shop_no","logic":"neq","value":"09"}, {"field":"shop_no","logic":"neq","value":"10"}, {"field":"shop_no","logic":"neq","value":"11"}, {"field":"shop_no","logic":"neq","value":"12"}, {"field":"shop_no","logic":"neq","value":"13"}, {"field":"shop_no","logic":"neq","value":"14"}, {"field": "type", "logic": "eq", "value": "2"} ], [ {"field": "shop_no", "logic": "neq", "value": "01"}, {"field": "shop_no", "logic": "neq", "value": "02"}, {"field": "shop_no", "logic": "neq", "value": "03"}, {"field": "shop_no", "logic": "neq", "value": "04"}, {"field": "shop_no", "logic": "neq", "value": "05"}, {"field": "shop_no", "logic": "neq", "value": "06"}, {"field": "shop_no", "logic": "neq", "value": ":07}, {"field": ":08}, {"field: ":09}, {:"10}, {:"11}, {:"12}, {:"13}, {:"14}, {:"3} ] ], request: [ { field: process_status, label: 退换单处理状态, type: string, describe: 退换单处理状态 5 补款 10已取消 20待审核 30已同意 40已拒绝 50待财审 60待收货 63待推送 64推送失败 65委外待收货 69待收货(已结算)70部分到货71部分到货(已结算)80待结算90已完成, value:90 }, { field: time_type, label: 时间类型, type: string, describe:0,最后更新时间,1,结算时间。默认值0 }, { field:start_time, label:开始时间, type:string, describe:按最后修改(结算)时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss, value:{{LAST_SYNC_TIME|datetime}} }, { field:end_time, label:结束时间, type:string, describe:按最后修改时间(结算)增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss, value:{{CURRENT_TIME|datetime}} }, { field: shop no, label: 店铺编号, type: string, describe: 店铺编号 }, { field: refund no, label: Erp内退换单编号, type: string, describe: Erp内退换单编号,传该字段可以不传时间 }, { field: src refund no, label: 平台原始退换单号, type: string, describe: 平台原始退换单号,传该字段可以不传时间 }, { field trade no, label 系统订单编号, type string, describe 系统订单编号,传该字段可以不传时间 }, { field tid, label 原始单号, type string, describe 原始单号,传该字段可以不传时间 } ] } ``` #### 数据请求与清洗 在调用`wdt.refund.query`接口时,我们需要注意以下几点: 1. **请求方法**: - 使用POST方法进行数据请求。 2. **分页处理**: - 每次请求的数据条数为40条,通过分页机制确保能够完整获取所有符合条件的数据。 3. **条件过滤**: - 根据店铺编号和退换单类型进行过滤,以确保只获取特定店铺和类型的退换货数据。 - 条件示例: ```json [ {“field”: “type”, “logic”: “eq”, “value”: “2”} ] ``` 4. **增量获取**: - 利用`start_time`和`end_time`参数实现增量数据获取,从而避免重复拉取历史数据,提高效率。 #### 数据转换与写入 在成功获取到源系统的数据后,需要对其进行必要的清洗和转换,以便写入目标系统。以下是一些常见的数据清洗操作: 1. **字段映射**: - 将源系统中的字段映射到目标系统对应的字段。例如,将源系统中的`refund_no`映射为目标系统中的`return_order_id`。 2. **数据格式转换**: - 将日期格式从`yyyy-MM-dd HH:mm:ss`转换为目标系统所需的格式。 3. **异常数据处理**: - 对于缺失或异常的数据进行处理,例如填充默认值或丢弃无效记录。 通过上述步骤,我们能够高效地从旺店通·企业奇门接口中获取并加工线上退换货查询-销售退货单的数据,为后续的数据集成打下坚实基础。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现步骤和细节。 #### 1. 配置API接口 首先,我们需要配置金蝶云星空的API接口。根据元数据配置,使用`batchSave` API进行批量保存操作。该API使用`POST`方法,并且支持ID检查。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" } } ``` #### 2. 请求参数配置 在请求参数中,我们需要配置具体的字段及其对应的值。这些字段包括单据类型、单据编号、销售组织、日期、库存组织、退货客户等。以下是详细的字段配置: ```json { "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSTHD01_SYS" }, { "field": "FBillNo", "label": "单据编号", ... }, ... ] } ``` #### 3. 数据转换与解析 为了确保数据能够被目标平台正确接收,我们需要对部分字段进行解析和转换。例如,销售组织(FSaleOrgId)、库存组织(FStockOrgId)等字段需要通过特定的查询语句从源数据中提取并转换为目标格式。 ```json { ... { "field": "FSaleOrgId", "label": "销售组织", ... "value": "_findCollection find FSaleOrgId_FNumber from 9b7e7d5b-6768-3b31-9910-af21746cbc34 where FNumber={shop_no}", ... }, ... } ``` #### 4. 明细信息处理 对于明细信息(FEntity),我们需要处理多个子字段,包括物料编码(FMaterialId)、实退数量(FRealQty)、价税合计(FALLAMOUNT)等。这些字段通常以数组形式存在,需要逐一解析和赋值。 ```json { ... { "field": "FEntity", ... { ... { "field": "FMaterialId", ... "value": "{{refund_order_list.spec_no}}" }, { ... { ... { ... { ... ... ... } } } } } } } ``` #### 5. 财务信息处理 财务信息(SubHeadEntity)也需要特别处理,包括结算组织(FSettleOrgId)、第三方单据编号(FThirdBillNo)等。这些信息通常与业务逻辑密切相关,需要准确无误地映射到目标平台。 ```json { ... { ... { ... { ... ... ... ... ... ... ... ... } } } } ``` #### 6. 提交并审核 在所有字段配置完成后,我们可以将数据提交到金蝶云星空,并选择是否自动提交和审核。在本案例中,我们选择自动提交并审核。 ```json { ... { ... { ... { ... { ... { { { { { { { { { { { { { { { { { { true } } } } } } } } } } } } } } } } } } } } ] ] } ``` 通过上述步骤,我们成功地将源平台的数据经过ETL转换后写入了金蝶云星空API接口。这个过程不仅确保了数据的一致性和准确性,还大大提升了业务处理效率。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T10.png~tplv-syqr462i7n-qeasy.image)