# 允许搜索所有车辆修改说明 ## 修改内容 根据用户需求,将任务车辆分配功能从"只搜索指定部门的车辆"修改为"允许搜索所有车辆",以提供更大的选择范围。 ## 修改详情 ### 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 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 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 ``` **更新查询SQL**: ```xml 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 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 ``` ## 功能变化 ### 修改前 - ❌ 只能选择当前任务所属部门的车辆 - ❌ 选择范围受限 - ❌ 跨部门车辆无法分配 ### 修改后 - ✅ 可以选择所有部门的车辆 - ✅ 选择范围扩大 - ✅ 支持跨部门车辆分配 - ✅ 显示车辆所属部门信息 ## 界面效果 ### 前端显示 ``` 车辆: [粤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. **性能测试**:验证大量车辆数据下的查询性能