|
@@ -1,25 +1,41 @@
|
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.search.UserFirstTimeSearch;
|
|
|
-import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
-import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
-import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanStandard;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.UserFirstTime;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanStandardService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ActivityRegistrationService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.UserFirstTimeService;
|
|
|
import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
|
|
|
-import com.yonge.cooleshow.common.enums.*;
|
|
|
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
|
|
|
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
|
|
|
+import com.yonge.cooleshow.common.enums.ConditionMethodEnum;
|
|
|
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
|
|
|
import com.yonge.toolset.payment.util.DistributedLock;
|
|
|
+import org.apache.commons.collections.MapUtils;
|
|
|
+import org.joda.time.DateTime;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
-import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.*;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@@ -94,52 +110,53 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
|
|
|
|
|
|
String timeType = planStandard.getCondition();
|
|
|
search.setTimeType(timeType);
|
|
|
- List<String> timeTypes = WrapperUtil.toList(timeType);
|
|
|
|
|
|
- List<UserFirstTime> userFirstTimes = userFirstTimeService.selectAllList(search);
|
|
|
- if (CollectionUtils.isEmpty(userFirstTimes)) {
|
|
|
+ // 达标活动匹配条件数
|
|
|
+ int conditionNum = planStandard.getCondition().split(",").length;
|
|
|
+
|
|
|
+ // 用户激活时间
|
|
|
+ Map<Long, List<Long>> userActiveTimeMap = userFirstTimeService.selectAllList(search).stream()
|
|
|
+ .collect(Collectors.groupingBy(UserFirstTime::getUserId,
|
|
|
+ Collectors.mapping(x -> new DateTime(x.getTime()).getMillis(), Collectors.toList())));
|
|
|
+
|
|
|
+ if (MapUtils.isEmpty(userActiveTimeMap)) {
|
|
|
return true;
|
|
|
}
|
|
|
- Map<Long, Date> userIdSortMap = new LinkedHashMap<>();
|
|
|
- if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
|
|
|
- for (int i = 0; i < userFirstTimes.size(); i++) {
|
|
|
- UserFirstTime userFirstTime = userFirstTimes.get(i);
|
|
|
- if (null == userIdSortMap.get(userFirstTime.getUserId())) {
|
|
|
- userIdSortMap.put(userFirstTime.getUserId(), userFirstTime.getTime());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (int i = (userFirstTimes.size() - 1); i >= 0; i--) {
|
|
|
- UserFirstTime userFirstTime = userFirstTimes.get(i);
|
|
|
- if (null == userIdSortMap.get(userFirstTime.getUserId())) {
|
|
|
- userIdSortMap.put(userFirstTime.getUserId(), userFirstTime.getTime());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
List<ActivityPlanRewardDto> activityPlanRewardDtos = activityPlanRewardService.queryActivityPlanReward(activityId);
|
|
|
- Map<Long, List<UserFirstTime>> userMap = userFirstTimes.stream().collect(Collectors.groupingBy(UserFirstTime::getUserId));
|
|
|
|
|
|
- if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
|
|
|
- for (Long userId : userIdSortMap.keySet()) {
|
|
|
- Date createTime = userIdSortMap.get(userId);
|
|
|
- //给用户发奖
|
|
|
- sendUserReward(userId, detail.getId(), createTime, activityPlanRewardDtos);
|
|
|
- }
|
|
|
- } else {
|
|
|
- List<Long> mainList = new ArrayList<>();
|
|
|
- mainList.addAll(userIdSortMap.keySet());
|
|
|
- Collections.reverse(mainList);
|
|
|
-
|
|
|
- for (Long userId : mainList) {
|
|
|
- Date createTime = userIdSortMap.get(userId);
|
|
|
- List<UserFirstTime> firstTimes = userMap.get(userId);
|
|
|
- if (firstTimes.size() == timeTypes.size()) {
|
|
|
- //给用户发奖
|
|
|
- sendUserReward(userId, detail.getId(), createTime, activityPlanRewardDtos);
|
|
|
+ // 用户信息
|
|
|
+ for (Map.Entry<Long, List<Long>> entry : userActiveTimeMap.entrySet()) {
|
|
|
+
|
|
|
+ // 奖品信息
|
|
|
+ for (ActivityPlanRewardDto item : activityPlanRewardDtos) {
|
|
|
+
|
|
|
+ if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
|
|
|
+
|
|
|
+ // 满足其一
|
|
|
+ long timestamp = entry.getValue().stream().mapToLong(Long::longValue).min().orElse(0L);
|
|
|
+
|
|
|
+ if (timestamp > 0) {
|
|
|
+ //给用户发奖
|
|
|
+ sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // 全部满足
|
|
|
+ long timestamp = entry.getValue().stream().mapToLong(Long::longValue).max().orElse(0L);
|
|
|
+
|
|
|
+ if (timestamp > 0 && entry.getValue().size() == conditionNum) {
|
|
|
+
|
|
|
+ //给用户发奖
|
|
|
+ sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|