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

方法一

/**
* 生成批量礼品消费券
*/
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. 四、Vue过渡与动画、过渡css类名、自定义指定、过滤器

    一.过渡 动画 1.1简单的过渡动画使用 parent.vue [0]定义一个待显示的数据 [1]定义一个显示隐藏flag [2]使用动画过滤标签,name用来连接style样式:v-show用来控制 ...

  2. mybatis插入数据后将其ID返回

    背景 mybatis没有关联保存的功能,所以主从表需要分开保存,这就涉及到主表保存后要再次获取主表ID的环节,以下介绍mybatis插入数据后返回其自增ID的两种方式 方案 1.sql获取 <i ...

  3. cf 764A、762A、764B

    颓废题 764A #include<bits/stdc++.h> #define LL long long #define N 100005 #define lowbit(x) x& ...

  4. 九十四、SAP中ALV事件之八,显示功能按钮栏

    一.我们把其他代码都注释掉,直接写一行调用 SET PF-STATUS 'TIANPAN_TOOLS'. 二.运行程序,会看到我们上一篇所添加的相关功能栏图标, 三.点击不同图标,会按程序代码,有不同 ...

  5. 二十二、SAP中创建一个内表,并添加内容循环输出显示

    一.直接上代码 二.输出如下

  6. C#路径2

    String apppath = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; //获取整个文件路径名ap ...

  7. springmvc无法访问JS,CSS等文件

    配置好web.xml中的dispatchservlet后,js,css,都不能正常显示 web.xml配置文件 <!-- 核心控制器 --> <servlet> <ser ...

  8. springboot - 映射 HTTP Response Status Codes 到自定义 JSP Error 页面

    1.总览 2.代码 1).pom.xml <dependencies> <dependency> <groupId>org.springframework.boot ...

  9. check Linux文件夹个数

    (ls -l|grep "^-"| wc -l)查看某个文件夹下文件的个数.(ls -lR|grep "^-"| wc -l)查看某个文件夹下文件的个数,包括子 ...

  10. [BJDCTF2020]The mystery of ip

    0x00 知识点 SSTI模板注入: 之前也写过: https://www.cnblogs.com/wangtanzhi/p/12238779.html SSTI模板注入: 模板注入涉及的是服务端We ...