Avez-vous commandé la livraison? Comment Crossroads livre 6 000 commandes par jour

Les gens aiment la livraison. Pour une somme modique, vous achetez la possibilité d'obtenir les bons produits sans quitter votre maison: la nourriture de votre restaurant préféré, des meubles surdimensionnés, un livre que vous vouliez lire depuis longtemps, et même n'importe quoi. Et l'augmentation du nombre de services pour une livraison rapide de tout dans le monde ne fait que confirmer cette thèse. Oui, et pour les magasins, c'est un plus - il s'est associé à toute livraison de marchandises à la porte et a augmenté son chèque.

Chez «Crossroads», nous avons notre propre livraison. Pour une personne de l'extérieur, le processus de livraison d'un magasin à une maison ressemble à ceci:

  1. J'ai choisi quelque chose sur le site et je l'ai mis dans le panier.
  2. J'ai entré l'adresse et payé la commande.
  3. Le magasin a rapidement donné l'ordre au courrier.
  4. Le courrier a rendu la commande.

En fait, tout est un peu plus compliqué. Je m'appelle Vitaliy, je suis le chef du département développement, et aujourd'hui je vais vous dire comment tout fonctionne pour nous. Et sur quoi.



Deux applications sont responsables de la stabilité du processus - une vitrine et une application mobile utilisateur. Tout est classique avec la vitrine - l'acheteur visite le site, passe du temps à choisir des produits et à remplir le panier, à examiner les fiches produits. La dernière étape ici consiste à passer une commande. Après cela, la commande est transférée pour un traitement ultérieur au back-office.

En général, le back office d'une boutique en ligne est un système dans lequel de nombreuses actions sont effectuées sur les marchandises: nous prescrivons la participation des marchandises à certaines promotions, y attachons des bannières, mettons en évidence les zones de marque et plus encore. Bien sûr, les commandes sont traitées ici. Lorsque l'acheteur achève le processus de commande et que la commande arrive au back office, celle-ci doit être confirmée. Cela se produit automatiquement si nous connaissons déjà cet acheteur, ou par l'opérateur en mode manuel selon le schéma habituel "Bonjour, avez-vous commandé quelque chose ici, confirmez, les données sont-elles correctes?" Et ainsi de suite. Et ici, la participation du back-office au processus de formation de la livraison est déjà terminée, la commande est confirmée, le statut passe de «Traitée» à «En cours». Une commande dans WMS (où elle est réservée, collectée, les marchandises commandées qui ne sont pas disponibles et qui sont faites sur commande auprès du fournisseur) et en même temps, elle peut commencer à être acheminée par les logisticiens. Dans l'ensemble, le WMS et la logistique sont des systèmes indépendants qui fonctionnent en parallèle avec les commandes.

En attendant, en stock


Le système WMS est une combinaison de nos logiciels, entrepôts, employés de ces entrepôts et appareils, ce qui simplifie considérablement la vie de ces employés. Un petit terminal, qui est monté sur le poignet d'un employé, vous permet d'assembler rapidement une commande dans l'ordre souhaité.



La cohérence est importante car nous livrons les commandes à nos clients dans des boîtes spéciales Crossroads. Et avec une boîte une chose - c'est rectangulaire. Comme la plupart des boîtes.

Par conséquent, il est nécessaire de respecter deux conditions en même temps - et de remplir la boîte elle-même autant que possible afin que le client ne reçoive pas deux boîtes qui ne sont qu'à moitié pleines (c'est à la fois peu économique, respectueux de l'environnement et généralement étrange), et remplissez la boîte selon le principe «de lourd à léger» ". Le système prend en compte la taille du produit et son emballage. Connaissant cela et les paramètres de la boîte, il est possible de former des commandes afin que la boîte soit remplie au maximum. Cela vous permet également de vous débarrasser des situations où la voiture du courrier semble être partie pour remplacer tous les 100% chargés de boîtes, mais à moitié vides.

Et le système écrit pour le magasinier dans quel ordre collecter la commande. Peu de gens veulent obtenir une boîte dans laquelle un bon employé d'entrepôt a déposé trois douzaines d'œufs au fond, en posant soigneusement sur 10 paquets de lait et quelques kilogrammes de légumes, par exemple. Avec du lait, c'est sûr, tout ira bien, ce qui ne peut pas être dit des œufs. Toutes sortes de cookies fragiles sont également toujours au top.



De plus, vous devez suivre les règles du voisinage des marchandises. Disons que ce sera plutôt triste pour vous si vous avez commandé 2 variétés de pommes, de petits pains et de poisson, et tout cela ne puait pas avec du poisson, mais avec du détergent en général, car tout est arrivé dans une boîte. Par conséquent, la nourriture - séparément, les produits chimiques ménagers - séparément. Le voisinage des marchandises est déterminé par les normes SanPiN, soit dit en passant. Et nous les observons. D'un point de vue humain, il s'agit d'un modèle logique et unique. Du point de vue de l'entrepôt, ce sont des variables supplémentaires lors de la construction de la route du magasinier.

Le système prend tout en compte et construit un itinéraire, grâce auquel l'employé recueille la commande dans l'ordre souhaité - le terminal le conduit au rayonnage correct. Si vous exagérez, il semble que le travail de la partie cliente de l'application soit le suivant: «Guy, va au B4, prends 5 paquets de farine avec eux, mets-les tout en bas de la boîte. Puis à partir de A2, prenez le lait. Non, pas celui-ci, c'est dans cette cellule. »



Une fois qu'ils ont fait une demande pour les gars de l'entrepôt, il était nécessaire de faire une demande pour les coursiers. Il permet non seulement de créer des itinéraires, mais également d'imprimer rapidement des chèques et de noter les nouveaux statuts des commandes. Eh bien, les métriques, où n'y a-t-il pas de métriques - nous voyons où se trouve un coursier particulier, il s'inscrit normalement dans le calendrier ou non, il a imprimé un chèque lors du transfert de la commande à l'acheteur ou non, et ainsi de suite.



Soit dit en passant, pourquoi n'imprimons-nous pas immédiatement les chèques: lorsque nous apportons nos boîtes au client, il peut refuser n'importe quel produit pour quelque raison que ce soit. Par exemple, il a réussi à acheter des glaces pour lui-même, ou a fait bouillir deux litres de lait et a décidé que le poisson et les concombres marinés pour ce soir n'étaient qu'une idée. En général, il peut y avoir de nombreuses raisons de rejeter une position, y compris un «changement d'avis». Par conséquent, le courrier supprime les postes que le client a refusés et imprime le chèque final.

Sous le capot


Nous écrivons nos applications sur Swift et Kotlin (iOS et Android, respectivement). Dans ce cas, tout le backend tourne en PHP, nous avons décidé de faire la base de données sur Postgres, pour le broker nous avons Rabbit mq.

Oui, il est clair qu'en 2019, tout le monde fait tout d'abord sur le principe du mobile, mais il s'est avéré que le site est néanmoins plus proche et plus cher. Il travaille chez Lavarel. En ce qui concerne les microservices, nous commençons également à peine à bouger, donc en ce moment, le site et l'application sont un monolithe si lourd qui se trouve et attend qu'il soit déjà retiré pour les microservices.

Soit dit en passant, le Postgres mentionné se présente comme un goulot d'étranglement, nous allons donc changer quelque chose. Nous utilisons activement des équilibreurs, car la charge sur les systèmes peut prendre des valeurs très différentes.

Tout cela est commodément situé sur les serveurs sous cette forme:
16 serveurs d'applications avec PHP-FPM et Postgres, Postgres a 1 maître et 4 esclaves. Comme vous pouvez le voir, pas de vélos. L'ensemble du back-office est parfaitement intégré aux systèmes internes - WMS, entrepôt, logistique, comptabilité et marketing.

Nous avons lancé l'application mobile et le site Web en 2017. Aujourd'hui, la charge moyenne sur le système est d'environ 6 000 commandes par jour. D'une part, ce n'est pas beaucoup, d'autre part, il vaut toujours la peine de considérer que cela n'est pas réparti uniformément pendant 24 heures, les gens ne commandent pas de nourriture 24h / 24, il y a aussi une jarretière pour une activité standard pendant les heures de travail. Les requêtes PHP elles-mêmes (y compris l'API) sont environ 70 000 en 5 minutes.

Chemin de commande


Dès que la commande est assemblée avec succès à l'entrepôt et prête à partir en voyage, elle est acheminée. Nous avons maintenant commencé à utiliser Yandex.Routing pour cela - un bon produit qui nous permet de construire rapidement l'itinéraire optimal pour les conducteurs en tenant compte des situations de circulation - les embouteillages, la météo, les sols, les barrières et autres joies. Cela nous permet d'économiser du carburant, afin que les coursiers ne coupent pas les cercles autour de la ville. Le conducteur a un itinéraire clair, une liste de l'ordre dans lequel les commandes doivent être transportées, les commandes elles-mêmes sont placées dans la voiture de manière à être livrées dans le même ordre.



Nous avons fait la demande de courriers pour Android, comme je l'ai déjà écrit, sur Kotlin. C'est en cela que le routage est cousu, la possibilité de communiquer avec le client (nous cachons le numéro du client, le chauffeur n'a que le bouton "Appeler"), la possibilité de modifier la commande et de supprimer quelque chose, d'imprimer le chèque, et aussi de payer pour la commande.



Séparément, à propos de la télémétrie: l'application prend tout en compte: le temps de trajet, l'heure d'arrivée au client et l'heure de départ, cela aide grandement à construire beaucoup de rapports analytiques et à suivre la logistique. Par exemple, le coursier ne bouge pas pendant un certain temps, mais en général il devrait - ils le contactent et spécifient si tout va bien. Le lien avec la logistique à cet égard est très important, car il y a des situations où le courrier, par exemple, à 15 heures devrait être à une adresse et à 15 h 30 - à une autre. Mais à la première adresse, il y avait un accroc dû au contrôle d'accès dans la cour, une barrière ou une porte, j'ai dû passer 10 minutes supplémentaires pour contacter le client, afin que le client contacte la sécurité et ainsi de suite, vous savez comment cela se passe.



Mais du point de vue du client à 15h30 ce n'est jamais du tout son problème, il attend la commande à l'heure indiquée. Par conséquent, le chauffeur contacte les logisticiens, ils surveillent de près spécifiquement sa télémétrie, et ils contactent eux-mêmes le prochain client, spécifiant l'intervalle de livraison en raison d'un accrochage sur la barrière. Bien sûr, en tout cas, c'est triste quand le courrier est en retard. Mais quand il est en retard et ne l'avertit pas - c'est encore pire.

En général, si c'est basique, c'est ainsi que nous travaillons. Vous pouvez être plus intéressé à en savoir plus sur le fonctionnement de l'entrepôt et du WMS, ou sur les applications pour les chauffeurs ou les employés de l'entrepôt, ou sur le routage, alors écrivez-en simplement dans les commentaires, et je ferai un article séparé.

Merci d'avoir lu.

Source: https://habr.com/ru/post/fr484220/


All Articles