Files

65 lines
1.9 KiB
PHP
Raw Permalink Normal View History

2025-12-15 15:22:22 +08:00
<?php
declare(strict_types=1);
namespace App\Platform;
use App\Entity\Parse\EntityParse;
use InvalidArgumentException;
/**
* 订单解析器抽象基类
*
* 继承 EntityParse 的通用能力,并实现 OrderContract 契约
* 提供订单解析的通用方法和辅助函数
*/
abstract class AbstractOrderParse extends EntityParse implements OrderContract
{
/**
2026-03-05 09:47:22 +08:00
* 从原始数据格式化订单子项(抽象方法,由子类实现)
*
2025-12-15 15:22:22 +08:00
* 每个平台有自己的订单子项数据结构,需要各自实现具体的解析逻辑
2026-03-05 09:47:22 +08:00
*
* @var $platform_orders_id_to_local_db_order_id_map
* - 为 平台订单 id 与 本地父级订单 id 的映射数组
* - 用来维护父订单和值订单的关系
*
*/
abstract public function formatOrderItemsFromRaw(array $raw_data, array $platform_orders_id_to_local_db_order_id_map): array;
/**
* 获取本地订单状态 ID(抽象方法,由子类实现)
*/
abstract public function getOrderStatusId(string $platform_order_status): int;
/**
* 获取支付方式 ID(抽象方法,由子类实现)
2025-12-15 15:22:22 +08:00
*/
2026-03-05 09:47:22 +08:00
abstract public function getPaymentMethodId(): int;
2025-12-15 15:22:22 +08:00
/**
* 通用辅助方法:验证订单必需字段
*
* @param array $orderData 订单原始数据
* @param array $requiredFields 必需字段列表
* @throws InvalidArgumentException
*/
protected function validateOrderFields(array $orderData, array $requiredFields = []): void
{
}
/**
* 通用辅助方法:格式化货币金额
*
* @param float|int|string|null $amount 金额
* @param int $decimals 小数位数,默认 2 位
* @return float 格式化后的金额
*/
protected function formatAmount(float|int|string|null $amount, int $decimals = 2): float
{
return round((float)($amount ?? 0), $decimals);
}
}