admin
2021-01-18 d6df4ca797ee1c6ce8fa78768f5425f187734bd9
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java
@@ -1,9 +1,6 @@
package com.ks.lucky.service.impl.remote;
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.exception.*;
import com.ks.lucky.mapper.LuckyActivityMapper;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
@@ -51,7 +48,7 @@
     * @param activity
     * @return
     */
    private boolean canOpen(LuckyActivity activity) throws LuckyActivityException {
    private boolean canOpen(LuckyActivity activity) throws LuckyActivityException, LuckyActivityOpenException {
        long now = System.currentTimeMillis();
        if (activity.getState() != LuckyActivity.STATE_FINISH) {
            throw new LuckyActivityException(1, "活动尚未结束");
@@ -59,16 +56,19 @@
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId());
        //未达到最低开奖人数
        if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) {
            throw new LuckyActivityException(2, "尚未达到最低开奖人数");
        }
        //到达最低开奖人数就开奖
        if (activity.getPreOpenTime() != null) {
            if (activity.getPreOpenTime().getTime() > now) {
        if (openInfo.getPreOpenTime() != null) {
            if (openInfo.getPreOpenTime().getTime() > now) {
                throw new LuckyActivityException(2, "尚未达到开奖时间");
            }
        } else {
            throw new LuckyActivityException(2, "尚未达到开奖时间");
        }
        //未达到最低开奖人数
        if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) {
            throw new LuckyActivityOpenException(LuckyActivityOpenException.CODE_NOT_REACH_OPEN_PERSON_COUNT, "尚未达到最低开奖人数");
        }
        return true;
    }
@@ -86,6 +86,14 @@
        //判断是否达到开奖条件
        try {
            canOpen(activity);
        } catch (LuckyActivityOpenException e) {
            if (e.getCode() == LuckyActivityOpenException.CODE_NOT_REACH_OPEN_PERSON_COUNT) {
                //开奖失败
                luckyActivityManager.setState(activityId, LuckyActivity.STATE_OPEN_FAIL, "人数未达到开奖人数,开奖失败");
                return;
            } else {
                throw new LuckyActivityOpenException(1, "尚未达到开奖条件");
            }
        } catch (LuckyActivityException e) {
            throw new LuckyActivityOpenException(1, "尚未达到开奖条件");
        }
@@ -108,19 +116,15 @@
        //更新状态
        LuckyActivity update = new LuckyActivity();
        update.setId(activityId);
        update.setState(LuckyActivity.STATE_PRE_OPENED);
        update.setStateRemarks("预开奖成功");
        update.setUpdateTime(new Date());
        luckyActivityManager.updateSelectiveByPrimaryKey(update);
        luckyActivityManager.setState(activityId,LuckyActivity.STATE_PRE_OPENED,"预开奖成功");
        //添加消息
        CMQManager.getInstance().addActivityMsg(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_OPEN_SHOW, new Date()));
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void showOpenAward(Long activityId) throws LuckyActivityException {
    public void showOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityOpenInfoException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        if (activity.getState() != LuckyActivity.STATE_PRE_OPENED) {
            throw new LuckyActivityException(1, "尚未开奖");
@@ -132,6 +136,13 @@
        update.setState(LuckyActivity.STATE_OPENED);
        update.setStateRemarks("已开奖");
        luckyActivityManager.updateSelectiveByPrimaryKey(update);
        //设置实际开奖时间
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        LuckyActivityOpenInfo updateOpenInfo = new LuckyActivityOpenInfo();
        updateOpenInfo.setId(openInfo.getId());
        updateOpenInfo.setActualOpenTime(new Date());
        luckyActivityOpenInfoManager.updateOpenInfo(updateOpenInfo, activityId);
        //先设置所有记录未中奖
        luckyActivityJoinManager.setActivityAllJoinerUnDraw(activityId);
@@ -152,7 +163,8 @@
            throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
        }
        //如果未设置开奖时间,且活动正在进行,就判断是否达到最低人数
        if (activity.getPreOpenTime() == null) {
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        if (openInfo.getPreOpenTime() == null) {
            if (activity.getState() == LuckyActivity.STATE_STARTED) {
                try {
                    luckyActivityManager.finishActivity(activityId, false, "达到最低开奖人数");