国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:10:07
字體:
供稿:網(wǎng)友

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

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

代碼環(huán)境

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

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

PHP,優(yōu)惠券,代碼

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

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

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

下面核心代碼實現(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ù)錯誤!");  }  $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); //只選擇不停用的優(yōu)惠券  if(count($activity_link) <= 0){    throw new /Exception("優(yōu)惠券不存在或者已經(jīng)停用");  }else{    //查找注冊用戶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  }  //判斷活動開始時間與優(yōu)惠券開始時間  $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)取時間未開始,暫不可領(lǐng)取");  }  //領(lǐng)取活動有以下幾種情況  //1: 活動已結(jié)束  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']); //檢查是新用戶,還是老用戶 根據(jù)自己的業(yè)務(wù)需求做,這個方法就不貼了  //2: 活動為新用戶領(lǐng)取,而領(lǐng)取的用戶是老用戶  if($activity['user_type'] == 1 && !empty($checkUser)){    $result = [      'code' => 2,    ];    return $result;  }  //3:活動為老用戶領(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']); //這里提示有一個優(yōu)惠券列表,根據(jù)自己的業(yè)務(wù)需求做,這個方法就不貼了  //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{    //新用戶,檢查是否注冊過    $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)取成功  //如果活動規(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)取活動 * Author:cyw0413 * @param $user_type */public function getCouponSuccess($user_type,$user,$coupon,$mobile){  if(count($coupon) > 0){    switch ($user_type){      case 1:        //新用戶領(lǐng)取,如果從來沒注冊過就要新增用戶        $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)惠券時,主要用不同的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ā)時,優(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)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


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

圖片精選

主站蜘蛛池模板: 十堰市| 濮阳市| 庄浪县| 秦安县| 临泉县| 杭州市| 兴安县| 博客| 怀宁县| 武夷山市| 仁化县| 都安| 宜州市| 济宁市| 眉山市| 丹寨县| 吴江市| 海林市| 尚义县| 苗栗县| 襄樊市| 曲麻莱县| 祁阳县| 新丰县| 西林县| 六盘水市| 隆安县| 锡林浩特市| 上高县| 黑水县| 岳普湖县| 收藏| 从化市| 洛阳市| 屯昌县| 甘南县| 广安市| 潼关县| 鲜城| 岚皋县| 和田县|