## 任务背景 订单数据页面已完成附件表头,本任务由 renshen 接入聚水潭上游真实只读数据。 ## 任务目标 - 订单售后费用明细:按附件字段展示订单、商品、SKU 成本及售后关联数据。 - 商品推广费用明细:按商品/款式汇总推广费用。 - 不硬编码附件演示值;缺失字段保持空值或零。 ## 预计修改路径 - modules/EcommerceFinance/Repositories/OrderDataRepository.php - modules/EcommerceFinance/View/Composers/OrderDataPageComposer.php - modules/EcommerceFinance/Providers/Main.php - resources/views/business/pages/order-data/*.blade.php - tests/Unit/EcommerceFinance/OrderDataRepositoryTest.php - tests/Feature/Business/OrderDataPagesUpstreamTest.php ## 页面和路由 复用 order-data/after-sales-expenses、order-data/promotion-expenses 和 business.pages.show;不新增或修改 routes。 ## Controller / Repository 新增 OrderDataRepository 和专用 View Composer;不修改 app/Http/Controllers/Business/Pages.php。 ## 数据源、表和字段 source_key=operations_replica,数据库 JSReportReplica,schema=rpt。固定参数化只读查询使用 jst_Orders、jst_OrderItem、jst_sku、jst_skumap、jst_returnAndRefundInfo、jst_returnAndRefundItem、jst_warehouseInfo、ads_itemid_sales_cost_ratio_v2_di。字段限于订单/商品标识、时间、店铺、SKU 元数据、金额、售后数量金额及 push_fee。 ## scope - order-data.after-sales.list - order-data.promotion.list ## 权限、菜单和公共组件 复用现有页面权限、菜单、UpstreamReadOnlyQueryFactory 和 UpstreamQueryCacheFactory;不修改权限和导航。 ## 明确不修改 不修改 routes、Pages Controller、数据库迁移、上游连接配置、权限、菜单、京东钱包功能、共享数据库结构或任何上游数据。 ## 范围补充:后台快照刷新 - modules/EcommerceFinance/Services/OperationsReplicaSnapshotRefresher.php - tests/Unit/EcommerceFinance/OperationsReplicaSnapshotRefresherTest.php 刷新器仅为 order-data.after-sales.list 和 order-data.promotion.list 分派同一 OrderDataRepository 固定查询;其他 scope 继续复用现有 UpstreamBusinessInformation。 Reviewed-on: http://git.1080p.hk/WuYongJie/CaiWuXiTong/pulls/27
52 lines
1.7 KiB
PHP
52 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Modules\EcommerceFinance\Services;
|
|
|
|
use App\Business\UpstreamBusinessInformation;
|
|
use Modules\EcommerceFinance\Contracts\UpstreamSnapshotRefresher;
|
|
use Modules\EcommerceFinance\Repositories\OrderDataRepository;
|
|
|
|
/**
|
|
* 将经营分析副本库已登记的业务信息查询还原为共享快照刷新任务。
|
|
*/
|
|
class OperationsReplicaSnapshotRefresher implements UpstreamSnapshotRefresher
|
|
{
|
|
private const SOURCE = 'operations_replica';
|
|
|
|
public function __construct(
|
|
private readonly UpstreamQueryCacheFactory $caches,
|
|
private readonly UpstreamBusinessInformation $information,
|
|
private readonly OrderDataRepository $orders,
|
|
) {
|
|
}
|
|
|
|
public function sourceKey(): string
|
|
{
|
|
return self::SOURCE;
|
|
}
|
|
|
|
public function refresh(array $entry): string
|
|
{
|
|
$scope = (string) ($entry['scope'] ?? '');
|
|
$parameters = (array) ($entry['parameters'] ?? []);
|
|
|
|
return $this->caches->forSource(self::SOURCE)->refresh(
|
|
$scope,
|
|
$parameters,
|
|
fn () => match ($scope) {
|
|
'order-data.after-sales.list' => $this->orders->afterSales(
|
|
(array) ($parameters['filters'] ?? []),
|
|
(int) ($parameters['page'] ?? 1),
|
|
(int) ($parameters['limit'] ?? 25),
|
|
),
|
|
'order-data.promotion.list' => $this->orders->promotionExpenses(
|
|
(array) ($parameters['filters'] ?? []),
|
|
(int) ($parameters['page'] ?? 1),
|
|
(int) ($parameters['limit'] ?? 25),
|
|
),
|
|
default => $this->information->snapshot($scope, $parameters),
|
|
},
|
|
);
|
|
}
|
|
}
|