微信小程序云开发之券码领取,怎么防止用户领取到相同的数据?

项目场景:

之前在云开发中遇到了券码领取类型的活动, 但是在没有后端提供接口领取的情况下,我们要怎么去分配券码给用户了?

问题描述:

当项目把一批券码发过来的是后,我的第一反应是给每一个券码都加上一个boolean值,用于标识当前的券码有没有被领取过,当用户点击领取时,把预先存放在云数据库表里的集合数组拿过来,之后循环数组,直到遇见未被领取过的那一条数据,把它发放给用户,之后把云数据库表里的这一条数据状态改已领券。但是,当我做完后,我发现了一个问题,那就是当用户A和B同时点击领取时会领取到相同的券码,因为那个时间段他两拿到的数组是相同的。

解决方案:

于是我便问了问同事,然而同事却告诉我其实他们之做网站的时候就有这个问题了,但是一直没能解决,于是这次把项目交给我了,我(=`ェ´=;)ゞ???于是我便问了我一个做后端的同学他们是怎么处理这种分配的问题,结果也是一讲一堆,啥也没听懂。最后经过我的折腾,发现向用户表里插入用户的数据并不会出现同时占用一条数据的现象,于是便有了念头,那就是表格对照法,具体看下图:

在这里插入图片描述


效果:

可以从GIF中看到,我把提示都写完整了,领取成功,已领取过了,数组越界后提醒领完了,包括复制券码都弄好,因为是录制,所以没办法展示多个用户同时点击领取时并不会拿到相同数据的效果,不过各位放心,我这是从线上的项目提取出来的,所以问题不大。

在这里插入图片描述


Demo部分:

代码我就不粘出来了,有点多,需要的话有积分可以下载CSDN的,没有的话下载百度云的就好。

CSDN=》传送门
百度网盘=》提取码:f058 =》传送门

下载代码 Demo后,导入项目时用自己开通过云开发的AppID就好
在这里插入图片描述
接着再把app.js里的云环境ID换成你自己的
在这里插入图片描述
再把两个云函数上传到你的云服务器
在这里插入图片描述
接着我们打开云控制台,新建一个叫coupon-code的券码集合,之后随便建几条数据用于测试,字段名是coupon_code,别乱写,不然代码对不上。
在这里插入图片描述
紧接着新建一个叫UD-coupon-code的用户集合,把默认的_openid索引删了之后新建一个索引属性唯一的_openid索引,防止一个用户有多条记录。
在这里插入图片描述
这样就完成了,至于代码部分都写了备注,就不多说了。


最后想补习云函数的可以点击这里哦!! 传送门

猜你喜欢

转载自blog.csdn.net/weixin_42063951/article/details/119241608
今日推荐