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