|
@@ -540,7 +540,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
|
|
|
// 单声部计算用户总分排名用户信息
|
|
|
List<ActivityRankingVo> records = getBaseMapper().selectActivityHighestScoreRankingInfo(activityPlanId, Long.parseLong(item.getKey()),
|
|
|
- 0D, 1);
|
|
|
+ 1D, 1);
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(records)) {
|
|
|
|
|
@@ -732,34 +732,53 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
// 方法调整为异常执行,预防HTTP接口调用返回超时响应
|
|
|
ThreadPool.getExecutor().submit(() -> {
|
|
|
|
|
|
- List<ActivityPlan> list = baseMapper.activityState();
|
|
|
- for (ActivityPlan plan : list) {
|
|
|
- DistributedLock.of(redissonClient)
|
|
|
- .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_STOCK.getRedisKey(plan.getId())
|
|
|
- , (id) -> {
|
|
|
- ActivityPlan activityPlan = getById(id);
|
|
|
- if (activityPlan.getActivityState() == 0) {
|
|
|
- activityPlan.setActivityState(1);
|
|
|
- baseMapper.updateById(activityPlan);
|
|
|
-
|
|
|
- //开始活动
|
|
|
- Consumer<Long> afterFunction = startActivity.get(activityPlan.getActivityType());
|
|
|
- if (!Objects.isNull(afterFunction)) {
|
|
|
- afterFunction.accept(activityPlan.getId());
|
|
|
- }
|
|
|
- } else {
|
|
|
- activityPlan.setActivityState(0);
|
|
|
- activityPlan.setRewardFlag(1);
|
|
|
- baseMapper.updateById(activityPlan);
|
|
|
-
|
|
|
- //完成活动
|
|
|
- Consumer<Long> afterFunction = successActivity.get(activityPlan.getActivityType());
|
|
|
- if (!Objects.isNull(afterFunction)) {
|
|
|
- afterFunction.accept(activityPlan.getId());
|
|
|
+ RLock lock = redissonClient.getLock(CacheNameEnum.LOCK_EVALUATION_CRON.getCode());
|
|
|
+ try {
|
|
|
+ if (lock.isLocked()) {
|
|
|
+ log.warn("activityState {}, lockName={}", DateTime.now().toString(MK.TIME_PATTERN), lock.getName());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 增加达标活动计算同步标识,前一个请求未执行完时忽略后续执行请求
|
|
|
+ lock.lock();
|
|
|
+
|
|
|
+ List<ActivityPlan> list = baseMapper.activityState();
|
|
|
+ for (ActivityPlan plan : list) {
|
|
|
+ DistributedLock.of(redissonClient)
|
|
|
+ .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_STOCK.getRedisKey(plan.getId())
|
|
|
+ , (id) -> {
|
|
|
+ ActivityPlan activityPlan = getById(id);
|
|
|
+ if (activityPlan.getActivityState() == 0) {
|
|
|
+ activityPlan.setActivityState(1);
|
|
|
+ baseMapper.updateById(activityPlan);
|
|
|
+
|
|
|
+ //开始活动
|
|
|
+ Consumer<Long> afterFunction = startActivity.get(activityPlan.getActivityType());
|
|
|
+ if (!Objects.isNull(afterFunction)) {
|
|
|
+ afterFunction.accept(activityPlan.getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ activityPlan.setActivityState(0);
|
|
|
+ activityPlan.setRewardFlag(1);
|
|
|
+ baseMapper.updateById(activityPlan);
|
|
|
+
|
|
|
+ //完成活动
|
|
|
+ Consumer<Long> afterFunction = successActivity.get(activityPlan.getActivityType());
|
|
|
+ if (!Objects.isNull(afterFunction)) {
|
|
|
+ afterFunction.accept(activityPlan.getId());
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- return true;
|
|
|
- }, plan.getId(), 10l);
|
|
|
+ return true;
|
|
|
+ }, plan.getId(), 10l);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("activityState time={}", DateTime.now().toString(MK.TIME_PATTERN), e);
|
|
|
+ } finally {
|
|
|
+ // 释放锁
|
|
|
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
+ lock.unlock(); // 删除同步标识
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
});
|