废话不多说,直接一站式代码粘贴!
@RestController
@RequestMapping("api/v1/cart")
public class CartController {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private VideoDao videoDao;
@RequestMapping("add")
public JsonData addCart(int videoId,int buyNum){
//获取购物车
BoundHashOperations<String,Object,Object> myCart = getMyCartOps();
Object cacheObj = myCart.get(videoId+"");
String result = "";
if(cacheObj!=null){
result = (String)cacheObj;
}
//购物车没这个商品
if(cacheObj == null){
CartItemVO cartItem = new CartItemVO();
VideoDO videoDO = videoDao.findDetailById(videoId);
cartItem.setBuyNum(buyNum);
cartItem.setPrice(videoDO.getPrice());
cartItem.setProductId(videoDO.getId());
cartItem.setProductImg(videoDO.getImg());
cartItem.setProductTitle(videoDO.getTitle());
myCart.put(videoId+"",JsonUtil.objectToJson(cartItem));
}else {
//增加商品购买数量
CartItemVO cartItemVO = JsonUtil.jsonToPojo(result,CartItemVO.class);
cartItemVO.setBuyNum(cartItemVO.getBuyNum()+buyNum);
myCart.put(videoId+"",JsonUtil.objectToJson(cartItemVO));
}
return JsonData.buildSuccess();
}
/**
* 查看我的购物车
*/
@RequestMapping("mycart")
public JsonData getMycart(){
//获取购物车
BoundHashOperations<String,Object,Object> myCart = getMyCartOps();
List<Object> itemList = myCart.values();
List<CartItemVO> cartItemVOList = new ArrayList<>();
for(Object item : itemList){
CartItemVO cartItemVO = JsonUtil.jsonToPojo((String)item,CartItemVO.class);
cartItemVOList.add(cartItemVO);
}
CartVO cartVO = new CartVO();
cartVO.setCartItems(cartItemVOList);
return JsonData.buildSuccess(cartVO);
}
/**
* 清空我的购物车
* @return
*/
@RequestMapping("clear")
public JsonData clear(){
String key = getCartKey();
redisTemplate.delete(key);
return JsonData.buildSuccess();
}
/**
* 抽取我的购物车通用方法
* @return
*/
private BoundHashOperations<String,Object,Object> getMyCartOps(){
String key = getCartKey();
return redisTemplate.boundHashOps(key);
}
private String getCartKey(){
//用户的id,从拦截器获取
int userId = 88;
String cartKey = String.format("video:cart:%s",userId);
return cartKey;
}
}
本文作者为DBC,转载请注明。