This commit is contained in:
77
2024-08-03 19:56:22 +08:00
parent 4fc5fdc77f
commit 3706411b80
14 changed files with 150 additions and 1 deletions

View File

@@ -1,9 +1,12 @@
package com.ruoyi.cai.manager;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.auth.CaiLoginManager;
import com.ruoyi.cai.constant.RedisHttpConstant;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.app.query.AccountAliBankCardRes;
import com.ruoyi.cai.dto.app.query.AnchorUpdateReq;
@@ -11,6 +14,7 @@ import com.ruoyi.cai.dto.app.query.user.UserUpdateAvatarReq;
import com.ruoyi.cai.dto.app.query.user.UserUpdateReq;
import com.ruoyi.cai.dto.app.vo.AnchorVo;
import com.ruoyi.cai.dto.app.vo.CurrentUserInfoVo;
import com.ruoyi.cai.dto.app.vo.top.AnchorTopResp;
import com.ruoyi.cai.dto.app.vo.user.*;
import com.ruoyi.cai.enums.AuditStatusEnum;
import com.ruoyi.cai.enums.GenderEnum;
@@ -26,15 +30,21 @@ import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.yunxin.client.ImUserRefClient;
import com.ruoyi.yunxin.req.UpdateUinfoReq;
import com.ruoyi.yunxin.resp.YxCommonR;
import com.ruoyi.yunxin.resp.YxDataR;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
@@ -280,5 +290,42 @@ public class CurrentUserManager {
@Autowired
private AnchorApplyService anchorApplyService;
@Autowired
private RedissonClient redissonClient;
@Autowired
private StringRedisTemplate stringRedisTemplate;
public AnchorTopResp top() {
Long userId = LoginHelper.getUserId();
String lockKey = LockManager.getAnchorTopLock(userId);
RLock lock = redissonClient.getLock(lockKey);
if(lock.isLocked()){
throw new ServiceException("操作太频繁");
}
try {
lock.lock(3, TimeUnit.SECONDS);
String userGreetSendTime = String.format(RedisHttpConstant.ANCHOR_TOP_TIME_REDIS,userId); // 最近一次的发送时间
String lastTime = stringRedisTemplate.opsForValue().get(userGreetSendTime);
if(StringUtils.isNotBlank(lastTime)){
int inter = systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.ANCHOR_TOP_MIN) * 60;
long jiange = DateUtil.currentSeconds() - Long.parseLong(lastTime); // 距离上次发送的间隔
long diff = inter - jiange;
if(diff > 0){
AnchorTopResp resp = new AnchorTopResp();
resp.setTopSuccess(false);
resp.setNextTopDate(diff);
return resp;
}
}
anchorService.update(Wrappers.lambdaUpdate(Anchor.class)
.set(Anchor::getTopShowRank, LocalDateTime.now())
.eq(Anchor::getUserId, userId));
stringRedisTemplate.opsForValue().set(userGreetSendTime,DateUtil.currentSeconds()+"",1,TimeUnit.DAYS);
}finally {
lock.unlock();
}
AnchorTopResp resp = new AnchorTopResp();
resp.setTopSuccess(true);
return resp;
}
}