编辑 | blame | 历史 | 原始文档

允许搜索所有车辆修改说明

修改内容

根据用户需求,将任务车辆分配功能从"只搜索指定部门的车辆"修改为"允许搜索所有车辆",以提供更大的选择范围。

修改详情

1. 后端Service层修改

文件:SysTaskServiceImpl.java

修改前
```java
@Override
public List getAvailableVehicles(Long deptId, String taskType) {
List availableVehicles = new ArrayList<>();

try {
    // 查询指定部门下状态为正常的车辆
    VehicleInfo queryParam = new VehicleInfo();
    queryParam.setDeptId(deptId);  // 限制部门
    queryParam.setStatus("0"); // 0表示正常状态

    List<VehicleInfo> vehicles = vehicleInfoMapper.selectVehicleInfoList(queryParam);

    // 转换为SysTaskVehicle对象
    for (VehicleInfo vehicle : vehicles) {
        SysTaskVehicle taskVehicle = new SysTaskVehicle();
        taskVehicle.setVehicleId(vehicle.getVehicleId());
        taskVehicle.setVehicleNo(vehicle.getVehicleNo());
        taskVehicle.setVehicleType(vehicle.getVehicleType());
        taskVehicle.setVehicleBrand(vehicle.getVehicleBrand());
        taskVehicle.setVehicleModel(vehicle.getVehicleModel());
        availableVehicles.add(taskVehicle);
    }
} catch (Exception e) {
    System.err.println("查询可用车辆失败: " + e.getMessage());
}

return availableVehicles;

}
```

修改后
```java
@Override
public List getAvailableVehicles(Long deptId, String taskType) {
List availableVehicles = new ArrayList<>();

try {
    // 查询所有状态为正常的车辆(不限制部门)
    VehicleInfo queryParam = new VehicleInfo();
    queryParam.setStatus("0"); // 0表示正常状态
    // 不设置deptId,查询所有部门的车辆

    List<VehicleInfo> vehicles = vehicleInfoMapper.selectVehicleInfoList(queryParam);

    // 转换为SysTaskVehicle对象
    for (VehicleInfo vehicle : vehicles) {
        SysTaskVehicle taskVehicle = new SysTaskVehicle();
        taskVehicle.setVehicleId(vehicle.getVehicleId());
        taskVehicle.setVehicleNo(vehicle.getVehicleNo());
        taskVehicle.setVehicleType(vehicle.getVehicleType());
        taskVehicle.setVehicleBrand(vehicle.getVehicleBrand());
        taskVehicle.setVehicleModel(vehicle.getVehicleModel());
        taskVehicle.setDeptName(vehicle.getDeptName()); // 添加部门名称
        availableVehicles.add(taskVehicle);
    }
} catch (Exception e) {
    System.err.println("查询可用车辆失败: " + e.getMessage());
}

return availableVehicles;

}
```

关键变化
- ✅ 移除了 queryParam.setDeptId(deptId); 限制
- ✅ 添加了 taskVehicle.setDeptName(vehicle.getDeptName()); 设置部门名称
- ✅ 注释说明查询所有部门的车辆

2. 实体类修改

文件:SysTaskVehicle.java

添加字段
java /** 归属部门名称 */ @Excel(name = "归属部门") private String deptName;

添加getter和setter方法
```java
public void setDeptName(String deptName) {
this.deptName = deptName;
}

public String getDeptName() {
return deptName;
}
```

更新toString方法
java @Override public String toString() { return "SysTaskVehicle{" + "id=" + id + ", taskId=" + taskId + ", vehicleId=" + vehicleId + ", assignTime=" + assignTime + ", assignBy='" + assignBy + '\'' + ", status='" + status + '\'' + ", vehicleNo='" + vehicleNo + '\'' + ", vehicleType='" + vehicleType + '\'' + ", vehicleBrand='" + vehicleBrand + '\'' + ", vehicleModel='" + vehicleModel + '\'' + ", deptName='" + deptName + '\'' + // 新增 '}'; }

3. Mapper XML修改

文件:SysTaskVehicleMapper.xml

更新resultMap
xml <resultMap type="SysTaskVehicle" id="SysTaskVehicleResult"> <result property="id" column="id" /> <result property="taskId" column="task_id" /> <result property="vehicleId" column="vehicle_id" /> <result property="assignTime" column="assign_time" /> <result property="assignBy" column="assign_by" /> <result property="status" column="status" /> <result property="remark" column="remark" /> <result property="vehicleNo" column="vehicle_no" /> <result property="vehicleType" column="vehicle_type" /> <result property="vehicleBrand" column="vehicle_brand" /> <result property="vehicleModel" column="vehicle_model" /> <result property="deptName" column="dept_name" /> <!-- 新增 --> </resultMap>

更新查询SQL
xml <sql id="selectSysTaskVehicleVo"> select tv.id, tv.task_id, tv.vehicle_id, tv.assign_time, tv.assign_by, tv.status, tv.remark, v.vehicle_no, v.vehicle_type, v.vehicle_brand, v.vehicle_model, d.dept_name <!-- 新增d.dept_name --> from sys_task_vehicle tv left join tb_vehicle_info v on tv.vehicle_id = v.vehicle_id left join sys_dept d on v.dept_id = d.dept_id <!-- 新增部门关联 --> </sql>

功能变化

修改前

  • ❌ 只能选择当前任务所属部门的车辆
  • ❌ 选择范围受限
  • ❌ 跨部门车辆无法分配

修改后

  • ✅ 可以选择所有部门的车辆
  • ✅ 选择范围扩大
  • ✅ 支持跨部门车辆分配
  • ✅ 显示车辆所属部门信息

界面效果

前端显示

车辆: [粤A12345 - 急救中心 ▼]
┌─────────────────────────────────────────────────────┐
│ 粤A12345 - 急救中心                                 │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ 粤A12345        │ │ 救护车                      │ │
│ │ ID: 1           │ │ 奔驰 S350                   │ │
│ └─────────────────┘ └─────────────────────────────┘ │
│ 粤A67890 - 转运中心                                 │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ 粤A67890        │ │ 转运车                      │ │
│ │ ID: 2           │ │ 丰田 海狮                   │ │
│ └─────────────────┘ └─────────────────────────────┘ │
│ 粤A99999 - 维修中心                                 │
│ ┌─────────────────┐ ┌─────────────────────────────┐ │
│ │ 粤A99999        │ │ 维修车                      │ │
│ │ ID: 3           │ │ 大众 途安                   │ │
│ └─────────────────┘ └─────────────────────────────┘ │
└─────────────────────────────────────────────────────┘

数据流程

前端调用 getAvailableVehicles(deptId, taskType)
    ↓
后端Controller: /task/vehicle/available
    ↓
Service层: SysTaskServiceImpl.getAvailableVehicles()
    ↓ (不再限制部门ID)
Mapper层: VehicleInfoMapper.selectVehicleInfoList()
    ↓
数据库查询: tb_vehicle_info表 (所有部门)
    ↓
数据转换: VehicleInfo → SysTaskVehicle (包含部门名称)
    ↓
返回给前端 (显示所有部门的车辆)

注意事项

  1. 权限控制:虽然可以搜索所有车辆,但实际分配时仍需要相应的权限
  2. 部门信息:现在会显示车辆所属的部门,便于用户识别
  3. 性能考虑:如果车辆数据很多,可考虑添加搜索或分页功能
  4. 业务逻辑:跨部门车辆分配可能需要额外的审批流程

后续优化建议

  1. 搜索功能:添加车辆搜索功能,支持按车牌号、部门、类型搜索
  2. 分页加载:如果车辆很多,可考虑分页加载
  3. 权限细化:根据用户权限控制可选择的车辆范围
  4. 部门筛选:添加部门筛选选项,让用户可以选择是否只显示特定部门的车辆
  5. 状态管理:支持按车辆状态筛选(如:空闲、使用中、维修中)

相关文件

  • SysTaskServiceImpl.java - Service层实现(已修改)
  • SysTaskVehicle.java - 实体类(已添加deptName字段)
  • SysTaskVehicleMapper.xml - Mapper配置(已更新查询和映射)
  • detail.vue - 前端页面(已支持显示部门信息)

测试建议

  1. 功能测试:验证可以搜索到所有部门的车辆
  2. 显示测试:验证车辆列表正确显示部门信息
  3. 分配测试:验证可以成功分配跨部门车辆
  4. 权限测试:验证权限控制是否正常工作
  5. 性能测试:验证大量车辆数据下的查询性能