2025-09-17 17:16:35 +08:00

105 lines
4.3 KiB
Java

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<ActivityMapper, Activity> 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<Activity> 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);
}
}
}