xiaoyong931011
2022-05-19 5324a804f6dcb622f4ab3f554608e58c728e287e
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java
@@ -1,15 +1,539 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.mall.entity.MallActSet;
import cc.mrbird.febs.mall.mapper.MallActSetMapper;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.dto.ApiMallActListDto;
import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IApiMallActService;
import cc.mrbird.febs.mall.vo.*;
import cn.hutool.core.util.*;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiMallActServiceImpl extends ServiceImpl<MallActSetMapper, MallActSet> implements IApiMallActService {
    private final MallActAwardSetMapper mallActAwardSetMapper;
    private final MallMemberMapper mallMemberMapper;
    private final MallActWinRecordMapper mallActWinRecordMapper;
    private final MallActLuckdrawRecordMapper mallActLuckdrawRecordMapper;
    private final MallMemberWalletMapper mallMemberWalletMapper;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Override
    public IPage<ApiMallActListVo> findApiMallActListInPage(ApiMallActListDto apiMallActListDto) {
        Page<ApiMallActListVo> page = new Page<>(apiMallActListDto.getPageNow(), apiMallActListDto.getPageSize());
        return this.baseMapper.selectApiMallActListInPage(apiMallActListDto, page);
    }
    @Override
    public ApiMallActDetailsVo findApiMallActDetailsById(Long id) {
        MallActSet mallActSet = this.baseMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallActSet)){
            throw new FebsException("活动不存在");
        }
        ApiMallActDetailsVo apiMallActDetailsVo = new ApiMallActDetailsVo();
        apiMallActDetailsVo.setId(mallActSet.getId());
        apiMallActDetailsVo.setActName(mallActSet.getActName());
        apiMallActDetailsVo.setActCode(mallActSet.getActCode());
        apiMallActDetailsVo.setActImage(mallActSet.getActImage());
        apiMallActDetailsVo.setActStartTime(mallActSet.getActStartTime());
        apiMallActDetailsVo.setActEndTime(mallActSet.getActEndTime());
        apiMallActDetailsVo.setActScoreCnt(mallActSet.getActScoreCnt());
        apiMallActDetailsVo.setActRemark(mallActSet.getActRemark());
        List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActId(id);
        if(CollUtil.isNotEmpty(mallActAwardSets)){
            List<ApiMallActAwardListDto> apiMallActAwardListDtos = new ArrayList<>();
            for(MallActAwardSet mallActAwardSet : mallActAwardSets){
                ApiMallActAwardListDto apiMallActAwardListDto = new ApiMallActAwardListDto();
                apiMallActAwardListDto.setId(mallActAwardSet.getId());
                apiMallActAwardListDto.setAwardName(mallActAwardSet.getAwardName());
                apiMallActAwardListDto.setAwardImage(mallActAwardSet.getAwardImage());
                apiMallActAwardListDto.setAwardTotal(mallActAwardSet.getAwardTotal());
                apiMallActAwardListDto.setAwardCnt(mallActAwardSet.getAwardCnt());
                apiMallActAwardListDto.setAwardType(mallActAwardSet.getAwardType());
                apiMallActAwardListDto.setAwardValue(mallActAwardSet.getAwardValue());
                apiMallActAwardListDtos.add(apiMallActAwardListDto);
            }
            apiMallActDetailsVo.setApiMallActAwardListDtos(apiMallActAwardListDtos);
        }
        return apiMallActDetailsVo;
    }
    @Override
    public IPage<ApiMallActWinDetailsVo> findApiMallActWinDetailsInPage(ApiMallActWinDetailsDto apiMallActWinDetailsDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = mallMemberMapper.selectById(memberId);
        if(ObjectUtil.isEmpty(mallMember)){
            throw new FebsException("用户不存在");
        }
        apiMallActWinDetailsDto.setMemberId(memberId);
        Long actId = apiMallActWinDetailsDto.getActId();
        MallActSet mallActSet = this.baseMapper.selectById(actId);
        if(ObjectUtil.isEmpty(mallActSet)){
            throw new FebsException("活动不存在");
        }
        Page<ApiMallActWinDetailsVo> page = new Page<>(apiMallActWinDetailsDto.getPageNow(), apiMallActWinDetailsDto.getPageSize());
        return mallActWinRecordMapper.selectApiMallActWinDetailsListInPage(apiMallActWinDetailsDto,page);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ApiMallAwardDetailsVo luckDraw(long actId) {
        ApiMallAwardDetailsVo apiMallAwardDetailsVo = new ApiMallAwardDetailsVo();
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = mallMemberMapper.selectById(memberId);
        if(ObjectUtil.isEmpty(mallMember)){
            throw new FebsException("用户不存在");
        }
        MallActSet mallActSet = this.baseMapper.selectById(actId);
        if(ObjectUtil.isEmpty(mallActSet)){
            throw new FebsException("活动不存在");
        }
        Integer actStatus = mallActSet.getActStatus();
        if(MallActSet.ACT_STATUS_DISABLED == actStatus){
            throw new FebsException("活动还没开始");
        }
        /**
         * 获取用户积分数,判断能不能抽奖
         * 减少对应的积分数量
         * 较少奖品的已抽奖
         * 生成一条抽奖记录
         */
        MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
        if(ObjectUtil.isEmpty(wallet)){
            throw new FebsException("账户不存在");
        }
        BigDecimal commission = wallet.getCommission();
        BigDecimal prizeScore = wallet.getPrizeScore();
        Integer actScoreCnt = mallActSet.getActScoreCnt();
        if(prizeScore.compareTo(new BigDecimal(actScoreCnt))<0){
            throw new FebsException("竞猜积分不足");
        }
        /**
         * 中奖概率 20%
         * 每次抽奖产生一个随机数要大于8,则中奖
         * 历史10条抽奖记录有中奖过,中奖记录少于两条,则中奖
         */
        //获取中奖概率
        DataDictionaryCustom scoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.WIN_SCORE.getType(),
                DataDictionaryEnum.WIN_SCORE.getCode());
        DataDictionaryCustom cashDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.WIN_CASH.getType(),
                DataDictionaryEnum.WIN_CASH.getCode());
        String scoreDicValue = scoreDic.getValue();
        String cashDicValue = cashDic.getValue();
        BigDecimal totalProbability = new BigDecimal(scoreDicValue).add(new BigDecimal(cashDicValue));
        //获取那个更大一点的几率
        BigDecimal maxProbability = BigDecimal.ZERO;
        BigDecimal minProbability = BigDecimal.ZERO;
        Integer maxAwardType = 0;
        Integer minAwardType = 0;
        if(new BigDecimal(scoreDicValue).compareTo(new BigDecimal(cashDicValue)) < 0){
            maxProbability = new BigDecimal(cashDicValue);
            minProbability = new BigDecimal(scoreDicValue);
            maxAwardType = MallActAwardSet.AWARD_TYPE_YJ;
            minAwardType = MallActAwardSet.AWARD_TYPE_JF;
        }else{
            maxProbability = new BigDecimal(scoreDicValue);
            minProbability = new BigDecimal(cashDicValue);
            maxAwardType = MallActAwardSet.AWARD_TYPE_JF;
            minAwardType = MallActAwardSet.AWARD_TYPE_YJ;
        }
        BigDecimal multiply = totalProbability.multiply(new BigDecimal(100));
        BigDecimal failureScope = new BigDecimal(100).subtract(multiply);
        int randomInt = RandomUtil.randomInt(1, 100);
        //小于failureScope这个数字,则没中奖
        if(new BigDecimal(randomInt).compareTo(failureScope) <= 0){
            //抽奖记录
            MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
            mallActLuckdrawRecord.setActId(actId);
            mallActLuckdrawRecord.setActName(mallActSet.getActName());
            mallActLuckdrawRecord.setMemberId(memberId);
            mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
            mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
            mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
            List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
            if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
            }else{
                apiMallAwardDetailsVo.setAwardName("未中奖");
            }
        }else if(new BigDecimal(randomInt).compareTo(failureScope) > 0
                && new BigDecimal(randomInt).compareTo(failureScope.add(maxProbability.multiply(new BigDecimal(100)))) <= 0){
            //大于failureScope.add(maxProbability.multiply(new BigDecimal(100)))这个数字,则中奖
            //获取最新的十条抽奖记录
            List<MallActLuckdrawRecord> records = mallActLuckdrawRecordMapper.selectRecordByMemberIdAndActId(memberId,actId);
            if(CollUtil.isNotEmpty(records)){
                //中奖次数
                Integer count = 0;
                for(MallActLuckdrawRecord mallActLuckdrawRecord : records){
                    Integer status = mallActLuckdrawRecord.getStatus();
                    if(MallActLuckdrawRecord.STATUS_ENABLE == status){
                        count = count + 1;
                    }
                }
                if(new BigDecimal(count).compareTo(maxProbability.multiply(new BigDecimal(10))) < 0){
                    //获取活动下该类别的奖品
                    List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,maxAwardType);
                    if(CollUtil.isEmpty(mallActAwardSets)){
                        //抽奖记录
                        MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                        mallActLuckdrawRecord.setActId(actId);
                        mallActLuckdrawRecord.setActName(mallActSet.getActName());
                        mallActLuckdrawRecord.setMemberId(memberId);
                        mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                        mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
                        mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                        List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
                        if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                            apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                            apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
                        }else{
                            apiMallAwardDetailsVo.setAwardName("未中奖");
                        }
                    }else{
                        List<MallActAwardSet> idList = new ArrayList();
                        for(MallActAwardSet mallActAwardSet : mallActAwardSets){
                            Integer awardTotal = mallActAwardSet.getAwardTotal();
                            Integer awardCnt = mallActAwardSet.getAwardCnt();
                            if(awardCnt < awardTotal){
                                idList.add(mallActAwardSet);
                            }
                        }
                        MallActAwardSet mallActAwardSet = new MallActAwardSet();
                        if(idList.size() <= 1){
                            mallActAwardSet = idList.get(0);
                        }else{
                            int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1);
                            mallActAwardSet = idList.get(randomIdIndex);
                        }
                        mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1);
                        mallActAwardSetMapper.updateById(mallActAwardSet);
                        MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                        mallActLuckdrawRecord.setActId(actId);
                        mallActLuckdrawRecord.setActName(mallActSet.getActName());
                        mallActLuckdrawRecord.setMemberId(memberId);
                        mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                        mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE);
                        mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                        MallActWinRecord mallActWinRecord = new MallActWinRecord();
                        mallActWinRecord.setMemberId(memberId);
                        mallActWinRecord.setActId(actId);
                        mallActWinRecord.setActName(mallActSet.getActName());
                        mallActWinRecord.setAwardId(mallActAwardSet.getId());
                        mallActWinRecord.setAwardName(mallActAwardSet.getAwardName());
                        mallActWinRecord.setAwardType(mallActAwardSet.getAwardType());
                        mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue());
                        mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId());
                        mallActWinRecordMapper.insert(mallActWinRecord);
                        apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName());
                        apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType());
                        apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue());
                        apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage());
                        if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){
                            prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                        }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){
                            commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                        }
                    }
                }else{
                    //抽奖记录
                    MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                    mallActLuckdrawRecord.setActId(actId);
                    mallActLuckdrawRecord.setActName(mallActSet.getActName());
                    mallActLuckdrawRecord.setMemberId(memberId);
                    mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                    mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
                    mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                    List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
                    if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                        apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                        apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                }
            }else{
                //获取活动下该类别的奖品
                List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,maxAwardType);
                if(CollUtil.isEmpty(mallActAwardSets)){
                    //抽奖记录
                    MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                    mallActLuckdrawRecord.setActId(actId);
                    mallActLuckdrawRecord.setActName(mallActSet.getActName());
                    mallActLuckdrawRecord.setMemberId(memberId);
                    mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                    mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
                    mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                    List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
                    if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                        apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                        apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                }else{
                    List<MallActAwardSet> idList = new ArrayList();
                    for(MallActAwardSet mallActAwardSet : mallActAwardSets){
                        Integer awardTotal = mallActAwardSet.getAwardTotal();
                        Integer awardCnt = mallActAwardSet.getAwardCnt();
                        if(awardCnt < awardTotal){
                            idList.add(mallActAwardSet);
                        }
                    }
                    MallActAwardSet mallActAwardSet = new MallActAwardSet();
                    if(idList.size() <= 1){
                        mallActAwardSet = idList.get(0);
                    }else{
                        int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1);
                        mallActAwardSet = idList.get(randomIdIndex);
                    }
                    mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1);
                    mallActAwardSetMapper.updateById(mallActAwardSet);
                    MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                    mallActLuckdrawRecord.setActId(actId);
                    mallActLuckdrawRecord.setActName(mallActSet.getActName());
                    mallActLuckdrawRecord.setMemberId(memberId);
                    mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                    mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE);
                    mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                    MallActWinRecord mallActWinRecord = new MallActWinRecord();
                    mallActWinRecord.setMemberId(memberId);
                    mallActWinRecord.setActId(actId);
                    mallActWinRecord.setActName(mallActSet.getActName());
                    mallActWinRecord.setAwardId(mallActAwardSet.getId());
                    mallActWinRecord.setAwardName(mallActAwardSet.getAwardName());
                    mallActWinRecord.setAwardType(mallActAwardSet.getAwardType());
                    mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue());
                    mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId());
                    mallActWinRecordMapper.insert(mallActWinRecord);
                    apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName());
                    apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType());
                    apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue());
                    apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage());
                    if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){
                        prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                    }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){
                        commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                    }
                }
            }
        }else{
            //中奖
            //获取最新的十条抽奖记录
            List<MallActLuckdrawRecord> records = mallActLuckdrawRecordMapper.selectRecordByMemberIdAndActId(memberId,actId);
            if(CollUtil.isNotEmpty(records)){
                //中奖次数
                Integer count = 0;
                for(MallActLuckdrawRecord mallActLuckdrawRecord : records){
                    Integer status = mallActLuckdrawRecord.getStatus();
                    if(MallActLuckdrawRecord.STATUS_ENABLE == status){
                        count = count + 1;
                    }
                }
                if(new BigDecimal(count).compareTo(minProbability.multiply(new BigDecimal(10))) < 0){
                    //获取活动下该类别的奖品
                    List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,minAwardType);
                    if(CollUtil.isEmpty(mallActAwardSets)){
                        //抽奖记录
                        MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                        mallActLuckdrawRecord.setActId(actId);
                        mallActLuckdrawRecord.setActName(mallActSet.getActName());
                        mallActLuckdrawRecord.setMemberId(memberId);
                        mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                        mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
                        mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                        List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
                        if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                            apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                            apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
                        }else{
                            apiMallAwardDetailsVo.setAwardName("未中奖");
                        }
                    }else{
                        List<MallActAwardSet> idList = new ArrayList();
                        for(MallActAwardSet mallActAwardSet : mallActAwardSets){
                            Integer awardTotal = mallActAwardSet.getAwardTotal();
                            Integer awardCnt = mallActAwardSet.getAwardCnt();
                            if(awardCnt < awardTotal){
                                idList.add(mallActAwardSet);
                            }
                        }
                        MallActAwardSet mallActAwardSet = new MallActAwardSet();
                        if(idList.size() <= 1){
                            mallActAwardSet = idList.get(0);
                        }else{
                            int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1);
                            mallActAwardSet = idList.get(randomIdIndex);
                        }
                        mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1);
                        mallActAwardSetMapper.updateById(mallActAwardSet);
                        MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                        mallActLuckdrawRecord.setActId(actId);
                        mallActLuckdrawRecord.setActName(mallActSet.getActName());
                        mallActLuckdrawRecord.setMemberId(memberId);
                        mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                        mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE);
                        mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                        MallActWinRecord mallActWinRecord = new MallActWinRecord();
                        mallActWinRecord.setMemberId(memberId);
                        mallActWinRecord.setActId(actId);
                        mallActWinRecord.setActName(mallActSet.getActName());
                        mallActWinRecord.setAwardId(mallActAwardSet.getId());
                        mallActWinRecord.setAwardName(mallActAwardSet.getAwardName());
                        mallActWinRecord.setAwardType(mallActAwardSet.getAwardType());
                        mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue());
                        mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId());
                        mallActWinRecordMapper.insert(mallActWinRecord);
                        apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName());
                        apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType());
                        apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue());
                        apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage());
                        if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){
                            prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                        }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){
                            commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                        }
                    }
                }else{
                    //抽奖记录
                    MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                    mallActLuckdrawRecord.setActId(actId);
                    mallActLuckdrawRecord.setActName(mallActSet.getActName());
                    mallActLuckdrawRecord.setMemberId(memberId);
                    mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                    mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
                    mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                    List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
                    if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                        apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                        apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                }
            }else{
                //获取活动下该类别的奖品
                List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,minAwardType);
                if(CollUtil.isEmpty(mallActAwardSets)){
                    //抽奖记录
                    MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                    mallActLuckdrawRecord.setActId(actId);
                    mallActLuckdrawRecord.setActName(mallActSet.getActName());
                    mallActLuckdrawRecord.setMemberId(memberId);
                    mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                    mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED);
                    mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                    List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY);
                    if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){
                        apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage());
                        apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName());
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                }else{
                    List<MallActAwardSet> idList = new ArrayList();
                    for(MallActAwardSet mallActAwardSet : mallActAwardSets){
                        Integer awardTotal = mallActAwardSet.getAwardTotal();
                        Integer awardCnt = mallActAwardSet.getAwardCnt();
                        if(awardCnt < awardTotal){
                            idList.add(mallActAwardSet);
                        }
                    }
                    MallActAwardSet mallActAwardSet = new MallActAwardSet();
                    if(idList.size() <= 1){
                        mallActAwardSet = idList.get(0);
                    }else{
                        int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1);
                        mallActAwardSet = idList.get(randomIdIndex);
                    }
                    mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1);
                    mallActAwardSetMapper.updateById(mallActAwardSet);
                    MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord();
                    mallActLuckdrawRecord.setActId(actId);
                    mallActLuckdrawRecord.setActName(mallActSet.getActName());
                    mallActLuckdrawRecord.setMemberId(memberId);
                    mallActLuckdrawRecord.setActScoreCnt(actScoreCnt);
                    mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE);
                    mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord);
                    MallActWinRecord mallActWinRecord = new MallActWinRecord();
                    mallActWinRecord.setMemberId(memberId);
                    mallActWinRecord.setActId(actId);
                    mallActWinRecord.setActName(mallActSet.getActName());
                    mallActWinRecord.setAwardId(mallActAwardSet.getId());
                    mallActWinRecord.setAwardName(mallActAwardSet.getAwardName());
                    mallActWinRecord.setAwardType(mallActAwardSet.getAwardType());
                    mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue());
                    mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId());
                    mallActWinRecordMapper.insert(mallActWinRecord);
                    apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName());
                    apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType());
                    apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue());
                    apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage());
                    if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){
                        prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                    }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){
                        commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue()));
                    }
                }
            }
        }
        //扣竞猜积分
        prizeScore = prizeScore.subtract(new BigDecimal(actScoreCnt));
        wallet.setPrizeScore(prizeScore);
        wallet.setCommission(commission);
        mallMemberWalletMapper.updateAmountWithVersion(wallet);
        return apiMallAwardDetailsVo;
    }
}