请稍等 ...
×

采纳答案成功!

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

后台秒杀令牌生成失败。

请问老师:

我在访问:

file:///Users/asher/IdeaProjects/html/getitem.html?id=11


时,从控制台看到,

Request URL:
http://localhost:8090/order/generatetoken?token=fe506a137d3b47c7aa0355be7ec451f8

响应头,老是:

{"status":"fail","data":{"errCode":10001,"errMsg":"生成令牌失败"}}


我知道应该是后台生成令牌失败了,同时,Redis里也没有看到相关的key。

无奈,跟着老师敲的代码,也检查了。就是找不出最终出错的地方在哪儿。

老师,和路过的同学,能帮我分析一下吗?多谢。

正在回答 回答被采纳积分+3

1回答

提问者 weixin_慕村3424678 2020-07-03 14:54:44

自问自答,debug,仔细的排查了一下代码之后,发现了问题:

 @Override
    public String generateSecondKillToken(Integer promoId,Integer itemId,Integer userId) {
//        判断秒杀是否开始
        PromoDO promoDO = promoDOMapper.selectByPrimaryKey(promoId);
        PromoModel promoModel = convertFromDataObject(promoDO);
        if (promoModel == null) {
            return null;
        }
        System.out.println(promoModel.getStartDate());
        System.out.println(promoModel.getEndDate());
        if (promoModel.getStartDate().isAfterNow()) {
            promoModel.setStatus(1);
        } else if (promoModel.getEndDate().isBeforeNow()) {
            promoModel.setStatus(3);
        } else {
            promoModel.setStatus(2);
        }
        if (promoModel.getStatus().intValue() != 2) {
            return null;
        }
//      判断商品信息是否存在
        ItemModel itemModel = itemService.getItemByIdInCache(itemId);
        if (itemModel == null) {
            return null;
        }

//        判断用户信息是否存在
        UserModel userModel = userService.getUserByIdInCache(userId);
        if (userModel == null) {
            return null;
        }
//       生成token,将token放到Redis中,设置5分钟有效期
        String token = UUID.randomUUID().toString().replace("-", "");
        redisTemplate.opsForValue().set("promo_token_" + promoId+"_userid_"+userId+"_itemid_"+itemId, token);
              redisTemplate.expire("promo_token_" + promoId+"_userid_"+userId+"_itemid_"+itemId, 5, TimeUnit.MINUTES);
        return token;
    }

在生产秒杀令牌token的时候,把

else if (promoModel.getEndDate().isBeforeNow())

这段错误的写成了:

else if (promoModel.getStartDate().isBeforeNow())

导致,判断的时候,开始时间肯定是早于现在,于是把状态置为3,到后面的判断状态不等于2,return NULL了。

新新手路过,大家不要介意。

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号