From ff55c5334fc35594d2f0c680c29afd309cf367a2 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 22 May 2025 10:51:36 +0800
Subject: [PATCH] feat(mall): 添加商品佣金设置并调整相关功能

---
 src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java                     |    2 +
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java       |   27 ++++++++++---
 src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html          |   36 ++++++------------
 src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java         |   14 ++++++-
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   18 ++++++---
 src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html       |   14 ++++++-
 6 files changed, 70 insertions(+), 41 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
index bf0c877..78b786a 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
@@ -43,6 +43,8 @@
     private BigDecimal amount;
 
     private BigDecimal costPrice;
+    //一级佣金
+    private BigDecimal levelOnePrice;
 
     private Integer isNormal;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java
index 6187d7e..d2a5c45 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java
@@ -126,11 +126,15 @@
                     if (StrUtil.isEmpty(presentPrice)) {
                         return new FebsResponse().fail().message("商品规格现价不能为空");
                     }
-//                    if (StrUtil.isEmpty(addSku.getLevelOnePrice())
-//                    || StrUtil.isEmpty(addSku.getLevelTwoPrice())
-//                            || StrUtil.isEmpty(addSku.getLevelThreePrice())) {
-//                        return new FebsResponse().fail().message("商品规格级别价格不能为空");
-//                    }
+                    if (StrUtil.isEmpty(addSku.getLevelOnePrice())) {
+                        return new FebsResponse().fail().message("佣金不能为空");
+                    }
+
+                    BigDecimal costPrice = addSku.getCostPrice();
+                    BigDecimal levelOnePrice = new BigDecimal(addSku.getLevelOnePrice());
+                    if (levelOnePrice.compareTo(costPrice) >= 0) {
+                        return new FebsResponse().fail().message("佣金要小于成本价");
+                    }
                     BigDecimal goodsWeight = addSku.getGoodsWeight();
                     if(BigDecimal.ZERO.compareTo(goodsWeight) > 0){
                         return new FebsResponse().fail().message("重量不能小于零");
@@ -200,7 +204,7 @@
             sku.setCostPrice(mallGoods.getCostPrice());
             sku.setPresentPrice(new BigDecimal(mallGoods.getPresentPrice()));
             sku.setOriginalPrice(new BigDecimal(mallGoods.getOriginalPrice()));
-//            sku.setLevelOnePrice(mallGoods.getLevelOnePrice());
+            sku.setLevelOnePrice(mallGoods.getLevelOnePrice());
 //            sku.setLevelTwoPrice(mallGoods.getLevelTwoPrice());
 //            sku.setLevelThreePrice(mallGoods.getLevelThreePrice());
             sku.setSkuVolume(mallGoods.getVolume());
@@ -241,7 +245,7 @@
                 mallGoodsSku.setOriginalPrice(new BigDecimal(addMallGoodsSkuDto.getOriginalPrice()));
                 mallGoodsSku.setPresentPrice(new BigDecimal(addMallGoodsSkuDto.getPresentPrice()));
 //                mallGoodsSku.setPresentPrice(new BigDecimal(addMallGoodsSkuDto.getOriginalPrice()));
-//                mallGoodsSku.setLevelOnePrice(new BigDecimal(addMallGoodsSkuDto.getLevelOnePrice()));
+                mallGoodsSku.setLevelOnePrice(new BigDecimal(addMallGoodsSkuDto.getLevelOnePrice()));
 //                mallGoodsSku.setLevelTwoPrice(new BigDecimal(addMallGoodsSkuDto.getLevelTwoPrice()));
 //                mallGoodsSku.setLevelThreePrice(new BigDecimal(addMallGoodsSkuDto.getLevelThreePrice()));
                 mallGoodsSku.setStyleId(mallGoodsStyleSku.getId());
@@ -402,6 +406,15 @@
                     if (presentPrice.compareTo(BigDecimal.ZERO) < 0) {
                         return new FebsResponse().fail().message("商品规格现价不能小于0");
                     }
+                    if (ObjectUtil.isEmpty(addSku.getLevelOnePrice())) {
+                        return new FebsResponse().fail().message("佣金不能为空");
+                    }
+
+                    BigDecimal costPrice = addSku.getCostPrice();
+                    BigDecimal levelOnePrice = addSku.getLevelOnePrice();
+                    if (levelOnePrice.compareTo(costPrice) >= 0) {
+                        return new FebsResponse().fail().message("佣金要小于成本价");
+                    }
                     BigDecimal goodsWeight = addSku.getGoodsWeight();
                     if(BigDecimal.ZERO.compareTo(goodsWeight) > 0){
                         return new FebsResponse().fail().message("重量不能小于零");
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 0647d39..9321b44 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
@@ -209,12 +209,16 @@
 
                     MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
                     // todo 纯积分商品一个账号限制购买一次
-//                    if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
-//                        List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
-//                        if (CollUtil.isNotEmpty(items)) {
-//                            throw new FebsException("积分商品一个账号只能购买一次");
-//                        }
-//                    }
+                    if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
+                        Integer cnt = item.getCnt();
+                        if(1 < cnt){
+                            throw new FebsException("积分商品限购一件");
+                        }
+                        List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
+                        if (CollUtil.isNotEmpty(items)) {
+                            throw new FebsException("积分商品一个账号限购一次");
+                        }
+                    }
 
                     if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                         throw new FebsException(mallGoods.getGoodsName() + "已下架");
@@ -226,6 +230,7 @@
                     }
 
                     BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                    BigDecimal levelOnePrice = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                     //是否使用优惠卷
                     if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){
                         Long memberCouponId = addOrderDto.getMemberCouponId();
@@ -238,6 +243,7 @@
                         }
                     }
                     orderItem.setAmount(amount);
+                    orderItem.setLevelOnePrice(levelOnePrice);
                     orderItem.setScoreAmount(scoreAmountMap.get(item.getSkuId()));
                     orderItem.setCnt(item.getCnt());
                     orderItem.setOrderId(orderInfo.getId());
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
index ffd0c68..31a2347 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
@@ -42,6 +42,7 @@
 public class VipCommonServiceImpl implements IVipCommonService {
 
     private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final MallOrderItemMapper mallOrderItemMapper;
     private final IMallVipConfigService mallVipConfigService;
     private final IMallMoneyFlowService mallMoneyFlowService;
     private final IApiMallMemberWalletService mallMemberWalletService;
@@ -298,15 +299,24 @@
             return;
         }
         // 计算返佣金额
+        List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectList(
+                new LambdaQueryWrapper<MallOrderItem>()
+                        .eq(MallOrderItem::getOrderId, orderId)
+                        .eq(MallOrderItem::getState, 1)
+        );
+        if(CollUtil.isEmpty(mallOrderItems)){
+            return;
+        }
+        BigDecimal amount = mallOrderItems.stream().map(MallOrderItem::getLevelOnePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal returnPercent = happySaleLevel.getReturnPercent();
-        BigDecimal multiply = mallOrderInfo.getAmount().multiply(returnPercent).setScale(2, RoundingMode.HALF_DOWN);
+        BigDecimal multiply = amount.multiply(returnPercent).setScale(2, RoundingMode.HALF_DOWN);
         log.info("团长获得返佣:{}",multiply);
         // 如果返佣金额小于等于0,则直接返回
         if(BigDecimal.ZERO.compareTo(multiply) >=0){
             return;
         }
         // 如果返佣金额大于等于订单金额,则直接返回
-        if(multiply.compareTo(mallOrderInfo.getAmount()) >= 0){
+        if(multiply.compareTo(amount) > 0){
             return;
         }
         // 记录团长获得返佣
diff --git a/src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html b/src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
index 36a817c..99d39ec 100644
--- a/src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
+++ b/src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
@@ -209,29 +209,6 @@
                                                 </div>
                                             </div>
                                         </div>
-<!--                                        <blockquote class="layui-elem-quote blue-border">代理价格</blockquote>-->
-<!--                                        <div class="layui-row layui-col-space10 layui-form-item">-->
-<!--                                            <div class="layui-col-lg6">-->
-<!--                                                <label class="layui-form-label febs-form-item-require">一级价格:</label>-->
-<!--                                                <div class="layui-input-block">-->
-<!--                                                    <input type="text" name="levelOnePrice" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">-->
-<!--                                                </div>-->
-<!--                                            </div>-->
-<!--                                            <div class="layui-col-lg6">-->
-<!--                                                <label class="layui-form-label febs-form-item-require">二级价格:</label>-->
-<!--                                                <div class="layui-input-block">-->
-<!--                                                    <input type="text" name="levelTwoPrice" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">-->
-<!--                                                </div>-->
-<!--                                            </div>-->
-<!--                                        </div>-->
-<!--                                        <div class="layui-row layui-col-space10 layui-form-item">-->
-<!--                                            <div class="layui-col-lg6">-->
-<!--                                                <label class="layui-form-label febs-form-item-require">三级价格:</label>-->
-<!--                                                <div class="layui-input-block">-->
-<!--                                                    <input type="text" name="levelThreePrice" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">-->
-<!--                                                </div>-->
-<!--                                            </div>-->
-<!--                                        </div>-->
 
                                         <div class="layui-form-item">
                                             <div class="layui-col-lg6">
@@ -249,7 +226,18 @@
                                                     <div class="layui-form-mid layui-word-aux">全部使用积分设置成:大于等于100%</div>
                                                 </div>
                                             </div>
+                                        </div>
 
+                                        <blockquote class="layui-elem-quote blue-border">佣金设置</blockquote>
+                                        <div class="layui-row layui-col-space10 layui-form-item">
+                                            <div class="layui-col-lg6">
+                                                <label class="layui-form-label febs-form-item-require">佣金:</label>
+                                                <div class="layui-input-block">
+                                                    <input type="text" name="levelOnePrice" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
+                                                    <div class="layui-form-mid layui-word-aux">佣金要小于成本价,实际佣金等于每个分销级别的比例乘以佣金。</div>
+                                                    <div class="layui-form-mid layui-word-aux">没有佣金设置成:0</div>
+                                                </div>
+                                            </div>
                                         </div>
                                         <blockquote class="layui-elem-quote blue-border">运费设置</blockquote>
                                         <div class="layui-form-item">
@@ -555,7 +543,7 @@
                 ,{field: 'skuName', title: '规格', edit:'text', width:200}
                 // ,{field: 'sample', title:'样品', width:100}
                 ,{field: 'goodsWeight', title: '重量', edit:'text', width:100}
-                // ,{field: 'levelOnePrice', title: '一级价格', edit:'text', width:100}
+                ,{field: 'levelOnePrice', title: '佣金', edit:'text', width:100}
                 // ,{field: 'levelTwoPrice', title: '二级价格', edit:'text', width:100}
                 // ,{field: 'levelThreePrice', title: '三级价格', edit:'text', width:100}
                 ,{field: 'originalPrice', title: '原价', edit:'text', width:100}
diff --git a/src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html b/src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
index 1733b60..b48b5c5 100644
--- a/src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
+++ b/src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
@@ -272,7 +272,17 @@
 <!--                                                </div>-->
 <!--                                            </div>-->
 <!--                                        </div>-->
-
+                                        <blockquote class="layui-elem-quote blue-border">佣金设置</blockquote>
+                                        <div class="layui-row layui-col-space10 layui-form-item">
+                                            <div class="layui-col-lg6">
+                                                <label class="layui-form-label febs-form-item-require">佣金:</label>
+                                                <div class="layui-input-block">
+                                                    <input type="text" name="levelOnePrice" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
+                                                    <div class="layui-form-mid layui-word-aux">佣金要小于成本价,实际佣金等于每个分销级别的比例乘以佣金。</div>
+                                                    <div class="layui-form-mid layui-word-aux">没有佣金设置成:0</div>
+                                                </div>
+                                            </div>
+                                        </div>
                                         <blockquote class="layui-elem-quote blue-border">运费设置</blockquote>
                                         <div class="layui-form-item">
                                             <label class="layui-form-label">运费:</label>
@@ -587,7 +597,7 @@
                 ,{field: 'goodsWeight', title: '重量', edit:'text', width:100}
                 ,{field: 'originalPrice', title: '原价', edit:'text', width:100}
                 ,{field: 'presentPrice', title: '现价', edit:'text', width:100}
-                // ,{field: 'levelOnePrice', title: '一级价格', edit:'text', width:100}
+                ,{field: 'levelOnePrice', title: '佣金', edit:'text', width:100}
                 // ,{field: 'levelTwoPrice', title: '二级价格', edit:'text', width:100}
                 // ,{field: 'levelThreePrice', title: '三级价格', edit:'text', width:100}
                 ,{field: 'costPrice', title: '成本价', edit:'text', width:100}

--
Gitblit v1.9.1