会议室管理模块只剩下删除功能还没有做,这节课我们编写程序来实现删除会议室的后端代码。删除会议室有个要求,那就是只能删除空闲的会议室。如果某会议室有关联了会议,这样的会议室是不能删除的。
一、编写持久层代码
在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);
}
}