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(); } }