易快报采购订单对接金蝶应付单(非月结)技术案例分享
在现代企业的业务运营中,数据的准确性和及时性至关重要。在本技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现“易快报”采购订单与“金蝶云星空”应付单(非月结)的无缝对接。
首先,我们需要确保从易快报获取的数据完整且不漏单。为此,通过调用易快报接口/api/openapi/v1.1/docs/getApplyList
,可以定时抓取最新的采购订单数据。为了避免因网络波动或接口限流导致的数据丢失问题,会采用分页请求,并结合重试机制来处理可能发生的异常情况。
在成功获取到所有所需数据后,需要将这些信息批量写入到金蝶云星空系统内。考虑到大量数据传输过程中可能产生的性能瓶颈,我们利用批量处理和并发写入策略,加速了记录提交过程。同时,为确保每条记录都被正确写入,系统会实时监控每个步骤并提供详细日志记录。如果遇到异常情况,还可触发错误重试机制以保证稳定性。
另一个关键挑战是如何高效地进行两套系统间的数据格式转换。例如,易快报中的字段名称、类型可能与金蝶云星空存在差异,这就要求我们在映射配置上做出精准调整。此外,为适配不同业务需求,还支持对接自定义规则,以便灵活应对复杂场景。
总结来说,通过以上方法有效实现了从易快报到金蝶云星空的数据集成,不仅提高了操作效率,也显著降低了人工干预带来的风险。在下一部分内容中,将深入介绍具体实现方案及其代码示例。
通过这种方式直面主题,从实际应用场景出发,使得整篇文章更具专业性和实用价值。
调用易快报接口获取并加工数据的技术实现
在数据集成生命周期的第一步中,我们需要调用易快报的接口/api/openapi/v1.1/docs/getApplyList
来获取采购订单数据,并进行必要的数据清洗和转换。以下是具体的技术实现步骤和细节。
接口调用配置
首先,我们需要配置API调用的元数据。这些元数据定义了API请求的各个参数及其含义:
{
"api": "/api/openapi/v1.1/docs/getApplyList",
"effect": "QUERY",
"method": "GET",
"number": "form.code",
"id": "id",
"idCheck": true,
"otherRequest": [
{
"field": "type",
"label": "type",
"type": "string",
"describe": "expense : 报销单\nloan : 借款单\nrepayment : 还款记录\npayment : 付款单\nrequisition : 申请单\ncustom : 通用审批单\nreceipt : 收款单",
"value": "expense"
},
{
"field": "start",
"label": "分页查询起始值",
"type": "string"
},
{
"field": "count",
"label": "count",
"type": "string",
"describe": "最大不能超过 100",
"value": "100"
},
{
...
}
],
...
}
参数详解
- type: 指定要查询的单据类型,这里设置为
expense
,即报销单。 - start: 分页查询的起始值,用于控制数据分页。
- count: 每次查询返回的数据条数,最大不能超过100。
- orderBy: 查询字段,这里设置为
updateTime
,表示按更新时间排序。 - startDate和endDate: 查询时间范围,分别表示起始时间和结束时间。
- specificationId: 单据模板ID,用于筛选特定模板的数据。
- active: 是否已删除,设置为
true
表示只查询未删除的数据。 - state: 单据状态,多个状态用逗号分隔。
数据请求与清洗
在调用接口获取数据后,需要对返回的数据进行清洗。清洗过程包括过滤无效数据、标准化字段格式等操作。以下是一个示例代码片段:
import requests
import datetime
# 定义API URL
url = 'https://api.yikuaibao.com/api/openapi/v1.1/docs/getApplyList'
# 定义请求参数
params = {
'type': 'expense',
'start': '0',
'count': '100',
'orderBy': 'updateTime',
'startDate': (datetime.datetime.now() - datetime.timedelta(days=30)).strftime('%Y-%m-%d %H:%M:%S'),
'endDate': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'specificationId': 'ID01nExzdQyBs3',
'active': 'true',
'state': 'paying,PROCESSING,paid,archived'
}
# 发起GET请求
response = requests.get(url, params=params)
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗
cleaned_data = []
for item in data['data']:
if item['details']['_amount_standard'] > 0:
cleaned_data.append(item)
else:
print(f"Error: {response.status_code}")
数据转换与写入
在完成数据清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。以下是一个示例代码片段:
def transform_and_write(data):
transformed_data = []
for item in data:
transformed_item = {
'order_id': item['form']['code'],
'amount': item['details']['_amount_standard'],
...
}
transformed_data.append(transformed_item)
# 假设目标系统有一个API用于接收转换后的数据
target_url = 'https://target-system.com/api/receiveData'
for item in transformed_data:
response = requests.post(target_url, json=item)
if response.status_code != 200:
print(f"Failed to write data for order_id {item['order_id']}")
通过上述步骤,我们实现了从易快报接口获取采购订单数据,并对其进行清洗、转换和写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还提高了业务处理效率。
使用轻易云数据集成平台进行金蝶云星空API接口数据转换与写入
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现细节。
1. API接口配置
我们使用的是金蝶云星空的batchSave
API接口,采用POST请求方法。该接口支持批量保存操作,并且每次请求可以处理多条记录。配置如下:
{
"api": "batchSave",
"method": "POST",
"pagination": {
"pageSize": 100
},
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"idCheck": true
}
2. 请求参数配置
根据元数据配置,我们需要构建请求参数,包括单据类型、结算组织、单据编号、业务类型等字段。以下是关键字段及其解析方式:
- FBillTypeID: 单据类型,固定值
YFD02_SYS
- FSETTLEORGID: 结算组织,固定值
102
- FBillNo: 单据编号,动态值
{code}
- FBUSINESSTYPE: 业务类型,固定值
FY
- FDATE: 业务日期,通过预先节点审批时间转换得到
{{preNodeApprovedTime|datetime}}
- FSUPPLIERID: 供应商编码,通过变量
{{u_供应商编码}}
并使用解析器ConvertObjectParser
- FCURRENCYID: 币别,通过变量映射得到
- FAP_Remark: 易快报付款条件,通过变量
{{u_付款条件说明}}
- F_VRKB_Remarks: 费用详情,通过变量
{title}
示例配置如下:
[
{"field":"FBillTypeID","value":"YFD02_SYS"},
{"field":"FSETTLEORGID","value":"102"},
{"field":"FBillNo","value":"{code}"},
{"field":"FBUSINESSTYPE","value":"FY"},
{"field":"FDATE","value":"{{preNodeApprovedTime|datetime}}"},
{"field":"FSUPPLIERID","value":"{{u_供应商编码}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FCURRENCYID","value":"{FCURRENCYID}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FAP_Remark","value":"{{u_付款条件说明}}"},
{"field":"F_VRKB_Remarks","value":"{title}"}
]
3. 明细字段配置
对于明细字段,我们需要处理费用项目、含税单价、计价数量等多个字段。每个字段都需要进行相应的转换和解析,例如:
- FCOSTID: 固定值
FYXM14_SYS
- FTaxPrice: 含税单价,根据币种不同选择不同的单价
- FPriceQty: 动态值,通过变量获取
{{details.u_订单数量}}
- FCOSTDEPARTMENTID: 根据部门编码通过MongoDB查询获取并解析
示例配置如下:
[
{"field":"FCOSTID","value":"FYXM14_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FTaxPrice","value":"'function case when '{FCURRENCYID}'='CNY' then '{{details._unitPrice_standard}}' else '{{details._unitPrice_foreign}}' end'"},
{"field":"FPriceQty","value":"{{details.u_订单数量}}"},
{"field":"FCOSTDEPARTMENTID","value":"'mongoQuery findField=content.code where={\"id\":{\"$eq\":\"{{details.u_申请部门}}\"}}'"},
]
4. 表头财务和其他配置
表头财务信息和其他必要的配置信息也需要一并处理。例如,本位币和汇率类型等:
[
{
"field": "FsubHeadFinc",
"children": [
{
"field": "FMAINBOOKSTDCURRID",
"value": "PRE001",
"parser":{"name":"ConvertObjectParser","params":"FNumber"}
},
{
"field": "FEXCHANGETYPE",
"value": "HLTX01_SYS",
"parser":{"name":"ConvertObjectParser","params":"FNumber"}
}
]
}
]
最终请求示例
将所有字段整合后,形成最终请求体:
{
"FormId": "AP_Payable",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": false,
"IsVerifyBaseDataField": false,
...
}
通过以上步骤,我们成功将源平台的数据转换为金蝶云星空API接口所能接受的格式,并完成数据写入。这不仅确保了数据的一致性和准确性,也提高了系统间的数据传输效率。