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

方法一

/**
* 生成批量礼品消费券
*/
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;

php优惠券生成-去重的更多相关文章

  1. 用几条shell命令快速去重10G数据

    试想一下,如果有10G数据,或者更多:怎么才能够快速地去重呢?你会说将数据导入到数据库(mysql等)进行去重,或者用java写个程序进行去重,或者用Hadoop进行处理.如果是大量的数据要写入数据库 ...

  2. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  3. Django之ORM操作

    Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...

  4. django -orm操作总结

    前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MyS ...

  5. ecstore2.0数据库词典

    数据库词典= 数据库tables列表 =|| Name | Comment ||| sdb_aftersales_return_product | 售后申请 || sdb_b2c_brand | 商品 ...

  6. iOS 让CoreData更简单些

    原文:http://www.cocoachina.com/ios/20170421/19096.html 前言 本文并不是CoreData从入门到精通之类的教程, 并不会涉及到过多的原理概念描述, 而 ...

  7. Django——ContentType及ContentType-signals的使用

    一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...

  8. Django——在线教育项目总结

    项目简介 在线教育平台 软件依赖: WEB框架:Django(1.11.7).Django REST framework 前端框架:Vue(2.5.16) 数据库: MySql.redis 支付平台: ...

  9. python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. 7.   MySQL中va ...

随机推荐

  1. java理解抽象类 2.19

    // Telphone.java public abstract class Telphone{ public abstract void call(); public abstract void m ...

  2. 从零开始学C++(2 字符串、向量和数组)

    可以说string和vector是C++标准库中最重要的两种类型,string支持可变长字符串,而vector表示可变长的集合. string 头文件:<string> 定义在命名空间 s ...

  3. Python 必知的 20 个骚操作!

    以下为译文: Python 是一个解释型语言,可读性与易用性让它越来越热门. 正如 Python 之禅中所述: 优美胜于丑陋,明了胜于晦涩. 在你的日常编码中,以下技巧可以给你带来意想不到的收获.   ...

  4. 利用Python实现自动扫雷

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1python的第三方库:win ...

  5. 009.Oracle数据库 , between关键字判断日期在两者之间

    /*Oracle数据库查询日期在两者之间*/ SELECT PKID, OCCUR_DATE, ATA FROM LM_FAULT WHERE ( OCCUR_DATE BETWEEN to_date ...

  6. 05 MySQL数据类型的选择与使用

    数据类型的选择     1.CHAR与VARCHAR           存储/检索的方式不同.         CHAR是固定长度,而VARCHAR是可变长度         非SQLMode下,超 ...

  7. 中文文本分类之TextRNN

    RNN模型由于具有短期记忆功能,因此天然就比较适合处理自然语言等序列问题,尤其是引入门控机制后,能够解决长期依赖问题,捕获输入样本之间的长距离联系.本文的模型是堆叠两层的LSTM和GRU模型,模型的结 ...

  8. idea 将java 项目 打包成jar包

    记录一下,防止忘记.ps : 请忽略这个是web项目 1.idea 打包jar包 (1)首先打开Project Structure,选中Artifacts (2)点击绿色加号,选中jar ,然后选中f ...

  9. spring boot 使用swagger

    在pom.xml中添加maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId> ...

  10. ActorFramework教程对比及规划

    牢骚太盛防肠断,风物长宜放眼量. 一.引子 昨天的文章,本来就是想写写ActorFramework的教程内容,结果写着写着偏了,变成了吐槽. 首先,声明一下,自己从未参加过任何LabVIEW培训班,也 ...