您的位置:首页 > 娱乐 > 明星 > 苍穹外卖之员工管理、分类管理

苍穹外卖之员工管理、分类管理

2024/12/28 1:15:14 来源:https://blog.csdn.net/2301_77783487/article/details/141421317  浏览:    关键词:苍穹外卖之员工管理、分类管理

新增员工

  1. 新增员工
    1. 需求分析和设计

产品原型:

接口设计:

数据库设计:

    1. 代码开发

根据新增员工接口设计对应的DTO:

这是实体类属性,但是由于属性差异过大,使用DTO封装数据为:

当前端提交的数据和实体类中对应的属性差别较大时,建议使用DTO来封装数据

Controller

    @PostMapping@ApiOperation("新增员工")public Result save(@RequestBody EmployeeDTO employeeDTO){log.info("新增员工:{}",employeeDTO);employeeService.save(employeeDTO);return Result.success();}

EmployeeService

    /***新增员工业务方法* @param employeeDTO*/void save(EmployeeDTO employeeDTO);

EmployeeServiceImpl

    /***新增员工业务方法* @param employeeDTO*/@Overridepublic void save(EmployeeDTO employeeDTO) {Employee employee = new Employee();//对象属性拷贝BeanUtils.copyProperties(employeeDTO, employee);//设置账号的状态,默认正常状态1表示正常,0表示锁定employee.setStatus(StatusConstant.ENABLE);//设置密码,默认密码123456employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));//设置当前记录的创建时间和修改时间employee.setCreateTime(LocalDateTime.now());employee.setUpdateTime(LocalDateTime.now());//设置当前记录创建人id和修改人id//TODO 后期需要改为当前登录用户的idemployee.setCreateUser(10L);employee.setUpdateUser(10L);employeeMapper.insert(employee);}

EmployeeMapper

    /*** 插入员工数据* @param employee*/@Insert("insert into employee (name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user, status)" +"values " +"(#{name}, #{username}, #{password},#{phone},#{sex},#{idNumber},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})")void insert(Employee employee);
    1. 功能测试

功能测试方式:

  • 通过接口文档测试
  • 通过前后联调测试

注意:由于开发阶段前端和后端是并行开发的,后端完成某个功能后,此时前端对应的功能可能还没有开发完成,导致无法进行前后端联调测试,所以在开发阶段,后端测试主要以接口文档测试为主。

    1. 代码完善

程序存在的问题:

      • 录入的用户名已存在,抛出异常后没有处理 GlobalExcaptionHandler
@ExceptionHandlerpublic Result exceptionHandler(SQLIntegrityConstraintViolationException ex){String message = ex.getMessage();if(message.contains("Duplicate entry")){String[] split = message.split("");String username = split[2];String msg = username + MessageConstant.ALREADY_EXISTS;return Result.error(msg);}else {return Result.error(MessageConstant.UNKNOWN_ERROR);}}
      • 新增员工时,创建人id和修改人id设置为了固定值

ThreadLocal并不是一个Thread,而是Thread的局部变量

ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问

try {log.info("jwt校验:{}", token);Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);Long empId = Long.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString());log.info("当前员工id:", empId);BaseContext.setCurrentId(empId);//3、通过,放行return true;} catch (Exception ex) {//4、不通过,响应401状态码response.setStatus(401);return false;}
        //设置当前记录创建人id和修改人id//TODO 后期需要改为当前登录用户的idemployee.setCreateUser(BaseContext.getCurrentId());employee.setUpdateUser(BaseContext.getCurrentId());

员工分页查询

  1. 员工分页查询
    1. 需求分析和设计

    1. 代码开发

根据分页查询接口设计对应的DTO

        <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId></dependency>
分页查询的好工具,省代码
    1. 代码测试
    2. 代码完善
   /*** 员工分页查询* @param employeePageQueryDTO* @return*/@GetMapping("/page")@ApiOperation("员工分页查询")public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){log.info("员工分页查询,参数为;{}",employeePageQueryDTO);PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);return Result.success(pageResult);}
    /***员工分页查询* @param employeePageQueryDTO*/PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
    /***员工分页查询* @param employeePageQueryDTO*/@Overridepublic PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {//开始分页查询PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);long total = page.getTotal();List<Employee> records = page.getResult();return new PageResult(total, records);}
    /*** 员工分页查询* @param employeePageQueryDTO*/Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
    <select id="pageQuery" resultType="com.sky.entity.Employee">select * from employee<where><if test="name != null and name !=''">and name like concat('%',#{name},'%')</if></where>order by create_time desc</select>
/*** 扩展Spring MVC框架的消息转换器* @param converters*/
@Override
protected  void extendMessageConverters(List<HttpMessageConverter<?>> converters){log.info("扩展消息转换器");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要为消息转换器设置一个对象转换器,对象转换器可以将java对象序列化为json数据converter.setObjectMapper(new JacksonObjectMapper());//将自己的消息转换器加入容器中converters.add(0,converter);
}
}这段代码是用来创建一个转换器,这样可以将java对象装换成json形式

启用禁用员工账号

  1. 启用禁用员工账号

产品原型:

代码依此顺序:

    /*** 启用禁用员工账号* @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();}
    /*** 启用禁用员工账号* @param status* @param id*/void startOrStop(Integer status, Long id);
    /*** 启用禁用员工账号* @param status* @param id*/@Overridepublic void startOrStop(Integer status, Long id) {Employee employee = new Employee();employee.setStatus(status);employee.setId(id);//        Employee employee = Employee.builder()
//                .status(status)
//                .id(id)
//                .build();employeeMapper.update(employee);}
    /*** 根据主键动态修改属性* @param employee*/void update(Employee employee);
    <update id="update" parameterType="Employee">update employee<set><if test="status != null">status = #{status},</if><if test="name != null">name = #{name},</if><if test="username != null">username = #{username},</if><if test="password != null">password = #{password},</if><if test="phone != null">name = #{phone},</if><if test="sex != null">name = #{sex},</if><if test="idNumber != null">name = #{idNumber},</if><if test="updateTime != null">name = #{updateTime},</if><if test="updateUser != null">name = #{updateUser},</if></set>where id = #{id}</update>
  1. 编辑员工

产品原型:

   /*** 根据id查询员工信息* @param id* @return*/@GetMapping("/{id}")@ApiOperation("根据id查询员工信息")public Result<Employee> getById(@PathVariable Long id){log.info("根据id查询员工信息:{}",id);Employee employee = employeeService.getById(id);return Result.success(employee);}/***编辑员工信息* @param employeeDTO* @return*/@PutMapping@ApiOperation("编辑员工信息")public Result update(@RequestBody EmployeeDTO employeeDTO){log.info("编辑员工信息:{}", employeeDTO);employeeService.update(employeeDTO);return Result.success();}
   /*** 根据id查询员工信息* @param id* @return*/Employee getById(Long id);/*** 编辑员工信息* @param employeeDTO*/void update(EmployeeDTO employeeDTO);
   /*** 根据id查询员工信息* @param id* @return*/@Overridepublic Employee getById(Long id) {Employee employee = employeeMapper.getById(id);employee.setPassword("****");return employee;}/*** 编辑员工信息* @param employeeDTO*/@Overridepublic void update(EmployeeDTO employeeDTO) {Employee employee = new Employee();BeanUtils.copyProperties(employeeDTO, employee);employee.setUpdateTime(LocalDateTime.now());employee.setUpdateUser(BaseContext.getCurrentId());employeeMapper.update(employee);}
    /*** 根据主键动态修改属性* @param employee*/void update(Employee employee);/*** 根据id查询员工信息* @param id* @return*/@Select("select * from employee where id = #{id}")Employee getById(Long id);
 <update id="update" parameterType="Employee">update employee<set><if test="status != null">status = #{status},</if><if test="name != null">name = #{name},</if><if test="username != null">username = #{username},</if><if test="password != null">password = #{password},</if><if test="phone != null">phone = #{phone},</if><if test="sex != null">sex = #{sex},</if><if test="idNumber != null">id_Number = #{idNumber},</if><if test="updateTime != null">update_Time = #{updateTime},</if><if test="updateUser != null">update_User = #{updateUser},</if></set>where id = #{id}</update>
  1. 导入分类模块功能代码

产品原型:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com