金蝶采购入库对接吉客云采购入库的系统集成案例分享
在某制造企业的日常运维中,为了实现精准高效的数据流转,决定将其ERP系统——金蝶云星空与仓储管理平台吉客云进行数据对接。这个过程中采用了 executeBillQuery 接口从金蝶云星空获取采购入库数据,并通过调用 erp.stock.createandstockin API 将数据快速写入到吉客云。
确保集成不漏单
为了确保在整个数据集成交互过程中的无缝衔接,我们针对如何确保金蝶云星空的数据不漏单进行了严格设计。调研发现,executeBillQuery接口能够实时抓取最新的采购单据,但存在分页和限流问题。因此,通过优化接口调用策略,实现了可靠、定时地抓取接口数据。同时,在每次抓取后,对比前后两次记录数量及内容,以防遗漏任何一条重要信息。
大量数据快速写入吉客云
由于业务需求繁忙,每天大批量的数据需要由金蝶系统传输至吉客云。在这一环节,我们重点关注的是如何高效地处理和写入这些大量数据。我们选择并行化处理方式,将不同时间段或批次的数据分模块执行,实现真正意义上的快速、稳定录入。此外,还针对可能出现的大规模请求超时现象制定了自动重试机制,以确保所有数据均能准确进入目的数据库。
处理分页与限流问题
面对executeBillQuery接口返回结果中的分页限制问题,我们采取了一系列优化措施。例如,通过设置合理且动态调整的分页参数,保障每个请求都能最大效率获取所需信息。同时,对于API访问频度有限制的问题,则采用智能排队机制,根据实际情况控制并发访问次数,从而避免因过多请求而导致服务中断或失败。
本技术方案不仅解决了两个独立系统之间复杂的数据交互难题,也为未来扩展其他功能奠定坚实基础。在下文将详细描述具体配置步骤及核心代码实现逻辑,帮助同类场景中思考类似解决方案提供参考。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统的API接口是关键的一步。本文将深入探讨如何使用轻易云数据集成平台,通过调用金蝶云星空的executeBillQuery
接口,获取采购入库单据并进行初步的数据加工。
接口调用配置
首先,我们需要配置API调用的元数据。根据提供的元数据配置,我们可以看到需要通过POST方法来调用executeBillQuery
接口,并且需要传递多个参数以获取所需的数据。
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FInStockEntry_FEntryId",
"pagination": {
"pageSize": 1000
},
"idCheck": true,
"request": [
{"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_FEntryId"},
{"field":"FID","label":"实体主键","type":"string","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"收料组织","type":"string","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"入库日期","type":"string","value":"FDate"},
{"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"},
{"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"},
{"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.FNumber"},
{"field":"FDemandOrgId_FNumber","label":"需求组织","type":"string","value":"FDemandOrgId.FNumber"},
{"field":"FPurchaseOrgId_FNumber","label":"采购组织","type":"string","value":"FPurchaseOrgId.FNumber"},
{"field":...}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数"},
{"field":...}
]
}
请求参数解析
在请求参数中,我们需要特别关注以下几个字段:
FormId
: 必须填写金蝶的表单ID,例如STK_InStock
。FilterString
: 用于过滤条件,例如按供应商编号和入库日期进行过滤。FieldKeys
: 指定需要查询的字段集合。
示例请求体如下:
{
"FormId": "STK_InStock",
"FieldKeys": [
...
],
"FilterString": "{{LAST_SYNC_TIME|dateTime}} and FStockId.FNumber='01DS' and FSupplierId.FNumber = '20001080'",
...
}
数据清洗与转换
获取到原始数据后,需要对数据进行清洗和转换,以便后续处理。以下是一些常见的数据清洗操作:
- 字段映射:将原始字段映射到目标系统所需的字段。例如,将
FBillNo
映射为目标系统中的order_number
。 - 数据格式转换:例如,将日期格式从字符串转换为标准日期格式。
- 数据过滤:去除不符合业务规则的数据,例如状态为“作废”的单据。
示例代码:
def clean_data(raw_data):
cleaned_data = []
for entry in raw_data:
if entry['FDocumentStatus'] != '作废':
cleaned_entry = {
'order_number': entry['FBillNo'],
'entry_id': entry['FInStockEntry_FEntryId'],
'stock_org': entry['FStockOrgId_FNumber'],
'entry_date': parse_date(entry['FDate']),
...
}
cleaned_data.append(cleaned_entry)
return cleaned_data
def parse_date(date_str):
return datetime.strptime(date_str, '%Y-%m-%d')
数据写入
完成数据清洗和转换后,将处理后的数据写入目标系统。在此过程中,可以使用轻易云平台提供的数据写入功能,实现与吉客云采购入库模块的无缝对接。
示例代码:
def write_to_target_system(cleaned_data):
for data in cleaned_data:
response = target_system_api.write(data)
if response.status_code != 200:
log_error(response)
write_to_target_system(cleaned_data)
通过上述步骤,我们实现了从金蝶云星空获取采购入库单据,并对其进行初步加工处理,为后续的数据集成奠定了基础。
使用轻易云数据集成平台进行金蝶采购入库对接吉客云采购入库的ETL转换
在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将深入探讨如何使用轻易云数据集成平台,将金蝶采购入库数据转换为吉客云API接口所能接收的格式,并最终写入目标平台。
数据请求与清洗
首先,我们需要从金蝶系统中提取相关的采购入库数据。此步骤涉及到调用金蝶系统的API接口,并获取原始数据。这些数据通常包括单据编号、物料编码、数量、批次信息等。
数据转换与写入
接下来,我们进入生命周期的第二步:数据转换与写入。我们需要将已经提取并清洗过的数据,按照吉客云API接口要求进行格式转换。以下是具体操作步骤和技术细节。
配置元数据
根据提供的元数据配置,我们需要将金蝶系统的数据字段映射到吉客云API所需的字段。以下是元数据配置中的关键字段及其对应关系:
- FBillNo 对应
relDataId
(关联单据编号) - FStockId_FNumber 对应
inWarehouseCode
(仓库编码) - FDate 对应
applyDate
(申请时间) - details.FMaterialId_FNumber 对应
stockInDetailViews.skuBarcode
(货品编号) - details.FRemainInStockQty 对应
stockInDetailViews.skuCount
(入库数量)
API接口调用
吉客云API接口配置如下:
{
"api": "erp.stock.createandstockin",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo",
"bodyName": "details",
"bodySum": ["FRemainInStockQty"],
"header": ["FID", "FBillNo", "FDocumentStatus", "FStockId_FNumber", "FDate"],
"body": ["FMaterialId_FNumber", "FRemainInStockQty", "FLot_FNumber", "FProduceDate", "FExpiryDate", "FMaterialId_FExpPeriod"]
}
}
请求参数构建
根据上述元数据配置和API要求,我们需要构建请求参数。以下是一个示例请求参数:
{
"vendCode": "",
"applyDepartCode": "",
"applyCompanyCode": "",
"inWarehouseCode": "{FStockId_FNumber}",
"inType": "101",
"relDataId": "{FBillNo}",
...
// 省略其他固定值字段
...
"stockInDetailViews": [
{
"skuBarcode": "{{details.FMaterialId_FNumber}}",
...
// 批号明细
...
{
...
// 批号信息
...
}
}
]
}
批号明细处理
在处理批号明细时,需要特别注意以下字段:
- FLot_FNumber 对应
batchList.batchNo
(批号) - FProduceDate 对应
batchList.productionDate
(生产日期) - FExpiryDate 对应
batchList.expirationDate
(到期日期)
例如:
"batchList": [
{
...
// 批号信息
...
{
...
// 保质期和单位处理
...
{
...
// 保质期单位查找
...
}
}
}
]
数据提交
最后,将构建好的请求参数通过POST方法提交到吉客云的API接口:
POST /erp.stock.createandstockin HTTP/1.1
Host: api.jikekyun.com
Content-Type: application/json
Authorization: Bearer <token>
{
... // 请求参数JSON对象
}
实时监控与日志记录
在整个ETL过程中,轻易云平台提供了实时监控和日志记录功能,可以帮助我们跟踪每一步操作的状态和结果。如果出现错误或异常,可以通过日志快速定位问题并进行修复。
通过以上步骤,我们成功地将金蝶采购入库的数据转换为吉客云API所能接收的格式,并顺利完成了数据写入。这不仅实现了两个异构系统之间的数据无缝对接,还极大提升了业务流程的自动化程度和效率。