ETL流程解析:从旺店通采购退货到金蝶云采购退料的转变

  • 轻易云集成顾问-潘裕
### 旺店通·旗舰奇门数据集成到金蝶云星空:采购退货出库单与采购退料单的无缝对接 在复杂的企业资源管理环境中,如何实现不同系统间的数据高效、精准对接是技术团队常面临的一大挑战。本案例将聚焦于通过轻易云数据集成平台,实现旺店通·旗舰奇门中的采购退货出库单数据集成至金蝶云星空中的采购退料单,从而提升业务流程自动化程度及数据处理效率。 #### 任务模块解析 **1. 数据获取和接口调用** 我们首先需要从旺店通·旗舰奇门中抓取相关数据信息。使用API接口`wdt.wms.stockout.purchasereturn.querywithdetail`可以定时可靠地获取详细且分页的采购退货出库单信息。在具体实施过程中,我们应用了轻易云支持的自定义计划任务功能来定时触发该API,以确保新生成的数据不会被遗漏。 **2. 数据转换逻辑** 考虑到旺店通·旗舰奇门和金蝶云星空之间的数据结构差异,需要进行适当的数据转换。通过平台提供的可视化数据流设计工具,我们能够直观地调整字段映射关系,并配置必要的数据清洗规则,确保最终转入到金蝶系统中的数据准确无误。例如,将登记时间格式统一为ISO标准时间戳,以及把产品编码和数量按目标系统要求重新组织等。 **3. 高吞吐量的数据写入** 面对大量来自旺店通系统的数据,我司利用轻易云的平台特性,有效支撑了高吞吐量、高并发场景下向金蝶云星空批量写入操作。具体实现上,通过分段传输和异步批处理策略,在调用金蝶API `batchSave` 时,既保持了较高性能,又保障了服务稳定性。此外,还结合分页机制优化读写效率,使得整个过程更加流畅。 **4. 异常检测与重试机制** 在实际落地应用中,不可避免会遇到各种异常情况,如网络波动或远程服务不可用。这时,我们内置了一套完善的监控告警体系以及自动错误重试机制。当捕获异常后,会立即进入日志记录与通知流程,同时启动预先设定好的容错策略,确保任务完成后无需人工干预即可恢复运行状态。 **5. 实时监控与日志记录** 为了实时跟踪每个数据流动环节及其执行效果,平台提供一整套集中式监控解决方案,包括但不限于操作界面上的动态展示、详细日志分析。一旦发现任何潜在问题,可以迅速定位原因并采取相应措施,大 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用旺店通·旗舰奇门接口获取采购退货出库单数据 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockout.purchasereturn.querywithdetail`获取并加工采购退货出库单数据。 #### 接口配置与请求参数 首先,我们需要配置API接口的元数据,以确保请求参数和响应格式符合预期。以下是元数据配置的详细内容: ```json { "api": "wdt.wms.stockout.purchasereturn.querywithdetail", "method": "POST", "number": "order_no", "id": "stockout_id", "idCheck": true, "formatResponse": [ { "old": "remark", "new": "remark_new", "format": "string" } ], "request": [ { "field": "params", "label": "查询参数", "type": "object", "describe": "查询参数", "children": [ { "field": "status", "label": "出库单状态", "type": "string", "describe": """由逗号分隔的整数数组 出库单状态: 5已取消 48 未确认 50 待审核 77 拣货中,PDA拣货后 110已完成""", "value":"110", "parent":"params" }, { ... } ] }, ... ], ... } ``` #### 请求参数详解 在请求参数中,我们主要关注以下几个字段: - `status`: 出库单状态,取值为"110"表示已完成。 - `stockout_no`: 出库单号,可选。 - `out_start_time` 和 `out_end_time`: 起始和结束时间,用于限定出库时间范围。 - `warehouse_no`: 仓库编号,限普通仓库。 - `src_order_no`: 采购退货单号,可选。 - `create_start_time` 和 `create_end_time`: 创建时间范围,用于限定出库单创建时间。 - `position`: 是否按货位分组,默认不分组。 分页参数包括: - `page_size`: 每页记录数,默认值为50。 - `page_no`: 页码,从0开始。 #### 数据请求与清洗 在实际操作中,我们通过POST方法向`wdt.wms.stockout.purchasereturn.querywithdetail`接口发送请求。以下是一个示例请求体: ```json { "params": { "status": ["110"], ... // 根据需要填充其他字段 }, ... } ``` 接收到响应后,我们需要对数据进行清洗和转换。例如,将响应中的`remark`字段重命名为`remark_new`并确保其格式为字符串。这一步可以通过配置中的`formatResponse`字段实现。 #### 数据转换与写入 在清洗完数据后,我们将其转换为目标系统所需的格式,并写入到金蝶系统中的采购退料单。此过程涉及到字段映射和数据格式转换,以确保不同系统间的数据一致性和准确性。 #### 实践案例 假设我们需要获取2023年10月1日至2023年10月31日期间所有已完成的采购退货出库单,并将其写入金蝶系统。我们可以按照以下步骤进行操作: 1. 配置API元数据,设置必要的查询参数和分页信息。 2. 调用接口获取原始数据,并根据需求进行分页处理。 3. 对响应数据进行清洗和转换,将`remark`字段重命名为`remark_new`。 4. 将处理后的数据写入金蝶系统中的采购退料单模块。 通过上述步骤,我们能够高效地实现不同系统间的数据集成,确保业务流程的顺畅运行。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现旺店通采购退货出库单到金蝶云星空采购退料单的ETL转换 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。 #### 1. API接口配置 首先,我们需要配置金蝶云星空API接口。根据元数据配置,API接口信息如下: - **API名称**: batchSave - **请求方法**: POST - **验证基础资料**: 是 - **自动提交并审核**: 是 #### 2. 请求参数配置 为了确保数据能够正确地写入金蝶云星空,我们需要按照元数据配置中的字段要求,准备好请求参数。以下是各个字段及其详细配置: ##### 基本信息字段 1. **单据类型 (FBillTypeID)**: - 类型: string - 值: TLD01_SYS - 解析器: ConvertObjectParser, 参数: FNumber 2. **业务类型 (FBusinessType)**: - 类型: string - 值: CG 3. **单据编号 (FBillNo)**: - 类型: string - 值: {order_no} 4. **退料日期 (FDate)**: - 类型: string - 值: {{consign_time|datetime}} 5. **退料组织 (FStockOrgId)**: - 类型: string - 值: 100.01 - 解析器: ConvertObjectParser, 参数: FNumber 6. **采购组织 (FPurchaseOrgId)**: - 类型: string - 值: 100.01 - 解析器: ConvertObjectParser, 参数: FNumber 7. **供应商 (FSupplierID)**: - 类型: string - 值: {provider_no} - 解析器: ConvertObjectParser, 参数: FNumber 8. **备注 (FDESCRIPTION)**: - 类型: string - 值: {remark} 9. **退料方式 (FMRMODE)**: - 类型: string - 值: A 10. **平台单号 (F_PAUF_ptdh)**: - 类型: string - 值: {src_order_no} ##### 明细信息字段 1. **物料编码 (FMATERIALID)**: - 类型: string - 值:{{details_list.goods_no}} - 解析器:ConvertObjectParser, 参数:FNumber 2. **实退数量 (FRMREALQTY)**: - 类型:string - 值:{{details_list.goods_count}} 3. **仓库 (FSTOCKID)**: - 类型:string - 值:{warehouse_no} - 解析器:ConvertObjectParser, 参数:FNumber 4. **单价 (FPrice)**: ```sql _findCollection find FPRICE_F from a7ea133f-5cd4-3a58-ad4a-63b1cb74429a where FBillNo={src_order_no} FMATERIALID_Fnumber={{details_list.goods_no}} ``` 5. **含税单价 (FTAXPRICE)**: ```sql _findCollection find FAPPROVEPRICE_F from a7ea133f-5cd4-3a58-ad4a-63b1cb74429a where FBillNo={src_order_no} FMATERIALID_Fnumber={{details_list.goods_no}} ``` 6. **货主类型 (FOWNERTYPEID)**: ```json { "type": "string", "value": "BD_OwnerOrg" } ``` 7. **货主 (FOWNERID)**: ```json { "type": "string", "value": "100.01", "parser": { "name": "ConvertObjectParser", "params": "FNumber" } } ``` 8. **源单类型 (FSRCBillTypeId)**: ```json { "type": "string", "value": "PUR_MRAPP" } ``` 9. **源单编号(FSRCBillNo)**: ```json { "type":"string", "value":"{src_order_no}" } ``` 10.**库存状态(FStockStatusId)**: ```json { "type":"string", "value":"KCZT01_SYS", "parser":{ "name":"ConvertObjectParser", "params":"FNumber" } } ``` 11.FPURMRBENTRY_Link(关联关系表) ```json { "type":"array", "children":[{"field":"FPURMRBENTRY_Link_FSTableName","label":"源单表","type":"string","value":"T_PUR_MRAPPENTRY"},{"field":"FPURMRBENTRY_Link_FRuleId","label":"转换规则","type":"string","value":"PUR_MRAPP-PUR_MRB"},{"field":"FPURMRBENTRY_Link_FSBillId","label":"源单内码","type":"string","value":"_findCollection find FID from a7ea133f-5cd4-3a58-ad4a-63b1cb74429a where FBillNo={src_order_no}"},{"field":"FPURMRBENTRY_Link_FSId","label":"源单分录内码","type":"string","value":"_findCollection find FEntity_FEntryID from a7ea133f-5cd4-3a58-ad4a-63b1cb74429a where FBillNo={src_order_no} FMATERIALID_Fnumber={{details_list.goods_no}}"}] } ``` #### 3.JSON请求体示例: ```json { "FormId":“PUR_MRB”, "Operation":“batchSave”, "IsAutoSubmitAndAudit”:true, "IsVerifyBaseDataField”:true, "SubSystemId”:21, "InterationFlags”:“STK_InvCheckResult”, "Model":{ "FBillTypeID":{ “FNumber”:"TLD01_SYS" }, "FBusinessType”:"CG", "FBillNo”:"{order_no}", "FDate”:"{{consign_time|datetime}}", "FStockOrgId":{ “FNumber”:"10001" }, "FPurchaseOrgId":{ “FNumber”:"10001" }, “FSupplierID":{ “FNumber”:"{provider_no}" }, “FDESCRIPTION”:"{remark}", “FMODE”:A, “FPURMRBENTRY":[{ “FMATERIALID":{ “FNumber”:{{details_list.goods.no}} }, “FRMREALQTY”:{{details_list.goods_count}}, “FSOTCKID":{ “FNuber”:warehouse.no} }, “FPURMRBENTRY_LINK":[{ “FPURMRBENTRY_LINK_FSTableName”:T_PUR_MRAPPENTRY, “FPURMRBENTRY_LINK_RuleId”:PUR_MRAPP-PUR_MRB, “FPURMRBENTRY_LINK_FSBillId”:_findCollection find FEntity_FEntryID from a7ea133f-5cd4-3a58-ad4a-63b1cb74429a where FBillNo={src_order_no}, “FPURMRBENTRY_LINK_FSId:_findCollection find FEntity_FEntryID from a7ea133f-5cd4-3a58-ad4a-63b1cb74429a where FMATERIALID_Fnumber={{details_list.goods.no}}” }] }] } ``` #### 结论: 通过以上步骤,我们可以使用轻易云数据集成平台将旺店通的采购退货出库单数据转换为金蝶云星空所需的采购退料单格式,并成功写入目标平台。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)