变更内容: 1. 删除 maintainItemId 字段(冗余,无实际作用) 2. 保留 maintainItem 字段(直接存储项目名称) 3. 新增接口:获取已使用的保养项目列表(去重) 4. 前端可使用该接口提供下拉提示,提升用户体验 5. 添加 maintainItem 字段的非空校验 设计思路: - 不引入保养项目字典表(避免过度设计) - 通过 DISTINCT 查询提供已使用项目列表 - 用户可以输入新项目,也可以从已有项目中选择 - 后续如需规范化,可平滑升级到字典表方案
251 lines
6.7 KiB
Markdown
251 lines
6.7 KiB
Markdown
# 车型参数模块 - 保养项目功能完善报告
|
||
|
||
## 完成时间
|
||
2026-03-12 01:20 - 01:24
|
||
|
||
## 功能说明
|
||
|
||
根据原型系统和老系统的设计,车型参数模块需要支持**保养项目**的管理。每个车型可以关联多个保养项目,记录保养的详细信息。
|
||
|
||
## 数据库设计
|
||
|
||
### 车型维保项目关联表(asset_vehicle_model_maintain_item)
|
||
|
||
**字段列表**:
|
||
1. `id` - 主键
|
||
2. `vehicle_model_id` - 车型ID(外键)
|
||
3. `maintain_item_id` - 维保项目ID(预留字段)
|
||
4. `maintain_item` - 保养项目名称
|
||
5. `maintain_content` - 保养内容描述
|
||
6. `materials_expenses` - 材料费(decimal)
|
||
7. `hour_fee` - 工时费(decimal)
|
||
8. `kilometer_cycle` - 保养公里周期(KM)
|
||
9. `time_cycle` - 保养时间周期(月)
|
||
10. 标准字段:creator、create_time、updater、update_time、deleted、tenant_id
|
||
|
||
**索引**:
|
||
- `idx_vehicle_model_id` - 车型ID索引
|
||
- `idx_maintain_item_id` - 维保项目ID索引
|
||
|
||
## 代码实现
|
||
|
||
### 1. DO 层(数据对象)
|
||
**文件**: `VehicleModelMaintainItemDO.java`
|
||
- ✅ 完整的字段定义
|
||
- ✅ 使用 BigDecimal 存储费用
|
||
- ✅ 继承 BaseDO
|
||
|
||
### 2. Mapper 层(数据访问)
|
||
**文件**: `VehicleModelMaintainItemMapper.java`
|
||
|
||
**方法**:
|
||
- `selectListByVehicleModelId(Long vehicleModelId)` - 根据车型ID查询
|
||
- `deleteByVehicleModelId(Long vehicleModelId)` - 根据车型ID删除
|
||
|
||
### 3. VO 层(视图对象)
|
||
**文件**: `VehicleModelMaintainItemVO.java`
|
||
- ✅ 完整的字段定义
|
||
- ✅ Swagger 注解完整
|
||
|
||
**更新的文件**:
|
||
- `VehicleModelSaveReqVO.java` - 新增 `maintainItems` 列表字段
|
||
- `VehicleModelRespVO.java` - 新增 `maintainItems` 列表字段
|
||
|
||
### 4. Service 层(业务逻辑)
|
||
**更新**: `VehicleModelServiceImpl.java`
|
||
|
||
**新增方法**:
|
||
- `getVehicleModelMaintainItems(Long vehicleModelId)` - 获取车型的维保项目列表
|
||
- `saveMaintainItems(Long vehicleModelId, List maintainItems)` - 保存维保项目(私有方法)
|
||
|
||
**更新逻辑**:
|
||
- `createVehicleModel()` - 创建车型时同时保存维保项目
|
||
- `updateVehicleModel()` - 更新车型时先删除旧的维保项目,再保存新的
|
||
- `deleteVehicleModel()` - 删除车型时同时删除维保项目
|
||
|
||
**事务控制**:
|
||
- ✅ 使用 `@Transactional` 保证数据一致性
|
||
|
||
### 5. Controller 层(接口)
|
||
**更新**: `VehicleModelController.java`
|
||
|
||
**修改的接口**:
|
||
- `GET /get` - 获取车型详情时返回维保项目列表
|
||
|
||
## 业务流程
|
||
|
||
### 创建车型参数
|
||
```
|
||
1. 保存车型基本信息
|
||
2. 保存维保项目列表(如果有)
|
||
3. 提交事务
|
||
```
|
||
|
||
### 更新车型参数
|
||
```
|
||
1. 校验车型是否存在
|
||
2. 更新车型基本信息
|
||
3. 删除旧的维保项目
|
||
4. 保存新的维保项目列表
|
||
5. 提交事务
|
||
```
|
||
|
||
### 删除车型参数
|
||
```
|
||
1. 校验车型是否存在
|
||
2. 删除车型基本信息
|
||
3. 删除关联的维保项目
|
||
4. 提交事务
|
||
```
|
||
|
||
### 获取车型详情
|
||
```
|
||
1. 查询车型基本信息
|
||
2. 查询关联的维保项目列表
|
||
3. 组装返回数据
|
||
```
|
||
|
||
## 接口示例
|
||
|
||
### 创建车型参数(带保养项目)
|
||
```http
|
||
POST /admin-api/asset/vehicle-model/create
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"brand": 1,
|
||
"model": 1,
|
||
"modelName": "江淮骏铃V6",
|
||
"hydrogenCapacity": 165,
|
||
"reserveElectricity": 80.00,
|
||
"maintainItems": [
|
||
{
|
||
"maintainItem": "更换机油",
|
||
"maintainContent": "更换机油、机滤",
|
||
"materialsExpenses": 200.00,
|
||
"hourFee": 100.00,
|
||
"kilometerCycle": 5000,
|
||
"timeCycle": 6
|
||
},
|
||
{
|
||
"maintainItem": "更换空滤",
|
||
"maintainContent": "更换空气滤芯",
|
||
"materialsExpenses": 50.00,
|
||
"hourFee": 50.00,
|
||
"kilometerCycle": 10000,
|
||
"timeCycle": 12
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 获取车型详情(含保养项目)
|
||
```http
|
||
GET /admin-api/asset/vehicle-model/get?id=1
|
||
|
||
Response:
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"id": 1,
|
||
"brand": 1,
|
||
"model": 1,
|
||
"modelName": "江淮骏铃V6",
|
||
"hydrogenCapacity": 165,
|
||
"reserveElectricity": 80.00,
|
||
"maintainItems": [
|
||
{
|
||
"id": 1,
|
||
"maintainItem": "更换机油",
|
||
"maintainContent": "更换机油、机滤",
|
||
"materialsExpenses": 200.00,
|
||
"hourFee": 100.00,
|
||
"kilometerCycle": 5000,
|
||
"timeCycle": 6
|
||
},
|
||
{
|
||
"id": 2,
|
||
"maintainItem": "更换空滤",
|
||
"maintainContent": "更换空气滤芯",
|
||
"materialsExpenses": 50.00,
|
||
"hourFee": 50.00,
|
||
"kilometerCycle": 10000,
|
||
"timeCycle": 12
|
||
}
|
||
],
|
||
"createTime": "2026-03-12T01:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
## SQL 更新脚本
|
||
|
||
**文件**: `sql/update-2026-03-12-停车场和车型参数模块.sql`
|
||
|
||
**新增内容**:
|
||
```sql
|
||
-- 4. 更新车型维保项目关联表(添加保养详情字段)
|
||
ALTER TABLE `asset_vehicle_model_maintain_item`
|
||
ADD COLUMN `maintain_item` varchar(100) DEFAULT NULL COMMENT '保养项目' AFTER `maintain_item_id`,
|
||
ADD COLUMN `maintain_content` varchar(500) DEFAULT NULL COMMENT '保养内容' AFTER `maintain_item`,
|
||
ADD COLUMN `materials_expenses` decimal(10,2) DEFAULT NULL COMMENT '材料费' AFTER `maintain_content`,
|
||
ADD COLUMN `hour_fee` decimal(10,2) DEFAULT NULL COMMENT '工时费' AFTER `materials_expenses`,
|
||
ADD COLUMN `kilometer_cycle` int DEFAULT NULL COMMENT '保养公里周期(KM)' AFTER `hour_fee`,
|
||
ADD COLUMN `time_cycle` int DEFAULT NULL COMMENT '保养时间周期(月)' AFTER `kilometer_cycle`;
|
||
```
|
||
|
||
## 编译验证
|
||
|
||
```
|
||
[INFO] BUILD SUCCESS
|
||
[INFO] Total time: 14.831 s
|
||
[INFO] yudao-module-asset-server .......................... SUCCESS [ 0.332 s]
|
||
```
|
||
|
||
## 代码统计
|
||
|
||
### 新增文件
|
||
- VehicleModelMaintainItemDO.java
|
||
- VehicleModelMaintainItemMapper.java
|
||
- VehicleModelMaintainItemVO.java
|
||
|
||
**总计**: 3 个文件
|
||
|
||
### 修改文件
|
||
- VehicleModelSaveReqVO.java
|
||
- VehicleModelRespVO.java
|
||
- VehicleModelService.java
|
||
- VehicleModelServiceImpl.java
|
||
- VehicleModelController.java
|
||
- update-2026-03-12-停车场和车型参数模块.sql
|
||
|
||
**总计**: 6 个文件
|
||
|
||
## 功能特点
|
||
|
||
1. **一对多关系** - 一个车型可以关联多个保养项目
|
||
2. **级联操作** - 删除车型时自动删除关联的保养项目
|
||
3. **事务保证** - 使用事务确保数据一致性
|
||
4. **完整的 CRUD** - 支持保养项目的增删改查
|
||
5. **费用管理** - 记录材料费和工时费
|
||
6. **周期管理** - 支持公里周期和时间周期
|
||
|
||
## 业务价值
|
||
|
||
1. **标准化管理** - 为每个车型定义标准的保养项目
|
||
2. **成本控制** - 记录保养费用,便于成本核算
|
||
3. **周期提醒** - 根据公里数和时间提醒保养
|
||
4. **数据支撑** - 为车辆保养计划提供数据支持
|
||
|
||
## 状态
|
||
|
||
✅ 功能完善完成
|
||
✅ 编译通过
|
||
✅ 代码质量良好
|
||
✅ 事务控制正确
|
||
|
||
---
|
||
|
||
**完成时间**: 2026-03-12 01:24
|
||
**状态**: ✅ 开发完成,待测试验收
|