上个小节我们已经可以修改用户基本信息了,除了员工离职功能以外,用户管理模块还差删除用户功能没实现了。在用户管理页面,有两个可以删除用户记录的按钮。一个按钮是用来删除某行记录的,另一个按钮是用来删除选中的多条用户记录。因此说我们设计后端程序的时候,无论删除一条还是多条用户记录都能适配。
一、编写持久层代码
在TbUserDao.xml
文件中,定义SQL语句,仅限于删除非超级管理员的员工记录。
<delete id="deleteUserByIds">
DELETE FROM tb_user
WHERE id IN
<foreach collection="array" open="(" separator="," close=")" item="one">
#{one}
</foreach>
AND root=FALSE
</delete>
在TbUserDao.java
接口中,声明DAO方法。
public interface TbUserDao {
……
public int deleteUserByIds(Integer[] ids);
}
二、编写业务层代码
在UserService.java
接口中,定义抽象方法。
public interface UserService {
……
public int deleteUserByIds(Integer[] ids);
}
在UserServiceImpl.java
类中,实现抽象方法。
public class UserServiceImpl implements UserService {
……
@Override
public int deleteUserByIds(Integer[] ids) {
int rows = userDao.deleteUserByIds(ids);
return rows;
}
}
三、编写Web层代码
创建DeleteUserByIdsForm.java
类,保存Ajax提交的数据。
@Schema(description = "删除用户表单")
@Data
public class DeleteUserByIdsForm {
@NotEmpty(message = "ids不能为空")
@Schema(description = "用户ID")
private Integer[] ids;
}
在UserController.java
类中,定义Web方法。
public class UserController {
……
@PostMapping("/deleteUserByIds")
@SaCheckPermission(value = {"ROOT", "USER:DELETE"}, mode = SaMode.OR)
@Operation(summary = "删除用户")
public R deleteUserByIds(@Valid @RequestBody DeleteUserByIdsForm form) {
Integer userId = StpUtil.getLoginIdAsInt();
if (ArrayUtil.contains(form.getIds(), userId)) {
return R.error("您不能删除自己的帐户");
}
int rows = userService.deleteUserByIds(form.getIds());
if (rows > 0) {
//把被删除的用户踢下线
for (Integer id : form.getIds()) {
StpUtil.logoutByLoginId(id);
}
}
return R.ok().put("rows", rows);
}
}