案例分享:金蝶云星空数据集成到管易云
在本次案例中,我们聚焦于如何通过轻易云数据集成平台,将金蝶云星空的数据高效、准确地对接至管易云系统,确保整个出库业务流程的顺畅运行。具体方案名称为“其他出库对接-已测试”,主要涉及API接口executeBillQuery
和gy.erp.stock.other.out.add
的有效利用。
确保数据不漏单与及时抓取
首先,为了确保从金蝶云星空获取的数据不漏单,我们使用其提供的API接口executeBillQuery
。此接口可以定时可靠地抓取所需数据,同时实时监控每一次调用情况。在配置过程中,特别注意分页处理以及限流机制设置,以保证在大量数据环境下的稳定性。例如,通过合理设定每页记录数量和最大调用次数,有效避免超时或拒绝服务的问题。
批量快速写入管易云
对于将获取的数据批量快速写入到管易云,我们选择了其API接口gy.erp.stock.other.out.add
。为了提升整体写入效率,通过并行处理技术,同步多线程执行批量操作。这不仅缩短了大规模数据传输时间,还具备一定程度上的容错能力,在网络抖动或者临时故障情况下仍能保持较高成功率。此外,对每一条待写入记录进行了预先格式转换,以适配管易云要求的数据结构。
综上,用轻易云平台实施这项双向集成工作,不仅使我们能够全面掌控整个业务流程,还保障了各环节中的准确定时、高效传输和异常恢复功能。在接下来的部分中,将详细探讨具体的实施步骤及代码示例,以便读者更好理解这一实际应用场景中的细节操作和问题解决策略。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,以获取并加工数据。
接口配置与请求参数
首先,我们需要配置元数据,以便正确调用金蝶云星空的executeBillQuery
接口。以下是元数据配置的详细信息:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FEntity_FEntryID",
"name": "FBillNo",
"idCheck": true,
"request": [
{"field":"FEntity_FEntryID","label":"FEntryID","type":"string","describe":"FEntryID","value":"FEntity_FEntryID"},
{"field":"FID","label":"实体主键","type":"string","describe":"实体主键","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"单据状态","value":"FDocumentStatus"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID"},
{"field":"FNOTE","label":"备注","type":"string","describe":"备注","value":"FNOTE"},
{"field":"FMATERIALID_FNumber","label":"物料编码","type":"string","describe":"物料编码","value":"FMATERIALID.FNumber"},
{"field":"FSTOCKID_FNumber", "label": "发货仓库", "type": "string", "describe": "发货仓库", "value": "FSTOCKID.FNumber"},
{"field": "FQty", "label": "实收数量", "type": "string", "describe": "实收数量", "value": "FQty"},
{"field": "F_recipient", "label": "联系人", "type": "string", "value": "F_recipient"},
{"field": "F_Shipping_address", "label": "地址", "type": string, value: F_Shipping_address},
{"field": F_Receiving_phone_number, label: 手机号码, type: string, value: F_Receiving_phone_number},
{"field: F_economize, label: 省份, type: string, value: F_economize},
{"field: F_market, label: 市, type: string, value: F_market},
{"field: F_distinguish, label: 区, type: string, value: F_distinguish}
],
...
}
请求参数解析
-
基本字段:
FBillNo
: 单据编号,用于唯一标识一张单据。FID
: 实体主键,用于唯一标识一个实体。FEntity_FEntryID
: 分录行主键,用于唯一标识分录行。FMATERIALID.FNumber
: 物料编码,用于标识物料。FSTOCKID.FNumber
: 发货仓库,用于标识仓库。
-
扩展字段:
F_recipient
: 联系人信息。F_Shipping_address
: 收货地址。F_Receiving_phone_number
: 收货人手机号码。F_economize
,F_market
,F_distinguish
: 地址的省、市、区信息。
-
分页参数:
Limit
: 最大行数,控制每次查询返回的数据量。StartRow
: 开始行索引,控制从哪一行开始查询。TopRowCount
: 返回总行数,用于分页查询。
-
过滤条件:
FilterString
: 用于设置查询条件,例如根据时间和单据类型进行过滤。
-
字段集合:
FieldKeys
: 指定需要查询的字段集合,格式为数组。
调用示例
以下是一个调用executeBillQuery
接口的示例代码:
{
method: 'POST',
url: 'https://api.kingdee.com/executeBillQuery',
headers: {
'Content-Type': 'application/json'
},
data: {
FormId: 'STK_MisDelivery',
FieldKeys: ['FBillNo', 'FID', 'FMATERIALID.FNumber', '...'],
FilterString: 'FBillTypeID.FNUMBER = \'QTCKD06_SYS\' and FApproveDate>=\'2023-01-01\'',
Limit: '100',
StartRow: '0'
}
}
在这个请求中,我们指定了表单Id为STK_MisDelivery
,并通过FieldKeys
指定了需要查询的字段。同时,通过FilterString
设置了过滤条件,仅查询特定类型和日期范围内的数据。
数据处理与清洗
获取到数据后,需要对其进行清洗和转换,以便后续处理。可以使用轻易云平台提供的数据处理工具,对数据进行格式化、去重、补全等操作。例如:
def clean_data(data):
# 去除重复项
data = remove_duplicates(data)
# 补全缺失值
data = fill_missing_values(data)
# 格式化日期
data['date'] = format_date(data['date'])
return data
通过上述步骤,我们可以确保从金蝶云星空获取的数据是干净且符合业务需求的,为后续的数据转换与写入奠定基础。
数据请求与清洗
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,以便目标平台(管易云API接口)能够接收并处理这些数据。此过程主要涉及数据请求与清洗、数据转换与写入。
数据转换与写入
API接口配置
根据提供的元数据配置,我们需要调用管易云的gy.erp.stock.other.out.add
API接口来完成数据写入操作。该接口采用POST方法,支持异步执行,并要求进行ID校验。
请求参数配置
请求参数包括:
warehouse_code
:仓库代码,对应源数据中的FSTOCKID
。wms_bizcode
:第三方系统单号,由源数据中的FBillNo
和随机数生成。note
:备注信息,格式为“金蝶其他出库单-{FBillNo}”。type
:出库类型代码,固定值为“002”。receiver_name
:收货人姓名,对应源数据中的F_recipient
。receiver_mobile
:收货人手机,对应源数据中的F_Receiving_phone_number
。receiver_address
:收货人地址,对应源数据中的F_Shipping_address
。receiver_province
:发货人省份,对应源数据中的F_economize
。receiver_city
:发货人市,对应源数据中的F_market
。receiver_district
:发货人区,对应源数据中的F_distinguish
。
商品列表(details)字段是一个数组,每个商品包含以下子字段:
item_code
: 商品代码,对应源数据中的items.FMATERIALID_FNumber
barcode
: 商品条码(可选)sku_code
: 规格代码,对应源数据中的items.FMATERIALID_FNumber
qty
: 数量,对应源数据中的items.FQty
stockDate
: 出库时间,对应源数据中的items.FDate
数据清洗与转换
在将这些字段映射到目标平台之前,我们需要对原始数据进行必要的清洗和转换。例如,将多个字段合并或拆分,确保所有字段都符合目标API的格式要求。
{
"api": "gy.erp.stock.other.out.add",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo,F_Shipping_address,F_recipient",
"bodyName": "items",
"bodySum": ["FQty"],
"header": ["FBillNo", "FSTOCKID", "F_recipient", "F_Receiving_phone_number", "F_Shipping_address",
"F_economize", "F_market", "F_distinguish"],
"body": ["FMATERIALID_FNumber", "FQty", "FDate"]
},
"request": [
{"field":"warehouse_code","label":"仓库代码","type":"string","describe":"仓库代码","value":"{FSTOCKID}"},
{"field":"wms_bizcode","label":"第三方系统单号","type":"string","value":"{FBillNo}-{random}"},
{"field":"note","label":"备注","type":"string","describe":"备注","value":"金蝶其他出库单-{FBillNo}"},
{"field":"type","label":"出库类型代码","type":"string","describe":"出库类型代码","value":"002"},
{"field":"receiver_name","label":"收货人","type":"string","value":"{F_recipient}"},
{"field":"receiver_mobile","label":"收货人手机","type":"string","value":"{F_Receiving_phone_number}"},
{"field":"receiver_address","label":"收货人地址","type":"string","value":"{F_Shipping_address}"},
{"field":"receiver_province","label":"发货人省份","type":"string","value":"{F_economize}"},
{"field":"receiver_city","label":"发货人市","type":"string","value":"{F_market}"},
{"field":"receiver_district","label":"发货人区","type":"string","value":"{F_distinguish}"},
{
"field": "details",
"label": "商品列表",
"type": "array",
"describe": "商品列表",
"value": "items",
"children": [
{"field": "item_code",
"label": "商品代码",
"type": string,
describe: 商品代码与商品条码二者必选其一,当两者都提供时,以商品条码为准,
value: {{items.FMATERIALID_FNumber}}},
{"field": barcode, label: 商品条码, type: string, describe: 商品条码与商品代码二者必选其一,当两者都提供时,以商品条码为准},
{"field" sku_code, label: 规格代码, type: string, describe: 有规格的商品此字段必填, value: {{items.FMATERIALID_FNumber}}},
{"field" qty, label: 数量, type: string, describe: 若当前商品为唯一码商品,忽略这个参数的传入值,程序固定取1。开启小数库存参数的情况下,支持以小数形式录入数量,value: {{items.FQty}}},
{ field stockDate,label 出库时间,type string,value {{items.FDate}}}
]
}
]
}
实际应用案例
假设我们从金蝶系统中获取了一批其他出库单的数据,这些数据包括了仓库信息、收货人信息以及详细的商品信息。我们需要将这些信息通过轻易云平台转换并写入到管易云系统中。
-
获取原始数据:
- 从金蝶系统中获取其他出库单的数据,包括单号、仓库编码、收货人信息等。
-
清洗和转换:
- 将原始数据按照上述配置进行清洗和转换,例如,将多个字段合并生成新的字段值(如第三方系统单号)。
- 确保所有字段都符合管易云API的格式要求,例如将日期格式化为标准格式。
-
发送请求:
- 使用轻易云平台提供的API调用功能,将清洗和转换后的数据发送到管易云API接口。
-
监控和验证:
- 通过轻易云平台的实时监控功能,查看API调用结果,确保所有数据都成功写入到管易云系统中。
- 如果出现错误,根据错误信息进行排查和修正,然后重新发送请求。
通过上述步骤,我们可以高效地将金蝶系统中的其他出库单数据集成到管易云系统中,实现不同系统间的数据无缝对接。这不仅提升了业务效率,还确保了数据的一致性和准确性。