package com.yanzhen.controller; // 定义包名 import com.github.pagehelper.PageInfo; // 导入分页插件 import com.yanzhen.entity.*; // 导入实体类 import com.yanzhen.service.*; // 导入服务接口 import com.yanzhen.utils.Result; // 导入结果封装类 import org.springframework.beans.factory.annotation.Autowired; // 导入自动装配注解 import org.springframework.web.bind.annotation.*; // 导入Spring MVC相关注解 import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest类 import java.util.ArrayList; // 导入ArrayList类 import java.util.Date; // 导入Date类 import java.util.HashMap; // 导入HashMap类 import java.util.List; // 导入List接口 import java.util.Map; // 导入Map接口 @RestController // 声明这是一个控制器,并且返回的数据直接写入HTTP响应体中 @RequestMapping("/stu") // 设置请求路径前缀 public class StuController { @Autowired // 自动注入StudentService实例 private StudentService学生管理 studentService; @Autowired // 自动注入OrgService实例 private OrgService机构管理 orgService; @Autowired // 自动注入GradeService实例 private GradeService年级管理 gradeService; @Autowired // 自动注入SelectionDormitoryService实例 private SelectionDormitoryService宿舍管理 selectionDormitoryService; @Autowired // 自动注入DormitoryService实例 private DormitoryService宿舍编号设置 dormitoryService; @Autowired // 自动注入DormitoryStudentService实例 private DormitoryStudentService宿舍预选设置 dormitoryStudentService; @Autowired // 自动注入AbsenceService实例 private AbsenceService缺勤管理 absenceService; @Autowired // 自动注入RepairService实例 private RepairService报修管理 repairService; @Autowired // 自动注入NoticeService实例 private NoticeService公告管理 noticeService; @Autowired // 自动注入UserService实例 private UserService用户管理 userService; @Autowired // 自动注入BuildingService实例 private BuildingService楼层设置 buildingService; @Autowired // 自动注入SelectionService实例 private SelectionService学生查询管理 selectionService; @GetMapping("/info") // 映射GET请求到/info路径 public Result info(HttpServletRequest request) { // 定义info方法,参数为HttpServletRequest对象 Student param = (Student)request.getAttribute("student"); // 从请求属性中获取学生信息 Student student = studentService.detail(param.getId()); // 根据学生ID获取学生详细信息 student.setOrg(orgService.detail(student.getClazzId())); // 设置学生所属组织信息 student.setGrade(gradeService.detail(student.getGradeId())); // 设置学生所在年级信息 return Result.ok(student); // 返回包含学生信息的Result对象 } @GetMapping("/select_dormitory") // 映射GET请求到/select_dormitory路径 public Result select_dormitory(HttpServletRequest request) { // 定义select_dormitory方法,参数为HttpServletRequest对象 Student param = (Student)request.getAttribute("student"); // 从请求属性中获取学生信息 Student student = studentService.detail(param.getId()); // 根据学生ID获取学生详细信息 SelectionDormitory selectionDormitory = new SelectionDormitory(); // 创建SelectionDormitory对象 selectionDormitory.setClazzId(student.getClazzId()); // 设置班级ID selectionDormitory.setLimit(1000); // 设置查询限制条数 PageInfo pageInfo = selectionDormitoryService.query(selectionDormitory); // 查询可选宿舍列表 List> list = new ArrayList<>(); // 创建用于存储宿舍信息的列表 List selectionDormitorys = pageInfo.getList(); // 获取查询结果列表 for (SelectionDormitory sd : selectionDormitorys) { // 遍历查询结果列表 Map map = new HashMap<>(); // 创建用于存储单个宿舍信息的Map对象 //查询宿舍的基本信息 Dormitory dormitory = dormitoryService.detail(sd.getDormitoryId()); // 根据宿舍ID获取宿舍详细信息 map.put("capacity",dormitory.getCapacity()); // 设置宿舍容量 map.put("id",dormitory.getId()); // 设置宿舍ID map.put("no",dormitory.getNo()); // 设置宿舍编号 map.put("sex",dormitory.getSex()); // 设置宿舍性别要求 map.put("buildingName",buildingService.detail(dormitory.getBuildingId()).getName()); // 设置宿舍所在建筑名称 //查询已选择的所有学生 DormitoryStudent ds = new DormitoryStudent(); // 创建DormitoryStudent对象 ds.setDormitoryId(sd.getDormitoryId()); // 设置宿舍ID ds.setLimit(1000); // 设置查询限制条数 PageInfo pageInfo1 = dormitoryStudentService.query(ds); // 查询已选择的学生列表 map.put("selected",pageInfo1.getTotal()); // 设置已选择的学生数量 //构造已经选择的同学信息 List> studentList = new ArrayList<>(); // 创建用于存储已选择学生信息的列表 List list1 = pageInfo1.getList(); // 获取已选择学生列表 for(DormitoryStudent ds1 : list1){ // 遍历已选择学生列表 Map studentMap = new HashMap<>(); // 创建用于存储单个学生信息的Map对象 Student detail = studentService.detail(ds1.getStudentId()); // 根据学生ID获取学生详细信息 studentMap.put("stuNo",detail.getStuNo()); // 设置学生学号 studentMap.put("name",detail.getName()); // 设置学生姓名 studentMap.put("bedId",ds1.getBedId()); // 设置学生床位ID studentList.add(studentMap); // 将学生信息添加到列表中 } map.put("studentList",studentList); // 将已选择学生信息列表添加到宿舍信息Map中 list.add(map); // 将宿舍信息添加到最终列表中 } return Result.ok(list); // 返回包含宿舍信息的Result对象 } @PostMapping("select_dormitory_submit") // 映射POST请求到/select_dormitory_submit路径 public Result select_dormitory(@RequestBody Map map, HttpServletRequest request){ // 定义select_dormitory方法,参数为请求体中的Map和HttpServletRequest对象 Student param = (Student)request.getAttribute("student"); // 从请求属性中获取学生信息 Student student = studentService.detail(param.getId()); // 根据学生ID获取学生详细信息 List selections = selectionService.queryByClazzId(student.getClazzId()); // 根据班级ID查询可选时间段列表 if(selections != null && selections.size()==0){ // 如果未设置或没有可选时间段 return Result.fail("操作失败,未设置!请联系管理员"); // 返回失败结果 } Selection selection = selections.get(0); // 获取第一个可选时间段 if(selection.getStartTime().getTime() > System.currentTimeMillis() || System.currentTimeMillis() > selection.getEndTime().getTime()){ // 如果当前时间不在可选时间段内 return Result.fail("操作失败,不在时间段内选择"); // 返回失败结果 } String bedId = map.get("bedId"); // 从请求体中获取床位ID String dormitoryId = map.get("dormitoryId"); // 从请求体中获取宿舍ID int row = dormitoryStudentService.select_dormitory_submit(student.getId(),Integer.parseInt(dormitoryId),Integer.parseInt(bedId)); // 根据学生ID、宿舍ID和床位ID提交选择宿舍请求 if(row > 0){ // 如果提交成功 return Result.ok(); // 返回成功结果 }else{ return Result.fail(); // 如果提交失败,返回失败结果 } } @PostMapping("repair_create") // 映射POST请求到/repair_create路径 public Result repair_create(@RequestBody Repair repair,HttpServletRequest request){ // 定义repair_create方法,参数为请求体中的Repair对象和HttpServletRequest对象 Student param = (Student)request.getAttribute("student"); // 从请求属性中获取学生信息 DormitoryStudent ds = new DormitoryStudent(); // 创建DormitoryStudent对象 ds.setStudentId(param.getId()); // 设置学生ID PageInfo pageInfo = dormitoryStudentService.query(ds); // 查询学生关联的宿舍信息 PageInfo noticePageInfo = null; // 初始化通知信息分页对象 if(pageInfo.getList() != null && pageInfo.getList().size() > 0){ // 如果存在关联的宿舍信息 DormitoryStudent dormitoryStudent = pageInfo.getList().get(0); // 获取第一个关联的宿舍信息 Dormitory detail = dormitoryService.detail(dormitoryStudent.getDormitoryId()); // 根据宿舍ID获取宿舍详细信息 repair.setBuildingId(detail.getBuildingId()); // 设置维修记录的建筑ID repair.setDormitoryId(dormitoryStudent.getDormitoryId()); // 设置维修记录的宿舍ID repair.setStudentId(param.getId()); // 设置维修记录的学生ID repair.setCreateDate(new Date()); // 设置维修记录的创建日期 repair.setStatus(0); // 设置维修记录的状态为0(未完成) int flag = repairService.create(repair); // 提交维修记录并获取操作结果标志 if(flag > 0){ // 如果提交成功 return Result.ok(); // 返回成功结果 }else{ return Result.fail(); // 如果提交失败,返回失败结果 } }else{ return Result.fail("操作失败,没有关联的宿舍"); // 如果不存在关联的宿舍信息,返回失败结果 } } @PostMapping("notice_query") // 映射POST请求到/notice_query路径 public Map notice_query(@RequestBody Notice notice,HttpServletRequest request){ // 定义notice_query方法,参数为请求体中的Notice对象和HttpServletRequest对象 Student param = (Student)request.getAttribute("student"); // 从请求属性中获取学生信息 DormitoryStudent ds = new DormitoryStudent(); // 创建DormitoryStudent对象 ds.setStudentId(param.getId()); // 设置学生ID PageInfo pageInfo = dormitoryStudentService.query(ds); // 查询学生关联的宿舍信息 PageInfo noticePageInfo = null; // 初始化通知信息分页对象 if(pageInfo.getList() != null && pageInfo.getList().size() > 0){ // 如果存在关联的宿舍信息 DormitoryStudent dormitoryStudent = pageInfo.getList().get(0); // 获取第一个关联的宿舍信息 Dormitory detail = dormitoryService.detail(dormitoryStudent.getDormitoryId()); // 根据宿舍ID获取宿舍详细信息 notice.setBuildingId(detail.getBuildingId()); // 设置通知的建筑ID noticePageInfo = noticeService.queryByBuildingId(notice); // 根据建筑ID查询通知列表 noticePageInfo.getList().forEach(entity->{ // 遍历通知列表 entity.setUser(userService.detail(entity.getUserId())); // 根据用户ID获取用户详细信息并设置到通知对象中 }); }else{ noticePageInfo = new PageInfo<>(null); // 如果不存在关联的宿舍信息,初始化空的通知分页对象 } return Result.ok(noticePageInfo); // 返回包含通知信息的Result对象 } }