聚水潭到畅捷通T+的数据集成案例分享
在本篇技术案例中,我们将探讨如何实现聚水潭的调拨出库单数据集成到畅捷通T+的其他出库单。通过使用轻易云数据集成平台,我们能够有效地解决两者之间的数据对接问题,实现高效、可靠且大规模的数据传输。
首先,确保从聚水潭获取数据不漏单是我们面临的一项重要挑战。为此,我们采用了定时任务机制,通过周期性调用聚水潭接口 /open/allocate/query
来抓取最新的调拨出库单数据。同时,为了解决分页和限流问题,我们设计了一个循环处理方案,在每次请求后根据返回结果中的分页信息逐步读取所有需要的数据。
一旦成功获取到聚水潭的调拨出库单数据,下一步就是快速而准确地写入畅捷通T+。这里我们利用批量处理的方式,将整理好的数据通过其API接口 /tplus/api/v2/otherReceive/Create
写入系统中。在这个过程中,对接过程中的异常处理与错误重试机制也显得尤为关键。例如,当某条记录因网络原因或接口响应异常导致写入失败时,系统会自动进行多次重试,并在达到最大尝试次数后记录详细日志供后续分析。
此外,由于聚水潭和畅捷通T+使用不同的数据格式,需要对各类字段进行精确映射和转换。这要求我们在配置元数据信息时特别注意不同字段类型及值域范围,以保证最终写入的数据能被正确解析和存储。同时,整个过程都伴随着实时监控与日志记录,可以及时发现并排除潜在的问题,从而保障数据流转顺利无误。
综上所述,这个案例展示了从创建连接、抓取源头数据,到目标系统大量快速写入,再到异常捕获与用户提示等一系列步骤中的具体实施方法,为类似需求提供了一套行之有效的技术参考。
调用聚水潭接口/open/allocate/query获取并加工数据
在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭的/open/allocate/query
接口,获取调拨出库单数据,并进行初步加工。
接口配置与请求参数
首先,我们需要了解/open/allocate/query
接口的基本配置和请求参数。根据提供的元数据配置,以下是该接口的详细信息:
- API路径:
/open/allocate/query
- 请求方法:
POST
- 功能: 查询调拨出库单
- 主要字段:
io_id
: 出库单编号name
: 出库单名称modified_begin
: 修改起始时间modified_end
: 修改结束时间page_index
: 第几页page_size
: 每页多少条(默认30,最大50)type
: 调拨类型(固定值为“调拨出”)
请求参数设置
在实际操作中,我们需要根据业务需求动态设置请求参数。以下是一个典型的请求参数配置示例:
{
"modified_begin": "{{LAST_SYNC_TIME|datetime}}",
"modified_end": "{{MINUTE_AGO_10|datetime}}",
"page_index": "1",
"page_size": "30",
"type": "调拨出"
}
- modified_begin 和 modified_end: 用于指定查询时间范围。
{{LAST_SYNC_TIME|datetime}}
表示上次同步时间,而{{MINUTE_AGO_10|datetime}}
表示当前时间前10分钟。 - page_index: 分页索引,初始值为1。
- page_size: 每页记录数,默认30条。
- type: 固定值“调拨出”,表示查询调拨出库单。
数据请求与清洗
在发送请求后,我们会收到聚水潭返回的数据。为了确保数据质量和一致性,需要对原始数据进行清洗和初步处理。这包括但不限于以下步骤:
-
字段映射与转换: 根据元数据配置,将返回的数据字段映射到目标系统所需的字段。例如,将
io_id
映射为目标系统中的订单编号。 -
数据过滤与校验: 对返回的数据进行过滤,剔除不符合业务规则或格式错误的数据。例如,检查每条记录的必填字段是否为空。
-
分页处理: 如果返回的数据量较大,需要处理分页逻辑,确保所有数据都能被完整获取。这通常涉及循环调用API,并逐页处理返回的数据。
实际案例分析
假设我们需要将聚水潭的调拨出库单数据集成到畅捷通系统中,具体操作步骤如下:
-
初始化请求参数: 根据上次同步时间和当前时间初始化查询参数。
-
发送API请求并接收响应: 使用轻易云平台提供的POST方法发送请求,并接收聚水潭返回的数据。
-
处理响应数据: 对响应数据进行清洗、转换和校验。例如,将每条记录中的
io_id
和name
字段提取出来,并检查其有效性。 -
分页处理: 如果返回结果包含多页数据,则继续发送下一页请求,直到所有数据都被获取完毕。
-
写入目标系统: 将处理后的数据写入畅捷通系统中的其他出库单模块,实现无缝对接。
通过上述步骤,我们可以高效地从聚水潭获取调拨出库单数据,并将其集成到目标系统中。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。
使用轻易云数据集成平台将源数据转换并写入畅捷通T+API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台畅捷通T+API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何利用元数据配置实现这一过程。
配置元数据
在轻易云数据集成平台中,元数据配置是关键的一环。以下是我们使用的元数据配置:
{
"api": "/tplus/api/v2/otherReceive/Create",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field":"ExternalCode","label":"外部单据号","type":"string","describe":"外部单据号,后台做唯一性检查。用于防止重复提交,和外系统数据对应。","value":"{io_id}-1"},
{"field":"VoucherType","label":"单据类型","type":"string","describe":"单据类型。默认值{Code:\"ST1024\"}","value":"ST1024","parser":{"name":"ConvertObjectParser","params":"Code"}},
{"field":"VoucherDate","label":"单据日期","type":"string","describe":"111","value":"{io_date}"},
{"field":"BusiType","label":"业务类型","type":"string","describe":"业务类型编码。取值范围: 13--其他 14--其他退库","value":"13","parser":{"name":"ConvertObjectParser","params":"Code"}},
{"field":"Warehouse","label":"仓库信息","type":"string","describe":"111","value":"{wms_co_id}","parser":{"name":"ConvertObjectParser","params":"Code"},"mapping":{"target":"66d687ab2f3fde34df428d6d","direction":"positive"}},
{"field":"Memo","label":"表头备注","type":"string","describe":"111","value":"{remark}"},
{"field":"DynamicPropertyKeys","label":"DynamicPropertyKeys","type": "string", "value": "pubuserdefnvc3,pubuserdefnvc4", "parser": {"name": "StringToArray", "params": ","}},
{"field": "DynamicPropertyValues", "label": "DynamicPropertyValues", "type": "string", "value": "13<{io_id}", "parser": {"name": "StringToArray", "params": "<"}},
{"field": "RdStyle", "label": "出库类别", "type": "string", "value": "113", "parser": {"name": "ConvertObjectParser", "params": "Code"}},
{
"field": "RDRecordDetails",
"label": "单据明细信息",
"type": "array",
"describe": "111",
"value": "items",
children: [
{"field": “Inventory”, “label”: “存货信息”, “type”: “string”, “value”: “{sku_id}”, “parser”: {“name”: “ConvertObjectParser”, “params”: “Code”}},
{"field”: “BaseQuantity”, “label”: “主计量单位数量”, “type”: “string”, “value”: “{qty}”},
{"field”: “Amount”, “label”: “成本金额”, “type”: “string”},
{"field”: “Price”, “label”: “成本单价”, “type”: “string”},
{"field”: ”Project”, ”label”:”项目”,”type”:”string”,”value”:”805”,”parser”:{“name”:”ConvertObjectParser”,”params”:”Code”}}
]
}
],
otherRequest: [
{“field”:”dataKey”,”label”:”dataKey”,”type”:”string”,”describe”:”111”,”value”:dto}
]
}
数据转换与写入
-
外部单据号(ExternalCode):
- 将源平台中的
io_id
字段加上后缀-1
,确保每个外部单据号的唯一性。 - 示例:
"ExternalCode" : "{io_id}-1"
- 将源平台中的
-
单据类型(VoucherType):
- 默认值设置为
ST1024
,通过ConvertObjectParser
进行解析。 - 示例:
"VoucherType" : ST1024
- 默认值设置为
-
单据日期(VoucherDate):
- 从源平台获取
io_date
字段直接赋值。 - 示例:
"VoucherDate" : "{io_date}"
- 从源平台获取
-
业务类型(BusiType):
- 固定值为
13
,表示其他业务类型,通过解析器进行解析。 - 示例:
"BusiType" : 13
- 固定值为
-
仓库信息(Warehouse):
- 从源平台获取仓库ID
wms_co_id
,并通过映射和解析器转换为目标平台可识别的格式。 - 示例:
"Warehouse" : "{wms_co_id}"
- 从源平台获取仓库ID
-
表头备注(Memo):
- 从源平台获取备注字段
remark
,直接赋值。 - 示例:
"Memo" : "{remark}"
- 从源平台获取备注字段
-
动态属性键和值(DynamicPropertyKeys 和 DynamicPropertyValues):
- 使用
StringToArray
解析器将字符串转换为数组形式。 - 示例:
{ `"DynamicPropertyKeys"`: `"pubuserdefnvc3,pubuserdefnvc4"` `"DynamicPropertyValues"`: `"13<{io_id}"` }
- 使用
-
出库类别(RdStyle):
- 固定值为
113
, 表示出库类别,通过解析器进行解析。 - 示例:
"RdStyle" : 113
- 固定值为
-
单据明细信息(RDRecordDetails):
- 包含多个子字段,如存货信息、主计量单位数量、成本金额、成本单价和项目等。
- 每个子字段都从源平台对应字段中获取,并通过必要的解析器进行转换。
实际应用案例
假设我们有以下源数据:
{
io_id: '12345',
io_date: '2023-10-01',
wms_co_id: 'WH001',
remark: 'Test Remark',
items: [
{ sku_id: 'SKU001', qty: '10' },
{ sku_id: 'SKU002', qty: '20' }
]
}
经过上述元数据配置和ETL处理后,将生成如下符合畅捷通T+API接口要求的数据格式:
{
ExternalCode: '12345-1',
VoucherType: 'ST1024',
VoucherDate: '2023-10-01',
BusiType: '13',
Warehouse: 'WH001',
Memo: 'Test Remark',
DynamicPropertyKeys: ['pubuserdefnvc3', 'pubuserdefnvc4'],
DynamicPropertyValues: ['13', '12345'],
RdStyle: '113',
RDRecordDetails:[
{
Inventory:'SKU001',
BaseQuantity:'10'
},
{
Inventory:'SKU002',
BaseQuantity:'20'
}
],
}
通过以上步骤,我们成功将聚水潭调拨出库单的数据转换为畅捷通T+其他出库单所需的数据格式,并通过API接口写入到目标系统中。这一过程不仅保证了数据的一致性和准确性,还大大提高了系统间的数据交互效率。