轻易云ETL过程解析:将旺店通数据写入金蝶云星空

  • 轻易云集成顾问-黄宏棵
### 旺店通·企业奇门数据集成到金蝶云星空案例分享 在实际业务操作中,电商平台的退货入库单如何高效对接到ERP系统是关乎运营效率的关键一环。本文将聚焦于一个技术方案,详细介绍旺店通·企业奇门的数据如何通过API接口wdt.stockin.order.query.refund获取退货入库单,并成功批量写入到金蝶云星空,通过其batchSave API实现销售退货单的创建。 #### 技术背景与需求分析 为了满足快速、大量的数据集成需求,本案采用了支持高吞吐量的数据写入能力的解决方案,使得大量数据能够迅速从旺店通·企业奇门系统传输至金蝶云星空。同时,为确保数据处理过程中的透明度和可控性,我们利用集中监控和告警系统来实时跟踪任务状态及性能。 #### 数据抓取与转换逻辑 第一步,在配置旺店通·企业奇门API接口(wdt.stockin.order.query.refund)以按时、可靠地抓取退货入库单数据时,需要特别注意接口分页和限流问题。我们通过自定义数据转换逻辑,将这些原始数据转化为符合金蝶云星业务规则的数据格式。 其次,通过轻易云提供的可视化工具设计并管理整个流程,使每个步骤都一目了然。尽管多个来源可能带来复杂性,但我们依旧能通过统一视图方便地掌握所有API资产情况,实现资源高效利用和优化配置。 #### 确保不漏单策略与异常处理机制 在执行大规模批量集成时,防止漏单是首要目标之一。因此,在调用wdt.stockin.order.query.refund获取订单后,会进行一次完整性的校验,并安装自动重试机制应对潜在异常。此外,自定义监控与日志记录功能使我们可以及时发现并处理任何意外情况,这样不仅提高了鲁棒性,也降低了因人为操作失误引发的问题风险。 此次技术案例展示了如何有效整合两个不同的平台,让它们无缝联动,从而显著提升业务运作效率。接下来,我们将更深入探讨具体实现细节,包括各阶段涉及的代码示例和最佳实践。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockin.order.query.refund获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`,获取退货入库单数据并进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用接口。以下是元数据配置的关键部分: ```json { "api": "wdt.stockin.order.query.refund", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockin_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":"入库单状态 10已取消20编辑中30待审核60待结算80已完成(默认查询80已完成单据)","value":"80,60,30"}, {"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息"}, {"field":"time_type","label":"时间类型","type":"string","describe":"0:最后修改时间,1:创建时间 2:预入库单关联时间 默认为0","value":"1"}, {"field":"stockin_no","label":"入库单号","type":"string"} ], "otherRequest": [ {"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~50,不传本参数,输入值默认为40,使用举例单击这里","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始","value":"{PAGINATION_START_PAGE}"} ], "autoFillResponse": true } ``` #### 请求参数详解 - `start_time` 和 `end_time`: 用于增量获取数据,通过设置这两个参数可以确保只获取特定时间段内的数据。 - `status`: 指定要查询的入库单状态,这里默认查询状态为80(已完成)、60(待结算)和30(待审核)的单据。 - `shop_no`: 店铺编号,用于区分不同店铺的数据。 - `time_type`: 时间类型,这里设置为1表示按照创建时间进行查询。 - `stockin_no`: 入库单号,可以用于精确查询特定的入库单。 分页参数: - `page_size`: 每页返回的数据条数,这里可以根据需求设置,一般建议设置在合理范围内以避免接口超时。 - `page_no`: 页码,从0开始。 #### 数据请求与清洗 在发起请求后,我们将获得一批退货入库单的数据。这些数据需要经过初步清洗,以确保其符合目标系统的要求。以下是一个简单的数据清洗示例: ```python import requests import json # 设置请求头和URL url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.refund' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'start_time': '2023-01-01 00:00:00', 'end_time': '2023-01-31 23:59:59', 'status': '80,60,30', 'shop_no': 'SHOP123', 'time_type': '1', 'page_size': '50', 'page_no': '0' } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗示例 cleaned_data = [] for record in data['orders']: cleaned_record = { 'order_no': record['order_no'], 'stockin_id': record['stockin_id'], # 添加其他需要的字段,并进行必要的转换和清洗 } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(cleaned_data) else: print(f"请求失败,状态码:{response.status_code}") ``` #### 数据转换与写入 在完成初步清洗后,我们可以将这些数据转换为目标系统所需的格式,并写入到目标系统中。这个过程通常涉及字段映射、数据类型转换等操作。 例如,将清洗后的退货入库单数据转换为金蝶销售退货单所需的格式: ```python def transform_to_kingdee_format(cleaned_data): kingdee_data = [] for record in cleaned_data: kingdee_record = { 'KingdeeOrderNo': record['order_no'], 'KingdeeStockInId': record['stockin_id'], # 添加其他映射字段,并进行必要的转换 } kingdee_data.append(kingdee_record) return kingdee_data # 转换后的金蝶格式数据 kingdee_formatted_data = transform_to_kingdee_format(cleaned_data) print(kingdee_formatted_data) ``` 通过上述步骤,我们成功地从旺店通·企业奇门接口获取了退货入库单数据,并进行了初步加工,为后续的数据写入和进一步处理打下了坚实基础。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:将源平台数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是关键的一环。本文将详细探讨如何使用轻易云数据集成平台,将旺店通退货入库单的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们从源平台(旺店通)获取退货入库单的数据。这一步涉及对源数据进行清洗和过滤,确保数据的准确性和完整性。根据元数据配置,我们需要对`shop_no`字段进行一系列的逻辑判断,排除特定值的数据。 ```json "condition":[ [{"field":"shop_no","logic":"neq","value":"10"}, ...] ] ``` #### 数据转换与写入 接下来,我们进入数据转换阶段,将清洗后的数据按照金蝶云星空API接口的要求进行格式转换。以下是关键字段及其配置: 1. **单据类型(FBillTypeID)**: - 固定值为`WDTTHRKD`。 - 配置示例: ```json {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"WDTTHRKD"} ``` 2. **单据编号(FBillNo)**: - 从源数据中的`stockin_no`字段获取。 - 配置示例: ```json {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{stockin_no}"} ``` 3. **销售组织(FSaleOrgId)**: - 通过解析器从特定集合中查找对应的组织编号。 - 配置示例: ```json {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find email from 183a74eb-450e-3f1a-bcd2-14d4d025221e where shop_no={shop_no}"} ``` 4. **日期(FDate)**: - 从源数据中的`check_time`字段获取。 - 配置示例: ```json {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{check_time}"} ``` 5. **库存组织(FStockOrgId)**: - 类似销售组织,通过解析器查找对应的库存组织编号。 - 配置示例: ```json {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find zip from 183a74eb-450e-3f1a-bcd2-14d4d025221e where shop_no={shop_no}"} ``` 6. **退货客户(FRetcustId)**: - 直接使用`shop_no`字段。 - 配置示例: ```json {"field":"FRetcustId","label":"退货客户","type": "string", "describe": "基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{shop_no}"} ``` 7. **明细信息(FEntity)**: - 包含物料编码、实退数量、退换货类型、仓库等多个子字段。 - 配置示例: ```json { "field": "FEntity", "label": "明细信息", "type": "array", "children": [ {"field": "FMaterialId", "label": "物料编码", "type": "string", "describe": "基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{details_list.goods_no}}"}, {"field": "FRealQty", "label": "实退数量", "type": "string", "describe": "数量", "value": "{{details_list.goods_count}}"}, ... ], ... } ``` 8. **财务信息(SubHeadEntity)**: - 包含结算组织等子字段。 - 配置示例: ```json { "field": "SubHeadEntity", ... ... } } ``` #### 批量保存操作 最后,将转换后的数据通过批量保存操作写入金蝶云星空。我们使用API接口`batchSave`,并配置相关参数: ```json { ... {"field": "FormId", ... , value: ... }, {"field" : ...}, ... } ``` 通过以上步骤,我们实现了从旺店通到金蝶云星空的数据无缝对接。这不仅提高了业务处理效率,还确保了数据的一致性和准确性。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)