From 44300720085ec4ed5f97810f383973d088ba711f Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 08 Jan 2025 14:00:38 +0800 Subject: [PATCH] refactor(mall): 重构活动详情接口返回值 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java | 545 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 543 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..4e54820 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,556 @@ 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.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.conversion.MallActivityConversion; +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.ApiActivityVo; +import cc.mrbird.febs.mall.vo.ApiMallActListVo; +import cc.mrbird.febs.mall.vo.ApiMallActWinDetailsVo; +import cc.mrbird.febs.mall.vo.ApiMallAwardDetailsVo; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +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; + private final IMallMoneyFlowService mallMoneyFlowService; + private final IApiMallMemberWalletService mallMemberWalletService; + private final MallActivityMapper mallActivityMapper; + + @Override + public IPage<ApiMallActListVo> findApiMallActListInPage(ApiMallActListDto apiMallActListDto) { + Page<ApiMallActListVo> page = new Page<>(apiMallActListDto.getPageNow(), apiMallActListDto.getPageSize()); + return this.baseMapper.selectApiMallActListInPage(apiMallActListDto, page); + } + + @Override + public ApiActivityVo findApiMallActDetailsById(Long id) { + MallActivity mallActivity = mallActivityMapper.selectById(id); + ApiActivityVo apiActivityVo = MallActivityConversion.INSTANCE.entityToApiActivityVo(mallActivity); + return apiActivityVo; + } + + @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() == 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<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()); + 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<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()); + apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); + }else{ + apiMallAwardDetailsVo.setAwardName("未中奖"); + } + apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); + }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()); + 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<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()); + apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); + }else{ + apiMallAwardDetailsVo.setAwardName("未中奖"); + } + apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); + } + }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()); + apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); + }else{ + apiMallAwardDetailsVo.setAwardName("未中奖"); + } + apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); + }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()); + 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<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()); + apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); + }else{ + apiMallAwardDetailsVo.setAwardName("未中奖"); + } + apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); + }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()); + 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<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()); + apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); + }else{ + apiMallAwardDetailsVo.setAwardName("未中奖"); + } + apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); + } + }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()); + apiMallAwardDetailsVo.setAwardId(mallActAwardSetXXCY.get(0).getId()); + }else{ + apiMallAwardDetailsVo.setAwardName("未中奖"); + } + apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY); + }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()); + 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; + } + + } -- Gitblit v1.9.1