管易云·奇门数据集成到精诚ERP技术案例分享:管易发货单对接
在复杂的电商环境中,如何确保迅速且准确的数据同步是一个关键问题。本次案例侧重于将管易云·奇门平台上的发货单数据高效集成到精诚ERP系统的一体化解决方案——管易发货单对接。在这个过程中,我们充分利用了轻易云数据集成平台的强大功能,实现了从API调用、数据转换到异常处理的一系列步骤。
API接口调用与定时抓取
首先,我们通过gy.erp.trade.deliverys.get
API接口,定时可靠地抓取管易云·奇门提供的发货单数据。这一过程需要考虑如何确保不漏单,因此我们设计了一套机制来跟踪每一批次的数据获取状态,并采用分页抓取以应对大量订单情况下可能出现的限流问题。
数据批量写入和格式转换
面对大量要写入的数据,我们使用API ExtApi_RecvExSheet
将这些信息高效地传递给精诚ERP。同时,为了实现无缝衔接,必须进行必要的数据格式转换。两者之间存在一些字段和类型不一致的问题,通过自定义映射规则,这些差异得到了有效解决,使得最终写入能够符合精诚ERP的要求。
实时监控与日志记录
整个过程中,不仅需要确保操作透明,还需实时监控每个环节并记录日志。这样可以在发生错误或异常情况时迅速反应,对症下药。例如,当遇到网络波动导致部分数据丢失或者重复提交时,这套体系会自动触发重试机制,从而提高整体流程的可靠性。
异常处理及错误重试机制
为了保证系统对接过程中的稳定性,还特别设计了一套完善的异常处理和错误重试机制。当某一步骤失败后,该系统会自动进行多次尝试,同时通过详细日志记录帮助开发人员快速定位并修复潜在问题,从而将影响降至最低。
此次整合实例展示了如何借助先进的平台工具,将分散且庞大的电商订单数据,高效地融入企业内部管理系统中,实现全链条的信息贯通与智能化运作,提高业务响应速度,并减少人为干预所带来的误差与延迟。
调用管易云·奇门接口gy.erp.trade.deliverys.get获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用管易云·奇门接口gy.erp.trade.deliverys.get
,并对获取的数据进行加工处理。
接口调用配置
首先,我们需要配置API接口的元数据,以便正确地请求和处理数据。以下是关键的元数据配置:
{
"api": "gy.erp.trade.deliverys.get",
"method": "POST",
"number": "code",
"id": "code",
"pagination": {
"pageSize": 50
},
"beatFlat": ["details"],
"formatResponse": [
{
"old": "delivery_statusInfo.delivery_date",
"new": "delivery_date_new",
"format": "date"
}
],
"idCheck": true,
"omissionRemedy": {
"crontab": "2 13,14,18,20,23 * * *",
"takeOverRequest": [
{
"field": "start_delivery_date",
"label": "发货时间结束段",
"type": "string",
"value": "_function FROM_UNIXTIME({LAST_SYNC_TIME}-43200 ,'%Y-%m-%d %H:%i:%s' )"
}
]
},
"request": [
{
"field": "start_create",
"label": "创建时间开始段",
"type": "datetime"
},
{
"field": "end_create",
"label": "创建时间结束段",
"type": "datetime"
},
{
"field": "start_delivery_date",
...
请求参数设置
在请求参数中,我们需要设置多个字段来确保获取到所需的数据。这些字段包括创建时间、发货时间、修改时间等。特别地,我们使用了动态变量{{LAST_SYNC_TIME|datetime}}
和{{CURRENT_TIME|datetime}}
来自动填充时间范围。
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{"field":"start_delivery_date","label":"发货时间开始段","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"},
{"field":"end_delivery_date","label":"发货时间结束段","type":"datetime","value":"{{CURRENT_TIME|datetime}}"},
{"field":"start_modify_date","label":"修改时间开始段","type":"datetime"},
{"field":"end_modify_date","label":"修改时间结束段","type":"datetime"},
{"field":"del","label":"返回是否作废的单据","type":"int"},
{"field":"delivery","label":"发货状态","type":"int","value":"1"},
{"field":"code","label":"单据编号","type":"string"}
]
}
}
}
}
}
}
}
}
}
}
}
}
数据分页与处理
为了高效地处理大量数据,我们采用分页机制,每页大小设置为50条记录。同时,为了简化数据结构,我们将嵌套的details
字段拍平(beatFlat)。
{
...
{"pagination":{"pageSize":50}},
{"beatFlat":["details"]}
}
数据格式转换
在获取到原始数据后,需要对部分字段进行格式转换。例如,将delivery_statusInfo.delivery_date
字段转换为新的日期格式,并重命名为delivery_date_new
。
{
...
{"formatResponse":[{"old":"delivery_statusInfo.delivery_date","new":"delivery_date_new","format":"date"}]}
}
数据缺失补救
为了确保数据完整性,我们配置了定时任务(crontab)来定期检查和补救可能遗漏的数据。在这里,我们设置了每天多次执行的计划任务,并通过计算上次同步时间来确定缺失的数据范围。
{
...
{"omissionRemedy":{"crontab":"2 13,14,18,20,23 * * *",...}}
}
以上配置确保了我们能够高效、准确地从管易云·奇门接口获取发货单数据,并进行必要的加工处理。这一步骤是整个数据集成生命周期中的关键环节,为后续的数据转换与写入打下坚实基础。
使用轻易云数据集成平台进行ETL转换并写入精诚ERPAPI接口的技术案例
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台精诚ERPAPI接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程。
元数据配置解析
我们使用以下元数据配置来完成数据转换和写入操作:
{
"api": "ExtApi_RecvExSheet",
"method": "POST",
"sdk": "\\Adapter\\Customer\\JCERP\\SDK\\JCERPSDK",
"errorMsgKey": "ResultMsg",
"idCheck": true,
"groupCalculate": {
"headerGroup": ["shop_code", "shop_name", "delivery_date_new"],
"bodyGroup": ["details_item_code"],
"bodyName": "details",
"targetBodyName": "Items",
"bodyMaxLine": 500,
"calculate": {
"details_qty": "$sum",
"details_amount_after": "$sum"
}
},
"request": [
{"label":"SheetID","field":"SheetID","type":"string","value":"_function REPLACE('{shop_code}{delivery_date_new}0','-','')"},
{"label":"SheetDate","field":"SheetDate","type":"string","value":"{delivery_date_new}"},
{"label":"CustomerCode","field":"CustomerCode","type":"string","value":"{shop_code}"},
{"label":"CustomerName","field":"CustomerName","type":"string","value":"{shop_name}"},
{"label":"RedBlue","field":"RedBlue","type":"string","value":"false"},
{"label":"Qua","field":"Qua","type":"string"},
{"label":"Amo","field":"Amo","type":"string"},
{"label":"Remark","field":"Remark","type":"string"},
{
"label": "Items",
"field": "Items",
"type": "array",
"value": "details",
"children": [
{"parent": "Items", "label": "Qua", "field": "Qua", "type": "string",
"value": "{{details.details_qty}}"},
{"parent": "Items",
"label":
"GoodsID",
"field":
"GoodsID",
"type":
"string",
"value":
"{{details.details_item_code}}"
},
{"parent":
"Items",
"label":
"Price",
"field":
"Price",
"type":
"string",
"value":
"_function round({{details.details_amount_after}}\/{{details.details_qty}},6)"
},
{"parent":
"Items",
"label":
"Amo",
"field":
"Amo",
"type":
"string",
"value":
"{{details.details_amount_after}}"
},
{"parent":
"Items",
"label":
"Remark",
"field":
"Remark",
"type":
"string"
}
]
}
]
}
数据转换与写入流程
-
请求参数组装:
- SheetID:通过
REPLACE
函数将shop_code
和delivery_date_new
拼接,并去掉其中的-
符号。 - SheetDate:直接使用
delivery_date_new
字段。 - CustomerCode和CustomerName:分别映射为
shop_code
和shop_name
。 - RedBlue:固定值为
false
。 - Qua和Amo:由具体业务逻辑决定,通常是从源数据中提取或计算得出。
- SheetID:通过
-
子项数组处理(Items):
- 每个子项包含五个字段:Qua, GoodsID, Price, Amo, Remark。
- Qua:映射为每个详情项中的
details_qty
。 - GoodsID:映射为每个详情项中的
details_item_code
。 - Price:通过自定义函数计算,即用每个详情项的总金额除以数量,保留六位小数。
- Amo:直接映射为每个详情项中的总金额,即
details_amount_after
。
-
分组与聚合计算:
- 对于头部信息,根据字段
shop_code
,shop_name
,delivery_date_new
分组。 - 对于子项信息,根据字段
details_item_code
分组,并对数量和金额进行求和操作。
- 对于头部信息,根据字段
-
API调用与错误处理:
- 使用POST方法调用精诚ERP的API接口
ExtApi_RecvExSheet
,通过SDK进行封装调用。 - 错误信息通过
ResultMsg
字段返回,需在调用后进行检查和处理。
- 使用POST方法调用精诚ERP的API接口
实践案例
假设我们有如下源数据:
{
"shop_code": "S001",
"shop_name": "Shop A",
"delivery_date_new": "2023-10-01",
...
// details array
...
}
经过ETL转换后的请求体将会是:
{
...
// Header fields
...
{
...
// Items array
...
[
{
...
// Individual item fields
...
}
...
// Other items
...
]
}
}
通过上述过程,我们可以确保源平台的数据经过ETL转换后,能够准确无误地写入到精诚ERP系统中,从而实现系统间的数据无缝对接。