package com.zsElectric.boot.business.service.impl; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsElectric.boot.business.converter.UserVehicleConverter; import com.zsElectric.boot.business.mapper.UserVehicleMapper; import com.zsElectric.boot.business.model.entity.UserVehicle; import com.zsElectric.boot.business.model.form.UserVehicleForm; import com.zsElectric.boot.business.model.query.UserVehicleQuery; import com.zsElectric.boot.business.model.vo.UserVehicleVO; import com.zsElectric.boot.business.service.UserVehicleService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; /** * 用户车辆信息服务实现类 * * @author zsElectric * @since 2026-03-03 */ @Service @RequiredArgsConstructor public class UserVehicleServiceImpl extends ServiceImpl implements UserVehicleService { private final UserVehicleConverter userVehicleConverter; /** * 获取用户车辆分页列表 * * @param queryParams 查询参数 * @return {@link IPage} 用户车辆分页列表 */ @Override public IPage getUserVehiclePage(UserVehicleQuery queryParams) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(queryParams.getUserId() != null, UserVehicle::getUserId, queryParams.getUserId()) .like(StrUtil.isNotBlank(queryParams.getLicensePlate()), UserVehicle::getLicensePlate, queryParams.getLicensePlate()) .like(StrUtil.isNotBlank(queryParams.getBrand()), UserVehicle::getBrand, queryParams.getBrand()) .eq(queryParams.getVehicleType() != null, UserVehicle::getVehicleType, queryParams.getVehicleType()) .orderByDesc(UserVehicle::getIsDefault) .orderByDesc(UserVehicle::getCreateTime); Page page = this.page(new Page<>(queryParams.getPageNum(), queryParams.getPageSize()), queryWrapper); Page pageVO = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); pageVO.setRecords(userVehicleConverter.toVOList(page.getRecords())); return pageVO; } /** * 获取用户车辆表单数据 * * @param id 车辆ID * @return 车辆表单数据 */ @Override public UserVehicleForm getUserVehicleFormData(Long id) { UserVehicle entity = this.getById(id); return userVehicleConverter.toForm(entity); } /** * 新增用户车辆 * * @param formData 车辆表单对象 * @return 是否新增成功 */ @Override @Transactional(rollbackFor = Exception.class) public boolean saveUserVehicle(UserVehicleForm formData) { UserVehicle entity = userVehicleConverter.toEntity(formData); // 如果设置为默认车辆,先清除该用户其他车辆的默认状态 if (entity.getIsDefault() != null && entity.getIsDefault() == 1) { this.baseMapper.clearUserDefaultVehicle(entity.getUserId()); } // 如果是用户的第一辆车,自动设为默认 long count = this.count(new LambdaQueryWrapper() .eq(UserVehicle::getUserId, entity.getUserId())); if (count == 0) { entity.setIsDefault(1); } return this.save(entity); } /** * 更新用户车辆 * * @param id 车辆ID * @param formData 车辆表单对象 * @return 是否修改成功 */ @Override @Transactional(rollbackFor = Exception.class) public boolean updateUserVehicle(Long id, UserVehicleForm formData) { UserVehicle entity = userVehicleConverter.toEntity(formData); entity.setId(id); // 如果设置为默认车辆,先清除该用户其他车辆的默认状态 if (entity.getIsDefault() != null && entity.getIsDefault() == 1) { UserVehicle existingVehicle = this.getById(id); if (existingVehicle != null) { this.baseMapper.clearUserDefaultVehicle(existingVehicle.getUserId()); } } return this.updateById(entity); } /** * 删除用户车辆 * * @param ids 车辆ID,多个以英文逗号(,)分割 * @return 是否删除成功 */ @Override public boolean deleteUserVehicles(String ids) { Assert.isTrue(StrUtil.isNotBlank(ids), "删除的车辆数据为空"); List idList = Arrays.stream(ids.split(",")) .map(Long::parseLong) .toList(); return this.removeByIds(idList); } /** * 获取用户的车辆列表 * * @param userId 用户ID * @return 车辆列表 */ @Override public List getUserVehicleList(Long userId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(UserVehicle::getUserId, userId) .orderByDesc(UserVehicle::getIsDefault) .orderByDesc(UserVehicle::getCreateTime); List list = this.list(queryWrapper); return userVehicleConverter.toVOList(list); } /** * 设置默认车辆 * * @param userId 用户ID * @param vehicleId 车辆ID * @return 是否设置成功 */ @Override @Transactional(rollbackFor = Exception.class) public boolean setDefaultVehicle(Long userId, Long vehicleId) { // 验证车辆是否属于该用户 UserVehicle vehicle = this.getById(vehicleId); Assert.isTrue(vehicle != null && vehicle.getUserId().equals(userId), "车辆不存在或不属于该用户"); // 清除该用户所有车辆的默认状态 this.baseMapper.clearUserDefaultVehicle(userId); // 设置新的默认车辆 vehicle.setIsDefault(1); return this.updateById(vehicle); } /** * 获取用户默认车辆 * * @param userId 用户ID * @return 默认车辆信息 */ @Override public UserVehicleVO getDefaultVehicle(Long userId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(UserVehicle::getUserId, userId) .eq(UserVehicle::getIsDefault, 1) .last("LIMIT 1"); UserVehicle vehicle = this.getOne(queryWrapper); return vehicle != null ? userVehicleConverter.toVO(vehicle) : null; } }