From a8d2cb07f6440dc54dc4005b0b06d5a47cb1517d Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期一, 16 十二月 2024 13:34:03 +0800
Subject: [PATCH] 12.16

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java |  305 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 290 insertions(+), 15 deletions(-)

diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
index 7ab046c..2ec3a0c 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
@@ -1,35 +1,101 @@
 package com.ruoyi.account.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.account.api.model.AppUser;
 import com.ruoyi.account.service.AppUserService;
 import com.ruoyi.account.service.VipCenterService;
+import com.ruoyi.account.service.VipSettingService;
 import com.ruoyi.common.core.domain.R;
-import lombok.RequiredArgsConstructor;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
+import com.ruoyi.order.model.Order;
+import com.ruoyi.other.api.domain.Goods;
+import com.ruoyi.other.api.domain.Shop;
+import com.ruoyi.other.api.domain.VipGood;
+import com.ruoyi.other.api.domain.VipSetting;
+import com.ruoyi.other.api.feignClient.ShopClient;
+import com.ruoyi.other.api.feignClient.VipGoodClient;
+import com.ruoyi.system.api.model.LoginUser;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
-@RequiredArgsConstructor
 public class VipCenterServiceImpl implements VipCenterService {
-    private final AppUserService appUserService;
+    @Resource
+    private AppUserService appUserService;
+    @Resource
+    private RemoteOrderGoodsClient remoteOrderGoodsClient;
+    @Resource
+    private VipGoodClient vipGoodClient;
+    @Resource
+    private VipSettingService vipSettingService;
+    @Resource
+    private ShopClient shopClient;
+    @Resource
+    private TokenService tokenService;
+
+
     @Override
-    public Boolean checkReadyToBeProxy(Long userId) {
+    public Boolean checkReadyToBeProxy(Long userId,Integer vipId) {
         AppUser appUser = appUserService.getById(userId);
-        if (appUser.getShopPoint() >= 500){
-            return true;
-        }
-        if (appUser.getSharePoint() >= 400){
-            return true;
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 准代理会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(4);
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
         }
 
-        // 当前用户的直推用户
-        List<AppUser> bottomUsers = appUserService.list(new LambdaQueryWrapper<AppUser>()
-                .eq(AppUser::getInviteUserId, userId)
-                .eq(AppUser::getVipId,3));
-        if (bottomUsers.size() >= 5){
-            return true;
+        Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+        if (vipLevelUpNumRole == 1){
+            // 直推钻石用户数阈值
+            Integer vipDirectNum = vipSetting.getVipDirectNum();
+            // 获取用户直推钻石用户数量
+            long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                    .eq(AppUser::getInviteUserId, userId)
+                    .eq(AppUser::getVipId, 3));
+            // 判断是否满足直推钻石用户数量
+            if (userDiamondsCount >= vipDirectNum){
+                return true;
+            }
+        }
+        // 获取指定购买商品
+        R<List<VipGood>> vipGoodsByVipId = vipGoodClient.getVipGoodsByVipId(4);
+        if (R.isSuccess(vipGoodsByVipId)){
+            List<VipGood> vipGoods = vipGoodsByVipId.getData();
+            if (CollectionUtil.isNotEmpty(vipGoods)){
+                for (VipGood vipGood : vipGoods) {
+                    String goodJson = vipGood.getGoodJson();
+                    Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+                    R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, goods.getId());
+                    if (R.isSuccess(orderListByUserIdAndGoodsId)){
+                        List<Order> orderList = orderListByUserIdAndGoodsId.getData();
+                        if (CollectionUtil.isEmpty(orderList)){
+                            return false;
+                        }
+                    }
+                }
+                return true;
+            }
         }
 
         return false;
@@ -37,16 +103,225 @@
 
     @Override
     public Boolean checkReadyToBeAgent(Long userId) {
+        AppUser appUser = appUserService.getById(userId);
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 代理会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(5);
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
+        }
+
+        Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+        if (vipLevelUpNumRole == 1){
+            // 直推钻石用户数阈值
+            Integer vipDirectNum = vipSetting.getVipDirectNum();
+            // 获取用户直推钻石用户数量
+            long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                    .eq(AppUser::getInviteUserId, userId)
+                    .eq(AppUser::getVipId, 3));
+            // 判断是否满足直推钻石用户数量
+            if (userDiamondsCount >= vipDirectNum){
+                return true;
+            }
+        }
+
+        R<List<VipGood>> vipGoodsByVipId = vipGoodClient.getVipGoodsByVipId(5);
+        if (R.isSuccess(vipGoodsByVipId)){
+            List<VipGood> vipGoods = vipGoodsByVipId.getData();
+            if (CollectionUtil.isNotEmpty(vipGoods)){
+                for (VipGood vipGood : vipGoods) {
+                    String goodJson = vipGood.getGoodJson();
+                    Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+                    R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, goods.getId());
+                    if (R.isSuccess(orderListByUserIdAndGoodsId)){
+                        List<Order> orderList = orderListByUserIdAndGoodsId.getData();
+                        if (CollectionUtil.isEmpty(orderList)){
+                            return false;
+                        }
+                    }
+                }
+                return true;
+            }
+        }
+
         return false;
     }
 
     @Override
     public Boolean checkReadyToBeTotalAgent(Long userId) {
+        AppUser appUser = appUserService.getById(userId);
+        // 获取总代会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(6);
+        // 获取会员等级是否必须达到代理
+        Integer vipLevelUpProxyRole = vipSetting.getVipLevelUpProxyRole();
+        if (vipLevelUpProxyRole == 1 && appUser.getVipId() == 5){
+            return true;
+        }
+
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
+        }
+
+        Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+        if (vipLevelUpNumRole == 1){
+            // 直推代理用户数阈值
+            Integer vipDirectNum = vipSetting.getVipDirectNum();
+            // 准代理用户数阈值
+            Integer vipDirectVipNum = vipSetting.getVipDirectVipNum();
+            // 获取用户直推代理用户数量
+            List<AppUser> userAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                    .eq(AppUser::getInviteUserId, userId)
+                    .eq(AppUser::getVipId, 5));
+
+            // 代理下的准代理数量
+            List<Long> userQuasiAgent = userAgentList.stream().map(AppUser::getId).collect(Collectors.toList());
+            long userQuasiAgentCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                    .in(AppUser::getInviteUserId, userQuasiAgent)
+                    .eq(AppUser::getVipId, 4));
+
+            // 判断是否满足直推代理用户数量和准代理数量
+            if (userAgentList.size() >= vipDirectNum && userQuasiAgentCount >= vipDirectVipNum){
+                return true;
+            }
+        }
+        // 获取指定购买商品
+        R<List<VipGood>> vipGoodsByVipId = vipGoodClient.getVipGoodsByVipId(5);
+        if (R.isSuccess(vipGoodsByVipId)){
+            List<VipGood> vipGoods = vipGoodsByVipId.getData();
+            if (CollectionUtil.isNotEmpty(vipGoods)){
+                for (VipGood vipGood : vipGoods) {
+                    String goodJson = vipGood.getGoodJson();
+                    Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+                    R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, goods.getId());
+                    if (R.isSuccess(orderListByUserIdAndGoodsId)){
+                        List<Order> orderList = orderListByUserIdAndGoodsId.getData();
+                        if (CollectionUtil.isEmpty(orderList)){
+                            return false;
+                        }
+                    }
+                }
+                return true;
+            }
+        }
+
         return false;
     }
 
     @Override
     public Boolean checkReadyToBePartner(Long userId) {
+        AppUser appUser = appUserService.getById(userId);
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 合伙人会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(7);
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
+
+            Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+            if (vipLevelUpNumRole == 1){
+                // 直推代理用户数阈值
+                Integer vipDirectNum = vipSetting.getVipDirectNum();
+                // 准代理用户数阈值
+                Integer vipDirectVipNum = vipSetting.getVipDirectVipNum();
+                // 总代用户数阈值
+                Integer vipTeamVipNum = vipSetting.getVipTeamVipNum();
+                // 获取开店数量阈值
+                Integer vipOpenShopNum = vipSetting.getVipOpenShopNum();
+
+                // 获取直推用户有超过指定门店数量的用户
+                List<Long> userShopList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                        .eq(AppUser::getInviteUserId, userId))
+                        .stream().map(AppUser::getId).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(userShopList)){
+                    R<List<Shop>> r = shopClient.getShopByUserIds(userShopList);
+                    List<Shop> shopList = r.getData();
+                    if (CollectionUtil.isNotEmpty(shopList)){
+                        Map<Long, List<Shop>> shopUserMap = shopList.stream().collect(Collectors.groupingBy(Shop::getAppUserId));
+
+                        // 查找 list 长度大于 3 的 key
+                        Set<Long> shopUserIdSet = shopUserMap.entrySet().stream()
+                                .filter(entry -> entry.getValue().size() >= vipOpenShopNum)
+                                .map(Map.Entry::getKey)
+                                .collect(Collectors.toSet());
+
+                        // 获取用户直推总代理数量
+                        List<AppUser> userTotalAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                                .in(AppUser::getInviteUserId, shopUserIdSet)
+                                .eq(AppUser::getVipId, 6));
+
+                        // 获取用户直推代理用户数量
+                        List<AppUser> userAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                                .in(AppUser::getInviteUserId, shopUserIdSet)
+                                .eq(AppUser::getVipId, 5));
+
+                        // 代理下的准代理数量
+                        List<Long> userQuasiAgent = userAgentList.stream().map(AppUser::getId).collect(Collectors.toList());
+                        long userQuasiAgentCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                                .in(AppUser::getInviteUserId, userQuasiAgent)
+                                .eq(AppUser::getVipId, 4));
+
+                        // 判断是否满足直推代理用户数量和准代理数量
+                        return userTotalAgentList.size() >= vipTeamVipNum && userAgentList.size() >= vipDirectNum &&
+                                userQuasiAgentCount >= vipDirectVipNum;
+
+                    }
+
+                }
+            }
+        }
         return false;
     }
+
+    @Override
+    public Boolean check(Integer type) {
+        LoginUser loginUser = tokenService.getLoginUser();
+        Long userid = loginUser.getUserid();
+        if (type == 4){
+            return checkReadyToBeProxy(userid, type);
+        }else if (type == 5){
+            return checkReadyToBeAgent(userid);
+        }else if (type == 6){
+            return checkReadyToBeTotalAgent(userid);
+        }else if (type == 7){
+            return checkReadyToBePartner(userid);
+        }else {
+            throw new ServiceException("参数错误");
+        }
+    }
 }

--
Gitblit v1.7.1