2025-09-23 09:28:53 +08:00

112 lines
4.4 KiB
Java

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<UserMapper, User> 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);
}
}