Files
datahub/backend/app/Platform/Tmall/Producer/OrderProducer.php
T
2025-11-17 16:51:51 +08:00

100 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Platform\Tmall\Producer;
use Hyperf\Amqp\Annotation\Producer;
use Hyperf\Amqp\Message\ProducerMessage;
#[Producer]
class OrderProducer extends ProducerMessage
{
/**
* Exchange 名称
*/
protected string $exchange = 'tmall.exchange';
/**
* Routing key
*/
protected string|array $routingKey = 'order.tmall';
/**
* VHost
*/
protected string $vhost = 'dataflow';
/**
* 消息持久化
*/
protected array $properties = [
'delivery_mode' => 2, // 持久化消息
];
/**
* 构造消息
*
* @param array $data 订单数据
* @return string
*/
public function __construct(array $data = [])
{
if (!empty($data)) {
$this->payload = $this->buildMessage($data);
}
}
/**
* 构建消息格式
*
* @param array $data 原始订单数据
* @return array
*/
protected function buildMessage(array $data): array
{
// 根据 RabbitMQ.md 中定义的消息格式规范
return [
'message_id' => $this->generateMessageId($data),
'timestamp' => date('c'), // ISO 8601 格式
'platform' => 'tmall',
'data_type' => 'order',
'metadata' => [
'platform_id' => $data['platform_id'] ?? null,
'company_id' => $data['company_id'] ?? null,
'store_id' => $data['store_id'] ?? null,
'source_system' => 'tmall-open-api',
'retry_count' => 0,
'data_version' => $data['data_version'] ?? time(),
],
'data' => $data['raw_data'],
];
}
/**
* 生成消息ID
*
* 格式: {prefix}#{app_id}#{company_id}#{platform_id}#{store_id}#{entity_type}#{entity_id}
*
* @param array $data
* @return string
*/
protected function generateMessageId(array $data): string
{
$company_id = $data['company_id'];
$platform_id = $data['platform_id'];
$store_id = $data['store_id'];
$entity_type = 'order';
$unique_id = $data['unique_id'];
return sprintf(
'%s#%s#%s#%s#%s',
$company_id,
$platform_id,
$store_id,
$entity_type,
$unique_id
);
}
}