相关推荐recommended
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三)
作者:mmseoamin日期:2023-12-05

员工分页查询和账号启用禁用功能

    • 1. 员工分页查询
      • 1.1 需求分析和设计
        • 1.1.1 产品原型
        • 1.1.2 接口设计
        • 1.2 代码开发
          • 1.2.1 设计DTO类
          • 1.2.2 封装PageResult
          • 1.2.3 Controller层
          • 1.2.4 Service层接口
          • 1.2.5 Service层实现类
          • 1.2.6 Mapper层
          • 1.3 功能测试
          • 1.4 代码完善
          • 2. 启用禁用员工账号
            • 2.1 需求分析与设计
              • 2.1.1 产品原型
              • 2.1.2 接口设计
              • 2.2 代码开发
                • 2.2.1 Controller层
                • 2.2.2 Service层接口
                • 2.2.3 Service层实现类
                • 2.2.4 Mapper层
                • 2.3 功能测试

                  1. 员工分页查询

                  1.1 需求分析和设计

                  1.1.1 产品原型

                  查询员工原型:

                  基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第1张

                  业务规则:

                  • 根据页码展示员工信息
                  • 每页展示10条数据
                  • 分页查询时可以根据需要,输入员工姓名进行查询
                    1.1.2 接口设计

                    基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第2张

                    基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第3张

                    注意事项:

                    • 请求参数类型为Query,不是json格式提交,在路径后直接拼接。/admin/employee/page?name=zhangsan
                    • 返回数据中records数组中使用Employee实体类对属性进行封装。

                      1.2 代码开发

                      1.2.1 设计DTO类

                      根据请求参数进行封装,在sky-pojo模块中

                      package com.sky.dto;
                      import lombok.Data;
                      import java.io.Serializable;
                      @Data
                      public class EmployeePageQueryDTO implements Serializable {
                          //员工姓名
                          private String name;
                          //页码
                          private int page;
                          //每页显示记录数
                          private int pageSize;
                      }
                      
                      1.2.2 封装PageResult

                      后面所有的分页查询,统一都封装为PageResult对象。

                      在sky-common模块

                      package com.sky.result;
                      import lombok.AllArgsConstructor;
                      import lombok.Data;
                      import lombok.NoArgsConstructor;
                      import java.io.Serializable;
                      import java.util.List;
                      /**
                       * 封装分页查询结果
                       */
                      @Data
                      @AllArgsConstructor
                      @NoArgsConstructor
                      public class PageResult implements Serializable {
                          private long total; //总记录数
                          private List records; //当前页数据集合
                      }
                      

                      员工信息分页查询后端返回的对象类型为: Result

                      package com.sky.result;
                      import lombok.Data;
                      import java.io.Serializable;
                      /**
                       * 后端统一返回结果
                       * @param 
                       */
                      @Data
                      public class Result implements Serializable {
                          private Integer code; //编码:1成功,0和其它数字为失败
                          private String msg; //错误信息
                          private T data; //数据
                          public static  Result success() {
                              Result result = new Result();
                              result.code = 1;
                              return result;
                          }
                          public static  Result success(T object) {
                              Result result = new Result();
                              result.data = object;
                              result.code = 1;
                              return result;
                          }
                          public static  Result error(String msg) {
                              Result result = new Result();
                              result.msg = msg;
                              result.code = 0;
                              return result;
                          }
                      }
                      
                      1.2.3 Controller层

                      在sky-server模块中,com.sky.controller.admin.EmployeeController中添加分页查询方法。

                      	/**
                           * 员工分页查询
                           * @param employeePageQueryDTO
                           * @return
                           */
                          @GetMapping("/page")
                          @ApiOperation("员工分页查询")
                          public Result page(EmployeePageQueryDTO employeePageQueryDTO){
                              log.info("员工分页查询,参数为:{}", employeePageQueryDTO);
                              PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);//后续定义
                              return Result.success(pageResult);
                          }
                      
                      1.2.4 Service层接口

                      在EmployeeService接口中声明pageQuery方法:

                      	/**
                           * 分页查询
                           * @param employeePageQueryDTO
                           * @return
                           */
                          PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
                      
                      1.2.5 Service层实现类

                      在EmployeeServiceImpl中实现pageQuery方法:

                      	/**
                           * 分页查询
                           *
                           * @param employeePageQueryDTO
                           * @return
                           */
                          public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
                              // select * from employee limit 0,10
                              //开始分页查询
                              PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());
                              Page page = employeeMapper.pageQuery(employeePageQueryDTO);//后续定义
                              long total = page.getTotal();
                              List records = page.getResult();
                              return new PageResult(total, records);
                          }
                      

                      注意:此处使用 mybatis 的分页插件 PageHelper 来简化分页代码的开发。底层基于 mybatis 的拦截器实现。

                      故在pom.xml文中添加依赖

                      
                         com.github.pagehelper
                         pagehelper-spring-boot-starter
                         ${pagehelper}
                      
                      
                      1.2.6 Mapper层

                      在 EmployeeMapper 中声明 pageQuery 方法:

                      	/**
                           * 分页查询
                           * @param employeePageQueryDTO
                           * @return
                           */
                          Page pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
                      

                      在 src/main/resources/mapper/EmployeeMapper.xml 中编写SQL:

                      
                      

                      1.3 功能测试

                      重启服务:访问http://localhost:8080/doc.html,进入员工分页查询。

                      点击员工管理

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第4张

                      输入员工姓名为zhangsan

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第5张

                      发现,最后操作时间格式不清晰,再解决一下。

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第6张

                      1.4 代码完善

                      问题描述:操作时间字段显示有问题。

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第7张

                      解决方式:

                      1). 方式一

                      在属性上加上注解,对日期进行格式化

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第8张

                      但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。

                      2). 方式二(推荐 )

                      在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理

                      	/**
                           * 扩展Spring MVC框架的消息转化器
                           * @param converters
                           */
                          protected void extendMessageConverters(List> converters) {
                              log.info("扩展消息转换器...");
                              //创建一个消息转换器对象
                              MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
                              //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
                              converter.setObjectMapper(new JacksonObjectMapper());
                              //将自己的消息转化器加入容器中
                              converters.add(0,converter);
                          }
                      

                      添加后,再次测试

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第9张

                      时间格式定义,sky-common模块中

                      package com.sky.json;
                      public class JacksonObjectMapper extends ObjectMapper {
                      	//.......
                          public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
                          //.......
                          }
                      }
                      

                      2. 启用禁用员工账号

                      2.1 需求分析与设计

                      2.1.1 产品原型

                      在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作。账号禁用的员工不能登录系统,启用后的员工可以正常登录。如果某个员工账号状态为正常,则按钮显示为 “禁用”,如果员工账号状态为已禁用,则按钮显示为"启用"。

                      启禁用员工原型:

                      基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第10张

                      业务规则:

                      • 可以对状态为“启用” 的员工账号进行“禁用”操作。
                      • 可以对状态为“禁用”的员工账号进行“启用”操作。
                      • 状态为“禁用”的员工账号不能登录系统。
                        2.1.2 接口设计

                        基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第11张

                        基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第12张

                        1). 路径参数携带状态值。

                        2). 同时,把id传递过去,明确对哪个用户进行操作。

                        3). 返回数据code状态是必须,其它是非必须。

                        2.2 代码开发

                        2.2.1 Controller层

                        在sky-server模块中,根据接口设计中的请求参数形式对应的在 EmployeeController 中创建启用禁用员工账号的方法:

                        	/**
                             * 启用禁用员工账号
                             * @param status
                             * @param id
                             * @return
                             */
                            @PostMapping("/status/{status}")
                            @ApiOperation("启用禁用员工账号")
                            public Result startOrStop(@PathVariable Integer status,Long id){
                                log.info("启用禁用员工账号:{},{}",status,id);
                                employeeService.startOrStop(status,id);//后绪步骤定义
                                return Result.success();
                            }
                        
                        2.2.2 Service层接口

                        在 EmployeeService 接口中声明启用禁用员工账号的业务方法:

                        	/**
                             * 启用禁用员工账号
                             * @param status
                             * @param id
                             */
                            void startOrStop(Integer status, Long id);
                        
                        2.2.3 Service层实现类

                        在 EmployeeServiceImpl 中实现启用禁用员工账号的业务方法:

                        	/**
                             * 启用禁用员工账号
                             *
                             * @param status
                             * @param id
                             */
                            public void startOrStop(Integer status, Long id) {
                                Employee employee = Employee.builder()
                                        .status(status)
                                        .id(id)
                                        .build();
                                employeeMapper.update(employee);
                            }
                        
                        2.2.4 Mapper层

                        在 EmployeeMapper 接口中声明 update 方法:

                        	/**
                             * 根据主键动态修改属性
                             * @param employee
                             */
                            void update(Employee employee);
                        

                        在 EmployeeMapper.xml 中编写SQL:

                        
                                update employee
                                
                                    name = #{name},
                                    username = #{username},
                                    password = #{password},
                                    phone = #{phone},
                                    sex = #{sex},
                                    id_Number = #{idNumber},
                                    update_Time = #{updateTime},
                                    update_User = #{updateUser},
                                    status = #{status},
                                
                                where id = #{id}
                            
                        

                        2.3 功能测试

                        测试前:

                        基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第13张

                        点击启用:

                        基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三),在这里插入图片描述,第14张

                        后记

                        👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹