### 旺店通·旗舰奇门数据集成到金蝶云星空:销售退货单预入库关联
在系统对接和数据集成项目中,确保不同平台间的数据无缝同步是关键步骤之一。本文将介绍如何通过轻易云数据集成平台,将旺店通·旗舰奇门的销售退货单数据高效、准确地传输并写入到金蝶云星空中,实现预入库关联操作。本技术案例重点分享了API接口调用、处理分页与限流问题以及异常处理等方面。
#### API接口的配置与调用
- **获取旺店通·旗舰奇门销售退货单数据**:首先,通过调用wdt.wms.stockin.refund.querywithdetail获取需要同步的销售退货单详细信息。此API能够精准抓取最新生成或更新的订单信息,为后续的数据处理提供基础。
```json
{
"api_name": "wdt.wms.stockin.refund.querywithdetail",
"params": {
// 必要参数如时间范围,分页参数等
}
}
```
- **写入金蝶云星空**:利用batchSave API将从旺店通获取的数据批量写入到金蝶云星空。在执行这个过程时,需要特别注意数据格式的一致性。
```json
{
"api_name": "batchSave",
"payload": [
// 转换后的具体业务数据
]
}
```
#### 分页与限流管理
为了有效应对大规模数据库查询所产生的问题,防止因一次性抓取大量记录导致系统崩溃或者响应超时,我们将在实现方案中采用分页策略,并结合限流措施来优化性能。例如,在每次API请求时限定返回条目数,当达到一定数量后再继续下一次请求,从而平衡实时性与效率需求。
```http
GET /query?
page=1&page_size=50&...other_params...
```
如此循环直到所有待处理订单全部被成功抓取和存储。这不仅减少了系统负荷,还能确保不会遗漏任何一笔重要交易记录。
#### 数据格式转换及映射
由于各个系统之间往往存在字段名或者结构上的差异,必须进行相应的数据格式转换以适配目的端需求。为此,我们设计了一套灵活且可定制化的映射规则,可以根据实际业务情况动态调整字段对应关系,从而保证最终上传至金蝶云星空的数据完全符合其期望值。
```javascript
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`不为空时才处理该条记录。这可以通过元数据中的条件配置实现:
```json
{
"condition":[[{"field":"attach_type","logic":"notnull","value":""}]]
}
```
#### 自动填充响应
为了简化操作,我们启用了自动填充响应功能(autoFillResponse),这意味着平台会自动根据请求结果填充相应的数据字段,无需手动干预。
通过上述步骤,我们成功调用了旺店通·旗舰奇门接口,并对返回的数据进行了初步加工。这一过程不仅确保了数据的一致性和准确性,还为后续的数据转换与写入奠定了坚实基础。
![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image)
### 数据集成案例:将销售退货单数据转换并写入金蝶云星空
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行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**(日期):
- 动态值,根据条件选择:
```sql
CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '{short_time}' ELSE '{associated_time}' END
```
- **FRetcustId**(退货客户):
- 使用MongoDB查询获取:
```json
_mongoQuery 3c9b5a58-0a09-3ae7-b7ea-20fbf5f16fa3 findField=content.FNumber where={"content.FName":{"$eq":"{shop_name}"}}
```
- **FHeadNote**(备注)和**F_TBIK_WDTBZ**(旺店通备注):
- 动态组合多个字段生成备注信息:
```sql
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**(实退数量):
- 动态值,根据数量判断:
```sql
CASE WHEN '{num}'<1 THEN '0' WHEN '{num}'>=1 THEN '{num}' ELSE '{num}' END
```
- **FTaxPrice**(含税单价):
- 动态计算:
```sql
{refund_amount}/{stockin_num}
```
#### 4. 财务信息处理
财务信息包含结算组织等字段:
- **FSettleOrgId**(结算组织):
- 固定值:`101`
- 使用解析器:`ConvertObjectParser`
- 参数:`FNumber`
#### 5. 时间相关字段处理
实际入库时间和预入库关联时间均需要根据条件动态生成:
```sql
CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '' ELSE '{short_time}' END
```
#### 实际操作示例
以下是一个完整的请求示例,将上述配置应用于实际操作中:
```json
{
"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转换后写入了金蝶云星空,实现了不同系统间的数据无缝对接。这不仅提升了数据处理效率,也确保了数据的一致性和准确性。
![打通金蝶云星空数据接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)