mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-23 19:37:35 +08:00
fix: optimize batch email performance and fix gift card issues
- Add chunking and batching for admin email sending - Fix gift card pagination and add per_page limits - Update frontend prompts and complete language packs
This commit is contained in:
@@ -16,6 +16,7 @@ use App\Utils\Helper;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Bus;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -442,22 +443,38 @@ class UserController extends Controller
|
||||
$sort = $request->input('sort') ? $request->input('sort') : 'created_at';
|
||||
$builder = User::orderBy($sort, $sortType);
|
||||
$this->applyFiltersAndSorts($request, $builder);
|
||||
$users = $builder->get();
|
||||
foreach ($users as $user) {
|
||||
SendEmailJob::dispatch(
|
||||
[
|
||||
|
||||
$subject = $request->input('subject');
|
||||
$content = $request->input('content');
|
||||
$templateValue = [
|
||||
'name' => admin_setting('app_name', 'XBoard'),
|
||||
'url' => admin_setting('app_url'),
|
||||
'content' => $content
|
||||
];
|
||||
|
||||
$chunkSize = 1000;
|
||||
$totalProcessed = 0;
|
||||
|
||||
$builder->chunk($chunkSize, function ($users) use ($subject, $templateValue, &$totalProcessed) {
|
||||
$jobs = [];
|
||||
|
||||
foreach ($users as $user) {
|
||||
$jobs[] = new SendEmailJob([
|
||||
'email' => $user->email,
|
||||
'subject' => $request->input('subject'),
|
||||
'subject' => $subject,
|
||||
'template_name' => 'notify',
|
||||
'template_value' => [
|
||||
'name' => admin_setting('app_name', 'XBoard'),
|
||||
'url' => admin_setting('app_url'),
|
||||
'content' => $request->input('content')
|
||||
]
|
||||
],
|
||||
'send_email_mass'
|
||||
);
|
||||
}
|
||||
'template_value' => $templateValue
|
||||
], 'send_email_mass');
|
||||
}
|
||||
|
||||
if (!empty($jobs)) {
|
||||
Bus::batch($jobs)
|
||||
->allowFailures()
|
||||
->dispatch();
|
||||
}
|
||||
|
||||
$totalProcessed += $users->count();
|
||||
});
|
||||
|
||||
return $this->success(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user