|  | @@ -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(); // 删除同步标识
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          });
 |