在轻易云平台实现吉客云数据转换并写入金蝶云星空

  • 轻易云集成顾问-李国敏
### 吉客云·奇门数据集成到金蝶云星空:销售单对接销售出库_类型91批采销售 在开展吉客云·奇门和金蝶云星空的系统对接项目中,我们面临着诸多技术挑战:确保数据不漏单、实现大量数据快速写入、处理分页与限流问题,以及异常处理与错误重试机制。以下是我们在“销售单对接销售出库_类型91批采销售”这个具体案例中的详细技术方案。 为了从吉客云·奇门接口中抓取必要的数据,我们首先使用了API `jackyun.tradenotsensitiveinfos.list.get`。这一接口能够定时可靠地获取交易信息,确保及时获得最新销售记录。而后,通过轻易云平台设置的数据生命周期管理与透明可视化操作界面,我们实时监控并处理了这些数据的流动状态,有效提升了业务透明度。 在获取到所需数据后,下一步的是将其快速且准确地写入到金蝶云星空。这一步通过调用金蝶提供的`batchSave` API 实现。在此过程中,为解决吉客云·奇门与金蝶两体系之间的数据格式差异问题,我们设计了定制化的数据映射规则,确保所有字段的信息准确无误地对应。同时,在执行过程中也对分页和限流进行有效处理,以规避因请求频率过高而导致的阻塞或失败。 针对可能出现的对接异常情况,从后台日志记录开始,到建立完善的错误重试机制,每一个细节都经过精密规划。例如,当某条记录由于网络波动未能成功写入时,系统会自动触发重试流程,并保留详尽的操作日志以备查证,保证任何潜在的问题都能被迅速发现和解决。 综合以上内容,本次集成任务不仅解决了各类技术难题,还显著提高了企业的大规模数据交互效率,为未来更多复杂场景下的数据集成提供了一套科学可靠的方法论。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口获取并加工数据 在轻易云数据集成平台中,调用源系统吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`是数据集成生命周期的第一步。本文将详细探讨如何通过该接口获取销售单数据,并进行初步加工处理。 #### 接口调用配置 根据元数据配置,我们需要通过POST方法调用`jackyun.tradenotsensitiveinfos.list.get`接口。以下是关键的请求参数及其配置: - **modified_begin** 和 **modified_end**:用于指定修改时间范围,必须同时存在,且时间间隔不能超过七天。 - **pageSize** 和 **pageIndex**:分页参数,默认每页记录数为200,页码从0开始。 - **tradeStatus**:订单状态,使用逻辑运算符`egt`(大于等于)过滤状态值大于等于6000的订单。 - **fields**:指定需要返回的字段列表,以逗号分隔。 以下是一个示例请求体: ```json { "modified_begin": "2023-09-01 00:00:00", "modified_end": "2023-09-07 23:59:59", "pageSize": 200, "pageIndex": 0, "tradeStatus": "6000", "fields": "tradeNo,postFee,goodsDetail.goodsNo,goodsDetail.goodsName,goodsDetail.sellCount" } ``` #### 数据清洗与初步加工 在获取到原始数据后,需要对数据进行清洗和初步加工。以下是一些常见的数据清洗操作: 1. **字段筛选与重命名**: 根据业务需求,仅保留必要字段,并对字段进行重命名以便后续处理。例如,将`goodsDetail.goodsNo`重命名为`商品编号`。 2. **数据类型转换**: 将某些字段的数据类型进行转换,例如将字符串类型的日期转换为日期对象,以便后续计算和比较。 3. **缺失值处理**: 对于缺失值,可以根据业务规则进行填充或删除。例如,如果某些订单的邮费(postFee)缺失,可以设置默认值为0。 以下是一个示例代码片段,用于对获取到的数据进行清洗和初步加工: ```python import pandas as pd from datetime import datetime # 假设response_data是从接口获取到的原始数据 response_data = [ {"tradeNo": "T12345", "postFee": None, "goodsDetail": [{"goodsNo": "G001", "goodsName": "商品A", "sellCount": 10}]}, {"tradeNo": "T12346", "postFee": 5.0, "goodsDetail": [{"goodsNo": "G002", "goodsName": "商品B", "sellCount": 20}]} ] # 转换为DataFrame df = pd.DataFrame(response_data) # 字段重命名 df.rename(columns={"tradeNo": "销售单号", "postFee": "邮费"}, inplace=True) # 数据类型转换 df["邮费"] = df["邮费"].fillna(0).astype(float) # 展开嵌套的商品详情 goods_details = df["goodsDetail"].apply(pd.Series) df = df.drop("goodsDetail", axis=1).join(goods_details.explode().apply(pd.Series)) # 重命名商品详情字段 df.rename(columns={"goodsNo": "商品编号", "goodsName": "商品名称", "sellCount": "销售数量"}, inplace=True) print(df) ``` #### 异常处理与日志记录 在调用API和处理数据过程中,异常处理和日志记录是必不可少的。可以通过捕获异常并记录详细日志来确保问题能够及时发现和解决。例如: ```python import logging logging.basicConfig(level=logging.INFO) try: # 模拟API调用 response = api_call() if response.status_code != 200: raise Exception(f"API调用失败,状态码:{response.status_code}") # 数据处理逻辑... except Exception as e: logging.error(f"发生异常:{e}") ``` 通过上述步骤,我们能够高效地调用吉客云·奇门接口获取销售单数据,并对其进行清洗和初步加工,为后续的数据转换与写入奠定基础。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售单数据转换并写入金蝶云星空API接口 在数据集成生命周期的第二步中,我们需要将已经从源平台获取并清洗过的数据进行ETL转换,以符合目标平台——金蝶云星空API接口所能接收的格式,最终实现数据的写入。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### API接口配置 根据提供的元数据配置,我们需要调用金蝶云星空的`batchSave` API接口,采用`POST`请求方法。以下是关键的配置项: - `api`: "batchSave" - `method`: "POST" - `idCheck`: true - `operation`: - `rowsKey`: "array" - `rows`: 10 - `method`: "batchArraySave" #### 请求字段解析 请求字段定义了从源数据到目标格式的映射规则。以下是主要字段及其配置: 1. **单据类型 (`FBillTypeID`)** - 类型: string - 描述: 单据类型 - 值: 固定值 `"XSCKD01_SYS"` - 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`) 2. **单据编号 (`FBillNo`)** - 类型: string - 描述: 单据编号 - 值: `{tradeNo}` (从源数据中提取) 3. **日期 (`FDate`)** - 类型: string - 描述: 日期 - 值: `{consignTime}` (从源数据中提取) 4. **销售组织 (`FSaleOrgId`)** - 类型: string - 描述: 组织 - 值: 动态查询 `_mongoQuery` ```json { "findField": "content.warehouseCompanyCode", "where": "{\"content.warehouseCode\" : {\"$eq\":\"{warehouseCode}\"}}" } ``` - 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`) 5. **客户 (`FCustomerID`)** - 类型: string - 描述: 基础资料 - 值: `{shopCode}` (从源数据中提取) - 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`) 6. **备注 (`FNote`)** - 类型: string - 描述: 多行文本 - 值: `{sellerMemo}` (从源数据中提取) #### 明细信息配置 明细信息字段用于描述销售单中的具体商品信息,以下是主要字段及其配置: 1. **物料编码 (`FMaterialId`)** - 类型: string - 描述: 基础资料 - 值: ```json "{{goodsDetail.goodsNo}}" ``` - 解析器: 使用 `ConvertObjectParser` 转换为目标格式中的编号 (`FNumber`) 2. **实退数量 (`FRealQty`)** - 类型: string - 描述: 数量 - 值: ```json "{{goodsDetail.sellCount}}" ``` 3. **批号 (`Flot`)** - 类型: string - 描述: 批号 - 值: ```json "01" ``` 4. **单价 (`FPrice`)** ```json "_function round(({{goodsDetail.shareFavourableAfterFee}}/{{goodsDetail.sellCount}}),4)" ``` 5. **金额 (`FAmount`)** ```json "{{goodsDetail.shareFavourableAfterFee}}" ``` 6. **仓库 (`FStockId`)** ```json "_mongoQuery 38faaa66-9955-34e5-bd58-7c4099b53af5 findField=content.warehouseCompanyCode where={\"content.warehouseCode\" : {\"$eq\":\"{warehouseCode}\"}}" ``` 7. **备注 (`FEntrynote`)** ```json "{goodsMemo}" ``` #### 执行操作与其他请求参数 除了上述字段映射外,还需要指定一些操作参数和其他请求参数: 1. **业务对象表单Id (`FormId`)** ```json "SAL_OUTSTOCK" ``` 2. **执行的操作 (`Operation`)** ```json "Save" ``` 3. **提交并审核 (`IsAutoSubmitAndAudit`)** ```json true ``` 4. **验证基础资料有效性 (`IsVerifyBaseDataField`)** ```json true ``` 5. **系统模块 (`SubSystemId`)** ```json "21" (默认仓库模块) ``` 6. **允许负库存 (`InterationFlags`)** ```json "STK_InvCheckResult" ``` 7. **服务端开启的线程数 (`BatchCount`)** ```json "5" ``` 通过上述配置,我们可以确保将清洗后的源平台数据准确地转换为金蝶云星空API接口所需的格式,并成功写入目标平台。这一过程充分利用了轻易云数据集成平台提供的元数据配置功能,实现了高效、透明的数据集成。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)