admin
2020-11-27 f6b3ccd276193077e7a0f7553d1a03833543761b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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, "活动尚未处于待启动状态");
        }
 
        //启动活动
        LuckyActivity update = new LuckyActivity();
        update.setId(activityId);
        update.setUpdateTime(new Date());
        update.setState(LuckyActivity.STATE_STARTED);
        update.setStateRemarks("已经启动");
 
        luckyActivityMapper.updateByPrimaryKeySelective(update);
    }
 
 
}