使用轻易云平台实现销售出库单数据的ETL转换和写入金蝶云

  • 轻易云集成顾问-何语琴
### 旺店通·旗舰奇门数据集成到金蝶云星空的技术案例分享 在当今高度竞争的市场环境中,企业需要高效且准确的数据集成方案来支持其业务流程。对于一家依赖旺店通·旗舰奇门进行分销销售管理的公司而言,如何将销售出库单数据可靠地集成为其他系统供用,是一项关键任务。在本篇文章中,我们详细探讨了通过“分销销售出库单集成方案-P-T”,将旺店通·旗舰奇门的数据无缝对接到金蝶云星空,以及相关API接口调用和技术实现细节。 #### 环境概述 - **源系统**:旺店通·旗舰奇门 - **目标系统**:金蝶云星空 #### 主要API接口: - *获取数据(source)*: `wdt.wms.stockout.sales.querywithdetail` - *写入数据(target)*: `batchSave` 为了确保从旺店通·旗舰奇门获得的每条数据信息都能精准高效地传输至金蝶云星空,并避免漏单情况,我们设计了一套完整的数据处理流程。 #### 数据获取与转换 作为第一步,通过调用`wdt.wms.stockout.sales.querywithdetail` API接口,我们定时抓取最新的销售出库单信息,这些信息包括订单号、商品详情、数量等关键信息。同时,为了适应不同系统间的数据结构差异,我们编写自定义逻辑,将原始数据转化为符合金蝶云星空要求的格式。 以下是具体步骤: 1. **分页及限流处理**: 调用`wdt.wms.stockout.sales.querywithdetail`时,由于涉及大批量数据,需要解决分页及限流问题。我们设置自动页码迭代机制,并内置防止API请求频率过高导致超限告警措施。 2. **实时监控与日志记录**: 在整个过程中,使用集中监控和告警系统实时跟踪每个交易状态。一旦出现异常,如网络延迟或响应错误,会立即触发重试机制,同时生成详细日志以便后续分析。 3. **自定义转换逻辑应用**: 将获取到的信息映射并转化为符合目标API (`batchSave`) 接口规范的数据格式,例如字段名称映射和类型匹配,以确保正确性。 4. **快速写入与性能优化**: 利用平台提供的大量数据吞吐能力,将清洗后的数据批量发送至金蝶云星空。这不仅提高了传输效率,同时也保证大量交易在短时间内完成上传,从而提升整体业务处理速度。 此案例展示了复杂业务场景 ![打通用友BIP数据接口](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步加工。本文将详细探讨如何使用旺店通·旗舰奇门接口`wdt.wms.stockout.sales.querywithdetail`来实现这一过程。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的元数据配置: ```json { "api": "wdt.wms.stockout.sales.querywithdetail", "method": "POST", "number": "order_no", "id": "stockout_id", "idCheck": true, "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ { "field": "page_size", "label": "分页大小", "type": "int", "value": 50, "parent": "pager" }, { "field": "page_no", "label": "页号", "type": "int", "value": 1, "parent": "pager" } ] }, { "field": "params", "label": "业务参数", "type": "object", ... } ], ... } ``` #### 请求参数解析 在请求参数中,`pager`和`params`是两个主要的对象字段。`pager`用于分页控制,而`params`包含了具体的业务参数。 - **分页参数**: - `page_size`: 每页返回的数据条数,默认设置为50。 - `page_no`: 当前请求的页码,默认设置为1。 - **业务参数**: - `start_time`: 数据查询的开始时间,默认值为30分钟前。 - `end_time`: 数据查询的结束时间,默认值为当前时间。 - `status_type`: 出库单状态类型,默认值为3(按照指定的status状态字段查询)。 - `status`: 出库单状态详细信息,当`status_type=3`时生效,默认值为110。 - `warehouse_no`, `stockout_no`, `shop_nos`, `src_order_no`, `need_sn`, `position`: 分别对应仓库编码、出库单编号、店铺编号、销售订单号、是否返回SN信息、是否按照货位排序等字段。 #### 数据请求与清洗 在实际操作中,我们通过POST请求调用该接口,并传入上述配置好的请求参数。以下是一个示例代码片段: ```python import requests import json from datetime import datetime, timedelta # 设置请求URL和头部信息 url = 'https://api.example.com/wdt.wms.stockout.sales.querywithdetail' headers = {'Content-Type': 'application/json'} # 配置请求参数 payload = { 'pager': { 'page_size': 50, 'page_no': 1 }, 'params': { 'start_time': (datetime.now() - timedelta(minutes=30)).strftime('%Y-%m-%d %H:%M:%S'), 'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'status_type': '3', 'status': '110', # 可以根据实际需求添加其他业务参数 } } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码并处理响应数据 if response.status_code == 200: data = response.json() # 对数据进行清洗和初步处理 processed_data = process_data(data) else: print(f"Error: {response.status_code}") def process_data(data): # 实现具体的数据清洗逻辑,例如去除无效字段、格式转换等 cleaned_data = [] for item in data['result']: cleaned_item = { 'order_no': item['order_no'], 'stockout_id': item['stockout_id'], # 添加其他需要保留或转换的字段 } cleaned_data.append(cleaned_item) return cleaned_data ``` #### 数据转换与写入 在完成数据清洗后,我们可以将其转换为目标系统所需的格式,并写入到目标数据库或文件系统中。这一步通常包括字段映射、格式转换等操作。 例如,将清洗后的数据写入到数据库中: ```python import pymysql def write_to_db(cleaned_data): connection = pymysql.connect( host='localhost', user='user', password='password', database='database' ) try: with connection.cursor() as cursor: for item in cleaned_data: sql = """INSERT INTO stockout_orders (order_no, stockout_id) VALUES (%s, %s)""" cursor.execute(sql, (item['order_no'], item['stockout_id'])) connection.commit() finally: connection.close() # 调用写入函数 write_to_db(processed_data) ``` 通过上述步骤,我们实现了从源系统旺店通·旗舰奇门接口获取数据并进行初步加工,为后续的数据集成奠定了基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现分销销售出库单的ETL转换及写入金蝶云星空 在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终写入目标平台。本案例中,我们将分销销售出库单的数据转换为金蝶云星空API接口所能接收的格式,并写入目标平台。 #### 配置元数据 首先,我们需要配置元数据,以便将源数据映射到目标API所需的字段格式。以下是具体的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" }, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"DSXSCHD07","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"}, {"field":"FStockOrgId","label":"发货组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"106"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","value":"_findCollection find FUseOrgID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","value":"_findCollection find FCustID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"Fnote","label":"备注","type":"","describe":"","value":""}, {"field":"","label":"","type":"","describe":"","value":""}, ... ], "otherRequest":[ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "KD_DSSAL_OutStock"}, {"field": "Operation", "label": "执行的操作", "type": "", "value": ""}, ... ] } ``` #### 数据转换 在进行ETL转换时,我们需要特别注意以下几点: 1. **字段映射**:确保每个字段都正确映射到目标API所需的字段。例如,`FBillNo` 对应源数据中的 `{order_no}`,`FDate` 对应 `{consign_time}`。 2. **数据解析**:对于一些复杂的数据类型,如基础资料字段,需要使用 `ConvertObjectParser` 等解析器进行转换。例如,`FSaleOrgId` 和 `FCustomerID` 都需要通过查找对应关系进行转换。 3. **嵌套结构**:对于包含嵌套结构的数据,如订单明细 `FEntity`,需要逐层解析和映射。例如,物料编码 `FMaterialID` 对应 `{details_list.goods_no}`,实发数量 `FRealQty` 对应 `{details_list.goods_count}`。 #### API请求 完成数据转换后,我们通过API请求将转换后的数据写入金蝶云星空。具体请求如下: ```json { "FormId": "KD_DSSAL_OutStock", "Operation": { ... }, ... } ``` 此处我们使用POST方法,将批量保存(batchSave)操作发送到金蝶云星空API接口。确保请求体中的所有字段都已正确填充,并符合目标系统要求。 #### 实际应用案例 假设我们有一个分销销售出库单,其源数据如下: ```json { ... } ``` 通过上述元数据配置和ETL转换,我们可以生成如下符合金蝶云星空API要求的数据格式: ```json { ... } ``` 最后,通过调用金蝶云星空API接口,将处理好的数据提交并审核,实现从源平台到目标平台的数据无缝对接。 #### 总结 通过轻易云数据集成平台,我们能够高效地完成分销销售出库单的数据ETL转换,并成功写入金蝶云星空。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)