全部开发者教程

企业级在线办公系统

上个小节我们已经可以修改用户基本信息了,除了员工离职功能以外,用户管理模块还差删除用户功能没实现了。在用户管理页面,有两个可以删除用户记录的按钮。一个按钮是用来删除某行记录的,另一个按钮是用来删除选中的多条用户记录。因此说我们设计后端程序的时候,无论删除一条还是多条用户记录都能适配。

一、编写持久层代码

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);
    }
}