package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; 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.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; 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 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; private final IMallMoneyFlowService mallMoneyFlowService; private final IApiMallMemberWalletService mallMemberWalletService; @Override public IPage findApiMallActListInPage(ApiMallActListDto apiMallActListDto) { Page 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 mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActId(id); if(CollUtil.isNotEmpty(mallActAwardSets)){ List 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 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 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() == null? "0":scoreDic.getValue(); String cashDicValue = cashDic.getValue() == null? "0":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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); }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 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 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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); }else{ List 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()); apiMallAwardDetailsVo.setAwardId(mallActAwardSet.getId()); 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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); } }else{ //获取活动下该类别的奖品 List 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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); }else{ List 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()); apiMallAwardDetailsVo.setAwardId(mallActAwardSet.getId()); 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 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 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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); }else{ List 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()); apiMallAwardDetailsVo.setAwardId(mallActAwardSet.getId()); 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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); } }else{ //获取活动下该类别的奖品 List 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 mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); }else{ List 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()); apiMallAwardDetailsVo.setAwardId(mallActAwardSet.getId()); 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); // 消耗积分 BigDecimal useScore = new BigDecimal(actScoreCnt); mallMemberWalletService.reduce(useScore, wallet.getMemberId(), "prizeScore"); mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), useScore.negate(), MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue()); if (apiMallAwardDetailsVo.getAwardType() != 3) { BigDecimal prize = new BigDecimal(apiMallAwardDetailsVo.getAwardValue()); if (apiMallAwardDetailsVo.getAwardType() == 1) { mallMemberWalletService.add(prize, wallet.getMemberId(), "prizeScore"); mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), prize, MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue()); } else if (apiMallAwardDetailsVo.getAwardType() == 2) { mallMemberWalletService.add(prize, wallet.getMemberId(), "commission"); mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), prize, MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.COMMISSION.getValue()); } } return apiMallAwardDetailsVo; } }