From 1d6c3d9df58f277f6a71300605516ee333c75dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=85=E6=88=BF?= Date: Sun, 21 Dec 2025 15:22:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=81=E5=88=A4=E9=95=BF=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=86=E6=95=B0=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 限制修改范围为原始分数±0.050 2. 修改记录改为更新而非新增(避免重复记录) 🤖 Generated with Claude Code Co-Authored-By: Claude --- .../service/impl/MartialScoreServiceImpl.java | 81 +++++++++++++------ 1 file changed, 56 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/springblade/modules/martial/service/impl/MartialScoreServiceImpl.java b/src/main/java/org/springblade/modules/martial/service/impl/MartialScoreServiceImpl.java index 211cd8a..0d2d643 100644 --- a/src/main/java/org/springblade/modules/martial/service/impl/MartialScoreServiceImpl.java +++ b/src/main/java/org/springblade/modules/martial/service/impl/MartialScoreServiceImpl.java @@ -285,7 +285,13 @@ public class MartialScoreServiceImpl extends ServiceImpl s.getOriginalScore() != null && s.getModifyReason() != null) + .filter(s -> s.getOriginalScore() != null) + .sorted((a, b) -> { + if (a.getModifyTime() == null && b.getModifyTime() == null) return 0; + if (a.getModifyTime() == null) return 1; + if (b.getModifyTime() == null) return -1; + return b.getModifyTime().compareTo(a.getModifyTime()); + }) .findFirst() .orElse(null); @@ -326,42 +332,67 @@ public class MartialScoreServiceImpl extends ServiceImpl 0) { + throw new ServiceException("修改分数只能在原始分数±0.050范围内"); + } + } + + // 5. 更新选手总分 athlete.setTotalScore(dto.getModifiedScore()); boolean athleteUpdated = athleteService.updateById(athlete); - // 5. 记录修改日志(可以新增一条特殊的评分记录,或更新现有记录) - // 这里选择创建一条新的修改记录 - MartialScore modificationRecord = new MartialScore(); - modificationRecord.setCompetitionId(athlete.getCompetitionId()); - modificationRecord.setAthleteId(athlete.getId()); - modificationRecord.setProjectId(athlete.getProjectId()); - modificationRecord.setJudgeId(dto.getModifierId()); - modificationRecord.setScore(dto.getModifiedScore()); - modificationRecord.setOriginalScore(originalTotalScore); - modificationRecord.setModifyReason(dto.getNote()); - modificationRecord.setModifyTime(LocalDateTime.now()); - modificationRecord.setScoreTime(LocalDateTime.now()); + // 6. 查找是否已存在裁判长的修改记录(通过判断judge_name包含"裁判长修改") + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MartialScore::getAthleteId, dto.getAthleteId()) + .like(MartialScore::getJudgeName, "裁判长修改"); + MartialScore existingRecord = this.getOne(queryWrapper); - // 查询修改者信息 - MartialJudge modifier = judgeService.getById(dto.getModifierId()); - if (modifier != null) { - modificationRecord.setJudgeName(modifier.getName() + "(裁判长修改)"); + boolean recordSaved; + if (existingRecord != null) { + // 7a. 更新现有的裁判长修改记录 + existingRecord.setScore(dto.getModifiedScore()); + existingRecord.setOriginalScore(originalTotalScore); + existingRecord.setModifyReason(dto.getNote()); + existingRecord.setModifyTime(LocalDateTime.now()); + recordSaved = this.updateById(existingRecord); + log.info("裁判长更新评分记录 - 选手ID:{}, 姓名:{}, 原始总分:{}, 修改后总分:{}, 修改原因:{}", + athlete.getId(), athlete.getPlayerName(), originalTotalScore, dto.getModifiedScore(), dto.getNote()); + } else { + // 7b. 创建新的裁判长修改记录 + MartialScore modificationRecord = new MartialScore(); + modificationRecord.setCompetitionId(athlete.getCompetitionId()); + modificationRecord.setAthleteId(athlete.getId()); + modificationRecord.setProjectId(athlete.getProjectId()); + modificationRecord.setJudgeId(dto.getModifierId()); + modificationRecord.setScore(dto.getModifiedScore()); + modificationRecord.setOriginalScore(originalTotalScore); + modificationRecord.setModifyReason(dto.getNote()); + modificationRecord.setModifyTime(LocalDateTime.now()); + modificationRecord.setScoreTime(LocalDateTime.now()); + + // 查询修改者信息 + MartialJudge modifier = judgeService.getById(dto.getModifierId()); + if (modifier != null) { + modificationRecord.setJudgeName(modifier.getName() + "(裁判长修改)"); + } + + recordSaved = this.save(modificationRecord); + log.info("裁判长新增评分记录 - 选手ID:{}, 姓名:{}, 原始总分:{}, 修改后总分:{}, 修改原因:{}", + athlete.getId(), athlete.getPlayerName(), originalTotalScore, dto.getModifiedScore(), dto.getNote()); } - boolean recordSaved = this.save(modificationRecord); - - log.info("裁判长修改评分 - 选手ID:{}, 姓名:{}, 原始总分:{}, 修改后总分:{}, 修改原因:{}", - athlete.getId(), athlete.getPlayerName(), originalTotalScore, dto.getModifiedScore(), dto.getNote()); - return athleteUpdated && recordSaved; }