优化首页和收货地址管理

This commit is contained in:
2026-03-30 17:37:28 +08:00
parent e38fd660e2
commit 2686c54781
9 changed files with 422 additions and 435 deletions

View File

@@ -5,6 +5,10 @@ declare(strict_types=1);
namespace app\admin\controller;
use app\common\controller\Backend;
use app\common\model\MallPlayxClaimLog;
use app\common\model\MallPlayxOrder;
use app\common\model\MallPlayxUserAsset;
use support\think\Db;
use Webman\Http\Request;
use support\Response;
@@ -15,8 +19,78 @@ class Dashboard extends Backend
$response = $this->initializeBackend($request);
if ($response !== null) return $response;
$now = time();
$todayStart = strtotime(date('Y-m-d', $now) . ' 00:00:00');
$yesterdayStart = $todayStart - 86400;
$newPlayersToday = MallPlayxUserAsset::where('create_time', '>=', $todayStart)
->where('create_time', '<=', $now)
->count();
$yesterdayPointsClaimed = MallPlayxClaimLog::where('create_time', '>=', $yesterdayStart)
->where('create_time', '<', $todayStart)
->sum('claimed_amount');
$yesterdayRedeemQuery = MallPlayxOrder::where('create_time', '>=', $yesterdayStart)
->where('create_time', '<', $todayStart);
$yesterdayRedeemCount = (clone $yesterdayRedeemQuery)->count();
$yesterdayRedeemPointsCostSum = (clone $yesterdayRedeemQuery)->sum('points_cost');
$yesterdayRedeemAmountSum = (clone $yesterdayRedeemQuery)->sum('amount');
$yesterdayRedeemCompletedCount = (clone $yesterdayRedeemQuery)
->where('status', MallPlayxOrder::STATUS_COMPLETED)
->count();
$yesterdayRedeemRejectedCount = (clone $yesterdayRedeemQuery)
->where('status', MallPlayxOrder::STATUS_REJECTED)
->count();
$yesterdayRedeemByItem = Db::name('mall_playx_order')
->alias('o')
->leftJoin('mall_item i', 'i.id = o.mall_item_id')
->where('o.create_time', '>=', $yesterdayStart)
->where('o.create_time', '<', $todayStart)
->group('o.mall_item_id, i.title')
->field([
'o.mall_item_id',
'i.title',
Db::raw('COUNT(*) as order_count'),
Db::raw('SUM(o.points_cost) as points_cost_sum'),
Db::raw('SUM(o.amount) as amount_sum'),
Db::raw('SUM(CASE WHEN o.status = "COMPLETED" THEN 1 ELSE 0 END) as completed_count'),
Db::raw('SUM(CASE WHEN o.status = "REJECTED" THEN 1 ELSE 0 END) as rejected_count'),
])
->orderRaw('order_count DESC')
->select()
->toArray();
$pendingPhysicalToShip = MallPlayxOrder::where('type', MallPlayxOrder::TYPE_PHYSICAL)
->where('status', MallPlayxOrder::STATUS_PENDING)
->count();
$grantFailedRetryableCount = MallPlayxOrder::whereIn('type', [MallPlayxOrder::TYPE_BONUS, MallPlayxOrder::TYPE_WITHDRAW])
->where('grant_status', MallPlayxOrder::GRANT_FAILED_RETRYABLE)
->count();
return $this->success('', [
'remark' => get_route_remark()
'remark' => get_route_remark(),
'playx' => [
'time_range' => [
'today_start' => $todayStart,
'yesterday_start' => $yesterdayStart,
'now' => $now,
],
'new_players_today' => $newPlayersToday,
'yesterday_points_claimed' => $yesterdayPointsClaimed,
'yesterday_redeem' => [
'order_count' => $yesterdayRedeemCount,
'points_cost_sum' => $yesterdayRedeemPointsCostSum,
'amount_sum' => $yesterdayRedeemAmountSum,
'completed_count' => $yesterdayRedeemCompletedCount,
'rejected_count' => $yesterdayRedeemRejectedCount,
'by_item' => $yesterdayRedeemByItem,
],
'pending_physical_to_ship' => $pendingPhysicalToShip,
'grant_failed_retryable' => $grantFailedRetryableCount,
],
]);
}
}