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.dto.ActivityInfo; 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; import com.cdzy.activity.model.User; import com.cdzy.activity.mapper.UserMapper; 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.ActivityTableDef.ACTIVITY; 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; /** * 服务层实现。 * * @author attiya * @since 2025-09-19 */ @Service public class UserServiceImpl extends ServiceImpl implements UserService { @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 .create() .eq(User::getWxOpenId, user.getWxOpenId()); User entity = userMapper.selectOneByQuery(queryWrapper); if (entity == null) { throw new RuntimeException("用户登陆信息错误"); } entity.setName(user.getName()); entity.setPhone(user.getPhone()); entity.setGender(user.getGender()); entity.setAddress(user.getAddress()); entity.setAge(user.getAge()); entity.setChronicDiseasesHistory(user.getChronicDiseasesHistory()); entity.setChronicDisease(user.getChronicDisease()); entity.setHeath(user.getHeath()); 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("用户信息错误"); } queryWrapper.clear(); queryWrapper.where(USER_REGISTRATION_ACTIVITY.USER_ID.eq(user.getUserId())) .where(USER_REGISTRATION_ACTIVITY.ACTIVITY_ID.eq(activityId)); UserRegistrationActivity userRegistrationActivity = userRegistrationActivityMapper.selectOneByQuery(queryWrapper); if (userRegistrationActivity != null) { throw new RuntimeException("请勿重复报名"); } UserRegistrationActivity registrationActivity = UserRegistrationActivity.builder() .activityId(activityId) .userId(user.getUserId()) .build(); userRegistrationActivityMapper.insert(registrationActivity); } @Override public ActivityInfo activityInfo(Long activityId) { QueryWrapper queryWrapper = QueryWrapper.create() .select(ACTIVITY.ALL_COLUMNS) .where(ACTIVITY.ACTIVITY_ID.eq(activityId)); ActivityInfo activityInfo = activityMapper.selectOneByQueryAs(queryWrapper, ActivityInfo.class); if (activityInfo == null) { throw new RuntimeException("该活动不存在"); } //默认允许报名 activityInfo.setPossibleRegister(Boolean.TRUE); if (activityInfo.getRegistrationStartTime().isAfter(LocalDateTime.now())) { activityInfo.setPossibleRegister(Boolean.FALSE); } if (activityInfo.getRegistrationEndTime().isBefore(LocalDateTime.now())) { activityInfo.setPossibleRegister(Boolean.FALSE); } return activityInfo; } @Override public void cancel(RegistrationVo registrationVo) { Long activityId = registrationVo.getActivityId(); String wxOpenId = registrationVo.getWxOpenId(); Activity activity = activityMapper.selectOneById(activityId); if (activity == 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("用户信息错误"); } queryWrapper.clear(); queryWrapper.where(USER_REGISTRATION_ACTIVITY.USER_ID.eq(user.getUserId())) .where(USER_REGISTRATION_ACTIVITY.ACTIVITY_ID.eq(activityId)); UserRegistrationActivity userRegistrationActivity = userRegistrationActivityMapper.selectOneByQuery(queryWrapper); if (userRegistrationActivity == null) { throw new RuntimeException("用户当前未报名"); } userRegistrationActivityMapper.delete(userRegistrationActivity); } }