在急救转运任务创建页面中,选择任务车辆时需要确保:
1. 只显示car_id不为空的车辆(已在旧系统中存在的车辆)
2. 只显示dept_id不为空的车辆(已分配给部门的车辆)
3. 避免用户选择到无效或未完成配置的车辆数据
只有同时满足以下条件的车辆才会在任务创建时显示:
- car_id IS NOT NULL AND car_id != '' - 车辆已在旧系统中存在
- dept_id IS NOT NULL - 车辆已分配给部门
- status = '0' - 车辆状态正常(由现有逻辑保证)
文件: ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
修改位置: selectVehicleInfoList 查询语句
修改前:xml <select id="selectVehicleInfoList" parameterType="VehicleInfo" resultMap="VehicleInfoResult"> <include refid="selectVehicleInfoVo"/> <where> <if test="vehicleNo != null and vehicleNo != ''"> and v.vehicle_no = #{vehicleNo}</if> <if test="deviceId != null and deviceId != ''"> and v.device_id = #{deviceId}</if> <if test="vehicleType != null and vehicleType != ''\"> and v.vehicle_type = #{vehicleType}</if> <if test="vehicleBrand != null and vehicleBrand != ''"> and v.vehicle_brand = #{vehicleBrand}</if> <if test="vehicleModel != null and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if> <if test="status != null and status != ''"> and v.status = #{status}</if> <if test="platformCode != null and platformCode != ''"> and v.platform_code = #{platformCode}</if> <if test="deptId != null"> and v.dept_id = #{deptId}</if> </where> </select>
修改后:xml <select id="selectVehicleInfoList" parameterType="VehicleInfo" resultMap="VehicleInfoResult"> <include refid="selectVehicleInfoVo"/> <where> <if test="vehicleNo != null and vehicleNo != ''"> and v.vehicle_no = #{vehicleNo}</if> <if test="deviceId != null and deviceId != ''"> and v.device_id = #{deviceId}</if> <if test="vehicleType != null and vehicleType != ''"> and v.vehicle_type = #{vehicleType}</if> <if test="vehicleBrand != null and vehicleBrand != ''"> and v.vehicle_brand = #{vehicleBrand}</if> <if test="vehicleModel != null and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if> <if test="status != null and status != ''"> and v.status = #{status}</if> <if test="platformCode != null and platformCode != ''"> and v.platform_code = #{platformCode}</if> <if test="deptId != null"> and v.dept_id = #{deptId}</if> <!-- 任务车辆选择必须过滤:只显示car_id和dept_id都不为空的车辆 --> and v.car_id is not null and v.car_id != '' and v.dept_id is not null </where> </select>
关键变化:
- ✅ 添加 and v.car_id is not null and v.car_id != '' - 过滤car_id为空的记录
- ✅ 添加 and v.dept_id is not null - 过滤dept_id为空的记录
- ✅ 这些条件是强制性的,不受动态参数控制,始终生效
页面: app/pages/task/create-emergency.vue
影响方法: getAvailableVehicles()javascript getAvailableVehicles() { const deptId = this.currentUser.deptId return listAvailableVehicles(deptId, 'EMERGENCY').then(response => { const vehicleList = response.data || response.rows || [] // 返回的列表已自动过滤:只包含car_id和dept_id都不为空的车辆 this.vehicleOptions = vehicleList.map(vehicle => ({ id: vehicle.vehicleId, name: vehicle.vehicleNo, type: vehicle.vehicleType, status: vehicle.status })) this.vehicles = this.vehicleOptions.map(v => v.name) }).catch(() => { this.vehicles = [] }) }
效果:
- 只显示有效的、已配置完整的车辆
- 用户无法选择到无效车辆
- 提升数据质量
页面: app/pages/bind-vehicle.vue
影响:
- 用户绑定车辆时,只能看到有效车辆
- 避免绑定到无效车辆
路径: 系统管理 > 车辆管理
影响:
- 车辆列表查询会自动过滤无效记录
- 管理员需要确保新增车辆时填写car_id和dept_id
服务: VehicleSyncServiceImpl
注意事项:
- 从SQL Server同步车辆时,必须确保car_id有值
- 建议在同步时同时设置dept_id
功能: 调度单同步、服务单同步
好处:
- 确保新系统中的车辆都能在旧系统中找到对应记录
- 避免同步时出现关联失败
执行以下SQL查询,检查是否有car_id或dept_id为空的车辆:
-- 检查car_id为空的车辆
SELECT vehicle_id, vehicle_no, car_id, dept_id, status
FROM tb_vehicle_info
WHERE car_id IS NULL OR car_id = '';
-- 检查dept_id为空的车辆
SELECT vehicle_id, vehicle_no, car_id, dept_id, status
FROM tb_vehicle_info
WHERE dept_id IS NULL;
-- 检查两者都为空的车辆
SELECT vehicle_id, vehicle_no, car_id, dept_id, status
FROM tb_vehicle_info
WHERE (car_id IS NULL OR car_id = '') OR dept_id IS NULL;
-- 示例:为车辆补充car_id和dept_id
UPDATE tb_vehicle_info
SET car_id = '对应的旧系统车辆ID',
dept_id = 对应的部门ID
WHERE vehicle_id = 具体的车辆ID;
运行车辆同步定时任务,确保所有车辆都从旧系统正确同步。
如果确认某些车辆确实无效,可以删除:
-- 删除car_id和dept_id都为空的车辆
DELETE FROM tb_vehicle_info
WHERE (car_id IS NULL OR car_id = '') AND dept_id IS NULL;
⚠️ 注意: 删除前请先备份数据!
数据准备:sql INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status) VALUES ('粤A12345', '1001', 100, '0');
预期结果: 车辆在任务创建页面的下拉列表中显示
数据准备:sql INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status) VALUES ('粤A67890', NULL, 100, '0');
预期结果: 车辆不在任务创建页面的下拉列表中显示
数据准备:sql INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status) VALUES ('粤A99999', '1002', NULL, '0');
预期结果: 车辆不在任务创建页面的下拉列表中显示
数据准备:sql INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status) VALUES ('粤A00000', NULL, NULL, '0');
预期结果: 车辆不在任务创建页面的下拉列表中显示
数据准备:sql INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status) VALUES ('粤A11111', '', 100, '0');
预期结果: 车辆不在任务创建页面的下拉列表中显示
前端调用 getAvailableVehicles()
↓
API: /task/vehicle/available
↓
Service: SysTaskServiceImpl.getAvailableVehicles()
↓
设置查询参数: status='0'
↓
Mapper: VehicleInfoMapper.selectVehicleInfoList()
↓
执行SQL查询:
SELECT * FROM tb_vehicle_info v
WHERE v.status = '0'
AND v.car_id IS NOT NULL
AND v.car_id != ''
AND v.dept_id IS NOT NULL
↓
返回过滤后的车辆列表
↓
前端显示车辆下拉列表
后台管理系统:
- 管理员新增车辆时,必须填写car_id和dept_id
- 建议在表单中设置为必填项
- 前端校验:提交前验证这两个字段不为空
车辆同步:
- 从旧系统同步车辆时,确保能获取到car_id
- 同步时设置合理的默认部门(dept_id)
定期检查:sql -- 每月执行一次,检查是否有新增的无效车辆 SELECT COUNT(*) as invalid_count FROM tb_vehicle_info WHERE (car_id IS NULL OR car_id = '') OR dept_id IS NULL;
数据监控:
- 建议在后台管理系统中添加数据质量监控
- 当发现无效车辆时,及时通知管理员处理
历史数据处理:
- 对于已创建的任务,关联的车辆可能包含无效数据
- 建议在任务详情页面做容错处理
- 显示车辆信息时,如果car_id为空,提示"车辆信息不完整"
车辆绑定:
- 用户只能绑定有效车辆
- 如果用户之前绑定了无效车辆,需要重新绑定
任务分配:
- 只能将任务分配给有效车辆
- 避免分配到无效车辆导致的业务流转异常
ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml - SQL查询修改ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleInfoMapper.java - Mapper接口ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java - 车辆查询服务app/pages/task/create-emergency.vue - 急救转运任务创建页面app/pages/bind-vehicle.vue - 车辆绑定页面app/api/vehicle.js - 车辆API接口prd/任务车辆car_id和dept_id过滤说明.md(本文档)