From 08a24f4d5a957279bfd1c6890a5187cb1b1ba35a Mon Sep 17 00:00:00 2001 From: Jing Li Date: Tue, 23 Apr 2024 11:04:27 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=A9=BE=E9=A9=B6=E8=88=B1]=20=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E7=BB=9F=E8=AE=A1,=20=E5=B9=B4=E5=BA=A6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/CockpitController.php | 77 +++++++++++++++++++++ app/Admin/routes.php | 15 ++++ app/Models/Employee.php | 6 ++ app/Models/Store.php | 6 ++ config/admin.php | 2 +- 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 app/Admin/Controllers/CockpitController.php diff --git a/app/Admin/Controllers/CockpitController.php b/app/Admin/Controllers/CockpitController.php new file mode 100644 index 0000000..83aa2c6 --- /dev/null +++ b/app/Admin/Controllers/CockpitController.php @@ -0,0 +1,77 @@ +count(); + // 员工总数 + $employeesCount = Employee::onlyOnline()->count(); + + return [ + 'stores_count' => $storesCount, + 'employees_count' => $employeesCount, + ]; + } + + /** + * 销售趋势 + */ + public function salesTrend(Request $request): array + { + return []; + } + + /** + * 彩种销售趋势 + */ + public function lotterySalesTrend(Request $request): array + { + return []; + } + + /** + * 门店销量排名 + */ + public function storeSalesRanking(Request $request): array + { + return []; + } + + /** + * 年度目标 + */ + public function yearlyGoals(Request $request): array + { + $request->validate( + rules: [ + 'year' => ['bail', 'required', 'int'], + ], + ); + + $aggregates = TaskPerformance::select([ + DB::raw('SUM(`expected_performance`) as expected_performance'), + DB::raw('SUM(`actual_performance`) as actual_performance'), + ])->whereYear(DB::raw("STR_TO_DATE(CONCAT(`month`, '-01'), '%Y-%m-%d')"), $request->input('year'))->first(); + + return [ + // 目标业绩 + 'expected_performance' => trim_zeros($aggregates['expected_performance'] ?? 0), + // 实际业绩 + 'actual_performance' => trim_zeros($aggregates['actual_performance'] ?? 0), + ]; + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 413751f..6002fa8 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -2,6 +2,7 @@ use App\Admin\Controllers\AgreementController; use App\Admin\Controllers\BaseKeywordController; +use App\Admin\Controllers\CockpitController; use App\Admin\Controllers\Complaint\ComplaintController; use App\Admin\Controllers\Complaint\FeedbackController; use App\Admin\Controllers\Finance\CommissionIncomeController; @@ -237,5 +238,19 @@ Route::group([ $router->get('workflow/logs', [WorkflowController::class, 'logs']); $router->get('tasks', [TaskController::class, 'shareList']); + + //---------------------------------- + // 驾驶舱数据统计 + //---------------------------------- + // 基础统计 + $router->get('cockpit/basic', [CockpitController::class, 'basic']); + // 销售走势 + $router->get('cockpit/sales-trend', [CockpitController::class, 'salesTrend']); + // 彩种销售走势 + $router->get('cockpit/lottery-sales-trend', [CockpitController::class, 'lotterySalesTrend']); + // 门店销量排名 + $router->get('cockpit/store-sales-ranking', [CockpitController::class, 'storeSalesRanking']); + // 年度目标 + $router->get('cockpit/yearly-goals', [CockpitController::class, 'yearlyGoals']); }); }); diff --git a/app/Models/Employee.php b/app/Models/Employee.php index fe02d8e..b69db3f 100644 --- a/app/Models/Employee.php +++ b/app/Models/Employee.php @@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Model; use Laravel\Sanctum\HasApiTokens; use Slowlyo\OwlAdmin\Models\AdminUser; use App\Enums\UserRole; +use Illuminate\Database\Eloquent\Builder; /** * 员工 @@ -44,6 +45,11 @@ class Employee extends Model implements AuthenticatableContract return EmployeeFilter::class; } + public function scopeOnlyOnline(Builder $query) + { + $query->where('employee_status', EmployeeStatus::Online); + } + public function avatar(): Attribute { return Attribute::make( diff --git a/app/Models/Store.php b/app/Models/Store.php index c7c2178..01a0115 100644 --- a/app/Models/Store.php +++ b/app/Models/Store.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Enums\BusinessStatus; use App\Traits\HasDateTimeFormatter; use EloquentFilter\Filterable; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -31,6 +32,11 @@ class Store extends Model return \App\Admin\Filters\StoreFilter::class; } + public function scopeOnlyOpen(Builder $query) + { + $query->where('business_status', BusinessStatus::Open); + } + // 店长 public function master() { diff --git a/config/admin.php b/config/admin.php index abf4eaf..ba0bc5d 100644 --- a/config/admin.php +++ b/config/admin.php @@ -57,7 +57,7 @@ return [ ], ], 'except' => [ - + '/api/cockpit/*', ], ],