package comxyp.controller; import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import comxyp.pojo.Room; import comxyp.service.RoomService; import comxyp.utils.DataGridViewResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap; import java.util.List; import java.util.Map; // 控制器类,处理与房间(Room)相关的请求 // 该类使用了 Spring 框架的相关注解,被标记为一个控制器,用于接收和处理与房间相关的各种 Web 请求 // 通过 @RequestMapping 注解将该控制器映射到 "/rooms" 路径下,即该控制器下的所有请求都将以 "/rooms" 作为请求的前缀 @Controller @RequestMapping("/rooms") public class RoomConroller { // 自动注入 RoomService,用于调用业务逻辑层的方法 // 通过 Spring 的依赖注入机制,将 RoomService 的实现类自动注入到这个控制器中 // 这样可以方便地调用 RoomService 中的业务逻辑方法,实现房间信息的增删改查等操作,而无需手动创建 RoomService 的实例 @Autowired private RoomService roomService; // 处理房间列表请求 // 该方法用于获取房间列表,并将结果以分页的形式返回给客户端 // 通过 @RequestMapping 注解将该方法映射到 "/rooms/roomsList" 请求路径上 // 当客户端发起该请求时,此方法会被调用 // 使用 @ResponseBody 注解表示该方法的返回值将直接作为 HTTP 响应体的内容,通常会以 JSON 等格式返回给客户端 @RequestMapping("/roomsList") @ResponseBody public DataGridViewResult roomsList() { // 设置分页信息,从第 1 页开始,每页显示 1000 条记录 // 使用 PageHelper 工具进行分页设置,它会对后续的查询操作进行拦截并添加分页逻辑 // 例如,在数据库查询时添加 LIMIT 子句,以实现分页效果 PageHelper.startPage(1, 1000); // 调用 roomService 的 roomList 方法获取房间列表 // 该方法将从数据源(如数据库)中查询房间信息,具体的查询逻辑在 RoomService 中实现 // 并将查询结果存储在一个 List 集合中,其中包含了符合条件的房间信息 List list = roomService.roomList(); // 创建分页对象,将房间列表放入分页对象中 // 使用 PageInfo 类对查询得到的房间列表进行包装,以获取更多的分页信息,如总记录数、总页数等 // 这些信息对于前端进行分页展示和操作非常重要,例如可以根据总记录数计算分页导航栏的页数,根据当前页的数据展示房间列表 PageInfo pageInfo = new PageInfo<>(list); // 以 DataGridViewResult 的形式返回分页信息,包括总记录数和当前页的房间列表 // DataGridViewResult 可能是一个自定义的结果类,它将存储分页的总记录数和当前页的房间列表 // 这样可以将数据以一种结构化的方式返回给前端,方便前端进行展示和处理 // 前端可以根据返回的结果,将房间信息展示在页面上,并根据分页信息进行分页操作,如切换页面、显示总记录数等 return new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList()); } // 处理添加房间请求 // 该方法用于处理添加房间的操作,接收一个 Room 对象作为参数 // 通过 @RequestMapping 注解将该方法映射到 "/rooms/addRoom" 请求路径上 // 当客户端发起该请求时,此方法会被调用 // 使用 @ResponseBody 注解表示该方法的返回值将直接作为 HTTP 响应体的内容,通常会以 JSON 等格式返回给客户端 @RequestMapping("/addRoom") @ResponseBody public String addRoom(Room room) { // 创建一个 Map 存储响应信息 // 该 Map 用于存储添加房间操作的结果信息,包括操作是否成功和相应的消息 // 可以使用不同的键值对存储不同的信息,方便后续将其转换为 JSON 字符串返回给客户端 Map map = new HashMap<>(); // 调用 roomService 的 addRoom 方法添加房间 // 该方法将执行添加房间的业务逻辑,将传入的 Room 对象存储到数据库或其他存储介质中 // 并返回受影响的行数,以此来判断添加操作是否成功 int n = roomService.addRoom(room); // 若添加成功,设置相应的成功信息 // 当受影响的行数大于 0 时,表示添加操作成功 if (n > 0) { // 在 Map 中设置 success 键的值为 true,表示添加操作成功 map.put("success", true); // 在 Map 中设置 msg 键的值为 "添加成功",作为给客户端的成功消息 // 客户端可以根据该消息提示用户添加操作成功 map.put("msg", "添加成功"); } else { // 若添加失败,设置相应的错误信息 // 当受影响的行数小于或等于 0 时,表示添加操作失败 // 可能是由于数据库操作错误、数据不合法等原因导致添加失败 // 在 Map 中设置 success 键的值为 false,表示添加操作失败 map.put("success", false); // 在 Map 中设置 msg 键的值为 "添加失败",作为给客户端的错误消息 // 客户端可以根据该消息提示用户添加操作失败,并可以根据具体情况进行相应的处理,如重新输入房间信息等 map.put("msg", "添加失败"); } // 将结果转换为 JSON 字符串并返回 // 使用阿里巴巴的 fastjson 工具将存储操作结果的 Map 转换为 JSON 字符串 // 以便将结果以 JSON 格式返回给客户端,客户端可以方便地解析该 JSON 字符串,获取操作结果信息 return JSON.toJSONString(map); } // 处理更新房间请求 // 该方法用于处理更新房间信息的操作,接收一个 Room 对象作为参数 // 通过 @RequestMapping 注解将该方法映射到 "/rooms/updateRoom" 请求路径上 // 当客户端发起该请求时,此方法会被调用 // 使用 @ResponseBody 注解表示该方法的返回值将直接作为 HTTP 响应体的内容,通常会以 JSON 等格式返回给客户端 @RequestMapping("/updateRoom") @ResponseBody public String updateRoom(Room room) { // 创建一个 Map 存储响应信息 // 该 Map 用于存储更新房间操作的结果信息,包括操作是否成功和相应的消息 // 可以使用不同的键值对存储不同的信息,方便后续将其转换为 JSON 字符串返回给客户端 Map map = new HashMap<>(); // 调用 roomService 的 updateRoom 方法更新房间信息 // 该方法将根据传入的 Room 对象更新数据库或其他存储介质中的房间信息 // 并返回受影响的行数,以此来判断更新操作是否成功 int n = roomService.updateRoom(room); // 若更新成功,设置相应的成功信息 // 当受影响的行数大于 0 时,表示更新操作成功 if (n > 0) { // 在 Map 中设置 success 键的值为 true,表示更新操作成功 map.put("success", true); // 在 Map 中设置 msg 键的值为 "更新成功",作为给客户端的成功消息 // 客户端可以根据该消息提示用户更新操作成功 map.put("msg", "更新成功"); } else { // 若更新失败,设置相应的错误信息 // 当受影响的行数小于或等于 0 时,表示更新操作失败 // 可能是由于数据库操作错误、数据不合法等原因导致更新失败 // 在 Map 中设置 success 键的值为 false,表示更新操作失败 map.put("success", false); // 在 Map 中设置 msg 键的值为 "更新失败",作为给客户端的错误消息 // 客户端可以根据该消息提示用户更新操作失败,并可以根据具体情况进行相应的处理,如检查更新的房间信息是否正确等 map.put("msg", "更新失败"); } // 将结果转换为 JSON 字符串并返回 // 使用阿里巴巴的 fastjson 工具将存储操作结果的 Map 转换为 JSON 字符串 // 以便将结果以 JSON 格式返回给客户端,客户端可以方便地解析该 JSON 字符串,获取操作结果信息 return JSON.toJSONString(map); } // 处理删除房间请求 // 该方法用于处理删除房间的操作,接收一个房间的唯一标识符(通常是房间的 ID)作为参数 // 通过 @RequestMapping 注解将该方法映射到 "/rooms/deleteRoom" 请求路径上 // 当客户端发起该请求时,此方法会被调用 // 使用 @ResponseBody 注解表示该方法的返回值将直接作为 HTTP 响应体的内容,通常会以 JSON 等格式返回给客户端 @RequestMapping("/deleteRoom") @ResponseBody public String deleteRoom(int id) { // 创建一个 Map 存储响应信息 // 该 Map 用于存储删除房间操作的结果信息,包括操作是否成功和相应的消息 // 可以使用不同的键值对存储不同的信息,方便后续将其转换为 JSON 字符串返回给客户端 Map map = new HashMap<>(); // 调用 roomService 的 deleteRoom 方法删除房间 // 该方法将根据传入的房间 ID 删除数据库或其他存储介质中的房间信息 // 并返回受影响的行数,以此来判断删除操作是否成功 int n = roomService.deleteRoom(id); // 若删除成功,设置相应的成功信息 // 当受影响的行数大于 0 时,表示删除操作成功 if (n > 0) { // 在 Map 中设置 success 键的值为 true,表示删除操作成功 map.put("success", true); // 在 Map 中设置 msg 键的值为 "删除成功",作为给客户端的成功消息 // 客户端可以根据该消息提示用户删除操作成功 map.put("msg", "删除成功"); } else { // 若删除失败,设置相应的错误信息 // 当受影响的行数小于或等于 0 时,表示删除操作失败 // 可能是由于数据库操作错误、数据不合法等原因导致删除失败 // 在 Map 中设置 success 键的值为 false,表示删除操作失败 map.put("success", false); // 在 Map 中设置 msg 键的值为 "删除失败",作为给客户端的错误消息 // 客户端可以根据该消息提示用户删除操作失败,并可以根据具体情况进行相应的处理,如检查房间是否已被占用等 map.put("msg", "删除失败"); } // 将结果转换为 JSON 字符串并返回 // 使用阿里巴巴的 fastjson 工具将存储操作结果的 Map 转换为 JSON 字符串 // 以便将结果以 JSON 格式返回给客户端,客户端可以方便地解析该 JSON 字符串,获取操作结果信息 return JSON.toJSONString(map); } }