From 28d1b11176dbddfc6bb966f2b1d8776b946dd9be Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期一, 09 十二月 2024 17:34:12 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java | 278 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 266 insertions(+), 12 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 68bae5a..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 @@ -8,16 +8,23 @@ import com.ruoyi.account.service.VipCenterService; import com.ruoyi.account.service.VipSettingService; import com.ruoyi.common.core.domain.R; +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 @@ -30,6 +37,11 @@ private VipGoodClient vipGoodClient; @Resource private VipSettingService vipSettingService; + @Resource + private ShopClient shopClient; + @Resource + private TokenService tokenService; + @Override public Boolean checkReadyToBeProxy(Long userId,Integer vipId) { @@ -40,34 +52,276 @@ Integer sharePoint = appUser.getSharePoint(); // 准代理会员设置 VipSetting vipSetting = vipSettingService.getVipSettingById(4); - // 消费积分阈值 - Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); - // 返佣积分阈值 - Integer vipLevelUpShare = vipSetting.getVipLevelUpShare(); - if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){ - return true; + // 获取通过消费积分达成会员等级的开关 + Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole(); + if (vipLevelUpShopRole == 1){ + // 消费积分阈值 + Integer vipLevelUpShop = vipSetting.getVipLevelUpShop(); + // 返佣积分阈值 + Integer vipLevelUpShare = vipSetting.getVipLevelUpShare(); + // 判断是否满足消费积分和返佣积分 + if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){ + return true; + } } - // 直推钻石用户数阈值 - Integer vipDirectNum = vipSetting.getVipDirectNum(); - // 获取用户直推钻石用户数量 - long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>() - .eq(AppUser::getInviteUserId, userId) - .eq(AppUser::getVipId, 3)); + + 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; } @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