From 7e3811d8546c9b4107f88325bdfd1b8c81284e6c Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 06 十二月 2024 11:31:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java           |   50 +++++++++++++++++-------
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/OrderGood.java                              |    6 ++
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java |    6 +++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java          |   15 +++++++
 ruoyi-modules/ruoyi-job/pom.xml                                                                           |    6 +++
 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java                              |    4 ++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java             |   11 +++++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java                   |    5 ++
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java            |    3 +
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java                          |    4 ++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/CommissionService.java                    |    3 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java                |    2 +
 12 files changed, 98 insertions(+), 17 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
index eaae6be..67de05c 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
@@ -52,6 +52,12 @@
 				log.error("获取用户祖籍列表失败:{}", cause.getMessage());
 				throw new RuntimeException("获取用户祖籍列表失败");
 			}
+
+			@Override
+			public R<AppUser> getSuperiorLeader(Long id) {
+				return R.fail("获取直帮上级用户失败");
+			}
+
 			@Override
 			public R<Long> getVipCount(Long userId, Integer vipId) {
 				log.error("获取直推会员数失败:{}", cause.getMessage());
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index 772f740..dea7127 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -46,6 +46,9 @@
 	@GetMapping("/appletLogin/getUserAncestorList")
 	R<List<AppUser>> getUserAncestorList(@RequestParam("id") Long id);
 
+	@GetMapping("/appletLogin/getSuperiorLeader")
+	R<AppUser> getSuperiorLeader(@RequestParam("id") Long id);
+
 
 
 	@PostMapping("/app-user/getVipCount")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/OrderGood.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/OrderGood.java
index 6379aa0..fff54b2 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/OrderGood.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/OrderGood.java
@@ -77,7 +77,11 @@
     @ApiModelProperty(value = "获取返佣积分上级类型(1=直推上级,2=直帮上级)")
     @TableField("superior_type")
     private Integer superiorType;
-    
+
+    @ApiModelProperty(value = "获取分佣金额上级类型(1=直推上级,2=直帮上级)")
+    @TableField("superior_price_type")
+    private Integer superiorPriceType;
+
     @ApiModelProperty(value = "核销门店可获得服务费")
     @TableField("servuce_shop_charges")
     private BigDecimal servuceShopCharges;
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java
index 99e44cb..d6b5789 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsVip.java
@@ -72,6 +72,10 @@
     @TableField("superior_type")
     private Integer superiorType;
 
+    @ApiModelProperty(value = "获取分佣金额上级类型(1=直推上级,2=直帮上级)")
+    @TableField("superior_price_type")
+    private Integer superiorPriceType;
+
     @ApiModelProperty(value = "核销门店可获得服务费")
     @TableField("servuce_shop_charges")
     private BigDecimal servuceShopCharges;
diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml
index 14334bf..107092d 100644
--- a/ruoyi-modules/ruoyi-job/pom.xml
+++ b/ruoyi-modules/ruoyi-job/pom.xml
@@ -16,6 +16,12 @@
     </description>
 
     <dependencies>
+
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-modules-order</artifactId>
+            <version>3.6.2</version>
+        </dependency>
     	
     	<!-- SpringCloud Alibaba Nacos -->
         <dependency>
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java
index f6915f7..87ee464 100644
--- a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java
+++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java
@@ -1,5 +1,6 @@
 package com.ruoyi.job.task;
 
+import com.ruoyi.order.service.CommissionService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
@@ -12,6 +13,8 @@
 public class AfterSalesTask {
     @Resource
     private RedisTemplate<String, String> redisTemplate;
+    @Resource
+    private CommissionService commissionService;
 
     /**
      * 计算佣金(设置每分钟执行一次)
@@ -22,6 +25,7 @@
         // 从延迟队列中获取需要处理的订单
         Set<String> orderIds = redisTemplate.opsForZSet().rangeByScore("delay_queue:commission", 0, now);
         if (orderIds != null && !orderIds.isEmpty()) {
+            commissionService.calculationCommission(orderIds);
             // 处理完后移除已处理的订单
             redisTemplate.opsForZSet().removeRangeByScore("delay_queue:commission", 0, now);
         }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
index 5a7f985..df6bffd 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -294,6 +294,17 @@
 		return R.ok(list);
 	}
 
+	/**
+	 * 获取用户的直帮上级用户
+	 */
+	@ResponseBody
+	@PostMapping("/getSuperiorLeader")
+	@ApiOperation(value = "获取用户的直帮上级用户")
+	public R<AppUser> getSuperiorLeader(@RequestParam("id") Long id) {
+		AppUser superiorLeader = appUserService.getSuperiorLeader(id);
+		return R.ok(superiorLeader);
+	}
+
 
 
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
index a313542..a51d268 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -62,4 +62,9 @@
 	 * 获取用户的祖籍列表
 	 */
 	List<AppUser> getUserAncestorList(Long id,List<AppUser> list);
+
+	/**
+	 * 获取指定用户的直帮上级用户(消费用户绑定的上级,最近一个用户会员类型为【创业者】的用户)
+	 */
+	AppUser getSuperiorLeader(Long id);
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
index 89f8b03..28554a7 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -380,4 +380,19 @@
 		return list;
 	}
 
+	@Override
+	public AppUser getSuperiorLeader(Long id) {
+		AppUser appUser = getById(id);
+		Long inviteUserId = appUser.getInviteUserId();
+		AppUser inviteUser = getById(inviteUserId);
+		if (inviteUser == null){
+			return null;
+		}
+        if (inviteUser.getVipId() > 3) {
+            return inviteUser;
+        }else {
+			getSuperiorLeader(inviteUserId);
+		}
+		return null;
+	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/CommissionService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/CommissionService.java
index da99507..07a13a0 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/CommissionService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/CommissionService.java
@@ -2,11 +2,12 @@
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Set;
 
 public interface CommissionService {
 
     // 计算佣金
-    void calculationCommission(List<Long> orderIds);
+    void calculationCommission(Set<String> orderIds);
 
     void addToCommissionDelayQueue(Long orderId, LocalDateTime afterSalesDeadline);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
index 2efa1cb..a2d00ce 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -20,6 +20,7 @@
 import java.time.ZoneId;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Service
@@ -49,7 +50,7 @@
     }
 
     @Override
-    public void calculationCommission(List<Long> orderIds) {
+    public void calculationCommission(Set<String> orderIds) {
         List<OrderGood> orderGoods = orderGoodService.list(new LambdaQueryWrapper<OrderGood>()
                 .in(OrderGood::getOrderId, orderIds));
 
@@ -77,32 +78,51 @@
                 throw new RuntimeException("获取用户信息失败");
             }
             Long inviteUserId = appUser.getInviteUserId();
+            // 直推上级用户
             AppUser inviteUser = appUserClient.getAppUserById(inviteUserId);
+
+            // 获取直帮上级用户
+            R<AppUser> superiorLeaderR = appUserClient.getSuperiorLeader(appUserId);
+            if (!R.isSuccess(superiorLeaderR)) {
+                throw new RuntimeException("获取直帮上级信息失败");
+            }
+            AppUser superiorLeader = superiorLeaderR.getData();
 
             for (OrderGood og : v) {// 累计分销金额
 
-                // 上级分销金额
-                if (inviteUser != null){
+                // 直推上级分佣金额
+                Integer superiorType = og.getSuperiorType();
+                if (superiorType == 1 && inviteUser != null){
+                    // 分佣金额
                     BigDecimal superiorSubcommission = og.getSuperiorSubcommission();
                     BigDecimal totalDistributionAmount = inviteUser.getTotalDistributionAmount();
                     totalDistributionAmount = totalDistributionAmount.add(superiorSubcommission);
-                    //
-                    Integer superiorType = og.getSuperiorType();
+                    inviteUser.setTotalDistributionAmount(totalDistributionAmount);
+
+                    // 分佣积分
                     Integer sharePoint = inviteUser.getSharePoint();
-                    if (superiorType == 1) {
+                    Integer superiorRebatePoints = og.getSuperiorRebatePoints();
+                    sharePoint = sharePoint + superiorRebatePoints;
+                    inviteUser.setSharePoint(sharePoint);
+
+                    appUserClient.editAppUserById(inviteUser);
+                }else
+                    // 直帮上级分佣金额
+                    if (superiorType == 2 && superiorLeader != null){
+                        // 分佣金额
+                        BigDecimal superiorSubcommission = og.getSuperiorSubcommission();
+                        BigDecimal totalDistributionAmount = superiorLeader.getTotalDistributionAmount();
+                        totalDistributionAmount = totalDistributionAmount.add(superiorSubcommission);
+                        superiorLeader.setTotalDistributionAmount(totalDistributionAmount);
+
+                        // 分佣积分
+                        Integer sharePoint = superiorLeader.getSharePoint();
                         Integer superiorRebatePoints = og.getSuperiorRebatePoints();
                         sharePoint = sharePoint + superiorRebatePoints;
-                    } else if (superiorType == 2) {
+                        superiorLeader.setSharePoint(sharePoint);
 
-                    } else {
-                        continue;
+                        appUserClient.editAppUserById(superiorLeader);
                     }
-                    inviteUser.setTotalDistributionAmount(totalDistributionAmount);
-                    inviteUser.setSharePoint(sharePoint);
-                }
-
-                // 门店分销金额
-                og.getBoundShopCharges();
             }
         }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
index 3253aaf..ef90133 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -101,6 +101,8 @@
         Goods goods = this.getById(goodsId);
         GoodsVO goodsVO = new GoodsVO();
         BeanUtils.copyBeanProp(goodsVO, goods);
+        goodsVO.setGoodsId(goods.getId());
+        goodsVO.setGoodsName(goods.getName());
         goodsVO.setSellingPrice(sellingPrice);
         goodsVO.setIntegral(integral);
         return goodsVO;

--
Gitblit v1.7.1