数据转换与写入:将销售单数据写入金蝶云星空API接口

  • 轻易云集成顾问-陈洁琳
### 吉客云·奇门数据集成到金蝶云星空案例分享:销售单对接(1-零售业务) 在零售业务的日常运营中,销售数据的准确、高效传输至关重要。本文重点探讨如何通过轻易云数据集成平台,实现吉客云·奇门系统与金蝶云星空之间的无缝对接。本案例关注销售单的数据从获取、处理至最终写入的一系列技术细节,并提供具体解决方案。 为了确保吉客云·奇门的数据能够不丢失地传输到金蝶云星空,我们借助了jackyun.tradenotsensitiveinfos.list.get接口进行定时可靠的数据抓取。同时,为了解决大量数据快速写入的问题,我们使用了金蝶云明星批量保存API batchSave,结合轻易云平台强大的批量处理和映射转换功能,使得两端系统在信息格式差异上的障碍被消除。 分页和限流是实际操作中的一个难点,在调用吉客云·奇门接口时,我们采用合理的分页策略,并根据实际情况设计了限流机制,以防止过多请求导致服务异常。此外,实时监控与日志记录功能帮助我们追踪每一步操作,有效地应对可能出现的问题。 针对金蝶云星空侧的数据映射需求,我们进行了深度定制化调整,从而保证各类字段特别是自定义字段在不同系统间正确匹配。而一旦发生异常或失败,为保障数据完整性及正确率,还需实现错误重试机制并动态调整相关配置参数。这些措施合力构建了一条稳健而高效的数据交互通道。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get获取并加工数据 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过轻易云数据集成平台调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`,并对获取的数据进行必要的加工处理。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到该接口使用POST方法,并且需要传递多个参数来获取销售单信息。 ```json { "api": "jackyun.tradenotsensitiveinfos.list.get", "method": "POST", "number": "tradeNo", "id": "tradeId", "pagination": { "pageSize": 20 }, "beatFlat": ["goodsDetail"], "formatResponse": [ { "old": "consignTime", "new": "consignTime_new", "format": "date" } ], "idCheck": true, ... } ``` #### 请求参数设置 请求参数包括时间范围、销售单号、分页信息等。以下是部分关键参数及其说明: - `modified_begin` 和 `modified_end`: 修改起始和结束时间,必须同时存在,时间间隔不能超过七天。 - `startConsignTime` 和 `endConsignTime`: 发货时间范围,默认值分别为上次同步时间和当前时间。 - `pageSize` 和 `pageIndex`: 分页参数,每页记录数和页码。 - `fields`: 指定需要返回的字段列表,以逗号分隔。 示例请求参数如下: ```json { "modified_begin": "2023-01-01T00:00:00", "modified_end": "2023-01-07T23:59:59", ... } ``` #### 数据清洗与转换 在获取到原始数据后,需要对数据进行清洗和转换。根据元数据配置中的`formatResponse`字段,我们需要将原始字段`consignTime`格式化为新的字段`consignTime_new`。 例如: ```json { "consignTime": "2023-01-01T12:00:00Z" } ``` 转换后: ```json { "consignTime_new": "2023-01-01" } ``` 此外,根据配置中的`beatFlat`字段,我们需要将嵌套的`goodsDetail`字段扁平化处理,以便于后续的数据处理和分析。 #### 异常处理与重试机制 为了确保数据的完整性和准确性,我们还需要设置异常处理和重试机制。例如,在请求失败时,可以根据错误类型进行不同的重试策略,如立即重试、延迟重试或放弃重试。 示例代码片段: ```python import requests from datetime import datetime, timedelta def fetch_data(): url = 'https://api.jackyun.com/tradenotsensitiveinfos/list/get' headers = {'Content-Type': 'application/json'} params = { 'modified_begin': (datetime.now() - timedelta(days=7)).isoformat(), 'modified_end': datetime.now().isoformat(), 'pageSize': 20, ... } try: response = requests.post(url, json=params, headers=headers) response.raise_for_status() data = response.json() # 数据清洗与转换 for item in data['result']: item['consignTime_new'] = item['consignTime'].split('T')[0] # 扁平化 goodsDetail if 'goodsDetail' in item: for detail in item['goodsDetail']: item.update(detail) return data except requests.exceptions.RequestException as e: print(f"Request failed: {e}") # 根据需求设置重试机制 ``` #### 数据写入与存储 在完成数据清洗与转换后,下一步是将处理后的数据写入目标系统。这通常涉及到数据库操作或通过API将数据推送到另一个系统。在此过程中,需要确保数据的一致性和完整性,并进行必要的数据验证。 例如,将清洗后的数据写入数据库: ```python import sqlite3 def save_to_db(data): conn = sqlite3.connect('sales.db') cursor = conn.cursor() for item in data['result']: cursor.execute(''' INSERT INTO sales (tradeNo, consignTime_new, ...) VALUES (?, ?, ...) ''', (item['tradeNo'], item['consignTime_new'], ...)) conn.commit() conn.close() ``` 通过以上步骤,我们可以高效地调用吉客云·奇门接口获取销售单信息,并对数据进行必要的清洗和转换,为后续的数据分析和业务决策提供可靠的数据支持。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成过程中,将源平台的数据转换为目标平台所需的格式是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将零售业务的销售单数据通过ETL转换,最终写入金蝶云星空API接口。 #### 数据请求与清洗 首先,通过轻易云数据集成平台从源系统中获取销售单数据,并进行必要的数据清洗和预处理。此过程确保了后续ETL转换步骤中的数据质量和一致性。 #### 数据转换与写入 接下来,进入数据生命周期的第二步:将已经清洗过的源数据进行ETL转换,并写入金蝶云星空API接口。以下是详细的技术实现步骤。 ##### 配置元数据 在轻易云平台上,我们需要配置元数据,以便正确映射源数据到目标API字段。以下是配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "groupCalculate": { "headerGroup": ["shopCodenew", "warehouseCode", "consignTime_new"], "bodyGroup": ["goodsDetail_goodsNo"], "bodyName": "details", "targetBodyName": "FEntity", "bodyMaxLine": 50, "calculate": { "goodsDetail_sellCount": "$sum", "goodsDetail_shareFavourableAfterFee": "$sum" } }, ... } ``` #### 字段映射与转换 在配置中,我们定义了多个字段的映射和转换规则。例如: - **FBillNo(出库单号)**: 从源系统直接映射。 - **FBillTypeID(单据类型)**: 根据`shopCodenew`字段进行条件判断,使用SQL风格的函数进行动态赋值。 - **FDate(日期)**: 映射到`consignTime_new`字段。 - **FSaleOrgId(销售组织)**: 使用MongoDB查询根据`shopCodenew`获取对应的组织ID,并通过ConvertObjectParser解析。 - **FCustomerID(客户)**: 使用字符串截取函数从`shopCodenew`字段中提取客户编号。 ```json { ... { "field": "FBillTypeID", "label": "单据类型", "type": "string", ... "value": "_function case when '{shopCodenew}'='C010009' then 'XSCKD08_SYS' else 'XSCKD07_SYS' end" }, { ... } } ``` #### 明细信息处理 对于明细信息,我们需要处理多条记录,并将其映射到目标API的数组结构中: ```json { ... { "field": "FEntity", ... "children": [ { ... { "field": "FMaterialID", ... "value":"{{details.goodsDetail_goodsNo}}" }, { ... } } ... ] } } ``` 在这里,我们使用占位符`{{details.goodsDetail_goodsNo}}`来引用明细中的物料编码。同时,对数量、单价等字段进行了相应的计算和映射。 #### 提交与审核 最后,我们设置一些额外参数以确保数据提交后能够自动审核: ```json { ... { "field":"IsAutoSubmitAndAudit", ... "value":"true" }, { ... } } ``` 这些配置确保了在数据成功写入后,能够自动完成提交和审核流程,提升了业务处理效率。 ### 总结 通过上述配置和步骤,我们成功地将零售业务的销售单数据从源系统转换为金蝶云星空API接口所需的格式,并完成了数据写入。这一过程充分利用了轻易云数据集成平台的强大功能,实现了不同系统间的数据无缝对接。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)