refactor(asset): 优化保养项目设计,使用折中方案
变更内容: 1. 删除 maintainItemId 字段(冗余,无实际作用) 2. 保留 maintainItem 字段(直接存储项目名称) 3. 新增接口:获取已使用的保养项目列表(去重) 4. 前端可使用该接口提供下拉提示,提升用户体验 5. 添加 maintainItem 字段的非空校验 设计思路: - 不引入保养项目字典表(避免过度设计) - 通过 DISTINCT 查询提供已使用项目列表 - 用户可以输入新项目,也可以从已有项目中选择 - 后续如需规范化,可平滑升级到字典表方案
This commit is contained in:
250
MAINTAIN_ITEM_REPORT.md
Normal file
250
MAINTAIN_ITEM_REPORT.md
Normal 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
|
||||
**状态**: ✅ 开发完成,待测试验收
|
||||
Reference in New Issue
Block a user