### 易快报采购订单对接金蝶应付单(非月结)技术案例分享
在现代企业的业务运营中,数据的准确性和及时性至关重要。在本技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现“易快报”采购订单与“金蝶云星空”应付单(非月结)的无缝对接。
首先,我们需要确保从易快报获取的数据完整且不漏单。为此,通过调用易快报接口`/api/openapi/v1.1/docs/getApplyList`,可以定时抓取最新的采购订单数据。为了避免因网络波动或接口限流导致的数据丢失问题,会采用分页请求,并结合重试机制来处理可能发生的异常情况。
在成功获取到所有所需数据后,需要将这些信息批量写入到金蝶云星空系统内。考虑到大量数据传输过程中可能产生的性能瓶颈,我们利用批量处理和并发写入策略,加速了记录提交过程。同时,为确保每条记录都被正确写入,系统会实时监控每个步骤并提供详细日志记录。如果遇到异常情况,还可触发错误重试机制以保证稳定性。
另一个关键挑战是如何高效地进行两套系统间的数据格式转换。例如,易快报中的字段名称、类型可能与金蝶云星空存在差异,这就要求我们在映射配置上做出精准调整。此外,为适配不同业务需求,还支持对接自定义规则,以便灵活应对复杂场景。
总结来说,通过以上方法有效实现了从易快报到金蝶云星空的数据集成,不仅提高了操作效率,也显著降低了人工干预带来的风险。在下一部分内容中,将深入介绍具体实现方案及其代码示例。
---
通过这种方式直面主题,从实际应用场景出发,使得整篇文章更具专业性和实用价值。
![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image)
### 调用易快报接口获取并加工数据的技术实现
在数据集成生命周期的第一步中,我们需要调用易快报的接口`/api/openapi/v1.1/docs/getApplyList`来获取采购订单数据,并进行必要的数据清洗和转换。以下是具体的技术实现步骤和细节。
#### 接口调用配置
首先,我们需要配置API调用的元数据。这些元数据定义了API请求的各个参数及其含义:
```json
{
"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**: 单据状态,多个状态用逗号分隔。
#### 数据请求与清洗
在调用接口获取数据后,需要对返回的数据进行清洗。清洗过程包括过滤无效数据、标准化字段格式等操作。以下是一个示例代码片段:
```python
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}")
```
#### 数据转换与写入
在完成数据清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。以下是一个示例代码片段:
```python
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接口配置](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行金蝶云星空API接口数据转换与写入
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现细节。
#### 1. API接口配置
我们使用的是金蝶云星空的`batchSave` API接口,采用POST请求方法。该接口支持批量保存操作,并且每次请求可以处理多条记录。配置如下:
```json
{
"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}`
示例配置如下:
```json
[
{"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查询获取并解析
示例配置如下:
```json
[
{"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. 表头财务和其他配置
表头财务信息和其他必要的配置信息也需要一并处理。例如,本位币和汇率类型等:
```json
[
{
"field": "FsubHeadFinc",
"children": [
{
"field": "FMAINBOOKSTDCURRID",
"value": "PRE001",
"parser":{"name":"ConvertObjectParser","params":"FNumber"}
},
{
"field": "FEXCHANGETYPE",
"value": "HLTX01_SYS",
"parser":{"name":"ConvertObjectParser","params":"FNumber"}
}
]
}
]
```
#### 最终请求示例
将所有字段整合后,形成最终请求体:
```json
{
"FormId": "AP_Payable",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": false,
"IsVerifyBaseDataField": false,
...
}
```
通过以上步骤,我们成功将源平台的数据转换为金蝶云星空API接口所能接受的格式,并完成数据写入。这不仅确保了数据的一致性和准确性,也提高了系统间的数据传输效率。
![如何开发企业微信API接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)