聚水潭·奇门数据集成到金蝶云星空的技术案例分享
在本次系统对接项目中,我们采用轻易云数据集成平台,成功实现了聚水潭·奇门销售订单的数据无缝传输至金蝶云星空,实现"销售订单聚水潭=>金蝶云星空销售出库 折扣0"方案。过程中重点解决了多个关键性问题,包括确保不漏单、大量数据快速写入以及接口调用与分页处理。
1. 确保不漏单的关键设计
为了确保从聚水潭·奇门获取的每一笔订单都能准确无误地传递到金蝶云星空,我们深入研究并利用jushuitan.order.list.query
接口进行定时可靠的数据抓取。通过合理设置轮询间隔和时间戳参数,避免因网络延迟或服务器故障导致的遗漏现象。此外,还引入了一套高效的重试机制,当任何环节出现错误时,能自动重新抓取和处理。
2. 批量数据高效写入
考虑到业务需求中的大量订单数据需要及时同步,我们使用金蝶云星空提供的batchSave
API接口,实现大批量、高频率的数据写入。在此过程中,通过优化批处理策略,将小批次合并为合理的大批次提交,有效降低API请求次数,提高整体效率。同时结合实时监控功能,对各个步骤的数据流动状态进行全面跟踪,并通过日志记录详细捕捉每一次操作情况,以便后续分析与优化。
3. 分页和限流问题处理
面对可能存在的大量待处理订单,我们特别关注了聚水潭·奇门API接口分页和限流的问题。在调用jushuitan.order.list.query
时,为保证稳定运行、避免超载及封禁风险,系统实现动态调整分页大小并内设速率限制模块,实现平滑且安全的数据读取过程。
通过这些技术手段,本方案有效应对了不同系统之间复杂多变的数据对接挑战。在接下来的部分,将详细介绍如何进一步针对实际业务需求,实施具体配置和映射策略等技术细节工作。
调用聚水潭·奇门接口获取并加工数据的技术案例
在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用聚水潭·奇门接口 jushuitan.order.list.query
获取销售订单数据,并对其进行初步加工。
接口调用配置
首先,我们需要配置接口的元数据,以确保能够正确地请求和处理数据。以下是 jushuitan.order.list.query
接口的元数据配置:
{
"api": "jushuitan.order.list.query",
"effect": "QUERY",
"method": "POST",
"number": "o_id",
"id": "o_id",
"name": "io_id",
"idCheck": true,
"request": [
{"field":"page_index","label":"页数","type":"string","describe":"第几页,从第一页开始,默认1","value":"1"},
{"field":"page_size","label":"每页行数","type":"string","describe":"每页多少条,默认25,最大25","value":"25"},
{"field":"start_time","label":"修改开始时间","type":"string","describe":"修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空","value":"{{LAST_SYNC_TIME|datetime}}"},
{"field":"end_time","label":"修改结束时间","type":"string","describe":"修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空","value":"{{CURRENT_TIME|datetime}}"},
{"field":"status","label":"单据状态","type":"string","describe":"单据状态: WaitConfirm=待出库; Confirmed=已出库; Cancelled=作废","value":"Sent"},
{"field":"date_type","label":"时间类型","type":"int","describe":"时间类型 默认0 0=修改时间 ; 1=制单日期; 2=出库时间","value":"3"}
],
"autoFillResponse": true,
"condition": [
[{"field": "labels", "logic": "notlike", "value": "线上发货,虚拟发货"}, {"field": "shop_site", "logic": "eqv2", "value": "快团团"}],
[{"field": "labels", "logic": "notlike", "value": "线上发货,虚拟发货"}, {"field": "shop_site", "logic": "eqv2", "value": "群接龙"}],
[{"field": "labels", "logic": "notlike", "value": "线上发货,虚拟发货"}, {"field": "shop_site", "logic": "eqv2", "value": "唯品会"}],
[{"field": "labels", "logic": "notlike", "value": "线上发货,虚拟发货"}, {"field": “shop_site”, “logic”: “eqv2”, “value”: “微信视频号”}]
],
“omissionRemedy”: {
“crontab”: “2 0 * * *”,
“takeOverRequest”: [
{“field”: “start_time”, “value”: “_function FROM_UNIXTIME( unix_timestamp() -86400 , ‘%Y-%m-%d %H:%i:%s’ )”, “type”: “string”, “label”: “接管字段”, “formModel”: {“enable”: false}, “tableModel”: {“enable”: false}, “physicalModel”: {“enable”: false}}
]
}
}
请求参数解析
- page_index 和 page_size:用于分页请求,分别表示当前页数和每页返回的数据条数。
- start_time 和 end_time:用于限定查询的时间范围,这两个字段必须同时存在且间隔不超过七天。
- status:表示订单状态,此处设置为
Sent
表示已发送的订单。 - date_type:表示查询的时间类型,此处设置为
3
表示按出库时间查询。
数据过滤条件
为了确保获取的数据符合业务需求,我们设置了多个过滤条件:
- 排除标签包含“线上发货”和“虚拟发货”的订单。
- 根据店铺来源(如快团团、群接龙、唯品会、微信视频号)进行筛选。
数据请求与清洗
在完成接口配置后,我们可以通过轻易云平台发送请求并获取数据。由于平台支持全异步操作,可以有效提升处理效率。在获取到原始数据后,需要对其进行清洗和转换,以便后续的数据处理步骤。
例如,对于订单中的日期字段,可以统一格式化为标准的日期格式;对于金额字段,可以进行单位转换或汇总计算。这些操作可以通过轻易云平台提供的可视化工具或自定义脚本来实现。
异常处理与补救机制
在实际操作中,不可避免地会遇到一些异常情况,如网络中断或接口响应超时。为了应对这些情况,我们配置了自动补救机制:
- 使用
crontab
定时任务,每天定时检查并补救遗漏的数据。 - 在补救过程中,通过
_function FROM_UNIXTIME( unix_timestamp() -86400 , '%Y-%m-%d %H:%i:%s' )
动态生成前一天的开始时间,确保数据完整性。
通过以上步骤,我们可以高效地从聚水潭·奇门接口获取销售订单数据,并为后续的数据处理和分析打下坚实基础。这一过程不仅提高了数据透明度,也显著提升了业务运营效率。
轻易云数据集成平台:将销售订单数据转换并写入金蝶云星空
在轻易云数据集成平台中,数据集成生命周期的第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并将其转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。
数据请求与清洗
在此阶段,我们已经从源平台(如聚水潭)获取了销售订单数据,并进行了初步清洗。接下来,我们需要将这些数据转换为金蝶云星空所需的格式,并通过API接口写入目标系统。
元数据配置解析
以下是用于将销售订单数据写入金蝶云星空的元数据配置:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 20,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{o_id}"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{send_date}"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_id}","mapping":{"target":"64abc6ccb0695b5829466abe","direction":"positive"}},
{"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_id}","mapping":{"target":"6481809d99cb703832272f51","direction":"positive"}},
{"field":"FSalesManID","label":"销售员","type":"string","value":"{shop_id}","parser":{"name":"ConvertObjectParser","params":"FNumber"},"mapping":{"target":"64abd35844666e7686383510","direction":"positive"}},
{"field":"FCarriageNO","label":"运输单号","type": "string", "describe": "文本", "value": "{l_id}"},
{"field": "FStockOrgId", "label": "发货组织", "type": "string", "describe": "组织", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{shop_id}", "mapping": {"target": "64abc6ccb0695b5829466abe", "direction": "positive"}},
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
"children":[
{"field": "FMaterialID", "label": 物料编码, type: string, describe: 基础资料, parser: {name: ConvertObjectParser, params: FNumber}, value: {{items.sku_id}}, parent: FEntity},
{parent: FEntity, label: 实发数量, field: FRealQty, type: string, value: {{items.qty}}},
{parent: FEntity, label: 金额, field: FAllAmount, type: string, value: {{items.amount}}},
{parent: FEntity, label: 是否赠品, field: FIsFree, type: string, value:_function case '{{items.price}}' when '0.0' then 'true' else 'false' end},
{parent:FEntity,label:"仓库",field:"FStockID",type:"string",value:"{wms_co_id}",parser:{name:"ConvertObjectParser",params:"FNumber"},mapping:{target:"6479b78d40ac5e714f39f40a",direction:"positive"}},
{field:"FSrcBillNo",label:"源单编号",type:"string",value:"{raw_so_id}"},
{field:"FSoorDerno",label:"订单单号",type:"string",value:"{o_id}"},
{field:"FDiscount",label:"折扣额",type:"string"}
],
value: items
},
{"label" :备注,"field" :FNote,"type" :string,"value" :"{remark}"}
],
otherRequest:[
{"field" :FormId,"label" :业务对象表单Id,"type" :string,"describe" :必须填写金蝶的表单ID如:PUR_PurchaseOrder,"value" :"SAL_OUTSTOCK"},
{"field" :Operation,"label" :执行的操作,"type" :string,"value" :"Save"},
{"field" :IsAutoSubmitAndAudit,"label" :提交并审核,"type" :bool,"value" :"true"},
{"field" :IsVerifyBaseDataField,"label" :验证基础资料,"type" :bool,"describe" :是否验证所有的基础资料有效性,布尔类,默认false(非必录),"value" :"true"},
{"field" :SubSystemId,"label" :系统模块,"type" :string,"describe" :"默认仓库模块",“value”:"21"},
{"field”:“InterationFlags”,“标签”:交互标志集合,“类型”:“字符串”,“值”:“STK_InvCheckResult”}
]
}
API接口调用与参数解析
-
API与方法:
api
:batchSave
method
:POST
-
请求参数:
FBillTypeID
:设置为固定值XSCKD01_SYS
,表示销售出库单。FBillNo
:使用源平台订单编号{o_id}
。FDate
:使用发送日期{send_date}
。FSaleOrgId
、FCustomerID
、FSalesManID
、FStockOrgId
:这些字段均通过ConvertObjectParser
进行解析,并映射到相应的目标字段。FCarriageNO
:运输单号,直接使用源平台对应字段值。FEntity
:包含多个子字段,如物料编码、实发数量、金额等,通过解析和映射,将源平台的数据转换为目标格式。备注(FNote)
:直接使用源平台对应字段值。
-
其他请求参数:
FormId
: 固定值为业务对象表单Id,例如:SAL_OUTSTOCK
Operation
: 执行操作,固定值为Save
IsAutoSubmitAndAudit
: 设置为true
, 表示自动提交并审核IsVerifyBaseDataField
: 设置为true
, 表示验证基础资料有效性SubSystemId
: 固定值为系统模块,例如:仓库模块(21)InterationFlags
: 固定值为交互标志集合,例如:库存检查结果(STK_InvCheckResult)
数据转换逻辑
-
字段解析与映射: 使用了多个解析器(如
ConvertObjectParser
)来处理不同类型的数据,将其转换为金蝶云星空所需格式。例如,将物料编码、客户信息等基础资料通过解析器转换为目标系统可识别的编码。 -
条件判断: 在处理是否赠品时,通过条件判断语句
_function case '{{items.price}}' when '0.0' then 'true' else 'false' end
, 判断价格是否为零,从而确定是否赠品。 -
数组处理: 对于明细信息(如物料编码、实发数量等),通过定义子字段数组结构,实现对多条明细记录的批量处理。
数据写入
经过上述步骤的数据转换后,通过调用金蝶云星空API接口,将处理后的数据批量写入目标系统。由于设置了自动提交并审核选项,因此在写入后会自动完成相应的业务流程,提高了效率和准确性。
以上即是轻易云数据集成平台在实现销售订单到金蝶云星空销售出库单ETL过程中的技术细节和元数据配置解析。这一过程不仅确保了不同系统间的数据无缝对接,还大大提升了业务处理效率。