在轻易云平台上进行ETL转换与金蝶云星空API对接的最佳实践

  • 轻易云集成顾问-潘裕
### 吉客云·奇门数据集成到金蝶云星空的技术案例分享 在本次系统对接集成案例中,重点介绍如何通过轻易云数据平台实现吉客云·奇门数据集成到金蝶云星空,具体场景是补偿退款单对接(分销)。这个方案需要解决从吉客云·奇门抓取退款单信息并高效写入到金蝶云星空的问题。 首先,为了确保退款单数据完整性,我们使用轻易云的数据质量监控功能,同时调用jackyun.refund.listrefundinfo API定时可靠地抓取吉客云·奇门接口中的退款单数据。针对可能出现的数据分页和限流问题,通过合理设定请求频率和批量获取机制,使得大量的数据能够快速有效地导入系统。 其次,在处理过程中自定义了一套数据转换逻辑,以适应吉客云·奇门与金蝶云星空不同的数据结构需求。借助可视化的数据流设计工具,我们设计了一条清晰直观的数据信道,从源头到目标端都进行了一系列有效的格式转换及映射操作。在此过程中,还利用了实时监控与日志记录机制来跟踪每一个步骤的执行情况,保证所有操作可追溯、透明度高。 为了提高整体任务的响应速度和吞吐量,在将清洗后的数据写入至金蝶云星空时,采用batchSave API进行批量保存。这不仅优化了网络资源利用,同时也增强了事务性的保障。不仅如此,为应对潜在异常情况,我们还嵌入了错误重试机制,一旦检测出处理失败,将自动重新尝试请求以最大程度避免漏单现象。 通过以上实施方案,实现了从初始获取RefundList,到最终完成向KingDee Cloud Star交付,每一环节都被精准控制,有效保证了整个补偿退款单对接流程顺畅无缝。该技术方案不仅展示出吉客云·奇门与金蝶系统之间无缝集成的能力,也为其他类似业务场景提供宝贵参考。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D18.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口jackyun.refund.listrefundinfo获取并加工数据 在数据集成的生命周期中,第一步是调用源系统接口获取数据。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口`jackyun.refund.listrefundinfo`,并对获取的数据进行初步加工。 #### 接口概述 `jackyun.refund.listrefundinfo`接口用于查询补偿退款单信息。该接口采用POST请求方式,支持分页查询,并可根据多种条件进行筛选。以下是元数据配置的详细说明: - **api**: `jackyun.refund.listrefundinfo` - **effect**: `QUERY` - **method**: `POST` - **number**: `refundNo` - **id**: `refundNo` - **name**: `refundNo` - **idCheck**: `true` #### 请求参数 请求参数用于指定查询条件和分页信息。以下是主要的请求参数及其描述: 1. **pageSize**(每页显示数据量): 每页显示的数据条数,类型为int,默认值为100。 2. **pageIndex**(当前页码): 当前查询的页码,类型为int。 3. **startTime**(开始时间): 查询开始时间,不传则默认查询一年内的数据,类型为datetime。 4. **endTime**(结束时间): 查询结束时间,不传则默认查询一年内的数据,类型为datetime。 5. **hasGetTotalRecords**(是否需要获取总记录数): 是否需要返回总记录数,类型为string,值为1表示需要总记录数。 6. **refundNoList**(补偿退款单号集合): 需要查询的补偿退款单号集合,类型为string。 7. **tradeNoList**(订单编号集合): 需要查询的订单编号集合,类型为string。 8. **auditTimeBegin**(审核开始时间): 审核开始时间,类型为datetime,默认值为上次同步时间。 9. **auditTimeEnd**(审核结束时间): 审核结束时间,类型为datetime,默认值为当前时间。 10. **payDateBegin**(支付开始时间): 支付开始时间,类型为datetime。 11. **payDateEnd**(支付结束时间): 支付结束时间,类型为datetime。 12. **refundStatusList**(补偿退款处理状态): 补偿退款处理状态,类型为string,默认值为3表示已完成状态。 13. **shopName**(销售渠道): 销售渠道名称,类型为string。 14. **reasonDesc**(退换原因): 退换原因描述,类型为string。 15. **startModified**(最后修改时间起始): 最后修改时间的起始点,类型为datetime。 16. **endModified**(最后修改时间截止): 最后修改时间的截止点,类型为datetime。 #### 条件过滤 为了确保数据准确性,我们可以设置条件过滤。例如,可以通过设置`registrant`字段不等于“系统自动”来过滤掉自动生成的数据: ```json "condition": [ [ { "field": "registrant", "logic": "neqv2", "value": "系统自动" } ] ] ``` #### 数据请求与清洗 在实际操作中,我们首先需要构建请求体,根据业务需求填充上述参数。以下是一个示例请求体: ```json { "pageSize": 100, "pageIndex": 1, "startTime": "2022-01-01T00:00:00", "endTime": "2022-12-31T23:59:59", "hasGetTotalRecords": "1", "auditTimeBegin": "{{LAST_SYNC_TIME|datetime}}", "auditTimeEnd": "{{CURRENT_TIME|datetime}}", "refundStatusList": "3" } ``` 通过轻易云平台,我们可以将这些参数配置到相应的API调用模块中,并发起HTTP POST请求以获取数据。 #### 数据转换与写入 在获取到原始数据后,需要对其进行清洗和转换,以便写入目标系统。例如,可以对日期格式进行标准化处理,对金额字段进行单位转换等。具体操作步骤如下: 1. 解析返回的数据结构,根据业务需求提取必要字段。 2. 对提取出的字段进行格式转换,如日期格式统一化、金额单位转换等。 3. 将清洗后的数据按照目标系统要求的格式重新组织,并通过相应接口写入目标系统。 以下是一个简单的数据清洗示例: ```python import json from datetime import datetime # 假设response_data是从接口返回的原始数据 response_data = ''' { "data": [ { "refundNo": "R123456789", "tradeNo": "T987654321", "auditTime": "2022-10-01T12:34:56", "amount": 1000 } ] } ''' # 解析JSON数据 data = json.loads(response_data) # 清洗和转换数据 for item in data['data']: # 转换日期格式 item['auditTime'] = datetime.strptime(item['auditTime'], '%Y-%m-%dT%H:%M:%S').strftime('%Y-%m-%d %H:%M:%S') # 转换金额单位 (假设原始单位是分,需要转换成元) item['amount'] = item['amount'] / 100 # 输出清洗后的数据 print(json.dumps(data, indent=4, ensure_ascii=False)) ``` 通过上述步骤,我们可以高效地调用吉客云·奇门接口获取补偿退款单信息,并对其进行初步加工,为后续的数据处理和分析打下坚实基础。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行补偿退款单对接金蝶云星空API接口的ETL转换 在轻易云数据集成平台中,完成数据请求与清洗后,下一步是将数据进行ETL转换,并写入目标平台——金蝶云星空API接口。以下将详细介绍如何配置和执行这一过程。 #### 配置元数据 首先,我们需要配置元数据,以确保源平台的数据能够正确转换为金蝶云星空API接口所能接受的格式。以下是关键字段的配置: 1. **单据类型 (FBillTypeID)**: - 类型: `string` - 描述: 单据类型 - 解析器: `ConvertObjectParser`,参数为 `FNumber` - 值: `XSTHD01_SYS` 2. **单据编号 (FBillNo)**: - 类型: `string` - 描述: 单据编号 - 值: `{refundNo}` 3. **销售组织 (FSaleOrgId)**: - 类型: `string` - 描述: 组织 - 解析器: `ConvertObjectParser`,参数为 `FNumber` - 值: `103` 4. **日期 (FDate)**: - 类型: `string` - 描述: 日期 - 值: `{auditTime}` 5. **库存组织 (FStockOrgId)**: - 类型: `string` - 描述: 组织 - 解析器: `ConvertObjectParser`,参数为 `FNumber` - 值: `103` 6. **退货客户 (FRetcustId)**: - 类型: `string` - 描述: 基础资料 - 解析器: `ConvertObjectParser`,参数为 `FNumber` - 值来源于MongoDB查询:`_mongoQuery 51da3dc4-b894-3ceb-9b41-91d826988c32 findField=content.channelCode where={"content.channelName":{"$eq":"{shopName}"}}` 7. **备注 (F_sht_Note)**: - 类型: `string` - 描述: 多行文本 - 值: 分销无实物退货 8. **搭赠类型 (F_ora_Assistant3)**: - 类型: `string` - 描述: 文本 - 解析器: `ConvertObjectParser`,参数为 `FNumber` - 值: SO #### 明细信息配置 对于明细信息(FEntity),我们需要配置多个子字段: 1. **物料编码 (FMaterialId)**: - 类型:`string` - 描述:基础资料 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`{{refundGoodsItems.goodsNo}}` 2. **库存单位 (FUnitID)**: - 类型:`string` - 描述:数量 - 查询方式:从集合中查找 `_findCollection find FPurchaseUnitId_FNumber from 44da707b-4d02-3e20-ad97-fdd69ff7a37d where FNumber={{refundGoodsItems.goodsNo}}` 3. **实退数量 (FRealQty)**: - 类型:`string` - 描述:数量 - 值:`{{refundGoodsItems.sellCount}}` 4. **含税单价 (FTaxPrice)**: - 类型:`string` - 描述:单价 - 函数计算值: `_function {{refundGoodsItems.shareRefundFee}}/{{refundGoodsItems.sellCount}}` 5. **税率% (FEntryTaxRate)**: – 类型:`string` – 描述:小数 – 值:13 6. **仓库 (FStockId)**: – 类型:`string` – 描述:基础资料 – 解析器:`ConvertObjectParser`, 参数为`FNumber` – 值:04DS 7. **批次号 (FLot)**: – 类型:`string` – 函数计算值: `_function DATE_FORMAT('{auditTime}', '%Y0101')` 8. **订单单号 (FOrderNo)**: – 类型:`string` – 值: `{tradeNo}` #### 财务信息配置 对于财务信息(SubHeadEntity),主要字段包括: 1. **结算组织 (FSettleOrgId)** – 类型 : string – 描述 : 组织 – 解析器 : ConvertObjectParser, 参数为 FNumber – 值 : 103 2. **第三方单据编号(FThirdBillNo)** – 类型 : string – 值 : {tradeNo} 3. **第三方单据平台单号(FThirdBillId)** – 类型 : string – 值 : {sourceTradeNo} #### API调用配置 最后,我们需要设置API调用的其他相关字段: 1. 表单ID (`FormId`): – 必须填写金蝶的表单ID,如:`PUR_PurchaseOrder`, 在此案例中使用:`SAL_RETURNSTOCK` 2. 执行操作 (`Operation`): – 保存操作 (`Save`) 3. 提交并审核 (`IsAutoSubmitAndAudit`): – 布尔值 (`true`) 4. 验证基础资料 (`IsVerifyBaseDataField`): – 布尔值 (`true`) 5. 系统模块 (`SubSystemId`): 默认仓库模块 (`21`) 通过以上详细的元数据配置和ETL转换步骤,我们可以确保源平台的数据能够准确地转换并写入到金蝶云星空系统中,从而实现不同系统间的数据无缝对接。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)