generated from liutk/owl-admin-base
[驾驶舱] 基础统计, 年度统计
parent
8f84d61d50
commit
08a24f4d5a
|
|
@ -0,0 +1,77 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Employee;
|
||||||
|
use App\Models\Store;
|
||||||
|
use App\Models\TaskPerformance;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class CockpitController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 基础数据统计
|
||||||
|
*/
|
||||||
|
public function basic(): array
|
||||||
|
{
|
||||||
|
// 门店总数
|
||||||
|
$storesCount = Store::onlyOpen()->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),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
use App\Admin\Controllers\AgreementController;
|
use App\Admin\Controllers\AgreementController;
|
||||||
use App\Admin\Controllers\BaseKeywordController;
|
use App\Admin\Controllers\BaseKeywordController;
|
||||||
|
use App\Admin\Controllers\CockpitController;
|
||||||
use App\Admin\Controllers\Complaint\ComplaintController;
|
use App\Admin\Controllers\Complaint\ComplaintController;
|
||||||
use App\Admin\Controllers\Complaint\FeedbackController;
|
use App\Admin\Controllers\Complaint\FeedbackController;
|
||||||
use App\Admin\Controllers\Finance\CommissionIncomeController;
|
use App\Admin\Controllers\Finance\CommissionIncomeController;
|
||||||
|
|
@ -237,5 +238,19 @@ Route::group([
|
||||||
$router->get('workflow/logs', [WorkflowController::class, 'logs']);
|
$router->get('workflow/logs', [WorkflowController::class, 'logs']);
|
||||||
|
|
||||||
$router->get('tasks', [TaskController::class, 'shareList']);
|
$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']);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||||
use Laravel\Sanctum\HasApiTokens;
|
use Laravel\Sanctum\HasApiTokens;
|
||||||
use Slowlyo\OwlAdmin\Models\AdminUser;
|
use Slowlyo\OwlAdmin\Models\AdminUser;
|
||||||
use App\Enums\UserRole;
|
use App\Enums\UserRole;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工
|
* 员工
|
||||||
|
|
@ -44,6 +45,11 @@ class Employee extends Model implements AuthenticatableContract
|
||||||
return EmployeeFilter::class;
|
return EmployeeFilter::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeOnlyOnline(Builder $query)
|
||||||
|
{
|
||||||
|
$query->where('employee_status', EmployeeStatus::Online);
|
||||||
|
}
|
||||||
|
|
||||||
public function avatar(): Attribute
|
public function avatar(): Attribute
|
||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ namespace App\Models;
|
||||||
use App\Enums\BusinessStatus;
|
use App\Enums\BusinessStatus;
|
||||||
use App\Traits\HasDateTimeFormatter;
|
use App\Traits\HasDateTimeFormatter;
|
||||||
use EloquentFilter\Filterable;
|
use EloquentFilter\Filterable;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
@ -31,6 +32,11 @@ class Store extends Model
|
||||||
return \App\Admin\Filters\StoreFilter::class;
|
return \App\Admin\Filters\StoreFilter::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeOnlyOpen(Builder $query)
|
||||||
|
{
|
||||||
|
$query->where('business_status', BusinessStatus::Open);
|
||||||
|
}
|
||||||
|
|
||||||
// 店长
|
// 店长
|
||||||
public function master()
|
public function master()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'except' => [
|
'except' => [
|
||||||
|
'/api/cockpit/*',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue