|  | @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
		
			
				|  |  | +import com.google.common.collect.Lists;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.UserFirstTimeDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
 | 
	
	
		
			
				|  | @@ -119,6 +120,7 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 | 
	
		
			
				|  |  |          search.setStartTime(detail.getActivityStart());
 | 
	
		
			
				|  |  |          search.setEndTime(detail.getActivityEnd());
 | 
	
		
			
				|  |  |          search.setUserType(detail.getActivityClient().getCode());
 | 
	
		
			
				|  |  | +        search.setCalculationMethod(planStandard.getCalculationMethod());
 | 
	
		
			
				|  |  |          search.setTimeType(planStandard.getCondition());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 达标活动匹配条件数
 | 
	
	
		
			
				|  | @@ -151,7 +153,7 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 | 
	
		
			
				|  |  |              //log.info("dealActivityIng query={}", JSON.toJSONString(query));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // 用户达标活动获奖发送记录
 | 
	
		
			
				|  |  | -            activityUserSendRewardRecordInfo(activityId, detail, planStandard, query, conditionNum);
 | 
	
		
			
				|  |  | +            activityUserSendRewardRecordInfo(userIds, activityId, detail, planStandard, query, conditionNum);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return true;
 | 
	
	
		
			
				|  | @@ -159,17 +161,19 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 活动用户发奖记录信息
 | 
	
		
			
				|  |  | +     * @param userIds 发奖用户顺序
 | 
	
		
			
				|  |  |       * @param activityId 活动ID
 | 
	
		
			
				|  |  |       * @param detail ActivityPlanVo
 | 
	
		
			
				|  |  |       * @param planStandard ActivityPlanStandard
 | 
	
		
			
				|  |  |       * @param search UserFirstTimeSearch
 | 
	
		
			
				|  |  |       * @param conditionNum 达标活动匹配条件
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private void activityUserSendRewardRecordInfo(Long activityId,
 | 
	
		
			
				|  |  | -                                                     ActivityPlanVo detail,
 | 
	
		
			
				|  |  | -                                                     ActivityPlanStandard planStandard,
 | 
	
		
			
				|  |  | -                                                     UserFirstTimeSearch search,
 | 
	
		
			
				|  |  | -                                                     int conditionNum) {
 | 
	
		
			
				|  |  | +    private void activityUserSendRewardRecordInfo(List<Long> userIds,
 | 
	
		
			
				|  |  | +                                                  Long activityId,
 | 
	
		
			
				|  |  | +                                                  ActivityPlanVo detail,
 | 
	
		
			
				|  |  | +                                                  ActivityPlanStandard planStandard,
 | 
	
		
			
				|  |  | +                                                  UserFirstTimeSearch search,
 | 
	
		
			
				|  |  | +                                                  int conditionNum) {
 | 
	
		
			
				|  |  |          // 用户激活时间
 | 
	
		
			
				|  |  |          Map<Long, List<Long>> userActiveTimeMap = userFirstTimeService.selectAllList(search).stream()
 | 
	
		
			
				|  |  |                  .collect(Collectors.groupingBy(UserFirstTime::getUserId,
 | 
	
	
		
			
				|  | @@ -181,31 +185,38 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<ActivityPlanRewardDto> activityPlanRewardDtos = activityPlanRewardService.queryActivityPlanReward(activityId);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 用户信息
 | 
	
		
			
				|  |  | -        for (Map.Entry<Long, List<Long>> entry : userActiveTimeMap.entrySet()) {
 | 
	
		
			
				|  |  | +        // 获然用户顺序信息
 | 
	
		
			
				|  |  | +        List<Long> collect;
 | 
	
		
			
				|  |  | +        for (Long userId : userIds) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            collect = userActiveTimeMap.getOrDefault(userId, Lists.newArrayList());
 | 
	
		
			
				|  |  | +            if (CollectionUtils.isEmpty(collect)) {
 | 
	
		
			
				|  |  | +                // 没有匹配用户信息
 | 
	
		
			
				|  |  | +                continue;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  // 满足其一
 | 
	
		
			
				|  |  | -                long timestamp = entry.getValue().stream().mapToLong(Long::longValue).min().orElse(0L);
 | 
	
		
			
				|  |  | +                long timestamp = collect.stream().mapToLong(Long::longValue).min().orElse(0L);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if (timestamp > 0) {
 | 
	
		
			
				|  |  |                      //给用户发奖
 | 
	
		
			
				|  |  | -                    sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
 | 
	
		
			
				|  |  | +                    sendUserReward(userId, detail.getId(), new Date(timestamp), activityPlanRewardDtos);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  // 全部满足
 | 
	
		
			
				|  |  | -                long timestamp = entry.getValue().stream().mapToLong(Long::longValue).max().orElse(0L);
 | 
	
		
			
				|  |  | +                long timestamp = collect.stream().mapToLong(Long::longValue).max().orElse(0L);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                if (timestamp > 0 && entry.getValue().size() == conditionNum) {
 | 
	
		
			
				|  |  | +                if (timestamp > 0 && collect.size() == conditionNum) {
 | 
	
		
			
				|  |  |                      //给用户发奖
 | 
	
		
			
				|  |  | -                    sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
 | 
	
		
			
				|  |  | +                    sendUserReward(userId, detail.getId(), new Date(timestamp), activityPlanRewardDtos);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private void sendUserReward(Long userId, Long activityId, Date winningTime, List<ActivityPlanRewardDto> activityPlanRewardDtos) {
 |