diff --git a/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java index 51c163c..b601d07 100644 --- a/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java +++ b/backend/src/main/java/com/budwk/app/client/module/activity/controller/ClientGroupController.java @@ -22,7 +22,9 @@ import org.nutz.mvc.annotation.AdaptBy; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * @author zhf @@ -165,7 +167,56 @@ public class ClientGroupController { @At("/list-group-rank/?") @SaCheckLogin(type = StpClientUtil.TYPE) public Result listGroupRank(Long activityId) { - List groupList = dao.query(ActGroup.class, Cnd.where(ActGroup::getActivityId, "=", activityId).desc(ActGroup::getTotalScore)); - return Result.success(groupList); + if (activityId == null) { + return Result.error("活动ID不能为空"); + } + + Sql sql = Sqls.create(""" + SELECT + t1.itemId, + t1.groupId, + t1.score, + t1.ranking, + t2.groupName\s + FROM + act_item_group_score t1 + LEFT JOIN act_group t2 ON t2.id = t1.groupId\s + WHERE + t1.activityId = @activityId + """); + sql.setParam("activityId", activityId); + List list = clientActivityService.listMap(sql); + + // 2. 按 groupId 分组 + Map> groupMap = list.stream() + .collect(Collectors.groupingBy(v -> v.getString("groupId"))); + + // 3. 把每组封装成 VO,算总分,排序,填总排名 + List rankList = new ArrayList<>(); + + groupMap.forEach((groupIdStr, rows) -> { + // 3.1 组总分 + BigDecimal totalScore = rows.stream() + .map(r -> r.getDouble("score", 0d)) // 先拿 double + .map(BigDecimal::valueOf) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 3.2 基本信息 + ActGroup vo = new ActGroup(); + vo.setActivityId(activityId); + vo.setId(Long.valueOf(groupIdStr)); + vo.setGroupName(rows.get(0).getString("groupName")); + vo.setTotalScore(totalScore); + rankList.add(vo); + }); + + // 3.3 排序:总分降序 → groupId 升序(总分相同按 groupId 升序) + rankList.sort( + Comparator.comparing(ActGroup::getTotalScore).reversed() + .thenComparing(ActGroup::getId) + ); + +// List groupList = dao.query(ActGroup.class, Cnd.where(ActGroup::getActivityId, "=", activityId).desc(ActGroup::getTotalScore)); + return Result.success(rankList); } } diff --git a/backend/src/main/java/com/budwk/app/module/activity/controller/ActBigScreenController.java b/backend/src/main/java/com/budwk/app/module/activity/controller/ActBigScreenController.java index 3b6dda5..fd11834 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/controller/ActBigScreenController.java +++ b/backend/src/main/java/com/budwk/app/module/activity/controller/ActBigScreenController.java @@ -106,7 +106,7 @@ public class ActBigScreenController { itemScores.add(scoreItem); } - ArrayList> groupScores = new ArrayList<>(groupMap.values()); + List> groupScores = new ArrayList<>(groupMap.values()); return Result.success(groupScores); } diff --git a/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEntryController.java b/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEntryController.java index adb5056..c480ed8 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEntryController.java +++ b/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEntryController.java @@ -23,6 +23,7 @@ import org.nutz.mvc.annotation.Param; import java.math.BigDecimal; import java.util.List; +import java.util.Objects; @IocBean @At("/platform/activity/scoreEntry") @@ -106,7 +107,8 @@ public class ActScoreEntryController { //在找出这个队伍下面所有的分数 List groupScoreList = scoreList.stream().filter(itemScore -> itemScore.getGroupId().equals(groupId)).toList(); BigDecimal totalScore = groupScoreList.stream() - .map(ActItemGroupScore::getScore) // 提取每个 score(BigDecimal) + .map(ActItemGroupScore::getScore) + .filter(Objects::nonNull) // 把 null 踢掉 .reduce(BigDecimal.ZERO, BigDecimal::add); dao.update(ActGroup.class, Chain.make("totalScore", totalScore), Cnd.where(ActGroup::getId, "=", groupId)); } diff --git a/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java b/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java index ef817a5..6c2dcdc 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java +++ b/backend/src/main/java/com/budwk/app/module/activity/controller/ActUserController.java @@ -242,6 +242,7 @@ public class ActUserController { add(new ExcelExportEntity("所属单位", "unitName", 20)); add(new ExcelExportEntity("报名时间", "signUpTime2", 20)); add(new ExcelExportEntity("是否签到", "isSignInDesc", 20)); + add(new ExcelExportEntity("是否住宿", "isStayDesc", 20)); // add(new ExcelExportEntity("是否展示才艺", "isShowSkillDesc", 20)); // add(new ExcelExportEntity("才艺名称", "skillName", 20)); // add(new ExcelExportEntity("所需器材", "equip", 20)); @@ -251,6 +252,7 @@ public class ActUserController { add(new ExcelExportEntity("接站地址", "stationAddress", 20)); add(new ExcelExportEntity("是否参加茶叙会", "isPartyDesc", 20)); + add(new ExcelExportEntity("是否联络人", "isSIgnUpUser", 20)); }}; response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((activity.getTitle() + "报名数据表.xlsx").getBytes(StandardCharsets.UTF_8), "ISO8859-1")); diff --git a/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java b/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java index 9f011fa..2d18240 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java +++ b/backend/src/main/java/com/budwk/app/module/activity/service/impl/ActUserServiceImpl.java @@ -59,6 +59,10 @@ public class ActUserServiceImpl extends BaseServiceImpl implements ActU WHEN 1 THEN '是' WHEN 0 THEN '' END AS isPartyDesc, + CASE + WHEN u.signUpUserId = u.userId THEN + '是' ELSE '' + END AS isSIgnUpUser, act.`title` AS activityName FROM act_user u @@ -75,6 +79,7 @@ public class ActUserServiceImpl extends BaseServiceImpl implements ActU } cnd.andEX("u.isSignIn", "=", pageForm.getIsSignIn()); cnd.andEX("u.unitId", "=", pageForm.getUnitId()); + cnd.asc("u.unitName"); sql.setCondition(cnd); return sql; } diff --git a/backend/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java b/backend/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java index 7d55847..dbab87a 100644 --- a/backend/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java +++ b/backend/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java @@ -263,7 +263,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys } String hashedPassword = PwdUtil.getPassword(passowrd, user.getSalt()); if (!Strings.sNull(hashedPassword).equalsIgnoreCase(user.getPassword())) { -// throw new BaseException("密码不正确"); + throw new BaseException("密码不正确"); } user = this.fetchLinks(user, "unit"); return user; diff --git a/backend/src/main/resources/views/platform/activity/bigScreen/index.html b/backend/src/main/resources/views/platform/activity/bigScreen/index.html index 9a5fa74..106e8d3 100644 --- a/backend/src/main/resources/views/platform/activity/bigScreen/index.html +++ b/backend/src/main/resources/views/platform/activity/bigScreen/index.html @@ -1646,8 +1646,14 @@ computed: { sortedTeams() { if (!this.teamScores) return [] - // 根据总分排序 - return [...this.teamScores].sort((a, b) => this.calculateTotalScore(b) - this.calculateTotalScore(a)) + return [...this.teamScores].sort((a, b) => { + const scoreA = this.calculateTotalScore(a); + const scoreB = this.calculateTotalScore(b); + if (scoreB !== scoreA) { + return scoreB - scoreA; // 总分降序 + } + return a.groupId - b.groupId; // 总分相同按 groupId 升序 + }); } }, created() { diff --git a/backend/src/main/resources/views/platform/activity/user/index.html b/backend/src/main/resources/views/platform/activity/user/index.html index 0d481e9..a00313c 100644 --- a/backend/src/main/resources/views/platform/activity/user/index.html +++ b/backend/src/main/resources/views/platform/activity/user/index.html @@ -83,7 +83,7 @@ layout("/layouts/platform_1.html"){ - + @@ -112,6 +112,11 @@ layout("/layouts/platform_1.html"){ {{row.isParty ? '是':''}} + + + - - - + + + + + + + + +