This commit is contained in:
张良(004796)
2024-04-01 17:09:25 +08:00
parent 933655dca6
commit 97f3f122c5
9 changed files with 87 additions and 19 deletions

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserCount; import com.ruoyi.cai.domain.UserCount;
import com.ruoyi.cai.im.ImManager; import com.ruoyi.cai.im.ImManager;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.service.DynamicService; import com.ruoyi.cai.service.DynamicService;
import com.ruoyi.cai.service.UserCountService; import com.ruoyi.cai.service.UserCountService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
@@ -31,6 +32,13 @@ public class UserTest {
private ImManager imManager; private ImManager imManager;
@Autowired @Autowired
private DynamicService dynamicService; private DynamicService dynamicService;
@Autowired
private AwardManager awardManager;
@Test
public void joinAnchorInvite(){
awardManager.giveJoinAnchor(1003L);
}
@Test @Test
public void clean(){ public void clean(){

View File

@@ -14,6 +14,7 @@ import com.ruoyi.cai.dto.app.vo.chat.VideoChargingResp;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.IdManager; import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.manager.UserForbidManager;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
import com.ruoyi.cai.ws.bean.Room; import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.constant.RedisConstant; import com.ruoyi.cai.ws.constant.RedisConstant;
@@ -54,6 +55,8 @@ public class ChatManager {
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Autowired @Autowired
private AccountService accountService; private AccountService accountService;
@Autowired
private UserForbidManager userForbidManager;
private String setWsToken(Long roomId,Long fromUid,Long toUid,Long userId){ private String setWsToken(Long roomId,Long fromUid,Long toUid,Long userId){
String token = IdManager.nextIdStr(); String token = IdManager.nextIdStr();
@@ -88,6 +91,10 @@ public class ChatManager {
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
User fromUser = userService.getById(userId); User fromUser = userService.getById(userId);
User toUser = userService.getById(callReq.getToUid()); User toUser = userService.getById(callReq.getToUid());
if(fromUser != null){
throw new ServiceException("用户不存在");
}
userForbidManager.checkForbid(userId);
if(toUser == null){ if(toUser == null){
throw new ServiceException("主播不存在"); throw new ServiceException("主播不存在");
} }

View File

@@ -25,6 +25,7 @@ public enum AccountChangeCodeEnum {
GUARD_INVITE(505,AccountCateEnum.SYSTEM,"邀请奖励(守护)",AccountTypeEnum.INCOME_COIN,"",true), GUARD_INVITE(505,AccountCateEnum.SYSTEM,"邀请奖励(守护)",AccountTypeEnum.INCOME_COIN,"",true),
REGISTER_AWARD(506,AccountCateEnum.SYSTEM,"注册奖励",AccountTypeEnum.INCOME_COIN,"",null), REGISTER_AWARD(506,AccountCateEnum.SYSTEM,"注册奖励",AccountTypeEnum.INCOME_COIN,"",null),
RANK_AWARD(507,AccountCateEnum.SYSTEM,"排行榜奖励",AccountTypeEnum.INCOME_COIN,"",null), RANK_AWARD(507,AccountCateEnum.SYSTEM,"排行榜奖励",AccountTypeEnum.INCOME_COIN,"",null),
JOIN_ANCHOR_INVITE(508,AccountCateEnum.SYSTEM,"邀请奖励(主播入驻)",AccountTypeEnum.INCOME_COIN,"",true),
IM_INCOME(701,AccountCateEnum.IM,"收到私信",AccountTypeEnum.INCOME_COIN,"",true), IM_INCOME(701,AccountCateEnum.IM,"收到私信",AccountTypeEnum.INCOME_COIN,"",true),
IM_COIN_OUT(702,AccountCateEnum.IM,"私信支出",AccountTypeEnum.COIN,"",false), IM_COIN_OUT(702,AccountCateEnum.IM,"私信支出",AccountTypeEnum.COIN,"",false),

View File

@@ -1,6 +1,7 @@
package com.ruoyi.cai.manager; package com.ruoyi.cai.manager;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.domain.Rank; import com.ruoyi.cai.domain.Rank;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
@@ -44,27 +45,36 @@ public class AwardManager {
@Autowired @Autowired
private YunxinHttpService yunxinHttpService; private YunxinHttpService yunxinHttpService;
public void giveJoinAnchorAsync(Long userId){ public void giveJoinAnchorAsync(Long anchorUserId){
AwardManager bean = SpringUtil.getBean(AwardManager.class); AwardManager bean = SpringUtil.getBean(AwardManager.class);
ExecutorConstant.COMMON_EXECUTOR.execute(() -> { ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
bean.giveJoinAnchor(userId); bean.giveJoinAnchor(anchorUserId);
}); });
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void giveJoinAnchor(Long userId) { public void giveJoinAnchor(Long anchorUserId) {
Long price = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.JOIN_ANCHOR_INVITE_AWARD); Long price = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.JOIN_ANCHOR_INVITE_AWARD);
if(price == 0){ if(price == 0){
return; return;
} }
User user = userService.getById(userId); User anchorUser = userService.getById(anchorUserId);
if(user == null){ if(anchorUser == null){
log.error("主播入驻邀请奖励领取失败 用户不存在 userId={}",userId); log.error("主播入驻邀请奖励领取失败 主播不存在 userId={}",anchorUserId);
return; return;
} }
// accountMapper.incsIncomeCoin(userId,price); Long inviteUserId = anchorUser.getInviteId();
// accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), AccountChangeCodeEnum.FAST_PAY_AWARD,price,traceId); if(inviteUserId == null){
log.warn("主播邀请入驻无需分成,没有检测到邀请人 anchorUser={}", JSON.toJSONString(anchorUser));
return;
}
User inviteUser = userService.getById(inviteUserId);
if(inviteUser == null){
log.error("主播邀请入驻无需分成,没有检测到邀请人,邀请人不存在 anchorUser={}", JSON.toJSONString(anchorUser));
return;
}
accountMapper.incsIncomeCoin(inviteUser.getId(),price);
accountChangeLogService.saveLogNoAdmin(inviteUser.getId(),inviteUser.getUsercode(), AccountChangeCodeEnum.JOIN_ANCHOR_INVITE,price,null,anchorUserId);
} }
public void giveRegisterAsync(Long userId){ public void giveRegisterAsync(Long userId){

View File

@@ -154,15 +154,7 @@ public class HomeManager {
config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN)); config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN));
config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW)); config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW));
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
User user = userService.getById(userId); userForbidManager.checkForbid(userId);
String imei = ServletUtils.getImei();
UserForbidManager.CheckForbid forbid = userForbidManager.checkForbid(user.getId(), user.getUsercode(), imei, ServletUtils.getClientIP());
if(forbid != null && forbid.isForbid()){
throw new ServiceException(forbid.getMessage());
}
if(user.getStatus() != 0){
throw new ServiceException("用户已封禁,请联系客服");
}
if(userId != null){ if(userId != null){
LoginNotifyDTO loginUserDTO = new LoginNotifyDTO(); LoginNotifyDTO loginUserDTO = new LoginNotifyDTO();
loginUserDTO.setUserId(userId); loginUserDTO.setUserId(userId);

View File

@@ -17,6 +17,8 @@ import com.ruoyi.cai.mq.handleDelay.dto.ForbidDelayDto;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -124,6 +126,31 @@ public class UserForbidManager {
userForbidService.forbid(userForbidLog,user); userForbidService.forbid(userForbidLog,user);
} }
public void checkForbid(User user){
Long userId = null;
String userCode = null;
if(user != null){
userCode = user.getUsercode();
userId = user.getId();
}
String imei = ServletUtils.getImei();
UserForbidManager.CheckForbid forbid = this.checkForbid(userId, userCode, imei, ServletUtils.getClientIP());
if(forbid != null && forbid.isForbid()){
throw new ServiceException(forbid.getMessage());
}
if(user != null && user.getStatus() != 0){
throw new ServiceException("用户已封禁,请联系客服");
}
}
public void checkForbid(Long userId){
User user = null;
if(userId != null){
user = userService.getById(userId);
}
checkForbid(user);
}
public CheckForbid checkForbid(Long userId,String usercode, String IMEI, String ip){ public CheckForbid checkForbid(Long userId,String usercode, String IMEI, String ip){
ForbidTypeEnum typeEnum; ForbidTypeEnum typeEnum;
CheckForbid noForbid = CheckForbid.noForbid(); CheckForbid noForbid = CheckForbid.noForbid();

View File

@@ -12,6 +12,7 @@ import com.ruoyi.cai.dto.commom.anchor.CheckAnchorAutoResp;
import com.ruoyi.cai.enums.AuditStatusEnum; import com.ruoyi.cai.enums.AuditStatusEnum;
import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.LockManager; import com.ruoyi.cai.manager.LockManager;
import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.AnchorApplyMapper; import com.ruoyi.cai.mapper.AnchorApplyMapper;
@@ -48,6 +49,8 @@ public class AnchorApplyServiceImpl extends ServiceImpl<AnchorApplyMapper, Ancho
private YunxinHttpService yunxinHttpService; private YunxinHttpService yunxinHttpService;
@Autowired @Autowired
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Autowired
private AwardManager awardManager;
@Override @Override
public AnchorApply getByUserId(Long userId){ public AnchorApply getByUserId(Long userId){
@@ -126,7 +129,7 @@ public class AnchorApplyServiceImpl extends ServiceImpl<AnchorApplyMapper, Ancho
try { try {
joinAnchorLock.lock(); joinAnchorLock.lock();
anchorService.joinAnchor(userId, false); anchorService.joinAnchor(userId, false);
// TODO awardManager.giveJoinAnchorAsync(userId);
return CheckAnchorAutoResp.builder().joinSuccess(true).build(); return CheckAnchorAutoResp.builder().joinSuccess(true).build();
}catch (Exception e){ }catch (Exception e){
log.error("自动加入主播失败!",e); log.error("自动加入主播失败!",e);
@@ -174,6 +177,7 @@ public class AnchorApplyServiceImpl extends ServiceImpl<AnchorApplyMapper, Ancho
save.setGuardRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GUARD_PRICE)); save.setGuardRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GUARD_PRICE));
save.setGiftRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GIFT_PRICE)); save.setGiftRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GIFT_PRICE));
anchorService.save(save); anchorService.save(save);
awardManager.giveJoinAnchorAsync(userId);
yunxinHttpService.passAnchorSendMessage(userId); yunxinHttpService.passAnchorSendMessage(userId);
} }

View File

@@ -1,5 +1,6 @@
package com.ruoyi.cai.service.impl; package com.ruoyi.cai.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.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;
@@ -23,10 +24,13 @@ import com.ruoyi.cai.service.UserInfoService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.enums.UserType;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -52,6 +56,7 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
private UserInfoService userInfoService; private UserInfoService userInfoService;
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forbid(UserForbidLog userForbidLog, User user) { public void forbid(UserForbidLog userForbidLog, User user) {
ForbidTimeEnum forbidTime = ForbidTimeEnum.getByCode(userForbidLog.getForbidTime()); ForbidTimeEnum forbidTime = ForbidTimeEnum.getByCode(userForbidLog.getForbidTime());
ForbidTypeEnum forbidType = ForbidTypeEnum.getByCode(userForbidLog.getType()); ForbidTypeEnum forbidType = ForbidTypeEnum.getByCode(userForbidLog.getType());
@@ -86,6 +91,9 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getStatus,1)); userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getStatus,1));
anchorService.update(Wrappers.lambdaUpdate(Anchor.class).eq(Anchor::getId,user.getId()).set(Anchor::getStatus,1)); anchorService.update(Wrappers.lambdaUpdate(Anchor.class).eq(Anchor::getId,user.getId()).set(Anchor::getStatus,1));
} }
if(forbidType == ForbidTypeEnum.USER && user != null){
LoginHelper.logoutApp(user.getId());
}
forbidCache.addForbid(one); forbidCache.addForbid(one);
try { try {
// 12小时 // 12小时

View File

@@ -13,6 +13,7 @@ import com.ruoyi.common.enums.DeviceType;
import com.ruoyi.common.enums.UserType; import com.ruoyi.common.enums.UserType;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/** /**
* 登录鉴权助手 * 登录鉴权助手
@@ -27,6 +28,7 @@ import lombok.NoArgsConstructor;
* @author Lion Li * @author Lion Li
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public class LoginHelper { public class LoginHelper {
public static final String LOGIN_USER_KEY = "loginUser"; public static final String LOGIN_USER_KEY = "loginUser";
@@ -67,6 +69,15 @@ public class LoginHelper {
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
} }
public static void logoutApp(Long userId){
try {
StpUtil.logout(UserType.APP_USER.getUserType() + ":" + userId);
}catch (Exception e){
log.error("强制T人下线失败! userId={}",userId,e);
}
}
/** /**
* 获取用户(多级缓存) * 获取用户(多级缓存)
*/ */