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; 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.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("用户信息错误"); } UserRegistrationActivity registrationActivity = UserRegistrationActivity.builder() .activityId(activityId) .userId(user.getUserId()) .build(); userRegistrationActivityMapper.insert(registrationActivity); } }