轻易云平台ETL实施:从吉客云到金蝶云的调拨出库数据写入

  • 轻易云集成顾问-胡秀丛
### 吉客云数据集成到金蝶云星空:调拨出库红字对接分步式调入(退货)案例分享 在本次技术案例中,我们将详述如何通过轻易云平台实现吉客云的数据高效、可靠地集成到金蝶云星空系统中的“调拨出库红字对接分步式调入”业务需求。核心任务是调用吉客云接口`erp.storage.goodsdocout.v2`获取相关出库数据,并通过定制化的逻辑转换和处理,将其批量写入至金蝶云星空API `batchSave`,完成数据转移过程。 首先,为了确保大规模数据传输的效率和稳定性,采用了该平台的高吞吐量数据写入能力,使得大量来自吉客云的库存数据能够快速导入到目标系统。这不仅提升了整体的数据处理时效性,还减少了因长时间等待而可能产生的问题。 同时,在整个过程中,我们重点使用了可视化的数据流设计工具,使得每一步操作都变得直观且易于管理。例如,通过自定义的数据转换逻辑来适应两套系统之间特有的业务需求和数据结构差异。在这个环节里,特别关注解决分页与限流问题,以避免由于单次请求量过大导致接口调用失败或者影响性能。 除此之外,该方案还借助集中监控和告警系统,实现实时跟踪任务状态及性能,一旦发现异常情况,可以及时采取措施进行修复。为了进一步保障集成全过程中的数据可靠性,还引入了一系列错误重试机制,即便是在网络抖动或服务暂时不可用等情况下,也能保证最终的数据准确无误。同时,为确保整个流程不漏单,对每一条从吉客云获取并准备上传至金蝶云星空的数据进行了细致的一致性校验,以及日志记录追踪,以便日后的审核及问题排查。 在介绍具体实现步骤之前,有必要提及一下后续内容会涵盖的重要环节,包括如何处理不同系统之间的数据格式差异以及通过API资产管理功能统一查看各类接口使用情况等等。调整上述关键步骤,将极大程度提高企业的信息一致性和运营效率。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D22.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统吉客云接口erp.storage.goodsdocout.v2获取并加工数据 在轻易云数据集成平台的生命周期中,第一步是调用源系统接口获取数据,并对其进行初步加工。本文将详细探讨如何通过调用吉客云的`erp.storage.goodsdocout.v2`接口实现这一过程。 #### 接口概述 `erp.storage.goodsdocout.v2`接口主要用于查询出库单信息,支持多种出库类型的数据请求。该接口采用POST方法,返回的数据包括出库单号、创建时间、仓库编号、供应商编号等详细信息。 #### 元数据配置解析 元数据配置是调用和处理API接口的关键部分。以下是对元数据配置的详细解析: - **api**: `"erp.storage.goodsdocout.v2"` - 指定要调用的API接口。 - **effect**: `"QUERY"` - 表示这是一个查询操作。 - **method**: `"POST"` - 指定HTTP请求方法为POST。 - **number** 和 **id**: `"goodsdocNo"` - 用于唯一标识出库单的字段。 - **idCheck**: `true` - 启用ID检查,确保每次请求的数据唯一性。 #### 请求参数配置 请求参数定义了我们需要从源系统获取哪些数据,以及如何过滤这些数据: ```json "request": [ {"field":"pageIndex","label":"分页页码","type":"string"}, {"field":"pageSize","label":"分页页数","type":"string","value":"50"}, {"field":"goodsDocNo","label":"出库单号","type":"string"}, {"field":"startDate","label":"创建时间的起始时间","type":"string","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endDate","label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inouttype","label":"类型","type":"string","describe":"202调拨出库", "value": "202"}, {"field":"sourceBillNo","label":"来源单号","type":"string"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type": "string"}, {"field": "outBillNo", "label": "外部单号(全模糊匹配)", "type": "string"}, {"field": "gmtModifiedStart", "label": "主表更新时间起始", "type": "string"}, {"field": "gmtModifiedEnd", "label": "主表更新时间截至", "type": "string"}, {"field": "selelctFields", "label": "返回参数", "type": "string", "value": "goodsdocNo,inOutDate,gmtCreate,sourceBillNo,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.quantity,goodsDocDetailList"} ] ``` 其中,分页参数`pageIndex`和`pageSize`控制每次请求的数据量;`startDate`和`endDate`用于指定查询时间范围;`inouttype`固定为“202”,表示调拨出库。 #### 数据清洗与转换 在获取到原始数据后,需要进行清洗与转换,以满足业务需求: 1. **自动填充响应**:通过设置`autoFillResponse: true`, 平台会自动填充返回的数据结构。 2. **扁平化处理**:使用 `beatFlat: ["goodsDocDetailList"]`, 将嵌套结构中的商品详情列表扁平化处理,便于后续操作。 3. **条件过滤**: - `condition_bk`: 仅保留数量小于0(退货)的记录。 - `condition`: 排除仓库名称包含“VMI”的记录。 ```json "condition_bk":[[{"field": "goodsDocDetailList.quantity", "logic": "lt", "value": "0"}]], "condition":[[{"field": "goodsDocDetailList.quantity", "logic": "lt", "value": "0"},{"field": "warehouseName", "logic": "notlike", "value": "VMI"}]] ``` #### 异常处理与补救机制 为了确保数据完整性,配置了异常处理与补救机制: ```json "omissionRemedy":{ "crontab": "9 2 * * *", "takeOverRequest":[ { "label": "接管字段", "formModel":{"enable":false}, "tableModel":{"enable":false}, "physicalModel":{"enable":false}, "field": "startDate", "type": "string", "value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )" }] } ``` 该机制通过定时任务(每天凌晨2点9分)重新拉取过去三天的数据,以防止遗漏。 #### 实践案例 在实际应用中,通过上述配置,我们成功实现了从吉客云获取调拨出库红字(退货)数据,并将其清洗、转换后写入目标系统。这一过程不仅提高了数据处理效率,还确保了业务流程的准确性和可靠性。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期中的ETL转换:将数据写入金蝶云星空API接口 在数据集成过程中,ETL(Extract, Transform, Load)转换是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在进行ETL转换之前,首先需要从源系统中请求并清洗数据。这一步骤已经在生命周期的第一步完成,本文重点关注第二步,即数据转换与写入。 #### 数据转换与写入 为了实现将数据写入金蝶云星空API接口,需要配置元数据并进行相应的字段映射和转换。以下是详细的元数据配置及其解析: ##### API配置 ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, ... } ``` - `api`: 指定调用的API名称,这里为`batchSave`。 - `effect`: 指定操作效果,这里为`EXECUTE`。 - `method`: HTTP请求方法,这里为`POST`。 - `idCheck`: 是否进行ID检查,这里设置为`true`。 ##### 操作配置 ```json { "operation": { "method": "merge", "field": "goodsDocDetailList_ownerName,goodsdocNo", ... }, ... } ``` - `method`: 操作方法,这里使用的是`merge`,表示合并操作。 - `field`: 指定用于合并操作的字段,这里包括`goodsDocDetailList_ownerName`和`goodsdocNo`。 ##### 请求字段映射 以下是部分关键字段的映射和解析: ```json { "field": "FStockOrgID", "label": "调入库存组织", ... "value": "{goodsDocDetailList_ownerName}", ... }, { "field": "FOwnerTypelnldHead", ... }, { "field": "FDate", ... } ``` - `FStockOrgID`: 调入库存组织,对应源数据中的`goodsDocDetailList_ownerName`。 - `FOwnerTypelnldHead`: 调入货主类型,固定值为`BD_OwnerOrg`。 - `FDate`: 日期,对应源数据中的`inOutDate`。 ##### 明细信息配置 明细信息包含多个子字段,每个子字段都需要进行相应的映射和解析: ```json { "field": "FSTKTRSINENTRY", ... "children": [ { "field": "FMATERIALID", ... "value": "{{items.goodsDocDetailList_goodsNo}}" }, { "field": "FSrcMaterialId", ... }, { "field": "FSrcStockID", ... }, { "field": "FDeststockID", ... }, { "field": "FPlanTransferQty", ... "_function {{items.goodsDocDetailList_quantity}}*-1" }, { ... } ] } ``` - `FMATERIALID`: 对应物料编码,映射到源数据中的`goodsDocDetailList_goodsNo`。 - `FSrcMaterialId`: 调出物料,同样映射到源数据中的`goodsDocDetailList_goodsNo`。 - `FSrcStockID`: 调出仓库,通过MongoDB查询获取对应值。 - `FDeststockID`: 调入仓库,对应源数据中的`warehouseCode`。 - `FPlanTransferQty`: 计划调拨数量,通过函数计算得到负值。 ##### 提交与审核配置 ```json { ..., {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"} } ``` - `IsAutoSubmitAndAudit`: 设置为自动提交并审核,确保数据在写入后立即生效。 #### 实际应用案例 假设我们有一批调拨出库红字退货的数据,需要将其写入金蝶云星空。通过上述元数据配置,我们可以实现以下步骤: 1. **提取源数据**:从源系统中提取相关调拨出库红字退货的数据,包括物料编码、数量、仓库等信息。 2. **清洗与转换**:根据元数据配置,将提取的数据进行清洗和格式转换,使其符合金蝶云星空API接口要求的格式。 3. **写入目标平台**:通过调用金蝶云星空的API接口,将转换后的数据批量保存到目标平台,并自动提交和审核。 通过这种方式,可以高效地实现不同系统之间的数据无缝对接,提高业务处理效率和准确性。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)