金蝶云星空数据集成到旺店通·企业奇门的技术案例分享
在企业数字化管理过程中,通常需要将各个独立系统的数据进行有效整合,以提高整体业务运营效率。本篇文章将重点介绍如何通过轻易云数据集成平台,实现金蝶云星空中的调拨单数据同步到旺店通·企业奇门中的其他入库单(中转仓)。
为了确保此次系统对接的完整性与高效性,我们主要采用了以下关键步骤和技术手段:
-
调用金蝶云星空接口获取调拨单数据
通过调用executeBillQuery接口,从金蝶云星空中实时抓取最新的调拨单数据。该接口支持按时间戳分页查询,能够应对大批量数据情况,同时处理API限流问题。 -
格式转换与映射定制化
由于不同系统间的数据格式存在差异,我们使用自定义映射规则,对从金蝶云星空获取的数据进行转换,使之适配于旺店通·企业奇门所需的字段结构。这一步骤至关重要,以保证写入操作时不会发生错误。 -
大量数据快速写入到旺店通·企业奇门
为实现快速、高效地将转换后的调拨单信息批量推送到旺店通·企业奇门,我们利用wdt.stockin.order.push API进行操作。结合分片并发处理方法,大大提升了大规模数据传输的性能。 -
定时抓取与可靠执行机制
为确保不漏掉任何新增或更新的调拨单记录,我们设计了一个定时任务,通过轻易云提供的自动化流程,每隔一段设定时间周期性地触发executeBillQuery,并完成后续处理。一旦发现异常情况,会自动重试并生成详细日志记录,便于后期追溯和分析。 -
实时监控及日志记录
在整个集成过程中,通过及时监控和全面详尽的日志记录,可以迅速定位和解决可能出现的问题,保持系统对接过程透明可控,从而为业务运行提供有力保障。
通过这几个关键步骤的方法实践,本次案例成功实现了跨平台、跨数据库的数据顺利交互。在接下来的部分,将会详细讲解每一步具体技术实现方案,以及我们遇到的一些挑战及其解决办法。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,获取调拨单数据并进行初步加工。
配置元数据
首先,我们需要配置元数据,以便正确调用金蝶云星空的API接口。以下是我们使用的元数据配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FBillEntry_FEntryID",
"idCheck": true,
"request": [
{"field":"FBillEntry_FEntryID","label":"FBillEntry_FEntryID","type":"string","describe":"111","value":"FBillEntry_FEntryID"},
{"field":"FID","label":"FID","type":"string","describe":"111","value":"FID"},
{"field":"FBillNo","label":"FBillNo","type":"string","describe":"111","value":"FBillNo"},
{"field":"FDocumentStatus","label":"FDocumentStatus","type":"string","describe":"111","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"FStockOrgId_FNumber","type":"string","describe":"111","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"FDate","type":"string","describe":"111","value":"FDate"},
{"field":"FBillTypeID_FNumber","label":"FBillTypeID_FNumber","type":"string","describe":"111","value":"FBillTypeID.FNumber"},
{"field":"FTransferBizType","label":"FTransferBizType","type":"string","describe":"111","value":"FTransferBizType"},
{"field":...}
],
"otherRequest": [
{"field": "Limit", "label": "Limit", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "FieldKeys", "label": "FieldKeys", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "value": "{MAIN_REQUEST}"},
{"field":...}
],
...
}
调用API接口
在配置好元数据后,我们可以通过POST请求调用executeBillQuery
接口。以下是一个示例请求体:
{
"FormId": "STK_TransferDirect",
"FieldKeys": ["FID", "FBillNo", ...],
"FilterString": "(FSrcStockId.FNumber ='01.06' or FSrcStockId.FNumber ='CK001') and FApproveDate>='2023-01-01'",
...
}
该请求体包含了表单ID、字段键、过滤条件等信息。通过这些参数,我们可以精确地从金蝶云星空中获取所需的数据。
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,我们可能需要将日期格式统一、过滤掉无效记录或根据业务需求添加计算字段。
以下是一个简单的数据清洗示例:
import pandas as pd
# 假设data是从API获取到的原始数据
data = [
{"FID": 1, "FBillNo": '20230101', ...},
...
]
df = pd.DataFrame(data)
# 清洗日期格式
df['FDate'] = pd.to_datetime(df['FDate'], format='%Y-%m-%d')
# 删除无效记录
df = df[df['FDocumentStatus'] == 'C']
# 添加计算字段
df['TotalAmount'] = df['FQty'] * df['FPrice']
写入目标系统
清洗和转换后的数据需要写入目标系统。在本案例中,我们将调拨单同步到旺店通其他入库单(中转仓)。这一步通常涉及调用目标系统的API接口,将处理后的数据推送过去。
import requests
url = 'https://target-system-api.com/endpoint'
headers = {'Content-Type': 'application/json'}
for index, row in df.iterrows():
payload = {
'BillNo': row['FBillNo'],
'Date': row['FDate'].strftime('%Y-%m-%d'),
'TotalAmount': row['TotalAmount'],
...
}
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
print(f"Record {row['FBillNo']} synced successfully.")
else:
print(f"Failed to sync record {row['FBillNo']}.")
通过以上步骤,我们实现了从金蝶云星空获取调拨单数据并同步到旺店通其他入库单(中转仓)的完整流程。这不仅提高了数据处理的效率,还确保了业务流程的连贯性和准确性。
使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。以下是具体的技术实现步骤和细节。
元数据配置解析
首先,我们需要理解元数据配置中的各个字段和其对应的含义:
api
: 指定调用的API接口,这里是wdt.stockin.order.push
。effect
: 操作类型,这里是EXECUTE
。method
: HTTP请求方法,这里是POST
。idCheck
: 是否检查ID,这里为true
。request
: 请求参数列表,包括外部单号、仓库编号、备注、是否审核以及货品明细节点等。otherRequest
: 其他请求参数,这里包含一个名为stockin_info
的字段。operation
: 数据操作配置,包括合并方法、字段映射等。
数据转换与写入流程
-
数据请求与清洗:从源系统获取调拨单数据,并对其进行初步清洗,确保数据完整性和一致性。
-
数据转换:
- 将源系统中的调拨单号映射为目标系统中的外部单号 (
outer_no
)。 - 固定仓库编号 (
warehouse_no
) 为 "005"。 - 添加备注 (
remark
) 为 "金蝶调拨单"。 - 设置是否审核 (
is_check
) 为 "1"。
- 将源系统中的调拨单号映射为目标系统中的外部单号 (
-
货品明细节点处理:
- 遍历每个货品明细节点,将其转换为目标系统所需的格式。具体字段包括商家编码 (
spec_no
)、入库数量 (stockin_num
)、原价 (src_price
)、入库价 (stockin_price
)、货位 (position_no
) 和批次 (batch_no
)。
- 遍历每个货品明细节点,将其转换为目标系统所需的格式。具体字段包括商家编码 (
-
构建请求体:
- 根据上述转换规则,构建符合旺店通·企业奇门API接口要求的JSON请求体。
-
发送HTTP请求:
- 使用POST方法,将构建好的请求体发送到指定API接口。
示例代码实现
import requests
import json
# 源系统数据示例
source_data = {
"FBillNo": "DB20231001",
"details_listss": [
{
"FMaterialId_FNumber": "P001",
"FQty": 100,
"FPrice": 50,
"FLot_FNumber": "BATCH001"
},
{
"FMaterialId_FNumber": "P002",
"FQty": 200,
"FPrice": 30,
"FLot_FNumber": "BATCH002"
}
]
}
# 构建目标系统请求体
request_body = {
"outer_no": source_data["FBillNo"],
"warehouse_no": "005",
"remark": "金蝶调拨单",
"is_check": "1",
"goods_list": []
}
for item in source_data["details_listss"]:
goods_item = {
"spec_no": item["FMaterialId_FNumber"],
"stockin_num": str(item["FQty"]),
"src_price": str(item["FPrice"]),
# 假设入库价与原价相同
"stockin_price": str(item["FPrice"]),
# 固定货位
"position_no": "000.000.000",
# 批次号
"batch_no": item["FLot_FNumber"]
}
request_body["goods_list"].append(goods_item)
# 打印构建好的请求体以供调试
print(json.dumps(request_body, indent=4))
# 发送HTTP POST请求到旺店通·企业奇门API接口
api_url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.push'
headers = {'Content-Type': 'application/json'}
response = requests.post(api_url, headers=headers, data=json.dumps(request_body))
# 打印响应结果以供调试
print(response.status_code)
print(response.json())
注意事项
- 字段映射:确保源系统字段与目标系统字段一一对应,避免遗漏或错误映射。
- 数据类型转换:注意将数值型字段转换为字符串,以符合API接口要求。
- 异常处理:在实际应用中,需要添加异常处理机制,以应对可能出现的网络错误或API调用失败情况。
通过上述步骤,我们成功实现了从源平台到旺店通·企业奇门API接口的数据ETL转换,并完成了数据写入操作。这个过程不仅保证了数据的一致性和完整性,还极大提升了业务处理效率。