From 96797576f4ececd59bf573cccf0f6e47581673d0 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 11 Sep 2023 15:32:41 +0800 Subject: [PATCH] 领红包 --- src/main/java/cc/mrbird/febs/common/utils/AppContants.java | 1 + src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 1 + src/main/resources/mapper/modules/MallMoneyFlowMapper.xml | 1 + src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 48 ++++++++++++++++++++++++++++++++++++------------ 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java index 79d69c3..81eba7a 100644 --- a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java +++ b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java @@ -67,5 +67,6 @@ public static final String AGENT_LEVEL = "AGENT_LEVEL"; public static final String AGENT_LEVEL_REQUIRE = "AGENT_LEVEL_REQUIRE"; + public static final String SCORE_POOL_TODAY = "scorePoolToday"; } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index a5b82f9..844f498 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -17,16 +17,19 @@ import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.ICommonService; +import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -38,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; /** @@ -56,6 +60,7 @@ private final MallShoppingCartMapper mallShoppingCartMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final IApiMallMemberWalletService walletService; + private final IMallMoneyFlowService moneyFlowService; private final MallMemberPaymentMapper mallMemberPaymentMapper; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallShopApplyMapper mallShopApplyMapper; @@ -596,19 +601,38 @@ @Override public FebsResponse redBag() { MallMember member = LoginUserUtil.getLoginUser(); - List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectByMemberIdAndTypeAndStatusAndDate(member.getId(), MoneyFlowTypeEnum.SCORE_POOL.getValue(), 1, new Date()); - if(CollUtil.isEmpty(mallMoneyFlows)){ - throw new FebsException("没有红包"); - } - BigDecimal amount = BigDecimal.ZERO; - for(MallMoneyFlow mallMoneyFlow : mallMoneyFlows){ - mallMoneyFlow.setStatus(2); - mallMoneyFlowMapper.updateById(mallMoneyFlow); + QueryWrapper<MallMember> formalMember = new QueryWrapper<>(); + formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); + List<MallMember> mallMembers = this.baseMapper.selectList(formalMember); + BigDecimal outCome = BigDecimal.ZERO; + if(CollUtil.isNotEmpty(mallMembers)){ - amount = mallMoneyFlow.getAmount().abs(); + BigDecimal scorePoolToDay = new BigDecimal(redisUtils.get(AppContants.SCORE_POOL_TODAY).toString()); + BigDecimal income = new BigDecimal(scorePoolToDay.divide(new BigDecimal(mallMembers.size()), 2, RoundingMode.HALF_UP).intValue()); + if(income.compareTo(BigDecimal.ZERO) < 1){ + throw new FebsException("没有红包"); + } + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId()); + if(mallMemberWallet.getScore().compareTo(BigDecimal.ZERO) < 1){ + throw new FebsException("没有红包"); + } + if(mallMemberWallet.getScore().compareTo(income) < 0){ + outCome = new BigDecimal(mallMemberWallet.getScore().intValue()); + }else{ + outCome = income; + } + + outCome = new BigDecimal(RandomUtil.randomBigDecimal(BigDecimal.ZERO,outCome).intValue()).setScale(2,BigDecimal.ROUND_DOWN); + /* + 平分成佣金,一比一减少赠送积分 + 如果没有赠送积分,则平分0 + */ + moneyFlowService.addMoneyFlow(member.getId(), outCome, MoneyFlowTypeEnum.SCORE_POOL.getValue(), null, FlowTypeEnum.COMMISSION.getValue()); + moneyFlowService.addMoneyFlow(member.getId(), outCome.negate(), MoneyFlowTypeEnum.SCORE_POOL.getValue(), null, FlowTypeEnum.SCORE.getValue()); + walletService.add(outCome, member.getId(), "commission"); + walletService.reduce(outCome.negate(), member.getId(), "score"); + } - walletService.add(amount, member.getId(), "commission"); - walletService.reduce(amount.negate(), member.getId(), "score"); - return new FebsResponse().success().data(amount); + return new FebsResponse().success().data(outCome); } } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java index cff92e6..d7b9f3e 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java @@ -538,6 +538,7 @@ BigDecimal scorePoolToDay = scorePoolNew.multiply(dividEquallyRatio); redisUtils.set(redisKey,scorePoolNew.subtract(scorePoolToDay).intValue(),0L); + redisUtils.set(AppContants.SCORE_POOL_TODAY,scorePoolToDay.intValue(),0L); QueryWrapper<MallMember> formalMember = new QueryWrapper<>(); formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml index aa81c97..18e6e4d 100644 --- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml +++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml @@ -18,6 +18,7 @@ left join mall_member b on a.rt_member_id=b.id left join data_dictionary_custom c on b.level = c.code and c.type='AGENT_LEVEL' <where> + <if test="record.inOrOut == 3"> and a.amount > 0 </if> -- Gitblit v1.9.1