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