| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package com.train.controller.admin;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.train.common.Result;
- import com.train.entity.*;
- import com.train.mapper.*;
- import com.train.service.ScoreService;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import org.springframework.web.bind.annotation.*;
- import javax.annotation.Resource;
- import java.util.*;
- @Tag(name = "管理端-统计与导出", description = "班级/机构统计、积分榜、导出用数据")
- @RestController
- @RequestMapping("/api/admin")
- public class AdminStatsController {
- @Resource
- private TrainClassMapper trainClassMapper;
- @Resource
- private TrainUserMapper trainUserMapper;
- @Resource
- private TrainGroupMapper trainGroupMapper;
- @Resource
- private TrainGroupMemberMapper trainGroupMemberMapper;
- @Resource
- private TrainSubmissionMapper trainSubmissionMapper;
- @Resource
- private TrainTeachingCardMapper trainTeachingCardMapper;
- @Resource
- private TrainCheckinMapper trainCheckinMapper;
- @Resource
- private TrainPrepCheckMapper trainPrepCheckMapper;
- @Resource
- private TrainSurveyMapper trainSurveyMapper;
- @Resource
- private TrainVoteMapper trainVoteMapper;
- @Resource
- private TrainPlanMapper trainPlanMapper;
- @Resource
- private TrainRoadmapMapper trainRoadmapMapper;
- @Resource
- private TrainCouponMapper trainCouponMapper;
- @Resource
- private TrainScoreMapper trainScoreMapper;
- @Resource
- private ScoreService scoreService;
- @Operation(summary = "班级整体统计")
- @PostMapping("/stats/overview")
- public Result<Map<String, Object>> overview(@RequestBody(required = false) Map<String, Object> body) {
- Map<String, Object> data = new HashMap<>();
- data.put("totalClasses", count(trainClassMapper.selectList(null)));
- data.put("totalUsers", count(trainUserMapper.selectList(null)));
- data.put("totalGroups", count(trainGroupMapper.selectList(null)));
- data.put("totalSubmissions", count(trainSubmissionMapper.selectList(null)));
- data.put("totalCheckins", count(trainCheckinMapper.selectList(null)));
- data.put("totalCards", count(trainTeachingCardMapper.selectList(null)));
- data.put("totalVotes", count(trainVoteMapper.selectList(null)));
- data.put("totalPlans", count(trainPlanMapper.selectList(null)));
- data.put("totalCoupons", count(trainCouponMapper.selectList(null)));
- // 按班级统计学员/组/成果
- List<Map<String, Object>> classStats = new ArrayList<>();
- List<TrainClass> classes = trainClassMapper.selectList(null);
- for (TrainClass c : classes) {
- Map<String, Object> row = new HashMap<>();
- row.put("classId", c.getId());
- row.put("className", c.getName());
- row.put("userCount", count(trainUserMapper.selectList(
- new LambdaQueryWrapper<TrainUser>().eq(TrainUser::getClassId, c.getId()))));
- row.put("groupCount", count(trainGroupMapper.selectList(
- new LambdaQueryWrapper<TrainGroup>().eq(TrainGroup::getClassId, c.getId()))));
- classStats.add(row);
- }
- data.put("classStats", classStats);
- return Result.success(data);
- }
- @Operation(summary = "积分榜(管理端,可筛选班级)")
- @PostMapping("/stats/scoreboard")
- public Result<List<Map<String, Object>>> scoreboard(@RequestBody(required = false) Map<String, Object> body) {
- LambdaQueryWrapper<TrainGroup> qw = new LambdaQueryWrapper<>();
- if (body != null && body.get("classId") != null) {
- qw.eq(TrainGroup::getClassId, Long.valueOf(body.get("classId").toString()));
- }
- List<TrainGroup> groups = trainGroupMapper.selectList(qw);
- List<Map<String, Object>> board = new ArrayList<>();
- for (TrainGroup g : groups) {
- Map<String, Object> row = new HashMap<>();
- row.put("groupId", g.getId());
- row.put("groupName", g.getName());
- row.put("slogan", g.getSlogan());
- List<TrainScore> scores = trainScoreMapper.selectList(
- new LambdaQueryWrapper<TrainScore>().eq(TrainScore::getGroupId, g.getId()));
- row.put("groupTotal", scores.stream().mapToInt(TrainScore::getPoints).sum());
- row.put("memberTotal", scoreService.groupMemberTotal(g.getId()));
- Long mc = trainGroupMemberMapper.selectCount(
- new LambdaQueryWrapper<TrainGroupMember>().eq(TrainGroupMember::getGroupId, g.getId()));
- row.put("memberCount", mc == null ? 0 : mc);
- board.add(row);
- }
- board.sort((a, b) -> Integer.compare((int) b.get("groupTotal"), (int) a.get("groupTotal")));
- return Result.success(board);
- }
- @Operation(summary = "个人积分榜")
- @PostMapping("/stats/user-scoreboard")
- public Result<List<Map<String, Object>>> userScoreboard(@RequestBody(required = false) Map<String, Object> body) {
- LambdaQueryWrapper<TrainUser> qw = new LambdaQueryWrapper<>();
- if (body != null && body.get("classId") != null) {
- qw.eq(TrainUser::getClassId, Long.valueOf(body.get("classId").toString()));
- }
- List<TrainUser> users = trainUserMapper.selectList(qw);
- List<Map<String, Object>> board = new ArrayList<>();
- for (TrainUser u : users) {
- Map<String, Object> row = new HashMap<>();
- row.put("uid", u.getId());
- row.put("name", u.getName());
- row.put("role", u.getRole());
- row.put("total", scoreService.userTotal(u.getId()));
- board.add(row);
- }
- board.sort((a, b) -> Integer.compare((int) b.get("total"), (int) a.get("total")));
- return Result.success(board);
- }
- private long count(List<?> list) {
- return list == null ? 0 : list.size();
- }
- }
|