修复支付状态问题
This commit is contained in:
1 parent
406fb8d6a6
commit
85a124b886
21 files changed
+198
-308
No files matched your search
+11
-21
@@ -64,7 +64,7 @@ class UserOrders {
|
||||
'total_pages' => $total_pages,
|
||||
'page' => $page,
|
||||
'query' => array_merge($query->url_values(), ['order_page' => $page]),
|
||||
'stats' => is_array($summary['stats'] ?? null) ? $summary['stats'] : ['total' => 0, 'pending' => 0, 'completed' => 0],
|
||||
'stats' => is_array($summary['stats'] ?? null) ? $summary['stats'] : ['total' => 0, 'pending' => 0, 'paid' => 0],
|
||||
'invalidation_tags' => ['orders'],
|
||||
'product_types' => $this->product_type_filter_options(),
|
||||
];
|
||||
@@ -109,13 +109,13 @@ class UserOrders {
|
||||
/** @return array<string, int> */
|
||||
public function get_user_order_stats(int $user_id): array {
|
||||
if ($user_id <= 0 || !class_exists(OrderRepository::class)) {
|
||||
return ['total' => 0, 'pending' => 0, 'completed' => 0];
|
||||
return ['total' => 0, 'pending' => 0, 'paid' => 0];
|
||||
}
|
||||
|
||||
$summary = OrderRepository::get_instance()->get_user_order_center_summary($user_id);
|
||||
return is_array($summary['stats'] ?? null)
|
||||
? $summary['stats']
|
||||
: ['total' => 0, 'pending' => 0, 'completed' => 0];
|
||||
: ['total' => 0, 'pending' => 0, 'paid' => 0];
|
||||
}
|
||||
|
||||
/** @return array<string, string> */
|
||||
@@ -192,7 +192,7 @@ class UserOrders {
|
||||
$payment_method = sanitize_key((string) ($order['payment_method'] ?? ''));
|
||||
$can_pay = $group === OrderCenterQuery::STATUS_PENDING && $payment_method !== 'manual_review';
|
||||
$can_cancel = $group === OrderCenterQuery::STATUS_PENDING;
|
||||
$can_open = $group === OrderCenterQuery::STATUS_COMPLETED && $permalink !== '';
|
||||
$can_open = $group === OrderCenterQuery::STATUS_PAID && $permalink !== '';
|
||||
$order_number = (string) ($order['order_number'] ?? '');
|
||||
$updated_at = $this->resolve_updated_at($order);
|
||||
|
||||
@@ -249,7 +249,7 @@ class UserOrders {
|
||||
'total_pages' => 1,
|
||||
'page' => 1,
|
||||
'query' => $query->url_values(),
|
||||
'stats' => ['total' => 0, 'pending' => 0, 'completed' => 0],
|
||||
'stats' => ['total' => 0, 'pending' => 0, 'paid' => 0],
|
||||
'invalidation_tags' => ['orders'],
|
||||
'product_types' => $this->product_type_filter_options(),
|
||||
];
|
||||
@@ -259,7 +259,7 @@ class UserOrders {
|
||||
private function resolve_updated_at(array $order): string {
|
||||
$latest = '';
|
||||
$latest_timestamp = 0;
|
||||
foreach (['created_at', 'paid_at', 'delivered_at', 'completed_at', 'cancelled_at', 'refunded_at'] as $field) {
|
||||
foreach (['created_at', 'paid_at', 'cancelled_at', 'refunded_at'] as $field) {
|
||||
$value = trim((string) ($order[$field] ?? ''));
|
||||
if ($value === '') {
|
||||
continue;
|
||||
@@ -284,20 +284,11 @@ class UserOrders {
|
||||
}
|
||||
|
||||
private function status_group(string $status): string {
|
||||
return match ($status) {
|
||||
Order::STATUS_CREATED, Order::STATUS_PENDING => OrderCenterQuery::STATUS_PENDING,
|
||||
Order::STATUS_PAID, Order::STATUS_DELIVERED, Order::STATUS_COMPLETED, Order::STATUS_PENDING_REVIEW => OrderCenterQuery::STATUS_COMPLETED,
|
||||
Order::STATUS_CANCELLED, Order::STATUS_EXPIRED, Order::STATUS_REFUNDING, Order::STATUS_REFUNDED => OrderCenterQuery::STATUS_CLOSED,
|
||||
default => OrderCenterQuery::STATUS_CLOSED,
|
||||
};
|
||||
return isset(DomainModel::order_status_labels()[$status]) ? $status : '';
|
||||
}
|
||||
|
||||
private function status_label(string $group): string {
|
||||
return match ($group) {
|
||||
OrderCenterQuery::STATUS_PENDING => __('待支付', 'aksrt'),
|
||||
OrderCenterQuery::STATUS_COMPLETED => __('权益已生效', 'aksrt'),
|
||||
default => __('已关闭', 'aksrt'),
|
||||
};
|
||||
return DomainModel::order_status_labels()[$group] ?? __('未知状态', 'aksrt');
|
||||
}
|
||||
|
||||
/** @param array<string, mixed> $meta */
|
||||
@@ -389,7 +380,7 @@ class UserOrders {
|
||||
}
|
||||
|
||||
private function get_order_countdown(string $expires_at, string $status): int {
|
||||
if (!in_array($status, [Order::STATUS_CREATED, Order::STATUS_PENDING], true) || $expires_at === '') {
|
||||
if ($status !== Order::STATUS_PENDING || $expires_at === '') {
|
||||
return 0;
|
||||
}
|
||||
$expires = strtotime($expires_at);
|
||||
@@ -406,8 +397,7 @@ class UserOrders {
|
||||
if (!$order || $this->status_group((string) ($order['status'] ?? '')) !== OrderCenterQuery::STATUS_PENDING) {
|
||||
return ['success' => false, 'message' => __('当前订单不可关闭。', 'aksrt')];
|
||||
}
|
||||
if (!$repo->update_status($order_number, Order::STATUS_CANCELLED, [
|
||||
'force' => true,
|
||||
if (!$repo->update_status($order_number, Order::STATUS_CLOSED, [
|
||||
'note' => __('用户在前台关闭订单。', 'aksrt'),
|
||||
])) {
|
||||
return ['success' => false, 'message' => __('关闭订单失败,请稍后重试。', 'aksrt')];
|
||||
@@ -425,7 +415,7 @@ class UserOrders {
|
||||
if (!$order) {
|
||||
return ['success' => false, 'message' => __('当前订单状态不可支付。', 'aksrt')];
|
||||
}
|
||||
if ($this->status_group((string) ($order['status'] ?? '')) === OrderCenterQuery::STATUS_COMPLETED) {
|
||||
if ($this->status_group((string) ($order['status'] ?? '')) === OrderCenterQuery::STATUS_PAID) {
|
||||
$ledger_key = \AKSRT\Ledger\OperationKey::deterministic('order-payment', [$order_number]);
|
||||
$history = \AKSRT\Ledger\LedgerQuery::get_instance()->history(['operation_key' => $ledger_key, 'page' => 1, 'per_page' => 1]);
|
||||
if (!empty($history['items'][0])) {
|
||||
|
||||
Reference in new issue
Block a user