业务需求
优惠券活动,具体还是要根据自己的需求。以下是最近实现的优惠券活动,主要的业务需求:根据后端设置优惠券模板,用户类型设置,优惠券活动的开始与结束时间,最后生成不同的优惠券活动链接。
代码环境:
源码主要laravel5.8,一整个活动要贴的代码很多,下面主要贴核心代码,仅供参考。主要还是要根据自己的业务需求来实现功能吧。
以下是后端截图,做成模块化
前端需要做的设置与限制:
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->getCou