从金蝶数据获取到旺店通数据推送的全面实施案例

  • 轻易云集成顾问-张妍琪
### 金蝶盘亏单 => 旺店通委外出库单(云仓)系统集成案例分享 在复杂的业务环境中,如何确保各个系统之间的数据流转准确无误,是众多企业亟待解决的问题。本文将聚焦于一个具体的系统对接集成案例:从金蝶云星空数据集成到旺店通·企业奇门,通过技术细节探讨如何高效、可靠地实现这一过程。 此次集成方案主要涉及以下两个关键API接口: - **金蝶云星空数据获取接口**:`executeBillQuery` - **旺店通·企业奇门数据写入接口**:`wdt.vip.wms.stockinout.order.push` #### 数据抓取与快速写入 首先,我们使用金蝶云星空的`executeBillQuery` API进行定时且可靠的数据抓取。这一过程需处理分页和限流问题,以确保大规模数据可以顺利提取。为解决此类问题,采用了一种高效的异常处理机制和错误重试机制,当出现请求失败或超时时,可以自动再次尝试,从而保证不漏单、不丢单。 紧接着,成功获取的数据需要经过格式转换后批量写入到旺店通·企业奇门。这一过程中,特别关注了两者之间的数据格式差异,比如时间格式、数值单位等,并通过自定义映射规则加以解决。因此,在调用`wdt.vip.wms.stockinout.order.push` API时,实现了大批量、高性能地提交数据,大幅提升了效率。 下一步,将详细阐述上述环节中的每个技术要点,包括API调用示例代码、参数配置以及日志记录等内容,为您提供全面深入的技术指导。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取盘亏单的数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据。以下是我们使用的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillEntry_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FBillEntry_FEntryID","label":"FEntryID","type":"string","value":"FBillEntry_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FStockerId","label":"仓管员","type":"string","value":"FStockerId"}, {"field":"FCreatorId","label":"创建人","type":"string","value":"FCreatorId"}, {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"}, {"field":"FModifierId","label":"最后修改人","type":"string","value":"FModifierId"}, {"field":"FModifyDate","label":"最后修改日期","type":"string","value":"FModifyDate"}, {"field": "FApproverId", "label": "审核人", "type": "string", "value": "FApproverId"}, {"field": "FApproveDate", "label": "审核日期", "type": "string", "value": "FApproveDate"}, {"field": "FNoteHead", "label": "备注", "type": "string", "value": "FNoteHead"}, {"field": "FMaterialId_FNumber", "label": "物料编码", "type": "string", "value": "FMaterialId.FNumber"}, {"field": "FUnitID", "label": "单位", "type": "string", "value": "FUnitID"}, {"field": "FAcctQty", "label": “账存数量”, “type”: “string”, “value”: “FAcctQty”}, {"field”: “FLossQty”, “label”: “盘亏数量”, “type”: “string”, “value”: “FLossQty”}, // ...其他字段省略 ], // ...其他配置省略 } ``` 该元数据配置定义了请求参数、分页信息以及需要查询的字段。特别注意以下几点: 1. **分页参数**:`pageSize`设置为500,确保每次请求最多返回500条记录。 2. **过滤条件**:通过`FilterString`字段设置过滤条件,例如只查询特定库存组织和仓库的数据。 3. **字段映射**:定义了从金蝶云星空返回的数据字段到本地系统字段的映射关系。 #### 调用接口 在轻易云平台上,我们可以通过以下步骤调用金蝶云星空的`executeBillQuery`接口: 1. **构建请求体**:根据元数据配置构建请求体,包括分页参数、过滤条件等。 2. **发送请求**:使用POST方法发送HTTP请求到金蝶云星空API。 3. **处理响应**:解析响应数据,并根据需要进行初步加工。 以下是一个示例代码片段,用于构建和发送请求: ```python import requests import json # 构建请求体 request_body = { 'FormId': 'STK_StockCountLoss', 'FieldKeys': ','.join([req['field'] for req in metadata['request']]), 'FilterString': metadata['otherRequest'][3]['value'], 'Limit': metadata['pagination']['pageSize'], 'StartRow': 0, } # 设置请求头 headers = { 'Content-Type': 'application/json', } # 发起POST请求 response = requests.post( url='https://api.kingdee.com/executeBillQuery', headers=headers, data=json.dumps(request_body) ) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据处理逻辑... else: print(f"Error: {response.status_code}") ``` #### 数据加工 获取到原始数据后,我们需要对其进行初步加工,以便后续的数据转换与写入阶段。例如,可以对盘亏数量(FLossQty)进行汇总,或者根据业务需求筛选特定状态的单据。 以下是一个简单的数据加工示例: ```python # 假设data包含从API返回的数据列表 processed_data = [] for record in data: if record['FLossQty'] > 0: processed_record = { '单据编号': record['FBillNo'], '物料编码': record['FMaterialId_FNumber'], '盘亏数量': record['FLossQty'], # ...其他字段映射 } processed_data.append(processed_record) # 输出处理后的数据 print(json.dumps(processed_data, indent=2, ensure_ascii=False)) ``` 通过上述步骤,我们成功调用了金蝶云星空的`executeBillQuery`接口,并对返回的数据进行了初步加工。这为后续的数据转换与写入奠定了基础。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 数据集成案例:金蝶盘亏单到旺店通委外出库单(云仓) 在数据集成的生命周期中,数据转换与写入是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将金蝶盘亏单的数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。 #### API接口元数据配置 我们使用的API接口为`wdt.vip.wms.stockinout.order.push`,其主要作用是将处理后的数据推送到旺店通系统。以下是该接口的元数据配置: ```json { "api": "wdt.vip.wms.stockinout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FDate,FStockId_FNumber", "bodyName": "details_listss", "bodySum": ["F_UHZG_JJQty"], "header": ["FBillNo", "FStockId_FNumber", "FBillTypeID", "Fnote"], "body": ["FMaterialId_FNumber", "FQty", "FPrice", "FLOT", "F_UHZG_JJQty"] }, "request": [ { "field": "api_outer_no", "label": "接口外部单号", "type": "string", "describe": "调用本接口时推送的唯一单据编号,避免重复推送数据", "value": "{FBillNo}" }, { "field": "warehouse_no", "label": "仓库编号", ... ``` #### 数据请求与清洗 在数据转换之前,我们需要先从金蝶系统中获取盘亏单的数据。这一步骤涉及对原始数据进行清洗和预处理,以确保其符合目标系统的要求。 ```json { // 示例请求参数 FBillNo: 'PKD123456', FDate: '2023-10-01', FStockId_FNumber: 'WH001', FBillTypeID: '盘亏单', Fnote: '库存调整', details_listss: [ { FMaterialId_FNumber: 'MAT001', FQty: 100, FPrice: 10.5, FLOT: 'BATCH001', F_UHZG_JJQty: 95 } ] } ``` #### 数据转换与写入 在清洗后的数据基础上,我们需要将其转换为旺店通API能够接受的格式。这里我们利用元数据配置中的`operation`字段来定义转换规则。 1. **头部信息映射**: - `FBillNo` -> `api_outer_no` - `FStockId_FNumber` -> `warehouse_no` - `FBillTypeID` -> `order_type` - `Fnote` -> `remark` 2. **货品明细映射**: - `details_listss.FMaterialId_FNumber` -> `spec_no` - `details_listss.F_UHZG_JJQty` -> `num` - `details_listss.FPrice` -> `price` - `details_listss.FLOT` -> `batch_no` 以下是最终生成的请求体示例: ```json { api_outer_no: 'PKD123456', warehouse_no: 'WH001', order_type: '1', // 出库类型 auto_check: '1', // 自动审核 remark: '库存调整', goods_list: [ { spec_no: 'MAT001', num: 95, price: 10.5, batch_no: 'BATCH001' } ] } ``` #### 接口调用 通过轻易云平台,我们可以直接使用POST方法将上述请求体发送到旺店通·企业奇门API接口,实现数据的写入。 ```javascript const axios = require('axios'); axios.post('https://api.wangdian.cn/openapi2/wdt.vip.wms.stockinout.order.push', { api_outer_no: 'PKD123456', warehouse_no: 'WH001', order_type: '1', auto_check: '1', remark: '库存调整', goods_list: [ { spec_no: 'MAT001', num: 95, price: 10.5, batch_no: 'BATCH001' } ] }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` 通过以上步骤,我们成功地将金蝶盘亏单的数据转换并写入到旺店通系统,实现了两个异构系统间的数据无缝对接。这不仅提高了业务流程的效率,也确保了数据的一致性和准确性。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)