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.

77 lines
4.4 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.Building;
import com.yanzhen.entity.Dormitory;
import com.yanzhen.entity.Notice;
import com.yanzhen.service.BuildingService;
import com.yanzhen.service.DormitoryService宿;
import com.yanzhen.service.DormitoryStudentService宿;
import com.yanzhen.service.NoticeService;
import com.yanzhen.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController // 声明这是一个控制器,并且返回的数据直接写入 HTTP 响应体中,而不是解析为跳转路径。
@RequestMapping("/main") // 设置请求的根路径为 /main所有该控制器下的请求都会以 /main 开头。
public class MainController {
@Autowired // 自动注入 BuildingService 实例,用于处理楼宇相关的业务逻辑。
private BuildingService buildingService;
@Autowired // 自动注入 DormitoryService 实例,用于处理宿舍相关的业务逻辑。
private DormitoryService宿 dormitoryService;
@Autowired // 自动注入 DormitoryStudentService 实例,用于处理学生宿舍分配的业务逻辑。
private DormitoryStudentService宿 dormitoryStudentService;
@Autowired // 自动注入 NoticeService 实例,用于处理公告通知的业务逻辑。
private NoticeService noticeService;
@GetMapping("/building") // 映射 HTTP GET 请求到 /main/building 路径。
public Result building(){
Building building = new Building(); // 创建一个新的楼宇对象。
building.setLimit(1000); // 设置查询限制为1000条记录。
PageInfo<Building> pageInfo = buildingService.query(building); // 调用服务层方法查询楼宇信息。
List<Map<String,Object>> list = new ArrayList<>(); // 创建一个列表来存储每个楼宇的信息。
DecimalFormat df = new DecimalFormat("######0.00"); // 定义一个格式化工具,用于格式化百分比。
pageInfo.getList().forEach(entity->{ // 遍历查询到的楼宇列表。
Map<String,Object> map = new HashMap<>(); // 创建一个 Map 来存储单个楼宇的信息。
Dormitory param = new Dormitory(); // 创建一个新的宿舍对象。
param.setBuildingId(entity.getId()); // 设置宿舍对象的楼宇ID。
param.setLimit(1000000); // 设置查询限制为1000000条记录。
PageInfo<Dormitory> dormitoryPageInfo = dormitoryService.query(param); // 调用服务层方法查询宿舍信息。
int all = dormitoryPageInfo.getList().size(); // 获取该楼宇下的总宿舍数。
map.put("name",entity.getName()); // 将楼宇名称存入 Map。
map.put("all",all); // 将总宿舍数存入 Map。
int used = dormitoryStudentService.countByBuildingId(entity.getId()); // 计算已分配宿舍的学生数量。
map.put("used",used); // 将已分配宿舍的学生数量存入 Map。
int unused = all-used; // 计算未分配宿舍的数量。
map.put("unused",unused); // 将未分配宿舍的数量存入 Map。
if(all == 0){ // 如果总宿舍数为0则百分比为0。
map.put("percent",0);
}else{ // 否则,计算并格式化已使用宿舍的百分比。
map.put("percent",df.format((float)used/all));
}
list.add(map); // 将当前楼宇的信息添加到列表中。
});
return Result.ok(list); // 返回包含所有楼宇信息的列表。
}
@GetMapping("/notice") // 映射 HTTP GET 请求到 /main/notice 路径。
public Result notice(){
Notice notice = new Notice(); // 创建一个新的公告对象。
notice.setLimit(5); // 设置查询限制为5条记录。
PageInfo<Notice> pageInfo = noticeService.query(notice); // 调用服务层方法查询公告信息。
return Result.ok(pageInfo.getList()); // 返回包含公告信息的列表。
}
}