input('template_id'); /** * @var $user User */ // 获取当前登录用户 $user = auth()->user(); // 如果用户未登录,返回未授权响应 if (is_null($user)) { return responseJsonAsUnAuthorized('请先登录再领取优惠券'); } // 查找优惠券模板 $template = CouponTemplate::query()->find($templateId); // 如果模板不存在,返回无效优惠券响应 if (is_null($template)) { return responseJsonAsBadRequest('无效的优惠券'); } // 判断优惠券是否过期 $today = Carbon::today(); $endDate = Carbon::make($template->end_date); // 如果当前日期大于优惠券结束日期,返回过期响应 if ($today->gt($endDate)) { return responseJsonAsBadRequest('优惠券已过期'); } // 检查用户积分是否足够 if ($user->score_now < $template->score) { return responseJsonAsBadRequest("积分不足{$template->score},请先去获取积分"); } // 确保每个用户只能领取一张优惠券 if ($user->coupons()->where('template_id', $templateId)->exists()) { return responseJsonAsBadRequest('你已经领取过优惠券了'); } // 开始数据库事务 DB::beginTransaction(); try { // 用户减少积分 if ($template->score > 0) { $user->score_now -= $template->score; $user->save(); // 生成积分日志 $log = new ScoreLog(); $log->user_id = $user->getKey(); $log->description = "领取优惠券"; $log->score = -1 * $template->score; // 记录减少的积分 $log->save(); } // 创建用户优惠券记录 $coupon = new UserHasCoupon(); $coupon->template_id = $template->getKey(); $coupon->user_id = $user->getKey(); $coupon->title = $template->title; $coupon->amount = $template->amount; $coupon->full_amount = $template->full_amount; $coupon->start_date = $template->start_date; $coupon->end_date = $template->end_date; $coupon->save(); } catch (\Exception $e) { // 如果发生异常,回滚事务 DB::rollBack(); return responseJsonAsServerError('服务器异常,请稍后再试'); } // 提交事务 DB::commit(); // 返回成功响应 return responseJson(200, '领取成功'); } }