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 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
|
public class VipCenterServiceImpl implements VipCenterService {
|
@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,Integer vipId) {
|
AppUser appUser = appUserService.getById(userId);
|
// 消费积分
|
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;
|
}
|
}
|
|
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) {
|
Goods goods = JSON.parseObject(vipGood.getGood_json(), 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) {
|
Goods goods = JSON.parseObject(vipGood.getGood_json(), 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) {
|
Goods goods = JSON.parseObject(vipGood.getGood_json(), 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("参数错误");
|
}
|
}
|
}
|