Bläddra i källkod

update: 微信支付成功后,设置订单项的用户冻结积分。

Ben 11 månader sedan
förälder
incheckning
8bed9d5f19

+ 73 - 20
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -611,6 +611,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         if(caculateFreezeAmount){
 
             //下面这部分,应该是写到订单支付成功的地方的,写在下面这里,只是为了方便测试
+            //查询订单提成比例
+            QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
+            OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
+            /**
+             * 毛利 = 成本 * 0.38... (推广费用)
+             */
+            String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
+            /**
+             * 推广-推荐人额度 百分比
+             */
+            String grossProfitAncestorQuotaPerc = orderPercentageDO.getGrossProfitAncestorQuotaPerc();
 
             for(Map<String,Object> m:orderMapList){
                 TradeOrderDO order = (TradeOrderDO)(m.get("order"));
@@ -629,21 +640,32 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     skuDOMap.put(productSkuDO.getId(),productSkuDO);
                 }
 
-                Integer totalPromotionExpenses = 0;//总推广费,单位为分
+                Integer totalFreezeAmount = 0;//总推广费,单位为分
                 for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
                     ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
                     //这类商品的总推广费
                     Integer promotionExpenses = (productSkuDO.getPrice()-productSkuDO.getCostPrice())
                             *tradeOrderItemDO.getCount();
-                    totalPromotionExpenses+=promotionExpenses;
-                }
 
-                //把商品的推广费总额,转换为直推人获得的冻结积分
-                Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
+                    //把商品项的推广费,转换为这项商品直推人获得的冻结积分
+                    Integer itemFreezeAmount =
+                            promotionExpenses2GrossProfitAncestorQuota(promotionExpenses,
+                                    grossProfitPerc,//毛利 = 成本 * 0.38... (推广费用)
+                                    grossProfitAncestorQuotaPerc//推广-推荐人额度 百分比
+                            );
+
+                    //记录用户在此订单项获得的冻结积分
+                    TradeOrderItemDO toid = new TradeOrderItemDO();
+                    toid.setId(tradeOrderItemDO.getId());
+                    toid.setIncreaseIntegral(itemFreezeAmount);
+                    tradeOrderItemMapper.updateById(toid);
+
+                    totalFreezeAmount+=itemFreezeAmount;
+                }
 
                 Long tradeOrderId = order.getId();
                 String OrderNum =order.getNo();
-                integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payPoints*(-1),freezeAmount,tradeOrderId,OrderNum);
+                integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payPoints*(-1),totalFreezeAmount,tradeOrderId,OrderNum);
             }
 
         }
@@ -653,25 +675,29 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
     /**
      * 把商品的推广费总额,转换为直推人获得的冻结积分
-     * @param totalPromotionExpenses 商品的推广费总额
+     * @param promotionExpenses 商品的推广费总额
      * @return 输入推广费,对应的直推人获得的冻结积分
      */
     public static Integer promotionExpenses2GrossProfitAncestorQuota(
-            OrderPercentageMapper orderPercentageMapper,
-            Integer totalPromotionExpenses){
-
-        //查询订单提成比例
-        QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
-        OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
+            Integer promotionExpenses,
+            /**
+             * 毛利 = 成本 * 0.38... (推广费用)
+             */
+            String grossProfitPerc,
+            /**
+             * 推广-推荐人额度 百分比
+             */
+            String grossProfitAncestorQuotaPerc
+            ){
 
         //转为BigDecimal
-        BigDecimal profit = new BigDecimal(String.valueOf(totalPromotionExpenses));
+        BigDecimal profit = new BigDecimal(String.valueOf(promotionExpenses));
 
         // 计算毛利: 利润 * 0.38
-        BigDecimal grossProfit = profit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
+        BigDecimal grossProfit = profit.multiply(new BigDecimal(grossProfitPerc)).setScale(4, RoundingMode.DOWN);
 
         // 计算直推人额度: 毛利 * 0.35
-        BigDecimal descendantQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc())).setScale(4, RoundingMode.DOWN);
+        BigDecimal descendantQuota = grossProfit.multiply(new BigDecimal(grossProfitAncestorQuotaPerc)).setScale(4, RoundingMode.DOWN);
 
         //把钱转为:增加的冻结积分
         BigDecimal freezeAmount_bigDecimal = money2Integral(descendantQuota);
@@ -802,6 +828,18 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
 //        System.out.println("#########updateOrderPaid####payOrderId:"+payOrderId);
 
+        //查询订单提成比例
+        QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
+        OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
+        /**
+         * 毛利 = 成本 * 0.38... (推广费用)
+         */
+        String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
+        /**
+         * 推广-推荐人额度 百分比
+         */
+        String grossProfitAncestorQuotaPerc = orderPercentageDO.getGrossProfitAncestorQuotaPerc();
+
         //add by Ben 根据支付订单id,查询所有 支付订单 对应的 订单
         List<TradeOrderDO> TradeOrderDOList = tradeOrderMapper.selectList("pay_order_id", payOrderId);
 
@@ -842,6 +880,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
             // 5. 增加用户冻结积分 20240420
 
+
             List<Long> skuList = new ArrayList<>();
             //汇总各订单项利润
             List<TradeOrderItemDO> TradeOrderItemList = tradeOrderItemMapper.selectList("order_id", order.getId());
@@ -856,20 +895,34 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 skuDOMap.put(productSkuDO.getId(),productSkuDO);
             }
 
-            Integer totalPromotionExpenses = 0;//总推广费,单位为
+            Integer totalFreezeAmount = 0;//用户总的冻结积
             for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
                 ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
                 //这类商品的总推广费
                 Integer promotionExpenses = (productSkuDO.getPrice()-productSkuDO.getCostPrice())
                         *tradeOrderItemDO.getCount();
-                totalPromotionExpenses+=promotionExpenses;
+
+                //把商品项的推广费,转换为这项商品直推人获得的冻结积分
+                Integer itemFreezeAmount =
+                        promotionExpenses2GrossProfitAncestorQuota(promotionExpenses,
+                                grossProfitPerc,//毛利 = 成本 * 0.38... (推广费用)
+                                grossProfitAncestorQuotaPerc//推广-推荐人额度 百分比
+                        );
+
+                totalFreezeAmount+=itemFreezeAmount;
+
+                //记录用户在此订单项获得的冻结积分
+                TradeOrderItemDO toid = new TradeOrderItemDO();
+                toid.setId(tradeOrderItemDO.getId());
+                toid.setIncreaseIntegral(itemFreezeAmount);
+                tradeOrderItemMapper.updateById(toid);
             }
 
             //把商品的推广费总额,转换为直推人获得的冻结积分
-            Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
+//            Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
 
             String OrderNum =order.getNo();
-            integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0,freezeAmount,tradeOrderId,OrderNum);
+            integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0,totalFreezeAmount,tradeOrderId,OrderNum);
 
         }