diff --git a/application/admin/controller/Orderplan.php b/application/admin/controller/Orderplan.php index ea9c1ea..eb1f378 100644 --- a/application/admin/controller/Orderplan.php +++ b/application/admin/controller/Orderplan.php @@ -9,6 +9,7 @@ use app\admin\model\AuthGroupAccess; use app\admin\model\order\Invoice; use app\admin\model\OrderAbnormal; use app\admin\model\OrderDispatch; +use app\admin\model\orders\Dispatchlog; use app\admin\model\Worker; use app\admin\model\WorkerItem; use app\common\controller\Backend; @@ -65,6 +66,7 @@ class Orderplan extends Backend $order_count = $this->getOrderCount(); $order_rank = $this->orderRank(); $item_rank = $this->itemRank(); + $order_doing = $this->orderDoing(); $this->success(data: [ 'top' => $top, 'lines' => $lines, @@ -73,6 +75,7 @@ class Orderplan extends Backend 'order_count' => $order_count, 'order_rank' => $order_rank, 'item_rank' => $item_rank, + 'order_doing' => $order_doing, ]); } @@ -92,10 +95,10 @@ class Orderplan extends Backend $worker = Worker::where('status', 1)->count(); if ($res) { return [ - 'total' => $res->total, - 'count' => $res->count, - 'performance' => $res->performance, - 'worker' => $worker, + 'total' => $res->total ?? 0, + 'count' => $res->count ?? 0, + 'performance' => $res->performance ?? 0, + 'worker' => $worker ?? 0, ]; } @@ -110,8 +113,21 @@ class Orderplan extends Backend private function getLine() { $build = new \app\admin\model\Order(); + $start = now()->modify('-14 days')->format('Y-m-d'); - $end_at = now()->format('Y-m-d'); + $end_at = now()->format('Y-m-d 23:29:59'); + $filter ['daterange'] = request()->get('daterange'); + if (!empty($filter['daterange'])) { + $arr = explode(' - ', $filter['daterange']); + if (trim($arr[0])) { + $start = trim($arr[0]); + } + if (trim($arr[1])) { + $end_at = trim($arr[1]) . ' 23:29:59'; + } + } + + $this->buildDate($build); $build->field([ 'DATE(create_time) day', 'sum(total) total', @@ -202,8 +218,18 @@ class Orderplan extends Backend private function buildDate($build, $table_name = null) { $start = now()->modify('-14 days')->format('Y-m-d'); - $end_at = now()->format('Y-m-d'); - + $end_at = now()->format('Y-m-d 23:29:59'); + $filter ['daterange'] = request()->get('daterange'); + if (!empty($filter['daterange'])) { + $arr = explode(' - ', $filter['daterange']); + if (trim($arr[0])) { + $start = trim($arr[0]); + } + if (trim($arr[1])) { + $end_at = trim($arr[1]) . ' 23:29:59'; + } + } +// dd([$start, $end_at]); if ($table_name) { $build->where($table_name . '.create_time', 'between', [$start, $end_at]); } else { @@ -401,7 +427,6 @@ class Orderplan extends Backend $end_at = now()->format('Y-m-d 23:59:59'); - $build = new \app\admin\model\Order(); $build->whereBetween('create_time', [$start, $end_at]); @@ -426,7 +451,7 @@ class Orderplan extends Backend $rank [] = [ 'name' => $da->item->title ?? '', 'count' => $da->count ?? 0, - 'rate' => $this->mydiv($da->count ?? 0,$total) + 'rate' => $this->mydiv($da->count ?? 0, $total) ]; } @@ -437,14 +462,14 @@ class Orderplan extends Backend 'count(id) count', ]) ->group('name') - ->order('count','desc') + ->order('count', 'desc') ->limit(6) ->select(); $area = []; foreach ($res as $re) { $re = $re->getData(); $re['name'] = $this->getProvinceByCode($re['name']); - $re['rate'] = $this->mydiv($da->count ?? 0,$total); + $re['rate'] = $this->mydiv($da->count ?? 0, $total); $area [] = $re; } @@ -454,6 +479,35 @@ class Orderplan extends Backend ]; } + private function orderDoing() + { + + $build = new \app\admin\model\Order(); + + $dispatch = $build->where('status',10)->count('id'); + + $build = new OrderDispatch(); + + $build->whereIn('status',[ + OrderDispatch::STATUS_TOGET, + OrderDispatch::STATUS_PLANIT, + OrderDispatch::STATUS_CLOCK, + ]); + $data = $build->field([ + 'count(if(status=0,1,null)) toget', + 'count(if(status=20,1,null)) plan', + 'count(if(status=30,1,null)) doing', + ])->select(); + + + return [ + 'dispatch' => $dispatch, + 'toget' => $data[0]->toget ?? 0, + 'plan' => $data[0]->plan ?? 0, + 'doing' => $data[0]->doing ?? 0, + ]; + + } private function prepareEchartsBarData(array $data, string $startDate, string $endDate): array @@ -487,7 +541,7 @@ class Orderplan extends Backend $rate[] = $total ? number_format($performance / $total * 100, 2) : '0'; } - return [ + $data = [ 'xAxis' => $xAxis, 'series' => [ 'total' => $series_total, @@ -496,6 +550,56 @@ class Orderplan extends Backend 'rate' => $rate, ], ]; + + + // 判断是否需要按月归档 + if (count($data['xAxis']) > 31) { + $monthly = []; + + foreach ($data['xAxis'] as $i => $date) { + $month = date('Y-m', strtotime($date)); + + if (!isset($monthly[$month])) { + $monthly[$month] = [ + 'total' => 0, + 'count' => 0, + 'performance' => 0, + 'rate_sum' => 0, + 'rate_count' => 0, + ]; + } + + $monthly[$month]['total'] += $data['series']['total'][$i]; + $monthly[$month]['count'] += $data['series']['count'][$i]; + $monthly[$month]['performance'] += $data['series']['performance'][$i]; + + // 处理 rate(字符串,转换为 float) + $rate = (float)$data['series']['rate'][$i]; + $monthly[$month]['rate_sum'] += $rate; + $monthly[$month]['rate_count'] += 1; + } + + // 重新生成 xAxis 和 series + $data['xAxis'] = array_keys($monthly); + $data['series'] = [ + 'total' => [], + 'count' => [], + 'performance' => [], + 'rate' => [] + ]; + + foreach ($monthly as $month => $values) { + $data['series']['total'][] = $values['total']; + $data['series']['count'][] = $values['count']; + $data['series']['performance'][] = $values['performance']; + + // 平均 rate,保留 2 位小数 + $averageRate = $values['rate_count'] > 0 ? $values['rate_sum'] / $values['rate_count'] : 0; + $data['series']['rate'][] = number_format($averageRate, 2); + } + } + + return $data; } @@ -544,11 +648,12 @@ class Orderplan extends Backend } - private function mydiv($a , $b){ + private function mydiv($a, $b) + { if ($b == 0) { return '0'; - }else{ - return (int)($a / $b * 100); + } else { + return (int)($a / $b * 100); } } diff --git a/application/admin/view/orderplan/index.html b/application/admin/view/orderplan/index.html index 372ff91..b08271f 100644 --- a/application/admin/view/orderplan/index.html +++ b/application/admin/view/orderplan/index.html @@ -31,6 +31,18 @@
¥8848
+loading
今日收款
¥8848
+loading
本月收款
8848
+loading
本月订单数
8848
+loading
本月新增师傅数
8
+loading
今日退款数
88
+loading
本月退款数
88
+loading
今日取消订单数
88
+loading
本月取消订单数