option('period-end')); $mapPath = trim((string) $this->option('store-map')); if ($periodEnd === '' || $mapPath === '') { $this->error('缺少 --period-end 或 --store-map。'); return self::FAILURE; } $realMapPath = realpath($mapPath); if ($realMapPath === false || ! is_file($realMapPath) || ! is_readable($realMapPath)) { $this->error('店铺映射文件不存在或不可读。'); return self::FAILURE; } $storeMap = json_decode((string) file_get_contents($realMapPath), true, 512, JSON_THROW_ON_ERROR); if (! is_array($storeMap)) { $this->error('店铺映射文件必须是 JSON 对象。'); return self::FAILURE; } try { $result = $importer->import( array_values((array) $this->argument('files')), $periodEnd, $storeMap, (bool) $this->option('dry-run'), ); } catch (InvalidArgumentException|RuntimeException $exception) { $this->error($exception->getMessage()); return self::FAILURE; } catch (Throwable $exception) { report($exception); $this->error('唯品会MP期初余额导入失败,详细原因已记录到受保护日志。'); return self::FAILURE; } $this->table(['截止日期', '状态', '店铺数', '明细行数', '余额合计'], [[ $result['period_end'], $result['status'], $result['store_count'], $result['row_count'], $result['balance_total'], ]]); return self::SUCCESS; } }