|
|
<?php
namespace App\Service\v3\Implementations;
use App\Model\ShopCar;use App\Model\v3\Coupon;use App\Model\v3\CouponRec;use App\Service\v3\Interfaces\CouponRecServiceInterface;use Hyperf\DbConnection\Db;use Hyperf\Redis\Redis;use Hyperf\Utils\ApplicationContext;
class CouponRecService implements CouponRecServiceInterface{
public function do() { // TODO: Implement do() method.
}
public function check() { // TODO: Implement check() method.
}
public function undo() { // TODO: Implement undo() method.
}
/** * 获取当前订单可使用的优惠券 * @param $totalAmount * @param $userId * @param $marketId * @param $type * @param $storeTypeIds * @return array */ public function allForOrderOlAvailable($totalAmount, $userId, $marketId, $type, $storeTypeIds = []) { // 用户今日使用过的优惠券
$redis = ApplicationContext::getContainer()->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(); }}
|