|
@@ -1,9 +1,6 @@
|
|
|
package com.fs.live.service.impl;
|
|
|
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.UUID;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
@@ -148,7 +145,7 @@ public class LiveRedConfServiceImpl extends ServiceImpl<LiveRedConfMapper, LiveR
|
|
|
@Transactional
|
|
|
public boolean claimRedPacket(RedPO red) {
|
|
|
String lockKey = REDPACKET_REMAININGLOTS_KEY + red.getRedId();
|
|
|
- List<String> keyList = Collections.emptyList();
|
|
|
+ List<String> keyList = new ArrayList<>();
|
|
|
keyList.add(lockKey);
|
|
|
|
|
|
try {
|
|
@@ -157,25 +154,33 @@ public class LiveRedConfServiceImpl extends ServiceImpl<LiveRedConfMapper, LiveR
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- LiveRedConf conf = baseMapper.selectById(red.getRedId());
|
|
|
+ LiveRedConf conf = baseMapper.selectLiveRedConfByRedId(red.getRedId());
|
|
|
if (conf == null || conf.getRedStatus() != 1) {
|
|
|
return false;
|
|
|
}
|
|
|
//redis剩余红包数
|
|
|
- Integer remaining = getRemaining(red.getRedId());
|
|
|
- if (remaining <= 0) {
|
|
|
+ // 平均分 暂时不适用redis 记录红包数
|
|
|
+// Integer remaining = getRemaining(red.getRedId());
|
|
|
+// if (remaining <= 0) {
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+ Long integral = calculateIntegralAverage(conf);
|
|
|
+ if (0L == integral) {
|
|
|
return false;
|
|
|
}
|
|
|
+ Date now = new Date();
|
|
|
//剩余金额
|
|
|
//Integer remainingNum = getRemainingNum(red.getRedId());
|
|
|
- conf.setRemaining(remaining);
|
|
|
- Long integral = calculateIntegralAverage(conf);
|
|
|
+
|
|
|
+
|
|
|
conf.setTotalSend(conf.getTotalSend() + 1);
|
|
|
+ conf.setRemaining(Math.toIntExact(conf.getTotalLots() - conf.getTotalSend()));
|
|
|
+ conf.setUpdateTime(now);
|
|
|
|
|
|
|
|
|
|
|
|
// 更新数据库和缓存
|
|
|
- baseMapper.update(conf);
|
|
|
+ baseMapper.updateLiveRedConf(conf);
|
|
|
decreaseRemainingLotsIfPossible(red.getRedId());
|
|
|
//decreaseRemainingNumIfPossible(red.getRedId(),integral);
|
|
|
|
|
@@ -185,7 +190,8 @@ public class LiveRedConfServiceImpl extends ServiceImpl<LiveRedConfMapper, LiveR
|
|
|
record.setLiveId(red.getLiveId());
|
|
|
record.setUserId(red.getUserId());
|
|
|
record.setIntegral(integral);
|
|
|
- userRedRecordMapper.insert(record);
|
|
|
+ record.setCreateTime(now);
|
|
|
+ userRedRecordMapper.insertLiveUserRedRecord(record);
|
|
|
|
|
|
// WebSocket 通知
|
|
|
//String msg = String.format("用户 %d 抢到了红包 %d,获得 %d 芳华币", userId, redId, integral);
|
|
@@ -251,7 +257,7 @@ public class LiveRedConfServiceImpl extends ServiceImpl<LiveRedConfMapper, LiveR
|
|
|
}
|
|
|
|
|
|
public void releaseLock(List<String> lockKey, String clientId) {
|
|
|
- String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
|
|
|
+ String script = "if redis.call('get', KEYS[1]) == ARGV then return redis.call('del', KEYS[1]) else return 0 end";
|
|
|
redisCache.redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), lockKey, clientId);
|
|
|
}
|
|
|
|