1 新增员工
需求分析和设计
代码开发
根据新增员工接口设计对应的DTO:
注意:当前端提交的数据和实体类中对应的属性差别比较大时,建议使用DTO来封装数据
在EmployeeController中创建新增员工方法,接收前端提交的参数:
/**
* 新增员工
*
* @param employeeDTO
* @return
*/
@PostMapping
@ApiOperation(value = "新增员工")
// @RequestBody json数据
public Result save(@RequestBody EmployeeDTO employeeDTO) {
log.info("新增员工:{}", employeeDTO);
employeeService.save(employeeDTO);
return Result.success();
}
在EmployeeService接口中声明新增员工方法:
在EmployeeServiceImpl中实现新增员工方法:
在EmployeeMapper中声明insert方法:
功能测试
功能测试方式:
通过接口文档测试
通过前后端联调测试
注意:由于开发阶段前端和后端是并行开发的,后端完成某个功能后,此时前端对应的功能可能还没有开发完成, 导致无法进行前后端联调测试。所以在开发阶段,后端测试主要以接口文档测试为主。
代码完善
目前,程序存在的问题主要有两个:
1 录入的用户名已存,抛出的异常后没有处理
2 新增员工时,创建人id和修改人id设置为固定值
1 解决:
通过全局异常处理器来处理。
进入到sky-server模块,com.sky.hander包下,GlobalExceptionHandler.java添加方法
/**
* 处理SQL异常
* @param ex
* @return
*/
@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
//Duplicate entry 'zhangsan' for key 'employee.idx_username'
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);
}
}
进入到sky-common模块,在MessageConstant.java添加
public static final String ALREADY_EXISTS = "已存在";
2 解决:
ThreadLocal
介绍:
ThreadLocal 并不是一个Thread,而是Thread的局部变量。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。
常用方法:
public void set(T value) 设置当前线程的线程局部变量的值
public T get() 返回当前线程所对应的线程局部变量的值
public void remove() 移除当前线程的线程局部变量
2 员工分页查询
需求分析和设计
业务规则:
根据页码展示员工信息
每页展示10条数据
分页查询时可以根据需要,输入员工姓名进行查询
代码开发
根据分页查询接口设计对应的DTO:
功能测试
代码完善
3 启用禁用员工账号
需求分析和设计
业务规则:
可以对状态为“启用” 的员工账号进行“禁用”操作
可以对状态为“禁用”的员工账号进行“启用”操作
状态为“禁用”的员工账号不能登录系统
代码开发
功能测试
4 编辑员工
需求分析和设计
代码开发
功能测试
通过Swagger接口文档进行测试,通过后再前后端联调测试即可
5 导入分类模块功能代码
需求分析和设计
业务规则:
分类名称必须是唯一的
分类按照类型可以分为菜品分类和套餐分类
新添加的分类状态默认为“禁用”