diff --git a/src/main/java/com/cdzy/activity/controller/ActivityController.java b/src/main/java/com/cdzy/activity/controller/ActivityController.java index 2d51c8a..3745a9d 100644 --- a/src/main/java/com/cdzy/activity/controller/ActivityController.java +++ b/src/main/java/com/cdzy/activity/controller/ActivityController.java @@ -110,9 +110,10 @@ public class ActivityController { public JsonResult getInfo(@PathVariable Long id) { Activity activity = activityService.getById(id); QueryWrapper queryWrapper = QueryWrapper.create() - .select(ACTIVITY_USER.USER_ID) - .where(ACTIVITY_USER.ACTIVITY_ID.eq(activity.getActivityId())); - List list = activityUserMapper.selectListByQueryAs(queryWrapper,Long.class); + .select(USER.ALL_COLUMNS) + .where(ACTIVITY_USER.ACTIVITY_ID.eq(activity.getActivityId())) + .leftJoin(USER).on(USER.USER_ID.eq(ACTIVITY_USER.USER_ID)); + List list = activityUserMapper.selectListByQueryAs(queryWrapper,User.class); ActivityDto activityDto = new ActivityDto(activity, list); return JsonResult.success(activityDto); } diff --git a/src/main/java/com/cdzy/activity/controller/UserController.java b/src/main/java/com/cdzy/activity/controller/UserController.java index 2297068..957d84d 100644 --- a/src/main/java/com/cdzy/activity/controller/UserController.java +++ b/src/main/java/com/cdzy/activity/controller/UserController.java @@ -132,7 +132,7 @@ public class UserController { */ @PostMapping("activity/registration") public JsonResult registration(@RequestBody RegistrationVo registrationVo) { - + userService.registration(registrationVo); return JsonResult.success(); } } diff --git a/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java b/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java index bf8f864..b95414d 100644 --- a/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java +++ b/src/main/java/com/cdzy/activity/model/dto/ActivityDto.java @@ -1,6 +1,7 @@ package com.cdzy.activity.model.dto; import com.cdzy.activity.model.Activity; +import com.cdzy.activity.model.User; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -23,5 +24,5 @@ public class ActivityDto implements Serializable { private Activity activity; - private List userIds; + private List userIds; } diff --git a/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java b/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java index f9586f7..8277a33 100644 --- a/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java +++ b/src/main/java/com/cdzy/activity/model/vo/RegistrationVo.java @@ -2,11 +2,17 @@ package com.cdzy.activity.model.vo; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; /** * @author attiya * @since 2025-09-22 */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class RegistrationVo { @NotBlank(message = "微信openId不能为空") diff --git a/src/main/java/com/cdzy/activity/service/UserService.java b/src/main/java/com/cdzy/activity/service/UserService.java index 38a142c..28f6c22 100644 --- a/src/main/java/com/cdzy/activity/service/UserService.java +++ b/src/main/java/com/cdzy/activity/service/UserService.java @@ -1,5 +1,6 @@ package com.cdzy.activity.service; +import com.cdzy.activity.model.vo.RegistrationVo; import com.cdzy.activity.model.vo.UserVo; import com.mybatisflex.core.service.IService; import com.cdzy.activity.model.User; @@ -13,4 +14,6 @@ import com.cdzy.activity.model.User; public interface UserService extends IService { void saveUser(UserVo user); + + void registration(RegistrationVo registrationVo); } diff --git a/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java b/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java index 4c64b9d..f4e6f7f 100644 --- a/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java +++ b/src/main/java/com/cdzy/activity/service/impl/UserServiceImpl.java @@ -1,5 +1,12 @@ package com.cdzy.activity.service.impl; +import com.cdzy.activity.mapper.ActivityMapper; +import com.cdzy.activity.mapper.ActivityUserMapper; +import com.cdzy.activity.mapper.UserRegistrationActivityMapper; +import com.cdzy.activity.model.Activity; +import com.cdzy.activity.model.ActivityUser; +import com.cdzy.activity.model.UserRegistrationActivity; +import com.cdzy.activity.model.vo.RegistrationVo; import com.cdzy.activity.model.vo.UserVo; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; @@ -9,6 +16,12 @@ import com.cdzy.activity.service.UserService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; + +import static com.cdzy.activity.model.table.ActivityUserTableDef.ACTIVITY_USER; +import static com.cdzy.activity.model.table.UserRegistrationActivityTableDef.USER_REGISTRATION_ACTIVITY; +import static com.cdzy.activity.model.table.UserTableDef.USER; + /** * 服务层实现。 * @@ -21,6 +34,15 @@ public class UserServiceImpl extends ServiceImpl implements Us @Resource private UserMapper userMapper; + @Resource + private ActivityMapper activityMapper; + + @Resource + private ActivityUserMapper activityUserMapper; + + @Resource + private UserRegistrationActivityMapper userRegistrationActivityMapper; + @Override public void saveUser(UserVo user) { QueryWrapper queryWrapper = QueryWrapper @@ -41,4 +63,49 @@ public class UserServiceImpl extends ServiceImpl implements Us entity.setIsFilled(2); userMapper.update(entity); } + + @Override + public void registration(RegistrationVo registrationVo) { + Long activityId = registrationVo.getActivityId(); + String wxOpenId = registrationVo.getWxOpenId(); + Activity activity = activityMapper.selectOneById(activityId); + if (activity == null) { + throw new RuntimeException("该活动不存在"); + } + if (activity.getRegistrationStartTime().isAfter(LocalDateTime.now())){ + throw new RuntimeException("该活动尚未开始报名"); + } + if (activity.getRegistrationEndTime().isBefore(LocalDateTime.now())){ + throw new RuntimeException("该活动已结束报名"); + } + if (activity.getLimitPeople() == 1){ + QueryWrapper queryWrapper = QueryWrapper.create() + .where(USER_REGISTRATION_ACTIVITY.ACTIVITY_ID.eq(activityId)); + long count = userRegistrationActivityMapper.selectCountByQuery(queryWrapper); + if (count >= activity.getMaxNum()){ + throw new RuntimeException("该活动报名人数已达上限"); + } + } + if (activity.getLimitRegister() == 1){ + QueryWrapper queryWrapper = QueryWrapper.create() + .where(ACTIVITY_USER.ACTIVITY_ID.eq(activityId)) + .where(USER.WX_OPEN_ID.eq(wxOpenId)) + .leftJoin(USER).on(USER.USER_ID.eq(ACTIVITY_USER.USER_ID)); + ActivityUser selected = activityUserMapper.selectOneByQuery(queryWrapper); + if (selected == null){ + throw new RuntimeException("该活动限制报名人群,无法报名"); + } + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(USER.WX_OPEN_ID.eq(wxOpenId)); + User user = userMapper.selectOneByQuery(queryWrapper); + if (user == null){ + throw new RuntimeException("用户信息错误"); + } + UserRegistrationActivity registrationActivity = UserRegistrationActivity.builder() + .activityId(activityId) + .userId(user.getUserId()) + .build(); + userRegistrationActivityMapper.insert(registrationActivity); + } } diff --git a/target/classes/com/cdzy/activity/controller/ActivityController.class b/target/classes/com/cdzy/activity/controller/ActivityController.class index 89ead70..bb15b53 100644 Binary files a/target/classes/com/cdzy/activity/controller/ActivityController.class and b/target/classes/com/cdzy/activity/controller/ActivityController.class differ diff --git a/target/classes/com/cdzy/activity/controller/UserController.class b/target/classes/com/cdzy/activity/controller/UserController.class index d4f58f0..18f374c 100644 Binary files a/target/classes/com/cdzy/activity/controller/UserController.class and b/target/classes/com/cdzy/activity/controller/UserController.class differ diff --git a/target/classes/com/cdzy/activity/model/dto/ActivityDto.class b/target/classes/com/cdzy/activity/model/dto/ActivityDto.class index 6e3032c..93ed681 100644 Binary files a/target/classes/com/cdzy/activity/model/dto/ActivityDto.class and b/target/classes/com/cdzy/activity/model/dto/ActivityDto.class differ diff --git a/target/classes/com/cdzy/activity/service/impl/UserServiceImpl.class b/target/classes/com/cdzy/activity/service/impl/UserServiceImpl.class index 1118448..a84859b 100644 Binary files a/target/classes/com/cdzy/activity/service/impl/UserServiceImpl.class and b/target/classes/com/cdzy/activity/service/impl/UserServiceImpl.class differ