Jelajahi Sumber

发奖顺序问题修改

liweifan 2 tahun lalu
induk
melakukan
eb52cf274b

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java

@@ -461,6 +461,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void activityIng() {
         for (ActivityTypeEnum activityTypeEnum : activityIng.keySet()) {
             activityIng.get(activityTypeEnum).accept(null);

+ 29 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanStandardServiceImpl.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -102,26 +103,47 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
         if (CollectionUtils.isEmpty(userFirstTimes)) {
             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 : userMap.keySet()) {
+            for (Long userId : userIdSortMap.keySet()) {
+                Date createTime = userIdSortMap.get(userId);
                 //给用户发奖
-                sendUserReward(userId, detail.getId(), activityPlanRewardDtos);
+                sendUserReward(userId, detail.getId(), createTime, activityPlanRewardDtos);
             }
         } else {
-            for (Long userId : userMap.keySet()) {
+            for (Long userId : userIdSortMap.keySet()) {
+                Date createTime = userIdSortMap.get(userId);
                 List<UserFirstTime> firstTimes = userMap.get(userId);
                 if (firstTimes.size() == timeTypes.size()) {
                     //给用户发奖
-                    sendUserReward(userId, detail.getId(), activityPlanRewardDtos);
+                    sendUserReward(userId, detail.getId(), createTime, activityPlanRewardDtos);
                 }
             }
         }
         return true;
     }
 
-    private void sendUserReward(Long userId, Long activityId, List<ActivityPlanRewardDto> activityPlanRewardDtos) {
+    private void sendUserReward(Long userId, Long activityId, Date createTime, List<ActivityPlanRewardDto> activityPlanRewardDtos) {
         //给用户发奖
         List<Long> successRewardIds = activityRewardService.sendReward(userId, activityId);
 
@@ -134,13 +156,14 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 
             Optional<Long> first = successRewardIds.stream().filter(o -> o.equals(dto.getRewardId())).findFirst();
             userReward.setGrantFlag(first.isPresent() ? 1 : 0);
+            userReward.setCreateTime(createTime);
             activityUserRewardList.add(userReward);
         }
         activityUserRewardService.saveBatch(activityUserRewardList);
 
         //若没有报名则给用户报名
         YesOrNoEnum yesOrNoEnum = activityRegistrationService.getRegistration(userId, activityId);
-        if(YesOrNoEnum.NO.equals(yesOrNoEnum)){
+        if (YesOrNoEnum.NO.equals(yesOrNoEnum)) {
             ActivityRegistration registration = new ActivityRegistration();
             registration.setActivityId(activityId);
             registration.setUserId(userId);

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserFirstTimeMapper.xml

@@ -41,5 +41,6 @@
                 and t.time_ &lt;= #{param.endTime}
             </if>
         </where>
+        order by t.time_
     </select>
 </mapper>