全部开发者教程

企业级在线办公系统

部门管理模块只剩下删除功能还没有做,这节课我们编写程序来实现删除部门的后端代码。删除部门有个要求,那就是只能删除没有用户的部门。如果某部门有关联的用户,这样的部门是不能删除的。

一、编写持久层代码

TbDeptDao.xml文件中,定义两个SQL语句。searchCanDelete这个语句是查询要删除的部门是否存在关联的用户,这个SQL语句的语法跟角色管理模块类似,没什么可讲的。

<select id="searchCanDelete" resultType="boolean">
    SELECT IF( SUM( temp.users ) > 0, FALSE, TRUE ) AS result FROM (
    SELECT COUNT( u.id ) AS users
    FROM tb_dept d
    JOIN tb_user u ON d.id=u.dept_id
    WHERE d.id IN
    <foreach collection="array" open="(" separator="," close=")" item="one">
        #{one}
    </foreach>
    GROUP BY d.id
    ) temp
</select>

<delete id="deleteDeptByIds">
    DELETE FROM tb_dept
    WHERE id IN
    <foreach collection="array" open="(" separator="," close=")" item="one">
        #{one}
    </foreach>
</delete>

TbDeptDao.java接口中,定义DAO方法。

public interface TbDeptDao {
    ……
    public boolean searchCanDelete(Integer[] ids);
    public int deleteDeptByIds(Integer[] ids);
}

二、编写业务层代码

DeptService.java接口中,定义抽象方法。

public interface DeptService {
    ……
    public int deleteDeptByIds(Integer[] ids);
}

DeptServiceImpl.java类中,实现抽象方法,其中就有判定部门是否能删除。

public class DeptServiceImpl implements DeptService {
    ……
    @Override
    public int deleteDeptByIds(Integer[] ids) {
        if (!deptDao.searchCanDelete(ids)) {
            throw new EmosException("无法删除关联用户的部门");
        }
        int rows = deptDao.deleteDeptByIds(ids);
        return rows;
    }
}

三、编写Web层代码

创建DeleteDeptByIdsForm.java类,封装Ajax提交的数据。

@Data
@Schema(description = "删除部门表单")
public class DeleteDeptByIdsForm {

    @NotEmpty(message = "ids不能为空")
    @Schema(description = "部门ID")
    private Integer[] ids;
}

DeptController.java类中,声明Web方法,然后大家可以用Swagger测试一下。

public class DeptController {
    ……
    @PostMapping("/deleteDeptByIds")
    @Operation(summary = "删除部门记录")
    @SaCheckPermission(value = {"ROOT", "DEPT:DELETE"}, mode = SaMode.OR)
    public R deleteDeptByIds(@Valid @RequestBody DeleteDeptByIdsForm form) {
        int rows = deptService.deleteDeptByIds(form.getIds());
        return R.ok().put("rows", rows);
    }
}