admin
2020-12-02 a2fe11f549f52e887937dbdb63d967a09d3a3f21
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java
@@ -1,11 +1,15 @@
package com.ks.lucky.service.impl;
import com.ks.lucky.exception.LuckyActivityException;
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.LuckyActivityOpenInfo;
import com.ks.lucky.pojo.DO.LuckyMQ;
import com.ks.lucky.pojo.DTO.ActivityMQMsg;
import com.ks.lucky.service.LuckyMQService;
import com.ks.lucky.util.mq.CMQManager;
import com.ks.lucky.util.mq.LuckyMQFactory;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -22,6 +26,9 @@
    @Resource
    private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager;
    @Resource
    private LuckyMQService luckyMQService;
    /**
     * 活动是否还可以参加
@@ -36,12 +43,9 @@
            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.getState() != LuckyActivity.STATE_STARTED) {
            throw new LuckyActivityException(1, "活动不可参与");
        }
        if (activity.getCurrentPersonCount() >= activity.getMaxPersonCount()) {
@@ -49,6 +53,23 @@
        }
        return true;
    }
    /**
     * 是否可以更改活动内容
     *
     * @param activityId
     * @return
     */
    public boolean canUpdate(Long activityId) {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKey(activityId);
        if (activity != null) {
            if (activity.getState() == LuckyActivity.STATE_VERIFY_REJECT || activity.getState() == LuckyActivity.STATE_NOT_SUBMIT_VERIFY) {
                return true;
            }
        }
        return false;
    }
    /**
@@ -93,7 +114,7 @@
     *
     * @param activityId
     */
    public void startUpActivity(Long activityId) throws LuckyActivityException {
    public void startUpActivity(Long activityId) throws LuckyActivityException, LuckyMQException {
        LuckyActivity luckyActivity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        if (luckyActivity == null) {
            throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
@@ -105,6 +126,74 @@
        //启动活动
        setState(activityId, LuckyActivity.STATE_STARTED, "已经启动");
        //设置实际开始时间
        LuckyActivity update = new LuckyActivity();
        update.setId(activityId);
        update.setActualStartTime(new Date());
        update.setUpdateTime(new Date());
        luckyActivityMapper.updateByPrimaryKeySelective(update);
        //有预计结束时间
        if (luckyActivity.getPreFinishTime() != null) {
            //添加结束消息
            LuckyMQ mq = LuckyMQFactory.createFinishActivity(luckyActivity);
            luckyMQService.addMQ(mq);
        }
        //尝试删除消息
        try {
            LuckyMQ mq = LuckyMQFactory.createStartUpActivity(luckyActivity);
            luckyMQService.removeUnSendMsg(mq.getTaskId());
        } catch (LuckyMQException e) {
            e.printStackTrace();
        }
    }
    /**
     * 结束活动
     *
     * @param activityId
     * @param force      是否强制结束
     * @param remarks
     */
    @Transactional(rollbackFor = Exception.class)
    public void finishActivity(Long activityId, boolean force, String remarks) throws LuckyActivityException, LuckyMQException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        if (activity.getState() != LuckyActivity.STATE_STARTED) {
            throw new LuckyActivityException(1, "活动未处于已开始状态");
        }
        //设置活动处于强制结束状态
        if (force) {
            setState(activityId, LuckyActivity.STATE_FOUCE_FINISH, remarks);
        } else {
            setState(activityId, LuckyActivity.STATE_FINISH, remarks);
        }
        LuckyActivity update = new LuckyActivity();
        update.setId(activityId);
        update.setActualFinishTime(new Date());
        update.setUpdateTime(new Date());
        luckyActivityMapper.updateByPrimaryKeySelective(update);
        activity.setActualFinishTime(update.getActualFinishTime());
        //强制结束的不开奖
        if (!force) {
            //添加开奖消息
            LuckyMQ mq = LuckyMQFactory.createOpenActivity(activity);
            luckyMQService.addMQ(mq);
        }
        //尝试删除消息
        try {
            LuckyMQ mq1 = LuckyMQFactory.createFinishActivity(activity);
            luckyMQService.removeUnSendMsg(mq1.getTaskId());
        } catch (LuckyMQException e) {
            e.printStackTrace();
        }
    }