轻易云平台在金蝶与聚水潭数据集成中的应用与优化

  • 轻易云集成顾问-叶威宏
### 金蝶云星空数据集成至聚水潭的技术实现概述 在本文中,我们将分享一个真实案例,展示如何通过轻易云平台将金蝶云星空系统的采购入库单无缝集成到聚水潭。这个操作不仅涉及多项关键技术,还需要特别处理数据获取、转换和写入过程中的各种挑战。 首先,通过调用金蝶云星空提供的`executeBillQuery`接口,我们能精确而高效地抓取金蝶云星空上的采购入库单数据。这些数据随后经过必要的格式化处理,将其转变为适配聚水潭所需的数据模型。在此过程中,需要特别注意分页和限流问题,以确保不会漏单或引发服务器拒绝服务。 为了确保大量数据快速且准确地写入聚水潭系统,我们采用了批量集成的方法,并使用定时任务控制数据同步频率。这部分快速写入功能依赖于聚水潭开放的API `/open/jushuitan/purchasein/upload` 来实现。在面对不同平台的数据格式差异时,通过灵活的数据映射规则,可以有效解决这一问题,使整个对接流程更加顺畅。 此外,在实际运行中,为应对可能出现的数据传输异常与错误,建立完善的异常处理与重试机制显得尤为重要。一旦监测到API 调用失败或其他意外情况,系统会自动记录日志并执行错误重试操作,从而保证整体流程稳定性与可靠性。 综上所述,这个案例详细介绍了从获取金蝶云星空采购入库单,到最终成功上传至聚水潭,全程各项技术细节及解决方案。接下来,将深入解析具体实施步骤及核心代码示例。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`,获取并加工采购入库单数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据。根据提供的元数据配置,我们可以看到`executeBillQuery`接口的主要参数和字段如下: - **API**: `executeBillQuery` - **Method**: `POST` - **Effect**: `QUERY` - **FormId**: `STK_InStock` 请求参数包括以下几个部分: 1. **基本字段** - `FInStockEntry_FEntryId`: 分录ID - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FStockOrgId_FNumber`: 收料组织 - 其他字段... 2. **分页参数** - `Limit`: 最大行数 - `StartRow`: 开始行索引 - `TopRowCount`: 返回总行数 3. **过滤条件** - `FilterString`: 过滤条件字符串,例如:`FSupplierId.FNumber = 'VEN00010' and FApproveDate>= '2023-12-01T00:00:00'` 4. **查询字段集合** - `FieldKeys`: 需查询的字段key集合,格式为数组。 #### 构建请求体 根据上述元数据配置,我们需要构建一个完整的请求体。以下是一个示例请求体: ```json { "FormId": "STK_InStock", "FieldKeys": [ "FBillNo", "FDocumentStatus", "FStockOrgId.FNumber", "FDate", "FBillTypeID.FNumber", "FOwnerTypeIdHead", "FOwnerIdHead.FNumber", "FDemandOrgId.FNumber", "FPurchaseOrgId.FNumber", "FSupplierId.FNumber" ], "FilterString": "FModifyDate>='{{LAST_SYNC_TIME|dateTime}}' and FStockId.FNumber in ('CK007','CK011','CK012','CK016','CK017') and FProduceDate='2023-12-01T00:00:00' or FModifyDate>='{{LAST_SYNC_TIME|dateTime}}' and FStockId.FNumber in ('CK007','CK011','CK012','CK016','CK017') and FProduceDate is null", "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}", "TopRowCount": true } ``` #### 调用接口并处理响应 使用轻易云平台提供的API调用功能,我们可以发送上述请求,并接收返回的数据。以下是一个示例代码片段,展示如何调用该接口: ```python import requests url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { # 上述构建的请求体内容 } response = requests.post(url, headers=headers, json=payload) data = response.json() # 检查响应状态码和处理返回的数据 if response.status_code == 200: for entry in data['Result']['ResponseStatus']['SuccessEntitys']: process_entry(entry) else: handle_error(response) ``` #### 数据清洗与转换 获取到原始数据后,需要进行清洗和转换,以便后续的数据写入操作。常见的数据清洗步骤包括: 1. **字段映射与重命名**:将金蝶返回的数据字段映射到目标系统所需的字段名称。 2. **数据类型转换**:确保所有字段的数据类型符合目标系统要求,例如日期格式、数值精度等。 3. **缺失值处理**:处理可能存在的缺失值,根据业务需求进行填充或删除。 以下是一个示例代码片段,展示如何进行简单的数据清洗: ```python def process_entry(entry): cleaned_data = { 'bill_no': entry['FBillNo'], 'status': entry['FDocumentStatus'], 'stock_org': entry['FStockOrgId_FNumber'], 'date': convert_date(entry['FDate']), # 更多字段映射... } # 将清洗后的数据写入目标系统或存储到数据库中 save_to_target_system(cleaned_data) def convert_date(date_str): # 日期格式转换函数示例 from datetime import datetime return datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S').strftime('%Y-%m-%d') ``` 通过以上步骤,我们完成了从金蝶云星空获取采购入库单数据,并进行了必要的数据清洗和转换,为后续的数据写入打下了坚实基础。这一过程充分利用了轻易云平台提供的可视化操作界面和实时监控功能,大大提升了业务透明度和效率。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将金蝶采购入库单转换为聚水潭API格式并写入目标平台 在轻易云数据集成平台的生命周期中,数据转换与写入是至关重要的一步。本文将深入探讨如何将已经集成的金蝶采购入库单数据进行ETL转换,转为聚水潭API接口所能够接收的格式,并最终写入目标平台。 #### API 接口配置 根据提供的元数据配置,我们需要将金蝶的采购入库单数据转换为聚水潭API `/open/jushuitan/purchasein/upload` 所能接收的格式。以下是关键配置项及其解释: 1. **API 路径**: `/open/jushuitan/purchasein/upload` 2. **HTTP 方法**: `POST` 3. **操作类型**: `merge`,基于字段 `FBillNo` 进行合并操作。 4. **请求体结构**: - **头部信息(header)**: - `FBillNo`: 单据编号 - `FSupplierId_FNumber`: 供应商编号 - `FDate`: 日期 - `FStockId_FNumber`: 仓库编号 - **明细信息(body)**: - `FMaterialId_FNumber`: 物料编号 - `FNote`: 备注 - `FRealQty`: 实际数量 #### 请求参数映射与处理 在实际的数据转换过程中,需要对请求参数进行精细化映射和处理。以下是具体步骤: 1. **是否自动确认单据** (`is_confirm`): - 类型: `string` - 默认值: 未指定 2. **是否自动审核** (`excute_confirming`): - 类型: `string` - 默认值: `"false"` 3. **分仓编号** (`wms_co_id`): - 类型: `int` - 映射值: `{FStockId_FNumber}` - 映射方向: 正向映射到目标系统ID `"656fe37d5b320127d03778c2"` 4. **供应商ID** (`supplier_id`): - 类型: `int` - 映射规则: 从集合中查找供应商ID,条件为供应商编码等于 `{FSupplierId_FNumber}` 5. **外部采购单号** (`external_id`): - 类型: `string` - 映射值: `{FBillNo}` 6. **备注** (`remark`): - 类型: `string` - 默认值: 未指定 7. **明细列表** (`items`): - 类型: `array` - 子字段: - 商品编码 (`sku_id`): 从集合中查找商品编码,条件为物料编号等于 `{list.FMaterialId_FNumber}` - 数量 (`qty`): 映射值为 `{list.FRealQty}` - 单价 (`price`): 默认未指定 - 明细备注 (`remark`): 映射值为 `{FNote}` #### 数据转换与写入过程 在数据转换过程中,我们需要确保每个字段都准确映射到目标平台所需的格式。以下是具体的ETL过程: 1. **提取源数据**: 从金蝶系统提取采购入库单相关数据,包括单据编号、供应商编号、日期、仓库编号、物料编号、备注和实际数量等。 2. **数据清洗与转换**: 根据元数据配置,对提取的数据进行清洗和转换。例如,将供应商编码通过集合查找转换为供应商ID,将物料编号通过集合查找转换为商品编码。 3. **构建请求体**: 按照聚水潭API要求构建请求体,包括头部信息和明细列表。在构建过程中,确保所有字段都按照配置进行正确映射和填充。 4. **发送请求并处理响应**: 使用HTTP POST方法,将构建好的请求体发送到聚水潭API接口,并处理返回的响应信息。如果上传成功,则记录外部采购单号等相关信息。 #### 示例代码片段 以下是一个示例代码片段,用于展示如何使用Python实现上述ETL过程: ```python import requests import json def transform_and_upload(data): # 构建请求体 request_body = { "is_confirm": data.get("is_confirm", ""), "excute_confirming": "false", "wms_co_id": map_stock_id(data["FStockId_FNumber"]), "supplier_id": find_supplier_id(data["FSupplierId_FNumber"]), "external_id": data["FBillNo"], "remark": data.get("remark", ""), "items": [ { "sku_id": find_sku_id(item["FMaterialId_FNumber"]), "qty": item["FRealQty"], "price": item.get("price", 0), "remark": item.get("FNote", "") } for item in data["list"] ] } # 发送请求 response = requests.post( url="https://api.jushuitan.com/open/jushuitan/purchasein/upload", headers={"Content-Type": "application/json"}, data=json.dumps(request_body) ) # 处理响应 if response.status_code == 200: print("上传成功:", response.json()) else: print("上传失败:", response.text) def map_stock_id(stock_number): # 映射仓库编号到目标系统ID return stock_number_mapping[stock_number] def find_supplier_id(supplier_code): # 查找供应商ID逻辑 return supplier_mapping[supplier_code] def find_sku_id(material_number): # 查找商品编码逻辑 return sku_mapping[material_number] # 示例调用 data = { "FBillNo": "12345", "FSupplierId_FNumber": "SUP001", "FDate": "2023-10-01", "FStockId_FNumber": "WH001", "list": [ {"FMaterialId_FNumber": "MAT001", "FNote": "", "FRealQty": 10}, {"FMaterialId_FNumber": "MAT002", "FNote": "", "FRealQty": 20} ] } transform_and_upload(data) ``` 通过上述步骤和代码示例,可以实现从金蝶系统到聚水潭系统的数据无缝对接,确保采购入库单的数据准确传递和存储。这一过程不仅提高了业务效率,还保证了数据的一致性和完整性。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)