Обновлены модели и компоненты для управления поставками и расходниками. Добавлены новые поля в модели SupplyOrder и соответствующие резолверы для поддержки логистики. Реализованы компоненты уведомлений для отображения статуса логистических заявок и поставок. Оптимизирован интерфейс для улучшения пользовательского опыта, добавлены логи для диагностики запросов. Обновлены GraphQL схемы и мутации для поддержки новых функциональных возможностей.

This commit is contained in:
Veronika Smirnova
2025-08-03 17:04:29 +03:00
parent a33adda9d7
commit 8407ca397c
34 changed files with 5382 additions and 1795 deletions

View File

@ -43,6 +43,9 @@ export const typeDefs = gql`
# Расходники фулфилмента (материалы для работы фулфилмента)
myFulfillmentSupplies: [Supply!]!
# Расходники селлеров на складе фулфилмента (только для фулфилмента)
sellerSuppliesOnWarehouse: [Supply!]!
# Заказы поставок расходников
supplyOrders: [SupplyOrder!]!
@ -52,6 +55,9 @@ export const typeDefs = gql`
# Логистика организации
myLogistics: [Logistics!]!
# Логистические партнеры (организации-логисты)
logisticsPartners: [Organization!]!
# Поставки Wildberries
myWildberriesSupplies: [WildberriesSupply!]!
@ -206,16 +212,23 @@ export const typeDefs = gql`
id: ID!
status: SupplyOrderStatus!
): SupplyOrderResponse!
# Назначение логистики фулфилментом
assignLogisticsToSupply(
supplyOrderId: ID!
logisticsPartnerId: ID!
responsibleId: ID
): SupplyOrderResponse!
# Действия поставщика
supplierApproveOrder(id: ID!): SupplyOrderResponse!
supplierRejectOrder(id: ID!, reason: String): SupplyOrderResponse!
supplierShipOrder(id: ID!): SupplyOrderResponse!
# Действия логиста
logisticsConfirmOrder(id: ID!): SupplyOrderResponse!
logisticsRejectOrder(id: ID!, reason: String): SupplyOrderResponse!
# Действия фулфилмента
fulfillmentReceiveOrder(id: ID!): SupplyOrderResponse!
@ -228,12 +241,19 @@ export const typeDefs = gql`
createProduct(input: ProductInput!): ProductResponse!
updateProduct(id: ID!, input: ProductInput!): ProductResponse!
deleteProduct(id: ID!): Boolean!
# Валидация и управление остатками товаров
checkArticleUniqueness(article: String!, excludeId: ID): ArticleUniquenessResponse!
checkArticleUniqueness(
article: String!
excludeId: ID
): ArticleUniquenessResponse!
reserveProductStock(productId: ID!, quantity: Int!): ProductStockResponse!
releaseProductReserve(productId: ID!, quantity: Int!): ProductStockResponse!
updateProductInTransit(productId: ID!, quantity: Int!, operation: String!): ProductStockResponse!
updateProductInTransit(
productId: ID!
quantity: Int!
operation: String!
): ProductStockResponse!
# Работа с категориями
createCategory(input: CategoryInput!): CategoryResponse!
@ -535,6 +555,11 @@ export const typeDefs = gql`
}
# Типы для расходников
enum SupplyType {
FULFILLMENT_CONSUMABLES # Расходники фулфилмента (купленные фулфилментом для себя)
SELLER_CONSUMABLES # Расходники селлеров (принятые от селлеров для хранения)
}
type Supply {
id: ID!
name: String!
@ -550,6 +575,9 @@ export const typeDefs = gql`
currentStock: Int
usedStock: Int
imageUrl: String
type: SupplyType!
sellerOwner: Organization # Селлер-владелец (для расходников селлеров)
shopLocation: String # Местоположение в магазине фулфилмента
createdAt: DateTime!
updatedAt: DateTime!
organization: Organization!
@ -594,8 +622,8 @@ export const typeDefs = gql`
totalItems: Int!
fulfillmentCenterId: ID
fulfillmentCenter: Organization
logisticsPartnerId: ID!
logisticsPartner: Organization!
logisticsPartnerId: ID
logisticsPartner: Organization
items: [SupplyOrderItem!]!
createdAt: DateTime!
updatedAt: DateTime!
@ -612,21 +640,21 @@ export const typeDefs = gql`
}
enum SupplyOrderStatus {
PENDING # Ожидает одобрения поставщика
CONFIRMED # Устаревший статус (для обратной совместимости)
IN_TRANSIT # Устаревший статус (для обратной совместимости)
SUPPLIER_APPROVED # Поставщик одобрил, ожидает подтверждения логистики
LOGISTICS_CONFIRMED # Логистика подтвердила, ожидает отправки
SHIPPED # Отправлено поставщиком, в пути
DELIVERED # Доставлено и принято фулфилментом
CANCELLED # Отменено (любой участник может отменить)
PENDING # Ожидает одобрения поставщика
CONFIRMED # Устаревший статус (для обратной совместимости)
IN_TRANSIT # Устаревший статус (для обратной совместимости)
SUPPLIER_APPROVED # Поставщик одобрил, ожидает подтверждения логистики
LOGISTICS_CONFIRMED # Логистика подтвердила, ожидает отправки
SHIPPED # Отправлено поставщиком, в пути
DELIVERED # Доставлено и принято фулфилментом
CANCELLED # Отменено (любой участник может отменить)
}
input SupplyOrderInput {
partnerId: ID!
deliveryDate: DateTime!
fulfillmentCenterId: ID # ID фулфилмент-центра для доставки
logisticsPartnerId: ID! # ID логистической компании (обязательно)
logisticsPartnerId: ID # ID логистической компании (опционально - может выбрать селлер или фулфилмент)
items: [SupplyOrderItemInput!]!
notes: String # Дополнительные заметки к заказу
consumableType: String # Классификация расходников: FULFILLMENT_CONSUMABLES, SELLER_CONSUMABLES
@ -642,6 +670,7 @@ export const typeDefs = gql`
ourSupplyOrders: Int! # Расходники фулфилмента
sellerSupplyOrders: Int! # Расходники селлеров
incomingSupplierOrders: Int! # 🔔 Входящие заказы для поставщиков
logisticsOrders: Int! # 🚚 Логистические заявки для логистики
incomingRequests: Int!
total: Int!
}
@ -819,6 +848,8 @@ export const typeDefs = gql`
firstName: String!
lastName: String!
middleName: String
fullName: String
name: String
birthDate: DateTime
avatar: String
passportPhoto: String