全部开发者教程

企业级在线办公系统

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

一、编写持久层代码

TbMeetingRoomDao.xml文件中,定义SQL语句。删除数据之前,我们要先查询要删除的会议室是否关联了线下会议。

<select id="searchCanDelete" resultType="boolean">
    SELECT IF( SUM( temp.meetings ) > 0, FALSE, TRUE ) AS result FROM (
        SELECT COUNT( m.id ) AS meetings
        FROM tb_meeting_room mr
        JOIN tb_meeting m ON m.type=2 AND mr.`name`=m.place
        WHERE mr.id IN
        <foreach collection="array" open="(" separator="," close=")" item="one">
            #{one}
        </foreach>
        GROUP BY mr.id
    ) temp
</select>

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

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

public interface TbMeetingRoomDao {
    ……
    public boolean searchCanDelete(Integer[] ids);
    public int deleteMeetingRoomByIds(Integer[] ids);
}

二、编写业务层代码

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

public interface MeetingRoomService {
    ……
    public int deleteMeetingRoomByIds(Integer[] ids);
}

MeetingRoomServiceImpl.java类中,实现抽象方法,只有没有关联会议的会议室才能被删除。

public class MeetingRoomServiceImpl implements MeetingRoomService {
    ……
    @Override
    public int deleteMeetingRoomByIds(Integer[] ids) {
        if (!meetingRoomDao.searchCanDelete(ids)) {
            throw new EmosException("无法删除关联会议的会议室");
        }
        int rows = meetingRoomDao.deleteMeetingRoomByIds(ids);
        return rows;
    }
}

三、编写Web层代码

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

@Schema(description = "删除会议室表单")
@Data
public class DeleteMeetingRoomByIdsForm {
    @NotEmpty(message = "ids不能为空")
    @Schema(description = "会议室ID")
    private Integer[] ids;
}

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

public class MeetingRoomController {
    ……
    @PostMapping("/deleteMeetingRoomByIds")
    @Operation(summary = "删除会议室记录")
    @SaCheckPermission(value = {"ROOT", "MEETING_ROOM:DELETE"}, mode = SaMode.OR)
    public R deleteMeetingRoomByIds(@Valid @RequestBody DeleteMeetingRoomByIdsForm form) {
        int rows = meetingRoomService.deleteMeetingRoomByIds(form.getIds());
        return R.ok().put("rows", rows);
    }
}