|
@@ -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) {
|