吉客云数据集成到金蝶云星空:实现盘盈单其他出库负数的高效解决方案
在企业日常运营中,库存管理是至关重要的一环。本案例重点展示如何通过轻易云平台,将吉客云中的盘盈单-其他出库-负数数据高效集成到金蝶云星空系统。这里涉及到两个关键API接口:获取吉客云数据的erp.storage.goodsdocin.v2
,以及写入金蝶云星空数据的batchSave
。
为了确保任务执行的可靠性与效率,我们采用了如下技术策略:
-
实时监控与日志记录:利用轻易云提供的数据处理全生命周期管理功能,对整个集成过程进行实时监控并记录操作日志。这不仅保障了操作透明度,还能及时发现和处理异常情况。
-
高吞吐量的数据写入能力:针对吉客云大批量数据快速写入到金蝶云星空的问题,我们利用轻易平台强大的流处理能力,保障在短时间内完成大量数据传输,使得业务运行更加顺畅。
-
分页和限流优化:由于吉客云接口存在分页和限流问题,我们设计了一套合理的分段抓取机制及速率控制方法,有效避免因请求过多而导致的数据丢失或服务器压力过载。另外,通过定时抓取确保接口调用频率适当,从而提高整体效率。
-
自定义转换逻辑与映射对接:考虑到吉客云与金蝶云星空之间可能存在的数据格式差异,我们使用轻易平台提供的自定义转换逻辑工具,实现从源端格式到目标端格式的一致性转换。同时,在映射过程中充分考虑各字段间关系,以满足特定业务需求。
-
集中监控和告警系统:我们通过启用集中化的任务状态监控和告警通知系统,即时跟踪每一个数据集成步骤。一旦出现异常状况,相关人员可以第一时间收到通知,并迅速做出响应调整,以减少对生产环境的不良影响。
本案例展示了如何结合以上技术点,为用户提供一套完整且可行的数据集成解决方案。在后续部分中,我们将详细阐述具体实施步骤及代码实现细节。
调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用吉客云接口erp.storage.goodsdocin.v2
,并对获取的数据进行初步加工。
接口配置与请求参数
根据提供的元数据配置,我们需要向吉客云接口发送一个POST请求。以下是请求参数的详细说明:
- pageIndex: 分页页码,类型为字符串。
- pageSize: 分页页数,类型为字符串,默认值为50。
- goodsDocNo: 入库单号,类型为字符串。
- startDate: 创建时间的起始时间,类型为字符串,使用占位符
{{LAST_SYNC_TIME|datetime}}
自动填充。 - endDate: 创建时间的结束时间,类型为字符串,使用占位符
{{CURRENT_TIME|datetime}}
自动填充。 - inouttype: 入库类型,类型为字符串,此处固定值为103(盘盈入库)。
- warehouseId: 仓库ID,类型为字符串。
- warehouseCode: 仓库编号,类型为字符串。
- vendId: 供应商ID(往来单位),类型为字符串。
- vendCode: 供应商编号(往来单位),类型为字符串。
- billNo: 上游单据号(关联单号),类型为字符串。
- userName: 创建人名称,类型为字符串。
- gmtModifiedStart: 主表更新时间起始,类型为字符串。
- gmtModifiedEnd: 主表更新时间截至,类型为字符串。
- selelctFields: 返回参数列表,以逗号分隔的字段名。
请求示例
以下是一个完整的请求示例:
{
"pageIndex": "1",
"pageSize": "50",
"goodsDocNo": "",
"startDate": "{{LAST_SYNC_TIME|datetime}}",
"endDate": "{{CURRENT_TIME|datetime}}",
"inouttype": "103",
"warehouseId": "",
"warehouseCode": "",
"vendId": "",
"vendCode": "",
"billNo": "",
"userName": "",
"gmtModifiedStart": "",
"gmtModifiedEnd": "",
"selelctFields": "goodsdocNo,inOutDate,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList"
}
数据清洗与转换
在获取到原始数据后,需要对其进行清洗和转换。根据元数据配置中的beatFlat
和condition_bk
字段,我们需要将嵌套的goodsDocDetailList
字段展开,并过滤出数量小于0的数据记录。
数据展开
首先,将嵌套的goodsDocDetailList
字段展开,使每条记录都包含详细的商品信息。这一步可以通过轻易云平台提供的数据处理功能实现。
数据过滤
接下来,根据条件过滤出数量小于0的数据记录。此步骤同样可以通过轻易云平台内置的条件过滤功能完成。
自动填充与定时任务
元数据配置中的autoFillResponse
字段设置为true,这意味着响应结果会自动填充到目标系统中。此外,为了确保数据同步的完整性,还配置了定时任务(crontab)以补救可能遗漏的数据:
{
"crontab": "9 2 * * *",
"takeOverRequest": [
{
"field": "startDate",
"value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )",
"type": "string",
"label": "接管字段"
}
]
}
该定时任务每天凌晨2点9分运行一次,通过计算三天前的时间戳来补救遗漏的数据。
总结
通过以上步骤,我们成功调用了吉客云接口并对获取的数据进行了初步加工。轻易云数据集成平台提供了强大的可视化操作界面和丰富的数据处理功能,使得整个过程高效且透明。在实际应用中,可以根据具体需求进一步调整和优化数据处理流程,以满足业务需求。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并将其转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
元数据配置解析
首先,我们需要了解元数据配置中的各个字段和参数,以便在ETL过程中正确地映射和转换数据。
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "goodsDocDetailList_ownerName,goodsdocNo",
"bodyName": "items",
"header": ["goodsdocNo", "inOutDate", "goodsDocDetailList_ownerName"],
"body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"]
},
...
}
api
: 指定了调用的金蝶云星空API接口为batchSave
。effect
: 表示执行操作。method
: HTTP请求方法为POST。idCheck
: 是否进行ID检查。operation
: 包含了合并方法、字段映射和请求体结构。
请求体配置
元数据配置中详细描述了请求体的结构和字段映射关系。以下是关键字段的解释:
"request": [
{
"field": "FJKYNo",
...
"value": "{goodsdocNo}"
},
{
...
"value": "{goodsDocDetailList_ownerName}",
...
},
...
]
FJKYNo
: 映射到源数据中的goodsdocNo
,表示单据编号。FBillTypeID
: 固定值QTCKD98_SYS
,表示单据类型。FStockOrgId
: 映射到goodsDocDetailList_ownerName
,表示库存组织。
数据转换逻辑
在ETL过程中,需要对源数据进行清洗和转换,以符合目标平台的要求。例如,将负数处理为正数,并映射相关字段:
"children": [
{
...
"value": "{{items.goodsDocDetailList_goodsNo}}"
},
{
...
"value": "_function {{items.goodsDocDetailList_quantity}} *(-1)"
}
]
FMATERIALID
: 映射到物料编码goodsDocDetailList_goodsNo
。FQty
: 实发数量,需要将数量乘以-1以表示出库。
实现步骤
- 提取源数据:从吉客云盘盈单中提取所需的数据字段,如单据编号、日期、库存组织等。
- 清洗与转换:根据元数据配置,对提取的数据进行清洗和转换。例如,将数量字段乘以-1,并映射到相应的目标字段。
- 构建请求体:按照金蝶云星空API接口要求,构建符合规范的JSON请求体。
- 发送请求:使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。
示例代码
以下是一个简化的Python示例代码,用于展示如何实现上述步骤:
import requests
import json
# 提取并清洗源数据
source_data = {
'goodsdocNo': '12345',
'inOutDate': '2023-10-01',
'goodsDocDetailList_ownerName': 'Org001',
'items': [
{'goodsDocDetailList_goodsNo': 'MAT001', 'goodsDocDetailList_quantity': -10, 'warehouseCode': 'WH001'}
]
}
# 构建请求体
request_body = {
'FormId': 'STK_MisDelivery',
'IsAutoSubmitAndAudit': True,
'IsVerifyBaseDataField': True,
'Operation': 'Save',
'InterationFlags': 'STK_InvCheckResult',
'Model': {
'FID': '',
'FJKYNo': source_data['goodsdocNo'],
'FBillTypeID': {'FNumber': 'QTCKD98_SYS'},
# 更多字段...
'FEntity': [
{
'FMATERIALID': {'FNumber': item['goodsDocDetailList_goodsNo']},
# 数量乘以 -1
'FQty': item['goodsDocDetailList_quantity'] * -1,
# 更多字段...
} for item in source_data['items']
]
# 更多字段...
}
}
# 发起POST请求
response = requests.post(
url='https://api.kingdee.com/batchSave',
headers={'Content-Type': 'application/json'},
data=json.dumps(request_body)
)
# 检查响应结果
if response.status_code == 200:
print("Data successfully written to Kingdee Cloud")
else:
print(f"Failed to write data: {response.text}")
通过上述步骤,我们成功地将吉客云盘盈单的数据经过ETL转换后写入了金蝶云星空系统。这个过程展示了如何利用轻易云数据集成平台,实现不同系统间的数据无缝对接。