From 99ddd78578d73dc15a17ef03ddf56933399543f1 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 12 May 2025 15:28:43 +0800
Subject: [PATCH] refactor(mall): 积分支付相关功能

---
 src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java                                |    3 
 src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java                                  |    3 
 src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java                          |   10 
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java          |  222 +++++++----
 src/main/java/cc/mrbird/febs/mall/controller/member/ApiMallMemberController.java         |    4 
 src/main/java/cc/mrbird/febs/mall/controller/signActivity/ApiScoreController.java        |    2 
 src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java                                    |    3 
 src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsController.java          |    2 
 src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java          |    2 
 src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java                          |    3 
 src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java                              |    6 
 src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java                                    |    3 
 src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java                       |   18 +
 src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html                   |   58 +-
 src/main/java/cc/mrbird/febs/mall/controller/banner/ApiMallNewsController.java           |    2 
 src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java                        |    1 
 src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java                         |    7 
 src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html                |   38 +
 src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java                      |    2 
 src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsController.java         |    2 
 src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallAddressInfoController.java     |    4 
 src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java                  |  436 +++++++++++++++++------
 src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsController.java           |    4 
 src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberFootprintController.java     |    4 
 src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsCategoryController.java   |    4 
 src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java                    |    7 
 src/main/java/cc/mrbird/febs/mall/controller/order/AdminMallOrderController.java         |   12 
 src/main/resources/mapper/modules/MallOrderInfoMapper.xml                                |    2 
 src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallInvoiceController.java         |    2 
 src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java                             |    3 
 src/main/resources/mapper/modules/MallGoodsMapper.xml                                    |    4 
 src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallShoppingCartController.java    |    4 
 src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallOrderController.java           |    4 
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java                     |  144 +++----
 src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java                         |    4 
 src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java                              |    2 
 src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsCategoryController.java  |    2 
 src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java                          |    4 
 src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java                                  |    3 
 src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsCategoryController.java |    2 
 src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberCollectionController.java    |    4 
 41 files changed, 687 insertions(+), 359 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
index 23a02f9..89f0eaf 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
@@ -171,6 +171,24 @@
     }
 
 
+
+
+    @Bean
+    public DirectExchange saleLevelUp() {
+        return new DirectExchange(RabbitQueueEnum.SALE_LEVEL_UP.getExchange());
+    }
+
+    @Bean
+    public Queue saleLevelUpQueue() {
+        return new Queue(RabbitQueueEnum.SALE_LEVEL_UP.getQueue());
+    }
+
+    @Bean
+    public Binding saleLevelUpBind() {
+        return BindingBuilder.bind(saleLevelUpQueue()).to(saleLevelUp()).with(RabbitQueueEnum.SALE_LEVEL_UP.getRoute());
+    }
+
+
     @Bean
     public DirectExchange activityOrderCheckExchange() {
         return new DirectExchange(RabbitQueueEnum.ACTIVITY_ORDER_ITEM_CHECK.getExchange());
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
index eccc67e..82bc4ac 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
@@ -15,11 +15,11 @@
      */
     BALANCE(1),
     /**
-     * 积分
+     * 会员升级经验
      */
     SCORE(2),
     /**
-     * 竞猜积分
+     * 积分
      */
     PRIZE_SCORE(3),
     /**
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
index 1c8028d..c57fc53 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
@@ -8,9 +8,13 @@
     /**
      *
      */
+    SALE_RECOMMEND(6, "好友下单获得佣金"),
+    OTHER_RECOMMEND(5, "推荐下单获得积分"),
+    MINE_RECOMMEND(4, "下单获得积分"),
+
     PAY(1, "积分支付"),
 
-    BUY(2, "购买商品获得积分"),
+    BUY(2, "购买商品,获得等级经验"),
 
     RECOMMEND(3, "推荐下单获得积分");
 
@@ -29,7 +33,6 @@
                 return scoreFlowTypeEnum.getDesc();
             }
         }
-
         return "";
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/banner/ApiMallNewsController.java b/src/main/java/cc/mrbird/febs/mall/controller/banner/ApiMallNewsController.java
index dd69018..0ff6494 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/banner/ApiMallNewsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/banner/ApiMallNewsController.java
@@ -23,7 +23,7 @@
 @RestController
 @RequestMapping(value = "/api/news")
 @RequiredArgsConstructor
-@Api(value = "ApiMallNewsController", tags = "新闻接口类")
+@Api(value = "ApiMallNewsController", tags = "365轮播广告接口类")
 public class ApiMallNewsController {
 
     private final IApiMallNewsService newsService;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsCategoryController.java
similarity index 98%
rename from src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsCategoryController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsCategoryController.java
index bb2391e..a603574 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsCategoryController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsCategoryController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.controller.BaseController;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsController.java
similarity index 99%
rename from src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsController.java
index 428afbf..c653d7a 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/AdminMallGoodsController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 
 import cc.mrbird.febs.common.annotation.ControllerEndpoint;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsCategoryController.java
similarity index 93%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsCategoryController.java
index 3a525be..b4c0f0c 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsCategoryController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.service.IApiMallGoodsCategoryService;
@@ -24,7 +24,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/category")
-@Api(value = "ApiMallGoodsCategoryController", tags = "商品分类参数接收类")
+@Api(value = "ApiMallGoodsCategoryController", tags = "365商品分类")
 public class ApiMallGoodsCategoryController {
 
     private final IApiMallGoodsCategoryService mallGoodsCategoryService;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsController.java
similarity index 96%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsController.java
index b8da8bc..9f676a5 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMallGoodsController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto;
@@ -23,7 +23,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/goods")
-@Api(value = "ApiMallGoodsController", tags = "商城商品接口类")
+@Api(value = "ApiMallGoodsController", tags = "365商品")
 public class ApiMallGoodsController {
     private final IApiMallGoodsService mallGoodsService;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberCollectionController.java
similarity index 93%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberCollectionController.java
index 680b621..76714de 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberCollectionController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.AddCollectionDto;
@@ -18,7 +18,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/collection")
-@Api(value = "ApiMemberCollectionController", tags = "收藏接口类")
+@Api(value = "ApiMemberCollectionController", tags = "365商品收藏")
 public class ApiMemberCollectionController {
 
     @Autowired
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberFootprintController.java
similarity index 94%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberFootprintController.java
index 3f68174..95d633e 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/ApiMemberFootprintController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 
 import cc.mrbird.febs.common.entity.FebsResponse;
@@ -23,7 +23,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/footprint")
-@Api(value = "ApiMemberFootprintController", tags = "足迹接口类")
+@Api(value = "ApiMemberFootprintController", tags = "365商品浏览足迹")
 public class ApiMemberFootprintController {
 
     @Autowired
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsCategoryController.java
similarity index 98%
rename from src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsCategoryController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsCategoryController.java
index 4fc96b5..1baddf6 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsCategoryController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsCategoryController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsConstant;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsController.java
similarity index 99%
rename from src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsController.java
index 5a34524..3ac03ab 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/goods/ViewMallGoodsController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.goods;
 
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsConstant;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/member/ApiMallMemberController.java
similarity index 98%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/member/ApiMallMemberController.java
index 819e3fa..e79a5db 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/member/ApiMallMemberController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.member;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
@@ -29,7 +29,7 @@
 @RestController
 @RequestMapping(value = "/api/member")
 @RequiredArgsConstructor
-@Api(value = "ApiMallMemberController", tags = "商城用户接口类")
+@Api(value = "ApiMallMemberController", tags = "365用户操作")
 public class ApiMallMemberController {
 
     private final IApiMallMemberService memberService;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/AdminMallOrderController.java
similarity index 97%
rename from src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/order/AdminMallOrderController.java
index 7973074..8333411 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/AdminMallOrderController.java
@@ -1,15 +1,11 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.order;
 
 import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.controller.BaseController;
-import cc.mrbird.febs.common.entity.DeptTree;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
 import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
 import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
-import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.common.utils.SpringContextHolder;
 import cc.mrbird.febs.common.utils.excl.ExcelSheetPO;
@@ -19,17 +15,11 @@
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
-import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
 import cc.mrbird.febs.mall.service.IAdminMallOrderService;
 import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService;
 import cc.mrbird.febs.mall.service.MallInvoiceService;
 import cc.mrbird.febs.mall.vo.AdminAddAddressTreeVo;
-import cc.mrbird.febs.mall.vo.AdminMallOrderRefundAddressVo;
-import cc.mrbird.febs.pay.model.OrderStateDto;
 import cc.mrbird.febs.pay.service.IXcxPayService;
-import cc.mrbird.febs.pay.util.WechatConfigure;
-import cc.mrbird.febs.system.entity.Dept;
-import cc.mrbird.febs.system.entity.User;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallAddressInfoController.java
similarity index 96%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallAddressInfoController.java
index 8305013..3a5bc7e 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallAddressInfoController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.order;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.conversion.MallAddressInfoConversion;
@@ -28,7 +28,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/address")
-@Api(value = "ApiMallAddressInfoController", tags = "用户地址管理接口类")
+@Api(value = "ApiMallAddressInfoController", tags = "365订单地址")
 public class ApiMallAddressInfoController {
 
     private final IApiMallAddressInfoService mallAddressInfoService;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallInvoiceController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallInvoiceController.java
similarity index 95%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallInvoiceController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallInvoiceController.java
index 5c92b77..b8e9350 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallInvoiceController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallInvoiceController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.order;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.ApiMallInvoiceDto;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallOrderController.java
similarity index 98%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallOrderController.java
index bdb6196..7a54449 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallOrderController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.order;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
@@ -27,7 +27,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/order")
-@Api(value = "ApiMallOrderController", tags = "订单接口类")
+@Api(value = "ApiMallOrderController", tags = "365订单")
 public class ApiMallOrderController {
 
     private final IApiMallOrderInfoService mallOrderInfoService;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallShoppingCartController.java
similarity index 95%
rename from src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallShoppingCartController.java
index 6d4a4ee..47c5591 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/ApiMallShoppingCartController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.order;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.AddCartDto;
@@ -28,7 +28,7 @@
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/cart")
-@Api(value = "ApiMallShoppingCartController", tags = "商城购物车接口请求类")
+@Api(value = "ApiMallShoppingCartController", tags = "365购物车")
 public class ApiMallShoppingCartController {
 
     private final IApiMallShoppingCartService mallShoppingCartService;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java
similarity index 99%
rename from src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java
rename to src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java
index a91c4db..f1417d8 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.controller;
+package cc.mrbird.febs.mall.controller.order;
 
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsConstant;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/signActivity/ApiScoreController.java b/src/main/java/cc/mrbird/febs/mall/controller/signActivity/ApiScoreController.java
index 1e5763f..71503ba 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/signActivity/ApiScoreController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/signActivity/ApiScoreController.java
@@ -29,7 +29,7 @@
 @CrossOrigin("*")
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/score")
-@Api(value = "ApiScoreController", tags = "365签到接口类")
+@Api(value = "ApiScoreController", tags = "365签到")
 public class ApiScoreController {
 
     private final IScoreService scoreService;
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java b/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java
index 81c7a79..168a90f 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java
@@ -16,9 +16,9 @@
 public class MallAchieveRecord extends BaseEntity {
 
     private Long memberId;
-
+    //业绩
     private BigDecimal amount;
-
+    //返佣
     private BigDecimal costAmount;
 
     private Date achieveTime;
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 fe7f3be..6cb4c4c 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java
@@ -64,6 +64,9 @@
      */
     private BigDecimal staticProp;
 
+    @TableField(exist = false)
+    private BigDecimal staticPropPrice;
+
     /**
      * 是否多规则 1-是 2-否
      */
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
index 5754d1c..28650b8 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
@@ -25,6 +25,8 @@
     private Date orderTime;
 
     private Date payTime;
+    //支付积分
+    private BigDecimal scoreAmount;
 
     private BigDecimal amount;
 
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 29c9ed8..603b2d1 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -36,6 +37,8 @@
     private Integer cnt;
 
     private BigDecimal price;
+    //支付积分
+    private BigDecimal scoreAmount;
 
     private BigDecimal amount;
 
@@ -58,4 +61,7 @@
 
     @TableField(exist = false)
     private BigDecimal itemAmount;
+
+    @TableField(exist = false)
+    private BigDecimal itemScoreAmount;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index eb14dd2..745c4c0 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -1,32 +1,17 @@
 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.utils.AppContants;
-import cc.mrbird.febs.mall.entity.AgentInfo;
-import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
-import cc.mrbird.febs.mall.entity.MallMember;
-import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IAgentService;
-import cc.mrbird.febs.mall.service.IApiMallMemberService;
-import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
-import cc.mrbird.febs.mall.service.IMallAchieveService;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
-import jdk.nashorn.internal.ir.IfNode;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author wzy
@@ -39,116 +24,105 @@
 
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final MallMemberMapper memberMapper;
+    private final HappySaleLevelMapper happySaleLevelMapper;
 
+    /**
+     * 自动升级代理等级
+     * 根据会员的当前状态和业绩,自动为其升级到下一个代理等级
+     * @param memberId 会员ID,用于识别需要升级的会员
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void autoUpAgentLevel(Long memberId) {
+        // 根据会员ID查询会员信息
         MallMember member = memberMapper.selectById(memberId);
-        if(StrUtil.isBlank(member.getReferrerIds())) {
+
+        // 检查会员账户状态和类型,只有在启用状态和普通类型时才进行升级操作
+        if(MallMember.ACCOUNT_STATUS_ENABLE != member.getAccountStatus()
+                || MallMember.ACCOUNT_TYPE_NORMAL != member.getAccountType() ){
+            return;
+        }
+        // 获取会员当前的店铺主人等级
+        Integer storeMaster = member.getStoreMaster();
+        // 下一个分销等级
+        storeMaster =storeMaster +1;
+        // 根据新的店铺主人等级查询对应的快乐销售等级信息
+        HappySaleLevel happySaleLevel = happySaleLevelMapper.selectOne(
+                new LambdaQueryWrapper<HappySaleLevel>()
+                        .eq(HappySaleLevel::getCode, storeMaster)
+        );
+        // 如果没有找到对应的快乐销售等级信息,则记录日志并返回
+        if (happySaleLevel == null) {
+            log.info("当前等级无下级");
+            return;
+        }
+        // 检查直推会员数量是否达到要求
+        if (!directMemberCnt(member, happySaleLevel.getDirectCnt())) {
             return;
         }
 
-        List<String> ids = StrUtil.split(member.getReferrerIds(), ',');
-        List<MallMember> parentMembers = memberMapper.selectByInviteIds(ids);
-        for (MallMember parent : parentMembers) {
-            // 未激活用户无法升级
-            if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) {
-                continue;
-            }
-
-            DataDictionaryCustom nextLevel = dataDictionaryCustomMapper.selectNextAgentLevelInfo(parent.getLevel());
-            if (nextLevel == null) {
-                log.info("当前层级无下一级:{}", parent.getLevel());
-                continue;
-            }
-
-            AgentInfo agentInfo = JSONObject.parseObject(nextLevel.getValue(), AgentInfo.class);
-            if (!directMemberCnt(parent, agentInfo)) {
-                continue;
-            }
-
-            if (!agentCntFinish(parent, agentInfo)) {
-                continue;
-            }
-
-            if (!teamIncome(parent, agentInfo)) {
-                continue;
-            }
-
-            parent.setLevel(nextLevel.getCode());
-            memberMapper.updateById(parent);
+        // 检查团队人数是否达到要求
+        if (!teamCntFinish(member, happySaleLevel.getTeamCnt())) {
+            return;
         }
+
+        // 检查团队业绩是否达到要求
+        if (!teamIncome(member, happySaleLevel.getTeamAmount())) {
+            return;
+        }
+
+        // 更新会员的店铺主人等级
+        member.setStoreMaster(storeMaster);
+        // 更新会员信息
+        memberMapper.updateById(member);
     }
+
 
     /**
      * 判断直推人数是否达标
-     *
-     * @param member
-     * @return
      */
-    private boolean directMemberCnt(MallMember member, AgentInfo agentInfo) {
-        List<MallMember> childs = memberMapper.selectByRefererId(member.getInviteId());
-        if (CollUtil.isEmpty(childs)) {
+    private boolean directMemberCnt(MallMember member, Integer directCnt) {
+        List<MallMember> childList = memberMapper.selectByRefererId(member.getInviteId());
+        if (CollUtil.isEmpty(childList)) {
             return false;
         }
 
-        if (childs.size() >= agentInfo.getDirectCnt()) {
+        if (childList.size() >= directCnt) {
             return true;
         }
 
-        log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), childs.size(), agentInfo.getLastAgentCnt());
+        log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getStoreMaster(), childList.size(), directCnt);
         return false;
     }
 
     /**
-     * 判断下级代理数量是否达标
-     *
-     * @return
+     * 判断团队数量是否达标
      */
-    private boolean agentCntFinish(MallMember member, AgentInfo agentInfo) {
-        if (agentInfo.getLastAgentCnt() == null || agentInfo.getLastAgentCnt() == 0) {
-            return true;
-        }
-
+    private boolean teamCntFinish(MallMember member, Integer teamCnt) {
         // 直推用户
-        List<MallMember> directMember = memberMapper.selectByRefererId(member.getInviteId());
-        if (CollUtil.isEmpty(directMember)) {
+        List<MallMember> teamMember = memberMapper.selectAllChildAgentListByInviteId(member.getInviteId());
+        if (CollUtil.isEmpty(teamMember)) {
             return false;
         }
 
-        // 用户团队达到指定代理数量,且都不在同一条线
-        int i = 0;
-        for (MallMember child : directMember) {
-            List<MallMember> mallMembers = memberMapper.selectChildAgentList(child.getInviteId(), member.getLevel());
-            if (CollUtil.isNotEmpty(mallMembers)) {
-                i++;
-            }
-        }
-
-        if (i >= agentInfo.getLastAgentCnt()) {
+        if (teamMember.size() >= teamCnt) {
             return true;
         }
 
-        log.info("用户:{}代理数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), i, agentInfo.getLastAgentCnt());
+        log.info("用户:{}团队数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getStoreMaster(), teamMember.size(), teamCnt);
         return false;
     }
 
     /**
      * 团队业绩是否达标
-     *
-     * @param mallMember
-     * @param agentInfo
-     * @return
      */
-    private boolean teamIncome(MallMember member, AgentInfo agentInfo) {
+    private boolean teamIncome(MallMember member, BigDecimal teamAmount) {
         BigDecimal totalIncome = memberMapper.selectAchieveByMemberId(member.getInviteId(), 2);
 
-        BigDecimal targetIncome = agentInfo.getTeamIncome().multiply(new BigDecimal("10000"));
-        if (totalIncome.compareTo(targetIncome) >= 0) {
+        if(totalIncome.compareTo(teamAmount) >= 0){
             return true;
         }
-
-        log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), totalIncome, targetIncome);
+        log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getPhone(), member.getStoreMaster(), totalIncome, teamAmount);
         return false;
     }
 
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 1b46a1c..95d834f 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
@@ -44,6 +44,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -56,6 +57,7 @@
 @RequiredArgsConstructor
 public class ApiMallOrderInfoServiceImpl extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IApiMallOrderInfoService {
 
+    private final MallMemberWalletMapper mallMemberWalletMapper;
     private final MallGoodsMapper mallGoodsMapper;
     private final MallGoodsSkuMapper mallGoodsSkuMapper;
     private final MallAddressInfoMapper mallAddressInfoMapper;
@@ -88,6 +90,7 @@
     private final CouponGoodsMapper couponGoodsMapper;
 
     private final IMallVipConfigService mallVipConfigService;
+    private final MallAchieveRecordMapper mallAchieveRecordMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -121,6 +124,7 @@
         this.baseMapper.insert(orderInfo);
 
         BigDecimal total = BigDecimal.ZERO;
+        BigDecimal totalScoreAmount = BigDecimal.ZERO;
         /**
          * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额
          */
@@ -138,6 +142,15 @@
             }
             List<AddOrderItemDto> items = addOrderDto.getItems();
             couponAmountMap = getCouponAmountMap(memberCouponId, items);
+        }
+        /**
+         * 判断用户的积分是否足够
+         */
+        Map<Long, BigDecimal> scoreAmountMap = getScoreAmountMap(addOrderDto.getItems());
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+        //判断scoreAmountMap中的总积分数量是否大于用户的积分数量
+        if(scoreAmountMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(mallMemberWallet.getPrizeScore()) > 0){
+            throw new FebsException("您的积分不足");
         }
         for (AddOrderItemDto item : addOrderDto.getItems()) {
                 MallOrderItem orderItem = new MallOrderItem();
@@ -225,6 +238,7 @@
                         }
                     }
                     orderItem.setAmount(amount);
+                    orderItem.setScoreAmount(scoreAmountMap.get(item.getSkuId()));
                     orderItem.setCnt(item.getCnt());
                     orderItem.setOrderId(orderInfo.getId());
                     orderItem.setPrice(sku.getPresentPrice());
@@ -246,6 +260,7 @@
                     orderItem.setCostPrice(sku.getCostPrice());
 
                     total = total.add(amount);
+                    totalScoreAmount = totalScoreAmount.add(scoreAmountMap.get(item.getSkuId()));
                     //规格的库存销量
                     Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
                     if(1 != skuResult){
@@ -266,6 +281,7 @@
 
         total = total.add(delivaryAmount);
         orderInfo.setAmount(total);
+        orderInfo.setScoreAmount(totalScoreAmount);
         orderInfo.setAddressId(address.getId());
         orderInfo.setName(address.getName());
         orderInfo.setPhone(address.getPhone());
@@ -281,6 +297,39 @@
         //过期时间修改成24小时
         agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(),  24 * 60 * 60 * 1000L);
         return orderInfo.getId();
+    }
+
+    private Map<Long, BigDecimal> getScoreAmountMap(List<AddOrderItemDto> items) {
+
+        Map<Long, BigDecimal> scoreAmountMap = new HashMap<>();
+        //全部skuIds
+        Set<Long> skuIds = items.stream().map(AddOrderItemDto::getSkuId).collect(Collectors.toSet());
+        LambdaQueryWrapper<MallGoodsSku> mallGoodsSkuLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        mallGoodsSkuLambdaQueryWrapper.in(MallGoodsSku::getId, skuIds);
+        List<MallGoodsSku> skusAll = mallGoodsSkuMapper.selectList(mallGoodsSkuLambdaQueryWrapper);
+        //全部goodsId
+        Set<Long> goodsIdsAll = skusAll.stream().map(MallGoodsSku::getGoodsId).collect(Collectors.toSet());
+        LambdaQueryWrapper<MallGoods> mallGoodsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        mallGoodsLambdaQueryWrapper.in(MallGoods::getId, goodsIdsAll);
+        List<MallGoods> goodsAll = mallGoodsMapper.selectList(mallGoodsLambdaQueryWrapper);
+        //stream流操作goodsAll,返回一个Hashmap<id,MallGoods>
+        Map<Long, MallGoods> goodsMap = goodsAll.stream().collect(Collectors.toMap(MallGoods::getId, mallGoods -> mallGoods));
+
+        for (AddOrderItemDto item : items) {
+            Long skuId = item.getSkuId();
+            MallGoodsSku sku = skusAll.stream().filter(s -> s.getId().equals(skuId)).findFirst().orElse(null);
+            if (ObjectUtil.isNotEmpty(sku)) {
+                Long goodsId = sku.getGoodsId();
+                MallGoods mallGoods = goodsMap.get(goodsId);
+                if (ObjectUtil.isNotEmpty(mallGoods)) {
+                    BigDecimal multi = mallGoods.getStaticProp().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN);
+                    //获取该商品该规格的积分
+                    BigDecimal scoreAmount = sku.getOriginalPrice().multiply(multi).setScale(0, RoundingMode.HALF_DOWN);
+                    scoreAmountMap.put(skuId, scoreAmount);
+                }
+            }
+        }
+        return scoreAmountMap;
     }
 
     /**
@@ -494,76 +543,109 @@
         if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
             throw new FebsException("订单状态不能支付");
         }
+        //先支付积分部分
+        if(orderInfo.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){
+            balanceScorePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
+            mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), ScoreFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue(), null, 2);
+        }
 
         String payResultStr = "";
         String wxResultStr = "";
-        switch (payOrderDto.getType()) {
-            case "1":
-                BrandWCPayRequestData brandWCPayRequestData = null;
-                try {
-                    brandWCPayRequestData = iXcxPayService.startPayment(orderInfo);
-                } catch (Exception e) {
-                    throw new FebsException("支付失败");
-                }
-                wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
-                payResultStr = brandWCPayRequestData.getPrepay_id();
-                orderInfo.setPayMethod("微信支付");
-                break;
-            case "2":
-                if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
-                    payResultStr = orderInfo.getPayOrderNo();
-                } else {
-                    payResultStr = payService.aliPay(orderInfo);
-                }
+        if(orderInfo.getAmount().compareTo(BigDecimal.ZERO) <= 0){
+            orderInfo.setPayOrderNo(orderInfo.getOrderNo());
+            orderInfo.setPayMethod("积分支付");
+            orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+            orderInfo.setPayTime(new Date());
+            orderInfo.setPayResult("1");
+            payResultStr = orderInfo.getOrderNo();
+        }else{
+            switch (payOrderDto.getType()) {
+                case "1":
+                    BrandWCPayRequestData brandWCPayRequestData = null;
+                    try {
+                        brandWCPayRequestData = iXcxPayService.startPayment(orderInfo);
+                    } catch (Exception e) {
+                        throw new FebsException("支付失败");
+                    }
+                    wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
+                    payResultStr = brandWCPayRequestData.getPrepay_id();
+                    orderInfo.setPayMethod("微信支付");
+                    break;
+                case "2":
+                    if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
+                        payResultStr = orderInfo.getPayOrderNo();
+                    } else {
+                        payResultStr = payService.aliPay(orderInfo);
+                    }
 
-                orderInfo.setPayOrderNo(payResultStr);
-                orderInfo.setPayMethod("支付宝支付");
-                agentProducer.sendOrderReturn(orderInfo.getId());
-                break;
-            case "3":
-                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
+                    orderInfo.setPayOrderNo(payResultStr);
+                    orderInfo.setPayMethod("支付宝支付");
+                    agentProducer.sendOrderReturn(orderInfo.getId());
+                    break;
+                case "3":
+                    payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
 
-                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
-                orderInfo.setPayMethod("余额支付");
-                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
-                orderInfo.setPayTime(new Date());
-                orderInfo.setPayResult("1");
-                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
+                    orderInfo.setPayOrderNo(orderInfo.getOrderNo());
+                    orderInfo.setPayMethod("余额支付");
+                    orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+                    orderInfo.setPayTime(new Date());
+                    orderInfo.setPayResult("1");
+                    orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
 
-                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
+                    mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
 
-                agentProducer.sendOrderCoupon(orderInfo.getId());
-                break;
-            case "4":
-                if (orderInfo.getOrderType() != 2) {
-                    throw new FebsException("非积分订单,无法使用积分支付");
-                }
-                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
+                    agentProducer.sendOrderCoupon(orderInfo.getId());
+                    break;
+                case "4":
+                    if (orderInfo.getOrderType() != 2) {
+                        throw new FebsException("非积分订单,无法使用积分支付");
+                    }
+                    payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
 
-                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
-                orderInfo.setPayMethod("积分支付");
-                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
-                orderInfo.setPayTime(new Date());
-                orderInfo.setPayResult("1");
+                    orderInfo.setPayOrderNo(orderInfo.getOrderNo());
+                    orderInfo.setPayMethod("积分支付");
+                    orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+                    orderInfo.setPayTime(new Date());
+                    orderInfo.setPayResult("1");
 
-                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), ScoreFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue(), null, 2);
-                break;
-            default:
+                    mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), ScoreFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue(), null, 2);
+                    break;
+                default:
 
+            }
         }
         //订单支付成功产生一个提货码
         String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId());
         orderInfo.setTakeCode(takeCode);
 
         this.baseMapper.updateById(orderInfo);
-
         Map<String, Object> map = new HashMap<>();
         map.put("orderInfo", payResultStr);
         map.put("orderNo", orderInfo.getOrderNo());
         map.put("orderId", orderInfo.getId());
         map.put("wxResultStr", wxResultStr);
-
         return map;
+    }
+
+    private String balanceScorePay(MallOrderInfo orderInfo, String tradePwd, String field) {
+        if (StrUtil.isBlank(tradePwd)) {
+            throw new FebsException("支付密码错误");
+        }
+
+        MallMember mallMember = memberMapper.selectById(orderInfo.getMemberId());
+        if (StrUtil.isBlank(mallMember.getTradePassword())) {
+            throw new FebsException("未设置支付密码");
+        }
+
+        if (!SecureUtil.md5(tradePwd).equals(mallMember.getTradePassword())) {
+            throw new FebsException("支付密码错误");
+        }
+
+        int reduce = memberWalletService.reduce(orderInfo.getScoreAmount(), mallMember.getId(), field);
+        if (reduce == 2) {
+            throw new FebsException("积分不足");
+        }
+        return orderInfo.getOrderNo();
     }
 
     private String balancePay(MallOrderInfo orderInfo, String tradePwd, String field) {
@@ -616,6 +698,7 @@
         if(CollUtil.isNotEmpty(items)){
             for(MallOrderItem mallOrderItem : items){
                 mallOrderItem.setItemAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getAmount());
+                mallOrderItem.setScoreAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getScoreAmount());
             }
         }
 
@@ -655,10 +738,6 @@
             throw new FebsException("该状态不能确认收货");
         }
 
-//        if (orderInfo.getDeliveryState() != OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()) {
-//            throw new FebsException("还未送至自提点");
-//        }
-
         List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(null, orderInfo.getId(), 3);
         if(CollUtil.isNotEmpty(mallRefundEntities)){
             throw new FebsException("请先处理退款商品");
@@ -669,34 +748,6 @@
         this.baseMapper.updateById(orderInfo);
 
         agentProducer.sendGetScoreMsg(orderInfo.getId());
-        //生成一条团长提成记录
-//        Long orderInfoId = orderInfo.getId();
-//        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfoId);
-//        if(CollUtil.isNotEmpty(mallOrderItemList)){
-//
-//            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode());
-//            Integer profitSwitch = mallTeamLeader.getProfitSwitch()==null?2:mallTeamLeader.getProfitSwitch();
-//            BigDecimal bonusPercent =new BigDecimal(mallTeamLeader.getBonusPercent()==null?"0":mallTeamLeader.getBonusPercent());
-//
-//            if(1 == profitSwitch){
-//                for(MallOrderItem mallOrderItem : mallOrderItemList){
-//                    Integer state = mallOrderItem.getState() == null ? 1 : mallOrderItem.getState();
-//                    if(1 == state){
-//                        MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve();
-//                        mallLeaderAchieve.setMemberId(orderInfo.getMemberId());
-//                        mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo());
-//                        mallLeaderAchieve.setOrderItemId(mallOrderItem.getId());
-//                        BigDecimal itemAmount = mallOrderItem.getAmount();
-//                        mallLeaderAchieve.setAmount(itemAmount);
-//                        BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN);
-//                        mallLeaderAchieve.setProfitAmount(bigDecimal);
-//                        mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode());
-//                        mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE);
-//                        mallLeaderAchieveMapper.insert(mallLeaderAchieve);
-//                    }
-//                }
-//            }
-//        }
     }
 
     @Override
@@ -1006,6 +1057,15 @@
         if(CollUtil.isEmpty(items)){
             return new FebsResponse().fail().message("请先挑选商品");
         }
+        /**
+         * 判断用户的积分是否足够
+         */
+        Map<Long, BigDecimal> scoreAmountMap = getScoreAmountMap(apiCreateOrderVerifyDto.getItems());
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+        //判断scoreAmountMap中的总积分数量是否大于用户的积分数量
+        if(scoreAmountMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(mallMemberWallet.getPrizeScore()) > 0){
+            throw new FebsException("您的积分不足");
+        }
         for (AddOrderItemDto item : apiCreateOrderVerifyDto.getItems()) {
             MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
             if (sku == null) {
@@ -1035,6 +1095,8 @@
             if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                 return new FebsResponse().fail().message(mallGoods.getGoodsName() + "已下架");
             }
+
+            //判断
         }
 
         return new FebsResponse().success();
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
index 378526e..deb8872 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
@@ -39,6 +39,9 @@
     @ApiModelProperty(value = "原价")
     private String originalPrice;
 
+    @ApiModelProperty(value = "积分价格")
+    private String staticPropPrice;
+
     @ApiModelProperty(value = "现价")
     private String presentPrice;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java
index 8166302..f319ed2 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java
@@ -32,6 +32,9 @@
     @ApiModelProperty(value = "原价")
     private String originalPrice;
 
+    @ApiModelProperty(value = "积分价格")
+    private String staticPropPrice;
+
     @ApiModelProperty(value = "现价")
     private String presentPrice;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java
index 538eb5d..035b007 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java
@@ -37,6 +37,9 @@
     @ApiModelProperty(value = "状态")
     private Integer status;
 
+    @ApiModelProperty(value = "订单积分")
+    private BigDecimal scoreAmount;
+
     @ApiModelProperty(value = "订单金额")
     private BigDecimal amount;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java
index d7a0c3d..63c5fd5 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java
@@ -54,6 +54,9 @@
     @ApiModelProperty(value = "1:正常 2:退款中3:已退")
     private Integer state;
 
+    @ApiModelProperty(value = "订单积分")
+    private BigDecimal itemScore;
+
     @ApiModelProperty(value = "支付金额")
     private BigDecimal itemAmount;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java
index a1a4923..9b09c26 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java
@@ -27,6 +27,9 @@
 
     @ApiModelProperty(value = "状态 1-待支付 2-待发货 3-待收货 4-已完成 5-退款中 6-退款处理完成 7-已取消")
     private Integer status;
+    //支付积分
+    @ApiModelProperty(value = "订单积分")
+    private BigDecimal scoreAmount;
 
     @ApiModelProperty(value = "订单金额")
     private BigDecimal amount;
diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
index 3c0f198..b0c04f2 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
@@ -16,4 +16,5 @@
 
     public static final String GET_SCORE_MSG = "queue_get_score_msg";
     public static final String VIP_LEVEL_UP = "queue_vip_level_up";
+    public static final String SALE_LEVEL_UP = "queue_sale_level_up";
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
index bd3f44a..e7b9d19 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -110,6 +110,16 @@
         }
     }
 
+    @RabbitListener(queues = QueueConstants.SALE_LEVEL_UP)
+    public void saleLevelUp(Long orderId) {
+        log.info("收到团长升级:{}", orderId);
+        try {
+            vipCommonService.saleLevelUp(orderId);
+        } catch (Exception e) {
+            log.error("团长升级消息异常", e);
+        }
+    }
+
     @RabbitListener(queues = QueueConstants.ACTIVITY_ORDER_ITEM_CHECK)
     public void checkActivityItem(Long orderId) {
         log.info("收到核销活动门票:{}", orderId);
diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
index a1f4eb5..f79e51c 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
@@ -22,6 +22,8 @@
 
     GET_SCORE_MSG("exchange_get_score_msg", "route_key_get_score_msg", QueueConstants.GET_SCORE_MSG),
 
+    SALE_LEVEL_UP("exchange_sale_level_up", "route_key_sale_level_up", QueueConstants.SALE_LEVEL_UP),
+
     VIP_LEVEL_UP("exchange_vip_level_up", "route_key_vip_level_up", QueueConstants.VIP_LEVEL_UP);
 
     private String exchange;
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
index 1efdee6..d40c39d 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
@@ -98,6 +98,13 @@
         rabbitTemplate.convertAndSend(RabbitQueueEnum.VIP_LEVEL_UP.getExchange(), RabbitQueueEnum.VIP_LEVEL_UP.getRoute(), orderId, correlationData);
     }
 
+    public void sendSaleLevelUp(Long orderId) {
+        log.info("发送团长升级:{}", orderId);
+
+        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+        rabbitTemplate.convertAndSend(RabbitQueueEnum.SALE_LEVEL_UP.getExchange(), RabbitQueueEnum.SALE_LEVEL_UP.getRoute(), orderId, correlationData);
+    }
+
     public void sendCheckActivityItem(Long orderId) {
         log.info("核销活动门票:{}", orderId);
 
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java b/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java
index e07a285..550c14d 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java
@@ -5,4 +5,7 @@
     void getScore(Long orderId);
 
     void levelUp(Long orderId);
+
+    void saleLevelUp(Long orderId);
+
 }
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 d514a17..f6c696c 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
@@ -2,13 +2,11 @@
 
 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.enumerates.ScoreFlowTypeEnum;
-import cc.mrbird.febs.mall.entity.MallGoods;
-import cc.mrbird.febs.mall.entity.MallMember;
-import cc.mrbird.febs.mall.entity.MallOrderInfo;
-import cc.mrbird.febs.mall.entity.MallOrderItem;
-import cc.mrbird.febs.mall.mapper.MallMemberMapper;
-import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IApiMallGoodsService;
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
@@ -21,6 +19,7 @@
 import cc.mrbird.febs.vip.service.IVipCommonService;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
@@ -46,164 +45,369 @@
     private final IMallVipConfigService mallVipConfigService;
     private final IMallMoneyFlowService mallMoneyFlowService;
     private final IApiMallMemberWalletService mallMemberWalletService;
+    private final MallMemberWalletMapper mallMemberWalletMapper;
     private final MallMemberMapper mallMemberMapper;
     private final MallVipConfigMapper mallVipConfigMapper;
     private final AgentProducer agentProducer;
     private final IApiMallGoodsService mallGoodsService;
-
+    private final HappyMemberLevelMapper happyMemberLevelMapper;
+    private final HappySaleLevelMapper happySaleLevelMapper;
+    private final MallAchieveRecordMapper mallAchieveRecordMapper;
+    /**
+     * 根据订单ID获取分数
+     * 此方法处理订单得分逻辑,包括直接购买得分、会员等级得分和推荐人得分
+     *
+     * @param orderId 订单ID,用于查询订单详细信息
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void getScore(Long orderId) {
+        // 根据订单ID查询订单详细信息
         MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderDetailsById(orderId);
         if (mallOrderInfo == null) {
+            // 如果订单信息为空,则直接返回
             return;
         }
 
-        Long memberId = mallOrderInfo.getMemberId();
-        MallVipBenefits mallVipBenefits = mallVipConfigService.hasVipBenefits(memberId);
-
-        MallMember member = mallMemberMapper.selectById(memberId);
-        BigDecimal multiple = BigDecimal.ONE;
-        String name = "";
-        if (mallVipBenefits != null) {
-            multiple = mallVipBenefits.getScoreMultiple();
-            name = mallVipBenefits.getName();
+        if (mallOrderInfo.getStatus() != OrderStatusEnum.FINISH.getValue()) {
+            // 订单不是完成状态
+            return;
         }
 
-        List<String> skuNames = mallOrderInfo.getItems().stream().map(MallOrderItem::getSkuName).collect(Collectors.toList());
-        double sum = mallOrderInfo.getItems().stream().map(MallOrderItem::getAmount).mapToDouble(BigDecimal::doubleValue).sum();
+        // 获取订单金额
+        BigDecimal amount = mallOrderInfo.getAmount();
+        if(BigDecimal.ZERO.compareTo(amount) >= 0){
+            // 如果订单金额小于等于0,则直接返回
+            return;
+        }
 
-        int score = multiple.multiply(BigDecimal.valueOf(sum)).intValue();
+        // 获取会员ID
+        Long memberId = mallOrderInfo.getMemberId();
+        // 根据会员ID查询会员信息
+        MallMember member = mallMemberMapper.selectById(memberId);
 
-        mallMoneyFlowService.addMoneyFlow(memberId, new BigDecimal(score), ScoreFlowTypeEnum.BUY.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), CollUtil.join(skuNames, ","), 2);
-        mallMemberWalletService.add(new BigDecimal(score), memberId, "prizeScore");
+        // 记录会员购买获得的经验
+        mallMoneyFlowService.addMoneyFlow(
+                memberId,
+                amount,
+                ScoreFlowTypeEnum.BUY.getValue(),
+                mallOrderInfo.getOrderNo(),
+                FlowTypeEnum.SCORE.getValue(),
+                ScoreFlowTypeEnum.BUY.getDesc(),
+                2
+        );
+        // 更新会员钱包中的分数
+        mallMemberWalletService.add(amount, memberId, "score");
 
-        List<Long> itemGoodsIds = mallOrderInfo.getItems().stream().map(MallOrderItem::getGoodsId).distinct().collect(Collectors.toList());
-        List<MallGoods> goodsList = mallGoodsService.listByIds(itemGoodsIds);
-        Map<Long, MallGoods> goodsMap = goodsList.stream().collect(Collectors.toMap(MallGoods::getId, MallGoods -> MallGoods));
-
+        // 下单自己获得积分,推荐人获得积分
+        //<memberId,积分数量>的map
         Map<Long, BigDecimal> recommendScoreMap = new HashMap<>();
-        mallOrderInfo.getItems().forEach(item -> {
-            if (StrUtil.isNotBlank(item.getMemberInviteId()) && !member.getInviteId().equals(item.getMemberInviteId())) {
-                MallGoods mallGoods = goodsMap.get(item.getGoodsId());
-                if (mallGoods.getStaticMulti() == null) {
-                    return;
-                }
-
-                BigDecimal multi = mallGoods.getStaticMulti().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
-                MallMember mallMember = mallMemberMapper.selectInfoByInviteId(item.getMemberInviteId());
-                if (mallMember == null) {
-                    return;
-                }
-
-                BigDecimal recommendScore = recommendScoreMap.get(mallMember.getId());
-                recommendScore = recommendScore == null ? BigDecimal.ZERO : recommendScore;
-                recommendScore = recommendScore.add(item.getAmount().multiply(multi));
-
-                recommendScoreMap.put(mallMember.getId(), recommendScore);
+        Map<Long, Integer> recommendTypeScoreMap = new HashMap<>();
+        // 获取会员的董事等级代码
+        Integer director = member.getDirector();
+        // 查询与董事等级代码匹配的会员等级信息
+        LambdaQueryWrapper<HappyMemberLevel> happyMemberLevelLambdaQueryWrapper = new LambdaQueryWrapper<HappyMemberLevel>();
+        happyMemberLevelLambdaQueryWrapper.eq(HappyMemberLevel::getCode, director);
+        happyMemberLevelLambdaQueryWrapper.last("limit 1");
+        HappyMemberLevel happyMemberLevel = happyMemberLevelMapper.selectOne(happyMemberLevelLambdaQueryWrapper);
+        if(ObjectUtil.isNotEmpty(happyMemberLevel)){
+            // 计算自己获得的积分
+            BigDecimal minePercent = happyMemberLevel.getMinePercent();
+            BigDecimal mineScore = amount.multiply(minePercent.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN)).setScale(0, RoundingMode.HALF_DOWN);
+            if(BigDecimal.ZERO.compareTo(mineScore) < 0){
+                recommendScoreMap.put(memberId, mineScore);
+                recommendTypeScoreMap.put(memberId, ScoreFlowTypeEnum.MINE_RECOMMEND.getValue());
             }
-        });
+            // 计算推荐人获得的积分
+            if(StrUtil.isNotEmpty(member.getReferrerId())){
+                MallMember refMember = mallMemberMapper.selectInfoByInviteId(member.getReferrerId());
+                BigDecimal otherPercent = happyMemberLevel.getOtherPercent();
+                BigDecimal otherScore = amount.multiply(otherPercent.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN)).setScale(0, RoundingMode.HALF_DOWN);
+                if(BigDecimal.ZERO.compareTo(otherScore) < 0){
+                    recommendScoreMap.put(refMember.getId(), otherScore);
+                    recommendTypeScoreMap.put(memberId, ScoreFlowTypeEnum.OTHER_RECOMMEND.getValue());
+                }
+            }
+        }
 
+        // 为推荐人和自己添加积分流动记录和更新钱包
         recommendScoreMap.forEach((key, value) -> {
             if (value != null) {
-                mallMoneyFlowService.addMoneyFlow(key, value, ScoreFlowTypeEnum.RECOMMEND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), CollUtil.join(skuNames, ","), 2);
+                mallMoneyFlowService.addMoneyFlow(
+                        key,
+                        value,
+                        recommendTypeScoreMap.get(key),
+                        mallOrderInfo.getOrderNo(),
+                        FlowTypeEnum.PRIZE_SCORE.getValue(),
+                        ScoreFlowTypeEnum.getDescByValue(recommendTypeScoreMap.get(key)),
+                        2);
                 mallMemberWalletService.add(value, key, "prizeScore");
             }
         });
 
+        // 发送会员等级升级消息
         agentProducer.sendVipLevelUp(orderId);
     }
 
+
+    /**
+     * 根据订单ID升级会员等级
+     * 当订单完成时,根据会员当前的经验值升级会员等级
+     *
+     * @param orderId 订单ID
+     */
     @Override
     public void levelUp(Long orderId) {
+        // 根据订单ID获取订单详细信息
         MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderDetailsById(orderId);
+        // 如果订单信息为空,则直接返回
         if (mallOrderInfo == null) {
             return;
         }
+        // 如果订单状态不是完成状态,则直接返回
+        if (mallOrderInfo.getStatus() != OrderStatusEnum.FINISH.getValue()) {
+            // 订单不是完成状态
+            return;
+        }
 
+        // 根据订单中的会员ID获取会员信息
         MallMember member = mallMemberMapper.selectById(mallOrderInfo.getMemberId());
+        // 如果会员信息为空,则记录日志并返回
         if (member == null) {
             log.info("会员不存在");
             return;
         }
 
-        MallVipConfig config = mallVipConfigMapper.selectVipConfigByCode(member.getLevel());
-        if (config == null) {
-            log.info("会员等级配置不存在");
+        // 根据会员ID获取会员钱包信息
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
+        // 如果会员钱包信息为空,则记录日志并返回
+        if (mallMemberWallet == null) {
+            log.info("会员钱包不存在");
+            return;
+        }
+        //当前经验值
+        int score = mallMemberWallet.getScore().intValue();
+
+        // 查询当前经验值对应的会员等级
+        HappyMemberLevel happyMemberLevel = happyMemberLevelMapper.selectOne(
+                new LambdaQueryWrapper<HappyMemberLevel>()
+                        .ge(HappyMemberLevel::getUpgradeScore, score)
+                        .orderByAsc(HappyMemberLevel::getCode)
+                        .last("limit 1")
+        );
+        // 如果查询不到对应的会员等级,则记录日志并返回
+        if (happyMemberLevel == null) {
+            log.info("会员等级不存在");
+            return;
+        }
+        // 获取当前会员等级代码
+        Integer code = happyMemberLevel.getCode();
+        // 如果当前会员等级与会员的导演等级相同,则直接返回
+        if(member.getDirector() == code){
             return;
         }
 
-//        LambdaQueryWrapper<MallVipConfig> configQuery = new LambdaQueryWrapper<>();
-//        configQuery.gt(MallVipConfig::getLevel, config.getLevel())
-//                .orderByAsc(MallVipConfig::getLevel)
-//                .last("limit 1");
-//        MallVipConfig nextLevel = mallVipConfigMapper.selectOne(configQuery);
+        // 更新会员的导演等级为当前会员等级代码
+        member.setDirector(code);
+        // 更新会员信息
+        mallMemberMapper.updateById(member);
 
-        List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList();
-
-        String nextLevelCode = "";
-        for (MallVipConfig nextLevel : configs) {
-            if (config.getLevel() >= nextLevel.getLevel()) {
-                continue;
-            }
-
-            // 指定商品
-            if (nextLevel.getType() == 1) {
-                boolean hasMatch = mallOrderInfo.getItems().stream().anyMatch(item -> {
-                    return item.getGoodsId().equals(nextLevel.getTargetId());
-                });
-
-                if (hasMatch) {
-                    nextLevelCode = nextLevel.getCode();
-                    continue;
-                }
-            }
-
-            // 时间区间内金额
-            if (nextLevel.getType() == 2) {
-                Date endTime = DateUtil.endOfDay(new Date());
-                Date startTime = getStartTime(nextLevel.getValidType());
-
-                LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
-                query.ge(MallOrderInfo::getReceivingTime, startTime)
-                        .le(MallOrderInfo::getReceivingTime, endTime)
-                        .eq(MallOrderInfo::getStatus, 4)
-                        .eq(MallOrderInfo::getMemberId, member.getId());
-                List<MallOrderInfo> orderList = mallOrderInfoMapper.selectList(query);
-                if (CollUtil.isEmpty(orderList)) {
-                    continue;
-                }
-
-                double totalAmount = orderList.stream().mapToDouble(item -> {
-                    return item.getAmount().doubleValue();
-                }).sum();
-
-                if (nextLevel.getAmount().compareTo(BigDecimal.valueOf(totalAmount)) <= 0) {
-                    nextLevelCode = nextLevel.getCode();
-                }
-            }
-        }
-
-        if (StrUtil.isNotBlank(nextLevelCode)) {
-            MallMember update = new MallMember();
-            update.setId(member.getId());
-            update.setLevel(nextLevelCode);
-            update.setVipLevelTime(new Date());
-            mallMemberMapper.updateById(update);
-        }
+        // 发送分销等级升级消息
+        agentProducer.sendSaleLevelUp(orderId);
     }
 
-    private Date getStartTime(String type) {
-        Date date = new Date();
-        switch (type) {
-            case "day" :
-                return DateUtil.beginOfDay(date);
-            case "month":
-                return DateUtil.beginOfMonth(date);
-            case "year":
-                return DateUtil.beginOfYear(date);
-            default:
-                return date;
+    /**
+     * 升级销售级别时处理订单相关的逻辑
+     *
+     * @param orderId 订单ID,用于识别和处理特定的订单
+     */
+    @Override
+    public void saleLevelUp(Long orderId) {
+        // 根据订单ID获取订单详细信息
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderDetailsById(orderId);
+        // 如果订单信息为空,则直接返回
+        if (mallOrderInfo == null) {
+            return;
         }
+        // 如果订单状态不是完成状态,则直接返回
+        if (mallOrderInfo.getStatus() != OrderStatusEnum.FINISH.getValue()) {
+            // 订单不是完成状态
+            return;
+        }
+
+        // 根据订单中的会员ID获取会员信息
+        MallMember member = mallMemberMapper.selectById(mallOrderInfo.getMemberId());
+        // 如果会员信息为空,则记录日志并返回
+        if (member == null) {
+            log.info("会员不存在");
+            return;
+        }
+
+        // 如果会员的推荐人ID为空,则直接返回
+        if(StrUtil.isEmpty(member.getReferrerIds())){
+            return;
+        }
+        // 分割会员的推荐人ID
+        String[] referrerIds = member.getReferrerIds().split(",");
+        // 查询符合条件的团长会员
+        MallMember storeMasterMember = mallMemberMapper.selectOne(
+                new LambdaQueryWrapper<MallMember>()
+                        .in(MallMember::getInviteId, referrerIds)
+                        .eq(MallMember::getAccountStatus, MallMember.ACCOUNT_STATUS_ENABLE)
+                        .eq(MallMember::getAccountType, MallMember.ACCOUNT_TYPE_NORMAL)
+                        .ne(MallMember::getStoreMaster, 0)
+                .orderByAsc(MallMember::getStoreMaster)
+                .last("limit 1")
+        );
+        // 如果没有找到符合条件的团长,则记录日志并返回
+        if (storeMasterMember == null) {
+            log.info("团长不存在");
+            return;
+        }
+        // 根据团长的等级代码查询团长等级信息
+        HappySaleLevel happySaleLevel = happySaleLevelMapper.selectOne(
+                new LambdaQueryWrapper<HappySaleLevel>()
+                        .eq(HappySaleLevel::getCode, storeMasterMember.getStoreMaster())
+        );
+        // 如果团长等级信息不存在,则记录日志并返回
+        if (happySaleLevel == null) {
+            log.info("团长等级不存在");
+            return;
+        }
+        // 计算返佣金额
+        BigDecimal divide = happySaleLevel.getReturnPercent().divide(new BigDecimal(100));
+        BigDecimal multiply = mallOrderInfo.getAmount().multiply(divide).setScale(2, RoundingMode.HALF_DOWN);
+        // 如果返佣金额小于等于0,则直接返回
+        if(BigDecimal.ZERO.compareTo(multiply) >=0){
+            return;
+        }
+        // 如果返佣金额大于等于订单金额,则直接返回
+        if(multiply.compareTo(mallOrderInfo.getAmount()) >= 0){
+            return;
+        }
+        // 记录团长获得返佣
+        mallMoneyFlowService.addMoneyFlow(
+                storeMasterMember.getId(),
+                multiply,
+                ScoreFlowTypeEnum.SALE_RECOMMEND.getValue(),
+                mallOrderInfo.getOrderNo(),
+                FlowTypeEnum.BALANCE.getValue(),
+                ScoreFlowTypeEnum.SALE_RECOMMEND.getDesc(),
+                2
+        );
+        // 更新会员钱包中的余额
+        mallMemberWalletService.add(multiply, storeMasterMember.getId(), "balance");
+
+        MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
+        mallAchieveRecord.setMemberId(mallOrderInfo.getMemberId());
+        mallAchieveRecord.setAchieveTime(new Date());
+        mallAchieveRecord.setAmount(mallOrderInfo.getAmount());
+        mallAchieveRecord.setCostAmount(multiply);
+        mallAchieveRecord.setOrderId(mallOrderInfo.getId());
+        mallAchieveRecord.setIsNormal(1);
+        mallAchieveRecord.setPayTime(mallOrderInfo.getPayTime());
+        mallAchieveRecordMapper.insert(mallAchieveRecord);
+
+        this.autoUpAgentLevel(storeMasterMember.getId());
     }
+
+
+    /**
+     * 自动升级代理等级
+     * 根据会员的当前状态和业绩,自动为其升级到下一个代理等级
+     * @param memberId 会员ID,用于识别需要升级的会员
+     */
+    private void autoUpAgentLevel(Long memberId) {
+        // 根据会员ID查询会员信息
+        MallMember member = mallMemberMapper.selectById(memberId);
+
+        // 检查会员账户状态和类型,只有在启用状态和普通类型时才进行升级操作
+        if(MallMember.ACCOUNT_STATUS_ENABLE != member.getAccountStatus()
+                || MallMember.ACCOUNT_TYPE_NORMAL != member.getAccountType() ){
+            return;
+        }
+        // 获取会员当前的店铺主人等级
+        Integer storeMaster = member.getStoreMaster();
+        // 下一个分销等级
+        storeMaster =storeMaster +1;
+        // 根据新的店铺主人等级查询对应的快乐销售等级信息
+        HappySaleLevel happySaleLevel = happySaleLevelMapper.selectOne(
+                new LambdaQueryWrapper<HappySaleLevel>()
+                        .eq(HappySaleLevel::getCode, storeMaster)
+        );
+        // 如果没有找到对应的快乐销售等级信息,则记录日志并返回
+        if (happySaleLevel == null) {
+            log.info("当前等级无下级");
+            return;
+        }
+        // 检查直推会员数量是否达到要求
+        if (!directMemberCnt(member, happySaleLevel.getDirectCnt())) {
+            return;
+        }
+
+        // 检查团队人数是否达到要求
+        if (!teamCntFinish(member, happySaleLevel.getTeamCnt())) {
+            return;
+        }
+
+        // 检查团队业绩是否达到要求
+        if (!teamIncome(member, happySaleLevel.getTeamAmount())) {
+            return;
+        }
+
+        // 更新会员的店铺主人等级
+        member.setStoreMaster(storeMaster);
+        // 更新会员信息
+        mallMemberMapper.updateById(member);
+    }
+
+
+    /**
+     * 判断直推人数是否达标
+     */
+    private boolean directMemberCnt(MallMember member, Integer directCnt) {
+        List<MallMember> childList = mallMemberMapper.selectByRefererId(member.getInviteId());
+        if (CollUtil.isEmpty(childList)) {
+            return false;
+        }
+
+        if (childList.size() >= directCnt) {
+            return true;
+        }
+
+        log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getStoreMaster(), childList.size(), directCnt);
+        return false;
+    }
+
+    /**
+     * 判断团队数量是否达标
+     */
+    private boolean teamCntFinish(MallMember member, Integer teamCnt) {
+        // 直推用户
+        List<MallMember> teamMember = mallMemberMapper.selectAllChildAgentListByInviteId(member.getInviteId());
+        if (CollUtil.isEmpty(teamMember)) {
+            return false;
+        }
+
+        if (teamMember.size() >= teamCnt) {
+            return true;
+        }
+
+        log.info("用户:{}团队数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getStoreMaster(), teamMember.size(), teamCnt);
+        return false;
+    }
+
+    /**
+     * 团队业绩是否达标
+     */
+    private boolean teamIncome(MallMember member, BigDecimal teamAmount) {
+        BigDecimal totalIncome = mallMemberMapper.selectAchieveByMemberId(member.getInviteId(), 2);
+
+        if(totalIncome.compareTo(teamAmount) >= 0){
+            return true;
+        }
+        log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getPhone(), member.getStoreMaster(), totalIncome, teamAmount);
+        return false;
+    }
+
 }
diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml
index 3162fc5..6bc8228 100644
--- a/src/main/resources/mapper/modules/MallGoodsMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -13,6 +13,7 @@
         <result property="goodsDetails" column="goods_details" />
         <result property="isSale" column="is_sale" />
         <result property="originalPrice" column="original_price" />
+        <result property="staticPropPrice" column="staticPropPrice" />
         <result property="presentPrice" column="present_price" />
         <result property="categoryId" column="category_id" />
         <result property="volume" column="volume" />
@@ -66,6 +67,7 @@
             c.stock sku_stock,
             c.sku_volume,
             c.original_price sku_original_price,
+            a.original_price*a.static_prop staticPropPrice,
             c.present_price sku_present_price,
             c.style_id sku_style_id,
             c.goods_weight sku_goods_weight,
@@ -90,6 +92,7 @@
                 a.thumb,
                 a.unit,
                 a.original_price,
+                a.original_price*a.static_prop staticPropPrice,
                 a.present_price,
                 a.level_one_price,
                 a.level_two_price,
@@ -340,6 +343,7 @@
         a.thumb,
         a.unit,
         a.original_price,
+        a.original_price*a.static_prop staticPropPrice,
         a.present_price,
         a.score,
         a.is_hot,
diff --git a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
index 9e7f9e6..ae7ff75 100644
--- a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
+++ b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -108,6 +108,7 @@
         <result column="member_id" property="memberId" />
         <result column="order_time" property="orderTime" />
         <result column="pay_time" property="payTime" />
+        <result column="score_amount" property="scoreAmount" />
         <result column="amount" property="amount" />
         <result column="pay_method" property="payMethod" />
         <result column="pay_order_no" property="payOrderNo" />
@@ -356,6 +357,7 @@
         <result column="member_id" property="memberId" />
         <result column="order_time" property="orderTime" />
         <result column="pay_time" property="payTime" />
+        <result column="score_amount" property="scoreAmount" />
         <result column="amount" property="amount" />
         <result column="pay_method" property="payMethod" />
         <result column="pay_order_no" property="payOrderNo" />
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 55605b8..36a817c 100644
--- a/src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
+++ b/src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
@@ -103,20 +103,22 @@
                                             </div>
                                         </div>
 
-                                        <div class="layui-form-item">
-                                            <label class="layui-form-label">推销员返积分比例(%)</label>
-                                            <div class="layui-input-block">
-                                                <input type="text" name="staticMulti" placeholder="请输入推销员返积分比例" autocomplete="off" class="layui-input">
-                                            </div>
-                                        </div>
+<!--                                        <div class="layui-form-item">-->
+<!--                                            <label class="layui-form-label">推销员返积分比例(%)</label>-->
+<!--                                            <div class="layui-input-block">-->
+<!--                                                <input type="text" name="staticMulti" placeholder="请输入推销员返积分比例" autocomplete="off" class="layui-input">-->
+<!--                                            </div>-->
+<!--                                        </div>-->
 
-                                        <div class="layui-form-item febs-hide tc-set">
-                                            <label class="layui-form-label">静态占比(%)</label>
-                                            <div class="layui-input-block">
-                                                <input type="text" name="staticProp" placeholder="请输入静态占比" autocomplete="off" class="layui-input">
-                                                <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>
-                                            </div>
-                                        </div>
+<!--                                        <div class="layui-form-item febs-hide tc-set">-->
+<!--                                            <label class="layui-form-label">积分折扣(%)</label>-->
+<!--                                            <div class="layui-input-block">-->
+<!--                                                <input type="text" name="staticProp" 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 class="layui-form-mid layui-word-aux">全部使用积分设置成:大于等于100%</div>-->
+<!--                                            </div>-->
+<!--                                        </div>-->
                                     </div>
 
                                     <div class="layui-tab-item">
@@ -238,6 +240,16 @@
                                                     <input type="text" name="costPrice" 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="staticProp" lay-verify="required" placeholder="请输入积分折扣" lay-reqText="请输入积分折扣" 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 class="layui-form-mid layui-word-aux">全部使用积分设置成:大于等于100%</div>
+                                                </div>
+                                            </div>
+
                                         </div>
                                         <blockquote class="layui-elem-quote blue-border">运费设置</blockquote>
                                         <div class="layui-form-item">
@@ -374,7 +386,7 @@
             upload = layui.upload,
             validate = layui.validate,
             element = layui.element;
-
+        // form.verify(validate);
         form.render();
         const E = window.wangEditor;
         const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素
@@ -826,14 +838,14 @@
             return false;
         });
 
-        form.on('select(goods-type-select)', function(data){
-            $('.tc-set').each(function() {
-                if (data.value == 2) {
-                    $(this).show();
-                } else {
-                    $(this).hide();
-                }
-            })
-        });
+        // form.on('select(goods-type-select)', function(data){
+        //     $('.tc-set').each(function() {
+        //         if (data.value == 2) {
+        //             $(this).show();
+        //         } else {
+        //             $(this).hide();
+        //         }
+        //     })
+        // });
     });
 </script>
\ No newline at end of file
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 a21f756..073af2a 100644
--- a/src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
+++ b/src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
@@ -112,21 +112,21 @@
                                             </div>
                                         </div>
 
-                                        <div class="layui-form-item">
-                                            <label class="layui-form-label">推销员返积分比例(%)</label>
-                                            <div class="layui-input-block">
-                                                <input type="text" name="staticMulti" placeholder="请输入推销员返积分比例" autocomplete="off" class="layui-input">
-                                            </div>
-                                        </div>
+<!--                                        <div class="layui-form-item">-->
+<!--                                            <label class="layui-form-label">推销员返积分比例(%)</label>-->
+<!--                                            <div class="layui-input-block">-->
+<!--                                                <input type="text" name="staticMulti" placeholder="请输入推销员返积分比例" autocomplete="off" class="layui-input">-->
+<!--                                            </div>-->
+<!--                                        </div>-->
 
-                                        <div class="layui-form-item febs-hide tc-set">
-                                            <label class="layui-form-label">静态占比(%)</label>
-                                            <div class="layui-input-block">
-                                                <input type="text" name="staticProp" placeholder="请输入静态占比"
-                                                       autoComplete="off" class="layui-input">
-                                                <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>
-                                            </div>
-                                        </div>
+<!--                                        <div class="layui-form-item febs-hide tc-set">-->
+<!--                                            <label class="layui-form-label">静态占比(%)</label>-->
+<!--                                            <div class="layui-input-block">-->
+<!--                                                <input type="text" name="staticProp" placeholder="请输入静态占比"-->
+<!--                                                       autoComplete="off" class="layui-input">-->
+<!--                                                <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>-->
+<!--                                            </div>-->
+<!--                                        </div>-->
                                     </div>
 
                                     <div class="layui-tab-item">
@@ -238,6 +238,16 @@
                                                     <input type="text" name="costPrice" 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="staticProp" lay-verify="required" placeholder="请输入积分折扣" lay-reqText="请输入积分折扣" 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 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">-->

--
Gitblit v1.9.1