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.UserCount;
import com.ruoyi.cai.im.ImManager;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.service.DynamicService;
import com.ruoyi.cai.service.UserCountService;
import com.ruoyi.cai.service.UserService;
@@ -31,6 +32,13 @@ public class UserTest {
private ImManager imManager;
@Autowired
private DynamicService dynamicService;
@Autowired
private AwardManager awardManager;
@Test
public void joinAnchorInvite(){
awardManager.giveJoinAnchor(1003L);
}
@Test
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.manager.IdManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.manager.UserForbidManager;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.constant.RedisConstant;
@@ -54,6 +55,8 @@ public class ChatManager {
private RedissonClient redissonClient;
@Autowired
private AccountService accountService;
@Autowired
private UserForbidManager userForbidManager;
private String setWsToken(Long roomId,Long fromUid,Long toUid,Long userId){
String token = IdManager.nextIdStr();
@@ -88,6 +91,10 @@ public class ChatManager {
Long userId = LoginHelper.getUserId();
User fromUser = userService.getById(userId);
User toUser = userService.getById(callReq.getToUid());
if(fromUser != null){
throw new ServiceException("用户不存在");
}
userForbidManager.checkForbid(userId);
if(toUser == null){
throw new ServiceException("主播不存在");
}

View File

@@ -25,6 +25,7 @@ public enum AccountChangeCodeEnum {
GUARD_INVITE(505,AccountCateEnum.SYSTEM,"邀请奖励(守护)",AccountTypeEnum.INCOME_COIN,"",true),
REGISTER_AWARD(506,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_COIN_OUT(702,AccountCateEnum.IM,"私信支出",AccountTypeEnum.COIN,"",false),

View File

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

View File

@@ -154,15 +154,7 @@ public class HomeManager {
config.setOssDomain(systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN));
config.setOpenWithdraw(systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_WITHDRAW));
Long userId = LoginHelper.getUserId();
User user = userService.getById(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("用户已封禁,请联系客服");
}
userForbidManager.checkForbid(userId);
if(userId != null){
LoginNotifyDTO loginUserDTO = new LoginNotifyDTO();
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.util.CaiDateUtil;
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 lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -124,6 +126,31 @@ public class UserForbidManager {
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){
ForbidTypeEnum typeEnum;
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.GenderEnum;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.LockManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.AnchorApplyMapper;
@@ -48,6 +49,8 @@ public class AnchorApplyServiceImpl extends ServiceImpl<AnchorApplyMapper, Ancho
private YunxinHttpService yunxinHttpService;
@Autowired
private RedissonClient redissonClient;
@Autowired
private AwardManager awardManager;
@Override
public AnchorApply getByUserId(Long userId){
@@ -126,7 +129,7 @@ public class AnchorApplyServiceImpl extends ServiceImpl<AnchorApplyMapper, Ancho
try {
joinAnchorLock.lock();
anchorService.joinAnchor(userId, false);
// TODO
awardManager.giveJoinAnchorAsync(userId);
return CheckAnchorAutoResp.builder().joinSuccess(true).build();
}catch (Exception 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.setGiftRate(systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.DEFAULT_ANCHOR_GIFT_PRICE));
anchorService.save(save);
awardManager.giveJoinAnchorAsync(userId);
yunxinHttpService.passAnchorSendMessage(userId);
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.cai.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.util.CaiDateUtil;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
@@ -52,6 +56,7 @@ public class UserForbidServiceImpl extends ServiceImpl<UserForbidMapper, UserFor
private UserInfoService userInfoService;
@Override
@Transactional(rollbackFor = Exception.class)
public void forbid(UserForbidLog userForbidLog, User user) {
ForbidTimeEnum forbidTime = ForbidTimeEnum.getByCode(userForbidLog.getForbidTime());
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));
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);
try {
// 12小时

View File

@@ -13,6 +13,7 @@ import com.ruoyi.common.enums.DeviceType;
import com.ruoyi.common.enums.UserType;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 登录鉴权助手
@@ -27,6 +28,7 @@ import lombok.NoArgsConstructor;
* @author Lion Li
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public class LoginHelper {
public static final String LOGIN_USER_KEY = "loginUser";
@@ -67,6 +69,15 @@ public class LoginHelper {
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);
}
}
/**
* 获取用户(多级缓存)
*/