|
|
@@ -1080,16 +1080,20 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
// if (isWithin10Minutes){
|
|
|
// return R.error("非有效期内,不允许领取!");
|
|
|
// }
|
|
|
+ // 生成锁的key,基于用户ID和视频ID确保同一用户同一视频的请求被锁定
|
|
|
+ String lockKey = "reward_lock:user:" + param.getUserId() + ":video:" + param.getVideoId();
|
|
|
+ RLock lock = redissonClient.getLock(lockKey);
|
|
|
|
|
|
- RLock lock = redissonClient.getLock("sendReward");
|
|
|
-
|
|
|
- try{
|
|
|
- boolean getLock = lock.tryLock(100,10000, TimeUnit.MILLISECONDS);
|
|
|
- if (!getLock) {
|
|
|
- return R.error("服务器繁忙,请稍候再试!");
|
|
|
+ try {
|
|
|
+ // 尝试获取锁,等待时间5秒,锁过期时间30秒
|
|
|
+ boolean isLocked = lock.tryLock(5, 60, TimeUnit.SECONDS);
|
|
|
+ if (!isLocked) {
|
|
|
+ logger.warn("获取锁失败,用户ID:{},视频ID:{}", param.getUserId(), param.getVideoId());
|
|
|
+ return R.error("操作频繁,请稍后再试!");
|
|
|
}
|
|
|
- // 获取用户信息
|
|
|
|
|
|
+ logger.info("成功获取锁,开始处理奖励发放,用户ID:{},视频ID:{}", param.getUserId(), param.getVideoId());
|
|
|
+ // 获取用户信息
|
|
|
FsUser user = fsUserMapper.selectFsUserByUserId(param.getUserId());
|
|
|
// if (StringUtils.isEmpty(user.getMpOpenId())){
|
|
|
// return R.error("未识别到领取信息");
|
|
|
@@ -1155,14 +1159,17 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
default:
|
|
|
return R.error("参数错误!");
|
|
|
}
|
|
|
+// return executeSendRewardBusiness(param);
|
|
|
|
|
|
- }
|
|
|
- catch (Exception e){
|
|
|
- throw new CustomException(e.getMessage());
|
|
|
- }
|
|
|
- finally {
|
|
|
- if(null != lock && lock.isLocked() && lock.isHeldByCurrentThread()){
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ Thread.currentThread().interrupt();
|
|
|
+ logger.error("获取锁被中断,用户ID:{},视频ID:{}", param.getUserId(), param.getVideoId(), e);
|
|
|
+ return R.error("系统繁忙,请重试!");
|
|
|
+ } finally {
|
|
|
+ // 释放锁
|
|
|
+ if (lock.isHeldByCurrentThread()) {
|
|
|
lock.unlock();
|
|
|
+ logger.info("释放锁成功,用户ID:{},视频ID:{}", param.getUserId(), param.getVideoId());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1199,7 +1206,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
|
|
|
try {
|
|
|
// 尝试获取锁,等待时间5秒,锁过期时间30秒
|
|
|
- boolean isLocked = lock.tryLock(5, 30, TimeUnit.SECONDS);
|
|
|
+ boolean isLocked = lock.tryLock(5, 60, TimeUnit.SECONDS);
|
|
|
if (!isLocked) {
|
|
|
logger.warn("获取锁失败,用户ID:{},视频ID:{}", param.getUserId(), param.getVideoId());
|
|
|
return R.error("操作频繁,请稍后再试!");
|