//gitee.com/likeshop_gitee/likeadmin // | github下载:https=>//github.com/likeshop-github/likeadmin // | 访问官网:https=>//www.likeadmin.cn // | likeadmin团队 版权所有 拥有最终解释权 // +---------------------------------------------------------------------- // | author=> likeadminTeam // +---------------------------------------------------------------------- namespace app\admin\controller; use app\admin\logic\statistic\ProductStatisticLogic; use app\admin\logic\statistic\TradeStatisticLogic; use app\admin\logic\statistic\UserStatisticLogic; use app\admin\logic\WorkbenchLogic; use DateInterval; use DateTime; /** * 工作台 * Class WorkbenchCotroller * @package app\admin\controller */ class WorkbenchController extends BaseAdminController { /** * @notes 工作台 * @author 乔峰 * @date 2021/12/29 17=>01 */ public function index() { $result = WorkbenchLogic::index(); return $this->data($result); } //首页订单 public function order() { $data = [ "yAxis" => [ "maxnum" => 35, "maxprice" => "111374.41" ], "legend" => [ "订单金额", "订单数" ], "xAxis" => [ "2024-05-06", "2024-05-07", "2024-05-08", "2024-05-09", "2024-05-10", "2024-05-11", "2024-05-12", "2024-05-13", "2024-05-14", "2024-05-15", "2024-05-16", "2024-05-17", "2024-05-18", "2024-05-19", "2024-05-20", "2024-05-21", "2024-05-22", "2024-05-23", "2024-05-24", "2024-05-25", "2024-05-26", "2024-05-27", "2024-05-28", "2024-05-29", "2024-05-30", "2024-05-31", "2024-06-01", "2024-06-02", "2024-06-03", "2024-06-04" ], "series" => [ [ "name" => "订单金额", "type" => "bar", "itemStyle" => [ "normal" => [ "color" => [ "x" => 0, "y" => 0, "x2" => 0, "y2" => 1, "colorStops" => [ [ "offset" => 0, "color" => "#69cdff" ], [ "offset" => 0.5, "color" => "#3eb3f7" ], [ "offset" => 1, "color" => "#1495eb" ] ] ] ] ], "data" => [ 171.29, 167.46, 1455.65, 45.47, 542.69, 216.58, 228.82, 34.24, 8249.85, 664.23, 8586.24, 10.19, 90.19, 105.4, 62.59, 1051.34, 160.84, 2437.68, 111374.41, 12161.05, 189, 4831.65, 1276.31, 582.4, 906.02, 597, 0.08, 771.16, 10262.64, 278.67 ] ], [ "name" => "订单数", "type" => "line", "itemStyle" => [ "normal" => [ "color" => [ "x" => 0, "y" => 0, "x2" => 0, "y2" => 1, "colorStops" => [ [ "offset" => 0, "color" => "#6fdeab" ], [ "offset" => 0.5, "color" => "#44d693" ], [ "offset" => 1, "color" => "#2cc981" ] ] ] ] ], "data" => [ 5, 8, 15, 6, 13, 5, 3, 4, 7, 14, 12, 6, 2, 2, 6, 8, 19, 18, 13, 30, 2, 35, 12, 5, 20, 2, 2, 7, 13, 6 ], "yAxisIndex" => 1 ] ], "pre_cycle" => [ "count" => [ "data" => 170 ], "price" => [ "data" => "1333354.63" ] ], "cycle" => [ "count" => [ "data" => 268, "percent" => 57.65, "is_plus" => 1 ], "price" => [ "data" => "157451.54", "percent" => 88.19, "is_plus" => -1 ] ] ]; return $this->data($data); } //-------------------------------商品统计---------------------------------------// /** * 商品概况 */ public function get_basic() { $startTime = $this->request->get('start_time'); //开始时间 $endTime = $this->request->get('end_time'); //结束时间 if (empty($startTime)) { //如果没有传开始时间,则默认获取最近7天的数据 $startTime = strtotime(date('Y-m-d')); $endTime = $startTime + 86400; } $where = [ ['create_time', 'between', [$startTime, $endTime]] ]; $data = WorkbenchLogic::get_basic($where); return $this->data($data); } /** * 商品趋势 */ public function get_trend() { $dates = []; $today = new DateTime(); $thirtyDaysAgo = new DateTime($today->format('Y-m-d')); $thirtyDaysAgo->modify('-30 days'); for ($i = 0; $i < 31; $i++) { $date = new DateTime($thirtyDaysAgo->format('Y-m-d')); $date->modify('+' . $i . ' days'); $dates[] = $date->format('Y-m-d'); } $data = [ "xAxis" => $dates, "series" => [ [ "name" => "商品浏览量", "data" => WorkbenchLogic::store_visit_count($dates), "type" => "line", "smooth" => "true", "yAxisIndex" => 1 ], [ "name" => "商品访客量", "data" => WorkbenchLogic::store_visit_user($dates), "type" => "line", "smooth" => "true", "yAxisIndex" => 1 ], [ "name" => "支付金额", "data" => WorkbenchLogic::payPrice($dates), "type" => "bar" ], [ "name" => "退款金额", "data" => WorkbenchLogic::refundPrice($dates), "type" => "bar" ] ] ]; return $this->data($data); } /** * 获取商品排名数据 */ public function get_product_ranking() { $date=$this->request->get('date',''); $where['create_time'] = $this->getDay($date); $data=(new ProductStatisticLogic())->get_product_ranking($where); return $this->success('',$data); } //-------------------------------用户统计---------------------------------------// /** * 获取用户概况 */ public function get_user_basic() { $date=$this->request->get('date',''); $where['create_time'] = $this->getDay($date); $data=(new UserStatisticLogic())->getBasic($where); return $this->data($data); } /** * 获取用户趋势 */ public function get_user_trend() { $date=$this->request->get('date',''); $where['create_time'] = $this->getDay($date); $data=(new UserStatisticLogic())->getTrend($where); return $this->data($data); } //-------------------------------交易统计---------------------------------------// //当日订单金额 public function top_trade() { $logic=(new TradeStatisticLogic()); $leftToday = $logic->getTopLeftTrade(['create_time' => 'today']); $leftyestoday = $logic->getTopLeftTrade(['create_time' => 'yestoday']); $rightOne = $logic->getTopRightOneTrade(); $rightTwo = $logic->getTopRightTwoTrade(); $right = ['today' => $rightOne, 'month' => $rightTwo]; $totalleft = [$leftToday, $leftyestoday]; $left = []; foreach ($totalleft as $k => $v) { $left['name'] = "当日订单金额"; $left['x'] = $v['curve']['x']; $left['series'][$k]['money'] = round($v['total_money'], 2); $left['series'][$k]['value'] = array_values($v['curve']['y']); } $data['left'] = $left; $data['right'] = $right; return $this->data($data); } //交易趋势 public function bottom_trade() { $date=$this->request->get('date',''); $data=(new TradeStatisticLogic())->getBottomTrade(['data'=>$this->getDay($date)]); return $this->data($data); } /** * 格式化时间 * @param $time * @return string */ public function getDay($time) { if (strstr($time, '-') !== false) { [$startTime, $endTime] = explode('-', $time); if (!$startTime && !$endTime) { return date("Y/m/d", strtotime("-30 days", time())) . '-' . date("Y/m/d", time()); } else { return $startTime . '-' . $endTime; } } else { return date("Y/m/d", strtotime("-30 days", time())) . '-' . date("Y/m/d", time()); } } }