需求分析与设计
一:产品原型
在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作。账号禁用的员工不能登录系统,启用后的员工可以正常登录。如果某个员工账号状态为正常,则按钮显示为 "禁用",如果员工账号状态为已禁用,则按钮显示为"启用"。
启禁用员工原型:
业务规则:
-
可以对状态为“启用” 的员工账号进行“禁用”操作
-
可以对状态为“禁用”的员工账号进行“启用”操作
-
状态为“禁用”的员工账号不能登录系统
二:接口设计
1). 路径参数携带状态值。
2). 同时,把id传递过去,明确对哪个用户进行操作。
3). 返回数据code状态是必须,其它是非必须。
细节:
- 包含路径参数和普通参数,路径参数需要用@PathVariable注释
代码开发
controller类
为什么不用dto类封装了,因为只有两个参数,参数很少时可以不用封装。
在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();
}
细节:
- 路径参数需要用@PathVariable注释
Service类
/**
* 启用禁用员工账号
*
* @param status
* @param id
*/
public void startOrStop(Integer status, Long id) {
Employee employee = Employee.builder()
.status(status)
.id(id)
.build();
employeeMapper.update(employee);
}
细节:
- 其实可以在mapper层写一个通过id修改status值的方法,但是这样的话,如果通过id值想要修改其他参数,比如说员工姓名、员工电话等,就需要再写别的修改方法进行修改,所以不如使用动态sql,用来解决所有通过id修改参数的问题。
- 因为要使用动态sql,所以直接传status和id其实不好,需要先把其封装为实体类。
- 因为Employee实体类声明了@Builder注解,所以可以使用构建器builder().build()链式构建,这样就不需要一个一个设置参数了。
Mapper类
/**
* 根据主键动态修改属性
* @param employee
*/
void update(Employee employee);
动态sql:
<update id="update">
update employee
<set>
<if test="name != null and name != ''">name = #{name},</if>
<if test="username != null and username!= ''">username = #{username},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="phone != null and phone != ''">phone = #{phone},</if>
<if test="sex != null and sex != ''">sex = #{sex},</if>
<if test="idNumber != null and idNumber != ''">id_Number = #{idNumber},</if>
<if test="updateTime != null and updateTime != ''">update_Time = #{updateTime},</if>
<if test="updateUser != null and updateUser != ''">update_User = #{updateUser},</if>
<if test="status != null and status != ''">status = #{status},</if>
</set>
where id = #{id}
</update>
一定要有不等于空串,不然前端不想更改但是返回空串,数据就会被空串替代
修改员工模块快速讲解
在员工管理列表页面点击 "编辑" 按钮,跳转到编辑页面,在编辑页面回显员工信息并进行修改,最后点击 "保存" 按钮完成编辑操作。
员工列表原型:
修改页面原型:
注:点击修改时,数据应该正常回显到修改页面。
根据上述原型图分析,编辑员工功能涉及到两个接口:
-
根据id查询员工信息
-
编辑员工信息
1). 根据id查询员工信息
2). 编辑员工信息
细节:
- 查询到员工信息后,可以加一行,加密密码
Employee employee = employeeMapper.getById(id);
employee.setPassword("****");
- 修改的方法是Put
- DTO对象别忘了可以通过对象属性拷贝快速转化为实体类对象,拷贝后还需要补充那些DTO中没有的属性
- BaseContext.getCurrentId()获取当前操作账号id(TreadLocal)