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\Services\Finance\LedgerService;
use App\Enums\CheckStatus;
use App\Models\Keyword;
use App\Models\Ledger;
use App\Traits\HasCheckActions;
use Illuminate\Http\Request;
@ -228,23 +229,61 @@ class LedgerController extends AdminController
return '上报数据';
}
protected function exportMap($row)
protected function export()
{
return [
__('finance.ledger.date') => $row['date'],
__('finance.ledger.store') => Arr::get($row, 'store.title'),
__('finance.ledger.sales') => $row['sales'],
__('finance.ledger.expenditure') => $row['expenditure'],
__('finance.ledger.new_customers') => $row['new_customers'],
__('finance.ledger.handover_amount') => $row['handover_amount'],
__('finance.ledger.ledger_amount') => $row['ledger_amount'],
__('finance.ledger.ledger_difference') => $row['ledger_difference'],
__('finance.ledger.expected_commission') => $row['expected_commission'],
__('finance.ledger.actual_commission') => $row['actual_commission'],
__('finance.ledger.expected_income') => $row['expected_income'],
__('finance.ledger.actual_income') => $row['actual_income'],
__('workflow_log.check_status') => CheckStatus::tryFrom(Arr::get($row, 'workflow.check_status'))?->text(),
__('finance.ledger.created_at') => $row['created_at'],
];
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.store') => Arr::get($row, 'store.title'),
__('finance.ledger.sales') => $row['sales'],
__('finance.ledger.expenditure') => $row['expenditure'],
__('finance.ledger.new_customers') => $row['new_customers'],
__('finance.ledger.handover_amount') => $row['handover_amount'],
__('finance.ledger.ledger_amount') => $row['ledger_amount'],
__('finance.ledger.ledger_difference') => $row['ledger_difference'],
__('finance.ledger.expected_commission') => $row['expected_commission'],
__('finance.ledger.actual_commission') => $row['actual_commission'],
__('finance.ledger.expected_income') => $row['expected_income'],
__('finance.ledger.actual_income') => $row['actual_income'],
__('workflow_log.check_status') => CheckStatus::tryFrom(Arr::get($row, 'workflow.check_status'))?->text(),
__('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'));
}
}