亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

用PHP做了一個領取優惠券活動的示例代碼

2024-05-05 00:10:07
字體:
來源:轉載
供稿:網友

業務需求

優惠券活動,具體還是要根據自己的需求。以下是最近實現的優惠券活動,主要的業務需求:根據后端設置優惠券模板,用戶類型設置,優惠券活動的開始與結束時間,最后生成不同的優惠券活動鏈接。

代碼環境

源碼主要laravel5.8,一整個活動要貼的代碼很多,下面主要貼核心代碼,僅供參考。主要還是要根據自己的業務需求來實現功能吧。

以下是后端截圖,做成模塊化

PHP,優惠券,代碼

前端需要做的設置與限制:

1 判斷優惠券是否存在或者停用
2 判斷活動開始時間與優惠券開始時間

接著領取活動優惠券,需要判斷以下情況:
1 活動已結束
2 活動為開始時
3 活動為新用戶領取,而領取的用戶是老用戶
4 活動為老用戶領取,而領取的用戶是新用戶
5 優惠券是否領取完
6 已領取過優惠券提示
7 領取成功

下面核心代碼實現

/** * Function:優惠券領取處理 * Author:cyw0413 * @param $params * @return array * @throws /Exception */public function doCoupon($params){  $activity_id = $params['activity_id'];  if(!$params){    throw new /Exception("參數錯誤!");  }  $preg_phone = '/^1[34578]/d{9}$/ims';  $is_mobile = preg_match ($preg_phone, $params['mobile']);  if ($is_mobile == 0) {    throw new /Exception("手機號碼不正確!");  }  //隱藏手機號碼中間4位  $str_mobile = substr_replace($params['mobile'],'****',3,4);  $activity = $this->find($activity_id);  if(empty($activity)){    throw new /Exception("不存在此活動");  }  $activity_link = $activity->activityLink->where('coupon_status',0); //只選擇不停用的優惠券  if(count($activity_link) <= 0){    throw new /Exception("優惠券不存在或者已經停用");  }else{    //查找注冊用戶ID    $showUser = $this->showUser($params['mobile']);    //主要是過濾掉領取優惠券為0的,用laravel的同學注意看看    $detail = $activity_link->each(function($item,$index) use ($showUser) {      $diffCouponQuantity = $this->diffCouponQuantity($item['config_id'],$item['quantity'],$item['activity_id'],$showUser);      $item->title = $this->getCouponName($item['config_id'])['name'];      $item->number = $item['quantity'];      $item->msg  = $diffCouponQuantity ['msg'];      $item->diff   = $diffCouponQuantity ['diff'];      $item->code   = $diffCouponQuantity ['code'];    })->toArray();    if(count($detail) == 1){      foreach($detail as $val){        if($val['diff'] == 1 && $val['code'] == '400'){          throw new /Exception($detail[0]['msg']);        }      }    }    $collection_coupon = collect($detail);    $collection_coupon = $collection_coupon->where('diff', '<=' ,'0');  //去除優惠券剩余數量為0,或者領取優惠券數量-剩余數量 > 0  }  //判斷活動開始時間與優惠券開始時間  $act_coupon = ActivityCouponBaseModel::where('activity_id',$activity['activity_id'])->first();  $check_time = $this-> checkCouponTime($act_coupon['start_time'],$activity_link);  if($check_time == 'error'){    throw new /Exception("優惠券領取時間未開始,暫不可領取");  }  //領取活動有以下幾種情況  //1: 活動已結束  if($activity['end_time'] < date("Y-m-d H:i:s") || $activity['status'] == 1){    $result = [      'code' => 1,    ];    return $result;  }  //6 活動為開始時  if($activity['start_time'] > date("Y-m-d H:i:s") || $activity['status'] == 1){    $result = [      'code' => 6,    ];    return $result;  }  $checkUser = $this->haveUser($params['mobile']); //檢查是新用戶,還是老用戶 根據自己的業務需求做,這個方法就不貼了  //2: 活動為新用戶領取,而領取的用戶是老用戶  if($activity['user_type'] == 1 && !empty($checkUser)){    $result = [      'code' => 2,    ];    return $result;  }  //3:活動為老用戶領取,而領取的用戶是新用戶  if($activity['user_type']==2 && empty($checkUser)){    $result = [      'code' => 3,    ];    return $result;  }  //4:優惠券是否領取完  $coupon = $this->getCouponExpire($collection_coupon,$params['mobile']); //這里提示有一個優惠券列表,根據自己的業務需求做,這個方法就不貼了  //return $coupon;  if($coupon == 1){    $result = [      'code' => 4,    ];    return $result;  }  //5:已領取過優惠券提示  $userCoupon = '';  $userRate = '';  if(!empty($checkUser)){    //user存在則為老用戶,再檢查是否領取過    $userCoupon = $this->getUserCoupon($collection_coupon,$checkUser['user_id']);    $userRate = $this->getUserCouponRate($checkUser['user_id'],$activity['activity_id']);  }else{    //新用戶,檢查是否注冊過    $var_user = UserBaseModel::where('user_name',$params['mobile'])->first();    if(!empty($var_user)){      $userCoupon = $this->getUserCoupon($collection_coupon,$var_user['user_id']);      $userRate = $this->getUserCouponRate($var_user['user_id'],$activity['activity_id']);    }  }  //return $userRate;  if($userCoupon == 1){    $result = [      'code' => 5,      'phone'=> $str_mobile,      'coupon' => $userRate,      'is_get' => false,    ];    return $result;  }  //5:領取成功  //如果活動規定是新老用戶0,新用戶1,老用戶2  $getCouponSuccess = $this->getCouponSuccess($activity['user_type'],$checkUser,$collection_coupon,$params['mobile']);  //return $getCouponSuccess;  if($getCouponSuccess['status'] == 200){    $result = [      'code' => 5,      'phone'=> $str_mobile,      'coupon' => $getCouponSuccess['result'][0],      'is_get' => true,    ];    return $result;  }}

用戶領取優惠券并發放優惠券

/** * Function:用戶領取活動 * Author:cyw0413 * @param $user_type */public function getCouponSuccess($user_type,$user,$coupon,$mobile){  if(count($coupon) > 0){    switch ($user_type){      case 1:        //新用戶領取,如果從來沒注冊過就要新增用戶        $res = $this->addUser($mobile,$coupon);         return [          'result' => $res,          'status' => 200        ];        break;      case 2:        //老用戶領取        $res = $this->insertUserCoupon($user,$coupon);        return [          'result' => $res,          'status' => 200        ];        break;      default:        //新老用戶領取,判斷是新用戶還是老用戶,這里的$user是有無配送單,有則為老用戶;        if(empty($user)){          $res = $this->addUser($mobile,$coupon);        }else{          $res = $this->insertUserCoupon($user,$coupon); //老用戶,直接發放優惠券        }        return [          'result' => $res,          'status' => 200        ];        break;    }  }else{    throw new /Exception("優惠券不存在或者已經停用");  }}

領取成功,則發放優惠券

/** * Function:發放優惠券 * Author:cyw0413 * @param $user * @param $coupon */public function insertUserCoupon($user,$coupon){  $relate = [];  foreach($coupon as $item){    $res = CouponConfigSendBaseModel::where([      'config_id'=>$item['config_id'],      'status'  => 0,    ])->first();    if(empty($res) || (!empty($res) && $res['is_send'] == 0) ){      throw new /Exception("優惠券未發放,暫不可領取");    }    //發放優惠券,有多少張就添加多少張,這里扣除優惠券時,主要用不同的coupon_sn來區別    $onlyCoupon = $this->getCouponName($item['config_id']);    if ($onlyCoupon['expire_type'] == 0) {      $start_time = $onlyCoupon['expire_start_time'];      $end_time = $onlyCoupon['expire_end_time'];    } else {      $start_time = date('Y-m-d H:i:s');      $end_time = date('Y-m-d H:i:s', time()+86400*$onlyCoupon['expire_type']);    }    $result = [      'user_id'  => $user['user_id'],      'config_id' => $item['config_id'],      'name'   => $onlyCoupon['name'],      'get_type' => $onlyCoupon['get_type'],      'amount'  => $onlyCoupon['amount'],      'require_price' => $onlyCoupon['require_price'],      'status'    => 1,      'start_time'  => $start_time,      'end_time'   => $end_time,    ];    for($i=0; $i < $item['quantity'];$i++){      $result['coupon_sn'] = 'B'.mt_rand(1, 10000) . strtoupper(uniqid(mt_rand(1, 10000)));      $userCoupon = UserCouponBaseModel::create($result);    }    //扣除相應的優惠券數量,這里用到了鎖表,防止并發時,優惠券為-1    $couponConfig = CouponConfigBaseModel::where('config_id',$item['config_id'])->lockForUpdate()->first();    if($couponConfig->left_quantity > 0 ){      if($couponConfig->left_quantity >= $item['quantity']){        $couponConfig->left_quantity = $couponConfig->left_quantity-$item['quantity'];        $couponConfig->save();      }else{        throw new /Exception("優惠券剩余數量不夠扣減");      }    }    $relate = [      'coupon_id' => $userCoupon->coupon_id,      'user_id'  => $user['user_id'],      'config_id' => $item['config_id'],      'activity_id' => $item['activity_id']    ];    ActivityCouponUserRelateBaseModel::create($relate);    $relate[] = $this->getUserCouponRate($user['user_id'],$item['activity_id']);  }  return $relate;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色七七影院综合| 国产精品白丝jk喷水视频一区| 欲色天天网综合久久| 北条麻妃一区二区在线观看| 久久理论片午夜琪琪电影网| 国产精品狼人色视频一区| 欧美猛交ⅹxxx乱大交视频| 国产欧美久久一区二区| 午夜精品久久久久久久男人的天堂| 国产精品视频白浆免费视频| 在线观看91久久久久久| 亚洲最大福利视频网站| 亚洲国模精品私拍| 亚洲视频999| 九九九热精品免费视频观看网站| 国产精品免费一区二区三区都可以| 中文字幕少妇一区二区三区| 欧美激情视频网址| 久久精品中文字幕| 国产深夜精品福利| 欧美激情综合色综合啪啪五月| 亚洲精品日韩丝袜精品| 亚洲网站在线观看| 国产欧美一区二区三区久久| 中文字幕欧美日韩va免费视频| 97涩涩爰在线观看亚洲| 国内精品一区二区三区| 久久久久久久久久国产精品| 亚洲精品98久久久久久中文字幕| 色综合五月天导航| 亚洲福利视频网| 热re91久久精品国99热蜜臀| 色系列之999| 国产精品影片在线观看| 欧美性猛交xxxx乱大交| 国产视频久久久| 亚洲国产中文字幕久久网| 欧美激情视频免费观看| 亚洲国产福利在线| 久久久久久久久中文字幕| 九九久久综合网站| 在线播放日韩专区| 久久久国产精品亚洲一区| 国产精品91久久| 精品国产一区二区三区久久狼5月| 国产日本欧美在线观看| 日韩av一卡二卡| 国产精品旅馆在线| 在线午夜精品自拍| 亚洲视频综合网| 亚洲丁香婷深爱综合| 最近2019年日本中文免费字幕| 国产精品亚洲片夜色在线| 日韩成人免费视频| 九九热这里只有精品免费看| 国产精品久久久久久久天堂| 亚洲精品日韩丝袜精品| 国产va免费精品高清在线| 亚洲va久久久噜噜噜| 欧美在线视频网| 成人免费观看49www在线观看| 色噜噜狠狠色综合网图区| 久久91超碰青草是什么| 韩日精品中文字幕| www.日韩不卡电影av| 日韩最新中文字幕电影免费看| 亚洲аv电影天堂网| 国产999视频| 中文字幕一区电影| 51ⅴ精品国产91久久久久久| 久久久久久久久久久91| 欧美一乱一性一交一视频| 亚洲福利视频网站| 日韩三级影视基地| 欧洲中文字幕国产精品| 亚洲国产精品va在线观看黑人| 国产欧美日韩免费| 久久精品久久久久久国产 免费| 欧美成人性生活| 亚洲第一综合天堂另类专| 色偷偷偷亚洲综合网另类| 韩曰欧美视频免费观看| 中文字幕在线国产精品| 日韩精品视频在线免费观看| 亚洲欧洲高清在线| 亚洲一区二区三区乱码aⅴ| 精品国产欧美一区二区五十路| 欧美在线观看日本一区| zzjj国产精品一区二区| 久久久亚洲欧洲日产国码aⅴ| 91免费国产视频| 91国产精品91| 91精品视频网站| 国产精品三级久久久久久电影| 国产精品91在线| xxxx欧美18另类的高清| 91九色精品视频| 日韩经典第一页| 九九热精品视频| 91免费看片网站| 在线国产精品播放| 久久躁日日躁aaaaxxxx| 欧美精品久久久久| 亚洲欧洲日本专区| 成人高清视频观看www| 97福利一区二区| 国产日韩中文字幕| 日本精品视频在线| 91免费版网站入口| 日韩中文字幕不卡视频| 国产成人高清激情视频在线观看| 成人黄色影片在线| 亚洲精品国产综合区久久久久久久| 在线电影av不卡网址| 亚洲品质视频自拍网| 中文字幕日韩有码| 神马久久久久久| 久久香蕉国产线看观看网| 亚洲品质视频自拍网| 在线日韩日本国产亚洲| 综合激情国产一区| 欧美亚洲成人网| 久久久久久久999精品视频| 一本色道久久综合亚洲精品小说| 91精品免费视频| 国产精品久久久久久久av大片| 亚洲免费伊人电影在线观看av| 91理论片午午论夜理片久久| 国产精品成人av性教育| 欧美成人精品三级在线观看| 欧美麻豆久久久久久中文| 91中文精品字幕在线视频| 国产狼人综合免费视频| 丝袜亚洲欧美日韩综合| 日韩性xxxx爱| 亚洲天堂视频在线观看| 日本aⅴ大伊香蕉精品视频| 欧美一级免费看| 国产成人高潮免费观看精品| 欧美激情视频在线观看| 久久久免费在线观看| 亚洲国产精品资源| 日本欧美在线视频| 色综合视频一区中文字幕| 97在线免费观看| 久久精品视频在线播放| 欧美成人精品三级在线观看| 国产精品专区第二| 91麻豆国产语对白在线观看| 亚洲香蕉在线观看| 国产精品亚洲аv天堂网| 国产精品劲爆视频| 久久精品国产久精国产一老狼| 91精品国产沙发| 久久久久久久久久久免费精品| 97色在线播放视频| 亚洲综合最新在线| 成人免费高清完整版在线观看| 日韩电影大全免费观看2023年上| 中文字幕久热精品在线视频| 日韩高清中文字幕| 免费99精品国产自在在线| 92国产精品久久久久首页| 午夜精品久久久99热福利|