refactor(asset): 优化保养项目设计,使用折中方案

变更内容:
1. 删除 maintainItemId 字段(冗余,无实际作用)
2. 保留 maintainItem 字段(直接存储项目名称)
3. 新增接口:获取已使用的保养项目列表(去重)
4. 前端可使用该接口提供下拉提示,提升用户体验
5. 添加 maintainItem 字段的非空校验

设计思路:
- 不引入保养项目字典表(避免过度设计)
- 通过 DISTINCT 查询提供已使用项目列表
- 用户可以输入新项目,也可以从已有项目中选择
- 后续如需规范化,可平滑升级到字典表方案
This commit is contained in:
k kfluous
2026-03-12 09:54:00 +08:00
parent eb9eaf3810
commit a2e2d5c27e
25 changed files with 4402 additions and 11 deletions

250
MAINTAIN_ITEM_REPORT.md Normal file
View File

@@ -0,0 +1,250 @@
# 车型参数模块 - 保养项目功能完善报告
## 完成时间
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
**状态**: ✅ 开发完成,待测试验收