ETL转换与金蝶云星空API写入——轻易云平台应用

  • 轻易云集成顾问-李国敏
### 吉客云·奇门数据集成到金蝶云星空——销售单对接(1-零售业务) 在零售业务场景中,实现吉客云·奇门数据无缝对接到金蝶云星空,是确保销售数据高效、准确流转的关键环节。本技术案例将深入探讨如何通过轻易云数据集成平台,将吉客云·奇门的销售订单批量导入至金蝶云星空,确保每一笔交易都可追溯、及时写入。 首先,通过调用吉客云·奇门的数据接口jackyun.tradenotsensitiveinfos.list.get,我们能够定时抓取最新的销售订单信息。为了保证不漏单和处理效率,我们设计了可靠的任务调度机制,并处理分页和限流问题。在这一步中,实时监控与日志记录功能发挥了重要作用,使整个过程透明化并具备可审计性。 接下来,在数据同步过程中,我们需要解决两大核心挑战:不同平台之间的数据格式差异,以及大量数据快速写入的问题。为此,我们使用了自定义的数据映射规则,以适应双方系统的字段要求。此外,通过优化轻易云平台上的并行处理能力,实现大量订单可以高效地批量导入到金蝶云星空。 最后,为了确保系统稳定运行及异常情况下的数据完整性,我们实现了一套完善的错误重试机制。当遇到写入失败或网络故障等情况时,系统会自动进行重新尝试,从而避免因临时问题导致的数据丢失。同时,对接成功后,每条记录都会经过校验以确认其正确性,这一步进一步提升了整体流程的可靠性。 以上仅是此次系统对接方案中的几项关键技术点。在之后具体实施细节部分,我们将详细描述各个模块的实现方法及对应代码示例,包括如何调用相关API接口以及注意事项等内容。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要从源系统获取数据并进行初步加工。本文将详细探讨如何通过调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`来实现这一过程。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是关键的元数据配置项: - **API**: `jackyun.tradenotsensitiveinfos.list.get` - **Method**: `POST` - **Pagination**: 每页记录数为20 - **请求字段**: - `modified_begin`: 起始时间 - `modified_end`: 结束时间 - `startModified`: 最后修改时间(起始) - `endModified`: 最后修改时间(截止) - `tradeNo`: 销售单号 - `pageSize`: 每页记录数,默认50,最大1000 - `pageIndex`: 页码,0为第1页 - `startCreated`: 创建时间(起始) - `endCreated`: 创建时间(截止) - `startAuditTime`: 审核时间(起始) - `endAuditTime`: 审核时间(截止) - `startConsignTime`: 发货时间(起始),默认值为一天前 - `endConsignTime`: 发货时间(截止),默认值为当前时间 - `tradeStatus`: 订单状态 - `tradeType`: 订单类型,默认值为1 #### 请求示例 根据上述配置,我们构建一个请求示例: ```json { "api": "jackyun.tradenotsensitiveinfos.list.get", "method": "POST", "params": { "modified_begin": "2023-10-01T00:00:00", "modified_end": "2023-10-07T23:59:59", "pageSize": "20", "pageIndex": "0", "startConsignTime": "{{DAYS_AGO_1|datetime}}", "endConsignTime": "{{CURRENT_TIME|datetime}}", "tradeType": "1" } } ``` #### 数据清洗与格式化 在获取到数据后,我们需要对其进行清洗和格式化。以下是一些关键操作: 1. **字段重命名**:将`consignTime`字段重命名为`consignTime_new`。 2. **日期格式化**:确保日期字段符合预期格式。 3. **过滤条件**:根据特定条件过滤数据,如订单状态大于等于6000且商品编号不等于A0000000120。 以下是一个示例代码片段,用于处理响应数据: ```python def process_response_data(response_data): processed_data = [] for record in response_data: # 重命名字段 record['consignTime_new'] = record.pop('consignTime', None) # 日期格式化 (假设使用某种日期库) if 'consignTime_new' in record: record['consignTime_new'] = format_date(record['consignTime_new']) # 应用过滤条件 if int(record.get('tradeStatus', 0)) >= 6000 and record.get('goodsDetail', {}).get('goodsNo') != 'A0000000120': processed_data.append(record) return processed_data def format_date(date_str): # 假设使用某种日期库进行格式化 return date_str # 实际实现略过 ``` #### 定时任务与补偿机制 为了确保数据的完整性和及时性,我们可以设置定时任务来定期调用接口,并处理遗漏的数据。以下是一个定时任务配置示例: ```json { "crontab": "30 6,1 * * *", "takeOverRequest": [ { "field": "startConsignTime", "label": "发货时间(起始)", "type": "string", "value": "{{DAYS_AGO_2|datetime}}" }, { "field": "endConsignTime", "label": "发货时间(截止)", "type": "string", "value": "{{CURRENT_TIME|datetime}}" } ] } ``` 该配置表示每天凌晨1点和早上6点各执行一次任务,查询过去两天内的发货记录。 #### 总结 通过调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`,我们能够高效地获取销售单数据,并通过一系列的数据清洗、格式化和过滤操作,使得数据更加符合业务需求。同时,通过定时任务和补偿机制,确保了数据的完整性和及时性。这一过程展示了如何利用轻易云数据集成平台实现复杂的数据集成任务。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与写入金蝶云星空API接口 在数据集成的过程中,ETL(Extract, Transform, Load)转换是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在数据请求与清洗阶段,我们已经获取并清洗了源平台的数据。接下来,我们需要将这些数据进行转换,以符合金蝶云星空API接口的要求。 #### 配置元数据 首先,我们需要配置元数据,以便轻易云数据集成平台能够正确地进行数据转换和写入操作。以下是关键的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "groupCalculate": { "headerGroup": ["shopCode", "warehouseCode", "consignTime_new"], "bodyGroup": ["goodsDetail_goodsNo", "goodsDetail_goodsDelivery_batchNo", "goodsDetail_goodsDelivery_productionDate", "goodsDetail_goodsDelivery_expirationDate", "SHTremark"], "bodyName": "details", "targetBodyName": "FEntity", "bodyMaxLine": 50, "calculate": { "goodsDetail_goodsDelivery_sendCount": "$sum", "goodsDetail_goodsDelivery_batchamount": "$sum" } }, ... } ``` #### 数据转换 在配置好元数据后,我们开始进行具体的数据转换操作。以下是一些关键字段的处理方式: 1. **单据类型 (FBillTypeID)**: ```json { "field": "FBillTypeID", "label": "单据类型", ... "value": "XSCKD01_SYS" } ``` 这里直接将单据类型设置为固定值 `XSCKD01_SYS`。 2. **日期 (FDate)**: ```json { ... "value": "{consignTime_new}" } ``` 使用 `{consignTime_new}` 动态获取日期值。 3. **销售组织 (FSaleOrgId)**: ```json { ... "_function case '{shopCode}' when '10002480' then '104' else '103' end" } ``` 根据 `shopCode` 字段动态决定销售组织的值。 4. **明细信息 (FEntity)**: 明细信息包含多个子字段,如物料编码、实发数量、批次号等。这些字段通过解析和计算来获得最终值。例如: - **物料编码 (FMaterialID)**: ```json { ... "_findCollection find FPurchaseUnitId_FNumber from ... where FNumber={{details.goodsDetail_goodsNo}}" } ``` 5. **批次号 (FLot)**: ```json { ... "{{details.goodsDetail_goodsDelivery_batchNo}}" } ``` 6. **含税单价 (FTaxPrice)**: ```json { ... "_function {{details.goodsDetail_goodsDelivery_batchamount}}/{{details.goodsDetail_goodsDelivery_sendCount}}" } ``` 这些配置确保了每个字段都能准确地映射到金蝶云星空API所需的格式。 #### 写入目标平台 完成数据转换后,下一步是通过API接口将数据写入金蝶云星空。以下是关键的API请求配置: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"}, {"field":"Operation","label":"执行的操作","type":"string","value":"Save"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"}, {"label":"允许负库存","field":"InterationFlags","type":"string","value":"STK_InvCheckResult"} } ``` 通过上述配置,我们可以确保在将数据写入金蝶云星空时,能够自动提交并审核,同时验证基础资料的有效性。 #### 实际案例应用 假设我们有一批销售单需要对接到金蝶云星空系统。我们首先从源系统获取销售单的数据,然后根据上述配置进行ETL转换,最后通过调用 `batchSave` API 将转换后的数据写入金蝶云星空。 具体步骤如下: 1. 从源系统获取销售单数据。 2. 使用轻易云平台,根据元数据配置进行ETL转换。 3. 调用 `batchSave` API,将转换后的数据发送至金蝶云星空系统。 通过这种方式,我们可以高效地实现不同系统之间的数据无缝对接,确保业务流程顺畅运行。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)