记一次-生成卡券-开发过程

卡券的生成

需求:账号数字12位,密码数字8位

利用Unix时间戳的微妙数作为前8位,后四位随机生成

public function createCard()
    {
        $s = microtime();
        $number =  substr($s,2,8);
        $amount=100;
        for ($i=1;$i<=500;$i++){
            $data = array(
              'coupon_amount'=>$amount, 'coupon_number'=>$number.rand(1000,9999), 'coupon_pwd'=>rand(1000,9999).rand(1000,9999)
            );
            Db::name('coupon_number')->insert($data);
        }

    }

优化方法

public function createCard()
    {
        $s = microtime();
        $number =  substr($s,2,8);
        $amount=100;
        $arr=[];
        for ($i=1;$i<=500;$i++){
            $data = array(
              'coupon_amount'=>$amount, 'coupon_number'=>$number.rand(1000,9999), 'coupon_pwd'=>rand(1000,9999).rand(1000,9999)
            );
            array_push($arr,$data);
        }
        dump($arr);
        Db::name('coupon_number')->insertAll($arr);
    }

检查账号密码完全重复的数据

select count(*)  as num,group_concat(coupon_pwd) from fcxlt_coupon_card group by coupon_number order by num desc;

经检查发下coupon_number有重复的,密码没有重复的,虽说可以用,但是让人不是很放心。于是用下面方法,无重复

truncate table fcxlt_coupon_card;清空数据并ID从1开始

这样生成后,无重复:

public function createCardlist()
    {
        $arr=[];
        $amount=100;
        for ($i=1;$i<=2000;$i++){
            $data = array(
                'coupon_amount'=>$amount,
                'coupon_number'=>$this->createNonceStr(12),
                'coupon_pwd'=>$this->createNonceStr(8),
                'status'=>1
            );
            array_push($arr,$data);
        }
        dump($arr);
        Db::name('coupon_card')->insertAll($arr);
    }
    //随机字符串
    public function createNonceStr($length = 12) {
        $chars = "123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }

查看是否有重复

select count(*)  as num,group_concat(coupon_pwd) from fcxlt_coupon_card group by coupon_number HAVING num>1 order by num desc;

后期完善,coupon_card新增is_online和create_time时间,因后台可以生成卡券,线上赠送。线下的是打印为卡片

alter table fcxlt_coupon_card
    add create_time datetime not null 
    add is_online tinyint(1) not null default 1 comment '1线下2线上'

我的卡券明细表,增加卡号信息

alter table fcxlt_coupon_mlist
add coupon_num varchar(225) not null default 0
发布了62 篇原创文章 · 获赞 11 · 访问量 8104

猜你喜欢

转载自blog.csdn.net/u013252962/article/details/97934183
今日推荐