轻易云平台ETL:旺店通采购退货单到用友BIP采购入库单的转换
### 旺店通·企业奇门数据集成到用友BIP案例分享:采购退货单=>采购入库单(下推)-p
在本文中,我们将深入探讨如何通过轻易云数据集成平台,将旺店通·企业奇门的数据高效地对接到用友BIP系统,实现采购退货单至采购入库单的自动化下推。我们主要专注于处理大量数据的快速写入、接口分页及限流问题,以及异常处理和错误重试机制等技术细节。
为了实现这个数据集成方案,我们首先需要调用旺店通·企业奇门提供的API `wdt.stockout.order.query.return` 获取商品退货信息,然后通过用友BIP API `/yonbip/scm/purinrecord/mergeSourceData/save` 将这些数据批量写入到用友BIP中。在这一过程中,确保不漏单是至关重要的一环。我们采用定时抓取机制,可靠地从旺店通·企业奇门接口获取最新的数据,并实时监控和日志记录整个处理过程,以及时发现并解决潜在的问题。
由于旺店通·企业奇门与用友BIP之间存在一定的数据格式差异,因此我们还需进行必要的数据映射和转换。此外,为了提高系统性能和响应速度,在处理大规模数据时,我们会考虑分页抓取以及限流控制,避免因一次性请求过多导致接口超时或失败。
下面将详细介绍该案例实际运行中的具体配置方案与技术实现方法,包括接口调用、数据转换、异常处理等关键环节,以供参考。
![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D26.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据
在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.return`来获取并加工采购退货单数据。
#### 接口调用配置
首先,我们需要配置接口的元数据。以下是接口`wdt.stockout.order.query.return`的元数据配置:
```json
{
"api": "wdt.stockout.order.query.return",
"method": "POST",
"number": "order_no",
"id": "stockout_id",
"pagination": {
"pageSize": 50
},
"idCheck": true,
"request": [
{
"field": "start_time",
"label": "开始时间",
"type": "string",
"value": "{{LAST_SYNC_TIME|datetime}}"
},
{
"field": "end_time",
"label": "结束时间",
"type": "string",
"describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{CURRENT_TIME|datetime}}"
},
{
"field": "warehouse_no",
"label": "仓库编号",
"type": "string"
},
{
"field": "status",
"label": "出库单状态",
"type": "string",
"describe":"出库单状态5:已取消,50:待审核,55:已审核,95:已发货,110:已完成(默认查已发货已完成单据)"
},
{
"field":"page_no",
"label":"页号",
"type":"string",
"value":"{PAGINATION_START_PAGE}"
},
{
"field":"page_size",
"label":"分页大小",
"type":"string",
“describe”:”每页返回的数据条数,输入值范围1~30,不传本参数,输入值默认为30,”,
“value”:”{PAGINATION_PAGE_SIZE}”
},
{
“field”:”src_order_no”,
“label”:”上层单据编号”,
“type”:”string”
}
]
}
```
#### 参数详解
- `start_time` 和 `end_time`: 用于定义查询的时间范围。`start_time`通常设置为上次同步的时间点,而`end_time`则为当前时间,以确保获取到最新的数据。
- `warehouse_no`: 指定仓库编号,用于过滤特定仓库的数据。
- `status`: 出库单状态,可以根据需求过滤不同状态的出库单,例如已发货、已完成等。
- `page_no` 和 `page_size`: 分页参数,用于控制每次请求返回的数据量和分页位置。
#### 数据请求与清洗
在配置好元数据后,通过轻易云平台发起POST请求,从旺店通·企业奇门接口获取原始数据。以下是一个示例请求体:
```json
{
“start_time”: “2023-09-01 00:00:00”,
“end_time”: “2023-09-30 23:59:59”,
“warehouse_no”: “WH001”,
“status”: “95,110”,
“page_no”: “1”,
“page_size”: “50”
}
```
该请求将返回指定时间范围内、特定仓库中、状态为“已发货”和“已完成”的采购退货单。
#### 数据转换与写入
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,将日期格式统一、字段名称标准化等。这一步骤可以通过轻易云平台提供的可视化工具实现,无需编写复杂代码。
清洗后的数据可以直接写入目标系统,如ERP或数据库中。以下是一个示例转换规则:
```json
{
“order_id”: ”stockout_id”,
”order_number”: ”order_no”,
”warehouse_code”: ”warehouse_no”,
”status_code”: ”status”
}
```
通过上述规则,可以将原始字段映射到目标系统所需的字段格式。
#### 实时监控与调试
轻易云平台提供实时监控功能,可以随时查看数据流动和处理状态。一旦出现异常,可以快速定位问题并进行调试。例如,如果某个字段的数据类型不匹配,可以在监控界面中查看详细错误信息,并及时修正。
综上所述,通过轻易云数据集成平台,我们能够高效地调用旺店通·企业奇门接口,获取并加工采购退货单数据,为后续的数据处理和业务决策提供可靠支持。
![打通钉钉数据接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台ETL转换:采购退货单到采购入库单
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台用友BIP API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台配置元数据,实现采购退货单到采购入库单的转换和写入。
#### 接口配置与请求参数
为了将采购退货单的数据转换并写入到用友BIP系统,我们需要调用`/yonbip/scm/purinrecord/mergeSourceData/save` API接口。该接口支持POST方法,并且需要确保请求的幂等性。以下是具体的请求参数配置:
1. **resubmitCheckKey**
- **字段类型**: string
- **描述**: 保证请求的幂等性,该值由客户端生成,并且必须是全局唯一的长度不能超过32位。
- **示例值**: `{order_no}_1`
2. **mergeSourceData**
- **字段类型**: string
- **描述**: 固定值传入true。
- **示例值**: `true`
3. **needCalcLines**
- **字段类型**: string
- **描述**: 表体行计算标识,固定值传入true。
- **示例值**: `true`
4. **calcLinesKey**
- **字段类型**: string
- **描述**: 表体行计算依据,固定值传入`oriTaxUnitPrice`。
- **示例值**: `oriTaxUnitPrice`
5. **code**
- **字段类型**: string
- **描述**: 单据编号,以系统编码规则配置为准。
- **示例值**: `{order_no}`
6. **vouchdate**
- **字段类型**: string
- **描述**: 单据日期,格式为YYYYMMDD。
- **示例值**: `{{consign_time|date}}`
7. **bustype**
- **字段类型**: string
- **描述**: 交易类型id或交易类型code。
- **示例值**: `A20003`
8. **warehouse**
- **字段类型**: string
- **描述**: 仓库id或仓库code。
- **示例值**: `{warehouse_no}`
9. **memo**
- **字段类型**: string
- **描述**: 备注信息。
- **示例值**: `{remark}`
10. **_status**
- **字段类型**: string
- **描述**: 操作标识,新增时传入Insert。
- **示例值**: `Insert`
#### 子表配置
对于采购入库单子表(`purInRecords`),我们需要配置以下字段:
1. **makeRuleCode**
- 字段类型:string
- 描述:生单规则编码,固定值为`st_purchaseorder_return`。
- 示例值:`st_purchaseorder_return`
2. 其他子表字段包括:
```json
[
{
"field": "sourceid",
"label": "上游单据主表id",
"type": "string",
"value": "_mongoQuery 39bc45c8-c417-37df-8f20-d136f76b1a7a findField=content.new_id where={\"content.code\":{\"$eq\":\"{pr_api_outer_no}\"},\"content.product_cCode\":{\"$eq\":\"{{details_list.goods_no}}\"}}"
},
{
"field": "sourceautoid",
"label": "上游单据子表id",
"type": "string",
"value": "_mongoQuery 39bc45c8-c417-37df-8f20-d136f76b1a7a findField=content.new_purchaseOrders_id where={\"content.code\":{\"$eq\":\"{pr_api_outer_no}\"},\"content.product_cCode\":{\"$eq\":\"{{details_list.goods_no}}\"}}"
},
{
"field": "qty",
"label": "数量",
"type": "string",
"describe": "默认上游带入,若传入数量请确保表体行计算标识needCalcLines=true,并确认calcLinesKey是否符合实际业务场景。",
"value": "_function {{details_list.goods_count}}*(-1)"
},
{
"field": "oriUnitPrice",
"label": "无税单价",
"type": "string",
"describe": "仅在表头参数表体行计算标识needCalcLines=true,且calcLinesKey指定当前字段为计算依据时生效。",
"value": "{{details_list.sell_price}}"
},
{
"field": "oriTaxUnitPrice",
"label": "含税单价",
"type": "string",
"describe": "",
// 使用MongoDB查询获取含税单价信息
// 示例代码中省略了具体实现细节,请根据实际情况补充完整
},
{
// 其他必要的子表字段配置...
}
]
```
#### 实现步骤
1. 配置API接口及其请求参数,将上述元数据配置填充至轻易云数据集成平台中。
2. 确保所有必需的参数均已正确映射并验证其有效性。
3. 执行ETL过程,通过API接口将转换后的数据写入用友BIP系统。
通过以上步骤,我们能够实现从采购退货单到采购入库单的数据转换和写入。这不仅提高了数据处理效率,还保证了数据的一致性和准确性。
![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)