利用轻易云集成金蝶云星空和旺店通的详细技术方案

  • 轻易云集成顾问-胡秀丛
### 旺店通销售出库单集成到金蝶云星空的技术实现 在本案例中,我们将分享如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据无缝对接至金蝶云星空,具体涉及将销售出库单(渠道关联)信息成功迁移到金蝶系统中。为了确保整个过程高效、可靠且透明,对各项技术细节进行了优化与详细配置。 首先,我们需要调用旺店通·企业奇门提供的API接口`wdt.stockout.order.query.trade`来获取最新的销售出库单数据。在获取过程中,由于数据量庞大且接口有分页和限流限制,需要合理设计调度任务,定时抓取并进行缓存处理,避免漏单现象。这一步骤通过批次操作及多线程技术,大幅度提升了数据提取效率。 随后,将抓取的数据迅速写入到金蝶云星空,其中利用其提供的批量保存接口`batchSave`。考虑到两端系统在字段格式及结构上的差异,通过定制化的数据映射以及转换逻辑,使得传输的数据能够完美适配目标系统。同时,为解决可能发生的异常情况,如网络故障或API响应错误,实现了完善的错误重试机制,并实时监控处理过程中的所有日志记录,以确保每条数据都得到妥善处理。 下面是关键步骤和代码示例: ```python import requests import json # Step 1: Fetch data from 旺店通 using API def fetch_wdt_data(api_url, params): response = requests.get(api_url, params=params) if response.status_code == 200: return response.json() else: # Implement retry mechanism or log error pass # Example parameters for fetching data params = { 'token': 'your_api_token', 'start_time': '2023-01-01', } wdt_data = fetch_wdt_data('https://api.wangdian.cn/wdtstockoutorderquerytrade', params) # Step 2: Transform and map the fetched data to fit 金蝶's format def transform_data(wdt_records): transformed_records = [] for record in wdt_records: transformed_record = { # Map fields accordingly here... } transformed_records.append(transformed_record) return transformed_records mapped_data = transform_data(wdt_data['orders']) # Step 3: Write data into 金蝶 using batchSave API def write_to_kingdee(api_url, token, records): headers = {'Content-Type': 'application/json'} payload = { "records": records, "token": token, # Other necessary parameters... } response = requests.post(api_url, headers=headers, json=payload ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。 #### 接口概述 接口`wdt.stockout.order.query.trade`用于查询销售出库单信息。该接口支持POST请求,并且可以根据多种条件进行查询,例如时间范围、订单状态、店铺编号等。以下是该接口的元数据配置: ```json { "api": "wdt.stockout.order.query.trade", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockout_id", "name": "order_no", "idCheck": true, "request": [ {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "status", "label": "状态", "type": "string", "describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货","value":"95"}, {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"系统订单编号"}, {"field":"src_tid","label":"原始单号","type":"string","describe":"原始单号"}, {"field":"stockout_no","label":"出库单号","type":"string","describe":"出库单号"}, {"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息","value":"HBJBT01"}, {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"}, {"field":"is_by_modified","label":"is_by_modified","type":"string","describe":"is_by_modified"} ], ... } ``` #### 数据请求与清洗 在调用该接口时,我们需要传递一系列参数来限定查询条件。以下是主要参数及其作用: - `start_time` 和 `end_time`: 用于限定查询的时间范围,这两个参数通常使用上次同步时间和当前时间。 - `status`: 用于过滤订单状态,例如“95”表示已发货。 - `shop_no`: 店铺编号,用于区分不同店铺的数据。 - `warehouse_no`: 仓库编号,用于区分不同仓库的数据。 这些参数确保我们能够精确地获取所需的数据,并避免冗余信息。 #### 数据转换与写入 在获取到原始数据后,需要对其进行一定的转换,以便写入目标系统。在这个过程中,我们通常会进行以下操作: 1. **字段映射**: 将源系统中的字段映射到目标系统中的相应字段。例如,将`order_no`映射到目标系统中的订单编号字段。 2. **数据清洗**: 去除无效或重复的数据,并确保数据格式符合目标系统的要求。 3. **增量更新**: 根据上次同步的时间戳,仅处理新增或更新的数据,以提高效率。 #### 实际案例 假设我们需要从旺店通中获取某一时段内所有已发货的销售出库单,并将其写入金蝶系统。我们可以按照以下步骤进行配置和处理: 1. **配置请求参数**: ```json { ... {"field": "start_time", ... , "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", ... , "value": "{{CURRENT_TIME|datetime}}"}, {"field": "status", ... , "value": "95"}, ... } ``` 2. **调用API**: 使用轻易云平台提供的可视化界面配置上述参数,并发送POST请求以获取数据。 3. **处理返回结果**: 对返回的数据进行字段映射和清洗,例如: ```json { ... {source_field: 'order_no', target_field: 'kd_order_no'}, {source_field: 'stockout_id', target_field: 'kd_stockout_id'}, ... } ``` 4. **写入目标系统**: 将处理后的数据通过轻易云平台写入金蝶系统,实现数据的无缝对接。 通过上述步骤,我们可以高效地完成从旺店通到金蝶系统的数据集成。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台金蝶云星空API接口所能接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 1. 配置API接口 为了将数据写入金蝶云星空,我们需要配置API接口。根据提供的元数据配置,目标API为`batchSave`,使用POST方法提交请求。以下是关键配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, ... } ``` #### 2. 数据字段映射与转换 在进行ETL转换时,需要确保源平台的数据字段能够正确映射到目标平台的字段,并进行必要的格式转换。以下是一些关键字段的配置示例: - **单据类型** (`FBillTypeID`): ```json { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSCKD01_SYS" } ``` - **单据编号** (`FBillNo`): ```json { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{order_no}" } ``` - **日期** (`FDate`): ```json { "field": "FDate", "label": `日期{stock_check_time}`, "type": `string`, `describe`: `日期`, `value`: `{consign_time}` } ``` - **发货组织** (`FStockOrgId`): ```json { `field`: `FStockOrgId`, `label`: `发货组织`, `type`: `string`, `describe`: `组织`, `parser`: { `name`: `ConvertObjectParser`, `params`: `FNumber` }, `value`: `_function case when '{warehouse_no}' in ('047','048','051') then '105' when '{warehouse_no}' in ('050','052','049','053','055','057') then '114' else '100' end` } ``` #### 3. 明细信息处理 对于明细信息,需要特别注意数组结构和子字段的处理。例如,物料编码和实发数量等字段: - **物料编码** (`FMaterialID`): ```json { `field`: `FMaterialID`, `label`: `物料编码`, `type`: `string`, `describe`: `物料编码`, `parser`: { `name`: ConvertObjectParser, params: FNumber }, value: {{details_list.goods_no}} } ``` - **实发数量** (`FRealQty`): ```json { field: FRealQty, label: 实发数量, type: string, describe: 实发数量, value: {{details_list.goods_count}} } ``` #### 4. 特殊字段处理 有些字段需要特殊处理,例如根据条件判断值或通过查询获取值: - **是否赠品** (`FIsFree`): ```json { field: FIsFree, label: 是否赠品, type: string, describe: 是否赠品, value: _function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END } ``` - **税率** (`FEntryTaxRate`): ```json { field: FEntryTaxRate, label: 税率, type: string, describe: 税率, value: _mongoQuery findField=content.FEntryTaxRate where={content.FBillNo:{eq:{src_trade_no}},content.FMaterialId_Fnumber:{eq:{details_list.goods_no}}} } ``` #### 总结 通过上述步骤,我们可以利用轻易云数据集成平台,将源平台的数据进行ETL转换,并写入到金蝶云星空API接口中。这一过程涉及多个关键技术点,包括API接口配置、数据字段映射与转换、明细信息处理以及特殊字段处理。通过合理配置元数据,可以确保数据在不同系统之间无缝对接,实现高效的数据集成。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)