轻易云平台:ETL转换与金蝶云星辰V2API对接实践

  • 轻易云集成顾问-卢剑航
### 线上旺店通销售出库单对接星辰销售订单-ok 成功实现企业信息化的关键在于高效、准确的数据集成。本案例将深入探讨如何通过轻易云数据集成平台,将旺店通·企业奇门中的销售出库单数据无缝对接并写入到金蝶云星辰V2中。该解决方案不仅确保了数据的实时性和完整性,还大幅提升了业务运作效率。 为实现这一目标,我们需使用两个关键API:`wdt.stockout.order.query.trade`用于从旺店通·企业奇门系统中获取销售出库单数据,`/jdy/v2/scm/sal_order`则是向金蝶云星辰V2写入相应的销售订单。 首先,通过调用 `wdt.stockout.order.query.trade` 接口,从旺店通获取原始的销售出库单数据。在这个过程中,需要考虑API接口分页和限流问题,以确保所有订单都能被顺利抓取。此外,针对不同业务场景,可根据具体需求自定义数据转换逻辑,确保从源头上处理好数据格式差异,并准备好适合金蝶云星辰V2输入的数据结构。 其次,在传输大量销售信息至金蝶云星辰时,高吞吐量的数据写入能力成为决定项目成功与否的重要因素。利用 `/jdy/v2/scm/sal_order` API,可以将批量整理后的销售信息快速、稳定地写入到金蝶云系统,为后续业务环节提供精准的数据支持。同时,通过设置可靠的错误重试机制,能够有效应对在网络波动或API响应异常情况下造成的失败请求,保证最终的一致性。 此外,为预防因意外导致的信息丢失及加强整体任务管理,我们还引入了集中监控和告警系统。这些工具可以实时跟踪每个数据集成任务状态与性能,并及时发出异常报警,让技术团队迅速定位问题并进行修复。 最后,为实现全流程可视化管理,本方案借助轻易云的平台特性,通过统一视图展示整个数据流设计,这使得优化配置更加直观,使得技术人员可以更加灵活地调整各项参数,以达到最佳效果。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的详细配置: - **API**: `wdt.stockout.order.query.trade` - **请求方法**: `POST` - **主要字段**: - `order_no`: 订单编号 - `stockout_id`: 出库单ID - `consign_time`: 发货时间(需转换为`consign_date`) #### 请求参数配置 为了实现增量数据获取,我们需要设置请求参数。以下是关键的请求参数及其描述: - **start_time**: 开始时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。该值通常取自上次同步时间(`{{LAST_SYNC_TIME|datetime}}`)。 - **end_time**: 结束时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。该值通常取当前时间(`{{CURRENT_TIME|datetime}}`)。 - **status**: 状态过滤,取值范围包括:5已取消,55已审核,95已发货,105部分打款,110已完成,113异常发货。我们选择了95、105、110和113状态。 - **shop_no**: 店铺编号,用于区分不同店铺的数据。 - **warehouse_no**: 仓库编号,用于区分不同仓库的数据。 - **page_size**和**page_no**: 分页参数,每页返回的数据条数和页号。 以下是一个示例请求配置: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "status": "95,105,110,113", "shop_no": "指定店铺编号", "warehouse_no": "指定仓库编号", "page_size": "{PAGINATION_PAGE_SIZE}", "page_no": "{PAGINATION_START_PAGE}" } ``` #### 数据清洗与转换 在接收到原始数据后,我们需要对其进行清洗和转换,以便后续处理。以下是主要的清洗与转换操作: 1. **字段重命名**: - 将原始字段`consign_time`重命名为`consign_date`。 2. **日期格式转换**: - 将字段`consign_date`的日期格式进行标准化处理。 示例代码如下: ```python def transform_data(raw_data): transformed_data = [] for record in raw_data: transformed_record = { "order_no": record["order_no"], "stockout_id": record["stockout_id"], "consign_date": format_date(record["consign_time"]) } transformed_data.append(transformed_record) return transformed_data def format_date(date_str): # 假设输入日期格式为 'yyyy-MM-dd HH:mm:ss' from datetime import datetime date_obj = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S') return date_obj.strftime('%Y-%m-%d') ``` #### 条件过滤 根据业务需求,我们可能需要对返回的数据进行条件过滤。例如,仅保留特定店铺和仓库的数据: ```json "condition":[ [ {"field":"shop_no","logic":"neqv2","value":"KH01181"}, {"field":"warehouse_no","logic":"in","value":"CK00001,CK00002,CK00008,CK00009,CK00010,CK00011,CK00012,CK00013,CK00014"} ] ] ``` 通过上述条件过滤,可以确保仅处理符合业务需求的数据,从而提高数据处理效率。 #### 自动填充响应 为了简化后续处理流程,我们可以启用自动填充响应功能,使得平台自动将处理后的数据填充到目标系统中。这一步骤可以通过配置元数据中的`autoFillResponse:true`来实现。 综上所述,通过轻易云数据集成平台调用旺店通·企业奇门接口并对数据进行初步加工,可以高效地实现不同系统间的数据无缝对接,为后续的数据处理和分析奠定坚实基础。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星辰V2API接口对接技术案例 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。 #### API接口配置 根据元数据配置,我们需要将线上旺店通销售出库单的数据转换并写入金蝶云星辰V2。以下是具体的API接口配置: ```json { "api": "/jdy/v2/scm/sal_order", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"bill_no","label":"订单编码","type":"string","describe":"销售订单编码","value":"{stockout_no}"}, {"field":"remark","label":"单据备注","type":"string","describe":"备注","value":"{remark}"}, {"field":"customerid_id","label":"客户ID","type":"string","describe":"旺店通订单上店铺编码"}, {"field":"bill_date","label":"订单日期","type":"string","describe":"销售订单日期{consign_time}","value":"{consign_time}"}, {"field":"customer_number","label":"客户编码","type":"string","describe":"单据来源","value":"{shop_no}"}, {"field":"operation_key","label":"操作类型","type":"string","value":"audit"}, {"field":"bill_stock_id","label":"仓库","type":"string", "value": "_mongoQuery dcf15639-66d6-3904-821c-5bc5e2d89a62 findField=content.id where={\"content.number\":{\"$eq\":\"{warehouse_no}\"}}"}, {"field":"emp_number","label":"业务员","type":"string","value": "ZY00007"}, { "field": "custom_field", "label": "自定义字段", "type": "object", "children": [ {"field": "custom_field__1__4xieazfpq8cdhjia", "label": "订单编号", "type": "string", "value": "{trade_no}"}, {"field": "custom_field__1__45nbzlh8blt7", "label": "分销名称", "type": "string", "value": "{fenxiao_nick}"} ] }, { "field": "material_entity", "label": "分录明细", "type": "array", "describe": "分录明细", "value": "details_list", "children":[ {"field": "material_number", "label": 物料编码, type: string, describe: 物料编码, value: {{details_list.spec_no}}}, {"field": qty, label: 数量, type: string, describe: 数量, value: {{details_list.goods_count}}}, { field: unit_id, label: 单位, type: string, describe: 单位, value: _mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"{{details_list.spec_no}}\"}}, default: 6 }, { field: price, label: 单价, type: string, describe: 单价, value: _function ('{{details_list.sell_price}}'*'{{details_list.goods_count}}'+'{{details_list.share_post}}')\/{{details_list.goods_count}} }, { field: sp_id, label: 仓位ID, type: string, value: _function case '{warehouse_no}' when 'CK00001' then '1099179991205176320' else '' end }, { field:is_free,label:"是否赠品",type:"string",value:"_function case '{{details_list.sell_price}}' when '0.0000' then 'true' else 'false' end" }, { field:"stock_id",label:"仓库id",type:"string",value:"_mongoQuery dcf15639-66d6-3904-821c-5bc5e2d89a62 findField=content.id where={\"content.number\":{\"$eq\":\"{warehouse_no}\"}}" }, { field:"comment",label:"商品行备注",type:"string",value:"_function case when '{shop_no}' in ('KH01227','KH01310','KH00772') then '{trade_no}({cs_remark})' when '{{details_list.sell_price}}' ='0.0000' then '{src_trade_no}({cs_remark})' else '' end" } ] } ] } ``` #### 数据字段解析与转换 1. **订单基础信息** - `bill_no`:从源数据中的`stockout_no`字段提取,用于标识销售订单编码。 - `remark`:从源数据中的`remark`字段提取,作为单据备注。 - `customerid_id`:直接映射旺店通订单上的店铺编码。 - `bill_date`:从源数据中的`consign_time`字段提取,表示销售订单日期。 - `customer_number`:从源数据中的`shop_no`字段提取,表示客户编码。 - `operation_key`:固定值为`audit`,表示操作类型。 2. **仓库信息** - `bill_stock_id`: 使用MongoDB查询,根据仓库编号获取对应的仓库ID。 3. **业务员信息** - `emp_number`: 固定值为`ZY00007`. 4. **自定义字段** - `custom_field__1__4xieazfpq8cdhjia`: 映射源数据中的订单编号(`trade_no`)。 - `custom_field__1__45nbzlh8blt7`: 映射源数据中的分销名称(`fenxiao_nick`)。 5. **分录明细** - 每个分录明细包含多个字段,如物料编码、数量、单位、单价等: - `material_number`: 映射源数据中的规格编号(`spec_no`)。 - `qty`: 映射源数据中的商品数量(`goods_count`)。 - `unit_id`: 使用MongoDB查询,根据规格编号获取对应的单位ID,默认值为6。 - `price`: 使用函数计算每个商品的单价,公式为(`sell_price * goods_count + share_post`) / goods_count。 - `sp_id`: 使用条件判断,根据仓库编号设置仓位ID。 - `is_free`: 使用条件判断,如果售价为0,则标记为赠品。 - `stock_id`: 使用MongoDB查询,根据仓库编号获取对应的仓库ID。 - `comment`: 根据不同条件设置商品行备注。 #### 数据写入目标平台 通过上述配置和转换,将处理后的数据发送到金蝶云星辰V2API接口。整个过程确保了数据格式符合目标平台的要求,并且每个字段都进行了适当的处理和映射。 这种方法不仅提高了数据集成的效率,还确保了数据的一致性和准确性。在实际应用中,可以根据具体需求进一步优化和调整元数据配置,以满足不同业务场景的需求。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)