admin
2021-01-15 5405154d6979f1b50ce2d881bb164b1acca80b6d
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java
@@ -5,19 +5,20 @@
import com.ks.lucky.exception.LuckyActivityJoinException;
import com.ks.lucky.mapper.LuckyActivityAwardsMapper;
import com.ks.lucky.mapper.LuckyActivityJoinRecordMapper;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
import com.ks.lucky.pojo.DO.LuckyActivityJoinRecord;
import com.ks.lucky.pojo.DO.LuckyActivityUserWeightRecord;
import com.ks.lucky.pojo.DO.*;
import com.ks.lucky.pojo.DTO.*;
import com.ks.lucky.pojo.DTO.mq.ActivityJoinMsgDTO;
import com.ks.lucky.query.ActivityAwardQuery;
import com.ks.lucky.query.ActivityJoinRecordQuery;
import com.ks.lucky.remote.service.LuckyActivityJoinService;
import com.ks.lucky.service.impl.AppManager;
import com.ks.lucky.remote.service.LuckyActivityOpenService;
import com.ks.lucky.service.impl.LuckyActivityJoinManager;
import com.ks.lucky.service.impl.LuckyActivityManager;
import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager;
import com.ks.lucky.service.impl.LuckyActivityUserWeightRecordManager;
import com.ks.lucky.util.LoggerUtil;
import com.ks.lucky.util.factory.LuckyActivityUserWeightRecordFactory;
import com.ks.lucky.util.mq.CMQManager;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -30,7 +31,7 @@
import java.util.Date;
import java.util.List;
@Service(version = "1.0")
@Service(version = "1.0.0")
public class LuckyActivityJoinServiceImpl implements LuckyActivityJoinService {
    @Resource
@@ -49,10 +50,14 @@
    private LuckyActivityAwardsMapper luckyActivityAwardsMapper;
    @Resource
    private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager;
    @Transactional(rollbackFor = Exception.class)
    @Validated
    @Override
    public void join(Long activityId, Long appId, String uid, Integer weight, JoinInfo joinInfo) throws LuckyActivityException, LuckyActivityJoinException {
    public void join(Long activityId, Long appId, String uid, Integer weight, JoinInfo joinInfo, int userType) throws LuckyActivityException, LuckyActivityJoinException {
        luckyActivityManager.canJoin(activityId);
        LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid);
        if (record != null) {
@@ -69,7 +74,7 @@
        record.setCreateTime(new Date());
        record.setJoinInfo(joinInfo.toString());
        record.setUid(uid);
        record.setUserType(LuckyActivityJoinRecord.USER_TYPE_REAL);
        record.setUserType(userType);
        record.setWeight(weight);
        record.setCreateTime(new Date());
        luckyActivityJoinRecordMapper.insertSelective(record);
@@ -83,12 +88,20 @@
            throw new LuckyActivityJoinException(1, "添加记录出错");
        }
        LoggerUtil.activityLogger.info("参加活动成功", activityId, uid);
        CMQManager.getInstance().publishActivityJoinMsg(ActivityJoinMsgDTO.create(record));
    }
    @Override
    public LuckyActivityJoinRecord getJoinInfo(Long activityId, Long appId, String uid) {
        LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid);
        return record;
    }
    @Override
    public LuckyActivityJoinRecord getJoinRecord(Long id) {
        return luckyActivityJoinRecordMapper.selectByPrimaryKey(id);
    }
    @Override
@@ -178,10 +191,11 @@
    }
    @Override
    public List<ActivitySimpleUser> getJoinerList(Long activityId, int page, int count) {
    public List<ActivitySimpleUser> getJoinerList(Long activityId, Integer userType, int page, int count) {
        ActivityJoinRecordQuery query = new ActivityJoinRecordQuery();
        query.activityId = activityId;
        query.sortList = Arrays.asList(new String[]{"id asc"});
        query.userType = userType;
        query.count = count;
        query.start = (page - 1) * count;
@@ -193,6 +207,14 @@
            }
        }
        return list;
    }
    @Override
    public long countJoiner(Long activityId, Integer userType) {
        ActivityJoinRecordQuery query = new ActivityJoinRecordQuery();
        query.activityId = activityId;
        query.userType = userType;
        return luckyActivityJoinRecordMapper.count(query);
    }
    @Override
@@ -223,6 +245,7 @@
        ActivityDrawnProbabilityStatistic statistic = new ActivityDrawnProbabilityStatistic();
        ActivityAwardQuery awardQuery = new ActivityAwardQuery();
        awardQuery.activityId = activityId;
        awardQuery.count = 100;
        //奖项数量
        int awardCount = 0;
        List<LuckyActivityAwards> awards = luckyActivityAwardsMapper.list(awardQuery);
@@ -230,8 +253,16 @@
            for (LuckyActivityAwards award : awards) {
                awardCount += award.getCount();
            }
        }
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        //还差多少人开奖
        int difJoinnerCount = openInfo.getMinPersonCount() - (int) joinerCount;
        difJoinnerCount = difJoinnerCount > 0 ? difJoinnerCount : 0;
        joinerCount = joinerCount < openInfo.getMinPersonCount() ? (openInfo.getMinPersonCount()) : joinerCount;
        //平均中奖概率
        BigDecimal averageProbability = new BigDecimal(awardCount).divide(new BigDecimal(joinerCount), 8, BigDecimal.ROUND_DOWN);
        statistic.setAverageDrawnProbability(averageProbability);
@@ -241,7 +272,7 @@
            LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid);
            if (record != null) {
                //我的中奖概率
                BigDecimal myProbability = new BigDecimal(awardCount * record.getWeight()).divide(new BigDecimal(weight), 8, BigDecimal.ROUND_DOWN);
                BigDecimal myProbability = new BigDecimal(awardCount * record.getWeight()).divide(new BigDecimal(weight).add(new BigDecimal(difJoinnerCount)), 8, BigDecimal.ROUND_DOWN);
                statistic.setMyDrawnProbability(myProbability);
            }
        }