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