admin
2020-12-31 74196bcc835d9b76cdd1bc3d85b0dfbe0191fc00
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java
@@ -2,16 +2,17 @@
import com.ks.lucky.exception.LuckyActivityAwardException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyActivityOpenException;
import com.ks.lucky.exception.LuckyMQException;
import com.ks.lucky.mapper.LuckyActivityMapper;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo;
import com.ks.lucky.pojo.DTO.ActivityMQMsg;
import com.ks.lucky.remote.service.LuckyActivityOpenService;
import com.ks.lucky.service.impl.LuckyActivityAwardManager;
import com.ks.lucky.service.impl.LuckyActivityAwardResultManager;
import com.ks.lucky.service.impl.LuckyActivityJoinManager;
import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager;
import com.ks.lucky.service.impl.*;
import com.ks.lucky.util.LuckyRunUtil;
import com.ks.lucky.util.mq.CMQManager;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -21,7 +22,7 @@
import java.util.Map;
import java.util.Set;
@Service(version = "1.0")
@Service(version = "1.0.0")
public class LuckyActivityOpenServiceImpl implements LuckyActivityOpenService {
    @Resource
@@ -29,6 +30,7 @@
    @Resource
    private LuckyActivityMapper luckyActivityMapper;
    @Resource
    private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager;
@@ -39,6 +41,9 @@
    @Resource
    private LuckyActivityAwardResultManager luckyActivityAwardResultManager;
    @Resource
    private LuckyActivityManager luckyActivityManager;
    /**
     * 是否可以开奖了
@@ -48,7 +53,6 @@
     */
    private boolean canOpen(LuckyActivity activity) throws LuckyActivityException {
        long now = System.currentTimeMillis();
        if (activity.getState() != LuckyActivity.STATE_FINISH) {
            throw new LuckyActivityException(1, "活动尚未结束");
        }
@@ -72,16 +76,19 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityAwardException {
    public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityOpenException, LuckyActivityAwardException {
        //判断活动状态
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        if (activity == null) {
            throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
        }
        //判断是否达到开奖条件
        canOpen(activity);
        try {
            canOpen(activity);
        } catch (LuckyActivityException e) {
            throw new LuckyActivityOpenException(1, "尚未达到开奖条件");
        }
        //------------计算开奖-------------
        //获取奖项数据
@@ -106,7 +113,9 @@
        update.setState(LuckyActivity.STATE_PRE_OPENED);
        update.setStateRemarks("预开奖成功");
        update.setUpdateTime(new Date());
        luckyActivityMapper.updateByPrimaryKeySelective(update);
        luckyActivityManager.updateSelectiveByPrimaryKey(update);
        //添加消息
        CMQManager.getInstance().addActivityMsg(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_OPEN_SHOW, new Date()));
    }
    @Transactional(rollbackFor = Exception.class)
@@ -122,8 +131,36 @@
        update.setUpdateTime(new Date());
        update.setState(LuckyActivity.STATE_OPENED);
        update.setStateRemarks("已开奖");
        luckyActivityMapper.updateByPrimaryKeySelective(update);
        luckyActivityAwardResultManager.setResultShow(activityId);
        luckyActivityManager.updateSelectiveByPrimaryKey(update);
        //先设置所有记录未中奖
        luckyActivityJoinManager.setActivityAllJoinerUnDraw(activityId);
        //设置中奖用户状态为中奖
        luckyActivityJoinManager.setActivityDrawnJoinerState(activityId);
        try {
            luckyActivityAwardResultManager.setResultShow(activityId);
        } catch (LuckyMQException e) {
            throw new LuckyActivityException(10, "添加MQ出错");
        }
    }
    @Override
    public void reachMinPerson(Long activityId) throws LuckyActivityException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(activityId);
        if (activity == null) {
            throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
        }
        //如果未设置开奖时间,且活动正在进行,就判断是否达到最低人数
        if (activity.getPreOpenTime() == null) {
            if (activity.getState() == LuckyActivity.STATE_STARTED) {
                try {
                    luckyActivityManager.finishActivity(activityId, false, "达到最低开奖人数");
                } catch (LuckyMQException e) {
                    throw new LuckyActivityException(1, e.getMsg());
                }
            }
        }
    }