轻易云平台: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)