prepare($sql); $stmt->bind_param("ss", $start_date, $end_date); $stmt->execute(); $result = $stmt->get_result(); return $result->fetch_assoc(); } /** * 获取每月销售趋势 * * @param mysqli $conn 数据库连接 * @param string $start_date 开始日期 * @param string $end_date 结束日期 * @return mysqli_result 月度销售数据结果集 */ function getMonthlySalesTrend($conn, $start_date, $end_date) { $sql = "SELECT DATE_FORMAT(order_date, '%Y-%m') as month, COUNT(id) as orders, SUM(total_amount) as revenue FROM orders WHERE order_date BETWEEN ? AND ? GROUP BY DATE_FORMAT(order_date, '%Y-%m') ORDER BY month"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $start_date, $end_date); $stmt->execute(); return $stmt->get_result(); } /** * 获取详细时间段订单趋势 * * @param mysqli $conn 数据库连接 * @param string $start_date 开始日期 * @param string $end_date 结束日期 * @param string $period 时间粒度 (day/week/month) * @return mysqli_result 订单趋势数据结果集 */ function getDetailedOrderTrend($conn, $start_date, $end_date, $period = 'day') { $groupFormat = '%Y-%m-%d'; $intervalUnit = 'DAY'; if ($period == 'week') { $groupFormat = '%x-W%v'; // ISO year and week number $intervalUnit = 'WEEK'; } else if ($period == 'month') { $groupFormat = '%Y-%m'; $intervalUnit = 'MONTH'; } $sql = "SELECT DATE_FORMAT(o.order_date, '$groupFormat') as time_period, COUNT(o.id) as order_count, SUM(oi.quantity) as total_quantity, SUM(o.total_amount) as total_amount FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id WHERE o.order_date BETWEEN ? AND ? GROUP BY time_period ORDER BY MIN(o.order_date)"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $start_date, $end_date); $stmt->execute(); return $stmt->get_result(); } /** * 渲染销售概览卡片 * * @param array $sales_overview 销售概览数据 * @return void */ function renderSalesOverviewCards($sales_overview) { ?>

总订单数

总收入

¥

平均订单金额

¥

销售趋势

详细订单趋势 ()