婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > 用PHP做了一個(gè)領(lǐng)取優(yōu)惠券活動(dòng)的示例代碼

用PHP做了一個(gè)領(lǐng)取優(yōu)惠券活動(dòng)的示例代碼

熱門標(biāo)簽:百度地圖標(biāo)注偏差 400電話蘭州申請(qǐng)請(qǐng) 百度地圖怎樣標(biāo)注圖標(biāo) 外呼系統(tǒng)能給企業(yè)帶來哪些好處 余姚電話機(jī)器人 電銷機(jī)器人問門薩維品牌my 咸寧銷售電銷機(jī)器人系統(tǒng) 廣東廣州在怎么申請(qǐng)400電話 開發(fā)地圖標(biāo)注類網(wǎng)站

業(yè)務(wù)需求

優(yōu)惠券活動(dòng),具體還是要根據(jù)自己的需求。以下是最近實(shí)現(xiàn)的優(yōu)惠券活動(dòng),主要的業(yè)務(wù)需求:根據(jù)后端設(shè)置優(yōu)惠券模板,用戶類型設(shè)置,優(yōu)惠券活動(dòng)的開始與結(jié)束時(shí)間,最后生成不同的優(yōu)惠券活動(dòng)鏈接。

代碼環(huán)境

源碼主要laravel5.8,一整個(gè)活動(dòng)要貼的代碼很多,下面主要貼核心代碼,僅供參考。主要還是要根據(jù)自己的業(yè)務(wù)需求來實(shí)現(xiàn)功能吧。

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

前端需要做的設(shè)置與限制:

1 判斷優(yōu)惠券是否存在或者停用
2 判斷活動(dòng)開始時(shí)間與優(yōu)惠券開始時(shí)間

接著領(lǐng)取活動(dòng)優(yōu)惠券,需要判斷以下情況:
1 活動(dòng)已結(jié)束
2 活動(dòng)為開始時(shí)
3 活動(dòng)為新用戶領(lǐng)取,而領(lǐng)取的用戶是老用戶
4 活動(dòng)為老用戶領(lǐng)取,而領(lǐng)取的用戶是新用戶
5 優(yōu)惠券是否領(lǐng)取完
6 已領(lǐng)取過優(yōu)惠券提示
7 領(lǐng)取成功

下面核心代碼實(shí)現(xiàn)

/**
 * Function:優(yōu)惠券領(lǐng)取處理
 * Author:cyw0413
 * @param $params
 * @return array
 * @throws \Exception
 */
public function doCoupon($params)
{
  $activity_id = $params['activity_id'];
  if(!$params){
    throw new \Exception("參數(shù)錯(cuò)誤!");
  }

  $preg_phone = '/^1[34578]\d{9}$/ims';
  $is_mobile = preg_match ($preg_phone, $params['mobile']);
  if ($is_mobile == 0) {
    throw new \Exception("手機(jī)號(hào)碼不正確!");
  }

  //隱藏手機(jī)號(hào)碼中間4位
  $str_mobile = substr_replace($params['mobile'],'****',3,4);

  $activity = $this->find($activity_id);
  if(empty($activity)){
    throw new \Exception("不存在此活動(dòng)");
  }

  $activity_link = $activity->activityLink->where('coupon_status',0); //只選擇不停用的優(yōu)惠券
  if(count($activity_link) = 0){
    throw new \Exception("優(yōu)惠券不存在或者已經(jīng)停用");

  }else{

    //查找注冊(cè)用戶ID
    $showUser = $this->showUser($params['mobile']);
    //主要是過濾掉領(lǐng)取優(yōu)惠券為0的,用laravel的同學(xué)注意看看
    $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');  //去除優(yōu)惠券剩余數(shù)量為0,或者領(lǐng)取優(yōu)惠券數(shù)量-剩余數(shù)量 > 0

  }
  //判斷活動(dòng)開始時(shí)間與優(yōu)惠券開始時(shí)間
  $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("優(yōu)惠券領(lǐng)取時(shí)間未開始,暫不可領(lǐng)取");
  }

  //領(lǐng)取活動(dòng)有以下幾種情況
  //1: 活動(dòng)已結(jié)束
  if($activity['end_time']  date("Y-m-d H:i:s") || $activity['status'] == 1){
    $result = [
      'code' => 1,
    ];
    return $result;
  }

  //6 活動(dòng)為開始時(shí)
  if($activity['start_time'] > date("Y-m-d H:i:s") || $activity['status'] == 1){
    $result = [
      'code' => 6,
    ];
    return $result;

  }

  $checkUser = $this->haveUser($params['mobile']); //檢查是新用戶,還是老用戶 根據(jù)自己的業(yè)務(wù)需求做,這個(gè)方法就不貼了
  //2: 活動(dòng)為新用戶領(lǐng)取,而領(lǐng)取的用戶是老用戶
  if($activity['user_type'] == 1  !empty($checkUser)){
    $result = [
      'code' => 2,
    ];
    return $result;
  }

  //3:活動(dòng)為老用戶領(lǐng)取,而領(lǐng)取的用戶是新用戶
  if($activity['user_type']==2  empty($checkUser)){
    $result = [
      'code' => 3,
    ];
    return $result;
  }


  //4:優(yōu)惠券是否領(lǐng)取完
  $coupon = $this->getCouponExpire($collection_coupon,$params['mobile']); //這里提示有一個(gè)優(yōu)惠券列表,根據(jù)自己的業(yè)務(wù)需求做,這個(gè)方法就不貼了
  //return $coupon;
  if($coupon == 1){
    $result = [
      'code' => 4,
    ];
    return $result;
  }

  //5:已領(lǐng)取過優(yōu)惠券提示
  $userCoupon = '';
  $userRate = '';
  if(!empty($checkUser)){
    //user存在則為老用戶,再檢查是否領(lǐng)取過
    $userCoupon = $this->getUserCoupon($collection_coupon,$checkUser['user_id']);
    $userRate = $this->getUserCouponRate($checkUser['user_id'],$activity['activity_id']);
  }else{
    //新用戶,檢查是否注冊(cè)過
    $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:領(lǐng)取成功
  //如果活動(dòng)規(guī)定是新老用戶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;
  }


}

用戶領(lǐng)取優(yōu)惠券并發(fā)放優(yōu)惠券

/**
 * Function:用戶領(lǐng)取活動(dòng)
 * Author:cyw0413
 * @param $user_type
 */
public function getCouponSuccess($user_type,$user,$coupon,$mobile)
{
  if(count($coupon) > 0){

    switch ($user_type){
      case 1:
        //新用戶領(lǐng)取,如果從來沒注冊(cè)過就要新增用戶
        $res = $this->addUser($mobile,$coupon); 
        return [
          'result' => $res,
          'status' => 200
        ];
        break;
      case 2:
        //老用戶領(lǐng)取
        $res = $this->insertUserCoupon($user,$coupon);
        return [
          'result' => $res,
          'status' => 200
        ];
        break;
      default:
        //新老用戶領(lǐng)取,判斷是新用戶還是老用戶,這里的$user是有無配送單,有則為老用戶;
        if(empty($user)){
          $res = $this->addUser($mobile,$coupon);
        }else{

          $res = $this->insertUserCoupon($user,$coupon); //老用戶,直接發(fā)放優(yōu)惠券
        }
        return [
          'result' => $res,
          'status' => 200
        ];
        break;
    }
  }else{
    throw new \Exception("優(yōu)惠券不存在或者已經(jīng)停用");
  }


}

領(lǐng)取成功,則發(fā)放優(yōu)惠券

/**
 * Function:發(fā)放優(yōu)惠券
 * 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("優(yōu)惠券未發(fā)放,暫不可領(lǐng)取");
    }

    //發(fā)放優(yōu)惠券,有多少張就添加多少張,這里扣除優(yōu)惠券時(shí),主要用不同的coupon_sn來區(qū)別
    $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);
    }

    //扣除相應(yīng)的優(yōu)惠券數(shù)量,這里用到了鎖表,防止并發(fā)時(shí),優(yōu)惠券為-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("優(yōu)惠券剩余數(shù)量不夠扣減");
      }

    }


    $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;
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Android 自定義View之邊緣凹凸的優(yōu)惠券效果的開發(fā)過程
  • 優(yōu)惠券優(yōu)惠的思路以及實(shí)踐
  • 使用Nopcommerce為商城添加滿XX減XX優(yōu)惠券功能

標(biāo)簽:重慶 十堰 銅陵 巴彥淖爾 衡陽 鷹潭 臨沂 麗江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用PHP做了一個(gè)領(lǐng)取優(yōu)惠券活動(dòng)的示例代碼》,本文關(guān)鍵詞  用,PHP,做了,一個(gè),領(lǐng)取,優(yōu)惠券,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用PHP做了一個(gè)領(lǐng)取優(yōu)惠券活動(dòng)的示例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于用PHP做了一個(gè)領(lǐng)取優(yōu)惠券活動(dòng)的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲一区二区三区四区在线观看 | 不卡视频在线观看| 制服丝袜国产精品| 日本中文字幕一区二区视频| 国产精品久99| 欧美日韩成人一区| 中文字幕中文在线不卡住| 成人高清视频免费观看| 中文字幕va一区二区三区| 国产精品一区2区| 欧美精品一区二区三| 国产又粗又猛又爽又黄91精品| 国产一区二区视频在线| 欧美一区二区三区思思人| 99久久综合色| 亚洲日本va午夜在线影院| 国产一区福利在线| 日本va欧美va瓶| 久久亚洲精精品中文字幕早川悠里| 欧美日韩一区 二区 三区 久久精品| 麻豆91精品视频| 亚洲福利一区二区| 久久美女艺术照精彩视频福利播放| 欧美剧情片在线观看| 成人aaaa免费全部观看| 首页综合国产亚洲丝袜| 亚洲午夜免费福利视频| 日韩视频永久免费| 日韩女优制服丝袜电影| 欧美性一二三区| 欧美群妇大交群中文字幕| 国产xxx精品视频大全| 国产成人丝袜美腿| 老司机精品视频在线| 亚洲精选视频在线| 国产精品久久久久久久岛一牛影视 | 国产视频一区不卡| 国产丝袜欧美中文另类| 日韩欧美一区在线观看| 精品少妇一区二区三区在线视频| 丁香亚洲综合激情啪啪综合| 国产午夜精品一区二区三区嫩草 | 日韩经典中文字幕一区| 韩国三级电影一区二区| 免费不卡在线视频| 久久不见久久见免费视频1| 日韩电影网1区2区| 色综合天天综合| 欧美剧在线免费观看网站 | 热久久免费视频| 性欧美疯狂xxxxbbbb| 一区二区免费在线播放| 久久精品男人天堂av| 久久只精品国产| 久久毛片高清国产| 2021久久国产精品不只是精品| 91精品国产入口| 欧美精品一区视频| 久久麻豆一区二区| 亚洲国产精品ⅴa在线观看| 国产欧美精品国产国产专区| 中文字幕精品一区二区三区精品| 国产三级精品在线| 国产精品素人一区二区| 亚洲天堂精品在线观看| 亚洲一区二区五区| 国产高清成人在线| 99精品国产视频| 91黄色激情网站| 制服丝袜国产精品| 久久午夜免费电影| 国产女主播在线一区二区| 亚洲美女淫视频| 午夜精品久久久久久久| 免费精品视频在线| 国产精品99久久久久久久女警| 国产成人自拍在线| 色噜噜夜夜夜综合网| 久久久噜噜噜久噜久久综合| 国产精品国产三级国产专播品爱网 | 制服.丝袜.亚洲.中文.综合| 欧美一个色资源| 欧美日韩亚洲国产综合| 中文av字幕一区| 亚洲国产视频一区二区| 91在线精品一区二区| 日韩欧美激情一区| 五月天中文字幕一区二区| 激情综合色丁香一区二区| 欧洲在线/亚洲| 久久免费视频色| 久久精品噜噜噜成人88aⅴ| 高清日韩电视剧大全免费| 91精品一区二区三区在线观看| 久久综合五月天婷婷伊人| 麻豆视频一区二区| 成人精品亚洲人成在线| 欧美剧情片在线观看| 中文字幕日韩精品一区| 国产九色精品成人porny| 91黄色免费看| 一区二区三区在线影院| 国产在线视频一区二区三区| 日韩精品自拍偷拍| 午夜久久久久久久久 | 99re热视频精品| 亚洲激情第一区| 91麻豆6部合集magnet| 久久久久免费观看| 亚洲大型综合色站| 成人性视频网站| 亚洲精品一区二区三区四区高清 | 国产综合成人久久大片91| 精品少妇一区二区三区在线视频| 亚洲一二三级电影| 欧美一区午夜视频在线观看| 一区二区三区中文字幕在线观看| 色中色一区二区| **网站欧美大片在线观看| 色欲综合视频天天天| 亚洲日本护士毛茸茸| 欧美日韩一区二区三区免费看 | 91丨九色丨黑人外教| 国产欧美日韩在线看| 成人免费视频app| 国产女人18水真多18精品一级做| 久久爱www久久做| 日韩欧美国产精品| 久久伊99综合婷婷久久伊| 日日夜夜精品视频天天综合网| 一本大道久久精品懂色aⅴ| 国产欧美日韩三级| 国产美女在线观看一区| 日韩三级中文字幕| 美女看a上一区| 欧美日韩aaaaaa| 国产精品久久久久久户外露出| 成人av手机在线观看| 中文字幕免费不卡| 成人美女视频在线观看| 91精品欧美一区二区三区综合在| 亚洲电影在线免费观看| 欧美精品一级二级| 青青草原综合久久大伊人精品优势| 51精品秘密在线观看| 美女脱光内衣内裤视频久久网站| 精品久久久网站| 国产91精品久久久久久久网曝门 | 亚洲精品一区二区三区影院 | 欧美在线免费观看亚洲| 亚洲成a人在线观看| 91精品国产乱码久久蜜臀| 久久成人综合网| 久久精品人人做| 色综合久久天天综合网| 3d成人动漫网站| 奇米影视7777精品一区二区| 亚洲视频免费观看| 欧美三级韩国三级日本一级| 久久er99精品| 欧美三级日韩三级| 国产成人一区在线| 亚洲免费在线看| 欧美精品丝袜久久久中文字幕| 久久电影网电视剧免费观看| 亚洲欧美在线高清| 91麻豆精品国产91| www.久久精品| 久久99热狠狠色一区二区| 中文字幕在线一区免费| 51精品国自产在线| 91最新地址在线播放| 青娱乐精品在线视频| 欧美激情一区三区| 欧美日韩精品免费| 99久久久免费精品国产一区二区| 1区2区3区精品视频| 成人av在线网站| 美女精品一区二区| 中文字幕亚洲综合久久菠萝蜜| 欧美三日本三级三级在线播放| 粉嫩av一区二区三区| 麻豆精品久久精品色综合| 日本aⅴ免费视频一区二区三区| 亚洲天堂免费看| 一区二区三区中文免费| 国产精品久线在线观看| 国产精品超碰97尤物18| 国产三级久久久| 亚洲激情图片一区| 亚洲婷婷在线视频| 亚洲一级二级三级在线免费观看| 国产精品美女久久久久久久久| 中文字幕中文字幕中文字幕亚洲无线| 精品电影一区二区三区| 欧美精品一区二区三区四区 | 国产91色综合久久免费分享| 99riav一区二区三区| 国产精品1024| 国产一区二三区|