From 03074c381b8cf6b26dd9a6c8007f8a4203e34a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=85=E6=88=BF?= Date: Fri, 16 Jan 2026 13:46:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=9B=86=E4=BD=93=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E5=90=8E=E6=98=BE=E7=A4=BA=E9=98=9F=E5=91=98?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 MartialTeamMapper 和 MartialTeam 依赖 - 修改查询逻辑:通过 team_name 关联 martial_team 表 - 正确查询 martial_team_member 获取队员信息 Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- Dockerfile | 14 ++++ .../impl/MartialScheduleServiceImpl.java | 66 +++++++++++++++---- 2 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6bfac6a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM eclipse-temurin:17-jre-alpine + +RUN apk add --no-cache curl + +WORKDIR /app + +COPY target/blade-api.jar /app/blade-api.jar + +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 CMD curl -f http://localhost:8123/actuator/health || exit 1 + +ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC" +ENV SPRING_PROFILE=dev + +CMD ["sh", "-c", "java ${JAVA_OPTS} -jar /app/blade-api.jar --spring.profiles.active=${SPRING_PROFILE}"] diff --git a/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImpl.java b/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImpl.java index 0451030..a6206af 100644 --- a/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImpl.java +++ b/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleServiceImpl.java @@ -8,8 +8,12 @@ import org.springblade.modules.martial.mapper.MartialScheduleDetailMapper; import org.springblade.modules.martial.mapper.MartialScheduleGroupMapper; import org.springblade.modules.martial.mapper.MartialScheduleParticipantMapper; import org.springblade.modules.martial.mapper.MartialAthleteMapper; +import org.springblade.modules.martial.mapper.MartialTeamMemberMapper; import org.springblade.modules.martial.pojo.entity.MartialAthlete; +import org.springblade.modules.martial.mapper.MartialTeamMapper; +import org.springblade.modules.martial.pojo.entity.MartialTeamMember; import org.springblade.modules.martial.pojo.dto.CompetitionGroupDTO; +import org.springblade.modules.martial.pojo.entity.MartialTeam; import org.springblade.modules.martial.pojo.dto.ParticipantDTO; import org.springblade.modules.martial.pojo.dto.SaveScheduleDraftDTO; import org.springblade.modules.martial.pojo.dto.ScheduleResultDTO; @@ -58,6 +62,10 @@ public class MartialScheduleServiceImpl extends ServiceImpl participantDTOs = groupDetails.stream() - .filter(d -> d.getParticipantId() != null) - .map(d -> { - ParticipantDTO dto = new ParticipantDTO(); - dto.setId(d.getParticipantId()); - dto.setSchoolUnit(d.getOrganization()); - dto.setStatus(d.getCheckInStatus() != null ? d.getCheckInStatus() : "未签到"); - dto.setSortOrder(d.getPerformanceOrder()); - dto.setPlayerName(d.getPlayerName()); - return dto; - }) - .collect(Collectors.toList()); - + boolean isCollective = firstDetail.getProjectType() != null && firstDetail.getProjectType() == 2; + List participantDTOs = new ArrayList<>(); + for (ScheduleGroupDetailVO d : groupDetails) { + if (d.getParticipantId() == null) continue; + + ParticipantDTO dto = new ParticipantDTO(); + dto.setId(d.getParticipantId()); + dto.setSchoolUnit(d.getOrganization()); + dto.setStatus(d.getCheckInStatus() != null ? d.getCheckInStatus() : "未签到"); + dto.setSortOrder(d.getPerformanceOrder()); + dto.setPlayerName(d.getPlayerName()); + + // For collective projects, query team members + if (isCollective) { + List> memberList = new ArrayList<>(); + // Step 1: Get athlete record to find team_name + MartialAthlete participantAthlete = athleteMapper.selectById(d.getParticipantId()); + if (participantAthlete != null && participantAthlete.getTeamName() != null) { + // Step 2: Find team by team_name + QueryWrapper teamWrapper = new QueryWrapper<>(); + teamWrapper.eq("team_name", participantAthlete.getTeamName()); + teamWrapper.eq("is_deleted", 0); + MartialTeam team = teamMapper.selectOne(teamWrapper); + if (team != null) { + // Step 3: Query team members + QueryWrapper memberWrapper = new QueryWrapper<>(); + memberWrapper.eq("team_id", team.getId()); + memberWrapper.eq("is_deleted", 0); + List members = teamMemberMapper.selectList(memberWrapper); + // Step 4: Get member athlete info + for (MartialTeamMember member : members) { + Map memberData = new HashMap<>(); + memberData.put("id", member.getId()); + MartialAthlete athlete = athleteMapper.selectById(member.getAthleteId()); + memberData.put("name", athlete != null ? athlete.getPlayerName() : ""); + memberData.put("gender", athlete != null ? athlete.getGender() : ""); + memberList.add(memberData); + } + } + } + dto.setMembers(memberList); + } + + participantDTOs.add(dto); + } groupDTO.setParticipants(participantDTOs); groupDTO.setStatus(calculateGroupStatus(participantDTOs)); groupDTOs.add(groupDTO);