'工单编号', 'online_order_no' => '线上订单号', 'shop_name' => '店铺名称', 'task_remark' => '任务备注', 'seller_remark' => '卖家备注', 'payee_name' => '信誉账号名称', ]; public const COLUMNS = [ 'completed_at' => '完成时间', 'started_at' => '发起时间', 'work_order_no' => '工单编号', 'status' => '工单状态', 'platform' => '平台', 'shop_name' => '店铺名称', 'online_order_no' => '线上订单号', 'internal_order_no' => '内部单号', 'task_remark' => '任务备注', 'seller_remark' => '卖家备注', 'actual_paid_amount' => '实付金额', 'task_payment' => '任务付款金额', 'task_freight' => '任务快递费', 'task_commission' => '任务佣金', 'jingxi_price_diff' => '京喜差价', 'task_deduction' => '任务扣款费用', 'task_empty_package_fee' => '任务空包费', 'reimbursement_amount' => '最终报销金额', 'payee_name' => '信誉账号名称', 'payee_account' => '信誉账号', 'payee_bank' => '信誉账号开户行', 'payee_mobile' => '收款人手机号', 'initiator' => '发起人', 'executor' => '执行人', 'completer' => '完成人', 'product_code' => '商品编码', 'product_name' => '商品名称', 'product_quantity' => '商品数量', 'platform_product_id' => '平台商品ID', 'erp_order_status' => 'ERP订单状态', 'platform_order_status' => '平台订单状态', 'paid_at' => '付款时间', ]; public const MONEY_COLUMNS = Repository::MONEY_FIELDS; public function __construct(private readonly Repository $repository) {} /** @return array */ public function filters(): array { return $this->baseFilters(); } /** * @param array $filters * @param list>|null $rows * @return \Generator> */ public function rows(array $filters, ?array $rows = null): \Generator { foreach ($rows ?? $this->repository->rows($filters['month']) as $row) { if ($this->matchesText($row, $filters)) { yield $row; } } } public function page(): array { $filters = $this->filters(); $page = max(1, (int) request('page', 1)); $sync = $this->repository->syncStatus(); $summary = ['count' => 0, 'task_payment' => 0, 'reimbursement_amount' => 0, 'task_commission' => 0, 'task_empty_package_fee' => 0]; $items = []; $error = $this->syncError($sync); if ($error === null) { try { foreach ($this->rows($filters) as $row) { if ($summary['count'] >= ($page - 1) * self::PER_PAGE && count($items) < self::PER_PAGE) { $items[] = $row; } $summary['count']++; foreach (['task_payment', 'reimbursement_amount', 'task_commission', 'task_empty_package_fee'] as $key) { $summary[$key] += self::cents($row[$key]); } } } catch (\Throwable $exception) { report($exception); $error = '种菜报销数据暂时无法读取,请稍后重试。'; $summary = array_fill_keys(array_keys($summary), 0); $items = []; } } return [ 'view' => 'business.pages.billing-transactions.planting-reimbursements', 'plantingFilters' => $filters, 'plantingWindow' => Repository::window($filters['month']), 'plantingMonths' => Repository::months(), 'plantingSummary' => $summary, 'plantingSync' => $sync, 'plantingError' => $error, 'plantingRows' => new LengthAwarePaginator($items, $summary['count'], self::PER_PAGE, $page, [ 'path' => request()->url(), 'query' => request()->except('page'), ]), ]; } }