课程内容
1.新增员工
2.员工分页查询
3.启用禁用员工账号
4.编辑员工
功能实现:员工管理,菜品分类管理
员工管理效果:
菜品分类管理效果:
1. 新增员工
1.1 需求分析和设计
1.1.1 产品原型
一般在做需求分析时,往往都是按照产品原型进行分析,因为产品原型比较直观,便于我们理解业务。
根据页面原型图得知,点击“保存”按钮后,会提交表单的数据到服务端,在服务端中需要接收数据,在将数据保存到数据库中。
注意事项:
1.账号必须是唯一的
2.手机号时合法的11位手机号码
3.身份证号为合法的18位身份证号码
4.密码默认是
1.1.2 接口设计
根据接口文档要明确出四点:
1.请求方式
2.请求路径
3.请求参数
4.返回数据
本项目约定:
-
管理端发出的请求,统一使用/admin作为前缀。
-
用户端发出的请求,统一使用/user作为前缀。
1.1.3 表设计
新增员工的数据会插入到employee表中:
1.2 代码开发
1.2.1 设计DTO类
根据新增员工接口设计对应的DTO
注意:当前端提交的数据和实体类中的属性差别较大时,建议使用DTO来封装数据
package com.sky.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class EmployeeDTO implements Serializable {
private Long id;
private String username;
private String name;
private String phone;
private String sex;
private String idNumber;
}
1.2.2 Controller层
EmployeeController中创建新增员工方法
1.接收前端请求
2.调用service层
3.返回响应
/**
* 新增员工
* @param employeeDTO
* @return
*/
@PostMapping
@ApiOperation("新增员工")
public Result save(@RequestBody EmployeeDTO employeeDTO){
log.info("新增员工:{}",employeeDTO);
employeeService.save(employeeDTO);//该方法后续步骤会定义
return Result.success();
}
1.2.3 Service层接口
在EmployeeService接口中声明新增员工方法
1.2.4 Service层实现类
/**
* 新增员工
*
* @param employeeDTO
*/
public void save(EmployeeDTO employeeDTO) {
Employee employee = new Employee();
//对象属性拷贝
BeanUtils.copyProperties(employeeDTO, employee);
//设置账号的状态,默认正常状态 1表示正常 0表示锁定
employee.setStatus(StatusConstant.ENABLE);
//设置密码,默认密码123456
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
//设置当前记录的创建时间和修改时间
employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
//设置当前记录创建人id和修改人id
employee.setCreateUser(10L);//目前写个假数据,后期修改
employee.setUpdateUser(10L);
employeeMapper.insert(employee);//后续步骤定义
}
1.2.5 Mapper层
在EmployeeMapper中声明insert方法
/**
* 插入员工数据
* @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.3 功能测试
代码已经发开发完毕,对新增员工功能进行测试。
功能测试实现方式:
通过接口文档进行测试
通过前后端联调进行测试
1.3.1 接口文档测试
启动服务:访问http://localhost:8080/doc.html,进入新增员工接口,进行调试
1.3.2 前后端联调测试
启动nginx,访问 http://localhost
登录-->员工管理-->添加员工
注: 由于开发阶段前端和后端是并行开发的,后端完成某个功能后,此时前端对应的功能可能还没有开发完成, 导致无法进行前后端联调测试。所以在开发阶段,后端测试主要以接口文档测试为主。
1.4 代码完善
目前,程序存在的问题主要有两个:
-
录入的用户名已存,抛出的异常后没有处理
-
新增员工时,创建人id和修改人id设置为固定值
接下来,我们对上述两个问题依次进行分析和解决。
1.4.1 问题一
描述:录入的用户名已存,抛出的异常后没有处理
分析:
新增username=zhangsan的用户,若employee表中之前已存在。
后台报错信息:
查看employee表结构:
发现,username已经添加了唯一约束,不能重复。
解决:
通过全局异常处理器来处理。
/**
* 处理SQL异常
* @param ex
* @return
*/
@Ex