轻松实现数据集成:将吉客云数据写入金蝶云星空API
### 吉客云与金蝶云星空的无缝对接:实现JY-BDS其他入库单
在系统集成项目中,数据的精准流转和实时监控至关重要。本案例将重点介绍如何利用轻易云数据集成平台,实现吉客云中的“其他入库单”数据(通过API `erp.storage.goodsdocin` 获取),批量写入到金蝶云星空(使用API `batchSave`) 的技术方案。
为了确保高效的数据处理,我们采用了以下几项关键技术:
1. **高吞吐量支持**:吉客云的海量“其他入库单”数据能够快速被整合,保证了业务处理的时效性。这一能力尤为重要,因为它直接影响到企业库存管理和财务核算的效率。
2. **集中监控与告警系统**:在整个集成过程中,通过集中式监控和告警功能,可以实时跟踪任务状态、性能瓶颈及异常情况。这不仅提高了问题发现速度,还大幅度减少了意外停机时间,提高整体可靠性。
3. **自定义转换逻辑**:针对吉客云与金蝶云星空之间可能存在的数据格式差异,我们设计并实现了一套灵活且可定制化的数据转换逻辑,以适应不同业务需求。此举有效避免了因格式不匹配引起的数据错误。
4. **批量操作与分页限流策略**:为了充分利用API资源,在获取吉客云接口数据时,引入分页限流机制。同时,确保在调用金蝶云星空`batchSave`接口时,能顺利执行批量写入操作,从而优化整体性能表现。
5. **完善的错误重试机制**:鉴于网络或服务端的不确定因素,我们还设计了一套完整的异常处理及错误重试机制,以便在遇到问题时可以自动进行修复尝试,这样有助于最大限度地保障数据传输过程中的稳定性和完整性。
![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口获取并加工数据的技术案例
在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocin`,获取并加工入库单数据。
#### 接口概述
吉客云提供的`erp.storage.goodsdocin`接口用于获取入库单信息。该接口采用POST请求方式,支持分页查询,并允许根据多种条件进行筛选。以下是元数据配置的详细信息:
```json
{
"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"}
]
}
```
#### 数据请求与清洗
在调用该接口时,需要构建请求体,并根据业务需求设置相应的参数。以下是一个典型的请求示例:
```json
{
"pageIndex": "1",
"pageSize": "50",
"startDate": "{{DAYS_AGO_2|datetime}}",
"endDate": "{{CURRENT_TIME|datetime}}",
"inouttype": "104"
}
```
在这个请求中,我们设置了分页参数`pageIndex`和`pageSize`,以及时间范围参数`startDate`和`endDate`。此外,我们指定了`inouttype`为"104",表示查询其他入库类型的数据。
#### 数据转换与写入
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以对日期格式进行标准化处理,对字段名称进行映射等。以下是一个简单的数据转换示例:
```python
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
```
在这个示例中,我们将原始记录中的字段进行了重命名,并对日期格式进行了标准化处理。
#### 实际应用案例
假设我们需要集成吉客云的其他入库单数据到我们的系统中,可以按照以下步骤操作:
1. **构建请求体**:根据业务需求设置查询条件。
2. **发送请求**:通过轻易云平台发送POST请求到吉客云接口。
3. **接收响应**:获取返回的数据并进行初步验证。
4. **数据清洗**:对接收到的数据进行清洗和转换。
5. **写入目标系统**:将处理后的数据写入目标系统。
以下是一个实际应用中的代码片段:
```python
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)
```
通过以上步骤,我们可以高效地从吉客云获取其他入库单数据,并将其集成到我们的系统中。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口
在轻易云数据集成平台中,数据集成的第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
#### 配置元数据
根据提供的元数据配置,我们需要将源数据转换为金蝶云星空API接口所需的数据格式。该配置文件定义了各个字段的映射关系、类型和必要的转换规则。
```json
{
"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": "单据类型",
...
}
],
...
}
```
#### 数据转换与写入
1. **单据编号 (FBillNo)**:
- 源字段:`goodsdocNo`
- 转换:直接映射,无需额外处理。
2. **单据类型 (FBillTypeID)**:
- 固定值:`QTRKD01_SYS`
- 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。
3. **库存组织 (FStockOrgId)**:
- 源字段:`warehouseCode`
- 转换:通过 `_findCollection` 方法从指定集合中查找匹配值,并使用 `ConvertObjectParser` 转换。
4. **库存方向 (FStockDirect)**:
- 固定值:`GENERAL`
- 转换:直接映射,无需额外处理。
5. **日期 (FDate)**:
- 源字段:`inOutDate`
- 转换:使用 `_function FROM_UNIXTIME` 将时间戳转换为标准日期格式。
6. **部门 (FDEPTID)**:
- 源字段:`departCode`
- 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。
7. **货主 (FOwnerIdHead)**:
- 源字段:`companyCode`
- 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。
8. **备注 (FNOTE)**:
- 源字段:`comment`
- 转换:直接映射,无需额外处理。
9. **吉客云单据编号 (F_JKBillNo)**:
- 源字段:`goodsdocNo`
- 转换:直接映射,无需额外处理。
10. **其他入库原因 (F_QKZI_Assistant)**:
- 源字段:`inOutReason`
- 转换:通过 `_findCollection` 方法从指定集合中查找匹配值,并使用 `ConvertObjectParser` 转换。
11. **明细信息 (FEntity)**:
明细信息包含多个子字段,每个子字段需要分别进行处理。
a. **物料编码 (FMATERIALID)**:
- 源字段:`goodsDocDetailList.goodsNo`
- 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。
b. **收货仓库 (FSTOCKID)**:
- 源字段:`warehouseCode`
- 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。
c. **实收数量 (FQty)**:
- 源字段:`goodsDocDetailList.quantity`
- 转换:直接映射,无需额外处理。
d. **备注 (FEntryNote)**:
- 源字段:`goodsDocDetailList.rowRemark`
- 转换:直接映射,无需额外处理。
#### API请求构建
根据上述配置和转换规则,构建最终的API请求:
```json
{
"FormId": "STK_MISCELLANEOUS",
...
"Model": {
...
{
...
{
...
{
...
}
}
}
}
}
```
#### 提交与审核
最后,将构建好的请求通过POST方法提交至金蝶云星空API接口,并设置自动提交与审核参数:
```json
{
...
"IsAutoSubmitAndAudit": true
}
```
通过以上步骤,我们实现了将源平台的数据经过ETL转换后,成功写入到金蝶云星空API接口。
![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)