• php优惠券生成-去重


    记录一次优惠券生成-去重

    方法一

    /**
    * 生成批量礼品消费券
    */
    public function giftCardAddOp() {
      //接收get值
      $num = $_GET['gift_num'];
      $branch_prefix = $_GET['city_name'];
      if ($_GET) {
      $this->add_gift_card($branch_prefix, $num);
      }

    showMessage('礼品码生成成功!','index.php?act=order&op=giftCardCode');

    }
    /**
    * 处理插入
    *$branch_prefix
    *$num
    *$sum
    *
    */
    private function add_gift_card($branch_prefix, $num ,$sum='0'){

      // 计数
      $n = 0;
      $promotion_codes = array();//这个数组用来接收生成的优惠码
      for ($i=0; $i < (($sum >0) ? $sum : $num); $i++) {
        $charid = strtoupper(md5(uniqid(mt_rand(), true)));
        $uuid = substr($charid, 8, 8);

        $company = '爱之依';
        $promotion_codes[$i] = $uuid;

      
        $data.= "('".$branch_prefix."','".$uuid."','".time()."','".$company."'),";

        //插入一次 +1
        $n++;

        //防止死循环
        $num_con = $num+1000;
        if ($n == $num_con) {
          break;
        }

      }
      //去除右侧逗号
      $data = rtrim($data,',');
      //批量插入
      $model_gift_card = Model('goods_gift_card');
      $gift_code_info = $model_gift_card->addGiftAll($data);

      //如果插入成功true
      if ($gift_code_info) {
      //查询插入数量
      $condition = array('branch_prefix' => $branch_prefix);
      $gift_count = $model_gift_card->getGiftCodeCount($condition);

      //插入失败的再次循环插入
      if ($gift_count < $num) {
        $this->add_gift_card($branch_prefix, $num, $num - $gift_count);
      }
      }

    }

    方法2:

    $array = [];
    $num = 10;
    $lenght = 8;
    $start = 99999999;
    $step = 60000;


    $arrDate = explode('-', date('Y-m-d'));
    $m = base_convert($arrDate[1],10,32); //进制转换
    $d = base_convert($arrDate[2],10,32);
    for ($i=$start;$i<=($start+$step*$num);$i+=$step){
    $array[] = $uuid = strtoupper($m.$d.str_pad(base_convert($i,10,32),$lenght-2,'0',STR_PAD_LEFT)); //取进制数,不足补0


    }
    var_dump($array);die;


    $update['gift_card_code'] = $uuid;
    $update['add_time'] = time();
    $update['use_time'] = 0;
    $update['buyer_id'] = 0;
    $update['is_delete'] = 0;
    $update['order_id'] = 0;

    $model_gift_card = M('goods_gift_card');
    $gift_code_info = $model_gift_card->add($update);
    if(strlen(array_pop($array))>9) return false;
    return $array;

  • 相关阅读:
    (一)Oracle学习笔记—— 表和表空间
    svn上检出的项目在myeclipse中报错的解决
    创建表空间报错
    PLSQL中scott账户登录不上,报错ORA-01017: invalid username/password; logon denied
    Oracle安装过程中的几点注意
    Refactoring之——代码的坏味道(二)过大的类 &(三)基本类型偏执
    Refactoring之——代码的坏味道(一)过长方法
    (一)Activiti之——简介、插件安装及BPMN元素
    用尽洪荒之力整理的Mysql数据库32条军规(转)
    技术文章翻译
  • 原文地址:https://www.cnblogs.com/ljl123/p/9533732.html
Copyright © 2020-2023  润新知