From f2e839600709d875781a3211c069d4437795b700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E6=9C=A8?= <594326199@qq.com> Date: Tue, 8 Sep 2026 16:19:14 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B4=A6=E5=8D=95=E5=86=B2=E5=87=8F?= =?UTF-8?q?=E5=AD=90=E9=A1=B5=E9=9D=A2=E6=94=B9=E4=B8=BA=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=94=AE=E5=90=8E=E8=B4=B9=E7=94=A8=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=90=8C=E6=BA=90=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BillOffsetPageData 注入 OrderDataPageData,page() 改为调用 afterSales(),使账单冲减子页面与订单售后费用明细页同源取数。 - 子页面按 账单冲减.xlsx 表头展示 9 列:内部订单号、线上订单号、店铺名称、店铺编码、商品编码、款式编码、店铺商品编码、店铺款式编码、500112冲减收入。 - 新增查询、重置与“导出当前页”按钮(沿用售后页前端 CSV 导出逻辑),并展示本页 500112 冲减收入合计。 - 500112 列本地镜像暂为 null,接入真实科目来源后自动填充,无需改模板。 --- .../View/BillOffsetPageData.php | 61 +++++++------ .../pages/order-data/bill-offset.blade.php | 88 ++++++++++++++----- 2 files changed, 98 insertions(+), 51 deletions(-) diff --git a/modules/EcommerceFinance/View/BillOffsetPageData.php b/modules/EcommerceFinance/View/BillOffsetPageData.php index befdaeb2..295598fd 100644 --- a/modules/EcommerceFinance/View/BillOffsetPageData.php +++ b/modules/EcommerceFinance/View/BillOffsetPageData.php @@ -2,14 +2,13 @@ namespace Modules\EcommerceFinance\View; -use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Collection; -use Modules\EcommerceFinance\Repositories\BillOffsetMirrorRepository; +use Illuminate\Pagination\Paginator; +use Modules\EcommerceFinance\View\OrderDataPageData; use Throwable; class BillOffsetPageData { - public function __construct(private readonly BillOffsetMirrorRepository $bills) + public function __construct(private readonly OrderDataPageData $orderData) { } @@ -23,41 +22,39 @@ class BillOffsetPageData 'shop_name' => $this->text(request('shop_name')), 'sku_id' => $this->text(request('sku_id')), ]; - $page = max((int) request('page', 1), 1); - $limit = min(max((int) setting('default.list_limit', 25), 1), 100); - $rows = new LengthAwarePaginator([], 0, $limit, $page, [ - 'path' => request()->url(), - 'query' => request()->except('page'), - ]); - $summary = ['amount' => 0.0, 'count' => 0]; - $sync = ['status' => 'unavailable', 'last_succeeded_at' => null]; - $error = null; try { - $result = $this->bills->paginate($filters, $page, $limit); - $rows = new LengthAwarePaginator( - Collection::make($result['data'] ?? []), - (int) ($result['total'] ?? 0), - $limit, - $page, - ['path' => request()->url(), 'query' => request()->except('page')], - ); - $summary = $result['summary'] ?? $summary; - $sync = $result['sync'] ?? $sync; + $data = $this->orderData->afterSales(); } catch (Throwable $exception) { - if (! str_contains($exception->getMessage(), 'bill_offset_mirror_not_ready')) { - report($exception); - } - $error = '账单冲减镜像尚未完成首次同步,当前不把空镜像解释为没有数据。'; + report($exception); + $rows = new Paginator([], 25, 1, [ + 'path' => request()->url(), + 'query' => request()->except('page'), + ]); + + return [ + 'view' => 'business.pages.order-data.bill-offset', + 'billOffsetRows' => $rows, + 'billOffsetFilters' => $filters, + 'billOffsetError' => '订单售后费用数据暂时无法读取,请稍后重试。', + 'billOffsetStatus' => null, + 'billOffsetPageAmount' => 0.0, + ]; + } + + $rows = $data['orderDataRows']; + $pageAmount = 0.0; + foreach (($rows->items() ?? []) as $item) { + $pageAmount += (float) (data_get($item, 'account_500112') ?? 0); } return [ 'view' => 'business.pages.order-data.bill-offset', 'billOffsetRows' => $rows, - 'billOffsetFilters' => $filters, - 'billOffsetSummary' => $summary, - 'billOffsetSync' => $sync, - 'billOffsetError' => $error, + 'billOffsetFilters' => $data['orderDataFilters'] ?? $filters, + 'billOffsetError' => $data['orderDataError'] ?? null, + 'billOffsetStatus' => data_get($data, 'orderDataStatus.X-Caiwu-Data-Status'), + 'billOffsetPageAmount' => $pageAmount, ]; } @@ -69,9 +66,11 @@ class BillOffsetPageData private function date(mixed $value): string { $value = trim((string) $value); + if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $value, $matches) !== 1) { return ''; } + return checkdate((int) $matches[2], (int) $matches[3], (int) $matches[1]) ? $value : ''; } } diff --git a/resources/views/business/pages/order-data/bill-offset.blade.php b/resources/views/business/pages/order-data/bill-offset.blade.php index 6fe889cd..f5bd45c3 100644 --- a/resources/views/business/pages/order-data/bill-offset.blade.php +++ b/resources/views/business/pages/order-data/bill-offset.blade.php @@ -1,19 +1,21 @@ @php $rows = $billOffsetRows ?? null; $filters = $billOffsetFilters ?? []; - $summary = $billOffsetSummary ?? ['amount' => 0, 'count' => 0]; - $sync = $billOffsetSync ?? ['status' => 'unavailable', 'last_succeeded_at' => null]; + $error = $billOffsetError ?? null; + $status = $billOffsetStatus ?? null; + $pageAmount = (float) ($billOffsetPageAmount ?? 0); $columns = [ 'internal_order_no' => '内部订单号', 'online_order_no' => '线上订单号', 'shop_name' => '店铺名称', 'shop_code' => '店铺编码', 'product_code' => '商品编码', - 'style_code' => '款式编码(参考)', + 'style_code' => '款式编码', 'shop_product_code' => '店铺商品编码', 'shop_style_code' => '店铺款式编码', - 'amount' => '500112冲减收入', + 'account_500112' => '500112冲减收入', ]; + $numberFields = ['account_500112' => true]; @endphp