parseTimeRange($addtime); $whe3[] = ['addtime', 'BETWEEN', [$start_time, $end_time]]; $whe4[] = ['addtime', 'BETWEEN', [$start_time, $end_time]]; } // 获取商品ID列表 $goodList = GoodsModel::where($whe)->column('id'); if (empty($goodList)) { View::assign([ 'sum_dingdan' => 0, 'sum_shiji' => 0, 'sum_chuhuo' => 0, 'price_all' => 0, 'sum_shijilirun' => 0, 'sum_dingdanlirun' => 0, 'use_money_all' => 0, 'order_total_all' => 0, 'list' => [], 'count' => 0, 'page' => '', ]); return View::fetch("Statistics/profit"); } // 获取测试用户ID列表 $userList = User::where('istest', '>', 0)->column('id'); // 订单筛选条件 $whe3[] = ['user_id', 'not in', $userList]; $whe3[] = ['status', '=', 1]; $whe3[] = ['goods_id', 'in', $goodList]; $whe4[] = ['user_id', 'not in', $userList]; $whe4[] = ['goods_id', 'in', $goodList]; // 统计订单数据 $orderTotals = OrderModel::where($whe3) ->field('SUM(order_total) as order_total_all, SUM(order_zhe_total) as order_zhe_total_all, SUM(price) as price_all, SUM(use_money) as use_money_all') ->find(); $goodslistMoneyAll = OrderList::where($whe4)->sum('goodslist_money'); // 获取商品列表 $data = GoodsModel::getList($whe, "*", "id desc", 20); // 计算每个商品的订单详情 foreach ($data['list'] as &$value) { $value = array_merge($value, $this->calculateOrderDetails($value['id'], $userList, $addtime)); } // 计算利润 $sum_shijilirun = round($orderTotals->order_zhe_total_all - $goodslistMoneyAll, 2); $sum_dingdanlirun = round($orderTotals->order_total_all - $goodslistMoneyAll, 2); // 传递数据给视图 View::assign([ 'sum_dingdan' => $orderTotals->order_total_all, 'sum_shiji' => $orderTotals->order_zhe_total_all, 'sum_chuhuo' => $goodslistMoneyAll, 'price_all' => $orderTotals->price_all, 'sum_shijilirun' => $sum_shijilirun, 'sum_dingdanlirun' => $sum_dingdanlirun, 'use_money_all' => $orderTotals->use_money_all, 'order_total_all' => $orderTotals->order_total_all, 'list' => $data['list'], 'count' => $data['count'], 'page' => $data['page'], ]); return View::fetch("Statistics/profit"); } /** * 解析时间范围 */ private function parseTimeRange($addtime) { $time = explode(' - ', $addtime); $start_time = strtotime($time[0]); $end_time = strtotime($time[1]) - 1; if ($start_time > $end_time) { throw new \Exception('开始时间不能大于结束时间'); } return [$start_time, $end_time]; } /** * 计算商品的订单详情 */ private function calculateOrderDetails($goodsId, $userList, $addtime) { $whe1 = [['goods_id', '=', $goodsId], ['status', '=', 1], ['user_id', 'not in', $userList]]; $whe2 = [['user_id', 'not in', $userList], ['goods_id', '=', $goodsId]]; if ($addtime) { [$start_time, $end_time] = $this->parseTimeRange($addtime); $whe1[] = ['addtime', 'BETWEEN', [$start_time, $end_time]]; $whe2[] = ['addtime', 'BETWEEN', [$start_time, $end_time]]; } // 订单统计 $orderStats = OrderModel::where($whe1) ->field('COUNT(*) as count, SUM(order_total) as order_total, SUM(price) as count_price, SUM(use_money) as count_yue, SUM(use_integral) / 100 as use_integral, SUM(use_score) as use_score, SUM(use_coupon) as use_coupon, SUM(order_zhe_total) as order_zhe_total') ->find(); if (!$orderStats) { $orderStats = (object) [ 'count' => 0, 'order_total' => 0, 'count_price' => 0, 'count_yue' => 0, 'use_integral' => 0, 'use_score' => 0, 'use_coupon' => 0, 'order_zhe_total' => 0 ]; } $goodslistMoney = OrderList::where($whe2)->sum('goodslist_money'); // 计算利润 $lirun = round($orderStats->order_zhe_total - $goodslistMoney, 2); $liruns = round(($orderStats->count_price + $orderStats->count_yue + $orderStats->use_integral + $orderStats->use_score + $orderStats->use_coupon) - $goodslistMoney, 2); $order_zhe_total = $orderStats->order_zhe_total; // $order_zhe_total 转int $order_zhe_total = intval($order_zhe_total); if ($order_zhe_total <= 0) { $order_zhe_total = 1; } $order_total = ($orderStats->count_price + $orderStats->count_yue + $orderStats->use_integral + $orderStats->use_score + $orderStats->use_coupon); if ($order_total <= 0) { $order_total = 1; } return [ 'order_count' => round($orderStats->count, 2), 'count_price' => round($orderStats->count_price, 2), 'order_total' => round($orderStats->order_total, 2), 'count_yue' => round($orderStats->count_yue, 2), 'count_use_integral' => round($orderStats->use_integral, 2), 'count_use_score' => round($orderStats->use_score, 2), 'count_use_coupon' => round($orderStats->use_coupon, 2), 'count_heji' => round($orderStats->count_price + $orderStats->count_yue + $orderStats->use_integral + $orderStats->use_score + $orderStats->use_coupon, 2), 'order_zhe_total' => round($orderStats->order_zhe_total, 2), 'count_OrderList' => OrderList::where($whe2)->count(), // ✅ 添加这一行 'goodslist_price' => round($goodslistMoney, 2), 'lirun' => $lirun, 'liruns' => $liruns, 'lirulv' => $goodslistMoney == 0 ? 0 : round(($order_zhe_total - $goodslistMoney) / $order_zhe_total * 100, 2), 'lirulvs' => $goodslistMoney == 0 ? 0 : round(($order_total - $goodslistMoney) / $order_total * 100, 2), ]; } /** * 数据统计 * @param \think\Request $request * @return string */ public function DataStand(Request $request) { $userCount = User::count("id"); $userList = User::where('istest', '>', 0)->field('id')->select(); $userArray = array_column($userList->toArray(), 'id'); // 本日充值金额 // $order_today = OrderModel::whereNotIn('user_id', $userArray)->where('status', '=', 1)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('price'); // 今日时间 $ranges['today_start'] = strtotime('today'); $ranges['today_end'] = strtotime('tomorrow') - 1; // 昨日时间 $ranges['yesterday_start'] = strtotime('yesterday'); $ranges['yesterday_end'] = strtotime('today') - 1; // 本周时间(周一到周日) $ranges['this_week_start'] = strtotime('monday this week'); $ranges['this_week_end'] = strtotime('sunday this week') + 86399; // 上周时间(上周一到上周日) $ranges['last_week_start'] = strtotime('monday last week'); $ranges['last_week_end'] = strtotime('sunday last week') + 86399; // 本月时间(1号到月末) $ranges['this_month_start'] = strtotime(date('Y-m-01')); $ranges['this_month_end'] = strtotime(date('Y-m-t')) + 86399; // 上月时间(上个月1号到月末) $ranges['last_month_start'] = strtotime(date('Y-m-01', strtotime('-1 month'))); $ranges['last_month_end'] = strtotime(date('Y-m-t', strtotime('-1 month'))) + 86399; // 今日注册人数 $user_today = User::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->count('id'); // 昨日注册人数 $user_yesterday = User::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->count('id'); // 本周注册人数 $user_this_week = User::whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->count('id'); // 上周注册人数 $user_last_week = User::whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->count('id'); // 本月注册人数 $user_this_month = User::whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->count('id'); // 上月注册人数 $user_last_month = User::whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->count('id'); // 本日充值金额 $order_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('price'); // 昨日充值金额 $order_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('price'); // 本周充值金额 $order_this_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->sum('price'); // 上周充值金额 $order_last_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->sum('price'); // 本月充值金额 $order_this_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->sum('price'); // 上月充值金额 $order_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->sum('price'); // 消费人数统计 $consume_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->field('user_id')->group('user_id')->count('user_id'); $consume_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->field('user_id')->group('user_id')->count('user_id'); $consume_this_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->field('user_id')->group('user_id')->count('user_id'); $consume_last_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->field('user_id')->group('user_id')->count('user_id'); $consume_this_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->field('user_id')->group('user_id')->count('user_id'); $consume_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->field('user_id')->group('user_id')->count('user_id'); // RMB消费人数统计 $rmb_consume_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->field('user_id')->group('user_id')->count('user_id'); $rmb_consume_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->field('user_id')->group('user_id')->count('user_id'); $rmb_consume_this_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->field('user_id')->group('user_id')->count('user_id'); $rmb_consume_last_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->field('user_id')->group('user_id')->count('user_id'); $rmb_consume_this_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->field('user_id')->group('user_id')->count('user_id'); $rmb_consume_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->field('user_id')->group('user_id')->count('user_id'); //今日余额消费 $money_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('use_money'); $money_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('use_money'); //今日积分抵扣 $score_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('use_score'); $score_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('use_score'); //今日余额发放 $money_recovery_today = OrderListRecovery::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('money'); $money_recovery_yesterday = OrderListRecovery::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->whereNotIn('user_id', $userArray)->sum('money'); //今日优惠卷消费 $coupon_today = OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('use_coupon'); //今日收入 $order_zhe_total = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('order_zhe_total'); $order_goodslist_money = OrderList::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'); $order_goodslist_count = OrderList::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->count(); $order_count = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->count(); $order_zhe_total_yester = round(OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('order_zhe_total'), 2); $order_goodslist_money_yester = round(OrderList::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2); $order_zhe_total_week = round(OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->sum('order_zhe_total'), 2); $order_goodslist_money_week = round(OrderList::whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2); $order_zhe_total_last_week = round(OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->whereNotIn('user_id', $userArray)->sum('order_zhe_total'), 2); $order_goodslist_money__last_week = round(OrderList::whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2); $order_zhe_total_month = round(OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->whereNotIn('user_id', $userArray)->sum('order_zhe_total'), 2); $order_goodslist_money_month = round(OrderList::whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2); $order_zhe_total_last_month = round(OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->whereNotIn('user_id', $userArray)->sum('order_zhe_total'), 2); $order_goodslist_money__last_month = round(OrderList::whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2); $profit_expenses = ProfitExpenses::getTotalAmountByDate(date('Y-m-d')); $profit_expenses_yester = ProfitExpenses::getTotalAmountByDate(date('Y-m-d', strtotime('-1 day'))); $profit_expenses_week = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['this_week_start']), date('Y-m-d', $ranges['this_week_end'])); $profit_expenses_last_week = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['last_week_start']), date('Y-m-d', $ranges['last_week_end'])); $profit_expenses_money = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['this_month_start']), date('Y-m-d', $ranges['this_month_end'])); $profit_expenses_last_money = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['last_month_start']), date('Y-m-d', $ranges['last_month_end'])); $profit_rvenue = ProfitRvenue::getTotalAmountByDate(date('Y-m-d')); $profit_rvenue_yester = ProfitRvenue::getTotalAmountByDate(date('Y-m-d', strtotime('-1 day'))); $profit_rvenue_week = ProfitRvenue::getTotalAmountByDates(date('Y-m-d', $ranges['this_week_start']), date('Y-m-d', $ranges['this_week_end'])); $profit_rvenue_last_week = ProfitRvenue::getTotalAmountByDates(date('Y-m-d', $ranges['last_week_start']), date('Y-m-d', $ranges['last_week_end'])); $profit_rvenue_money = ProfitRvenue::getTotalAmountByDates(date('Y-m-d', $ranges['this_month_start']), date('Y-m-d', $ranges['this_month_end'])); $profit_rvenue_last_money = ProfitRvenue::getTotalAmountByDates(date('Y-m-d', $ranges['last_month_start']), date('Y-m-d', $ranges['last_month_end'])); View::assign('profit_expenses', $profit_expenses); View::assign('money_today', $money_today); View::assign('money_yesterday', $money_yesterday); View::assign('coupon_today', $coupon_today); View::assign('profit_rvenue', $profit_rvenue); View::assign('score_today', $score_today); View::assign('score_yesterday', $score_yesterday); View::assign('money_recovery_today', $money_recovery_today); View::assign('money_recovery_yesterday', $money_recovery_yesterday); View::assign('order_zhe_total', $order_zhe_total); View::assign('order_goodslist_money', $order_goodslist_money); View::assign('order_goodslist_count', $order_goodslist_count); View::assign('order_count', $order_count); View::assign('order_lirun', round($order_zhe_total + $profit_rvenue - $order_goodslist_money - $profit_expenses, 2)); View::assign('order_lirun_yester', round($order_zhe_total_yester + $profit_rvenue_yester - $order_goodslist_money_yester - $profit_expenses_yester, 2) . " ($order_zhe_total_yester + $profit_rvenue_yester - $order_goodslist_money_yester - $profit_expenses_yester)"); View::assign('order_lirun_week', round($order_zhe_total_week + $profit_rvenue_week - $order_goodslist_money_week - $profit_expenses_week, 2) . " ({$order_zhe_total_week} + $profit_rvenue_week - $order_goodslist_money_week - $profit_expenses_week)"); View::assign('order_lirun_last_week', round($order_zhe_total_last_week + $profit_rvenue_last_week - $order_goodslist_money__last_week - $profit_expenses_last_week, 2) . " ($order_zhe_total_last_week +$profit_rvenue_last_week - $order_goodslist_money__last_week - $profit_expenses_last_week)"); View::assign('order_zhe_total_month', round($order_zhe_total_month + $profit_rvenue_money - $order_goodslist_money_month - $profit_expenses_money, 2) . " ($order_zhe_total_month + $profit_rvenue_money - $order_goodslist_money_month - $profit_expenses_money)"); View::assign('order_lirun_last_month', round($order_zhe_total_last_month + $profit_rvenue_last_money - $order_goodslist_money__last_month - $profit_expenses_last_money, 2) . " ($order_zhe_total_last_month + $profit_rvenue_last_money - $order_goodslist_money__last_month- $profit_expenses_last_money)"); // 赋值给模板 View::assign('userCount', $userCount); View::assign('user_today', $user_today); View::assign('user_yesterday', $user_yesterday); View::assign('user_this_week', $user_this_week); View::assign('user_last_week', $user_last_week); View::assign('user_this_month', $user_this_month); View::assign('user_last_month', $user_last_month); // 充值订单数据 View::assign('order_today', $order_today); View::assign('order_yesterday', $order_yesterday); View::assign('order_this_week', $order_this_week); View::assign('order_last_week', $order_last_week); View::assign('order_this_month', $order_this_month); View::assign('order_last_month', $order_last_month); View::assign('consume_today', $consume_today); View::assign('consume_yesterday', $consume_yesterday); View::assign('consume_this_week', $consume_this_week); View::assign('consume_last_week', $consume_last_week); View::assign('consume_this_month', $consume_this_month); View::assign('consume_last_month', $consume_last_month); View::assign('rmb_consume_today', $rmb_consume_today); View::assign('rmb_consume_yesterday', $rmb_consume_yesterday); View::assign('rmb_consume_this_week', $rmb_consume_this_week); View::assign('rmb_consume_last_week', $rmb_consume_last_week); View::assign('rmb_consume_this_month', $rmb_consume_this_month); View::assign('rmb_consume_last_month', $rmb_consume_last_month); View::assign('ranges', $ranges); return View::fetch("Statistics/dataStand"); } public function UserStatistics() { $list = UserStatistics::order('id desc')->limit(30)->select(); View::assign('list', $list); return View::fetch('Statistics/userstatistics'); } }