### 调拨入库对接-金蝶其他出库(负数)——吉客云与金蝶云星空的数据集成技术案例
在本文中,我们将分享一个具体的系统对接集成案例:如何高效地实现吉客云数据到金蝶云星空的批量数据写入,并确保数据的实时监控和异常处理。
#### 吉客云接口调用:erp.storage.goodsdocin.v2
首先,调拨入库的数据从吉客云获取,这里使用了`erp.storage.goodsdocin.v2`接口,该API支持分页查询和限流控制,可以应对大批量数据传输。需要特别注意的是,通过此API获取的数据必须进行格式转换,以满足后续在金蝶云星空中的处理需求。
为了确保获取过程不漏单,我们设置了定时可靠的任务调度机制。通过轻易平台提供的计划任务功能,每隔一段时间自动抓取最新的调拨入库记录。在实际操作中,还会结合集中监控和告警系统,来实时追踪每个任务执行状态,确保无论什么原因导致的数据遗漏都能被及时发现并处理。
#### 数据转换及映射定制化
由于吉客云与金蝶云星空之间存在一定的数据结构差异,需要自定义数据转换逻辑。这部分工作可以借助轻易平台提供的数据流设计工具,通过可视化界面直观地配置字段映射、逻辑校验等操作。例如,将取得的SKU编码、数量等字段按照目标系统标准重新排列组合,以适应金蝶其他出库(负数)的业务逻辑要求。
#### 金蝶API写入:batchSave
接下来,将经过清洗和转换后的数据推送到金蝶云星空,需要使用其官方提供的`batchSave` API进行批量保存操作。在这一过程中,由于可能涉及大量数据,因此要充分利用平台支持高吞吐量写入能力,同时做好限流和重试机制设计,以防止网络波动或服务器响应慢带来的请求失败问题。此外,对于成功与否以及异常情况,同样会借助日志记录功能详细跟踪,为后续故障排查提供依据。
高级别概述过这些关键环节之后,以下章节将深入探讨每一步骤具体实施细节,包括代码示例、错误处理策略以及性能优化建议……
![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口获取并加工数据的技术实现
在数据集成生命周期的第一步,我们需要调用源系统吉客云接口`erp.storage.goodsdocin.v2`,以获取并加工数据。本文将详细探讨如何通过轻易云数据集成平台配置元数据,实现这一过程。
#### 接口调用与元数据配置
首先,我们需要了解接口的基本信息和元数据配置。以下是接口`erp.storage.goodsdocin.v2`的相关配置:
```json
{
"api": "erp.storage.goodsdocin.v2",
"effect": "QUERY",
"method": "POST",
"number": "goodsdocNo",
"id": "goodsdocNo",
"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":"{{LAST_SYNC_TIME|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":"102"},
{"field":"warehouseId","label":"仓库ID","type":"string"},
{"field":"warehouseCode","label":"仓库编号","type":"string"},
{"field":"vendId","label":"供应商ID(往来单位)","type":"string"},
{"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
{"field":"userName","label":"创建人名称","type":"string"},
{"field":"gmtModifiedStart","label":"主表更新时间起始","type":"string"},
{"field":"gmtModifiedEnd","label":"主表更新时间截至","type":"string"},
{"field":"selelctFields","label":"返回参数","type":"string",
"value":
"goodsdocNo,inOutDate,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,sourceBillNo,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList"}
],
"autoFillResponse":true,
"condition":[
[{"field":
"goodsDocDetailList.quantity",
"logic":
"lt",
"value":
"0"
},
{"field":
"fromWarehouse",
"logic":
"notlike",
"value":
"VMI"
}]
],
"beatFlat":["goodsDocDetailList"],
"omissionRemedy":{
"crontab":
"39 2 * * *",
"takeOverRequest":[
{"field":
"startDate",
"value":
"_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )",
"type":
"string",
"label":
"接管字段",
"formModel":{
"enable":
false
},
}
}
]
}
```
#### 请求参数配置
在请求参数部分,我们需要特别注意以下几个关键字段:
1. **分页参数**:
- `pageIndex`:分页页码。
- `pageSize`:分页页数,默认值为50。
2. **时间范围**:
- `startDate`:创建时间的起始时间,使用动态变量`{{LAST_SYNC_TIME|datetime}}`。
- `endDate`:创建时间的结束时间,使用动态变量`{{CURRENT_TIME|datetime}}`。
3. **过滤条件**:
- `inouttype`:指定为调拨入库(102)。
4. **返回参数**:
- `selelctFields`:指定返回字段,包括单据编号、日期、仓库信息、商品明细等。
#### 数据过滤与清洗
在获取到原始数据后,需要进行一定的数据过滤和清洗。根据元数据配置中的条件部分,我们需要过滤出商品数量小于0且不属于VMI仓库的数据:
```json
{
"condition":[
[{"field": "goodsDocDetailList.quantity", "logic": "lt", "value": "-0"},
{"field": ":fromWarehouse", ":logic: notlike:", ":value: VMI"}]
}
```
#### 数据展平处理
由于商品明细列表(`goodsDocDetailList`)是一个嵌套结构,需要将其展平以便后续处理:
```json
{
":beatFlat: ["goodsDocDetailList"]
}
```
#### 异常处理与补偿机制
为了确保数据同步的完整性和准确性,配置了异常处理与补偿机制。当出现遗漏或错误时,通过定时任务(crontab)进行补偿请求:
```json
{
":omissionRemedy: {
":crontab: :39 :2 :* :* :* ",
":takeOverRequest: [
{:" field: startDate ", :" value: _function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' ) ", :" type: string ", :" label: 接管字段 ", :" formModel: {:" enable: false }, :" tableModel: {:" enable: false }, :" physicalModel: {:" enable: false }}
]
}
```
通过上述步骤,我们可以有效地调用吉客云接口获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。这一过程不仅保证了数据的准确性和完整性,还提升了业务流程的透明度和效率。
![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台ETL转换:将源数据写入金蝶云星空API接口
在轻易云数据集成平台上进行ETL转换的过程中,我们需要将已经集成的源平台数据转换为目标平台——金蝶云星空API接口所能接收的格式,并最终写入目标平台。以下是详细的技术步骤和元数据配置解析。
#### API接口调用配置
我们使用的是金蝶云星空的`batchSave` API接口,采用POST方法进行数据传输。以下是该接口的主要配置项:
- **api**: `batchSave`
- **effect**: `EXECUTE`
- **method**: `POST`
- **idCheck**: `true`
#### 操作参数解析
在操作参数中,我们定义了如何处理请求体的数据:
- **method**: `merge`
- **field**: `goodsDocDetailList_ownerName,goodsdocNo`
- **bodyName**: `items`
- **header**: 包含字段`goodsdocNo`, `inOutDate`, `goodsDocDetailList_ownerName`, `sourceBillNo`
- **body**: 包含字段`goodsDocDetailList_goodsNo`, `goodsDocDetailList_quantity`, `warehouseCode`, `outWarehouseCode`
这些字段对应于源平台的数据,将被转换并映射到金蝶云星空API所需的格式。
#### 请求参数配置
以下是具体的请求参数及其配置:
1. **单据编号(FJKYNo)**
- 字段:`FJKYNo`
- 类型:`string`
- 描述:单据编号
- 值:`{goodsdocNo}`
2. **调拨单号(FJKYLinkNo)**
- 字段:`FJKYLinkNo`
- 类型:`string`
- 值:`{sourceBillNo}`
3. **单据类型(FBillTypeID)**
- 字段:`FBillTypeID`
- 类型:`string`
- 描述:单据类型
- 解析器:`ConvertObjectParser`,参数为`FNumber`
- 值:`QTCKD95_SYS`
4. **库存组织(FStockOrgId)**
- 字段:`FStockOrgId`
- 类型:`string`
- 描述:组织
- 解析器:`ConvertObjectParser`,参数为`FNumber`
- 值:`{goodsDocDetailList_ownerName}`
- 映射目标ID:6441f0214af70a2f240adb22,方向为正向(positive)
5. **库存方向(FStockDirect)**
- 字段:`FStockDirect`
- 类型:`string`
- 描述:下拉列表
- 值:`GENERAL`
6. **日期(FDate)**
- 字段:`FDate`
- 类型:`string`
- 描述:日期
- 值:`{inOutDate}`
7. **领料部门(FDeptId)**
- 字段:`FDeptId`
- 类型:`string`
- 描述:基础资料
- 解析器:`ConvertObjectParser`,参数为`FNumber`
- 值:BM000029
8. **货主类型(FOwnerTypeIdHead)**
- 字段: FOwnerTypeIdHead
- 类型: string
- 描述: 多类别基础资料列表
- 值: BD_OwnerOrg
9. **货主(FOwnerIdHead)**
- 字段: FOwnerIdHead
- 类型: string
- 描述: 多类别基础资料
- 解析器: ConvertObjectParser,参数为 FNumber
- 值: {goodsDocDetailList_ownerName}
- 映射目标ID: 6441f0214af70a2f240adb22,方向为正向 (positive)
#### 明细信息配置
明细信息部分涉及数组类型的数据处理,每个子项都需要进行特定字段的映射和转换:
1. **物料编码(FMATERIALID)**
- 字段: FMATERIALID
- 类型: string
- 描述: 基础资料
- 解析器: ConvertObjectParser,参数为 FNumber
– 值: {{items.goodsDocDetailList_goodsNo}}
2. **库存状态(FStockStatusId)**
– 字段: FStockStatusId
– 类型: string
– 值: KCZT01_SYS
3. **发货仓库(FSTOCKID)**
– 字段: FSTOCKID
– 类型: string
– 描述: 基础资料
– 解析器: ConvertObjectParser,参数为 FNumber
– 值: {{items.warehouseCode}}
4. **实发数量(FQty)**
– 字段:FQty
– 类型:string
–值:_function {{items.goodsDocDetailList_quantity}} *(-1)
#### 其他请求配置
除了上述字段,还需要一些额外的请求配置来确保数据正确写入目标系统:
1. 表单ID (FormId)
2. 提交并审核 (IsAutoSubmitAndAudit)
3. 验证基础资料 (IsVerifyBaseDataField)
4. 执行操作 (Operation)
5. 负库存标志 (InterationFlags)
这些配置项确保了在调用API时能够正确执行并验证所有必要的数据。
通过以上步骤和配置,我们能够将源平台的数据成功转换并写入金蝶云星空,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也确保了数据处理过程中的准确性和一致性。
![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)