Обновлены логика работы с параметром SSD в классе LaximoService и резолверах. Теперь SSD используется для получения узлов в категориях, что улучшает обработку запросов к API. Добавлено извлечение SSD узла и соответствующие изменения в логах для повышения информативности. Это повышает надежность взаимодействия с API и улучшает структуру данных.

This commit is contained in:
Bivekich
2025-07-08 13:25:46 +03:00
parent 667a581251
commit 2c2ccf8876
2 changed files with 50 additions and 18 deletions

View File

@ -1831,22 +1831,38 @@ export const resolvers = {
if (categoryId) {
console.log('🔧 Поиск узлов в категории:', categoryId)
// Для обычных категорий НЕ используем SSD - он нужен только для быстрых групп
// ИСПРАВЛЕНИЕ: Разные каталоги поддерживают разные параметры для ListUnits
try {
console.log('🔧 Пробуем ListUnits БЕЗ SSD для обычной категории...')
result = await laximoService.getListUnits(catalogCode, vehicleId, undefined, categoryId)
console.log('🔧 Пробуем ListUnits с SSD для категории...')
result = await laximoService.getListUnits(catalogCode, vehicleId, ssd, categoryId)
console.log('✅ Получено узлов в категории:', result.length)
} catch (error: any) {
console.log('⚠️ Ошибка ListUnits без SSD:', error.message)
console.log('⚠️ Ошибка ListUnits с SSD:', error.message)
// Если и без SSD не работает, пробуем получить категории вместо узлов
try {
console.log('🔧 Пробуем получить подкатегории...')
result = await laximoService.getListCategories(catalogCode, vehicleId, undefined)
// Фильтруем только подкатегории данной категории, если есть parent-child связи
console.log('✅ Получено подкатегорий:', result.length)
} catch (categoriesError: any) {
console.log('⚠️ Ошибка получения подкатегорий:', categoriesError.message)
// Если ошибка E_INVALIDPARAMETER:ssd - значит данная категория/каталог не поддерживает SSD
if (error.message.includes('E_INVALIDPARAMETER:ssd')) {
console.log('🔧 Каталог/категория не поддерживает SSD, пробуем без SSD...')
try {
result = await laximoService.getListUnits(catalogCode, vehicleId, undefined, categoryId)
console.log('✅ Получено узлов в категории (без SSD):', result.length)
} catch (noSsdError: any) {
console.log('⚠️ Ошибка ListUnits без SSD:', noSsdError.message)
// Если и без SSD не работает, значит данная категория не содержит узлов
// Возвращаем пустой массив вместо ошибки
console.log('🔧 Категория не содержит узлов, возвращаем пустой результат')
result = []
}
} else {
// Для других ошибок также пробуем без SSD
try {
console.log('🔧 Пробуем ListUnits без SSD для обычной категории...')
result = await laximoService.getListUnits(catalogCode, vehicleId, undefined, categoryId)
console.log('✅ Получено узлов в категории (без SSD):', result.length)
} catch (noSsdError: any) {
console.log('⚠️ Ошибка ListUnits без SSD:', noSsdError.message)
result = []
}
}
}
} else {

View File

@ -131,6 +131,7 @@ export interface LaximoQuickGroup {
code?: string
imageurl?: string
largeimageurl?: string
ssd?: string // ИСПРАВЛЕНИЕ: Добавляем поле SSD для узлов
}
export interface LaximoQuickDetail {
@ -1107,17 +1108,29 @@ class LaximoService {
command += `|VehicleId=${vehicleId}`
}
// 🎯 ИСПРАВЛЕНИЕ: Для категорий каталога НЕ используем SSD
// SSD используется только для QuickGroup'ов, но не для категорий
// 🎯 ИСПРАВЛЕНИЕ: Для категорий каталога требуется SSD согласно API Laximo
// Без SSD API возвращает ошибку E_INVALIDPARAMETER:ssd
if (categoryId) {
// Если указана категория, НЕ добавляем SSD - показываем ВСЕ узлы категории
command += `|CategoryId=${categoryId}`
console.log('🔧 Режим "От производителя": используем CategoryId БЕЗ SSD для получения всех узлов категории')
// SSD обязателен для ListUnits даже с CategoryId
if (ssd && ssd.trim() !== '') {
const escapedSsd = this.escapeSsdForXML(ssd)
command += `|ssd=${escapedSsd}`
console.log('🔧 Режим "От производителя": используем CategoryId с SSD')
} else {
// Если SSD отсутствует, используем пустой SSD
command += `|ssd=`
console.log('🔧 Режим "От производителя": используем CategoryId с пустым SSD')
}
} else if (ssd && ssd.trim() !== '') {
// SSD добавляем только если НЕТ CategoryId (для QuickGroup'ов)
// SSD добавляем для QuickGroup'ов
const escapedSsd = this.escapeSsdForXML(ssd)
command += `|ssd=${escapedSsd}`
console.log('🔧 Режим "Общие": используем SSD для получения узлов автомобиля')
} else {
// Всегда добавляем SSD параметр, даже если он пустой
command += `|ssd=`
console.log('🔧 Добавляем пустой SSD параметр')
}
const hmac = this.createHMAC(command)
@ -1194,6 +1207,7 @@ class LaximoService {
const code = this.extractAttribute(attributes, 'code')
const imageurl = this.extractAttribute(attributes, 'imageurl')
const largeimageurl = this.extractAttribute(attributes, 'largeimageurl')
const ssd = this.extractAttribute(attributes, 'ssd') // ИСПРАВЛЕНИЕ: Извлекаем SSD узла
const hasDetails = this.extractAttribute(attributes, 'hasdetails') === 'true'
if (unitid && name) {
@ -1203,7 +1217,8 @@ class LaximoService {
link: hasDetails,
code: code || undefined,
imageurl: imageurl || undefined,
largeimageurl: largeimageurl || undefined
largeimageurl: largeimageurl || undefined,
ssd: ssd || undefined // ИСПРАВЛЕНИЕ: Добавляем SSD узла для дальнейшего использования
}
console.log('📦 Найден узел каталога:', {
@ -1211,6 +1226,7 @@ class LaximoService {
name,
code,
imageurl: imageurl ? imageurl.substring(0, 50) + '...' : 'отсутствует',
ssd: ssd ? `${ssd.substring(0, 50)}...` : 'отсутствует', // ИСПРАВЛЕНИЕ: Показываем SSD узла
hasDetails
})
groups.push(group)