En las publicaciones de blog anteriores, hemos completado todas las funciones del módulo de usuario, por lo que en las próximas publicaciones de blog, completaremos el módulo de función de gestión de clasificación.
Veamos primero los puntos funcionales de la gestión de clasificación en el backend
La gestión de la categoría de backend es en realidad una gestión de productos, que se divide principalmente en agregar categorías, actualizar los nombres de categorías, obtener nodos de categoría al mismo nivel y obtener ID de categoría y categorías de sub-nodos.
1. Implementación del módulo de gestión de clasificación de las funciones de categoría adicional
Veamos primero la capa de servicio
// Agregar category public Public ServerResponse AddCategory (String CategyName, Integer ParentId) {if (ParentId == NULL || StringUtils.isblank (categoryName)) {return serverResponse.createByerRormsage ("Error de parámetro"); } Categoría Categoría = nueva categoría (); categoría.setName (categoryName); categoría.setParentId (ParentId); categoría.setStatus (verdadero); int rowCount = categoryMapper.insert (categoría); if (rowCount> 0) {return serverResponse.CreateBySuceSessMessage ("Agregar categoría con éxito"); } return serverResponse.CreateByerMormessage ("Agregar categoría fallida"); }Es relativamente simple agregar categorías. Es un poco similar a la lógica de registro anterior. Primero, verifique si existen CategoryName y ParentId transmitidos desde la parte delantera. Si no existe, se solicita el error del parámetro. De lo contrario, continúe usando instancias de Javabean para aumentar la categoría. Del mismo modo, después de agregarlo con Javabean, inserte el resultado en la base de datos. Si el número de filas efectivas devueltas es mayor que 0, la categoría se agrega con éxito; de lo contrario, la categoría se agrega falla.
Veamos la capa del controlador
/ ** * Administre la categoría de categoría-ADD * @param CategyName * @param ParentId * @param Session * @Return */ @RequestMapping (valor = "add_category.do") @ResponseBody Public ServerResponse AddCategory (String CategoryName, @RquestParam (value = "ParentId", DefaultValue = "0") Intent ParentId, HttPsession) (Usuario) session.getAttribute (const.current_user); if (user == null) {return serverResponse.CreateByerRorcodEmessage (ResponseCode.Need_Login.getCode (), "El usuario no está iniciado sesión, inicie sesión"); } // Verifique si es un administrador if (iuserService.checkAdmin (usuario) .issuccess ()) {return icateGoryService.AddCategory (categoryName, ParentId); } else {return serverResponse.CreateByerRormessage ("Sin operación de permiso, inicie sesión en el administrador"); }}En primer lugar, hay un lugar diferente con el valor de valor de SolicSmapping, que solo tiene un nombre de interfaz, pero no especifica el método de solicitud de interfaz, porque el módulo de administración de categorías es una administración de fondo del administrador del sitio web y pertenece al módulo de fondo. Para los módulos de antecedentes, los empleados internos de la empresa los utilizan y no necesitan ser divulgados al mundo exterior, por lo que puede usar el método GET predeterminado para solicitar.
La lógica general de la gestión de funciones de fondo es verificar primero si el usuario está en el estado de inicio de sesión. Si el usuario está en el estado de inicio de sesión, verifique si el registrado actualmente es un administrador del sitio web. Si no es un administrador, no tiene derecho a realizar operaciones de gestión relevantes. Si es un administrador, puede realizar la gestión de fondo. En la lógica de la gestión de funciones de fondo, generalmente es suficiente devolver directamente los resultados de procesamiento del método en la capa de servicio.
En el método anterior, es necesario determinar el estado de inicio de sesión del usuario, por lo que es necesario introducir servicios de usuario y luego llamar directamente al método correspondiente.
2. Módulo de gestión de clasificación-implementación de la función de nombre de categoría de actualización
Veamos primero la capa de servicio
// Actualizar el nombre de la categoría Nombre público ServerResponse UpdateCategoryName (String CategyName, Integer CategyId) {if (categoryId == null || stringUtils.isblank (categoryName)) {return serverResponse.createByyRormessage ("Error de parámetro de actualización de la categoría"); } Categoría Categoría = nueva categoría (); categoría.setId (categoryId); categoría.setName (categoryName); int rowCount = categoryMapper.UpdateByPrimaryKeySelective (categoría); if (RowCount> 0) {return serverResponse.CreateBySuceSessMessage ("Actualizar el nombre de la categoría con éxito"); } return serverResponse.CreateByerMormessage ("Falló el nombre de la categoría de actualización"); }Es exactamente lo mismo que la lógica de procesamiento anterior, y no entraré en detalles aquí.
Veamos la capa del controlador
/ ** * Administrar el nombre de categoría de categoría de categoría * @param CategyName * @param categoryId * @param session * @return */ @requestmapping (valor = "update_category_name") @ResponseBody Public ServerResponse UpdateCatoryName (String Category NameNameName, INTREGER CategoryId, HttpSession Session) {User User User = (Usuario) session.getAttribute (const.current_user); if (user == null) {return serverResponse.CreateByerRorcodEmessage (ResponseCode.Need_Login.getCode (), "El usuario no está iniciado sesión, inicie sesión"); } if (iUserservice.CheckAdmin (usuario) .issuccess ()) {return icategyService.UpdateCategoryName (categoryName, categoryId); } else {return serverResponse.CreateByerRormessage ("Sin operación de permiso, inicie sesión en el administrador"); }}Es exactamente lo mismo que la lógica de procesamiento anterior, y no entraré en detalles aquí.
3. Implementación del módulo de gestión de clasificación de la función de obtener el nodo de categoría horizontal (búsqueda de productos de backend)
Capa de servicio
// Consulta de nivel principal Node Public ServerResponse <List <Cateatory>> GetChildrenParallecategory (Integer CategyId) {List <Cateatory> CategyList = CategyMapper.SelectCategoryChildrenByParentId (categoryId); if (collectionUtils.isEmpty (categoryList)) {logger.info ("no se encontró la subcategoría de la clasificación actual"); } return serverResponse.CreateBySuccess (categoryList); }Al procesar un conjunto de información del producto, a menudo utiliza el método de recopilación. Su aplicación es diferente según el tipo de colección. Aquí, estoy usando colecciones de listas. Primero, teniendo en cuenta que las colecciones de listas son convenientes para las operaciones y la gestión de transversales. Debido a que es administrar productos, el tipo genérico de la colección de listas se especifica como categoría, y la consulta de ID de producto se realiza a través del método SelectCategoryChildrenbyParentid de CategoryMapper. En el juicio lógico, use la clase de herramienta CollectUtils encapsulada en Java para determinar si el resultado de retorno de la colección está vacío. Si está vacío, imprima una línea de registros, de lo contrario, se puede devolver la ejecución exitosa del resultado CategoryList. El registrador aquí es una herramienta de impresión de registro que encapsula. Permítanme mencionar brevemente su uso.
private org.slf4j.Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);
Tenga en cuenta que este registrador usa el paquete SLF4J, no exporte el paquete incorrecto y luego loggerFactory.getLogger (clase), debe pasar un parámetro, que es la clase que actualmente necesita imprimir el registro, como categoryServiceImpl.class aquí. Puede ver los resultados de impresión del inicio de sesión en la consola.
Capa del controlador
/ ** * Administrar nodos de categoría de la misma categoría * @param CategoryId * @param Session * @Return */ @RequestMapping (valor = "get_category.do") @ResponseBody Public ServerResponse GetChildrenParallEcategy (@RequestParam (value = "CategoryID", DefaultValue = "0") Integer CategoryId, HttPsession) (Usuario) session.getAttribute (const.current_user); if (user == null) {return serverResponse.CreateByerRorcodEmessage (ResponseCode.Need_Login.getCode (), "El usuario no está iniciado sesión, inicie sesión"); } if (iuserservice.checkAdmin (usuario) .issuccess ()) {return icategyService.getChildrenParallecategory (categoryId); } else {return serverResponse.CreateByerRormessage ("Sin operación de permiso, inicie sesión en el administrador"); }}Por razones prácticas, cuando la cantidad de bienes es 0, no es necesario administrar la categoría de producto, por lo que el valor predeterminado = "0" anotado por requestparam se usa para especificar el valor predeterminado de un parámetro. El resto de la lógica es exactamente el mismo que antes.
4. Módulo de gestión de clasificación Retrie la implementación de las funciones de ID de categoría y sub-nodo
Mira la capa de servicio
Public ServerResponse <List <integer>> SelectCategoryAndChildrenById (Integer CategyId) {set <Catexory> categorySet = sets.newhashset (); findchildCategory (categoryId, categorySet); List <integer> categoryIdList = lists.newarrayList (); if (categoryId! = null) {para (category CategyItem: CategySet) {CategyIdList.Add (categoryItem.getId ()); }} return serverResponse.CreateBysuccess (categoryIdList); } // Algoritmo recursivo para calcular el conjunto privado del nodo infantil <Catexatory> FindChildCategory (Integer CategyId, SET <Category> CategySet) {Categy Categy = CategyMapper.SelectByPrimaryKey (categoryId); if (category! = null) {categorySet.Add (categoría); } // Encuentra la lista de nodos infantiles <Catexatory> CategyList = CategyMapper.SelectCategoryChildrenByParentid (categoryId); para (Category CategyItem: CategyList) {findchildCategory (categoryItem.getId (), categorySet); } return CategorySet; }El método principal es selectCategoryandChildrenByid, y el método auxiliar es FindChildCategory, que calcula los nodos infantiles por recursivamente. En el método auxiliar, la información de ID del producto se consulta a través de categoryID y se agrega a la colección establecida, y luego los nodos de los productos del producto se atraviesan a través del bucle foreach, y finalmente se devuelve el conjunto de categorías. En el método principal, se llama el método auxiliar, se encuentran la identificación del producto y los nodos infantiles, y luego la identificación del producto y los nodos infantiles se colocan en la colección de la lista, y luego el resultado que queremos se atraviesa a través del bucle foreach, y finalmente la lista de categorías se devuelve directamente.
Capa del controlador
/ ** * Administre la ID de categoría de categoría y la categoría de nodo infantil * @param categoryId * @param session * @return */ @RequestMapping (valor = "get_deep_category.do") @ResponseBody public PublicResponse GetCategoryAnddeepChildrencatory (@RequestParam (value = "CategoryId", defaultValue = "0") INTERTEREGER, INTETTERSEGER, INTERTOGER, INTETTERSEG sesión) {usuario user = (usuario) session.getAttribute (const.current_user); if (user == null) {return serverResponse.CreateByerRorcodEmessage (ResponseCode.Need_Login.getCode (), "El usuario no está iniciado sesión, inicie sesión"); } if (iuserservice.checkAdmin (usuario) .issuccess ()) {return icTegoryService.SelectCategoryAndChildrenById (categoryId); } else {return serverResponse.CreateByerRormessage ("Sin operación de permiso, inicie sesión en el administrador"); }}Es exactamente lo mismo que el procesamiento lógico anterior de obtener los nodos del mismo nivel en la categoría, por lo que no entraré en detalles aquí.
5. Módulo de usuario complementario
En el módulo de administración de categorías de antecedentes, se utiliza un método para verificar si el usuario que inicia sesión actualmente es un administrador. Esto está escrito en el módulo de usuario. Olvidé escribirlo antes, así que haré un suplemento aquí.
Capa de servicio del módulo de usuario
// Antecedentes del usuario: verifique si se trata de un administrador público ServerResponse checkadmin (usuario de usuario) {if (user! = Null && user.getRole (). IntValue () == const.role.role_admin) {return serverResponse.createBySuccess (); } return serverResponse.CreateByRor (); }Debido a que está relacionado con los administradores, solo necesita realizar un procesamiento lógico en la capa de servicio y no necesita ser declarado en el controlador. Este método pasa en un objeto de usuario y realiza juicios de permiso a través de la interfaz de roles encapsulados. Si el valor de retorno es administrador, se considera un administrador y lo devuelve directamente, de lo contrario fallará.
Después de haber escrito esto, el módulo de gestión de categorías en segundo plano está terminado. Debido a que el módulo tiene menos interfaces funcionales, tomó mucho tiempo escribirlas todas en una publicación de blog, lo que también facilita a todos aprender el módulo de gestión de categorías de backend a la vez.
En la próxima publicación de blog, continuaremos promoviendo el progreso del proyecto y le traeremos el desarrollo de módulos de productos de back-end. Esperamos que todos se mantengan al día con el progreso.
Si encuentra algún problema en su publicación de blog anterior, deje un mensaje y comentarios, y haré todo lo posible para resolver el problema por usted.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.