吉客云与金蝶云星空的无缝对接:实现JY-BDS其他入库单
在系统集成项目中,数据的精准流转和实时监控至关重要。本案例将重点介绍如何利用轻易云数据集成平台,实现吉客云中的“其他入库单”数据(通过API erp.storage.goodsdocin
获取),批量写入到金蝶云星空(使用API batchSave
) 的技术方案。
为了确保高效的数据处理,我们采用了以下几项关键技术:
-
高吞吐量支持:吉客云的海量“其他入库单”数据能够快速被整合,保证了业务处理的时效性。这一能力尤为重要,因为它直接影响到企业库存管理和财务核算的效率。
-
集中监控与告警系统:在整个集成过程中,通过集中式监控和告警功能,可以实时跟踪任务状态、性能瓶颈及异常情况。这不仅提高了问题发现速度,还大幅度减少了意外停机时间,提高整体可靠性。
-
自定义转换逻辑:针对吉客云与金蝶云星空之间可能存在的数据格式差异,我们设计并实现了一套灵活且可定制化的数据转换逻辑,以适应不同业务需求。此举有效避免了因格式不匹配引起的数据错误。
-
批量操作与分页限流策略:为了充分利用API资源,在获取吉客云接口数据时,引入分页限流机制。同时,确保在调用金蝶云星空
batchSave
接口时,能顺利执行批量写入操作,从而优化整体性能表现。 -
完善的错误重试机制:鉴于网络或服务端的不确定因素,我们还设计了一套完整的异常处理及错误重试机制,以便在遇到问题时可以自动进行修复尝试,这样有助于最大限度地保障数据传输过程中的稳定性和完整性。
调用吉客云接口获取并加工数据的技术案例
在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用吉客云接口erp.storage.goodsdocin
,获取并加工入库单数据。
接口概述
吉客云提供的erp.storage.goodsdocin
接口用于获取入库单信息。该接口采用POST请求方式,支持分页查询,并允许根据多种条件进行筛选。以下是元数据配置的详细信息:
{
"api": "erp.storage.goodsdocin",
"method": "POST",
"number": "goodsdocNo",
"id": "recId",
"pagination": {
"pageSize": 50
},
"idCheck": true,
"request": [
{"field":"pageIndex","label":"分页页码","type":"string"},
{"field":"pageSize","label":"分页页数","type":"string","value":"50"},
{"field":"goodsDocNo","label":"入库单号","type":"string"},
{"field":"startDate","label":"创建时间的起始时间","type":"string","value":"{{DAYS_AGO_2|datetime}}"},
{"field":"endDate","label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"},
{"field":"inouttype","label":"入库类型","type":"string","describe":"入库类型(100-期初库存 101-采购入库 102-调拨入库 103-盘盈入库 104-其他入库 105-销售退货 106-完工入库 107-组装拆卸入库 108-翻新入库 109-报废入库 110-残次品入库111-成本调整 112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"104"},
{"field":"warehouseCode","label":"仓库编号","type":"string"},
{"field":"vendCode","label":"供应商编码","type":"string"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
{"field":"userName","label":"创建人名称","type":"string"}
]
}
数据请求与清洗
在调用该接口时,需要构建请求体,并根据业务需求设置相应的参数。以下是一个典型的请求示例:
{
"pageIndex": "1",
"pageSize": "50",
"startDate": "{{DAYS_AGO_2|datetime}}",
"endDate": "{{CURRENT_TIME|datetime}}",
"inouttype": "104"
}
在这个请求中,我们设置了分页参数pageIndex
和pageSize
,以及时间范围参数startDate
和endDate
。此外,我们指定了inouttype
为"104",表示查询其他入库类型的数据。
数据转换与写入
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以对日期格式进行标准化处理,对字段名称进行映射等。以下是一个简单的数据转换示例:
def transform_data(raw_data):
transformed_data = []
for record in raw_data:
transformed_record = {
'record_id': record['recId'],
'document_number': record['goodsdocNo'],
'created_at': standardize_date(record['createTime']),
'warehouse_code': record['warehouseCode'],
'vendor_code': record['vendCode'],
'creator_name': record['userName']
}
transformed_data.append(transformed_record)
return transformed_data
在这个示例中,我们将原始记录中的字段进行了重命名,并对日期格式进行了标准化处理。
实际应用案例
假设我们需要集成吉客云的其他入库单数据到我们的系统中,可以按照以下步骤操作:
- 构建请求体:根据业务需求设置查询条件。
- 发送请求:通过轻易云平台发送POST请求到吉客云接口。
- 接收响应:获取返回的数据并进行初步验证。
- 数据清洗:对接收到的数据进行清洗和转换。
- 写入目标系统:将处理后的数据写入目标系统。
以下是一个实际应用中的代码片段:
import requests
def fetch_goodsdocin_data(page_index):
url = 'https://api.jikecloud.com/erp.storage.goodsdocin'
payload = {
'pageIndex': str(page_index),
'pageSize': '50',
'startDate': '{{DAYS_AGO_2|datetime}}',
'endDate': '{{CURRENT_TIME|datetime}}',
'inouttype': '104'
}
response = requests.post(url, json=payload)
if response.status_code == 200:
return response.json()
else:
raise Exception(f"Failed to fetch data: {response.status_code}")
# 获取第一页的数据
raw_data = fetch_goodsdocin_data(1)
# 数据清洗和转换
cleaned_data = transform_data(raw_data)
# 将清洗后的数据写入目标系统(此处省略具体实现)
write_to_target_system(cleaned_data)
通过以上步骤,我们可以高效地从吉客云获取其他入库单数据,并将其集成到我们的系统中。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。
使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口
在轻易云数据集成平台中,数据集成的第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
配置元数据
根据提供的元数据配置,我们需要将源数据转换为金蝶云星空API接口所需的数据格式。该配置文件定义了各个字段的映射关系、类型和必要的转换规则。
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value": "{goodsdocNo}"
},
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
...
}
],
...
}
数据转换与写入
-
单据编号 (FBillNo):
- 源字段:
goodsdocNo
- 转换:直接映射,无需额外处理。
- 源字段:
-
单据类型 (FBillTypeID):
- 固定值:
QTRKD01_SYS
- 转换:使用
ConvertObjectParser
将其转换为目标系统识别的格式。
- 固定值:
-
库存组织 (FStockOrgId):
- 源字段:
warehouseCode
- 转换:通过
_findCollection
方法从指定集合中查找匹配值,并使用ConvertObjectParser
转换。
- 源字段:
-
库存方向 (FStockDirect):
- 固定值:
GENERAL
- 转换:直接映射,无需额外处理。
- 固定值:
-
日期 (FDate):
- 源字段:
inOutDate
- 转换:使用
_function FROM_UNIXTIME
将时间戳转换为标准日期格式。
- 源字段:
-
部门 (FDEPTID):
- 源字段:
departCode
- 转换:使用
ConvertObjectParser
将其转换为目标系统识别的格式。
- 源字段:
-
货主 (FOwnerIdHead):
- 源字段:
companyCode
- 转换:使用
ConvertObjectParser
将其转换为目标系统识别的格式。
- 源字段:
-
备注 (FNOTE):
- 源字段:
comment
- 转换:直接映射,无需额外处理。
- 源字段:
-
吉客云单据编号 (F_JKBillNo):
- 源字段:
goodsdocNo
- 转换:直接映射,无需额外处理。
- 源字段:
-
其他入库原因 (F_QKZI_Assistant):
- 源字段:
inOutReason
- 转换:通过
_findCollection
方法从指定集合中查找匹配值,并使用ConvertObjectParser
转换。
- 源字段:
-
明细信息 (FEntity): 明细信息包含多个子字段,每个子字段需要分别进行处理。
a. 物料编码 (FMATERIALID):
- 源字段:
goodsDocDetailList.goodsNo
- 转换:使用
ConvertObjectParser
将其转换为目标系统识别的格式。
b. 收货仓库 (FSTOCKID):
- 源字段:
warehouseCode
- 转换:使用
ConvertObjectParser
将其转换为目标系统识别的格式。
c. 实收数量 (FQty):
- 源字段:
goodsDocDetailList.quantity
- 转换:直接映射,无需额外处理。
d. 备注 (FEntryNote):
- 源字段:
goodsDocDetailList.rowRemark
- 转换:直接映射,无需额外处理。
- 源字段:
API请求构建
根据上述配置和转换规则,构建最终的API请求:
{
"FormId": "STK_MISCELLANEOUS",
...
"Model": {
...
{
...
{
...
{
...
}
}
}
}
}
提交与审核
最后,将构建好的请求通过POST方法提交至金蝶云星空API接口,并设置自动提交与审核参数:
{
...
"IsAutoSubmitAndAudit": true
}
通过以上步骤,我们实现了将源平台的数据经过ETL转换后,成功写入到金蝶云星空API接口。