Files
oneos-backend/MAINTAIN_ITEM_REPORT.md
k kfluous a2e2d5c27e refactor(asset): 优化保养项目设计,使用折中方案
变更内容:
1. 删除 maintainItemId 字段(冗余,无实际作用)
2. 保留 maintainItem 字段(直接存储项目名称)
3. 新增接口:获取已使用的保养项目列表(去重)
4. 前端可使用该接口提供下拉提示,提升用户体验
5. 添加 maintainItem 字段的非空校验

设计思路:
- 不引入保养项目字典表(避免过度设计)
- 通过 DISTINCT 查询提供已使用项目列表
- 用户可以输入新项目,也可以从已有项目中选择
- 后续如需规范化,可平滑升级到字典表方案
2026-03-12 09:54:00 +08:00

6.7 KiB
Raw Permalink Blame History

车型参数模块 - 保养项目功能完善报告

完成时间

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. 组装返回数据

接口示例

创建车型参数(带保养项目)

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
    }
  ]
}

获取车型详情(含保养项目)

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

新增内容:

-- 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 状态: 开发完成,待测试验收