Compare commits

...

5 Commits

Author SHA1 Message Date
bunny b8c745ff37 feat(新增): 清空购物车
Signed-off-by: bunny <1319900154@qq.com>
2024-03-28 14:52:14 +08:00
bunny 55d0612a31 feat(新增): 更新购物车商品全部选中状态
Signed-off-by: bunny <1319900154@qq.com>
2024-03-28 14:51:24 +08:00
bunny 1dc696935d feat(新增): 更新购物车商品选中状态
Signed-off-by: bunny <1319900154@qq.com>
2024-03-28 14:49:53 +08:00
bunny cd1b13900e feat(新增): 删除购物车商品
Signed-off-by: bunny <1319900154@qq.com>
2024-03-28 14:48:51 +08:00
bunny c92f246341 feat(新增): 查询购物车
Signed-off-by: bunny <1319900154@qq.com>
2024-03-28 14:47:27 +08:00
4 changed files with 179 additions and 4 deletions

View File

@ -47,6 +47,10 @@ spring:
uri: lb://service-order
predicates:
- Path=/*/order/**
- id: service-cart
uri: lb://service-cart
predicates:
- Path=/*/order/cart/**
data:
redis:
host: ${bunny.redis.host}

View File

@ -1,15 +1,16 @@
package com.atguigu.cart.controller;
import com.atguigu.cart.service.CartService;
import com.atguigu.spzx.model.entity.h5.CartInfo;
import com.atguigu.spzx.model.vo.result.Result;
import com.atguigu.spzx.model.vo.result.ResultCodeEnum;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "购物车接口")
@RestController
@ -25,4 +26,40 @@ public class CartController {
cartService.addToCart(skuId, skuNum);
return Result.success();
}
@Operation(summary = "查询购物车")
@GetMapping("auth/cartList")
public Result<List<CartInfo>> cartList() {
List<CartInfo> cartInfoList = cartService.getCartList();
return Result.build(cartInfoList, ResultCodeEnum.SUCCESS);
}
@Operation(summary = "删除购物车商品")
@DeleteMapping("auth/deleteCart/{skuId}")
public Result<String> deleteCart(@Parameter(name = "skuId", description = "商品skuId", required = true) @PathVariable("skuId") Long skuId) {
cartService.deleteCart(skuId);
return Result.success();
}
@Operation(summary = "更新购物车商品选中状态")
@GetMapping("/auth/checkCart/{skuId}/{isChecked}")
public Result<String> checkCart(@Parameter(name = "skuId", description = "商品skuId", required = true) @PathVariable(value = "skuId") Long skuId,
@Parameter(name = "isChecked", description = "是否选中 1:选中 0:取消选中", required = true) @PathVariable(value = "isChecked") Integer isChecked) {
cartService.checkCart(skuId, isChecked);
return Result.success();
}
@Operation(summary = "更新购物车商品全部选中状态")
@GetMapping("/auth/allCheckCart/{isChecked}")
public Result<String> allCheckCart(@Parameter(name = "isChecked", description = "是否选中 1:选中 0:取消选中", required = true) @PathVariable(value = "isChecked") Integer isChecked) {
cartService.allCheckCart(isChecked);
return Result.success();
}
@Operation(summary = "清空购物车")
@GetMapping("/auth/clearCart")
public Result<String> clearCart() {
cartService.clearCart();
return Result.success();
}
}

View File

@ -1,5 +1,9 @@
package com.atguigu.cart.service;
import com.atguigu.spzx.model.entity.h5.CartInfo;
import java.util.List;
public interface CartService {
/**
* 添加购物车
@ -8,4 +12,38 @@ public interface CartService {
* @param skuNum 商品数量
*/
void addToCart(Long skuId, Integer skuNum);
/**
* 查询购物车
*
* @return 购物车列表
*/
List<CartInfo> getCartList();
/**
* 删除购物车商品
*
* @param skuId 商品的ID值
*/
void deleteCart(Long skuId);
/**
* 更新购物车商品选中状态
*
* @param skuId 商品的ID值
* @param isChecked 是否选中
*/
void checkCart(Long skuId, Integer isChecked);
/**
* 更新购物车商品全部选中状态
*
* @param isChecked 是否选中
*/
void allCheckCart(Integer isChecked);
/**
* 清空购物车
*/
void clearCart();
}

View File

@ -1,6 +1,7 @@
package com.atguigu.cart.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.atguigu.cart.service.CartService;
import com.atguigu.context.BaseContext;
import com.atguigu.feign.product.ProductFeignClient;
@ -11,7 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class CartServiceImpl implements CartService {
@ -61,4 +66,95 @@ public class CartServiceImpl implements CartService {
// 将商品数据存储到购物车中
redisTemplate.opsForHash().put(cartKey, String.valueOf(skuId), JSON.toJSONString(cartInfo));
}
/**
* 查询购物车
*
* @return 购物车列表
*/
@Override
public List<CartInfo> getCartList() {
// 获取当前登录的用户信息
Long userId = BaseContext.getUserInfo().getId();
String cartKey = userId.toString();
// 获取数据
List<Object> cartInfoList = redisTemplate.opsForHash().values(cartKey);
if (!CollectionUtils.isEmpty(cartInfoList)) {
return cartInfoList.stream().map(cartInfoJSON -> JSON.parseObject(cartInfoJSON.toString(), CartInfo.class))
.sorted((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime()))
.collect(Collectors.toList());
}
return new ArrayList<>();
}
/**
* 删除购物车商品
*
* @param skuId 商品的ID值
*/
@Override
public void deleteCart(Long skuId) {
// 获取当前登录的用户数据
Long userId = BaseContext.getUserInfo().getId();
String cartKey = userId.toString();
// 获取缓存对象
redisTemplate.opsForHash().delete(cartKey, String.valueOf(skuId));
}
/**
* 更新购物车商品选中状态
*
* @param skuId 商品的ID值
* @param isChecked 是否选中
*/
@Override
public void checkCart(Long skuId, Integer isChecked) {
// 获取当前登录的用户数据
Long userId = BaseContext.getUserInfo().getId();
String cartKey = userId.toString();
Boolean hasKey = redisTemplate.opsForHash().hasKey(cartKey, String.valueOf(skuId));
if (hasKey) {
String cartInfoJSON = Objects.requireNonNull(redisTemplate.opsForHash().get(cartKey, String.valueOf(skuId))).toString();
CartInfo cartInfo = JSON.parseObject(cartInfoJSON, CartInfo.class);
cartInfo.setIsChecked(isChecked);
redisTemplate.opsForHash().put(cartKey, String.valueOf(skuId), JSON.toJSONString(cartInfo));
}
}
/**
* 更新购物车商品全部选中状态
*
* @param isChecked 是否选中
*/
@Override
public void allCheckCart(Integer isChecked) {
// 获取当前登录的用户数据
Long userId = BaseContext.getUserInfo().getId();
String cartKey = userId.toString();
// 获取所有的购物项数据
List<Object> objectList = redisTemplate.opsForHash().values(cartKey);
if (!CollectionUtils.isEmpty(objectList)) {
objectList.stream().map(cartInfoJSON -> {
CartInfo cartInfo = JSON.parseObject(cartInfoJSON.toString(), CartInfo.class);
cartInfo.setIsChecked(isChecked);
return cartInfo;
}).forEach(cartInfo -> redisTemplate.opsForHash().put(cartKey, String.valueOf(cartInfo.getSkuId()), JSON.toJSONString(cartInfo)));
}
}
/**
* 清空购物车
*/
@Override
public void clearCart() {
Long userId = BaseContext.getUserInfo().getId();
String cartKey = userId.toString();
redisTemplate.delete(cartKey);
}
}