旺店通·旗舰奇门数据集成到金蝶云星空:销售退货单预入库关联
在系统对接和数据集成项目中,确保不同平台间的数据无缝同步是关键步骤之一。本文将介绍如何通过轻易云数据集成平台,将旺店通·旗舰奇门的销售退货单数据高效、准确地传输并写入到金蝶云星空中,实现预入库关联操作。本技术案例重点分享了API接口调用、处理分页与限流问题以及异常处理等方面。
API接口的配置与调用
-
获取旺店通·旗舰奇门销售退货单数据:首先,通过调用wdt.wms.stockin.refund.querywithdetail获取需要同步的销售退货单详细信息。此API能够精准抓取最新生成或更新的订单信息,为后续的数据处理提供基础。
{ "api_name": "wdt.wms.stockin.refund.querywithdetail", "params": { // 必要参数如时间范围,分页参数等 } }
-
写入金蝶云星空:利用batchSave API将从旺店通获取的数据批量写入到金蝶云星空。在执行这个过程时,需要特别注意数据格式的一致性。
{ "api_name": "batchSave", "payload": [ // 转换后的具体业务数据 ] }
分页与限流管理
为了有效应对大规模数据库查询所产生的问题,防止因一次性抓取大量记录导致系统崩溃或者响应超时,我们将在实现方案中采用分页策略,并结合限流措施来优化性能。例如,在每次API请求时限定返回条目数,当达到一定数量后再继续下一次请求,从而平衡实时性与效率需求。
GET /query?
page=1&page_size=50&...other_params...
如此循环直到所有待处理订单全部被成功抓取和存储。这不仅减少了系统负荷,还能确保不会遗漏任何一笔重要交易记录。
数据格式转换及映射
由于各个系统之间往往存在字段名或者结构上的差异,必须进行相应的数据格式转换以适配目的端需求。为此,我们设计了一套灵活且可定制化的映射规则,可以根据实际业务情况动态调整字段对应关系,从而保证最终上传至金蝶云星空的数据完全符合其期望值。
function mapData(source) {
return rawData.map(item => ({
orderNumber: item.order_id,
customerName: item.buyer_nick,
refundAmount: item.total_fee,
...additionalMappings
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·旗舰奇门接口wdt.wms.stockin.refund.querywithdetail获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据,并对其进行初步加工处理。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.refund.querywithdetail`,并对返回的数据进行格式化和清洗。
#### 接口调用配置
首先,我们需要配置API接口的元数据,以便正确调用并处理返回的数据。以下是该接口的元数据配置:
```json
{
"api": "wdt.wms.stockin.refund.querywithdetail",
"method": "POST",
"number": "order_no",
"id": "order_no",
"idCheck": true,
"formatResponse": [
{"old": "check_time", "new": "short_date", "format": "date"},
{"old": "modified", "new": "short_modify_date", "format": "date"}
],
"request": [
{
"field": "pager",
"label": "分页参数",
"type": "object",
"children": [
{"field": "page_size", "label": "分页大小", "type": "string", "value":"200",
"parent":"pager"},
{"field":"page_no","label":"页号","type":"string","value":"1","parent":"pager"}
]
},
{
"field":"params",
"label":"业务参数",
"type":"object",
"children":[
{"field":"start_time","label":"start_time","type":"string","value":
"{{DAYS_AGO_1|date}} 00:00:00"},
{"field":"end_time","label":"end_time","type":"string","value":
"{{DAYS_AGO_1|date}} 23:59:59"},
{"field":"time_type","label":"time_type","type":"string"}
]
}
],
"omissionRemedy":{"crontab":null,"takeOverRequest":[]},
"autoFillResponse":true,
"condition_bk":[[{"field":"attach_type","logic":"isnull","value":""}]],
"condition":[[{"field":"attach_type","logic":"notnull","value":""}]]
}
请求参数设置
在请求参数中,我们设置了分页参数和业务参数:
-
分页参数:用于控制每次请求的数据量和页码。
page_size
:每页返回的数据条数,设为200。page_no
:当前请求的页码,初始值为1。
-
业务参数:用于指定查询条件。
start_time
和end_time
:定义了查询时间范围,这里使用了模板变量{{DAYS_AGO_1|date}}
来动态生成前一天的日期。time_type
:时间类型,根据具体需求设置。
数据格式化与清洗
在获取到原始数据后,需要对其进行格式化和清洗。根据元数据配置中的formatResponse
字段,我们将以下字段进行转换:
- 将
check_time
转换为short_date
,格式为日期。 - 将
modified
转换为short_modify_date
,格式为日期。
这种转换有助于统一数据格式,便于后续处理和分析。
条件过滤
为了确保数据的准确性和完整性,我们还设置了条件过滤:
- 条件过滤:仅当字段
attach_type
不为空时才处理该条记录。这可以通过元数据中的条件配置实现:{ "condition":[[{"field":"attach_type","logic":"notnull","value":""}]] }
自动填充响应
为了简化操作,我们启用了自动填充响应功能(autoFillResponse),这意味着平台会自动根据请求结果填充相应的数据字段,无需手动干预。
通过上述步骤,我们成功调用了旺店通·旗舰奇门接口,并对返回的数据进行了初步加工。这一过程不仅确保了数据的一致性和准确性,还为后续的数据转换与写入奠定了坚实基础。
数据集成案例:将销售退货单数据转换并写入金蝶云星空
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现细节。
1. API接口配置
首先,我们需要配置金蝶云星空API接口的相关参数。根据元数据配置,我们使用batchSave
API,并通过POST方法提交请求。以下是关键字段及其配置:
- FormId:
SAL_RETURNSTOCK
,表示业务对象表单ID。 - Operation:
Save
,表示执行保存操作。 - IsAutoSubmitAndAudit:
true
,表示提交并审核。 - IsVerifyBaseDataField:
true
,表示验证基础资料有效性。 - SubSystemId:
21
,表示系统模块为仓库模块。 - BatchCount:
5
,表示服务端开启的线程数。
2. 数据字段映射与转换
在数据转换过程中,需要将源平台的数据字段映射到金蝶云星空API所需的字段格式。以下是主要字段及其转换逻辑:
-
FBillTypeID(单据类型):
- 固定值:
XSTHD01_SYS
- 使用解析器:
ConvertObjectParser
- 参数:
FNumber
- 固定值:
-
FBillNo(单据编号):
- 直接从源数据获取,无需转换。
-
FSaleOrgId(销售组织)和FStockOrgId(库存组织):
- 固定值:
101
- 使用解析器:
ConvertObjectParser
- 参数:
FNumber
- 固定值:
-
FDate(日期):
- 动态值,根据条件选择:
CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '{short_time}' ELSE '{associated_time}' END
- 动态值,根据条件选择:
-
FRetcustId(退货客户):
- 使用MongoDB查询获取:
_mongoQuery 3c9b5a58-0a09-3ae7-b7ea-20fbf5f16fa3 findField=content.FNumber where={"content.FName":{"$eq":"{shop_name}"}}
- 使用MongoDB查询获取:
-
FHeadNote(备注)和F_TBIK_WDTBZ(旺店通备注):
- 动态组合多个字段生成备注信息:
CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '{shop_name}-{warehouse_no}-{short_time}' ELSE '{shop_name}-{warehouse_no}-{short_time}-{associated_time}' END
- 动态组合多个字段生成备注信息:
3. 明细信息处理
明细信息包含多个子字段,每个子字段需要进行相应的转换:
-
FMaterialId(物料编码):
- 使用解析器:
ConvertObjectParser
- 参数:
FNumber
- 使用解析器:
-
FRealQty(实退数量):
- 动态值,根据数量判断:
CASE WHEN '{num}'<1 THEN '0' WHEN '{num}'>=1 THEN '{num}' ELSE '{num}' END
- 动态值,根据数量判断:
-
FTaxPrice(含税单价):
- 动态计算:
{refund_amount}/{stockin_num}
- 动态计算:
4. 财务信息处理
财务信息包含结算组织等字段:
- FSettleOrgId(结算组织):
- 固定值:
101
- 使用解析器:
ConvertObjectParser
- 参数:
FNumber
- 固定值:
5. 时间相关字段处理
实际入库时间和预入库关联时间均需要根据条件动态生成:
CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '' ELSE '{short_time}' END
实际操作示例
以下是一个完整的请求示例,将上述配置应用于实际操作中:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FBillTypeID",
"value": "XSTHD01_SYS"
},
{
"field": "FBillNo",
"value": "{bill_no}"
},
{
"field": "FSaleOrgId",
"value": "101"
},
{
"field": "FStockOrgId",
"value": "101"
},
{
"field": "FDate",
"value": "{modified}"
},
{
...
}
],
...
}
通过以上步骤,我们成功地将源平台的数据经过ETL转换后写入了金蝶云星空,实现了不同系统间的数据无缝对接。这不仅提升了数据处理效率,也确保了数据的一致性和准确性。