wlzboy
2026-01-12 45d90d1e7ba86286e998d1ac4d2cba8e98cd059b
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleInfoServiceImpl.java
@@ -47,6 +47,11 @@
        return vehicleInfoMapper.selectVehicleInfoWithDeptsById(vehicleId);
    }
    @Override
    public VehicleInfo selectVehicleInfoByCarId(Integer carId) {
        return vehicleInfoMapper.selectVehicleInfoByCarId(carId);
    }
    /**
     * 查询车辆信息(包含多分公司关联)
     * 
@@ -97,7 +102,6 @@
     * @return 结果
     */
    @Override
    @Transactional
    public int insertVehicleInfo(VehicleInfo vehicleInfo) {
        int rows = vehicleInfoMapper.insertVehicleInfo(vehicleInfo);
        
@@ -115,15 +119,27 @@
     * @param vehicleInfo 车辆信息
     * @return 结果
     */
    @Override
    @Transactional
    /**
     * 修改车辆信息
     * 注意:
     * - 如果需要更新部门关联,请设置 vehicleInfo.deptIds
     * - 如果不需要更新部门关联(仅更新车辆基本信息),请保持 vehicleInfo.deptIds = null
     * - 这样可以避免并发同步时的死锁问题
     *
     * @param vehicleInfo 车辆信息
     * @return 结果
     */
    @Override
    public int updateVehicleInfo(VehicleInfo vehicleInfo) {
        // 先删除旧的关联关系
        vehicleInfoMapper.deleteVehicleDeptByVehicleId(vehicleInfo.getVehicleId());
        // 如果选择了多个分公司,保存到关联表
        if (vehicleInfo.getDeptIds() != null && !vehicleInfo.getDeptIds().isEmpty()) {
            insertVehicleDept(vehicleInfo);
        // 只有当 deptIds 不为 null 时才更新部门关联(避免不必要的锁竞争)
        if (vehicleInfo.getDeptIds() != null) {
            // 先删除旧的关联关系
            vehicleInfoMapper.deleteVehicleDeptByVehicleId(vehicleInfo.getVehicleId());
            // 如果选择了多个分公司,保存到关联表
            if (!vehicleInfo.getDeptIds().isEmpty()) {
                insertVehicleDept(vehicleInfo);
            }
        }
        
        return vehicleInfoMapper.updateVehicleInfo(vehicleInfo);
@@ -176,7 +192,7 @@
     * @return 结果
     */
    @Override
    @Transactional
    public int bindVehicleToUser(Long userId, Long vehicleId) {
        // 先解绑用户的所有车辆(业务逻辑:一个用户同时只能绑定一辆车)
        vehicleInfoMapper.unbindAllVehiclesFromUser(userId);