ETL转换与数据写入:从吉客云到金蝶云星空的完整技术方案

  • 轻易云集成顾问-杨嫦
### 吉客云数据集成到金蝶云星空:调拨退回对接分步式调入(退货)技术案例 在复杂的企业数据管理中,系统间的数据集成往往是一个棘手且必须解决的问题。本案例分享了如何通过吉客云和金蝶云星空之间的API接口,实现“调拨退回对接分步式调入(退货)”的数据集成。我们将重点探讨使用轻易云平台进行元数据配置和具体实现过程中的一些技术要点。 首先,吉客云提供了erp.storage.goodsdocin.v2 API用于获取需要处理的数据。在具体实现过程中,我们运用了定时抓取机制确保可靠性,并采取批量处理方式来应对高吞吐量需求,从而保证大量数据能够高效写入金蝶云星空。这一步骤关键在于如何调用该接口并妥善处理分页及限流问题,以避免系统超载或遗漏单据。 ```python # 调用吉客云API进行分页抓取示例代码 import requests def fetch_goodsdoc_in(pagesize, page): url = "https://api.jikexiao.com/erp/storage/goodsdocin/v2" params = { 'pagesize': pagesize, 'page': page, } response = requests.get(url, params=params) return response.json() data_page_1 = fetch_goodsdoc_in(100, 1) print(data_page_1) ``` 与此同时,在向金蝶云星空写入这些 retrieved 数据时,我们采用了batchSave API,该接口支持大容量、高频次的数据写入操作,但同样也要求我们注意可能出现的格式差异与映射规则。为了确保不同系统间无缝对接,需要完成自定义数据转换逻辑,以满足特定业务需求。此外,通过设置异常处理与错误重试机制,有效提升了整体系统的鲁棒性和稳定性。 ```json // 示例JSON payload 格式转换前后: { "origin_system": "GeekCloud", "items": [ {"id": "123", "name": "Product A", ...}, ... ] } { "destination_system": "KingdeeCloud", // 对应格式化后的payload: } ``` 此外,为全程监控这一流程,集中监控和告警系统实时跟踪任务状态及性能,一旦发现异常能够及时响应并记录操作日志,这对于长期维护尤为重要。例如,利用轻易云提供的可视化设计工具,可以直观地查看整个数据流动情况,进一步保障透明度与可控性。 此篇文章仅作开端,下节会详细介绍如何逐步实施这些技术方案,包括从爬取原始数据信息 ![打通企业微信数据接口](https://pic.qeasy.cloud/D7.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用吉客云接口`erp.storage.goodsdocin.v2`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用吉客云的API接口。以下是元数据配置的关键字段及其含义: - **api**: `erp.storage.goodsdocin.v2` - **effect**: `QUERY` - **method**: `POST` - **number**: `goodsdocNo` - **id**: `goodsdocNo` - **idCheck**: `true` 请求参数配置如下: ```json [ {"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":"入库类型(100-期初库存 101-采购入库 102-调拨入库 103-盘盈入库 104-其他入库 105-销售退货 106-完工入库 107-组装拆卸入库 108-翻新入库 109-报废入库 110-残次品入库111-成本调整 112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"114"}, {"field":"warehouseId","label":"仓库ID","type":"string"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendId","label":"供应商ID(往来单位)","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field": "gmtModifiedStart", "label": "主表更新时间起始", "type": "string"}, {"field": "gmtModifiedEnd", "label": "主表更新时间截至", "type": "string"}, {"field": "selelctFields", "label": "返回参数", "type": "string", "value": "goodsdocNo,inOutDate,sourceBillNo,userName,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList"} ] ``` #### 数据请求与清洗 在请求数据时,我们需要确保请求参数的正确性和完整性。例如,分页参数`pageIndex`和`pageSize`用于控制每次请求的数据量,避免一次性拉取过多数据导致性能问题。日期参数`startDate`和`endDate`则用于限定查询范围,确保只获取到最新的数据。 此外,我们还需要对返回的数据进行清洗和过滤。例如,通过条件配置: ```json [ [{"field": "goodsDocDetailList.quantity", "logic": "gt", "value": "0"}, {"field": "warehouseName", "logic": "notlike", "value": "VMI"}] ] ``` 可以过滤掉数量为零或仓库名称包含"VMI"的数据,确保只保留有效记录。 #### 数据转换与写入 在获取并清洗完数据后,需要对其进行转换,以符合目标系统的要求。这里我们使用了字段映射,将吉客云返回的数据字段映射到目标系统所需的字段格式。例如,将返回的`goodsdocNo`, `inOutDate`, `sourceBillNo`, 等字段转换为目标系统对应的字段。 最后,将转换后的数据写入目标系统。这一步通常涉及到调用目标系统的API接口,并确保数据写入成功。轻易云平台提供了全透明可视化操作界面,可以实时监控数据流动和处理状态,确保每个环节都清晰易懂。 #### 异常处理与补偿机制 为了保证数据集成过程中的稳定性和可靠性,我们还需要设置异常处理和补偿机制。例如,通过定时任务(crontab)定期检查并补偿漏掉的数据: ```json { "crontab": "1 2 * * *", "takeOverRequest":[ { "field": "startDate", "value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )", "label": "接管字段", ... } ] } ``` 以上配置表示每隔一天检查一次,并从三天前开始重新拉取数据,以确保没有遗漏。 通过以上步骤,我们实现了从吉客云接口获取并加工数据的全过程,为后续的数据处理奠定了坚实基础。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 配置元数据 首先,我们需要配置与金蝶云星空API接口对接的元数据。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "goodsDocDetailList_ownerName,goodsdocNo", "bodyName": "items", "bodySum": ["goodsDocDetailList_quantity"], "header": ["goodsdocNo", "inOutDate", "goodsDocDetailList_ownerName", "sourceBillNo"], "body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode", "outWarehouseCode"] }, ... } ``` #### 数据请求与清洗 在进行ETL转换之前,首先需要从源系统请求数据并进行清洗。这里假设我们已经完成了这一步,并得到了清洗后的原始数据。 #### 数据转换 接下来,我们需要将原始数据转换为金蝶云星空API接口所能接受的格式。以下是具体的字段映射和转换逻辑: 1. **调入库存组织** (`FStockOrgID`): - 原始字段:`goodsDocDetailList_ownerName` - 转换逻辑:使用 `ConvertObjectParser` 将 `FNumber` 转换为目标格式。 2. **调入货主类型** (`FOwnerTypelnldHead`): - 固定值:`BD_OwnerOrg` 3. **调入货主** (`FOwnerlnldHead`): - 原始字段:`goodsDocDetailList_ownerName` - 转换逻辑:使用 `ConvertObjectParser` 将 `FNumber` 转换为目标格式。 4. **日期** (`FDate`): - 原始字段:`inOutDate` 5. **单据类型** (`FBillTypeID`): - 固定值:`FBDR01_SYS` - 转换逻辑:使用 `ConvertObjectParser` 将 `FNumber` 转换为目标格式。 6. **调拨方式** (`FTransferMode`): - 固定值:`INDIRECT` 7. **调拨方向** (`FTransferDirect`): - 固定值:`GENERAL` 8. **携带在途归属** (`FVESTONWAY`): - 固定值:`B` 9. **调拨类型** (`FTransferBizType`): - 固定值:`InnerOrgTransfer` 10. **调出货主类型** (`FOwnerTypeOutIdHead`): - 固定值:`BD_OwnerOrg` 11. **调出货主** (`FOwnerOutIdHead`, `FOwnerOutID`, `FOwnerID`, `FOwnerlnldHead`, `FOwnerlnldHead`, `FOwnerOutIdHead`, `FOwnerOutIdHead`, `FOwnerlnldHead`, `FOwnerlnldHead`, `FOwnerOutIdHead`, `FOwnerOutIdHead`, `FOwnerlnldHead`, `FOwnerlnldHead`, `FOwnerOutIdHead`, and the rest of the fields in the configuration): 对于这些字段,均采用类似的映射和转换逻辑,确保每个字段的数据都能正确地映射到金蝶云星空API所需的格式。 #### 数据写入 完成上述所有字段的映射和转换后,我们可以通过轻易云数据集成平台提供的API接口,将转换后的数据写入到金蝶云星空系统中。以下是一个示例请求: ```json { "FormId": "STK_TRANSFERIN", ... } ``` 该请求包含了所有必须的数据字段,并指定了执行操作(如保存、提交并审核等)。 #### 总结 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并写入到了金蝶云星空API接口中。这一过程充分利用了轻易云数据集成平台提供的强大功能,使得不同系统间的数据无缝对接成为可能。在实际应用中,可以根据具体需求进一步调整和优化配置,以实现更高效的数据集成和处理。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)