package cn.lili.job; import cn.lili.common.enums.ActivityStatusEnum; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.entity.CustomerBlack; import cn.lili.modules.lmk.domain.vo.ActivityVO; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; import cn.lili.modules.lmk.enums.general.CollectTypeEnum; import cn.lili.modules.lmk.mapper.ActivityMapper; import cn.lili.modules.lmk.service.ActivityService; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 活动相关任务 * */ @Component @RequiredArgsConstructor public class ActivityJob { private final ActivityMapper activityMapper; /** * 更具报名时间段与活冻时间段,改变活动状态 * * */ @XxlJob("activityStatusJob") public void activityStatusJob() throws Exception { XxlJobHelper.log("开始执行:活动状态改变"); //获得所有 活动 List activeActivities = new LambdaQueryChainWrapper(activityMapper) .orderByAsc(Activity::getCreateTime) // 按创建时间升序 .list(); Date now = new Date(); // 获取当前时间 for (Activity activity : activeActivities) { if (isInProgress(now, activity)) { activity.setStatus(ActivityStatusEnum.IN_PROGRESS.getType()); } else if (isRecruiting(now, activity)) { activity.setStatus(ActivityStatusEnum.REPORT.getType()); } else if (now.before(activity.getReportStartTime())) { //在报名时间之前 activity.setStatus(ActivityStatusEnum.NOT_STARTED.getType()); }else if(now.after(activity.getReportEndTime()) && now.before(activity.getStartTime())){ //可能出现 在报名结束时间后, 活动开始之前的情况 activity.setStatus(ActivityStatusEnum.NOT_STARTED.getType()); } else { activity.setStatus(ActivityStatusEnum.ENDED.getType()); } } activityMapper.batchUpdateActivities(activeActivities); // 修改 XxlJobHelper.log("执行完成:活动状态改变"); } //活动开始时间之后,结束时间之前 在活动期间 private boolean isInProgress(Date now, Activity activity) { return !now.before(activity.getStartTime()) && !now.after(activity.getEndTime()); } //在报名期间 private boolean isRecruiting(Date now, Activity activity) { return !now.before(activity.getReportStartTime()) && !now.after(activity.getReportEndTime()); } }