actionOfGetData()) { return $this->response()->success([ 'items' => $this->getLotteryTypeStatistics(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(), ]), ])) ->filterDefaultVisible() ->columns([ amis()->TableColumn('name', '彩种'), amis()->TableColumn('sales', '销量'), amis()->TableColumn('expenditure', '兑奖'), ]) ->affixRow([ ['type' => 'text', 'text' => '合计'], ['type' => 'tpl', 'text' => '${items|pick:real_sales|sum}'], ['type' => 'tpl', 'text' => '${items|pick:real_expenditure|sum}'], ]) ) ); } protected function getLotteryTypeStatistics(Request $request): array { /** @var \Illuminate\Database\Eloquent\Collection */ $lotteryTypes = Keyword::where('parent_key', 'lottery_type')->get(); /** @var \Illuminate\Database\Eloquent\Collection */ $statistics = LedgerItem::select([ 'ledger_item_type_id', DB::raw('SUM(sales) as sales'), DB::raw('SUM(expenditure) as expenditure'), ]) ->filter($request->input(), LedgerItemFilter::class) ->whereIn('ledger_item_type_id', $lotteryTypes->pluck('key')) ->groupBy('ledger_item_type_id') ->get() ->keyBy('ledger_item_type_id'); return $lotteryTypes->map(function ($lotteryType) use ($statistics) { $statistic = $statistics->get($lotteryType->key); return [ 'name' => $lotteryType->name, 'sales' => trim_zeros($statistic->sales ?? '0.00'), 'expenditure' => trim_zeros($statistic->expenditure ?? '0.00'), 'real_sales' => match($lotteryType->value) { '+' => $statistic->sales ?? '0.00', '-' => -($statistic->sales ?? '0.00'), default => 0, }, 'real_expenditure' => match($lotteryType->value) { '+' => $statistic->expenditure ?? '0.00', '-' => -($statistic->expenditure ?? '0.00'), default => 0, }, ]; })->all(); } }