### MySQL 数据集成到金蝶云星空案例分享:SLB生产领料单新增深圳天一-带料委外-好
在实际生产环境中,如何将MySQL中的数据高效、准确地集成到金蝶云星空平台,是每个系统集成顾问都需要面对和解决的核心问题。本文将以具体的实施方案“SLB生产领料单新增深圳天一-带料委外-好”为例,详细介绍从MySQL获取数据并批量写入至金蝶云星空的技术实现。
首先,我们通过编写一个定时任务来可靠地抓取MySQL接口的数据。例如,通过调用`select` API接口,从MySQL数据库中提取所需的原始数据。这一步骤尤为关键,因为它不仅要处理大量的数据吞吐,还必须确保不漏掉任何关键信息。在此过程中,我们还会对API响应进行分页和限流处理,以保证系统负载均衡和性能稳定。
接下来,需要对这些从MySQL获得的数据进行预处理,包括但不限于格式转换、数据过滤等操作,这些操作可以通过支持自定义逻辑的数据转换工具便捷完成。做好预处理后,再使用batchSave API,将这些整理后的数据批量写入到金蝶云星空平台内。特别值得注意的是,为了确保整个过程具备良好的健壮性与容错能力,我们在每一个关键环节都设置了异常检测及重试机制,并结合统一监控与告警系统,以实时跟踪任务状态和性能表现,从而及时发现与解决可能出现的问题。
最后,为了适应特定业务需求,在该集成方案中特别设计了一套定制化的数据映射规则,使得从元数据配置、到流程设计,再到最终执行,每一步都能直观管理与可追溯,显著提高了整个项目的执行效率和成功率。
![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台调用MySQL接口获取并加工数据
在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用MySQL接口`select`获取并加工数据。
#### 元数据配置解析
首先,我们需要理解元数据配置中的各个字段及其作用:
- `api`: 指定API类型,这里为`select`。
- `effect`: 表示操作的效果,这里为`QUERY`,即查询操作。
- `method`: 请求方法,这里为`POST`。
- `number`, `id`: 分别表示生产订单号和领料单号,用于标识和关联数据。
- `request`: 包含主参数,主要用于SQL语句中的动态参数绑定。
- `main_params`: 主参数对象,包含两个子字段:
- `limit`: 限制结果集返回的行数,用于分页查询。
- `offset`: 偏移量,指定查询结果的起始位置。
此外,还有一个关键字段:
- `main_sql`: 主SQL查询语句,其中包含动态字段如`:limit`和`:offset`,需要在执行查询时进行参数绑定。
#### SQL语句解析与优化
主SQL语句如下:
```sql
select
case m.delivery_org
when 'T01.01' then CONCAT('HJ', CAST(hj1.id AS CHAR))
when 'T04' then CONCAT('HJGD', CAST(hj1.id AS CHAR))
else
CONCAT('HJ', CAST(hj1.id AS CHAR))
end as 生产订单号,
a.part_no as 成品编号,
c.mode_no as 计划跟踪号,
CONCAT('LLB',CAST(a.id AS CHAR)) as 领料单号,
date(a.update_time) as 日期,
CONCAT(a.part_no,'_WW') as 物料编号,
a.confirm_numb as 数量,e.real_name,
a.id as sourceid,
0.000001 as 工时,
m.delivery_org as 供应组织
from wms_instock_confirm_task_detail a
left join wms_instock_purchase_task_detail c on c.out_type='1' and c.matterial_type='4'
left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid
left join mbs_nuclear_price_task hj on hj.mold_no=c.mode_no and hj.part_no=a.part_no
left join mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid=hj.nuclear_price_task_uuid
left join sys_user e on e.user_id=a.create_by
left join mbs_order_plan_bom l on c.mode_no=l.bom_no
left join mbs_order_bom m on m.bom_uuid=l.bom_uuid
where a.connect_uuid=b.uuid
and a.company_code='TYZN'
and a.update_time>'2023-08-01'
and hj1.create_time>(select config_value from sys_config where config_id=337)
and a.is_success !='1' and a.is_success4='1'
limit :limit offset :offset
```
在这段SQL中,我们使用了多个表的连接操作,并通过条件过滤来获取所需的数据。特别需要注意的是`limit :limit offset :offset`部分,这是分页查询的关键。
#### 参数绑定与执行
为了确保SQL语句中的动态字段与请求参数一一对应,我们需要进行参数绑定。具体步骤如下:
1. 将主SQL查询语句中的动态字段`:limit`和`:offset`替换为占位符(例如`?`)。
2. 在执行查询之前,通过参数绑定的方法,将请求参数的值与占位符进行对应绑定。
例如:
```sql
select
case m.delivery_org
when 'T01.01' then CONCAT('HJ', CAST(hj1.id AS CHAR))
when 'T04' then CONCAT('HJGD', CAST(hj1.id AS CHAR))
else
CONCAT('HJ', CAST(hj1.id AS CHAR))
end as 生产订单号,
a.part_no as 成品编号,
c.mode_no as 计划跟踪号,
CONCAT('LLB',CAST(a.id AS CHAR)) as 领料单号,
date(a.update_time) as 日期,
CONCAT(a.part_no,'_WW') as 物料编号,
a.confirm_numb as 数量,e.real_name,
a.id as sourceid,
0.000001 as 工时,
m.delivery_org as 供应组织
from wms_instock_confirm_task_detail a
left join wms_instock_purchase_task_detail c on c.out_type='1' and c.matterial_type='4'
left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid
left join mbs_nuclear_price_task hj on hj.mold_no=c.mode_no and hj.part_no=a.part_no
left join mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid=hj.nuclear_price_task_uuid
left join sys_user e on e.user_id=a.create_by
left join mbs_order_plan_bom l on c.mode_no=l.bom_no
left join mbs_order_bom m on m.bom_uuid=l.bom_uuid
where a.connect_uuid=b.uuid
and a.company_code='TYZN'
and a.update_time>'2023-08-01'
and hj1.create_time>(select config_value from sys_config where config_id=337)
and a.is_success !='1' and a.is_success4='1'
limit ? offset ?
```
然后,在执行查询时,将请求中的分页参数绑定到占位符上。例如:
```java
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, limitValue);
pstmt.setInt(2, offsetValue);
ResultSet rs = pstmt.executeQuery();
```
通过这种方式,可以确保SQL语句的可读性和维护性,同时提高查询的准确性和安全性。
#### 实际应用案例
假设我们需要从MySQL数据库中获取生产领料单的数据,并且每次只返回10条记录,从第20条记录开始。我们可以设置分页参数如下:
```json
{
"main_params": {
"limit": "10",
"offset": "20"
}
}
```
然后,通过轻易云数据集成平台发送POST请求,调用上述配置的API,即可获取所需的数据。
以上就是使用轻易云数据集成平台调用MySQL接口获取并加工数据的详细技术案例。通过合理配置元数据和优化SQL语句,可以高效地实现跨系统的数据集成。
![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台:将源平台数据ETL转换并写入金蝶云星空API接口
在轻易云数据集成平台中,完成数据生命周期的第二步,即将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,是一个关键环节。本文将详细探讨如何利用元数据配置,将生产领料单新增深圳天一-带料委外-好的数据转换并写入金蝶云星空。
#### 数据请求与清洗
在进行ETL转换之前,首先需要对源数据进行请求和清洗。假设我们已经从源系统获取了以下结构的数据:
```json
{
"领料单号": "LLD20231001",
"生产订单号": "PO20231001",
"日期": "2023-10-01",
"成品编号": "CP001",
"供应组织": "T01.01",
"items": [
{
"物料编号": "WL001",
"数量": 100,
"计划跟踪号": "JH001"
},
{
"物料编号": "WL002",
"数量": 200,
"计划跟踪号": "JH002"
}
]
}
```
#### 数据转换与写入
根据元数据配置,我们需要将上述源数据转换为金蝶云星空API接口所能接收的格式。以下是具体的配置和操作步骤。
##### 配置API请求
元数据配置中的`request`部分定义了需要发送给金蝶云星空API的数据字段及其映射关系。以下是主要字段的映射:
- `FBillNo` 映射到 `领料单号`
- `FDate` 映射到 `日期`
- `FMOBillNO1` 映射到 `生产订单号`
- `FMaterialID1` 映射到 `成品编号`
- `FStockOrgId` 和 `FPrdOrgId` 根据 `供应组织` 的值进行条件转换
- 明细部分(`FEntity`)包含每个物料的详细信息,如物料编码、数量、计划跟踪号等
##### 转换逻辑示例
1. **主表字段转换**
```json
{
"FBillNo": "{{领料单号}}",
"FDate": "{{日期}}",
...
"FMOBillNO1": "{{生产订单号}}",
...
"FMaterialID1": "{{成品编号}}"
}
```
2. **条件转换**
对于发料组织和生产组织,根据供应组织的不同值进行条件判断:
```json
{
...
"FStockOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end",
...
"FPrdOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end"
}
```
3. **明细字段转换**
明细部分涉及数组处理,每个物料项都需要进行相应的字段映射:
```json
{
...
"FEntity": [
{
...
"FMaterialId": "{{items.物料编号}}",
...
"FAppQty": "{{items.数量}}",
...
"FMtoNo": "{{items.计划跟踪号}}"
},
...
]
}
```
##### 最终请求体示例
根据上述配置和映射关系,最终生成的请求体如下:
```json
{
"FormId": "PRD_PickMtrl",
...
"Model": {
...
"FBillNo": "LLD20231001",
...
"FDate": "2023-10-01",
...
...
... //其他主表字段
...
... //明细数组
...
...
... //其他附加参数
},
...
}
```
#### 提交与审核
在所有字段都正确映射并生成请求体后,通过POST方法调用金蝶云星空API接口,实现批量保存并自动提交审核。
```http
POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc HTTP/1.1
Host: {K3CloudHost}
Content-Type: application/json
{
// 上述生成的请求体内容
}
```
通过上述步骤,可以实现将生产领料单新增深圳天一-带料委外-好的数据无缝地转换并写入金蝶云星空系统。这不仅提高了数据处理效率,也确保了各系统间的数据一致性和准确性。
![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)