toDateTimeString(); $activity = SubscribeActivity::query()->whereDate('end_time', '<', $today)->where('status', 1)->first(); if (!blank($activity)) { $params = $activity['params']; $items = UserSubscribeRecord::query() ->whereBetween('subscription_time', [strtotime($activity['start_time']), strtotime($activity['end_time'])]) ->groupBy('user_id') ->pluck('user_id'); foreach ($items as $user_id) { $amountSum = UserSubscribeRecord::query() ->where('user_id', $user_id) ->whereBetween('subscription_time', [strtotime($activity['start_time']), strtotime($activity['end_time'])]) ->sum('subscription_currency_amount'); // dump($user_id . '--' . $amountSum); $param = array_last($params, function ($value, $key) use ($amountSum) { return $value['amount'] < $amountSum; }); if (!empty($param)) { $log_type = 'subscribe_activity'; // 防止重复结算 $is_exist = UserWalletLog::query()->where(['user_id' => $user_id, 'log_type' => $log_type, 'logable_type' => SubscribeActivity::class, 'logable_id' => $activity['id']])->exists(); if (!$is_exist) { $award = PriceCalculate($amountSum, '*', $param['rate'], 8); $user = User::query()->find($user_id); $coin_id = Coins::query()->where('coin_name', config('coin.coin_symbol'))->value('coin_id') ?? 26; if (!empty($user)) $user->update_wallet_and_log($coin_id, 'usable_balance', $award, UserWallet::asset_account, $log_type, '', '', $activity['id'], SubscribeActivity::class); } } } $activity->update(['status' => 0]); } } }