You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<SelectionDormitory> pageInfo = selectionDormitoryService.query(selectionDormitory); // 查询可选宿舍列表
List<Map<String,Object>> list = new ArrayList<>(); // 创建用于存储宿舍信息的列表
List<SelectionDormitory> selectionDormitorys = pageInfo.getList(); // 获取查询结果列表
for (SelectionDormitory sd : selectionDormitorys) { // 遍历查询结果列表
Map<String,Object> 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<DormitoryStudent> pageInfo1 = dormitoryStudentService.query(ds); // 查询已选择的学生列表
map.put("selected",pageInfo1.getTotal()); // 设置已选择的学生数量
//构造已经选择的同学信息
List<Map<String,Object>> studentList = new ArrayList<>(); // 创建用于存储已选择学生信息的列表
List<DormitoryStudent> list1 = pageInfo1.getList(); // 获取已选择学生列表
for(DormitoryStudent ds1 : list1){ // 遍历已选择学生列表
Map<String,Object> 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<String,String> map, HttpServletRequest request){ // 定义select_dormitory方法参数为请求体中的Map和HttpServletRequest对象
Student param = (Student)request.getAttribute("student"); // 从请求属性中获取学生信息
Student student = studentService.detail(param.getId()); // 根据学生ID获取学生详细信息
List<Selection> 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<DormitoryStudent> pageInfo = dormitoryStudentService.query(ds); // 查询学生关联的宿舍信息
PageInfo<Notice> 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<String, Object> 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<DormitoryStudent> pageInfo = dormitoryStudentService.query(ds); // 查询学生关联的宿舍信息
PageInfo<Notice> 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对象
}
}