ThinkPHP生成唯一优惠券编码
最近由于公司有个业务需要生成30多万个优惠券编码长度在6-8位,网上百度了许多方法发现都不适用此场景。常规方法生成数据库循环对比太耗性能,技术小白想不出什么高深写法,就自己简单写了一个完美解决需求。(方法还有待优化,请大神多多指点)贴上代码。
把字母数字随机组合成三个数组,然后根据数据库存的自增id的每个数字作为下标去取字符,拼接成需要的编码。各位数
字最大是9,所以只能取到下标为9的,数组设定为十个字符。
1.先获取数据库存的最后一条id如果没有从1开始。
2.判断id长度与传来的编码长度是否一致,如果小于传来的编码长度时根据id每个位数的数字分别取到字符,剩余的调用随机字符拼接。如果等于传来的编码长度直接全部获取
3.参数定义
$post[‘num’] 需要生成的数量
$post[‘length’]需要生成的优惠券编码长度
$post[‘type’]需要使用的编码数组
我这里还有额外参数是我数据库存的优惠券id
/**
* [index 自动生成优惠券编码]
* @return [type] [description]
*/
public function index()
{
$coupon = new ShopCoupon();
$record = new ShopCouponRecord();
$post = request()->post();
// 检测生成数量
if(!isset($post['num']) || $post['num'] == '' || $post['num'] == 0 || $post['num'] > 10000){
$this->error('数量错误');
}
// 检测优惠券码长度
if(!isset($post['length']) || $post['length'] == '' || $post['length'] < 6 || $post['length'] > 8){
$this->error('优惠券码长度错误');
}
// 检测用是否选择优惠券
if (