优惠券核销步骤:
- 建立优惠券类型表,里面字段有: 优惠券类型Id、 优惠券名称、发放面额、发放数量、核销码集合、满多少元使用 0代表无限制、使用范围0部分产品使用 1全场产品使用、 有效日期开始时间、有效日期结束时间、 创建时间、 已领取数量、 是否已经领取完、 优惠券状态(0、正常 1、已发完 2、已关闭)
- 建立一个优惠券表,里面字段有:优惠券ID、领取人ID、优惠券使用ID、面额、优惠券状态(包含未领取、已领取未使用、已使用、已过期状态)、领取时间、使用时间、开始时间、结束时间、核销码
php代码部分
$allcode_str=Db::name('ns_coupon_type')->field('code')->select(); //查询所有核销码
$allcode_arr=[];//所有核销码数组
foreach ($allcode_str as $key => $value) {
$valuearr= explode(",",$value['code']);
foreach ($valuearr as $k => $v) {
array_push($allcode_arr,$v);
}
}
$code=Db::name('ns_coupon_type')->where('coupon_type_id',$param["coupon_type_id"])->field('code')->find();//查询这个类型优惠券的核销码集合(这个是后续补发优惠券,如果是添加就不用了,这是修改的,添加只判断所有核销码集合是否重复就行)
$codearr=explode(",", $code['code']);//转为数组
$update_codearr=[];
//随机数参与者
$chars_array = array(
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z",
);
$sum1=1;
for($sum1;$sum1<=$param["repair_code_num"];$sum1++){//这是核销码的数量也是优惠券数量
$charsLen = count($chars_array) - 1;
//生成4位随机数
$outputstr = "";
for ($i=0; $i<4; $i++)
{
$outputstr .= $chars_array[mt_rand(0, $charsLen)];
}
if(in_array($outputstr,$codearr))//判断生成4位随机数是否存在这个优惠券类型的核销码集合
{
$sum1=$sum1-1;//存在,重新生成一位随机数
}
else{
if(in_array($outputstr,$allcode_arr))//判断生成4位随机数是否存在所有优惠券类型的核销码集合
{
$sum1=$sum1-1;//存在,重新生成一位随机数
}
else{
array_push($codearr,$outputstr);//插入优惠券表的核销码
array_push($update_codearr,$outputstr);//这个是后续补发的优惠券核销码,插入之前生成的核销码
}
}
}
$baomm=implode(",", $codearr);
$data['code']=$baomm;//让所有核销码已字符串存在,插入优惠券类型表
//添加优惠券表
if ($param["count"] > 0) {//优惠券数量
for ($i = 0; $i < $param["count"]; $i++) {
"code" => $codearr[$i],//这是新添加到优惠券表的核销码,给每个优惠券配一个核销码(用在添加)
"code" => $update_codearr[$i],//这是后续补发插入的核销码(用在修改)
}
}
注意以上只是生成不重复核销码集合部分代码,在添加优惠券类型的时候,也要同时添加优惠券信息,包含一个优惠券配一个核销码等等信息,优惠券类型包含所有核销码集合以文本形式存在