From 1bf57dbbb7025facb8a3e3c2074e82af6f13b24f Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 28 Apr 2022 15:13:59 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java | 46 +++++++++++++++ src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java | 5 + src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java | 4 + src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java | 2 src/main/resources/mapper/modules/MallMemberWalletMapper.xml | 7 ++ src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 33 +++++++---- src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java | 3 src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java | 35 +++++++++++ src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java | 5 + src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java | 2 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 14 ++-- 12 files changed, 137 insertions(+), 21 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java new file mode 100644 index 0000000..8bf01bd --- /dev/null +++ b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java @@ -0,0 +1,35 @@ +package cc.mrbird.febs.common.enumerates; + +import lombok.Getter; + +/** + * @author wzy + * @date 2022-04-28 + **/ +@Getter +public enum FlowTypeEnum { + + + /** + * 余额 + */ + BALANCE(1), + /** + * 积分 + */ + SCORE(2), + /** + * 竞猜积分 + */ + PRIZE_SCORE(3), + /** + * 佣金 + */ + COMMISSION(4); + + private final int value; + + FlowTypeEnum(int value) { + this.value = value; + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java index f03c370..f10bd31 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import java.math.BigDecimal; import java.util.List; /** @@ -46,6 +47,10 @@ private Integer isHot; + private BigDecimal staticMultiple; + + private Integer isNormal; + @TableField(exist = false) private List<MallGoodsStyle> styles; diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java index 937c248..4efe753 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java @@ -38,4 +38,9 @@ * 抽奖积分 */ private BigDecimal prizeScore; + + /** + * 佣金 + */ + private BigDecimal commission; } diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java index 0c0af91..dd13190 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java @@ -43,7 +43,7 @@ public static final Integer IS_RETURN_Y = 1; /** - * 流水类型 1-余额 2-赠送积分 3-竞猜积分 + * 流水类型 1-余额 2-赠送积分 3-竞猜积分 4-佣金 */ private Integer flowType; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java index ab6deeb..50b5cd5 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java @@ -10,5 +10,7 @@ int updateBalanceWithVersion(@Param("record") MallMemberWallet wallet); + int updateCommissionWithVersion(@Param("record") MallMemberWallet wallet); + void updateBalanceWithId(@Param("record")MallMemberWallet mallMemberWallet); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java index d05df8a..3bbdb49 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java @@ -30,7 +30,7 @@ FebsResponse moneyFlows(MoneyFlowDto moneyFlowDto); - void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status); + void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType); void transfer(TransferDto transferDto); diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java index 79aed18..cb187ba 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java @@ -10,4 +10,8 @@ void addBalance(BigDecimal amount, Long member); void reduceBalance(BigDecimal amount, Long memberId); + + void addCommission(BigDecimal amount, Long member); + + void reduceCommission(BigDecimal amount, Long member); } 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 eb71ed1..a3529ea 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 @@ -2,6 +2,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; +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.*; @@ -328,7 +329,7 @@ } @Override - public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status) { + public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType) { MallMoneyFlow flow = new MallMoneyFlow(); flow.setMemberId(memberId); flow.setAmount(amount); @@ -338,6 +339,7 @@ flow.setRemark(remark); flow.setRtMemberId(rtMemberId); flow.setStatus(status); + flow.setFlowType(flowType); mallMoneyFlowMapper.insert(flow); } @@ -366,10 +368,10 @@ walletService.reduceBalance(transferDto.getAmount(), memberId); String orderNo = MallUtils.getOrderNum("T"); - this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null); + this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null, FlowTypeEnum.BALANCE.getValue()); walletService.addBalance(transferDto.getAmount(), mallMember.getId()); - this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null); + this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); } @Override @@ -397,16 +399,16 @@ MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); if (profit != null) { // 可提现 - BigDecimal canMoney = wallet.getBalance().subtract(profit); + BigDecimal canMoney = wallet.getCommission().subtract(profit); if(withdrawalDto.getAmount().compareTo(canMoney) > 0) { throw new FebsException("提现金额不足"); } } - walletService.reduceBalance(withdrawalDto.getAmount(), memberId); + walletService.reduceCommission(withdrawalDto.getAmount(), memberId); String orderNo = MallUtils.getOrderNum("W"); - this.addMoneyFlow(memberId, withdrawalDto.getAmount().negate(), MoneyFlowTypeEnum.WITHDRAWAL.getValue(), orderNo, null, null, null, 1); + this.addMoneyFlow(memberId, withdrawalDto.getAmount().negate(), MoneyFlowTypeEnum.WITHDRAWAL.getValue(), orderNo, null, null, null, 1, FlowTypeEnum.COMMISSION.getValue()); } @Override diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java index e2c2815..dff3490 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java @@ -66,4 +66,50 @@ } } } + + @Override + public void addCommission(BigDecimal amount, Long memberId) { + int i = 0; + boolean flag = true; + + while (flag) { + i++; + MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId); + wallet.setCommission(wallet.getCommission().add(amount)); + + int result = this.baseMapper.updateCommissionWithVersion(wallet); + if (result > 0) { + flag = false; + } else { + if (i > 2) { + throw new FebsException("余额增加失败"); + } + } + } + } + + @Override + public void reduceCommission(BigDecimal amount, Long memberId) { + int i = 0; + boolean flag = true; + + while (flag) { + i++; + MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId); + if (amount.compareTo(wallet.getCommission()) > 0) { + throw new FebsException("佣金不足"); + } + + wallet.setCommission(wallet.getCommission().subtract(amount)); + + int result = this.baseMapper.updateCommissionWithVersion(wallet); + if (result > 0) { + flag = false; + } else { + if (i > 2) { + throw new FebsException("佣金支付失败"); + } + } + } + } } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 3230d0d..1733f9e 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -1,9 +1,6 @@ package cc.mrbird.febs.mall.service.impl; -import cc.mrbird.febs.common.enumerates.AgentLevelEnum; -import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; -import cc.mrbird.febs.common.enumerates.OrderRefundStatusEnum; -import cc.mrbird.febs.common.enumerates.OrderStatusEnum; +import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; @@ -193,21 +190,33 @@ payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd()); orderInfo.setPayOrderNo(orderInfo.getOrderNo()); - orderInfo.setPayMethod("积分支付"); + orderInfo.setPayMethod("余额支付"); orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); orderInfo.setPayTime(new Date()); orderInfo.setPayResult("1"); - MallMember mallMember = memberMapper.selectById(member.getId()); - if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { - mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); - memberMapper.updateById(mallMember); +// MallMember mallMember = memberMapper.selectById(member.getId()); +// if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { +// mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); +// memberMapper.updateById(mallMember); +// } + + // 静态倍数 + List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); + if (CollUtil.isNotEmpty(orderItems)) { + for (MallOrderItem orderItem : orderItems) { + MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); + + MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); + BigDecimal score = sku.getOriginalPrice().multiply(mallGoods.getStaticMultiple()); + memberService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.SCORE.getValue()); + } } - memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null); + memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.BALANCE.getValue()); +// agentProducer.sendAutoLevelUpMsg(member.getId()); +// agentProducer.sendReturnMoneyMsg(orderInfo.getId()); - agentProducer.sendAutoLevelUpMsg(member.getId()); - agentProducer.sendReturnMoneyMsg(orderInfo.getId()); default: } diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java index eea3440..dcafa6d 100644 --- a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java @@ -1,6 +1,7 @@ package cc.mrbird.febs.pay.service.impl; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; +import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; @@ -107,6 +108,6 @@ agentProducer.sendReturnMoneyMsg(orderInfo.getId()); agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); - memberService.addMoneyFlow(orderInfo.getMemberId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null); + memberService.addMoneyFlow(orderInfo.getMemberId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.BALANCE.getValue()); } } diff --git a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml index cc3b0b8..7e60066 100644 --- a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml @@ -13,6 +13,13 @@ where id=#{record.id} and revision=#{record.revision} </update> + <update id="updateCommissionWithVersion"> + update mall_member_wallet + set revision = revision + 1, + commission = #{record.commission} + where id=#{record.id} and revision=#{record.revision} + </update> + <update id="updateBalanceWithId"> update mall_member_wallet set revision = revision + 1, -- Gitblit v1.9.1