From e6bad39a56a583ab954de0f62c380e3ebed020e1 Mon Sep 17 00:00:00 2001 From: Leo Date: Wed, 15 Oct 2025 22:29:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E6=8A=A5=E5=90=8D=E6=8E=A5=E5=8F=A3ID=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=B2=BE=E5=BA=A6=E4=B8=A2=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将活动ID从Long改为String类型,避免前端JSON反序列化时的精度丢失 - 增强报名接口的参数校验和异常处理 - 优化错误提示信息,提供更详细的错误原因 --- .../model/vo/portal/EventRegistrationVo.java | 4 +- .../controller/event/HrtEventController.java | 2 +- .../portal/service/event/HrtEventService.java | 2 +- .../service/event/HrtEventServiceImpl.java | 45 ++++++++++++++++--- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/heritage-model/src/main/java/org/leocoder/heritage/domain/model/vo/portal/EventRegistrationVo.java b/heritage-model/src/main/java/org/leocoder/heritage/domain/model/vo/portal/EventRegistrationVo.java index a00370f..237ea85 100644 --- a/heritage-model/src/main/java/org/leocoder/heritage/domain/model/vo/portal/EventRegistrationVo.java +++ b/heritage-model/src/main/java/org/leocoder/heritage/domain/model/vo/portal/EventRegistrationVo.java @@ -12,10 +12,10 @@ import lombok.Data; public class EventRegistrationVo { /** - * 活动ID + * 活动ID(使用String避免前端JSON反序列化时的精度丢失) */ @NotNull(message = "活动ID不能为空") - private Long eventId; + private String eventId; /** * 联系电话 diff --git a/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/controller/event/HrtEventController.java b/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/controller/event/HrtEventController.java index 9702ade..1d5f3a6 100644 --- a/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/controller/event/HrtEventController.java +++ b/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/controller/event/HrtEventController.java @@ -62,7 +62,7 @@ public class HrtEventController { @Operation(summary = "取消报名", description = "取消已报名的活动,活动开始后无法取消") @PostMapping("/cancel/{eventId}") public String cancelRegistration( - @Parameter(description = "活动ID") @PathVariable Long eventId + @Parameter(description = "活动ID") @PathVariable String eventId ) { return hrtEventService.cancelRegistration(eventId); } diff --git a/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventService.java b/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventService.java index 9fd39ef..0b5a7b6 100644 --- a/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventService.java +++ b/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventService.java @@ -31,7 +31,7 @@ public interface HrtEventService { * @description [取消报名] * @author Leocoder */ - String cancelRegistration(Long eventId); + String cancelRegistration(String eventId); /** * @description [我报名的活动] diff --git a/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventServiceImpl.java b/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventServiceImpl.java index 6393e48..5eec91c 100644 --- a/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventServiceImpl.java +++ b/heritage-modules/heritage-portal/src/main/java/org/leocoder/heritage/portal/service/event/HrtEventServiceImpl.java @@ -158,9 +158,27 @@ public class HrtEventServiceImpl implements HrtEventService { public String registerEvent(EventRegistrationVo vo) { Long userId = HrtStpUtil.getLoginIdAsLong(); - HrtEvent event = hrtEventMapper.selectById(vo.getEventId()); - if (event == null || event.getPublishStatus() != 1) { - throw new BusinessException(404, "活动不存在或未发布"); + // 参数校验 + if (vo == null || vo.getEventId() == null || vo.getEventId().trim().isEmpty()) { + throw new BusinessException(400, "活动ID不能为空"); + } + + // 将String类型的eventId转换为Long(避免前端JSON精度丢失) + Long eventId; + try { + eventId = Long.parseLong(vo.getEventId()); + } catch (NumberFormatException e) { + throw new BusinessException(400, "活动ID格式不正确"); + } + + // 查询活动 + HrtEvent event = hrtEventMapper.selectById(eventId); + if (event == null) { + throw new BusinessException(404, "活动不存在(ID:" + eventId + ")"); + } + + if (event.getPublishStatus() != 1) { + throw new BusinessException(400, "活动未发布,无法报名"); } if (!event.getStatus().equals("upcoming")) { @@ -182,7 +200,7 @@ public class HrtEventServiceImpl implements HrtEventService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(HrtEventRegistration::getUserId, userId) - .eq(HrtEventRegistration::getEventId, vo.getEventId()) + .eq(HrtEventRegistration::getEventId, eventId) .in(HrtEventRegistration::getStatus, List.of("pending", "approved")); Long count = hrtEventRegistrationMapper.selectCount(wrapper); if (count > 0) { @@ -195,7 +213,7 @@ public class HrtEventServiceImpl implements HrtEventService { HrtEventRegistration registration = new HrtEventRegistration(); registration.setUserId(userId); - registration.setEventId(vo.getEventId()); + registration.setEventId(eventId); registration.setStatus("approved"); registration.setPhone(vo.getPhone()); registration.setRemark(vo.getRemark()); @@ -208,7 +226,7 @@ public class HrtEventServiceImpl implements HrtEventService { hrtEventMapper.update(null, new LambdaUpdateWrapper() .setSql("current_participants = current_participants + 1") - .eq(HrtEvent::getId, vo.getEventId()) + .eq(HrtEvent::getId, eventId) ); return "报名成功"; @@ -220,9 +238,22 @@ public class HrtEventServiceImpl implements HrtEventService { */ @Override @Transactional(rollbackFor = Exception.class) - public String cancelRegistration(Long eventId) { + public String cancelRegistration(String eventIdStr) { Long userId = HrtStpUtil.getLoginIdAsLong(); + // 参数校验 + if (eventIdStr == null || eventIdStr.trim().isEmpty()) { + throw new BusinessException(400, "活动ID不能为空"); + } + + // 将String转换为Long(避免前端JSON精度丢失) + Long eventId; + try { + eventId = Long.parseLong(eventIdStr); + } catch (NumberFormatException e) { + throw new BusinessException(400, "活动ID格式不正确"); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(HrtEventRegistration::getUserId, userId) .eq(HrtEventRegistration::getEventId, eventId)