利用轻易云实现管易云到金蝶云的数据转换与写入

  • 轻易云集成顾问-潘裕
### 管易云盘点单与金蝶云星空其他入库单数据对接案例分析 在企业信息化系统中,各个子系统之间的数据流通与集成是保证业务高效运转的关键。本文将深入探讨一个实际案例:如何利用轻易云数据集成平台实现管易云的盘点单(`gy.erp.stock.count.order.get`)到金蝶云星空其他入库单(`batchSave`)的数据对接。 #### 方案概述 本次集成任务主要关注以下核心要素: 1. **可靠性**:确保从管易云获取的盘点单数据不漏单,定时可靠地抓取接口数据。 2. **性能优化**:处理大量数据时,快速而有效地写入金蝶云星空。 3. **分页与限流管理**:针对管易云API调用中的分页和限流问题进行处理,以保障稳定运行。 4. **格式转换**:解决两个系统间的数据格式差异,实现平滑映射。 #### 数据获取及初步处理 首先,通过调用管易云API `gy.erp.stock.count.order.get` 获取最新的盘点单数据。由于可能涉及到分页返回,这里需要特别注意通过自动化脚本逐页抓取,并记录每次请求状态以防止遗漏和重复。 ```python # 示例代码片段: def fetch_gye_cloud_data(): # 初始页数设定为1 page = 1 while True: response = request_to_gye_api(page) if not response['data']: break # 没有更多页面,终止循环 process_and_store(response['data']) page += 1 fetch_gye_cloud_data() ``` 这一步不仅仅是简单的数据检索,更需实时监控抓取进度和状态,一旦发现异常立即触发告警机制并执行重试操作。 #### 数据转换及传输 获取到的数据在存储至本地缓存中后,需要经过一系列格式转换,以符合金蝶云星空 `batchSave` 接口要求。例如,将管易特有字段名映射至金蝶适配字段以及必要的数据校验与清洗。 ```python # 示例代码片段: def transform_data_for_kingdee(data): transformed_data = [] for entry in data: transformed_entry = { 'KDSpecificField': entry['GYEOriginalField'], # 更多字段映射规则... } transformed_data.append(transformed_entry) return transformed_data transformed_list = transform_data_for_kingdee(original_list) ``` 随后,通过批量写入方式向金蝶发送请求,不论批量大小还是频率,都可以确保性能最佳且不会引起服务器压力过 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image) ### 调用管易云接口gy.erp.stock.count.order.get获取并加工数据 在轻易云数据集成平台的生命周期中,第一步是调用源系统接口以获取原始数据。本文将深入探讨如何通过调用管易云的`gy.erp.stock.count.order.get`接口来获取盘点单数据,并对其进行初步加工,为后续的数据转换与写入做好准备。 #### 接口调用配置 首先,我们需要配置调用管易云接口的元数据。以下是我们使用的元数据配置: ```json { "api": "gy.erp.stock.count.order.get", "effect": "QUERY", "method": "POST", "number": "code", "id": "code", "idCheck": true, "request": [ { "field": "start_date", "label": "start_date", "type": "string", "describe": "111", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_date", "label": "end_date", "type": "string", "describe": "111", "value": "{{CURRENT_TIME|datetime}}" } ], "otherRequest": [ { "field": "page_size", "label": "page_size", "type": "string", "describe": "默认为10", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "page_no", "label": "page_no", "type": "string", "describe":"默认1", "value":"{PAGINATION_START_PAGE}" }, { “field”: “detailApi”, “label”: “详情查询api”, “type”: “object”, “children”: [ { “field”: “api”, “label”: “api”, “type”: “string”, “value”: “gy.erp.stock.count.order.breakeven.get”, “parent”:“detailApi” } ] } ], “beatFlat”: [“details”], “condition_bk”: [[{"field":"details_qty_diff","logic":"gt","value":"0"}]], “condition”: [[{"field":"details_qty_diff","logic":"gt","value":"0"}]] } ``` #### 请求参数详解 - **start_date** 和 **end_date**:这两个字段用于指定查询时间范围。`start_date`使用上次同步时间,`end_date`使用当前时间。 - **page_size** 和 **page_no**:分页参数,分别表示每页记录数和当前页码。 - **detailApi**:用于获取盘点单详情的子接口。 #### 数据请求与清洗 在实际操作中,我们会通过POST请求调用上述配置的API,并根据返回的数据进行初步清洗。以下是一个示例代码片段: ```python import requests import datetime # 获取当前时间和上次同步时间 current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') last_sync_time = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S') # 配置请求参数 payload = { 'start_date': last_sync_time, 'end_date': current_time, 'page_size': 10, 'page_no': 1 } # 发起POST请求 response = requests.post('https://api.guanyiyun.com/gy.erp.stock.count.order.get', data=payload) # 检查响应状态 if response.status_code == 200: data = response.json() # 初步清洗数据,根据条件过滤 filtered_data = [item for item in data['orders'] if item['details_qty_diff'] > 0] else: print(f"Error: {response.status_code}") ``` #### 数据转换与写入准备 经过初步清洗后的数据,需要进一步处理以适应目标系统的数据格式。在这个案例中,我们将盘点单数据转换为金蝶其他入库单所需的格式。以下是一个简单的数据转换示例: ```python def transform_data(filtered_data): transformed_data = [] for item in filtered_data: transformed_record = { 'entry_id': item['code'], 'product_code': item['details']['product_code'], 'quantity': item['details']['qty'], 'warehouse': item['warehouse'] } transformed_data.append(transformed_record) return transformed_data transformed_data = transform_data(filtered_data) ``` 以上代码展示了如何将过滤后的盘点单数据转换为目标系统所需的格式,为后续的数据写入做好准备。 通过上述步骤,我们成功实现了从管易云获取盘点单数据并进行初步加工,为下一阶段的数据转换与写入奠定了基础。这一过程充分利用了轻易云平台提供的全生命周期管理功能,使得整个数据处理过程透明且高效。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S12.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现管易云盘点单到金蝶云星空其他入库单的ETL转换 在数据集成过程中,将管易云的盘点单数据转换为金蝶云星空API接口所能接收的格式是一个关键步骤。本文将详细介绍如何通过轻易云数据集成平台配置元数据,实现这一目标。 #### API接口配置 首先,我们需要配置金蝶云星空的API接口。根据提供的元数据配置,目标API为`batchSave`,请求方法为`POST`。以下是具体的请求字段及其配置: - **FBillNo(单据编号)**: 通过组合`code`和`warehouse_code`生成唯一的单据编号。 - **FBillTypeID(单据类型)**: 固定值为`QTRKD01_SYS`。 - **FStockOrgId(库存组织)**: 根据条件判断选择合适的库存组织。 - **FStockDirect(库存方向)**: 下拉列表选择。 - **FDate(日期)**: 使用创建日期`create_date`。 - **FDEPTID(部门)**: 固定值为`01`。 - **FOwnerTypeIdHead(货主类型)**: 固定值为`BD_OwnerOrg`。 - **FOwnerIdHead(货主)**: 根据条件判断选择合适的货主。 - **FNOTE(备注)**: 来自源平台的备注信息。 #### 明细信息配置 对于明细信息部分,字段配置如下: - **FInStockType(入库类型)**: 下拉列表选择。 - **FMATERIALID(物料编码)**: 通过物料规格从基础资料中查找相应编码。 - **FCMKBarCode(零售条形码)**: 直接映射源平台条形码字段。 - **FSTOCKID(收货仓库)**: 使用仓库代码映射。 - **FStockLocId(仓位)**: 通过维度关联字段进行转换。 - **FQty(实收数量)**: 固定值为1。 - **FPrice(成本价)**: 映射源平台成本价字段。 - **FEntryNote(备注)**: 映射源平台明细备注字段。 - **FSRCBILLNO(源单编号)**: 映射源平台源单编号字段。 - **FSRCBILLTYPEID(源单类型)**: 映射源平台源单类型字段。 - **FOWNERTYPEID(货主类型)**: 固定值为`BD_OwnerOrg`。 - **FOWNERID(货主)**: 根据条件判断选择合适的货主。 #### 其他请求参数 除了上述字段外,还需要配置一些其他请求参数: - **FormId**:业务对象表单Id,固定值为`STK_MISCELLANEOUS`,表示其他入库单表单ID。 - **IsVerifyBaseDataField**:验证基础资料有效性,布尔值,默认为true。 - **Operation**:执行操作,固定值为`Save`。 - **IsAutoSubmitAndAudit**:提交并审核,布尔值,默认为true。 #### 数据转换逻辑 在数据转换过程中,需要特别注意以下几点: 1. 使用函数和条件语句对某些字段进行动态计算。例如,库存组织和货主字段需要根据仓库代码和所有者组织进行判断选择合适的值。这可以通过轻易云的数据处理函数来实现,如 `_function CASE WHEN ... THEN ... ELSE ... END`。 2. 基础资料的解析和映射。对于物料编码、仓位等基础资料,需要使用 `ConvertObjectParser` 进行解析,并确保映射关系正确无误。 3. 明细信息数组的处理。明细信息作为一个数组,需要逐项进行处理和转换,并确保每个子项都符合目标平台API接口要求。 #### 实际应用案例 假设我们有一条来自管易云盘点单的数据,其主要字段如下: ```json { "code": "PD20231001", "warehouse_code": "0106", "create_date": "2023-10-01", "owner_org": "102", "note": "月度盘点", "detail_list": [ { "details_sku_code": "SKU12345", "details_qty_diff": 10, "remark": "缺少10件" } ] } ``` 经过ETL转换后,将生成如下符合金蝶云星空API接口要求的数据结构: ```json { "FormId": "STK_MISCELLANEOUS", "IsVerifyBaseDataField": true, "Operation": "Save", "IsAutoSubmitAndAudit": true, "list": [ { "FBillNo": "PD20231001-0106", "FBillTypeID": {"FNumber": "QTRKD01_SYS"}, ... // 其他头部字段 ... "FEntity": [ { ... // 明细信息 ... } ] } ] } ``` 通过以上步骤,我们成功地将管易云盘点单的数据转换并写入到金蝶云星空其他入库单中,实现了不同系统间的数据无缝对接。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)