78 lines
2.7 KiB
PHP
78 lines
2.7 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use Carbon\CarbonImmutable;
|
||
use Illuminate\Console\Command;
|
||
use Illuminate\Database\DatabaseManager;
|
||
use Modules\EcommerceFinance\Repositories\VipshopJxOpeningBalanceRepository;
|
||
|
||
class StoreVipshopJxOpeningBalance extends Command
|
||
{
|
||
protected $signature = 'vipshop-jx:store-opening-balance
|
||
{period-end : 余额截止日期,格式 YYYY-MM-DD}
|
||
{balance : 余额金额}
|
||
{--source=唯品会结算平台历史账单累计 : 余额来源说明}
|
||
{--dry-run : 只校验,不写数据库}';
|
||
|
||
protected $description = '登记唯品会JX账户月末余额,作为后续月份期初余额的滚动基准';
|
||
|
||
public function handle(DatabaseManager $databases): int
|
||
{
|
||
$periodEnd = trim((string) $this->argument('period-end'));
|
||
$date = CarbonImmutable::createFromFormat('!Y-m-d', $periodEnd);
|
||
if ($date === false || $date->format('Y-m-d') !== $periodEnd || $date->format('Y-m-t') !== $periodEnd) {
|
||
$this->error('余额截止日期必须是有效月末,格式 YYYY-MM-DD。');
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
$rawBalance = str_replace([',', ',', '¥', '¥', ' '], '', (string) $this->argument('balance'));
|
||
if ($rawBalance === '' || ! is_numeric($rawBalance)) {
|
||
$this->error('余额金额无效。');
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
$connection = $databases->connection(
|
||
(string) config('upstream_mirrors.connection', 'business_mirror'),
|
||
);
|
||
if (! $connection->getSchemaBuilder()->hasTable(VipshopJxOpeningBalanceRepository::TABLE)) {
|
||
$this->error('唯品会JX期初余额表尚未完成迁移。');
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
$balance = number_format((float) $rawBalance, 6, '.', '');
|
||
$source = mb_substr(trim((string) $this->option('source')), 0, 255);
|
||
if ($source === '') {
|
||
$this->error('余额来源说明不能为空。');
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
if (! $this->option('dry-run')) {
|
||
$now = now();
|
||
$connection->table(VipshopJxOpeningBalanceRepository::TABLE)->updateOrInsert(
|
||
['period_end' => $periodEnd],
|
||
[
|
||
'balance' => $balance,
|
||
'source' => $source,
|
||
'imported_at' => $now,
|
||
'created_at' => $now,
|
||
'updated_at' => $now,
|
||
],
|
||
);
|
||
}
|
||
|
||
$this->table(['截止日期', '状态', '余额', '来源'], [[
|
||
$periodEnd,
|
||
$this->option('dry-run') ? 'validated' : 'succeeded',
|
||
$balance,
|
||
$source,
|
||
]]);
|
||
|
||
return self::SUCCESS;
|
||
}
|
||
}
|