### 系统对接集成案例分享:旺店通·企业奇门数据集成到用友BIP
在电子商务快速发展的背景下,如何高效、准确地处理退换货订单成为了各个企业关注的焦点。具体而言,将旺店通·企业奇门所生成的销售退货数据无缝集成到用友BIP系统中,是一个典型且复杂的技术挑战。本文聚焦于实际运行的方案“退换货生成销售退货(线下)-p”,详细探讨相关技术细节与实现方法。
首先,确保在从旺店通获取数据时不漏单至关重要。因此,我们通过定时抓取机制调用企业奇门接口`wdt.refund.query`,实时监控并记录每一次查询操作。同时,为保证大量数据能快速、高效地写入到用友BIP,我们采用批量提交策略,并灵活运用了分页和限流机制,有效避免了网络拥堵和服务器压力过大等问题。
为了应对不同系统间的数据格式差异,我们设计并实现了一套自适应的数据映射模型,使得从旺店通获取的原始退款信息能够自动转换为符合用友BIP API `/yonbip/sd/vouchersalereturn/singleSave`要求的数据格式。在此过程中,不可忽视的是异常处理与错误重试机制,它们保障了整个流程的可靠性,即便遇到意外情况也能迅速恢复正常。
总之,通过精巧设计和严格验证,这一解决方案不仅提高了业务效率,还大幅减少了手动干预,从而提升整体运营水平。接下来将深入探讨具体步骤及代码实现细节,希望能为类似需求提供参考路径。
![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口wdt.refund.query获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.refund.query`,并对获取的数据进行初步加工。
#### 接口调用配置
首先,我们需要配置接口调用的元数据。根据提供的元数据配置,`wdt.refund.query`接口使用POST方法,主要参数如下:
- `process_status`: 退换单处理状态
- `time_type`: 时间类型(0为最后更新时间,1为结算时间)
- `start_time`: 开始时间
- `end_time`: 结束时间
- `page_size`: 分页大小(默认40)
- `shop_no`: 店铺编号
- `page_no`: 页号(默认从0页开始)
- 其他可选参数包括:`refund_no`, `src_refund_no`, `trade_no`, `tid`
#### 数据请求与清洗
在调用接口时,我们需要设置请求条件,以确保获取的数据符合业务需求。以下是具体的请求条件配置:
```json
{
"process_status": {"logic": "egt", "value": "70", "strictMode": true},
"type": {"logic": "eq", "value": 2},
"shop_no": {"logic": "eq", "value": "SJ002"}
}
```
上述条件表示我们希望获取处理状态大于等于70且类型为2,并且店铺编号为SJ002的退换货记录。类似的条件可以根据不同的店铺编号和类型进行组合。
#### 数据转换与写入
在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。以下是一个简单的数据清洗示例:
```python
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
cleaned_record = {
"refund_id": record.get("refund_id"),
"refund_no": record.get("refund_no"),
"process_status": record.get("process_status"),
"shop_no": record.get("shop_no"),
# 添加其他需要的字段
}
cleaned_data.append(cleaned_record)
return cleaned_data
```
在这个函数中,我们提取了原始记录中的`refund_id`, `refund_no`, `process_status`, 和`shop_no`字段,并将其存储到新的列表中。
#### 分页处理
由于接口返回的数据可能会非常庞大,因此分页处理是必要的。在元数据配置中,分页大小已经设置为40。我们可以通过循环调用接口来处理分页数据:
```python
def fetch_all_data():
page_no = 0
all_data = []
while True:
response = call_api(page_no=page_no, page_size=40)
data = response.get("data")
if not data:
break
all_data.extend(data)
page_no += 1
return all_data
```
在这个函数中,我们通过循环不断增加页号来获取所有分页数据,直到没有更多数据返回为止。
#### 实际应用案例
假设我们需要获取某一时间段内所有符合条件的退换货记录,并将其写入到目标数据库中,可以按照以下步骤进行:
1. **设置时间范围**:确定开始时间和结束时间。
2. **调用接口**:使用上述分页处理函数获取所有符合条件的数据。
3. **数据清洗**:对原始数据进行清洗和转换。
4. **写入数据库**:将清洗后的数据写入目标数据库。
```python
start_time = "2023-01-01 00:00:00"
end_time = "2023-01-31 23:59:59"
raw_data = fetch_all_data(start_time=start_time, end_time=end_time)
cleaned_data = clean_data(raw_data)
# 假设有一个函数write_to_db用于写入数据库
write_to_db(cleaned_data)
```
通过以上步骤,我们可以高效地从旺店通·企业奇门接口获取所需的退换货记录,并进行相应的数据处理和存储。这不仅提高了数据集成的效率,也确保了数据的一致性和准确性。
![打通用友BIP数据接口](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image)
### 用友BIPAPI接口数据集成技术案例:退换货生成销售退货
在轻易云数据集成平台的生命周期中,数据转换与写入是关键步骤之一。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,并转为用友BIPAPI接口所能够接收的格式,最终写入目标平台。
#### 数据转换与写入配置
1. **API接口配置**
目标平台用友BIP的API接口配置如下:
```json
{
"api": "/yonbip/sd/vouchersalereturn/singleSave",
"method": "POST",
"idCheck": true,
"BIPAudit": "/yonbip/sd/vouchersalereturn/approve"
}
```
2. **请求头配置**
请求头部分主要包含单据编码、销售组织、交易类型等信息。以下是具体字段及其值的配置:
```json
[
{"field":"resubmitCheckKey","label":"保证请求的幂等性","type":"string","value":"{refund_no}"},
{"field":"code","label":"单据编码","type":"string","value":"{refund_no}"},
{"field":"salesOrgId","label":"销售组织","type":"string","value":"_findCollection find mapping_sale_org from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}"},
{"field":"transactionTypeId","label":"交易类型","type":"string","value":"1480261131563434158"},
{"field":"agentId","label":"客户","type":"string","value":"_findCollection find mapping_customer from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}"}
// 其他字段略...
]
```
3. **请求体配置**
请求体部分包括表头和表体信息,表头信息主要包括退货单的基本信息,如退货金额、仓库编号等;表体信息则包括每个退货商品的详细信息。以下是具体字段及其值的配置:
```json
{
"header": ["refund_no", "shop_no", "remark", "modified", "actual_refund_amount", "warehouse_no", "tid"],
"body": [
{"field": "refund_order_list_spec_no", "value": "{{refund_order_list.refund_order_list_spec_no}}"},
{"field": "refund_order_list_refund_num", "value": "{{refund_order_list.refund_order_list_refund_num}}"},
{"field": "refund_order_list_refund_order_amount", "value": "{{refund_order_list.refund_order_list_refund_order_amount}}"},
// 其他字段略...
]
}
```
4. **数据转换逻辑**
在数据转换过程中,需要进行一些计算和格式化处理。例如,含税成交价、无税单价、含税金额等字段需要根据原始数据进行计算:
```json
{
"oriTaxUnitPrice": "_function round((round({{refund_order_list.refund_order_list_refund_order_amount}},2)/{{refund_order_list.refund_order_list_refund_num}}),2)",
"oriUnitPrice": "_function round((round({{refund_order_list.refund_order_list_refund_order_amount}},2)/{{refund_order_list.refund_order_list_refund_num}})/1.13,2)",
// 其他计算字段略...
}
```
5. **幂等性保证**
为了确保请求的幂等性,需要设置`resubmitCheckKey`,该值由客户端生成,并且必须是全局唯一的,长度不能超过32位:
```json
{
"resubmitCheckKey": "{refund_no}"
}
```
6. **提交与审核**
最后,将转换后的数据通过POST方法提交到用友BIPAPI接口,并调用审核接口进行审核:
```json
{
"method": "POST",
"url": "/yonbip/sd/vouchersalereturn/singleSave",
// 提交的数据内容略...
}
{
"method": "POST",
"url": "/yonbip/sd/vouchersalereturn/approve",
// 审核的数据内容略...
}
```
通过以上步骤,我们实现了从源平台到用友BIP目标平台的数据ETL转换与写入。每个环节都需要严格按照元数据配置进行,以确保数据准确无误地传输和处理。
![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T10.png~tplv-syqr462i7n-qeasy.image)