From 2bc35df79fca920ad584a82b5ea7b35b6ca7b8a0 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期三, 15 一月 2025 10:12:57 +0800 Subject: [PATCH] 12.18 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java | 307 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 292 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..402bd5d 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,52 +1,329 @@ package com.ruoyi.account.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson2.JSON; +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.GoodsClient; +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; + @Resource + private GoodsClient goodsClient; + + @Override - public Boolean checkReadyToBeProxy(Long userId) { + public Boolean checkReadyToBeProxy(Long userId,Integer vipId) { AppUser appUser = appUserService.getById(userId); - if (appUser.getShopPoint() >= 500){ - return true; + // 消费积分 + Integer shopPoint = appUser.getShopPoint(); + // 返佣积分 + Integer sharePoint = appUser.getSharePoint(); + // 准代理会员设置 + VipSetting vipSetting = vipSettingService.getVipSettingById(4); + // 获取通过消费积分达成会员等级的开关 + Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole(); + + // 获取指定购买商品 + boolean b = false; + String[] split = vipSetting.getGoodIds().split(","); + for (String s : split) { + R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, Integer.valueOf(s)); + if (R.isSuccess(orderListByUserIdAndGoodsId)){ + List<Order> orderList = orderListByUserIdAndGoodsId.getData(); + if (orderList.size() > 0){ + b = true; + break; + } + } } - if (appUser.getSharePoint() >= 400){ - return true; + if (b && null != vipLevelUpShopRole && vipLevelUpShopRole == 1){ + // 消费积分阈值 + Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); + // 返佣积分阈值 + Integer vipLevelUpShare = vipSetting.getVipLevelUpShare(); + // 判断是否满足消费积分和返佣积分 + if (shopPoint.compareTo(vipLevelUpShop) >= 0 && sharePoint.compareTo(vipLevelUpShare) >= 0){ + 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 (b && null != vipLevelUpNumRole && vipLevelUpNumRole == 1){ + // 直推钻石用户数阈值 + Integer vipDirectNum = vipSetting.getVipDirectNum(); + // 获取用户直推钻石用户数量 + long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>() + .eq(AppUser::getInviteUserId, userId) + .eq(AppUser::getDelFlag, 0) + .eq(AppUser::getStatus, 1) + .gt(AppUser::getVipId, 2)); + // 判断是否满足直推钻石用户数量 + return userDiamondsCount >= vipDirectNum.longValue(); } - return false; } @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(); + + boolean b = false; + String[] split = vipSetting.getGoodIds().split(","); + for (String s : split) { + R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, Integer.valueOf(s)); + if (R.isSuccess(orderListByUserIdAndGoodsId)){ + List<Order> orderList = orderListByUserIdAndGoodsId.getData(); + if (orderList.size() > 0){ + b = true; + break; + } + } + } + if (b && null != vipLevelUpShopRole && vipLevelUpShopRole == 1){ + // 消费积分阈值 + Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); + // 返佣积分阈值 + Integer vipLevelUpShare = vipSetting.getVipLevelUpShare(); + // 判断是否满足消费积分和返佣积分 + if (shopPoint.compareTo(vipLevelUpShop) >= 0 && sharePoint.compareTo(vipLevelUpShare) >= 0){ + return true; + } + } + + Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole(); + if (b && null != vipLevelUpNumRole && vipLevelUpNumRole == 1){ + // 直推钻石用户数阈值 + Integer vipDirectNum = vipSetting.getVipDirectNum(); + // 获取用户直推钻石用户数量 + long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>() + .eq(AppUser::getInviteUserId, userId) + .eq(AppUser::getVipId, 3)); + // 判断是否满足直推钻石用户数量 + return userDiamondsCount >= vipDirectNum.longValue(); + } return false; } @Override public Boolean checkReadyToBeTotalAgent(Long userId) { + AppUser appUser = appUserService.getById(userId); + // 获取总代会员设置 + VipSetting vipSetting = vipSettingService.getVipSettingById(6); + + // 获取指定购买商品 + boolean b = false; + String[] split = vipSetting.getGoodIds().split(","); + for (String s : split) { + R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, Integer.valueOf(s)); + if (R.isSuccess(orderListByUserIdAndGoodsId)){ + List<Order> orderList = orderListByUserIdAndGoodsId.getData(); + if (orderList.size() > 0){ + b = true; + break; + } + } + } + + // 获取会员等级是否必须达到代理 + Integer vipLevelUpProxyRole = vipSetting.getVipLevelUpProxyRole(); + if (b && vipLevelUpProxyRole == 1 && appUser.getVipId() == 5){ + return true; + } + + // 消费积分 + Integer shopPoint = appUser.getShopPoint(); + // 返佣积分 + Integer sharePoint = appUser.getSharePoint(); + // 获取通过消费积分达成会员等级的开关 + Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole(); + if (b && null != vipLevelUpShopRole && vipLevelUpShopRole == 1){ + // 消费积分阈值 + Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); + // 返佣积分阈值 + Integer vipLevelUpShare = vipSetting.getVipLevelUpShare(); + // 判断是否满足消费积分和返佣积分 + if (shopPoint.compareTo(vipLevelUpShop) >= 0 && sharePoint.compareTo(vipLevelUpShare) >= 0){ + return true; + } + } + + Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole(); + if (b && null != vipLevelUpNumRole && 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 = 0; + if(userQuasiAgent.size() > 0){ + userQuasiAgentCount = appUserService.count(new LambdaQueryWrapper<AppUser>() + .in(AppUser::getInviteUserId, userQuasiAgent) + .eq(AppUser::getVipId, 4)); + } + + // 判断是否满足直推代理用户数量和准代理数量 + return userAgentList.size() >= vipDirectNum && userQuasiAgentCount >= vipDirectVipNum.longValue(); + } 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); + // 获取指定购买商品 + boolean b = false; + String[] split = vipSetting.getGoodIds().split(","); + for (String s : split) { + R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, Integer.valueOf(s)); + if (R.isSuccess(orderListByUserIdAndGoodsId)){ + List<Order> orderList = orderListByUserIdAndGoodsId.getData(); + if (orderList.size() > 0){ + b = true; + break; + } + } + } + + // 获取通过消费积分达成会员等级的开关 + Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole(); + if (b && null != vipLevelUpShopRole && vipLevelUpShopRole == 1){ + // 消费积分阈值 + Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); + // 返佣积分阈值 + Integer vipLevelUpShare = vipSetting.getVipLevelUpShare(); + // 判断是否满足消费积分和返佣积分 + if (shopPoint.compareTo(vipLevelUpShop) >= 0 && sharePoint.compareTo(vipLevelUpShare) >= 0){ + return true; + } + } + + Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole(); + if (b && null != vipLevelUpNumRole && 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::getId, shopUserIdSet) + .eq(AppUser::getVipId, 6)); + + + // 获取用户直推代理用户数量 + List<AppUser> userAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>() + .in(AppUser::getId, userShopList) + .eq(AppUser::getVipId, 5)); + + // 代理下的准代理数量 + List<Long> userQuasiAgent = userAgentList.stream().map(AppUser::getId).collect(Collectors.toList()); + long userQuasiAgentCount = 0; + if(userQuasiAgent.size() > 0){ + 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.getLoginUserApplet(); + 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