请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

购物车的添加方法无法将数据添加到redis数据库中,老师我自己找了一下问题,没有找出来,麻烦老师看一下

正在回答

3回答

报错信息发一下。

0 回复 有任何疑惑可以回复我~
  • 提问者 潜龙勿用s #1
    主要是也不报错,就是数据库没反应,我估计可能是我电脑安装的redis有问题,我打算后面换台电脑重新配置环境看看吧
    回复 有任何疑惑可以回复我~ 2020-01-13 18:22:22
  • 廖师兄 回复 提问者 潜龙勿用s #2
    简单的key-value形式,能写进去吗?
    回复 有任何疑惑可以回复我~ 2020-01-13 21:39:49
  • 提问者 潜龙勿用s 回复 廖师兄 #3
    我今天在测试方法里写了key-value方法,可以存进去,应该是service或者别的地方写错了吧,我好好查查,头疼。老师一群可以扩大人数吗,二群我看就几十个人,您也不在里面我就退了
    回复 有任何疑惑可以回复我~ 2020-01-14 13:42:47
提问者 潜龙勿用s 2020-01-12 11:42:56
// CartServiceImpl.java 文件中add()方法的的代码
package com.imooc.mall.service.impl;

import com.google.gson.Gson;
import com.imooc.mall.dao.ProductMapper;
import com.imooc.mall.enums.ProductStatusEnum;
import com.imooc.mall.enums.ResponseEnum;
import com.imooc.mall.form.CartAddForm;
import com.imooc.mall.pojo.Cart;
import com.imooc.mall.pojo.Product;
import com.imooc.mall.service.ICartService;
import com.imooc.mall.service.vo.CartProductVo;
import com.imooc.mall.service.vo.CartVo;
import com.imooc.mall.service.vo.ResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class CartServiceImpl implements ICartService {

    @Autowired
    private ProductMapper productMapper;

    @Autowired
    private StringRedisTemplate redisTemplate;
    // 将对象转化成json字符串
    private Gson gson = new Gson();
    // 购物车id
    private final static String CART_REDIS_KEY_TEMPLATE = "cart_%d";

    // 向购物车中添加商品
    @Override
    public ResponseVo<CartVo> add(Integer uid, CartAddForm form) {
        Integer quantity = 1;
        Product product = productMapper.selectByPrimaryKey(form.getProductId());
        // 1. 判断商品是否存在
        if (product == null) {
            return ResponseVo.error(ResponseEnum.PRODUCT_NOT_EXIST);
        }
        // 2. 判断商品是否在售
        if (product.getStatus().equals(ProductStatusEnum.ON_SALE.getCode())) {
            return ResponseVo.error(ResponseEnum.PRODUCT_OFF_SALE_OR_DELETE);
        }
        // 3. 判断商品的库存是否充足
        if (product.getStock() <= 0) {
            return ResponseVo.error(ResponseEnum.PRODUCT_STOCK_ERROR);
        }
        // 4. 校验完毕后,写入数据到 redis中
        HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();

        String redisKey = String.format(CART_REDIS_KEY_TEMPLATE, uid);
        String value = opsForHash.get(redisKey, String.valueOf(product.getId()));

        Cart cart;
        if (StringUtils.isEmpty(value)) {
            // 如果 value 为空,说明购物车中没有该商品,新增
            cart = new Cart(product.getId(), quantity, form.getSelected());
        } else {
            // 如果存在, 则商品的数量 +1
            cart = gson.fromJson(value, Cart.class);
            cart.setQuantity(cart.getQuantity() + quantity);
        }
        opsForHash.put(redisKey, String.valueOf(product.getId()), gson.toJson(cart));

        return list(uid);
    }


0 回复 有任何疑惑可以回复我~
xialei 2020-01-11 23:27:29

只有测试语句,怎么看?

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信