UserVehicleServiceImpl.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.zsElectric.boot.business.service.impl;
  2. import cn.hutool.core.lang.Assert;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.zsElectric.boot.business.converter.UserVehicleConverter;
  9. import com.zsElectric.boot.business.mapper.UserVehicleMapper;
  10. import com.zsElectric.boot.business.model.entity.UserVehicle;
  11. import com.zsElectric.boot.business.model.form.UserVehicleForm;
  12. import com.zsElectric.boot.business.model.query.UserVehicleQuery;
  13. import com.zsElectric.boot.business.model.vo.UserVehicleVO;
  14. import com.zsElectric.boot.business.service.UserVehicleService;
  15. import lombok.RequiredArgsConstructor;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.util.Arrays;
  19. import java.util.List;
  20. /**
  21. * 用户车辆信息服务实现类
  22. *
  23. * @author zsElectric
  24. * @since 2026-03-03
  25. */
  26. @Service
  27. @RequiredArgsConstructor
  28. public class UserVehicleServiceImpl extends ServiceImpl<UserVehicleMapper, UserVehicle> implements UserVehicleService {
  29. private final UserVehicleConverter userVehicleConverter;
  30. /**
  31. * 获取用户车辆分页列表
  32. *
  33. * @param queryParams 查询参数
  34. * @return {@link IPage<UserVehicleVO>} 用户车辆分页列表
  35. */
  36. @Override
  37. public IPage<UserVehicleVO> getUserVehiclePage(UserVehicleQuery queryParams) {
  38. LambdaQueryWrapper<UserVehicle> queryWrapper = new LambdaQueryWrapper<>();
  39. queryWrapper.eq(queryParams.getUserId() != null, UserVehicle::getUserId, queryParams.getUserId())
  40. .like(StrUtil.isNotBlank(queryParams.getLicensePlate()), UserVehicle::getLicensePlate, queryParams.getLicensePlate())
  41. .like(StrUtil.isNotBlank(queryParams.getBrand()), UserVehicle::getBrand, queryParams.getBrand())
  42. .eq(queryParams.getVehicleType() != null, UserVehicle::getVehicleType, queryParams.getVehicleType())
  43. .orderByDesc(UserVehicle::getIsDefault)
  44. .orderByDesc(UserVehicle::getCreateTime);
  45. Page<UserVehicle> page = this.page(new Page<>(queryParams.getPageNum(), queryParams.getPageSize()), queryWrapper);
  46. Page<UserVehicleVO> pageVO = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
  47. pageVO.setRecords(userVehicleConverter.toVOList(page.getRecords()));
  48. return pageVO;
  49. }
  50. /**
  51. * 获取用户车辆表单数据
  52. *
  53. * @param id 车辆ID
  54. * @return 车辆表单数据
  55. */
  56. @Override
  57. public UserVehicleForm getUserVehicleFormData(Long id) {
  58. UserVehicle entity = this.getById(id);
  59. return userVehicleConverter.toForm(entity);
  60. }
  61. /**
  62. * 新增用户车辆
  63. *
  64. * @param formData 车辆表单对象
  65. * @return 是否新增成功
  66. */
  67. @Override
  68. @Transactional(rollbackFor = Exception.class)
  69. public boolean saveUserVehicle(UserVehicleForm formData) {
  70. UserVehicle entity = userVehicleConverter.toEntity(formData);
  71. // 如果设置为默认车辆,先清除该用户其他车辆的默认状态
  72. if (entity.getIsDefault() != null && entity.getIsDefault() == 1) {
  73. this.baseMapper.clearUserDefaultVehicle(entity.getUserId());
  74. }
  75. // 如果是用户的第一辆车,自动设为默认
  76. long count = this.count(new LambdaQueryWrapper<UserVehicle>()
  77. .eq(UserVehicle::getUserId, entity.getUserId()));
  78. if (count == 0) {
  79. entity.setIsDefault(1);
  80. }
  81. return this.save(entity);
  82. }
  83. /**
  84. * 更新用户车辆
  85. *
  86. * @param id 车辆ID
  87. * @param formData 车辆表单对象
  88. * @return 是否修改成功
  89. */
  90. @Override
  91. @Transactional(rollbackFor = Exception.class)
  92. public boolean updateUserVehicle(Long id, UserVehicleForm formData) {
  93. UserVehicle entity = userVehicleConverter.toEntity(formData);
  94. entity.setId(id);
  95. // 如果设置为默认车辆,先清除该用户其他车辆的默认状态
  96. if (entity.getIsDefault() != null && entity.getIsDefault() == 1) {
  97. UserVehicle existingVehicle = this.getById(id);
  98. if (existingVehicle != null) {
  99. this.baseMapper.clearUserDefaultVehicle(existingVehicle.getUserId());
  100. }
  101. }
  102. return this.updateById(entity);
  103. }
  104. /**
  105. * 删除用户车辆
  106. *
  107. * @param ids 车辆ID,多个以英文逗号(,)分割
  108. * @return 是否删除成功
  109. */
  110. @Override
  111. public boolean deleteUserVehicles(String ids) {
  112. Assert.isTrue(StrUtil.isNotBlank(ids), "删除的车辆数据为空");
  113. List<Long> idList = Arrays.stream(ids.split(","))
  114. .map(Long::parseLong)
  115. .toList();
  116. return this.removeByIds(idList);
  117. }
  118. /**
  119. * 获取用户的车辆列表
  120. *
  121. * @param userId 用户ID
  122. * @return 车辆列表
  123. */
  124. @Override
  125. public List<UserVehicleVO> getUserVehicleList(Long userId) {
  126. LambdaQueryWrapper<UserVehicle> queryWrapper = new LambdaQueryWrapper<>();
  127. queryWrapper.eq(UserVehicle::getUserId, userId)
  128. .orderByDesc(UserVehicle::getIsDefault)
  129. .orderByDesc(UserVehicle::getCreateTime);
  130. List<UserVehicle> list = this.list(queryWrapper);
  131. return userVehicleConverter.toVOList(list);
  132. }
  133. /**
  134. * 设置默认车辆
  135. *
  136. * @param userId 用户ID
  137. * @param vehicleId 车辆ID
  138. * @return 是否设置成功
  139. */
  140. @Override
  141. @Transactional(rollbackFor = Exception.class)
  142. public boolean setDefaultVehicle(Long userId, Long vehicleId) {
  143. // 验证车辆是否属于该用户
  144. UserVehicle vehicle = this.getById(vehicleId);
  145. Assert.isTrue(vehicle != null && vehicle.getUserId().equals(userId), "车辆不存在或不属于该用户");
  146. // 清除该用户所有车辆的默认状态
  147. this.baseMapper.clearUserDefaultVehicle(userId);
  148. // 设置新的默认车辆
  149. vehicle.setIsDefault(1);
  150. return this.updateById(vehicle);
  151. }
  152. /**
  153. * 获取用户默认车辆
  154. *
  155. * @param userId 用户ID
  156. * @return 默认车辆信息
  157. */
  158. @Override
  159. public UserVehicleVO getDefaultVehicle(Long userId) {
  160. LambdaQueryWrapper<UserVehicle> queryWrapper = new LambdaQueryWrapper<>();
  161. queryWrapper.eq(UserVehicle::getUserId, userId)
  162. .eq(UserVehicle::getIsDefault, 1)
  163. .last("LIMIT 1");
  164. UserVehicle vehicle = this.getOne(queryWrapper);
  165. return vehicle != null ? userVehicleConverter.toVO(vehicle) : null;
  166. }
  167. }