ETL实战:调拨入库单同步到金蝶云星空的流程与配置
### 旺店通·旗舰奇门数据集成到金蝶云星空:调拨入库单同步案例分享
在本技术案例中,我们将展示如何高效实现旺店通·旗舰奇门的数据集成到金蝶云星空,重点聚焦于调拨入库单的同步。通过巧妙运用API接口和定制化数据映射,对接两个系统,使得业务流程更加顺畅无阻。
#### 确保数据不漏单
首先,为了确保每一笔调拨入库单都能准确无误地从旺店通·旗舰奇门同步至金蝶云星空,我们选择调用`wdt.wms.stockin.transfer.querywithdetail`这个API接口获取详细的入库数据信息。为了预防漏单问题,通过定时任务脚本,每隔一定时间抓取一次该接口上的所有新纪录,并利用日志记录机制进行监控,一旦出现异常情况立即输出警告信息。
#### 大量数据快速写入
处理完从旺店通·旗舰奇门获取的数据后,需要批量写入到金蝶云星空。这一步我们使用了金蝶云星空提供的`batchSave` API,实现大量数据快速、高效地插入数据库。在实际操作过程中,为应对分页和限流问题,每次请求均会按照分页拆分处理,以确保不会因流量过大导致接口超时或失败。同时,通过并发控制机制,将并行处理任务数量限制在合理范围内,从而提升整体效率。
#### 数据格式差异处理
由于两套系统间的数据格式存在差异,因此必须进行必要的字段映射与转换。这包括但不限于日期格式、金额单位以及字符串编码等细节问题。针对这一需求,在平台中配置了一系列规则引擎,自动完成转化过程,保证最终提交到金蝶云星空的数据符合其验证规则。例如,将旺店通中的多字段组合为一个复杂对象存储在金蝶云中,或者简单类型之间直接1:1映射。
以上部分是整个解决方案的一些关键节点。在随后的内容中,我们将详细探讨具体实施步骤,包括如何设置每个API调用、错误重试机制实现及其他细节调整等相关技术要点。通过这种结构性的方法,可以让你的系统对接工作事半功倍,提高整体业务运营效率。
![打通用友BIP数据接口](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image)
### 调用源系统旺店通·旗舰奇门接口wdt.wms.stockin.transfer.querywithdetail获取并加工数据
在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的。本文将详细探讨如何通过轻易云数据集成平台配置元数据,调用旺店通·旗舰奇门接口`wdt.wms.stockin.transfer.querywithdetail`来获取调拨入库单的详细信息,并进行初步的数据加工。
#### 接口调用配置
首先,我们需要配置接口调用的元数据。根据提供的metadata,接口采用POST方法,主要参数包括查询参数和分页信息。
```json
{
"api": "wdt.wms.stockin.transfer.querywithdetail",
"method": "POST",
"number": "order_no",
"id": "stockin_id",
"idCheck": true,
"beatFlat": ["detail_list"],
"request": [
{
"field": "params",
"label": "查询参数",
"type": "object",
"describe": "查询参数",
"children": [
{
"field": "start_time",
"label": "开始时间",
"type": "string",
"describe": "起始时间,若无入库单号或调拨单号,则为必填。",
"value": "{{LAST_SYNC_TIME|datetime}}",
"parent": "params"
},
{
"field": "end_time",
"label": "结束时间",
"type": "string",
"describe": "结束时间,上同开始时间",
"value": "{{CURRENT_TIME|datetime}}",
"parent": "params"
},
{
"field": "status",
"label": "入库单状态",
``type``: ``string``,
``describe``: ``英文逗号拼接的状态值:10=已取消,20=编辑中,30=待审核,37=待质检,40=质检确认,60=待结算,70=暂估结算,80=已完成``,
``value``: ``80``,
``parent``: ``params``
},
{
"field":"warehouse_no","label":"仓库编号","type":"string","describe":"仓库编号","parent":"params"},
{
"field":"stockin_no","label":"入库单号","type":"string","describe":"入库单号","parent":"params"},
{
"field":"transfer_no","label":"调拨单号","type":"string","describe":"调拨单号","parent":"params"}
]
},
{
"field":"pager","label":"分页","type":"object","describe":"分页","children":[
{
"field":"page_size","label":"分页大小","type":"string","describe":"分页大小","value":"50","parent":"pager"},
{
"field":"page_no","label":"页号","type":"string","describe":"从0开始","value":"1","parent":"pager"}
]
}
]
}
```
#### 参数说明
- **查询参数(params)**:
- `start_time`: 起始时间,用于限定查询范围。通常使用上次同步时间作为起点。
- `end_time`: 结束时间,同样用于限定查询范围。一般设置为当前时间。
- `status`: 入库单状态,此处设定为80,即已完成状态。
- `warehouse_no`: 仓库编号,用于指定具体仓库。
- `stockin_no`: 入库单号,可选参数,用于精确查询特定入库单。
- `transfer_no`: 调拨单号,可选参数,用于精确查询特定调拨单。
- **分页(pager)**:
- `page_size`: 每页记录数,此处设定为50。
- `page_no`: 页码,从0开始。
#### 数据请求与清洗
在轻易云平台中,通过上述配置可以发起对旺店通·旗舰奇门接口的请求。请求返回的数据通常是一个包含多个字段的JSON对象,其中包括详细的调拨入库信息。
示例返回结果:
```json
{
“code”:0,
“msg”:”成功”,
“data”:[
{
“stockin_id”:”123456”,
“order_no”:”ORD123456”,
“warehouse_no”:”WH001”,
“status”:80,
“detail_list”:[
{
“item_code”:”ITEM001”,
“quantity”:100
},
{
“item_code”:”ITEM002”,
“quantity”:200
}
]
}
// 更多记录...
]
}
```
#### 数据转换与写入
在获取到原始数据后,需要对其进行清洗和转换,以便写入目标系统。以下是一些常见的数据处理步骤:
1. **字段映射**:将源系统中的字段映射到目标系统中的对应字段。例如,将`stockin_id`映射到目标系统中的`id`字段。
2. **数据过滤**:根据业务需求过滤不必要的数据。例如,只保留状态为80(已完成)的记录。
3. **格式转换**:将日期、数字等字段转换为目标系统所需的格式。
示例代码:
```python
def transform_data(raw_data):
transformed_data = []
for record in raw_data['data']:
if record['status'] == 80:
transformed_record = {
'id': record['stockin_id'],
'order_number': record['order_no'],
'warehouse': record['warehouse_no'],
'items': []
}
for item in record['detail_list']:
transformed_record['items'].append({
'code': item['item_code'],
'qty': item['quantity']
})
transformed_data.append(transformed_record)
return transformed_data
```
通过上述步骤,可以确保从源系统获取的数据经过清洗和转换后能够顺利写入目标系统,实现不同系统间的数据无缝对接。这一过程不仅提高了数据处理效率,还保证了数据的一致性和准确性。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image)
### 调拨入库单同步至金蝶云星空的ETL转换与写入
在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将调拨入库单的数据进行ETL转换,并最终通过金蝶云星空API接口写入目标平台。
#### 数据请求与清洗
首先,我们需要从源系统获取调拨入库单的数据,并对其进行初步清洗。这一步骤通常包括数据的去重、格式规范化以及必要字段的校验。假设我们已经完成了这一步骤,接下来便是将清洗后的数据进行转换和写入。
#### 数据转换与写入
根据提供的元数据配置,我们需要将调拨入库单的数据映射到金蝶云星空API所需的格式。以下是详细的配置和转换过程:
1. **API接口配置**
我们使用金蝶云星空的`batchSave`接口,方法为`POST`,并且开启了ID检查功能(`idCheck: true`)。这意味着在提交数据之前,系统会自动检查是否存在重复的记录。
2. **请求体构建**
请求体主要分为两部分:表头(Header)和明细(Body)。根据元数据配置,我们需要将源数据中的字段映射到目标字段。
- **表头字段映射**
```json
[
{"field": "FBillNo", "value": "{order_no}_{detail_list_spec_code}"},
{"field": "FBillTypeID", "value": "DBRKD"},
{"field": "FStockOrgId", "value": "{detail_list_spec_code}"},
{"field": "FStockDirect", "value": "{detail_list_spec_code}"},
{"field": "FDate", "value": "{{check_time|datetime}}"},
{"field": "FDEPTID", "value": "HY1018"},
{"field": "FOwnerTypeIdHead", "value": "BD_OwnerOrg"},
{"field": "FOwnerIdHead", "value": "{detail_list_spec_code}"},
{"field": "FNOTE", "value": "调拨入库单"}
]
```
- **明细字段映射**
```json
[
{
"field":"FEntity",
"children":[
{"field":"FMATERIALID","value":"{{detail_list.detail_list_spec_no}}"},
{"field":"FSTOCKID","value":"{{detail_list.to_warehouse_no}}"},
{"field":"FQty","value":"{{detail_list.detail_list_num}}"},
{"parent":"FEntity","label":"库存状态","field":"FSTOCKSTATUSID","type":"string","value":"_function case '{{detail_list.detail_list_defect}}' when true then 'KCZT08_SYS' else 'KCZT01_SYS' end"}
]
}
]
```
3. **其他请求参数**
除了基本的字段映射外,还需要设置一些其他参数:
```json
[
{"field":"FormId","value":"STK_MISCELLANEOUS"},
{"field":"IsVerifyBaseDataField","value":"true"},
{"field":"Operation","value":"Save"},
{"field":"IsAutoSubmitAndAudit","value":"true"}
]
```
4. **组装最终请求体**
结合上述所有配置,我们可以组装出最终的请求体。示例如下:
```json
{
"FormId": "STK_MISCELLANEOUS",
"IsVerifyBaseDataField": true,
"Operation": "Save",
"IsAutoSubmitAndAudit": true,
"Model":{
...
// 表头信息
...
// 明细信息
...
}
}
```
5. **发送请求并处理响应**
最后,通过HTTP POST方法将组装好的请求体发送至金蝶云星空API接口,并处理返回的响应结果。成功时,响应中会包含新创建或更新记录的信息;失败时,则需要根据错误信息进行排查和修正。
通过以上步骤,我们实现了从源平台到金蝶云星空平台的数据ETL转换和写入。这不仅确保了数据的一致性和准确性,也大大提升了业务流程的自动化程度。
![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)