From 5324a804f6dcb622f4ab3f554608e58c728e287e Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 19 May 2022 18:15:58 +0800 Subject: [PATCH] 20220518 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java | 528 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 526 insertions(+), 2 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java index 05ebb48..b8ffd31 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java +++ b/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; + } + + } -- Gitblit v1.9.1