前言
活动分为限时活动和永久活动,活动开放时间读取活动配置表,我们来看下通过活动解析器管理活动类
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(