43 lines
1.2 KiB
PHP
43 lines
1.2 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 文件功能:扫描并处理超时的求婚记录(48h无响应后失效)
|
|||
|
|
*
|
|||
|
|
* 每 5 分钟执行一次,将到期的 pending 求婚设为 expired,戒指标记遗失。
|
|||
|
|
* 同时广播 MarriageExpired 事件通知求婚方。
|
|||
|
|
*
|
|||
|
|
* @author ChatRoom Laravel
|
|||
|
|
*
|
|||
|
|
* @version 1.0.0
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
namespace App\Jobs;
|
|||
|
|
|
|||
|
|
use App\Events\MarriageExpired;
|
|||
|
|
use App\Models\Marriage;
|
|||
|
|
use App\Services\MarriageService;
|
|||
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|||
|
|
use Illuminate\Foundation\Queue\Queueable;
|
|||
|
|
|
|||
|
|
class ExpireMarriageProposals implements ShouldQueue
|
|||
|
|
{
|
|||
|
|
use Queueable;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 执行 Job:扫描超时求婚并处理。
|
|||
|
|
*/
|
|||
|
|
public function handle(MarriageService $service): void
|
|||
|
|
{
|
|||
|
|
// 查找所有已超时但仍为 pending 的求婚
|
|||
|
|
Marriage::query()
|
|||
|
|
->where('status', 'pending')
|
|||
|
|
->where('expires_at', '<=', now())
|
|||
|
|
->cursor()
|
|||
|
|
->each(function (Marriage $marriage) use ($service) {
|
|||
|
|
$service->expireProposal($marriage);
|
|||
|
|
// 广播通知求婚方(若在线则收到)
|
|||
|
|
broadcast(new MarriageExpired($marriage));
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|