package com.ks.lucky.service.impl;
|
|
import com.ks.lucky.exception.LuckyActivityException;
|
import com.ks.lucky.mapper.LuckyActivityMapper;
|
import com.ks.lucky.pojo.DO.LuckyActivity;
|
import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo;
|
import com.ks.lucky.pojo.DTO.ActivityMQMsg;
|
import com.ks.lucky.util.mq.CMQManager;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
|
|
@Component
|
public class LuckyActivityManager {
|
|
@Resource
|
private LuckyActivityMapper luckyActivityMapper;
|
|
@Resource
|
private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager;
|
|
|
/**
|
* 活动是否还可以参加
|
*
|
* @param activityId
|
* @return
|
* @throws LuckyActivityException
|
*/
|
public boolean canJoin(Long activityId) throws LuckyActivityException {
|
LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(activityId);
|
if (activity == null) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
|
}
|
|
if (activity.getState() == LuckyActivity.STATE_NOT_STARTED) {
|
throw new LuckyActivityException(1, "活动还未开始");
|
}
|
|
if (activity.getState() == LuckyActivity.STATE_FINISH || activity.getState() == LuckyActivity.STATE_OPENED) {
|
throw new LuckyActivityException(1, "活动已经结束");
|
}
|
|
if (activity.getCurrentPersonCount() >= activity.getMaxPersonCount()) {
|
throw new LuckyActivityException(1, "参与人数已满");
|
}
|
|
return true;
|
}
|
|
/**
|
* 添加参与数
|
*
|
* @param activityId
|
* @param count
|
* @throws LuckyActivityException
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void addJoinCount(Long activityId, int count) throws LuckyActivityException {
|
LuckyActivity luckyActivity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
|
if (luckyActivity == null) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
|
}
|
|
LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
|
if (openInfo == null) {
|
throw new LuckyActivityException(1, "活动信息不完整");
|
}
|
|
int currentCount = luckyActivity.getCurrentPersonCount();
|
LuckyActivity update = new LuckyActivity();
|
update.setId(activityId);
|
update.setCurrentPersonCount(currentCount + count);
|
update.setUpdateTime(new Date());
|
luckyActivityMapper.updateByPrimaryKeySelective(update);
|
if (update.getCurrentPersonCount().intValue() >= openInfo.getMinPersonCount() && currentCount < openInfo.getMinPersonCount()) {
|
//达到最低开奖人数
|
CMQManager.getInstance().addActivityMsg(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_REACH_MIN_PERSON, new Date()));
|
}
|
|
if (update.getCurrentPersonCount().intValue() >= luckyActivity.getMaxPersonCount() && currentCount < luckyActivity.getMaxPersonCount()) {
|
//达到最大开奖人数
|
CMQManager.getInstance().addActivityMsg(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_REACH_MAX_PERSON, new Date()));
|
}
|
|
}
|
|
/**
|
* 启动活动
|
*
|
* @param activityId
|
*/
|
public void startUpActivity(Long activityId) throws LuckyActivityException {
|
LuckyActivity luckyActivity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
|
if (luckyActivity == null) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
|
}
|
|
if (luckyActivity.getState() != LuckyActivity.STATE_NOT_STARTED) {
|
throw new LuckyActivityException(1, "活动尚未处于待启动状态");
|
}
|
|
//启动活动
|
setState(activityId, LuckyActivity.STATE_STARTED, "已经启动");
|
}
|
|
|
/**
|
* 按主键查询
|
*
|
* @param id
|
* @return
|
*/
|
public LuckyActivity selectByPrimaryKey(Long id) {
|
return luckyActivityMapper.selectByPrimaryKey(id);
|
}
|
|
|
/**
|
* 设置状态
|
*
|
* @param activityId
|
* @param state
|
* @param stateRemarks
|
*/
|
public void setState(Long activityId, int state, String stateRemarks) {
|
LuckyActivity activity = new LuckyActivity();
|
activity.setId(activityId);
|
activity.setState(state);
|
activity.setStateRemarks(stateRemarks);
|
activity.setUpdateTime(new Date());
|
luckyActivityMapper.updateByPrimaryKeySelective(activity);
|
}
|
|
}
|