main
Jing Li 2024-05-28 19:14:08 +08:00
parent 1c5f2ff203
commit c373199541
1 changed files with 56 additions and 17 deletions

View File

@ -5,6 +5,7 @@ namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController; use App\Admin\Controllers\AdminController;
use App\Admin\Services\Finance\LedgerService; use App\Admin\Services\Finance\LedgerService;
use App\Enums\CheckStatus; use App\Enums\CheckStatus;
use App\Models\Keyword;
use App\Models\Ledger; use App\Models\Ledger;
use App\Traits\HasCheckActions; use App\Traits\HasCheckActions;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -228,9 +229,30 @@ class LedgerController extends AdminController
return '上报数据'; return '上报数据';
} }
protected function exportMap($row) protected function export()
{ {
return [ admin_abort_if(!class_exists('\Rap2hpoutre\FastExcel\FastExcel'), __('admin.export.please_install_laravel_excel'));
// 默认在 storage/app/ 下
$path = sprintf('%s-%s.xlsx', $this->exportFileName(), date('YmdHis'));
// 导出本页和导出选中项都是通过 _ids 查询
$ids = request()->input('_ids');
// listQuery() 为列表查询条件,与获取列表数据一致
$data = $this->service->listQuery()
->with(['items'])
->when($ids, fn($query) => $query->whereIn($this->service->primaryKey(), explode(',', $ids)))
->get();
/** @var \Illuminate\Database\Eloquent\Collection */
$lotteryTypes = Keyword::where('parent_key', 'lottery_type')->oldest('sort')->get();
try {
fastexcel($data->loadMissing(['items']))->export(storage_path('app/' . $path), function($row) use ($lotteryTypes) {
$ledgerItems = collect($row['items'])->keyBy('ledger_item_type_id');
$data = [
__('finance.ledger.date') => $row['date'], __('finance.ledger.date') => $row['date'],
__('finance.ledger.store') => Arr::get($row, 'store.title'), __('finance.ledger.store') => Arr::get($row, 'store.title'),
__('finance.ledger.sales') => $row['sales'], __('finance.ledger.sales') => $row['sales'],
@ -246,5 +268,22 @@ class LedgerController extends AdminController
__('workflow_log.check_status') => CheckStatus::tryFrom(Arr::get($row, 'workflow.check_status'))?->text(), __('workflow_log.check_status') => CheckStatus::tryFrom(Arr::get($row, 'workflow.check_status'))?->text(),
__('finance.ledger.created_at') => $row['created_at'], __('finance.ledger.created_at') => $row['created_at'],
]; ];
foreach ($lotteryTypes as $lotteryType) {
$ledgerItem = $ledgerItems->get($lotteryType->key);
$data = array_merge($data, [
"{$lotteryType->name}-销售" => trim_zeros($ledgerItem->sales ?? 0),
"{$lotteryType->name}-兑奖" => trim_zeros($ledgerItem->expenditure ?? 0),
]);
}
return $data;
});
} catch (\Throwable $e) {
admin_abort(__('admin.action_failed'));
}
return $this->response()->success(compact('path'));
} }
} }