SpringBoot + Redis尝试实现外卖拼单(三)


前言

在上一篇文章中,我们实现了后端拼单逻辑并且在一端做了测试。在这篇文章中将会完善拼单功能。通过链接来邀请用户加入websocket实现多个用户一起操作商品的效果。


七、邀请好友加入

我的项目并不涉及微信端。因此,实现思路很简单,我们只需要把localstorage里的orderId拿出来并生成一个url发送给好友就可以了。

	<div v-if="seller.supports" class="support-count" style="right: 85px" @click="cancelGroupBuying">
        <span class="count">取消拼单</span>
    </div>
    <div v-if="seller.supports" class="support-count" @click="inviteFriends">
        <span class="count">邀请好友</span>
    </div>
	methods: {
      cancelGroupBuying() {
        const url = 'http://localhost:8081/groupbuying/cancel?token=' + localStorage.getItem('token');
        this.$http.get(url).then((response) => {
          response = response.body;
          if (response.status === 'success') {
            if (response.data == null) {
              localStorage.removeItem('orderId');
              window.location.href = '/#';
            } else {
              alert(response.data);
            }
          } else {
            console.log('call backend fail');
          }
        });
      },
      inviteFriends() {
        alert('http://localhost:3000/groupbuying.html#/goods?orderId=' + localStorage.getItem('orderId'));
      }
    },

八、后端Controller功能完善

我们需要把页面上的取消拼单和清空购物车对应功能实现一下,代码如下:

@RequestMapping("/groupbuying")
@RestController
public class GroupBuyingController {

	@Autowired
    private JWTOperator jwtOperator;
    @Autowired
    private StringRedisTemplate redisTemplate;
    
    /**
     * 取消拼单
     * @param token
     * @return
     * @throws BusinessException
     */
	@GetMapping("/cancel")
    public BaseResult cancel(@RequestParam String token) throws BusinessException {
        // 从JWT中获取用户ID
        String uid = getUserId(token);
        // 获得redis中订单ID
        String gbOrderId = redisTemplate.opsForValue().get("tempOrderId:"+uid);
        if (gbOrderId != null){
            // 删除订单ID
            redisTemplate.delete("tempOrderId:"+uid);
            // 删除订单商品数据
            redisTemplate.delete(gbOrderId);
            return  BaseResult.create(null);
        }
        return  BaseResult.create("您不是订单创建人,不能取消拼单");
    }
    
    /**
     * 清空购物车
     * @param token
     * @return
     * @throws BusinessException
     */
	@GetMapping("/empty")
    public BaseResult empty(@RequestParam String token) throws BusinessException {
        String uid = getUserId(token);
        String gbOrderId = redisTemplate.opsForValue().get("tempOrderId:"+uid);
        if (gbOrderId != null){
            redisTemplate.delete(gbOrderId);
            return  BaseResult.create(null);
        }
        return  BaseResult.create("您不是订单创建人,不能清空购物车");
    }
}

九、最终实现效果

B站视频


十、总结

至此,我们用redis 和 websocket实现了好友拼单。主要的难点在于理解整个功能的流程和收到数据后业务逻辑的处理。如果还没有看懂的的话,建议去使用一下某团的好友拼单功能。相信聪明的你很快就能理解这个功能了。
OK,以上就是实现外卖拼单的全部内容了,如果你觉得有帮助的话,求赞、求收藏。如果有疑问的话,请在下面评论,我会及时解答。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值