AddressController.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package com.cyksj.web.controller.user;
  2. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  3. import com.cyksj.common.exception.BusinessRuntimeException;
  4. import com.cyksj.dto.Result;
  5. import com.cyksj.enums.GatewayResponse;
  6. import com.cyksj.model.entity.Address;
  7. import com.cyksj.service.user.AddressService;
  8. import com.cyksj.web.util.StpUserUtil;
  9. import lombok.RequiredArgsConstructor;
  10. import org.springframework.transaction.annotation.Transactional;
  11. import org.springframework.web.bind.annotation.*;
  12. import java.util.List;
  13. /**
  14. * @author chan
  15. * @date 2022/10/13 3:07 PM
  16. */
  17. @RestController
  18. @RequestMapping("/applets/address")
  19. @RequiredArgsConstructor
  20. public class AddressController {
  21. private final AddressService addressService;
  22. @GetMapping("/get")
  23. public Result<List<Address>> get(){
  24. long userId = StpUserUtil.getLoginIdAsLong();
  25. List<Address> addressList = addressService.list(Wrappers.lambdaQuery(Address.class).eq(Address::getUserId, userId));
  26. return GatewayResponse.SUCCESS.newBuilder().toResult(addressList);
  27. }
  28. @Transactional(rollbackFor = Throwable.class)
  29. @PostMapping("/post")
  30. public Result<Address> save(@RequestBody Address address){
  31. long userId = StpUserUtil.getLoginIdAsLong();
  32. int count = addressService.count(Wrappers.lambdaQuery(Address.class).eq(Address::getUserId, userId));
  33. if (count >= 20) {
  34. throw new BusinessRuntimeException("收货地址最多可添加20条, 请清理后再添加.");
  35. }
  36. if (count == 0) {
  37. // 当前新增的地址是唯一一个地址时 无论用户是否设为默认地址 都设为默认地址
  38. address.setIsDefault(true);
  39. }
  40. if(address.getIsDefault() != null && address.getIsDefault() ){
  41. addressService.update(Wrappers.lambdaUpdate(Address.class).eq(Address::getUserId,userId).set(Address::getIsDefault,false));
  42. }
  43. addressService.save(address);
  44. return GatewayResponse.SUCCESS.newBuilder().toResult(address);
  45. }
  46. @Transactional(rollbackFor = Throwable.class)
  47. @PutMapping("/update")
  48. public Result<Address> update(@RequestBody Address address){
  49. long userId = StpUserUtil.getLoginIdAsLong();
  50. if(address.getIsDefault() != null && address.getIsDefault() ){
  51. addressService.update(Wrappers.lambdaUpdate(Address.class).eq(Address::getUserId,userId).set(Address::getIsDefault,false));
  52. }
  53. addressService.updateById(address);
  54. return GatewayResponse.SUCCESS.newBuilder().toResult(address);
  55. }
  56. @DeleteMapping("/delete/{id}")
  57. public Result<String> delete(@PathVariable Long id){
  58. addressService.removeById(id);
  59. return GatewayResponse.SUCCESS.newBuilder().toResult();
  60. }
  61. }