ETL转换:实现吉客云账单数据对接金蝶付款Refund单

  • 轻易云集成顾问-吴伟
### 吉客云账单查询对接金蝶付款退款单技术案例分享 在本次系统对接任务中,我们需要将吉客云中的账单信息集成到金蝶云星空的付款和退款模块。通过调用吉客云的API `acs.billinfo.get` 获取数据,并使用金蝶云星空提供的数据写入接口 `batchSave` 实现数据同步。此方案旨在实现高效、可靠的数据传输,确保数据无遗失并及时反映财务状态。 首先,为了保证从吉客云获取的数据不漏单,我们设计了一套定时抓取机制。这个机制不仅可以定时拉取吉客云接口数据,还能够处理分页和限流问题,通过实时监控与日志记录确保每一次请求都被成功执行。此外,我们针对异常情况设立了错误重试机制,提高系统的稳定性。 其次,在批量集成至金蝶云星空过程中,一个关键挑战是处理两者间的数据格式差异。为此,我们开发了一系列自定义映射规则,将吉客云的数据结构转换为符合金蝶要求的格式。这一过程完全自动化,从而避免了人工干预带来的误差和延迟。同时,大量数据快速写入到金滴星空,也得益于我们采用的并行处理模型,这大幅提高了整体效率。 最后,考虑到对接过程中存在多种潜在风险,如网络波动及接口异常等,对每一个步骤进行了全面监控。如果发生任何异常情况,系统会立即触发报警,并启动重试策略,以确保最终所有数据成功同步至目标平台。这些措施共同保障了我们此次对接项目的顺利完成,也提升了企业财务管理工作的智能化水平。 通过以上技术细节,可以看到如何利用轻易云搭建稳定、高效且灵活应变的集成解决方案,实现跨平台、多样化环境下的数据互通互联。在下一步内容中,会详细介绍具体实现方案及代码示例,以供参考与借鉴。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口acs.billinfo.get获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据集成生命周期的第一步。本文将详细探讨如何通过调用吉客云的`acs.billinfo.get`接口获取账单信息,并对数据进行初步加工。 #### 接口调用配置 在进行接口调用之前,我们需要配置元数据。以下是针对`acs.billinfo.get`接口的元数据配置: ```json { "api": "acs.billinfo.get", "method": "Get", "number": "billAccountNo", "id": "billAccountNo", "pagination": { "pageSize": 50 }, "condition": [ [ { "field": "inAmount", "logic": "gt", "value": "0" } ] ], "idCheck": true, "request": [ { "field": "pageIndex", "label": "分页页码", "type": "string" }, { "field": "pageSize", "label": "分页页数", "type": "string", "value": "100" }, { "field": "settleAccountNameHeader", "label": "账户名", "type": "string" }, { "field": "bookTimeStart", "label": "开始时间", "type": "string", "value": "_function from_unixtime(({CURRENT_TIME}-3456000),'%Y-%m-%d %h:%i:%s')" }, { "field": "bookTimeEnd", { ... ``` #### 参数解析与设置 1. **分页参数**: - `pageIndex`: 当前页码,类型为字符串。 - `pageSize`: 每页记录数,默认值为100。 2. **时间参数**: - `bookTimeStart`: 开始时间,使用函数计算当前时间前40天的日期。 - `bookTimeEnd`: 结束时间,使用当前时间。 3. **过滤条件**: - `inAmount`: 金额大于0。 - `billType`, `auditStatus`, `checkStatus`: 固定值分别为1,表示特定账单类型、审核状态和对账状态。 4. **其他参数**: - 包括账户名、网店订单号、账务流水号、业务流水号等字段,用于进一步过滤和查询。 #### 数据请求与清洗 在完成元数据配置后,我们可以通过轻易云平台发起API请求。请求返回的数据通常是原始且未经处理的,需要进行清洗和转换。以下是一个简单的数据清洗示例: ```python import requests import json # API请求URL url = 'https://api.jikecloud.com/acs/billinfo/get' # 请求头和参数 headers = {'Content-Type': 'application/json'} params = { 'pageIndex': '1', 'pageSize': '100', 'bookTimeStart': '2023-01-01 00:00:00', 'bookTimeEnd': '2023-02-01 23:59:59' } # 发起请求 response = requests.get(url, headers=headers, params=params) data = response.json() # 数据清洗示例 cleaned_data = [] for item in data['items']: if item['inAmount'] > 0: cleaned_item = { 'billAccountNo': item['billAccountNo'], 'settleAccountNameHeader': item['settleAccountNameHeader'], 'bookTime': item['bookTime'], ... } cleaned_data.append(cleaned_item) print(json.dumps(cleaned_data, indent=4)) ``` #### 数据转换与写入 经过清洗的数据需要进一步转换,以适应目标系统(如金蝶)的格式要求。以下是一个简单的数据转换示例: ```python transformed_data = [] for item in cleaned_data: transformed_item = { '付款单号': item['billAccountNo'], '账户名称': item['settleAccountNameHeader'], '记账时间': item['bookTime'], ... } transformed_data.append(transformed_item) # 将转换后的数据写入目标系统(例如金蝶) write_to_kingdee(transformed_data) ``` 通过上述步骤,我们实现了从吉客云获取账单信息并进行初步加工,为后续的数据处理和写入打下了坚实基础。这一过程展示了轻易云平台在异构系统集成中的强大能力,尤其是在数据请求与清洗阶段的高效性和灵活性。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现吉客云账单查询对接金蝶付款退款单的ETL转换 在数据集成生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将吉客云账单查询的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在开始ETL转换之前,我们首先需要从源系统(吉客云)获取账单数据,并进行初步清洗。这一步骤确保了数据的准确性和一致性,为后续的转换和写入打下基础。 #### 数据转换与写入 1. **API接口配置** 根据提供的元数据配置,我们需要调用金蝶云星空的`batchSave` API接口,使用POST方法提交数据。以下是主要配置项: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, ... } ``` 2. **字段映射与转换** 在ETL过程中,字段映射和转换是关键步骤。我们需要将源系统的数据字段映射到目标系统所需的字段,并进行必要的格式转换。例如: - **结算组织** (`FSETTLEORGID`): 根据`settleAccountName`字段值进行条件判断,映射为对应的组织ID。 ```json { "field": "FSETTLEORGID", "label": "结算组织", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "_function CASE '{settleAccountName}' when '生和堂科技(天猫生和堂食品旗舰)支付宝' then 104 else 103 end" } ``` - **业务日期** (`FDATE`): 直接从源数据中的`bookTime_new`字段获取。 ```json { "field": "FDATE", "label": "业务日期", "type": "string", "describe": "业务日期", "value": "{bookTime_new}" } ``` 3. **表体明细处理** 金蝶付款退款单包含多个明细行,每一行都需要进行相应的字段映射和转换。例如: - **结算方式** (`FSETTLETYPEID`): 固定值映射。 ```json { "field": "FSETTLETYPEID", "label": "结算方式", "type": "string", ... "value": "JSFS04_SYS" } ``` - **应退金额** (`FREFUNDAMOUNTFOR`): 从源数据中的`details.inAmount`字段获取并汇总计算。 ```json { ... { ... {"field":"FREFUNDAMOUNTFOR","label":"表体-应退金额","type":"string","describe":"表体-应收金额","value":"{{details.inAmount}}","parent":"FRECEIVEBILLENTRY"}, ... } } ``` 4. **提交与审核** 配置完成后,通过API接口将处理后的数据提交到金蝶云星空,并自动执行提交与审核操作: ```json { ... {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"} ... } ``` #### 实际应用案例 以下是一个完整的数据请求示例,该请求将吉客云账单查询的数据经过ETL转换后,写入金蝶付款退款单: ```json { ... { ... {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号"}, {"field":"FSETTLEORGID","label":"结算组织","type":"string",...,"value":"_function CASE '{settleAccountName}' when '生和堂科技(天猫生和堂食品旗舰)支付宝' then 104 else 103 end"}, {"field":"FCURRENCYID","label":"币别","type":"string",...,"value":"PRE001"}, {"field":"FDATE","label":"业务日期","type":"string",...,"value":"{bookTime_new}"}, {"field":"FBillTypeID","label":"单据类型","type":"string",...,"value":"FKTKDLX02_SYS"}, {"field":"FPURCHASEORGID","label":"采购组织",...,"value":"_function CASE '{settleAccountName}' when '生和堂科技(天猫生和堂食品旗舰)支付宝' then 104 else 103 end"}, {"field":"FPAYUNITTYPE","label":"付款单位类型",...,"value":"BD_Customer"}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":"","mappingDirection":"","parent":"","children":[{"field":"","label":"","type":"","parser":{"name":"","params":"","parent":"","children":[{"parent":"","label":"","field":"","type":"","value":""}]}}]}}, ... } } ``` 通过上述配置,我们能够高效地将吉客云账单查询的数据转换为金蝶付款退款单所需的格式,并成功写入目标平台,实现不同系统间的数据无缝对接。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)