package com.cdzy.activity.service.impl; import com.cdzy.activity.enums.ActivityStatus; import com.cdzy.activity.mapper.ActivityMapper; import com.cdzy.activity.model.Activity; import com.cdzy.activity.model.vo.ActivityVo; import com.cdzy.activity.service.ActivityService; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.List; import static com.cdzy.activity.model.table.ActivityTableDef.ACTIVITY; /** * 活动状态检测变动。 * * @author attiya * @since 2025-09-17 */ @Service public class ActivityServiceImpl extends ServiceImpl implements ActivityService{ @Resource private ActivityMapper activityMapper; @Override public void saveActivity(ActivityVo activity) { Activity entity = Activity.builder() .activityName(activity.getActivityName()) .activityCover(activity.getActivityCover()) .activitySponsor(activity.getActivitySponsor()) .activityDescription(activity.getActivityDescription()) .activityLocation(activity.getActivityLocation()) .registrationStartTime(activity.getRegistrationStartTime()) .registrationEndTime(activity.getRegistrationEndTime()) .startTime(activity.getStartTime()) .endTime(activity.getEndTime()) .maxNum(activity.getMaxNum()) .limitPeople(activity.getLimitPeople()) .status(ActivityStatus.UN_START_REGISTERING) .build(); activityMapper.insert(entity); } @Override public void updateActivity(ActivityVo activity) { Activity entity = activityMapper.selectOneById(activity.getActivityId()); if (entity != null) { entity.setActivityName(activity.getActivityName()); entity.setActivityCover(activity.getActivityCover()); entity.setActivitySponsor(activity.getActivitySponsor()); entity.setActivityDescription(activity.getActivityDescription()); entity.setActivityLocation(activity.getActivityLocation()); entity.setRegistrationStartTime(activity.getRegistrationStartTime()); entity.setRegistrationEndTime(activity.getRegistrationEndTime()); entity.setStartTime(activity.getStartTime()); entity.setEndTime(activity.getEndTime()); entity.setMaxNum(activity.getMaxNum()); entity.setLimitPeople(activity.getLimitPeople()); activityMapper.update(entity); }else { throw new RuntimeException("该活动不存在"); } } @Override public void checkStatus() { LocalDateTime now = LocalDateTime.now(); QueryWrapper queryWrapper = QueryWrapper.create() .where(ACTIVITY.STATUS.ne(ActivityStatus.FINISHED)); List activities = activityMapper.selectListByQuery(queryWrapper); if (activities != null && !activities.isEmpty()) { for (Activity activity : activities) { switch (activity.getStatus()) { case ActivityStatus.UN_START_REGISTERING: if (now.isAfter(activity.getRegistrationStartTime())) { activity.setStatus(ActivityStatus.REGISTERING); } break; case ActivityStatus.REGISTERING: if (now.isAfter(activity.getRegistrationEndTime())) { activity.setStatus(ActivityStatus.STOP_REGISTER); } break; case ActivityStatus.STOP_REGISTER: if (now.isAfter(activity.getStartTime())) { activity.setStatus(ActivityStatus.STARTED); } break; case ActivityStatus.STARTED: if (now.isAfter(activity.getStartTime())) { activity.setStatus(ActivityStatus.FINISHED); } break; } } updateBatch(activities); } } }