AddressController.java 3.5 KB

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