52 lines
1.9 KiB
PHP
52 lines
1.9 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use Illuminate\Console\Command;
|
||
use Modules\EcommerceFinance\Services\StoreReportMirrorSynchronizer;
|
||
use Throwable;
|
||
|
||
/**
|
||
* 店铺维度报表的「销量」汇总:业绩明细「收入金额 + 优惠金额 + 冲减金额 + 退款金额」
|
||
* 按「店铺名称 + 发生日期」预汇总。
|
||
*
|
||
* 业绩明细同步(store-receipt:order-match:sync)结束后会自动刷新一次;
|
||
* 这个命令用于单独重跑(例如补数据或按最新代码强制重建)。
|
||
*/
|
||
class SyncStoreReportPaidSales extends Command
|
||
{
|
||
protected $signature = 'business-mirror:sync-store-report-paid-sales
|
||
{--force : 忽略来源指纹,强制重建销量汇总}';
|
||
|
||
protected $description = '把业绩明细的收入/优惠/冲减/退款金额按店铺和发生日期汇总,供店铺维度报表销量列读取';
|
||
|
||
public function handle(StoreReportMirrorSynchronizer $synchronizer): int
|
||
{
|
||
try {
|
||
$result = $synchronizer->syncPaidSales((bool) $this->option('force'));
|
||
} catch (Throwable $exception) {
|
||
$this->error('店铺维度报表销量汇总失败:' . $exception->getMessage());
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
if ($result['status'] === 'skipped') {
|
||
$this->warn('镜像里还没有业绩明细表,销量汇总未执行。');
|
||
|
||
return self::SUCCESS;
|
||
}
|
||
|
||
if ($result['status'] !== 'succeeded') {
|
||
$this->error('店铺维度报表销量汇总失败,页面继续读取上一版数据。');
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
$this->info($result['changed']
|
||
? sprintf('销量汇总已重建:业绩明细 %d 行 → 汇总 %d 行。', $result['source_rows'], $result['stored_rows'])
|
||
: sprintf('业绩明细没有变化,沿用当前销量汇总(%d 行)。', $result['stored_rows']));
|
||
|
||
return self::SUCCESS;
|
||
}
|
||
}
|