* @license GPL https://xxx.com * @link https://xxx.com * @ctime: 2020/4/7 9:40 */ namespace App\Repositories; use App\Models\Coupon; use App\Models\CouponsUserBag; use Carbon\Carbon; use Illuminate\Support\Facades\Log; class CouponUserBagsRepository extends BaseRepository { public $couponRepository; public $userRepository; public function __construct(CouponsUserBag $couponsUserBag, CouponRepository $couponRepository, UserRepository $userRepository) { $this->model = $couponsUserBag; $this->couponRepository = $couponRepository; $this->userRepository = $userRepository; } public function getCouponsByUserIdAndStatus($user_id, $status, $order_type = 3) { // 查询前先更新一下失效的 $this->updateCouponsStatus($user_id); if ($order_type == $this->model::ORDER_TYPE_NORMAL) { $order_type_arr = [ $this->model::ORDER_TYPE_NORMAL, $this->model::ORDER_TYPE_ALL ]; } elseif ($order_type == $this->model::ORDER_TYPE_RENT) { $order_type_arr = [ $this->model::ORDER_TYPE_RENT, $this->model::ORDER_TYPE_ALL ]; } elseif ($order_type == $this->model::ORDER_TYPE_ALL) { $order_type_arr = [ $this->model::ORDER_TYPE_RENT, $this->model::ORDER_TYPE_NORMAL, $this->model::ORDER_TYPE_ALL ]; } return $this->model->query() ->where('user_id', $user_id) ->where('status', $status) ->whereIn('order_type', $order_type_arr) ->where('created_at', '>', Carbon::now()->subMonths(3)) ->get(); } public function getCouponByUserIdAndID($user_id, $id) { return $this->model->query() ->where('id', $id) ->where('user_id', $user_id) ->where('status', CouponsUserBag::STATUS_OK) ->first(); } /** * updateCouponsStatus 更新优惠券失效 * * @param CouponsUserBag $coupon * @return void * @author Fx * */ public function updateCouponsStatus($user_id) { $this->model->query()->where('user_id', $user_id)->where('status', CouponsUserBag::STATUS_OK)->where('valid_end_time', '<', Carbon::now()->toDateTimeString())->update(['status' => CouponsUserBag::STATUS_NO]); // if (count($coupon) !== 0) { // foreach ($coupon as $v) { // if ($v->valid_type == Coupon::VALID_TYPE_ABSOLUTELY) { // // 绝对时效 // $valid_start_time_diff = Carbon::now()->diffInSeconds(Carbon::make($v->valid_start_time), false); //小于等于0有效 大于0无效 // $valid_end_time_diff = Carbon::now()->diffInSeconds(Carbon::make($v->valid_end_time), false); //大于等于0有效 小于0无效 // if ($valid_start_time_diff > 0 || $valid_end_time_diff < 0) { // $v->status = Coupon::STATUS_NO; // $v->save(); // } // // } // if ($v->valid_type == Coupon::VALID_TYPE_RELATIVE) { // //相对失效 // $overdue_time = Carbon::parse($v->valid_end_time); // $overdue_time_diff = Carbon::now()->diffInSeconds($overdue_time, false); // 大等于0有效 // if ($overdue_time_diff < 0) { // $v->status = Coupon::STATUS_NO; // $v->save(); // } // } // } // } } /** * 邀请新用户赠送优惠券 inviteNewRewardCoupon * * @param $coupon_id * @param $user_id * @return void * @author Fx * */ public function inviteNewRewardCoupon($coupon_id, $user_id, $coupon_num) { $users = $this->userRepository->byIdGetModel($user_id); $coupon = $this->couponRepository->byIdGetModel($coupon_id); $data = [ 'coupon_id' => $coupon_id, 'type' => CouponsUserBag::TYPE_INVITE_NEW_GIVE, 'user_id' => $users->id, 'coupons_data' => $coupon->toArray(), 'status' => CouponsUserBag::STATUS_OK, 'valid_type' => $coupon->valid_type, 'valid_start_time' => $coupon->valid_start_time, 'valid_end_time' => $coupon->valid_end_time, 'valid_days' => $coupon->valid_days, 'grant_start_at' => $coupon->grant_start_at, 'grant_end_at' => $coupon->grant_end_at, 'give_admin_id' => 0, 'order_type' => $coupon->order_type, 'merchant_id' => merchant_id() ]; for ($coupon_num; $coupon_num > 0; $coupon_num--) { $this->model->create($data); $coupon->increment('take_count'); } } /** * 根据用户获取用户免押金卡 * @param $user_id * Author: Mead */ public function isExistsByUserIdGetDepositFree($user_id) { return $this->model->query()->where('user_id', $user_id)->where('type', Coupon::TYPE_DEPOSIT_FREE)->where('status', CouponsUserBag::STATUS_OK)->exists(); } }