connection = $databases->connection( (string) config('upstream_mirrors.connection', 'business_mirror'), ); } /** * 按商品编码批量取重量(kg)。 * * @param list $skuCodes * @return array 商品编码 => 重量(kg) */ public function weightsBySkuCodes(array $skuCodes): array { $codes = []; foreach ($skuCodes as $code) { $code = trim((string) $code); if ($code !== '') { $codes[$code] = $code; } } $codes = array_values($codes); if ($codes === [] || ! $this->available()) { return []; } try { $latest = $this->connection->table(self::PRODUCT_TABLE) ->where('sku_type', 'normal') ->whereIn('sku_id', $codes) ->groupBy('sku_id') ->select('sku_id') ->selectRaw('MAX(autoid) AS autoid'); return $this->connection->table(self::PRODUCT_TABLE . ' as s') ->joinSub($latest, 'latest', function ($join): void { $join->on('latest.sku_id', '=', 's.sku_id') ->on('latest.autoid', '=', 's.autoid'); }) ->pluck('s.weight', 's.sku_id') ->map(static fn (mixed $weight): float => (float) $weight) ->all(); } catch (Throwable) { return []; } } private function available(): bool { try { $schema = Schema::connection($this->connection->getName()); return $schema->hasTable(self::PRODUCT_TABLE) && $schema->hasColumn(self::PRODUCT_TABLE, 'weight') && $schema->hasColumn(self::PRODUCT_TABLE, 'sku_id'); } catch (Throwable) { return false; } } }