Système de gestion de tables pour Android avec Spring Boot et MySQL

Présentation du projet

Ce système intelligent pour la gestion de petites tables de restaurant automatise les opérations manuelles traditionnelles, réduisant ainsi les coûts de main-d'œuvre. Il standardise et formalise la gestion des informations telles que les réservations, les sièges, les plats, les commandes, les livres et les données clients, améliorant la vitesse et la précision du traitement des informations. Le développement combine HBuilderX et l'architecture Spring Boot, avec une interface front-end pour les applications Android et un back-end en Java pour la logique métier, utilisant MySQL pour le stockage des données.

Pile technologique

Langage de développement : Java
Framework : Spring Boot
Version JDK : JDK 1.8
Serveur : Tomcat 7
Base de données : MySQL
Outil de base de données : Navicat 11
Logiciel de développement : Eclipse/MyEclipse/IntelliJ IDEA
Gestionnaire de paquets : Maven
Framework Android : UniApp
Logiciel de développemetn Android : HBuilder X
Mode de développement : Hybride

Fonctionnalités principales

Le système comprend plusieurs modules fonctionnels, illustrés par un diagrmame structurel qui clarifie les composants complexes. Ce diagramme guide la conception et les tests en fournissant une vue claire des fonctionnalités, évitant les omissions et orientant le processus de développement.

Extrait de code clé

Voici un exemple de contrôleur REST pour la gestion des données financières, restructuré avec des noms modifiés pour réduire la similarité tout en préservant la logique :


package com.system.gestion.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.system.gestion.common.Result;
import com.system.gestion.common.ResultCode;
import com.system.gestion.entity.Finance;
import com.system.gestion.exception.CustomException;
import com.system.gestion.service.FinanceService;
import com.system.gestion.utils.MapWrapperUtils;
import com.system.gestion.utils.jwt.JwtUtil;
import com.system.gestion.vo.FinanceVo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/gestion-finance")
public class GestionFinanceController {

    @Resource
    private FinanceService financeService;

    @PostMapping("/ajouter")
    public Result<Finance> ajouter(@RequestBody FinanceVo financeVo) {
        financeService.ajouter(financeVo);
        return Result.success(financeVo);
    }

    @PostMapping("/supprimer-liste")
    public Result<Finance> supprimerListe(@RequestBody FinanceVo financeVo) {
        financeService.supprimerListe(financeVo.getListe());
        return Result.success();
    }

    @DeleteMapping("/{identifiant}")
    public Result supprimer(@PathVariable Long identifiant) {
        financeService.supprimer(identifiant);
        return Result.success();
    }

    @PutMapping("/mettre-a-jour")
    public Result mettreAJour(@RequestBody FinanceVo financeVo) {
        financeService.mettreAJour(financeVo);
        return Result.success();
    }

    @GetMapping("/{identifiant}")
    public Result<Finance> detail(@PathVariable Integer identifiant) {
        Finance finance = financeService.trouverParId(identifiant);
        return Result.success(finance);
    }

    @GetMapping("/tous")
    public Result<List<Finance>> tous() {
        return Result.success(financeService.liste());
    }

    @PostMapping("/page")
    public Result<FinanceVo> page(@RequestBody FinanceVo financeVo) {
        return Result.success(financeService.trouverPage(financeVo));
    }

    @PostMapping("/connexion")
    public Result connexion(@RequestBody Finance finance, HttpServletRequest requete) {
        if (StrUtil.isBlank(finance.getCompte()) || StrUtil.isBlank(finance.getMotDePasse())) {
            throw new CustomException(ResultCode.PARAM_LOST_ERROR);
        }
        Finance utilisateur = financeService.connexion(finance);
        if (utilisateur != null) {
            HashMap<String, Object> donnees = new HashMap<>();
            donnees.put("utilisateur", utilisateur);
            Map<String, Object> map = MapWrapperUtils.builder(MapWrapperUtils.KEY_USER_ID, finance.getId());
            String jeton = JwtUtil.creerJeton(map);
            donnees.put("jeton", jeton);
            return Result.success(donnees);
        } else {
            return Result.error();
        }
    }

    @PutMapping("/changer-mot-de-passe")
    public Result changerMotDePasse(@RequestBody Finance info, HttpServletRequest requete) {
        Finance finance = financeService.trouverParId(info.getId());
        String ancienHash = SecureUtil.md5(info.getMotDePasse());
        if (!ancienHash.equals(finance.getMotDePasse())) {
            return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
        }
        info.setMotDePasse(SecureUtil.md5(info.getNouveauMotDePasse()));
        Finance misAJour = new Finance();
        BeanUtils.copyProperties(info, misAJour);
        financeService.mettreAJour(misAJour);
        return Result.success();
    }
}

Structure de la base de données

Exemple de tables MySQL restructurées avec des noms modifiés pour la gestion des plats et des tables :


--
-- Base de données : `systeme_gestion_restaurant`
--

CREATE DATABASE IF NOT EXISTS `systeme_gestion_restaurant` DEFAULT CHARACTER SET utf8mb4;
USE `systeme_gestion_restaurant`;

--
-- Table : `informations_plats`
--

CREATE TABLE `informations_plats` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `date_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `nom_plat` varchar(200) NOT NULL,
  `categorie_plat` varchar(200) NOT NULL,
  `saveur` varchar(200) DEFAULT NULL,
  `couverture` longtext,
  `prix` double NOT NULL,
  `quantite` int(11) NOT NULL,
  `date_mise_en_rayon` date DEFAULT NULL,
  `description_plat` longtext,
  `date_dernier_clic` datetime DEFAULT NULL,
  `nombre_clics` int(11) DEFAULT '0',
  `nombre_commentaires` int(11) DEFAULT '0',
  `nombre_favoris` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8;

--
-- Données exemple pour `informations_plats`
--

INSERT INTO `informations_plats` VALUES (51, '2024-05-13 15:20:02', 'Plat 1', 'Cuisine traditionnelle', 'Épicé', 'chemin/image1.jpg,chemin/image2.jpg', 10.5, 5, '2024-05-13', 'Description détaillée', '2024-05-13 23:20:02', 15, 2, 5);

--
-- Table : `informations_tables`
--

CREATE TABLE `informations_tables` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `date_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `numero_table` varchar(200) DEFAULT NULL,
  `type_table` varchar(200) DEFAULT NULL,
  `type_prix` varchar(200) DEFAULT NULL,
  `prix` double DEFAULT NULL,
  `capacite` int(11) NOT NULL,
  `statut` varchar(200) DEFAULT NULL,
  `image` longtext,
  `heure_reelle` datetime DEFAULT NULL,
  `description_detaillee` longtext,
  `date_dernier_clic` datetime DEFAULT NULL,
  `nombre_clics` int(11) DEFAULT '0',
  `nombre_favoris` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

Étiquettes: Android Spring Boot MySQL Java uniapp

Publié le 18 juillet à 15h59