系统对接集成案例分享:旺店通·企业奇门数据集成到用友BIP
在电子商务快速发展的背景下,如何高效、准确地处理退换货订单成为了各个企业关注的焦点。具体而言,将旺店通·企业奇门所生成的销售退货数据无缝集成到用友BIP系统中,是一个典型且复杂的技术挑战。本文聚焦于实际运行的方案“退换货生成销售退货(线下)-p”,详细探讨相关技术细节与实现方法。
首先,确保在从旺店通获取数据时不漏单至关重要。因此,我们通过定时抓取机制调用企业奇门接口wdt.refund.query
,实时监控并记录每一次查询操作。同时,为保证大量数据能快速、高效地写入到用友BIP,我们采用批量提交策略,并灵活运用了分页和限流机制,有效避免了网络拥堵和服务器压力过大等问题。
为了应对不同系统间的数据格式差异,我们设计并实现了一套自适应的数据映射模型,使得从旺店通获取的原始退款信息能够自动转换为符合用友BIP API /yonbip/sd/vouchersalereturn/singleSave
要求的数据格式。在此过程中,不可忽视的是异常处理与错误重试机制,它们保障了整个流程的可靠性,即便遇到意外情况也能迅速恢复正常。
总之,通过精巧设计和严格验证,这一解决方案不仅提高了业务效率,还大幅减少了手动干预,从而提升整体运营水平。接下来将深入探讨具体步骤及代码实现细节,希望能为类似需求提供参考路径。
调用旺店通·企业奇门接口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
数据请求与清洗
在调用接口时,我们需要设置请求条件,以确保获取的数据符合业务需求。以下是具体的请求条件配置:
{
"process_status": {"logic": "egt", "value": "70", "strictMode": true},
"type": {"logic": "eq", "value": 2},
"shop_no": {"logic": "eq", "value": "SJ002"}
}
上述条件表示我们希望获取处理状态大于等于70且类型为2,并且店铺编号为SJ002的退换货记录。类似的条件可以根据不同的店铺编号和类型进行组合。
数据转换与写入
在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。以下是一个简单的数据清洗示例:
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。我们可以通过循环调用接口来处理分页数据:
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
在这个函数中,我们通过循环不断增加页号来获取所有分页数据,直到没有更多数据返回为止。
实际应用案例
假设我们需要获取某一时间段内所有符合条件的退换货记录,并将其写入到目标数据库中,可以按照以下步骤进行:
- 设置时间范围:确定开始时间和结束时间。
- 调用接口:使用上述分页处理函数获取所有符合条件的数据。
- 数据清洗:对原始数据进行清洗和转换。
- 写入数据库:将清洗后的数据写入目标数据库。
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)
通过以上步骤,我们可以高效地从旺店通·企业奇门接口获取所需的退换货记录,并进行相应的数据处理和存储。这不仅提高了数据集成的效率,也确保了数据的一致性和准确性。
用友BIPAPI接口数据集成技术案例:退换货生成销售退货
在轻易云数据集成平台的生命周期中,数据转换与写入是关键步骤之一。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,并转为用友BIPAPI接口所能够接收的格式,最终写入目标平台。
数据转换与写入配置
-
API接口配置
目标平台用友BIP的API接口配置如下:
{ "api": "/yonbip/sd/vouchersalereturn/singleSave", "method": "POST", "idCheck": true, "BIPAudit": "/yonbip/sd/vouchersalereturn/approve" }
-
请求头配置
请求头部分主要包含单据编码、销售组织、交易类型等信息。以下是具体字段及其值的配置:
[ {"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}"} // 其他字段略... ]
-
请求体配置
请求体部分包括表头和表体信息,表头信息主要包括退货单的基本信息,如退货金额、仓库编号等;表体信息则包括每个退货商品的详细信息。以下是具体字段及其值的配置:
{ "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}}"}, // 其他字段略... ] }
-
数据转换逻辑
在数据转换过程中,需要进行一些计算和格式化处理。例如,含税成交价、无税单价、含税金额等字段需要根据原始数据进行计算:
{ "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)", // 其他计算字段略... }
-
幂等性保证
为了确保请求的幂等性,需要设置
resubmitCheckKey
,该值由客户端生成,并且必须是全局唯一的,长度不能超过32位:{ "resubmitCheckKey": "{refund_no}" }
-
提交与审核
最后,将转换后的数据通过POST方法提交到用友BIPAPI接口,并调用审核接口进行审核:
{ "method": "POST", "url": "/yonbip/sd/vouchersalereturn/singleSave", // 提交的数据内容略... } { "method": "POST", "url": "/yonbip/sd/vouchersalereturn/approve", // 审核的数据内容略... }
通过以上步骤,我们实现了从源平台到用友BIP目标平台的数据ETL转换与写入。每个环节都需要严格按照元数据配置进行,以确保数据准确无误地传输和处理。