ECOM Warehouse Management System


 * Enseignant : Didier Donsez
 * Etudiants M2PGI : CASAGRANDE Thierry, RICHARD David

Matériel

 * RFID + QRCode + Barcode 1D
 * USB Barcode reader
 * USB NFC Reader

Logiciels

 * Apache Felix
 * Drools Expert

Introduction
Ce projet a pour but de fournir un système permettant la gestion d'un entrepôt. Le système doit gérer les entrées et sorties de produits. Un moteur de règles permettra d'analyser les différentes opérations et pour certains évènements particuliers (par exemple un produit bientôt en rupture de stock) le manager sera notifié. Les mouvements de stock seront effectués à l'aide d'une scanette et d'un lecteur NFC. Nous avons choisi de gérer un stockage de bouteilles de vins.

Architecture
Notre système se compose de trois parties : Le "Tag System" qui permet d'utiliser le lecteur NFC pour communiquer avec le server de l'entrepôt Le "Barcode System" qui permet d'utiliser une scanette pour communiquer avec le server de l'entrepôt Le "Warehouse Server" qui permet de gérer l'entrepôt

(Schéma)

Tag System et Barcode System sont tout deux composés de deux modules :
 * Un module « Reader » (TagReader et BarcodeReader) qui permet de scanner les objets et de communiquer avec le serveur grâce à des requêtes REST
 * Un module « GUI » (TagGUI et BarcodeGUI) qui offre une interface en Swing pour utiliser le module « Reader »

Warehouse Server :
 * Une base de données pour stocker les informations des produits de l'entrepôt
 * Un module « WarehouseManager » permettant d'effectuer des opérations sur la base de données
 * Deux modules « Solver » (TagSolver et BarcodeSolver) exposant des services REST afin de récuperer les informations envoyées par les « Readers », les analyser et effectuer l'opération requise
 * Un module « ManagerNotifier » offrant la possibilité d'envoyer des emails au manager de l'entrepôt (utilisation de l'API JavaMail)
 * Un moteur de règles basé sur Drools pour implémenter une logique métier

Les différents modules étant des bundles OSGi, les systèmes devront tourner sur une plateforme OSGi.

Evolutions envisageables
L'objectif de ce projet était de réaliser les fonctionnalités suivantes :
 * Ajouter un produit grâce à un lecteur NFC
 * Ajouter un produit grâce à une scanette
 * Retirer des produits du stock grâce à un lecteur NFC
 * Retirer des produits du stock grâce à une scanette
 * Envoyer un mail au manager en cas de stock faible d'un produit
 * Envoyer un mail au manager régulièrement pour l'informer des variations de stock
 * Stocker les informations des produits dans une base de données
 * Interagir avec la base de données

Toutes les fonctionnalités ont été réalisées excepté l'envoi d'un mail au manager pour l'informer des variations de stock.

Difficultés rencontrées
L'architecture a été pensée de manière à pouvoir facilement ajouter des modules supplémentaires pour interagir avec les « Reader », en plus de l'interface graphique déjà présente. Par exemple une console web, une interface en ligne de commmande ou une interface orientée smartphone (ce qui n'est pas le cas de l'interface actuelle).

Notre système permet la gestion de bouteilles de vin. Il aurait cependant été intéressant d'offrir au manager la possibilité de gérer d'autres produits en lui proposant une gestion générique des produits stockés.

Le moteur de règles pourrait être exploité d'une meilleure manière, de nouvelles règles plus élaborées pourraient être créées.

Permettre à l'utilisateur de configurer les éventuelles options d'un modules (Mail du manager, serveur de messagerie, url et port du serveur, …)

Apports personnels
Ce projet nous a apporté de nouvelles compétences :
 * Utilisation d'une plateforme OSGi
 * Création de bundles OSGi (Notamment avec iPOJO)
 * Utilisation de Drools
 * Utilisation de REST

Manuel Utilisateur
L'utilisation de notre système est assez simple, que ce soit pour une utilisation avec la scanette ou le lecteur NFC elle se fait à travers l'interface. Cette interface permet à l'utilisateur de modifier la quantité d'un produit en ajoutant ou retirant une quantité choisie. Elle permet également d'ajouter un nouveau produit qui n'existerai pas dans la base.

Modification de la quantité d'un vin :
 * Sélectionner l'action : Ajouter ou Supprimer
 * Saisir la quantité à ajouter ou retirer
 * Scanner le produit avec le lecteur NFC ou la scanette
 * Valider le scan
 * Le produit existe :
 * Les informations et la nouvelle quantité pour le produit sont affichées
 * Le produit n'existe pas :
 * Compléter les informations concernant le produit dans le panel apparu
 * Valider les informations entrées
 * Possibilité de passer à un nouveau produit en recommençant la procédure