This commit is contained in:
2026-05-07 20:51:38 +08:00
parent 1e7de46c26
commit 349f8e11b0
14 changed files with 730 additions and 1 deletions
+51 -1
View File
@@ -5,8 +5,10 @@ declare(strict_types=1);
namespace App\Platform;
use App\Entity\Parse\EntityParseFactory;
use App\Model\AggregateRefreshQueue;
use App\Platform\Traits\FailedMessageTrait;
use App\Utils\Log;
use Carbon\Carbon;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Builder\QueueBuilder;
use Hyperf\Amqp\Message\ConsumerMessage;
@@ -152,9 +154,10 @@ class OrderConsumer extends ConsumerMessage
// 鉴于定义子项为了保留足够的灵活性,因此每次订单更新,我们都需要完整更新 OrderItem
$this->processOrderItems($items);
// 5. 识别 ≥ 3 天前的 created_date 入队,补刷自动策略未覆盖的窗口
$this->enqueueAffectedDates($orders_data);
Db::commit();
// @TODO 触发事件通知,更新自动聚合任务
// 在数据库事务中尝试对 $entityMapResult 中的元素进行持久化,如果没有问题, 则返回 ACK,否则这是 NACK 且 回滚事务。
return Result::ACK;
@@ -379,4 +382,51 @@ class OrderConsumer extends ConsumerMessage
}
}
/**
* 识别 payload 中 ≥ 3 天前的 created_date,入队 orders_daily_by_created 兜底刷新。
*
* 自动刷新策略仅覆盖最近 3 天窗口;3 天前的订单变更(补录、追溯调整)需由
* aggregate_refresh_queue + Crontab 任务补刷。仅服务 by_created 视图,
* by_paid 由全量 REFRESH 覆盖,不入此队列。
*
* @param array $payloads 来自 entityMap()->all() 的订单数组,每条含 created_date 字段
*/
protected function enqueueAffectedDates(array $payloads): void
{
if (empty($payloads)) {
return;
}
$threshold = Carbon::now()->subDays(3)->toDateString();
$unique_dates = [];
foreach ($payloads as $payload) {
$created = $payload['created_date'] ?? null;
if ($created === null) {
continue;
}
// entityMap 输出 'Y-m-d H:i:sP';用 Carbon::parse 兼容多种格式
$date = Carbon::parse($created)->toDateString();
// 严格小于阈值才入队(≥ 阈值的部分由自动刷新策略覆盖)
if ($date < $threshold) {
$unique_dates[$date] = true;
}
}
if (empty($unique_dates)) {
return;
}
$now = Carbon::now();
foreach (array_keys($unique_dates) as $date) {
AggregateRefreshQueue::query()->insertOrIgnore([
'refresh_date' => $date,
'aggregate_view' => 'orders_daily_by_created',
'created_at' => $now,
]);
}
}
}