小程序
小游戏
企业微信
微信支付
扫描小程序码分享
后台是用的云开发,现在有一个业务场景需求,当两个用户同时抢单的时候,(能否抢单成功是根据订单状态是否为待接单)第一个用户点击抢单,发送数据库请求更改订单状态为待配送。这之间会有一个时间差,在这时间差之内若另外一个用户也点击抢单,则他获取的还是待接单。所以就出来两个用户能抢同一个单的情况。希望各位老哥给个解决方案|建议,可以有偿!十分感谢.
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
https://developers.weixin.qq.com/community/develop/article/doc/000e42b15384889af24b560205b813
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
爱你老哥
onPickOrder: async function () {
let order = this.data.order
let res = await wx.showModal({
content: '是否接单?'
})
if (res.confirm) { } else return
if (await this.checkCourierWordload()) {//查询骑手是否超过限额,不可再接单
return
}
// 骑手抢单
db.collection('order').where({
_id: this.data.order._id,
status: 2 //已支付
}).update({
data: {
courierInfo: _.set({//填入骑手信息
openid: app.globalData.userInfo._id,
nickName: app.globalData.userInfo.nickName,
avatarUrl: app.globalData.userInfo.avatarUrl,
myPhoto: app.globalData.userInfo.myPhoto,
name: app.globalData.userInfo.name,
firstName: app.globalData.userInfo.firstName,
lastName: app.globalData.userInfo.lastName,
mobile: app.globalData.userInfo.mobile,
courierLevel: app.globalData.userInfo.courierLevel || 0,
startTime: Date.now(),
fromCode: app.getRandomCode(4),//取货码
toCode: app.getRandomCode(4),//送货码
...this.getCourierFee()
}),
status: 3 //已接单
}).then(res => {
console.log(res)
wx.showToast({
title: res.stats.updated ? '接单成功!' : '接单失败!',
icon: 'none'
//订阅消息
if (res.stats.updated) app.sendMsgOfOrder('orderPicked', order)
this.getData()//刷新页面数据
},
秒杀十个商品你可以提前生成好10个令牌存好,点击抢单,第一次调令牌接口,令牌数量减一,有了令牌返回再自动调第二个流程接口,令牌发完,第二个接口都走不进去,也就不存在你说的问题了
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
https://developers.weixin.qq.com/community/develop/article/doc/000e42b15384889af24b560205b813
爱你老哥
onPickOrder: async function () {
let order = this.data.order
let res = await wx.showModal({
content: '是否接单?'
})
if (res.confirm) { } else return
if (await this.checkCourierWordload()) {//查询骑手是否超过限额,不可再接单
return
}
// 骑手抢单
db.collection('order').where({
_id: this.data.order._id,
status: 2 //已支付
}).update({
data: {
courierInfo: _.set({//填入骑手信息
openid: app.globalData.userInfo._id,
nickName: app.globalData.userInfo.nickName,
avatarUrl: app.globalData.userInfo.avatarUrl,
myPhoto: app.globalData.userInfo.myPhoto,
name: app.globalData.userInfo.name,
firstName: app.globalData.userInfo.firstName,
lastName: app.globalData.userInfo.lastName,
mobile: app.globalData.userInfo.mobile,
courierLevel: app.globalData.userInfo.courierLevel || 0,
startTime: Date.now(),
fromCode: app.getRandomCode(4),//取货码
toCode: app.getRandomCode(4),//送货码
...this.getCourierFee()
}),
status: 3 //已接单
}
}).then(res => {
console.log(res)
wx.showToast({
title: res.stats.updated ? '接单成功!' : '接单失败!',
icon: 'none'
})
//订阅消息
if (res.stats.updated) app.sendMsgOfOrder('orderPicked', order)
this.getData()//刷新页面数据
})
},
avatarUrl: app.globalData.userInfo.avatarUrl,
秒杀十个商品你可以提前生成好10个令牌存好,点击抢单,第一次调令牌接口,令牌数量减一,有了令牌返回再自动调第二个流程接口,令牌发完,第二个接口都走不进去,也就不存在你说的问题了