chunkById(200, function ($preIncomes) use ($walletService, &$page) { $preIncomes->load('user'); foreach ($preIncomes as $preIncome) { try { DB::beginTransaction(); $walletService->changeBalance( $preIncome->user, bcmul($preIncome->total_revenue, 100), WalletLog::ACTION_DISTRIBUTION_PRE_INCOME, $preIncome->remarks, $preIncome ); // 计算配额 $changeQuota = bcmul($preIncome->total_revenue, app_settings('distribution.quota_v2_rate', 0), 4); $changeQuota = round($changeQuota, 3); $preIncome->user->userInfo()->update([ 'quota_v2' => DB::raw("quota_v2+{$changeQuota}"), ]); $preIncome->user->quotaLogs()->create([ 'loggable_id' => $preIncome->id, 'loggable_type' => $preIncome->getMorphClass(), 'change_quota' => $changeQuota, 'remarks' => $preIncome->type_text.'得配额', ]); // 将预收益标记为已结算 $preIncome->update([ 'completed_at' => now(), 'status' => DistributionPreIncome::STATUS_PROCESSED, ]); DB::commit(); } catch (Throwable $e) { DB::rollBack(); report($e); } } $page++; }); sleep(60); } } }