数据清洗与转换:如何将易仓数据写入金蝶云API

  • 轻易云集成顾问-姚缘
### 易仓数据集成到金蝶云星空:TF调拨单-直接调拨单(调入调拨仓) 在企业日常的库存管理与物流操作中,如何实现系统间的数据无缝对接尤为关键。本文将分享一个具体的技术案例——通过轻易云数据集成平台,将易仓的数据成功整合至金蝶云星空,具体场景是 TF 调拨单-直接调拨单(调入调拨仓)。 第一步,我们需要从易仓获取TF 调拨单的相关数据,这里使用到的是 `getTransferOrders` API接口。为了确保不漏单且能够快速抓取大量数据,我们设置了定时任务来可靠地调用该接口,并处理分页和限流问题。 其次,在数据传输过程中,不同系统之间的数据格式差异是不可忽视的问题。在实际集成中,我们实现了一套高效的数据映射机制,对从易仓取得的原始数据信息进行自定义转换,以满足金蝶云星空所需的数据结构。 第三步,通过调用金蝶云星空平台提供的 `batchSave` API 接口,实现批量、快速地将经过处理后的数据写入金蝶数据库。在这一环节中,为了保证写入过程中的稳定性和容错性,还特别设计了异常处理与错误重试机制,当出现网络闪断或其他不可预见错误时,可以自动重试写入操作。 最后,为了实时监控整个数据集成流程,并便于后续分析与排除故障,我们利用日志记录功能全程跟踪每一次API调用以及相应的响应结果,做到透明化管理。这样不仅提升了业务效率,也确保了各个环节运行状态可控。 本案例通过一系列精密配置,实现了跨系统、跨平台间的大规模批量集成需求,有效解决多样化库存管理挑战,是现代智能化供应链管理的一次有力实践。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用易仓接口getTransferOrders获取并加工数据 在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的。本文将深入探讨如何通过轻易云数据集成平台调用易仓接口`getTransferOrders`来获取调拨单数据,并进行初步的数据加工。 #### 接口概述 易仓提供的`getTransferOrders`接口用于获取调拨单信息。该接口采用POST请求方式,能够根据多种查询条件返回符合条件的调拨单数据。以下是该接口的元数据配置: ```json { "api": "getTransferOrders", "method": "POST", "number": "toCode", "id": "toCode", "idCheck": true, "request": [ {"field":"page","label":"页数","type":"string"}, {"field":"pageSize","label":"页码","type":"string"}, {"field":"status","label":"调拨单状态","type":"string","value":"4"}, {"field":"rollbackFlag","label":"退回标志","type":"string"}, {"field":"warehouseReceipt","label":"目的仓收货","type":"string"}, {"field":"warehouseId","label":"调拨仓库","type":"string"}, {"field":"targetWarehouseId","label":"目的仓库","type":"string"}, {"field":"shippingMethod","label":"运输方式","type":"string"}, {"field":"trackingNumber","label":"跟踪单号","type":"string"}, {"field":"toCode","label":"调拨单号","type":"string"}, {"field":"productSku","label":"产品SKU","type":"string"}, {"field":"productSkuLike","label":"产品SKU模糊查询","type":"string"}, {"field":"dateCreateFor","label":"创建时间开始","type": "string", "value": "_function DATE_SUB(now(),INTERVAL 5 DAY)"}, {"field": "dateCreateTo", "label": "创建时间结束", "type": "string", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "dataLastModifyFor", "label": "更新时间开始", "type": "string"}, {"field": "dataLastModifyTo", "label": "更新时间结束", "type": "string"} ] } ``` #### 请求参数解析 1. **分页参数**: - `page`:页数,类型为字符串。 - `pageSize`:每页记录数,类型为字符串。 2. **状态和标志**: - `status`:调拨单状态,固定值为"4"。 - `rollbackFlag`:退回标志,类型为字符串。 3. **仓库信息**: - `warehouseReceipt`:目的仓收货,类型为字符串。 - `warehouseId`:调拨仓库ID,类型为字符串。 - `targetWarehouseId`:目的仓库ID,类型为字符串。 4. **物流信息**: - `shippingMethod`:运输方式,类型为字符串。 - `trackingNumber`:跟踪单号,类型为字符串。 5. **产品信息**: - `toCode`:调拨单号,类型为字符串。 - `productSku`:产品SKU,类型为字符串。 - `productSkuLike`:产品SKU模糊查询,类型为字符串。 6. **时间范围**: - `dateCreateFor`:创建时间开始,默认值为当前时间前5天。 - `dateCreateTo`:创建时间结束,为当前时间。 - `dataLastModifyFor`:更新时间开始,类型为字符串。 - `dataLastModifyTo`:更新时间结束,类型为字符串。 #### 数据请求与清洗 在调用该接口时,需要构建一个包含上述参数的请求体。以下是一个示例请求体: ```json { "page": "1", "pageSize": "50", "status": "4", // 可选参数根据实际需求添加 } ``` 通过轻易云平台,我们可以方便地配置这些参数,并发送请求以获取原始数据。接收到的数据通常需要进行清洗和转换,以便后续处理和分析。 #### 数据清洗与转换 1. **字段映射与重命名**: 将原始字段映射到目标系统所需的字段名称。例如,将原始数据中的“toCode”映射到目标系统中的“transferOrderCode”。 2. **数据格式转换**: 将日期格式从源系统的格式转换为目标系统所需的格式。例如,将“2023-10-01T12:00:00Z”转换为“2023-10-01 12:00:00”。 3. **数据过滤与校验**: 根据业务规则过滤掉不符合条件的数据,并对关键字段进行校验。例如,只保留状态为“已完成”的调拨单,并确保每个调拨单都有唯一的编号(toCode)。 #### 实践案例 假设我们需要获取最近5天内所有状态为“已完成”的调拨单,并将其导入到目标系统中。我们可以通过以下步骤实现: 1. 配置请求参数: ```json { "page": "1", "pageSize": "50", "status": "4", // 添加其他必要参数 } ``` 2. 调用接口并获取数据: ```python import requests url = 'https://api.yicang.com/getTransferOrders' payload = { 'page': '1', 'pageSize': '50', 'status': '4', 'dateCreateFor': '2023-09-25', 'dateCreateTo': '2023-10-01' } response = requests.post(url, json=payload) data = response.json() ``` 3. 数据清洗与转换: ```python cleaned_data = [] for order in data['orders']: cleaned_order = { 'transferOrderCode': order['toCode'], 'createdDate': order['dateCreate'].replace('T', ' ').split('.')[0], # 添加其他必要字段 } cleaned_data.append(cleaned_order) ``` 通过上述步骤,我们成功地从易仓获取了所需的调拨单数据,并进行了初步的数据清洗和转换,为后续的数据写入和处理奠定了基础。这一过程充分体现了轻易云平台在异构系统集成中的强大能力和灵活性。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 数据集成:将源平台数据转换并写入金蝶云星空API接口 在数据集成过程中,ETL(提取、转换、加载)是关键步骤之一。本文将重点探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### API接口配置 在本案例中,我们需要将调拨单的数据通过金蝶云星空的`batchSave` API接口写入目标平台。以下是元数据配置的详细解析: - **API**: `batchSave` - **Method**: `POST` - **ID Check**: `true` - **Operation**: - `rowsKey`: `array` - `rows`: 20 - `method`: `batchArraySave` #### 请求参数配置 1. **单据编号 (FBillNo)**: - 类型: `string` - 描述: 单据编号 - 值: `{toCode}` 2. **单据类型 (FBillTypeID)**: - 类型: `string` - 描述: 单据类型 - 解析器: `ConvertObjectParser`,参数为`FNumber` - 值: `ZJDB01_SYS` 3. **业务类型 (FBizType)**: - 类型: `string` - 描述: 下拉列表 - 值: `NORMAL` 4. **调拨方向 (FTransferDirect)**: - 类型: `string` - 描述: 下拉列表 - 值: `GENERAL` 5. **调拨类型 (FTransferBizType)**: - 类型: `string` - 描述: 下拉列表 - 值: `InnerOrgTransfer` 6. **销售组织 (FSaleOrgId)**: - 类型: `string` - 描述: 组织 - 解析器: `ConvertObjectParser`,参数为`FNumber` 7. **结算组织 (FSettleOrgId)**: - 类型: `string` - 描述: 组织 - 解析器: `ConvertObjectParser`,参数为`FNumber` 8. **调出库存组织 (FStockOutOrgId)**: ```json { "field": "FStockOutOrgId", "label": "调出库存组织", "type": "string", "describe": "组织", "parser": {"name":"ConvertObjectParser","params":"FNumber"}, "value": "_findCollection find warehouseCode from de1387a4-c479-35db-9bcb-c73858fcb2b1 where warehouseId={warehouseId}", "mapping": "63688a45a23a2e0fa5271b19", "mappingDirection": "positive" } ``` 9. **调出货主类型 (FOwnerTypeOutIdHead)**: ```json { "field": "FOwnerTypeOutIdHead", "label": "调出货主类型", "type": "string", "describe": "多类别基础资料列表", "value": "BD_OwnerOrg" } ``` 10. **调出货主 (FOwnerOutIdHead)**: ```json { "field": "FOwnerOutIdHead", "label": "调出货主", "type": "string", "describe": "多类别基础资料", "parser":{"name":"ConvertObjectParser","params":"FNumber"}, "value":"_findCollection find warehouseCode from de1387a4-c479-35db-9bcb-c73858fcb2b1 where warehouseId={warehouseId}", "mapping":"63688a45a23a2e0fa5271b19", "mappingDirection":"positive" } ``` 11. **调入库存组织 (FStockOrgId)**: ```json { ... // 类似于 FStockOutOrgId 的配置 ... } ``` 12. **其他字段配置**: ```json { ... // 配置类似于上述字段,包括 FOwnerTypeIdHead, FOwnerIdHead, FSETTLECURRID, FDate, FNote 等字段。 ... } ``` #### 明细信息(FBillEntry) 明细信息包含多个子字段,每个子字段都需要进行相应的配置和解析: 1. **物料编码 (FMaterialId)**: ```json { ... // 配置类似于上述字段,包括 FMaterialId, FCMKBarCode, FQty 等字段。 ... } ``` 2. **零售条形码 (FCMKBarCode)**: 3. **调拨数量 (FQty)**: 4. **调出仓库 (FSrcStockId)**: 5. **调出仓位 (FSrcStockLocId)**: 6. **调入仓库 (FDestStockId)**: 7. **调入仓位 (FDestStockLocId)**: 8. **备注 (FNoteEntry)**: 9. **赠品标识 (FISFREE)**: #### 附加请求参数 1. 表单ID (`FormId`):必须填写金蝶的表单ID,如:`STK_TransferDirect` 2. 提交并审核 (`IsAutoSubmitAndAudit`):布尔值,默认为`false` 3. 验证基础资料 (`IsVerifyBaseDataField`):布尔值,默认为`true` 4. 执行操作 (`Operation`):默认为`Save` 通过上述配置,我们可以实现源平台数据到金蝶云星空API接口的数据转换和写入。每个字段的解析和映射都至关重要,以确保数据的准确性和一致性。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)