This commit is contained in:
张良(004796)
2024-01-31 17:25:44 +08:00
parent 00be3b8844
commit 46cada598e
9 changed files with 104 additions and 13 deletions

View File

@@ -154,4 +154,20 @@ public class UserController extends BaseController {
public R<Void> remove(@NotNull(message = "主键不能为空") @PathVariable Long id) { public R<Void> remove(@NotNull(message = "主键不能为空") @PathVariable Long id) {
return toAjax(userService.removeUser(id)); return toAjax(userService.removeUser(id));
} }
@SaCheckPermission("cai:user:unBindInvite")
@Log(title = "解绑用户邀请人", businessType = BusinessType.OTHER)
@GetMapping("/unBindInvite")
public R<Void> unBindInvite(Long userId) {
userService.unBindInviteUser(userId);
return R.ok();
}
@SaCheckPermission("cai:user:bindInvite")
@Log(title = "绑定用户邀请人", businessType = BusinessType.OTHER)
@GetMapping("/bindInvite")
public R<Void> bindInvite(Long userId,String inviteUsercode) {
userService.bindInviteUser(userId,inviteUsercode);
return R.ok();
}
} }

View File

@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.management.ObjectName;
import java.util.List; import java.util.List;
@@ -59,9 +60,20 @@ public class IndexController {
public R<AppHomeConfig> config(){ public R<AppHomeConfig> config(){
AppHomeConfig config = new AppHomeConfig(); AppHomeConfig config = new AppHomeConfig();
config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN)); config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN));
config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW));
return R.ok(config); return R.ok(config);
} }
@GetMapping("/recommendFollows")
@Operation(summary = "获取推荐关注列表")
@Log(title = "获取推荐关注列表", businessType = BusinessType.OTHER, isSaveDb = false)
public R<List<AnchorListVo>> recommendFollows(){
Integer recommendFollowsLimit = systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.HOME_RECOMMEND_FOLLOWS_LIMIT);
List<AnchorListVo> vos = homeManager.recommendFollows(recommendFollowsLimit);
return R.ok(vos);
}
@GetMapping("/banner") @GetMapping("/banner")
@Operation(summary = "获取首页banner图") @Operation(summary = "获取首页banner图")
@Log(title = "获取首页banner图", businessType = BusinessType.OTHER, isSaveDb = false) @Log(title = "获取首页banner图", businessType = BusinessType.OTHER, isSaveDb = false)

View File

@@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.domain.*; import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.commom.ignoredata.InviteIgnoreData; import com.ruoyi.cai.dto.commom.ignoredata.InviteIgnoreData;
import com.ruoyi.cai.enums.CodeEnum; import com.ruoyi.cai.enums.CodeEnum;
@@ -135,14 +136,14 @@ public class CaiLoginManager {
awardManager.giveRegisterAsync(user.getId()); awardManager.giveRegisterAsync(user.getId());
if(user.getInviteId() != null){ if(user.getInviteId() != null){
User finalUser = user; User finalUser = user;
ExecutorConstant.COMMON_EXECUTOR.execute(() -> dealInviteId(finalUser)); ExecutorConstant.COMMON_EXECUTOR.execute(() -> dealInviteId(finalUser,true));
} }
return login(user); return login(user);
} }
public void dealInviteId(User user){ public void dealInviteId(User user, boolean openIgnore){
Long inviteId = user.getInviteId(); Long inviteId = user.getInviteId();
if(inviteId == null){ if(inviteId == null){
return; return;
@@ -151,7 +152,7 @@ public class CaiLoginManager {
if(inviteUser == null){ if(inviteUser == null){
return; return;
} }
String key = LockManager.getDealInviteLockKey(inviteId); String key = LockManager.getDealInviteLockKey(user.getId());
RLock lock = redissonClient.getLock(key); RLock lock = redissonClient.getLock(key);
if(lock.isLocked()){ if(lock.isLocked()){
log.warn("点击太快了等一等dealInviteId"); log.warn("点击太快了等一等dealInviteId");
@@ -159,14 +160,16 @@ public class CaiLoginManager {
} }
lock.lock(5,TimeUnit.SECONDS); lock.lock(5,TimeUnit.SECONDS);
try { try {
Integer inviteBindRate = systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.INVITE_BIND_RATE); if(openIgnore){
boolean sj = RandomSjUtil.rateSj(inviteBindRate); Integer inviteBindRate = systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.INVITE_BIND_RATE);
if(!sj){ boolean sj = RandomSjUtil.rateSj(inviteBindRate);
InviteIgnoreData data = new InviteIgnoreData(); if(!sj){
data.setUserId(user.getId()); InviteIgnoreData data = new InviteIgnoreData();
data.setInviteId(inviteId); data.setUserId(user.getId());
ignoreDataService.saveIgnoreData(IgnoreDataTypeEnum.INVITE,inviteUser.getId(),data); data.setInviteId(inviteId);
return; ignoreDataService.saveIgnoreData(IgnoreDataTypeEnum.INVITE,inviteUser.getId(),data);
return;
}
} }
UserInvite check = userInviteService.getByUserId(user.getId()); UserInvite check = userInviteService.getByUserId(user.getId());
if(check == null){ if(check == null){
@@ -174,6 +177,11 @@ public class CaiLoginManager {
userInvite.setUserId(user.getId()); userInvite.setUserId(user.getId());
userInvite.setInviteId(user.getInviteId()); userInvite.setInviteId(user.getInviteId());
userInviteService.save(userInvite); userInviteService.save(userInvite);
}else{
userInviteService.update(Wrappers.lambdaUpdate(UserInvite.class)
.eq(UserInvite::getId,check.getId())
.set(UserInvite::getInviteId,user.getInviteId())
.set(UserInvite::getRewardCoinTotal,0L));
} }
// 处理工会 // 处理工会
Union union = null; // Union union = null; //

View File

@@ -7,4 +7,6 @@ import lombok.Data;
public class AppHomeConfig { public class AppHomeConfig {
@Schema(description = "oss文件服务器域名") @Schema(description = "oss文件服务器域名")
private String ossDomain; private String ossDomain;
@Schema(description = "是否开启提现")
private boolean openWithdraw = true;
} }

View File

@@ -45,6 +45,8 @@ public enum SystemConfigEnum {
OPEN_ALI_PAY("1", "是否开启支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), OPEN_ALI_PAY("1", "是否开启支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
OPEN_WX_PAY("1", "是否开启微信支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), OPEN_WX_PAY("1", "是否开启微信支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
ALI_PAY_FIRST("1", "支付宝支付显示是否在前面",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), ALI_PAY_FIRST("1", "支付宝支付显示是否在前面",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
OPEN_WITHDRAW("1", "是否开启提现功能",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
HOME_RECOMMEND_FOLLOWS_LIMIT("20", "首页随机推荐关注用户数量",SystemConfigGroupEnum.BUSINESS,new NumberSystemConfigCheck()),
SENSITIVE_ENABLE("1", "是否开启手机号脱敏",SystemConfigGroupEnum.SYSTEM), SENSITIVE_ENABLE("1", "是否开启手机号脱敏",SystemConfigGroupEnum.SYSTEM),
SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM), SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM),
PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM), PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM),

View File

@@ -188,7 +188,7 @@ public class CurrentUserManager {
} }
} }
if(res.getInviteId() != null && user.getInviteId() != null){ if(res.getInviteId() != null && user.getInviteId() != null){
ExecutorConstant.COMMON_EXECUTOR.execute(() -> loginManager.dealInviteId(user)); ExecutorConstant.COMMON_EXECUTOR.execute(() -> loginManager.dealInviteId(user,false));
} }
} }

View File

@@ -91,5 +91,11 @@ public class HomeManager {
return vos.subList(startIndex, endIndex); return vos.subList(startIndex, endIndex);
} }
public List<AnchorListVo> recommendFollows(Integer limit) {
RBucket<List<AnchorListVo>> bucket = redissonClient.getBucket(RedisHttpConstant.HOME_RECOMMEND_REDIS);
List<AnchorListVo> vos = bucket.get();
Collections.shuffle(vos);
int endIndex = Math.min(limit, vos.size());
return vos.subList(0, endIndex);
}
} }

View File

@@ -45,4 +45,7 @@ public interface UserService extends IService<User> {
void refreshByAge(); void refreshByAge();
void unBindInviteUser(Long userId);
void bindInviteUser(Long userId, String inviteUsercode);
} }

View File

@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.auth.CaiLoginManager;
import com.ruoyi.cai.domain.*; import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.admin.vo.UserAdminVo; import com.ruoyi.cai.dto.admin.vo.UserAdminVo;
import com.ruoyi.cai.dto.app.query.index.GreetQuery; import com.ruoyi.cai.dto.app.query.index.GreetQuery;
@@ -14,6 +15,7 @@ import com.ruoyi.cai.dto.app.vo.user.OnlineStatusVo;
import com.ruoyi.cai.dto.app.vo.user.UserInfoVo; import com.ruoyi.cai.dto.app.vo.user.UserInfoVo;
import com.ruoyi.cai.dto.app.vo.user.UserListVo; import com.ruoyi.cai.dto.app.vo.user.UserListVo;
import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.manager.CurrentUserManager;
import com.ruoyi.cai.mapper.UserMapper; import com.ruoyi.cai.mapper.UserMapper;
import com.ruoyi.cai.notice.YunxinHttpService; import com.ruoyi.cai.notice.YunxinHttpService;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
@@ -78,6 +80,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private AnchorApplyService anchorApplyService; private AnchorApplyService anchorApplyService;
@Autowired @Autowired
private RoomService roomService; private RoomService roomService;
@Autowired
private CaiLoginManager caiLoginManager;
@Override @Override
public User getByUsername(String username) { public User getByUsername(String username) {
@@ -316,4 +320,42 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
} }
@Autowired
private UnionUserService unionUserService;
@Override
@Transactional(rollbackFor = Exception.class)
public void unBindInviteUser(Long userId){
User user = this.getById(userId);
if(user == null){
throw new ServiceException("用户不存在");
}
this.update(Wrappers.lambdaUpdate(User.class)
.eq(User::getId,userId)
.set(User::getInviteId,null));
userInviteService.remove(Wrappers.lambdaQuery(UserInvite.class)
.eq(UserInvite::getUserId,userId));
// 退出工会
unionUserService.remove(Wrappers.lambdaQuery(UnionUser.class)
.eq(UnionUser::getUserId,userId));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void bindInviteUser(Long userId, String inviteUsercode){
User user = this.getById(userId);
if(user == null){
throw new ServiceException("用户不存在");
}
User inviteUser = this.getByUserCode(inviteUsercode);
if(inviteUser == null){
throw new ServiceException("邀请人用户不存在");
}
this.update(Wrappers.lambdaUpdate(User.class)
.eq(User::getId,userId)
.set(User::getInviteId,inviteUser.getId()));
user = this.getById(userId);
caiLoginManager.dealInviteId(user,false);
}
} }