get(Redis::class); $couponTodayUsedIds = $redis->sMembers('coupon_'.date('Ymd').'_used_'.$userId); $currentTime = time(); $builder = Db::table('lanzu_coupon_receive as receive') ->join('lanzu_coupon as coupon', 'coupon.id', '=', 'receive.coupon_id', 'inner'); if (is_array($couponTodayUsedIds)&&!empty($couponTodayUsedIds)) { $builder->whereNotIn('coupon.id', $couponTodayUsedIds); } foreach ($storeTypeIds as $key => &$item) { $item = (string)$item; } if (!empty($storeTypeIds)) { $builder->whereJsonContains('coupon.storetype_ids', $storeTypeIds); } $builder->where(['receive.user_id' => $userId]) ->whereIn('receive.status', [0,1]) ->where('receive.number_remain', '>', 0) ->whereIn('coupon.type', [1,$type]) ->where('coupon.full_amount', '<=', $totalAmount) ->where('coupon.usable_start_time', '<=', $currentTime) ->where('coupon.usable_end_time', '>=', $currentTime) ->where('coupon.usable_number', '<=', Db::raw('receive.number_remain')); if ($marketId) { $builder->whereJsonContains('coupon.market_ids', [(string)$marketId]); } return $builder->orderByRaw('coupon.discounts DESC, coupon.full_amount DESC') ->get() ->toArray(); } /** * 用户未使用优惠券列表 */ public function getUnusedListByUser($userId,$page = 1,$pagesize = 5) { //查询可用优惠券 $builder = CouponRec::query()->join('lanzu_coupon', 'lanzu_coupon.id', '=', 'lanzu_coupon_receive.coupon_id') ->where([ ['lanzu_coupon_receive.user_id' ,'=', $userId], ['lanzu_coupon.usable_end_time' ,'>', time()], ['lanzu_coupon_receive.number_remain' ,'>', 0] ]); $builder = $builder->whereIn('lanzu_coupon_receive.status',[0,1]) ->select( 'lanzu_coupon.title', 'lanzu_coupon.discounts', 'lanzu_coupon.full_amount', 'lanzu_coupon.discount_type', 'lanzu_coupon.introduce', 'lanzu_coupon.usable_end_time', 'lanzu_coupon_receive.number', 'lanzu_coupon_receive.number_remain' ) ->orderBy('lanzu_coupon.weigh','desc'); $paginate = $builder->paginate($pagesize); $couponList = $paginate->toArray(); foreach ($couponList['data'] as $key => &$coupon) { //拼接满减文字提示 $coupon['full_amount_text'] = '满' . $coupon['full_amount'] . "可用"; //判断是折扣优惠券还是满减优惠券 if($coupon['discount_type'] == 1){ $coupon['discounts_text'] = '¥'.$coupon['discounts']; }elseif($coupon['discount_type'] == 2){ $coupon['discounts_text'] = floatval($coupon['discounts'])."折"; } } return ['has_more_pages' => $paginate->hasMorePages(), 'coupon_list' => $couponList['data']]; } /** * 用户已使用 */ public function getUsedListByUser($userId,$page = 1,$pagesize = 5) { //查询已使用优惠券 $builder = CouponRec::query()->join('lanzu_coupon', 'lanzu_coupon.id', '=', 'lanzu_coupon_receive.coupon_id') ->where('lanzu_coupon_receive.user_id' ,$userId) ->whereIn('lanzu_coupon_receive.status',[1,2]) ->select( 'lanzu_coupon.title', 'lanzu_coupon.discounts', 'lanzu_coupon.full_amount', 'lanzu_coupon.discount_type', 'lanzu_coupon.introduce', 'lanzu_coupon.usable_end_time', 'lanzu_coupon_receive.number', 'lanzu_coupon_receive.number_remain' ) ->orderBy('lanzu_coupon_receive.updated_at','desc'); $paginate = $builder->paginate($pagesize); $couponList = $paginate->toArray(); foreach ($couponList['data'] as $key => &$coupon) { //拼接满减文字提示 $coupon['full_amount_text'] = '满' . $coupon['full_amount'] . "可用"; //判断是折扣优惠券还是满减优惠券 if($coupon['discount_type'] == 1){ $coupon['discounts_text'] = '¥'.$coupon['discounts']; }elseif($coupon['discount_type'] == 2){ $coupon['discounts_text'] = floatval($coupon['discounts'])."折"; } } return ['has_more_pages' => $paginate->hasMorePages(), 'coupon_list' => $couponList['data']]; } /** * 用户已失效 */ public function getExpiredListByUser($userId,$page = 1,$pagesize = 5) { //查询失效优惠券 $builder = CouponRec::query()->join('lanzu_coupon', 'lanzu_coupon.id', '=', 'lanzu_coupon_receive.coupon_id') ->where('lanzu_coupon_receive.user_id',$userId) ->where(function ($query) { $query->where('lanzu_coupon.usable_end_time', '<', time()) ->orWhere('lanzu_coupon.status', '<>', 1); }) ->select( 'lanzu_coupon.title', 'lanzu_coupon.discounts', 'lanzu_coupon.full_amount', 'lanzu_coupon.discount_type', 'lanzu_coupon.introduce', 'lanzu_coupon.usable_end_time', 'lanzu_coupon_receive.number', 'lanzu_coupon_receive.number_remain' ) ->orderBy('lanzu_coupon.weigh','desc'); $paginate = $builder->paginate($pagesize); $couponList = $paginate->toArray(); foreach ($couponList['data'] as $key => &$coupon) { //拼接满减文字提示 $coupon['full_amount_text'] = '满' . $coupon['full_amount'] . "可用"; //判断是折扣优惠券还是满减优惠券 if($coupon['discount_type'] == 1){ $coupon['discounts_text'] = '¥'.$coupon['discounts']; }elseif($coupon['discount_type'] == 2){ $coupon['discounts_text'] = floatval($coupon['discounts'])."折"; } } return ['has_more_pages' => $paginate->hasMorePages(), 'coupon_list' => $couponList['data']]; } }