活动系统解析

本文介绍了基于Java的活动管理系统,包括ActivityParser接口用于活动解析,AbstractActivityParser作为抽象类,具体活动的实现如冲级大赛,以及ScheduleCronJob活动调度器用于定时任务执行。重点在于活动解析器的设计和在活动开始、结束时的处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

活动分为限时活动和永久活动,活动开放时间读取活动配置表,我们来看下通过活动解析器管理活动类

ActivityParser活动解析接口

/**
 * 活动解析接口
 * @author CharonWang
 */
public interface ActivityParser extends OnEventListener {
   
	/**
	 * 记录玩家活动
	 * @param gamerId
	 * @param activityId
	 * @param id
	 * @return
	 */
	TResult<ActivityActionResponse> receiveReward(long actorId, int activityId, int id, Map<Integer, Object> parmeterMap);
	/**
	 * 获取登录时客户端数据
	 * @return
	 */
	TResult<ActivityRecordVO> getRecord2Client(long actorId, int activityId);
	/**
	 * 获取活动公共数据
	 * @param activityId
	 * @return
	 */
	TResult<ActivityGlobalVO> getGlobal2Client(long actorId, int activityId);
}

AbstractActivityParser活动解析抽象类

公司大佬写的活动,直接贴代码看吧

/**
 * 活动解析抽象类
 * @author CharonWang
 *
 */
public abstract class AbstractActivityParser extends ScheduleCronJob implements ActivityParser {
   
	protected final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
	@Autowired
	private ActivityContext context;
	@Autowired
	protected ActivityGlobalDao activityGlobalDao;
	@Autowired
	protected ActivityRecordDao activityRecordDao;
	@Autowired
	protected DBQueue dbQueue;
	@Autowired
	protected GlobalConfigService globalConfigService;
	@Autowired
	protected Schedule schedule;
	@PostConstruct
	private void initialize() {
   
		context.register(getType(), this);
	}
	protected abstract ActivityType getType();
	/**
	 * 活动开始时触发一次
	 */
	protected abstract void onActivityOpen(List<ActivityOpenConfig> openActivityIds);
	/**
	 * 活动结束时触发一次
	 */
	protected abstract void onActivityEnd(List<ActivityOpenConfig> endActivityIds);
	/**
	 * 活动展示状态触发一次 
	 */
	protected void onActivityShow(List<ActivityOpenConfig> endActivityIds) {
   
	};
	@Override
	public String jobName() {
   
		return "ActivityParser:" + getType();
	}
	@Override
	protected String[] getCronExpressions() {
   
		return new String[] {
    "*/1 * * * * ?" };
	}
	@Override
	public void execute() {
   
		// LOGGER.error("AbstractActivityParser every second excute, className:{}",
		// this.getClass().getName());
		Collection<ActivityOpenConfig> result = ActivityOpenConfigService.getByType(getType());
		if (result.isEmpty()) {
   
			return;
		}
		List<ActivityOpenConfig> listClose = Lists.newArrayList();
		List<ActivityOpenConfig> listOpen = Lists.newArrayList();
		List<ActivityOpenConfig> listShow = Lists.newArrayList();
		for (ActivityOpenConfig activityOpenConfig : result) {
   
			ActivityGlobal activityGlobal = activityGlobalDao.getActivityGlobal(activityOpenConfig.getId());
			if (activityGlobal == null || activityGlobal.getStatus() == ActivityStatus.CLOSE.getId()) {
   
				Date now = new Date();
				ActivityTime activityTime = ActivityOpenConfigService.getOpenTime(activityOpenConfig.getId(), new Date());
				if (activityTime == null) {
   
					continue;
				}
				if (now.before(activityTime.getCloseTime()) && now.after(activityTime.getOpenTime())) {
   
					activityGlobalDao.createActivityGlobal(activityOpenConfig.getId(), activityTime.getOpenTime(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值