Files
chatroom/app/Jobs/ExpireMarriageProposals.php
lkddi 143601c251 功能:婚姻系统第11步(Horizon Jobs + 定时任务)
5个 Job:
- ExpireMarriageProposals:每5分钟扫描超时求婚(广播通知)
- TriggerScheduledWeddings:每5分钟触发定时婚礼(广播庆典)
- AutoExpireDivorces:每小时处理离婚超时自动解除
- ExpireWeddingEnvelopes:每小时清理过期红包
- ProcessMarriageIntimacy:每日00:05全量亲密度时间奖励

console.php 注册5个 Schedule
2026-03-01 15:16:46 +08:00

43 lines
1.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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));
});
}
}