From e26c40b90d9e1f7286454d08391a551d7a1805de Mon Sep 17 00:00:00 2001 From: Jing Li Date: Fri, 29 Mar 2024 15:54:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=A3=E9=87=91=E6=94=B6=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Finance/CommissionIncomeController.php | 88 +++++++++++++++++++ .../Finance/SalesStatisticController.php | 1 - app/Admin/Filters/LedgerFilter.php | 3 +- app/Admin/Filters/LedgerItemFilter.php | 2 +- app/Admin/routes.php | 3 + database/seeders/AdminPermissionSeeder.php | 9 ++ 6 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 app/Admin/Controllers/Finance/CommissionIncomeController.php diff --git a/app/Admin/Controllers/Finance/CommissionIncomeController.php b/app/Admin/Controllers/Finance/CommissionIncomeController.php new file mode 100644 index 0000000..6a6e201 --- /dev/null +++ b/app/Admin/Controllers/Finance/CommissionIncomeController.php @@ -0,0 +1,88 @@ +actionOfGetData()) { + return $this->response()->success([ + 'items' => [$this->getCommissionIncomeStatistics(request())], + ]); + } + + return $this->response()->success( + $this->baseList( + $this->baseCRUD() + ->headerToolbar([ + amis('filter-toggler')->align('right'), + ]) + ->footerToolbar([]) + ->bulkActions([]) + ->filter($this->baseFilter()->body([ + amis()->GroupControl()->mode('horizontal')->body([ + amis()->DateRangeControl('date_range', '日期') + ->valueFormat('YYYY-MM-DD') + ->columnRatio(6), + amis()->InputCityControl('region', '区域') + ->allowDistrict(false) + ->extractValue(false), + amis()->SelectControl('store_id', __('finance.ledger.store')) + ->source(admin_url('api/stores?region=${region}')) + ->labelField('title') + ->valueField('id') + ->clearable(), + ]), + ])) + ->columns([ + amis()->TableColumn('expected_commission', '预期佣金'), + amis()->TableColumn('actual_commission', '实际佣金'), + amis()->TableColumn('diff_commission', '佣金差异'), + amis()->TableColumn('expected_income', '预期收益'), + amis()->TableColumn('actual_income', '实际收益'), + amis()->TableColumn('diff_income', '收益差异'), + ]) + ) + ); + } + + protected function getCommissionIncomeStatistics(Request $request): array + { + $aggregate = Ledger::select([ + DB::raw('SUM(expenditure) as expenditure'), + DB::raw('SUM(expected_commission) as expected_commission'), + DB::raw('SUM(actual_commission) as actual_commission'), + DB::raw('SUM(expected_income) as expected_income'), + DB::raw('SUM(actual_income) as actual_income'), + ]) + ->filter($request->input(), LedgerFilter::class) + ->first(); + + $expectedCommission = $aggregate->expected_commission ?? '0'; + $actualCommission = $aggregate->actual_commission ?? '0'; + $expectedIncome = $aggregate->expected_income ?? '0'; + $actualIncome = $aggregate->actual_income ?? '0'; + + return [ + 'expected_commission' => trim_zeros($expectedCommission), + 'actual_commission' => trim_zeros($actualCommission), + 'diff_commission' => trim_zeros(bcsub($actualCommission, $expectedCommission, 2)), + 'expected_income' => trim_zeros($expectedIncome), + 'actual_income' => trim_zeros($actualIncome), + 'diff_income' => trim_zeros(bcsub($actualIncome, $expectedIncome, 2)), + ]; + } +} diff --git a/app/Admin/Controllers/Finance/SalesStatisticController.php b/app/Admin/Controllers/Finance/SalesStatisticController.php index a66fc42..bf1ac4a 100644 --- a/app/Admin/Controllers/Finance/SalesStatisticController.php +++ b/app/Admin/Controllers/Finance/SalesStatisticController.php @@ -36,7 +36,6 @@ class SalesStatisticController extends AdminController ->valueFormat('YYYY-MM-DD') ->columnRatio(6), amis()->InputCityControl('region', '区域') - ->inputClassName('w-40') ->allowDistrict(false) ->extractValue(false), amis()->SelectControl('store_id', __('finance.ledger.store')) diff --git a/app/Admin/Filters/LedgerFilter.php b/app/Admin/Filters/LedgerFilter.php index 5a80b70..6c2e6fc 100644 --- a/app/Admin/Filters/LedgerFilter.php +++ b/app/Admin/Filters/LedgerFilter.php @@ -24,11 +24,12 @@ class LedgerFilter extends ModelFilter public function region($region) { - if (! is_array($region)) { + if (array_key_exists('store_id', $this->input) || ! is_array($region)) { return; } $provinceCode = Arr::get($region, 'provinceCode'); + $cityCode = Arr::get($region, 'cityCode'); if (empty($provinceCode) && empty($cityCode)) { diff --git a/app/Admin/Filters/LedgerItemFilter.php b/app/Admin/Filters/LedgerItemFilter.php index a8d2b9e..f8c7865 100644 --- a/app/Admin/Filters/LedgerItemFilter.php +++ b/app/Admin/Filters/LedgerItemFilter.php @@ -14,7 +14,7 @@ class LedgerItemFilter extends ModelFilter public function region($region) { - if ($this->input('store_id') !== null || ! is_array($region)) { + if (array_key_exists('store_id', $this->input) || ! is_array($region)) { return; } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index faf21b0..229c78e 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -1,6 +1,7 @@ resource('ledgers', LedgerController::class); $router->post('ledgers/{ledger}/approval', [LedgerController::class, 'approval'])->name('ledgers.approval'); + // 佣金收入 + $router->get('commission-incomes', [CommissionIncomeController::class, 'index'])->name('commission_incomes.index'); // 销售统计 $router->get('sales-statistics', [SalesStatisticController::class, 'index'])->name('sales_statistics.index'); // 门店统计 diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index e8482c1..562dbde 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -148,6 +148,15 @@ class AdminPermissionSeeder extends Seeder 'resource' => ['list', 'update', 'view'], 'children' => [], ], + 'commission_incomes' => [ + 'name' => '佣金收入', + 'icon' => 'ri:money-cny-circle-line', + 'uri' => '/finance/commission-incomes', + 'resource' => false, + 'children' => [ + 'index' => '佣金收入', + ], + ], 'sales_statistics' => [ 'name' => '销售统计', 'icon' => 'ri:bar-chart-2-line',