Architecture du système
Le système est conçu en couches modulaires pour assurer une maintenance et une évolutivité optimales. Il intègre principalement les composants suivants :
- Gestion des tâches : Création, assignation, suivi des états.
- Contrôle d'accès : Gestion basée sur le modèle RBAC (Role-Based Acess Control).
- Moteur de processus : Gestion du flux de travail via une solution telle que Flowable.
- Notifications : Alertes par email et notifications interne.
- Tableaux de bord : Visualisation des métriques de performance.
Pile technologique
Côté serveur :
- Framwork : Spring Boot 2.7.x et Spring Security
- Gestion de processus : Flowable 6.0
- Couche de persistance : Spring Data JPA avec QueryDSL
- Cache : Redis 6.x
- Messagerie : RabbitMQ 3.9
Côté client :
- Framework : Vue 3.x avec Elemant Plus
- Visualisation : ECharts 5.0
- Requêtes HTTP : Axios
Modèle de données
Les entités centrales et leurs relations sont définies ci-dessous :
CREATE TABLE employe (
id BIGINT PRIMARY KEY,
service_id BIGINT,
identifiant VARCHAR(50) UNIQUE,
mot_de_passe VARCHAR(100)
);
CREATE TABLE tache (
id BIGINT PRIMARY KEY,
cree_par BIGINT,
assigne_a BIGINT,
intitule VARCHAR(255),
etat TINYINT DEFAULT 0,
echeance DATETIME
);
CREATE TABLE validation_tache (
id BIGINT PRIMARY KEY,
tache_id BIGINT,
validateur_id BIGINT,
decision TINYINT
);
Implémentation des fonctionnalités clés
Algorithme de répartition des tâches
public List<tache> repartirTaches(List<employe> employes, List<tache> taches) {
return taches.stream()
.sorted(Comparator.comparing(Tache::getPriorite).reversed())
.map(tache -> {
Employe destinataire = employes.stream()
.min(Comparator.comparingInt(emp ->
emp.getChargeActuelle() + emp.calculeEcartCompetences(tache.getCompetencesRequises()))
).orElseThrow();
tache.setDestinataire(destinataire);
destinataire.ajouterCharge();
return tache;
}).collect(Collectors.toList());
}</tache></employe></tache>
Configuration d'un processus de validation
<processus id="validationTache" nom="Processus de validation des tâches">
<evenementDemarrage id="debut"/>
<tacheUtilisateur id="soumettreTache" nom="Soumettre la tâche"/>
<fluxSequence sourceRef="debut" cibleRef="soumettreTache"/>
<tacheUtilisateur id="approbationResponsable" nom="Approbation du responsable">
<proprietairePotentiel>
<expressionAffectationRessource>
<expressionFormelle>role:responsable</expressionFormelle>
</expressionAffectationRessource>
</proprietairePotentiel>
</tacheUtilisateur>
<fluxSequence sourceRef="soumettreTache" cibleRef="approbationResponsable"/>
</processus>
Optimisations de performance
Stratégie de mise en cache
- Données d'organisation fréquemment consultées en cache Redis.
- Cache à deux niveaux combinant Ehcache et Redis.
- Les requêtes de listes paginées sont mis en cache.
Optimisation de la base de données
- Création d'un index composite :
CREATE INDEX idx_tache_etat_echeance ON tache(etat, echeance) - Architecture lecture/écriture séparée.
- Éclatement vertical des tables pour les champs de texte volumineux.
Sécurité
- Authentification via jetons JWT.
- Contrôle d'accès basé sur les annotations :
@PreAuthorize("hasRole('ADMIN')") - Chiffrement des données sensibles.
- Protection contre les attaques CSRF.
- Audit des opérations sur les tâches.
Intégrations
- Synchronisation des comptes LDAP/Active Directory.
- Notifications via WeChat Work ou DingTalk.
- Stockage de fichiers avec OSS ou MinIO.
- Authentification unique (SSO) via CAS.
Surveillance et déploiement
Monitoring
- Administration avec Spring Boot Admin.
- Supervision des performances via Prometheus et Grafana.
- Analyse des logs avec la pile ELK.
- Traçabilité des indicateurs métier clés.
Infrastructure
- Déploiement conteneurisé avec Docker.
- Orchestration via Kubernetes.
- Intégration et déploiement continus (CI/CD).
- Stratégie de déploiement blue-green.