B2cShoppingCartController.java 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.backendsys.controller.B2c;
  2. import com.backendsys.aspect.HttpRequestAspect;
  3. import com.backendsys.entity.v1.B2c.B2cShoppingCartDTO;
  4. import com.backendsys.service.v1.B2c.B2cGoodSpecSkuService;
  5. import com.backendsys.service.v1.B2c.B2cShoppingCartService;
  6. import com.backendsys.utils.response.Result;
  7. import com.backendsys.utils.response.ResultEnum;
  8. import jakarta.servlet.http.HttpServletRequest;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.security.access.prepost.PreAuthorize;
  11. import org.springframework.validation.annotation.Validated;
  12. import org.springframework.web.bind.annotation.*;
  13. import java.util.LinkedHashMap;
  14. import java.util.Map;
  15. /**
  16. * 商品品牌
  17. */
  18. @Validated
  19. @RestController
  20. public class B2cShoppingCartController {
  21. @Autowired
  22. private HttpRequestAspect httpRequestAspect;
  23. @Autowired
  24. private B2cShoppingCartService b2cShoppingCartService;
  25. @Autowired
  26. private B2cGoodSpecSkuService b2cGoodSpecSkuService;
  27. /**
  28. * 购物车列表 (自己的)
  29. */
  30. @GetMapping("/api/front/b2c/shopping/getShoppingCart")
  31. public Result getShoppingCart() {
  32. // .. 获取时,需要同时获取商品规格的库存
  33. return Result.success(b2cShoppingCartService.queryShoppingCartList());
  34. }
  35. /**
  36. * 创建/编辑购物车 (自己的) (member_id, good_id, sku_id 同时且唯一)
  37. * - 判断 SKU 是否存在
  38. * - 判断 quantity (购买数量) 是否大于 stock (SKU库存数量)
  39. * - 判断 商品与SKU 是否一致,是则编辑,否则创建
  40. */
  41. @PreAuthorize("@ss.isMember")
  42. @PostMapping("/api/front/b2c/shopping/createOrUpdateShoppingCart")
  43. public Result createShoppingCart(@Validated(B2cShoppingCartDTO.Create.class) @RequestBody B2cShoppingCartDTO b2cShoppingCartDTO, HttpServletRequest request) {
  44. Map<String, Object> response = new LinkedHashMap<>();
  45. String message = "";
  46. // [判断] SKU 是否存在
  47. Map<String, Object> goodSpecSkuDetail = b2cGoodSpecSkuService.queryGoodSpecSkuDetail(b2cShoppingCartDTO.getSku_id());
  48. if (goodSpecSkuDetail == null) {
  49. return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "商品规格不存在");
  50. }
  51. // [判断] quantity (购买数量) 是否大于 stock (SKU库存数量)
  52. Long quantity = b2cShoppingCartDTO.getQuantity();
  53. Integer stock = (Integer) goodSpecSkuDetail.get("stock");
  54. if (quantity > stock.longValue()) {
  55. return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "库存不足");
  56. }
  57. // [设置] member_id (为自己)
  58. b2cShoppingCartDTO.setMember_id(httpRequestAspect.getMemberId());
  59. // [判断] 商品(good_id)与SKU(sku_id) 是否一致,是则编辑,否则创建
  60. Map<String, Object> shoppingCartDetail = b2cShoppingCartService.queryShoppingCartDetail(b2cShoppingCartDTO);
  61. if (shoppingCartDetail != null && shoppingCartDetail.get("good_id").equals(b2cShoppingCartDTO.getGood_id()) && shoppingCartDetail.get("sku_id").equals(b2cShoppingCartDTO.getSku_id())) {
  62. b2cShoppingCartDTO.setShopping_cart_id((Long) shoppingCartDetail.get("id"));
  63. response = b2cShoppingCartService.updateShoppingCart(b2cShoppingCartDTO);
  64. message = "更新成功";
  65. } else {
  66. response = b2cShoppingCartService.insertShoppingCart(b2cShoppingCartDTO);
  67. message = "创建成功";
  68. }
  69. response.put("quantity", b2cShoppingCartDTO.getQuantity());
  70. return Result.success(response, message);
  71. }
  72. /**
  73. * 清空购物车 (自己的)
  74. */
  75. @PreAuthorize("@ss.isMember")
  76. @PostMapping("/api/front/b2c/shopping/cleanShoppingCart")
  77. public Result cleanShoppingCart(HttpServletRequest request) {
  78. B2cShoppingCartDTO b2cShoppingCartDTO = new B2cShoppingCartDTO();
  79. b2cShoppingCartDTO.setMember_id(httpRequestAspect.getMemberId());
  80. return Result.success(b2cShoppingCartService.cleanShoppingCart(b2cShoppingCartDTO), "清空成功");
  81. }
  82. }