105 lines
4.3 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|