前言
在上一篇文章中,我们实现了后端拼单逻辑并且在一端做了测试。在这篇文章中将会完善拼单功能。通过链接来邀请用户加入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("您不是订单创建人,不能清空购物车");
}
}
九、最终实现效果
十、总结
至此,我们用redis 和 websocket实现了好友拼单。主要的难点在于理解整个功能的流程和收到数据后业务逻辑的处理。如果还没有看懂的的话,建议去使用一下某团的好友拼单功能。相信聪明的你很快就能理解这个功能了。
OK,以上就是实现外卖拼单的全部内容了,如果你觉得有帮助的话,求赞、求收藏。如果有疑问的话,请在下面评论,我会及时解答。