48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Business\ProductMonthlyWeightedAverageReporter;
|
|
use Carbon\CarbonImmutable;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
class ReportProductMonthlyWeightedAverage extends Command
|
|
{
|
|
protected $signature = 'product:monthly-weighted-average:report
|
|
{month : 报表月份,例如 2026-09}
|
|
{--result-json= : 将结果写入指定 JSON 文件}';
|
|
|
|
protected $description = '输出商品月加权平均单价结果简报与差异分类';
|
|
|
|
public function handle(ProductMonthlyWeightedAverageReporter $reporter): int
|
|
{
|
|
$month = CarbonImmutable::parse($this->argument('month'))->startOfMonth();
|
|
$report = $reporter->build(
|
|
(string) config('upstream_mirrors.connection', 'business_mirror'),
|
|
$month,
|
|
);
|
|
|
|
$path = trim((string) $this->option('result-json'));
|
|
if ($path !== '') {
|
|
File::ensureDirectoryExists(dirname($path));
|
|
File::put(
|
|
$path,
|
|
json_encode(
|
|
$report,
|
|
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT,
|
|
) . PHP_EOL,
|
|
);
|
|
}
|
|
|
|
$this->line($reporter->brief($report));
|
|
if (($report['status'] ?? null) === 'review_required') {
|
|
$this->warn('存在待人工复核差异,完整清单已写入结果 JSON。');
|
|
}
|
|
|
|
return ($report['status'] ?? null) === 'missing'
|
|
? self::FAILURE
|
|
: self::SUCCESS;
|
|
}
|
|
}
|