Dans les articles de blog précédents, nous avons rempli toutes les fonctions du module utilisateur, donc dans les prochains articles de blog, nous terminerons le module de fonction de gestion de classification.
Examinons d'abord les points fonctionnels de la gestion de la classification dans le backend
La gestion des catégories backend est en fait une gestion des produits, qui est principalement divisé en ajout de catégories, de mise à jour des noms de catégorie, d'obtention de nœuds de catégorie au même niveau et d'obtention des identifiants de catégorie et des catégories de sous-nœuds.
1. Module de gestion de la classification - mise en œuvre des fonctions de catégorie ajoutée
Regardons d'abord la couche de service
// Ajouter une catégorie publique ServerResponse AddCategory (String categoryName, Integer Parentid) {if (parentid == null || stringUtils.isblank (catégorieName)) {return serverResponse.createByErrormaSage ("Paramètre Erreur"); } Catégorie catégorie = nouvelle catégorie (); category.setName (catégorieName); category.setParentId (parentid); catégorie.setstatus (true); int rowCount = catégoriemapper.insert (catégorie); if (rowCount> 0) {return ServerResponse.CreateBySUceShMessage ("Ajouter une catégorie avec succès"); } return ServerResponse.CreateByErrorMessage ("Ajouter la catégorie Échec"); }Il est relativement simple d'ajouter des catégories. C'est un peu similaire à la logique d'enregistrement précédente. Tout d'abord, vérifiez si le nom de catégorie et le parentid transmis à partir de l'avant existent. S'il n'existe pas, l'erreur de paramètre est invitée. Sinon, continuez à utiliser les instances Javabean pour augmenter la catégorie. De même, après l'avoir ajouté avec Javabean, insérez le résultat dans la base de données. Si le nombre de lignes efficaces renvoyées est supérieure à 0, la catégorie est ajoutée avec succès, sinon la catégorie est ajoutée échoue.
Regardons la couche de contrôleur
/ ** * Gérer la catégorie de catégorie-ADD * @param catégoriename * @param parentid * @param session * @return * / @requestmapping (value = "add_category.do") @ResponseBody Public ServerResponse AddCategory (String categoryName, @RequestParam (value = "matelid", defaultValue = "0") (Utilisateur) session.getAttribute (const.current_user); if (user == null) {return ServerResponse.createByErrOCODEMessage (ResponseCode.Need_Login.getcode (), "L'utilisateur n'est pas connecté, veuillez vous connecter"); } // Vérifiez s'il s'agit d'un administrateur if (iUserService.CheckAdmin (utilisateur) .isSuccess ()) {return iCateGoryService.AddCategory (catégorieName, parentid); } else {return ServerResponse.CreateByErrorMessage ("Aucune opération d'autorisation, veuillez vous connecter à l'administrateur"); }}Tout d'abord, il existe un endroit différent avec la valeur de la valeur de la mise en évidence, qui n'a qu'un seul nom d'interface, mais ne spécifie pas la méthode de demande d'interface, car le module de gestion de catégorie est une gestion d'arrière-plan par l'administrateur du site Web et appartient au module d'arrière-plan. Pour les modules d'arrière-plan, ils sont utilisés par les employés internes de l'entreprise et n'ont pas besoin d'être divulgués au monde extérieur, afin que vous puissiez simplement utiliser la méthode GET par défaut à demander.
La logique générale de la gestion des fonctions d'arrière-plan est de vérifier d'abord si l'utilisateur est dans l'état de connexion. Si l'utilisateur est dans l'état de connexion, vérifiez si le actuellement connecté est un administrateur de site Web. S'il ne s'agit pas d'un administrateur, vous n'avez pas le droit d'effectuer des opérations de gestion pertinentes. S'il s'agit d'un administrateur, vous pouvez effectuer une gestion des antécédents. Dans la logique de la gestion des fonctions d'arrière-plan, il suffit généralement de renvoyer directement les résultats du traitement de la méthode dans la couche de service.
Dans la méthode ci-dessus, il est nécessaire de déterminer l'état de connexion de l'utilisateur, il est donc nécessaire d'introduire les services utilisateur, puis d'appeler directement la méthode correspondante.
2. Module de gestion de classification - mise en œuvre de la fonction de nom de catégorie de mise à jour
Regardons d'abord la couche de service
// mise à jour du nom de catégorie public ServerResponse UpdateCategoryName (String categoryName, Integer categoryId) {if (catégoryId == null || stringUtils.isblank (catégorieName)) {return serverResponse.CreateByErrormaSage ("Update Catégory Paramètre Error"); } Catégorie catégorie = nouvelle catégorie (); catégorie.setid (catégorieID); category.setName (catégorieName); int rowcount = catégoriemapper.updatebyPrimaryKeySelective (catégorie); if (rowCount> 0) {return ServerResponse.CreateBySUceShMessage ("Updage Catégorie Nom Success"); } return ServerResponse.createByErrormaSage ("Mise à jour le nom de la catégorie Échec"); }C'est exactement la même chose que la logique de traitement précédente, et je n'entrerai pas dans les détails ici.
Regardons la couche de contrôleur
/ ** * Gérer le nom de catégorie Catégorie Update * @Param catégoriename * @param catégorieid * @param session * @return * / @RequestMapping (value = "update_category_name") @ResponseBody public ServerResponse UpdateCategoryName (string categoryName, Integer categoryid, HTTPSession Session) {user user = (Utilisateur) session.getAttribute (const.current_user); if (user == null) {return ServerResponse.createByErrOCODEMessage (ResponseCode.Need_Login.getcode (), "L'utilisateur n'est pas connecté, veuillez vous connecter"); } if (iUserService.CheckAdmin (User) .isSucCess ()) {return IcateGoryService.UpDateCategoryName (catégorieName, catégorieId); } else {return ServerResponse.CreateByErrorMessage ("Aucune opération d'autorisation, veuillez vous connecter à l'administrateur"); }}C'est exactement la même chose que la logique de traitement précédente, et je n'entrerai pas dans les détails ici.
3. Module de gestion de classification-mise en place de la fonction d'obtenir le nœud de catégorie horizontale (recherche de produits backend)
Couche de service
// Parent-Level Query Catégorie Node public ServerResponse <list <catégories >> getChildRenparalleCategory (Integer categoryID) {list <catégories> catégorieList = catégorieMapper.SelectCategoryChildRenByParentid (catégorieID); if (CollectionUtils.Isempty (catégorieList)) {logger.info ("La sous-catégorie de la classification actuelle n'a pas été trouvée"); } return ServerResponse.CreateBySuccess (catégorieList); }Lors du traitement d'un ensemble d'informations sur le produit, il utilise souvent la méthode de collecte. Son application est différente en fonction du type de collection. Ici, j'utilise des collections de liste. Premièrement, étant donné que les collections de liste sont pratiques pour les opérations de traversée et la gestion. Parce qu'il s'agit de gérer les produits, le type générique de la collection de liste est spécifié en tant que catégorie et la requête d'identification du produit est effectuée via la méthode SelectCategoryChildRenByParentId de catégoriemapper. Dans un jugement logique, utilisez la classe d'outils CollectionUtils encapsulée en Java pour déterminer si le résultat de retour de la collection est vide. S'il est vide, imprimez une ligne de journaux, sinon l'exécution réussie du résultat de catégorieList peut être renvoyée. L'enregistreur ici est un outil d'impression de journal que vous encapslez. Permettez-moi de mentionner brièvement son utilisation.
private org.slf4j.Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);
Notez que ce journaliste utilise le package SLF4J, n'exportez pas le mauvais package, puis LoggerFactory.GetLogger (classe), vous devez passer un paramètre, qui est la classe qui doit actuellement imprimer le journal, tel que categoryServiceImpl.class ici. Vous pouvez voir les résultats d'impression de la connexion dans la console.
Couche de contrôleur
/ ** * Gérer les nœuds de catégorie de la même catégorie * @param categoryid * @param session * @return * / @requestmapping (value = "get_category.do") @ResponseBody public ServerResponse getChildRenparalleCategory (@RequestParam (value = "catégories" (Utilisateur) session.getAttribute (const.current_user); if (user == null) {return ServerResponse.createByErrOCODEMessage (ResponseCode.Need_Login.getcode (), "L'utilisateur n'est pas connecté, veuillez vous connecter"); } if (iUserService.CheckAdmin (User) .isSuccess ()) {return iCateGoryService.getChildRenparalleCategory (catégorieId); } else {return ServerResponse.CreateByErrorMessage ("Aucune opération d'autorisation, veuillez vous connecter à l'administrateur"); }}Pour des raisons pratiques, lorsque la quantité de marchandises est 0, pas besoin de gérer la catégorie de produit, de sorte que la valeur defaultValue = "0" annotée par RequestParam est utilisée pour spécifier la valeur par défaut d'un paramètre. Le reste de la logique est exactement le même qu'auparavant.
4. Module de gestion de la classification-RetRevey La mise en œuvre des fonctions ID de catégorie et de sous-nœuds
Regardez la couche de service
Public ServerResponse <list <Integer>> selectCategoryAndChildRenById (Integer categoryId) {set <catégories> catégorieSet = sets.newHashSet (); FindChildCategory (catégorieId, catégorieset); List <Integer> categoryIdList = lists.newArrayList (); if (catégoryId! = null) {for (catégorie categoryitem: categorySet) {catégoryIdList.add (catégoryitem.getId ()); }} return ServerResponse.CreateBySuccess (catégorieIdList); } // Algorithme récursif pour calculer l'ensemble privé de nœud enfant <catégorie> findChildCategory (Integer categoryId, set <catégories> categorySet) {catégorie catégorie = catégoriemapper.SelectByprimaryKey (catégorieId); if (catégorie! = null) {categorySet.add (catégorie); } // trouver la liste des nœuds enfants <catégories> catégorieList = catégoriemapper.SelectCategoryChildRenByParentId (catégorieID); for (catégorie categoryItem: categoryList) {findChildCategory (catégoryItem.getId (), catégorieSet); } return categorySet; }La méthode principale est SelectCategoryAndChildRenDBYID, et la méthode auxiliaire est FindChildCategory, qui calcule les nœuds enfants par récursivement. Dans la méthode auxiliaire, les informations sur l'identification du produit sont interrogées via CategoryId, et ajoutées à la collection d'ensembles, puis les nœuds enfants du produit sont traversés via la boucle Foreach, et enfin le catégoriet est renvoyé. Dans la méthode principale, la méthode auxiliaire est appelée, l'ID de produit et les nœuds enfants sont trouvés, puis l'ID de produit et les nœuds enfants sont placés dans la collection de liste, puis le résultat que nous voulons est traversé via la boucle ForEach, et enfin la catégorielist est directement renvoyée.
Couche de contrôleur
/ ** * Gérer la catégorie ID de catégorie et le nœud enfant * @param catégorieid * @param session * @return * / @RequestMapping (value = "get_deep_category.do") @ResponseBody ServerPonse GetCategoryAndDepchildRencategory (@RequestParam (value = "categoryid", defaultValue = "0") INTEGER, HTEGERID, HTTPES session) {user user = (user) session.getAttribute (const.current_user); if (user == null) {return ServerResponse.createByErrOCODEMessage (ResponseCode.Need_Login.getcode (), "L'utilisateur n'est pas connecté, veuillez vous connecter"); } if (iUserService.CheckAdmin (User) .isSuccess ()) {return IcateGoryService.SelectCategoryAndChildRendRed (catégorieId); } else {return ServerResponse.CreateByErrorMessage ("Aucune opération d'autorisation, veuillez vous connecter à l'administrateur"); }}C'est exactement la même chose que le traitement logique précédent de l'obtention des nœuds de même niveau dans la catégorie, donc je ne vais pas entrer dans les détails ici.
5. Module utilisateur supplémentaire
Dans le module de gestion des catégories d'arrière-plan, une méthode pour vérifier si l'utilisateur actuellement connecté est un administrateur est utilisé. Ceci est écrit dans le module utilisateur. J'ai oublié de l'écrire avant, donc je ferai un supplément ici.
Couche de service du module utilisateur
// Background utilisateur - Vérifiez s'il s'agit d'un administrateur public ServerResponse CheckAdmin (utilisateur utilisateur) {if (user! = Null && user.getRole (). IntValue () == const.role.role_admin) {return serverResponse.createBySuccress (); } return serverResponse.createByError (); }Parce qu'il est lié aux administrateurs, il n'a besoin que d'effectuer un traitement logique dans la couche de service et n'a pas besoin d'être déclaré dans le contrôleur. Cette méthode passe dans un objet utilisateur et porte les jugements d'autorisation via l'interface de rôle encapsulée. Si la valeur de retour est administrateur, il est considéré comme un administrateur et le renvoie directement, sinon il échouera.
Après avoir écrit cela, le module de gestion de catégorie en arrière-plan est terminé. Parce que le module a moins d'interfaces fonctionnelles, il a fallu beaucoup de temps pour les écrire tous dans un article de blog, ce qui facilite également l'apprentissage du module de gestion de la catégorie backend.
Dans le prochain article de blog, nous continuerons de promouvoir les progrès du projet et vous apporterons le développement de modules de produits back-end. Nous espérons que tout le monde va suivre les progrès.
Si vous rencontrez des problèmes dans votre article de blog précédent, veuillez laisser un message et des commentaires, et je ferai de mon mieux pour résoudre le problème pour vous.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.