ETL处理:从吉客云到金蝶云星空的数据集成

  • 轻易云集成顾问-吴伟
### 吉客云数据集成金蝶云星空案例分析:报废出库对接209v2 在本案例中,我们将探讨如何通过轻易云数据集成平台实现吉客云与金蝶云星空的系统对接,具体方案为“报废出库对接209v2”。本文重点分析API接口调用、数据转换逻辑、分页处理等关键技术点。 首先,本次集成任务主要涉及两个核心API接口:一个是从吉客云获取数据的`erp.storage.goodsdocout.v2`接口,另一个是向金蝶云星空写入数据的`batchSave`接口。为了确保大量数据能够高效而准确地从吉客云导入到金蝶云星空,我们采取了以下几个策略: 1. **高吞吐量的数据写入能力** 在大规模数据迁移过程中,高吞吐量的数据写入能力显得尤为重要。我们通过优化批量请求和并发处理机制,使得大量待处理的报废出库单据能够快速被提交至金蝶云星空系统。这极大提升了整体操作的时效性。 2. **定制化的数据转换逻辑** 不同系统间的数据结构和业务流程可能存在较大差异,为此我们设计了一套自定义的数据转换规则,以适应双方需求。例如,将吉客云中的字段映射到对应的金蝶云字段,并进行必要的格式调整,确保两者无缝衔接。 3. **实时监控与异常管理** 采用集中式监控和告警系统,使我们可以实时跟踪每个集成任务的执行状态。一旦发现异常(如网络问题或API限流),系统会自动触发重试机制,并记录详细日志,以便后续排查和优化。此外,通过增强型异常处理功能,即使在极端情况下,也能保障任务顺利完成,而不会漏掉任何一条记录。 4. **分页及限流控制** 针对吉客云API `erp.storage.goodsdocout.v2` 的分页限制,我们开发了一系列分段抓取策略。在实际运行中,根据返回结果动态调整每页获取数量以及请求频率,从而绕开限流节点,同时充分利用资源提高效率。 5. **安全可靠的大批量传输** 数据的大批量传输不仅需要速度,还需保证其准确性与完整性。采用事务管理及校验措施,在每次批量提交前进行预先检查,防止出现因网络闪断等原因导致部分记录遗漏的问题,实现零漏单目标。 所有这些措施相辅相成,不仅完成了“报废出库对接209v2”这一复杂任务,还为今后的类似项目提供了 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据并进行初步加工。本文将详细介绍如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocout.v2`,并对获取的数据进行处理。 #### 接口调用配置 首先,我们需要配置API接口的调用参数。根据提供的元数据配置,以下是主要的请求参数: - `pageIndex`: 分页页码,类型为字符串。 - `pageSize`: 分页页数,类型为字符串,默认值为50。 - `goodsDocNo`: 出库单号,类型为字符串。 - `gmtModifiedStart`: 修改时间的起始时间,类型为字符串。默认值使用函数`from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')`计算。 - `gmtModifiedEnd`: 修改时间的结束时间,类型为字符串。默认值使用函数`from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')`计算。 - `startDate`: 创建时间的起始时间,类型为日期时间。 - `endDate`: 创建时间的结束时间,类型为日期时间。 - `inouttype`: 出库类型,类型为字符串。对于报废出库,该值固定为209。 - `warehouseCode`: 仓库编号,类型为字符串。 - `outBillNo`: 外部单号(全模糊匹配),类型为字符串。 - `vendCode`: 供应商编号(往来单位),类型为字符串。 - `billNo`: 上游单据号(关联单号),类型为字符串。 - `userName`: 创建人名称,类型为字符串。 此外,还需要指定需要返回的字段,通过参数`selelctFields`来定义。这些字段包括但不限于:`recId`, `goodsdocNo`, `billNo`, 等等。 #### 请求示例 以下是一个请求示例,用于获取报废出库(出库类型209)的数据: ```json { "pageIndex": "1", "pageSize": "50", "goodsDocNo": "", "gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')", "gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')", "startDate": "", "endDate": "", "inouttype": "209", "warehouseCode": "", "outBillNo": "", "vendCode": "", "billNo": "", "userName": "", "selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,vendCustomerId,applyDepartId,applyDepartName,outBillNo,companyCode,deliveryNo" } ``` #### 数据处理与清洗 在获取到数据后,需要对其进行初步处理和清洗,以便后续的数据转换和写入步骤。主要包括以下几个方面: 1. **数据格式转换**:确保所有日期和时间字段格式一致。例如,将所有日期字段统一转换成ISO8601格式。 2. **缺失值处理**:对于关键字段,如果存在缺失值,需要进行填补或删除操作。例如,对于出库单号(`goodsDocNo`)为空的数据,可以选择忽略或填补默认值。 3. **字段映射**:根据业务需求,将源系统中的字段映射到目标系统中的对应字段。例如,将吉客云中的`recId`映射到目标系统中的唯一标识符。 #### 异常处理与重试机制 在实际操作中,不可避免地会遇到各种异常情况,例如网络超时、接口返回错误等。因此,需要设计一套完善的异常处理与重试机制: 1. **异常捕获**:在每次API调用时捕获可能出现的异常,并记录详细日志以便后续分析。 2. **重试策略**:对于临时性错误(如网络超时),可以设置一定次数的重试机制。例如,每次重试间隔5秒,总共重试3次。 3. **告警通知**:当出现无法自动恢复的错误时,通过邮件、短信等方式通知相关人员及时处理。 #### 定时任务与补偿机制 为了确保数据同步的及时性和完整性,可以设置定时任务定期调用API接口。同时,为了应对可能出现的数据遗漏问题,可以设计补偿机制: 1. **定时任务**:通过Crontab设置每5分钟执行一次API调用任务,以确保数据实时同步。 2. **补偿机制**:如果某次同步任务失败,可以通过补偿机制重新拉取指定时间段内的数据。例如,通过调整`gmtModifiedStart`和`gmtModifiedEnd`参数重新发起请求。 ```json { "crontab": "2 */5 * * *", "takeOverRequest": [ { "field": "gmtModifiedStart", "value": "_function from_unixtime(({CURRENT_TIME}-172800),'%Y-%m-%d %H:%i:%s')" }, { "field": "gmtModifiedEnd", "value": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')" } ] } ``` 通过以上步骤,我们可以高效地从吉客云获取报废出库的数据,并进行初步加工,为后续的数据转换与写入做好准备。这不仅提高了数据集成的效率,也确保了数据的一致性和完整性。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,最终写入目标平台——金蝶云星空API接口。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现这一过程。 #### 配置API接口 首先,我们需要配置金蝶云星空API接口的基本信息。根据元数据配置,目标API为`batchSave`,请求方法为`POST`。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 10, "method": "batchArraySave" } } ``` #### 配置请求参数 接下来,我们需要配置具体的请求参数。这些参数包括单据编号、单据类型、库存组织等。每个字段都有其特定的类型和描述,有些字段还需要进行特定的转换或解析。 例如,单据编号(FBillNo)直接取自源数据中的`goodsdocNo`字段,而单据类型(FBillTypeID)则需要通过`ConvertObjectParser`进行解析: ```json { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{goodsdocNo}" }, { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "QTCKD01_SYS" } ``` #### 日期格式化 日期字段需要进行格式化处理。例如,日期(FDate)字段需要将源数据中的日期格式化为`YYYY-MM-DD`: ```json { "field": "FDate", "label": "日期", "type": "string", "describe": "日期", "value": "_function DATE_FORMAT('{inOutDate}', '%Y-%m-%d')" } ``` #### 配置明细信息 对于明细信息(FEntity),我们需要配置多个子字段,如物料编码、实发数量、发货仓库等。这些子字段同样需要进行特定的解析和转换。例如,物料编码(FMaterialId)通过`ConvertObjectParser`解析,而实发数量(FQty)直接取自源数据中的`quantity`字段: ```json { "field": "FEntity", ... { { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)