From 2448e4e4c7b8c4ea25d1b910f93e509870c0eafe Mon Sep 17 00:00:00 2001 From: renshen <1005457301@qq.com> Date: Fri, 30 Oct 2026 14:34:38 +0800 Subject: [PATCH] feat: load order profit page from shared mirror --- .../Repositories/OrderProfitRepository.php | 6 ++- .../View/OrderProfitPageData.php | 21 +++++++-- .../pages/order-data/order-profit.blade.php | 2 +- .../Feature/Business/OrderProfitPageTest.php | 43 +++++++++++++++++++ .../OrderProfitRepositoryTest.php | 4 +- 5 files changed, 68 insertions(+), 8 deletions(-) diff --git a/modules/EcommerceFinance/Repositories/OrderProfitRepository.php b/modules/EcommerceFinance/Repositories/OrderProfitRepository.php index 403ac846..e872b107 100644 --- a/modules/EcommerceFinance/Repositories/OrderProfitRepository.php +++ b/modules/EcommerceFinance/Repositories/OrderProfitRepository.php @@ -98,7 +98,11 @@ class OrderProfitRepository return ['rows' => [], 'has_more' => false]; } $query = $this->connection()->table(self::TABLE)->whereIn('_mirror_key', $ids); - $query = $this->filtered($query, array_replace($filters, ['order_no' => '']), $columns); + $query = $this->filtered( + $query, + array_replace($filters, ['order_no' => '', 'from' => '', 'to' => '']), + $columns, + ); } else { $query = $this->filtered($this->connection()->table(self::TABLE), $filters, $columns); } diff --git a/modules/EcommerceFinance/View/OrderProfitPageData.php b/modules/EcommerceFinance/View/OrderProfitPageData.php index 01bc2d1c..0e2e212b 100644 --- a/modules/EcommerceFinance/View/OrderProfitPageData.php +++ b/modules/EcommerceFinance/View/OrderProfitPageData.php @@ -72,13 +72,26 @@ class OrderProfitPageData } } + $orderNo = $this->batchText($input['order_no'] ?? null); + $sku = $this->batchText($input['sku_id'] ?? null); + $hasOtherFilters = $orderNo !== '' || $sku !== '' || $shops !== []; + $datesWereSubmitted = array_key_exists('from', $input) || array_key_exists('to', $input); + $reset = ! empty($input['reset']); + $from = $this->date($input['from'] ?? null); + $to = $this->date($input['to'] ?? null); + + if (! $datesWereSubmitted && ! $reset && ! $hasOtherFilters) { + $from = now()->subDays(6)->toDateString(); + $to = now()->toDateString(); + } + return [ - 'from' => $this->date($input['from'] ?? null), - 'to' => $this->date($input['to'] ?? null), - 'order_no' => $this->batchText($input['order_no'] ?? null), + 'from' => $from, + 'to' => $to, + 'order_no' => $orderNo, 'shop_name' => implode("\n", array_keys($shops)), 'shop_names' => array_keys($shops), - 'sku_id' => $this->batchText($input['sku_id'] ?? null), + 'sku_id' => $sku, ]; } diff --git a/resources/views/business/pages/order-data/order-profit.blade.php b/resources/views/business/pages/order-data/order-profit.blade.php index 301c9b3a..97daaac4 100644 --- a/resources/views/business/pages/order-data/order-profit.blade.php +++ b/resources/views/business/pages/order-data/order-profit.blade.php @@ -94,7 +94,7 @@ 查询 - + 重置 diff --git a/tests/Feature/Business/OrderProfitPageTest.php b/tests/Feature/Business/OrderProfitPageTest.php index 694384ae..7e0d85e0 100644 --- a/tests/Feature/Business/OrderProfitPageTest.php +++ b/tests/Feature/Business/OrderProfitPageTest.php @@ -8,6 +8,49 @@ use Tests\Feature\FeatureTestCase; class OrderProfitPageTest extends FeatureTestCase { + public function test_order_profit_page_loads_recent_rows_without_filters(): void + { + $repository = Mockery::mock(OrderProfitRepository::class); + $repository->shouldReceive('status')->once()->andReturn([ + 'ready' => true, + 'initial_completed_at' => '2026-10-01 00:00:00', + 'last_succeeded_at' => '2026-10-30 10:00:00', + 'last_error_code' => null, + ]); + $repository->shouldReceive('shopNames')->once()->andReturn([]); + $repository->shouldReceive('paginate')->once() + ->with( + Mockery::on(static fn (array $filters): bool => $filters['from'] === now()->subDays(6)->toDateString() + && $filters['to'] === now()->toDateString()), + 1, + 25, + ) + ->andReturn([ + 'has_more' => false, + 'rows' => [[ + 'shop_name' => '最近订单店铺', + 'online_order_no' => 'RECENT-ORDER-1', + 'internal_order_no' => '9001', + 'cost_amount' => 12.0, + 'refund_amount' => 0.0, + 'platform_subsidy' => 0.0, + 'product_quantity' => 1.0, + 'product_amount' => 20.0, + 'items' => [], + ]], + ]); + $this->app->instance(OrderProfitRepository::class, $repository); + + $this->loginAs()->get(route('business.pages.show', [ + 'section' => 'order-profit', + 'page' => 'order-profit-list', + ])) + ->assertOk() + ->assertSeeText('RECENT-ORDER-1') + ->assertSeeText('最近订单店铺') + ->assertSeeText('12.00'); + } + public function test_order_profit_page_renders_aggregated_order_and_source_details(): void { $repository = Mockery::mock(OrderProfitRepository::class); diff --git a/tests/Unit/EcommerceFinance/OrderProfitRepositoryTest.php b/tests/Unit/EcommerceFinance/OrderProfitRepositoryTest.php index f683f31f..c4508e07 100644 --- a/tests/Unit/EcommerceFinance/OrderProfitRepositoryTest.php +++ b/tests/Unit/EcommerceFinance/OrderProfitRepositoryTest.php @@ -147,8 +147,8 @@ class OrderProfitRepositoryTest extends TestCase { $repository = app(OrderProfitRepository::class); $result = $repository->paginate([ - 'from' => '', - 'to' => '', + 'from' => '2026-10-01', + 'to' => '2026-10-31', 'order_no' => '26092142570188', 'shop_name' => '', 'sku_id' => '',