소스 검색

评测、分享活动增加时间列显示

Eric 3 년 전
부모
커밋
6b35ae12ba

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java

@@ -51,4 +51,11 @@ public interface ActivityEvaluationRecordDao extends BaseMapper<ActivityEvaluati
 	ActivityRankingVo queryUserRanking(@Param("activityPlanId") Long activityPlanId, @Param("activityEvaluationId") Long activityEvaluationId, @Param("userId") Long userId);
 	
 	ActivityEvaluationRecord queryLastestRecord(@Param("activityPlanId") Long activityPlanId, @Param("userId") Long userId);
+
+	/**
+	 * 用户活动最高排名信息
+	 * @param userIds 用户ID
+	 * @return List<ActivityEvaluationRecord>
+	 */
+    List<ActivityEvaluationRecord> selectUserHighestRankingInfo(@Param("activityId") Long activityId, @Param("userIds") List<Long> userIds);
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java

@@ -79,4 +79,12 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
 	 * @return
 	 */
 	ActivityRankingVo queryUserRanking(Long activityPlanId, Long activityEvaluationId, Long userId);
+
+	/**
+	 * 用户活动最高排名信息
+	 * @param activityId 活动ID
+	 * @param userIds 用户ID
+	 * @return List<ActivityEvaluationRecord>
+	 */
+	List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds);
 }

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

@@ -3,7 +3,9 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
+import com.google.common.collect.Lists;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -99,4 +101,24 @@ public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEva
 		return baseMapper.queryUserRanking(activityPlanId, activityEvaluationId, userId);
 	}
 
+    /**
+     * 用户活动最高排名信息
+     *
+     * @param activityId 活动ID
+     * @param userIds 用户ID
+     * @return List<ActivityEvaluationRecord>
+     */
+    @Override
+    public List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds) {
+
+        if (CollectionUtils.isEmpty(userIds)) {
+            return Lists.newArrayList();
+        }
+
+        // 用户最高排名信息
+        List<ActivityEvaluationRecord> records = getBaseMapper().selectUserHighestRankingInfo(activityId, userIds);
+
+        return Optional.ofNullable(records).orElse(Lists.newArrayList());
+    }
+
 }

+ 41 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRegistrationServiceImpl.java

@@ -2,29 +2,65 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+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.entity.ActivityRegistration;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRegistrationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRegistrationSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRegistrationDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityRegistrationService;
 
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class ActivityRegistrationServiceImpl extends ServiceImpl<ActivityRegistrationDao, ActivityRegistration> implements ActivityRegistrationService {
-    private final static Logger log = LoggerFactory.getLogger(ActivityRegistrationServiceImpl.class);
 
+    @Autowired
+    private ActivityEvaluationRecordService activityEvaluationRecordService;
 	@Override
     public ActivityRegistrationVo detail(Long id) {
         return baseMapper.detail(id);
     }
     
     @Override
-    public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
+    public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query) {
+
+        // 活动参与用户信息
+        List<ActivityRegistrationVo> activityUserInfos = baseMapper.selectPage(page, query);
+
+        List<Long> userIds = activityUserInfos.stream()
+                .map(ActivityRegistration::getUserId).distinct().collect(Collectors.toList());
+
+        // 查询用户活动评测获排名最高记录
+        if (CollectionUtils.isNotEmpty(userIds)) {
+
+            Map<Long, ActivityEvaluationRecord> collect = activityEvaluationRecordService.queryActivityUserHighestRankingInfo(query.getActivityId(), userIds).stream()
+                    .collect(Collectors.toMap(ActivityEvaluationRecord::getUserId, Function.identity(), (o, n) -> n));
+
+            ActivityEvaluationRecord record;
+            for (ActivityRegistrationVo item : activityUserInfos) {
+
+                if (collect.containsKey(item.getUserId())) {
+
+                    record = collect.get(item.getUserId());
+                    // 重置当前时间为用户最高排名时间
+                    item.score(record.getScore())
+                            .times(record.getTimes())
+                            .setCreateTime(record.getCreateTime());
+                }
+            }
+        }
+
+        return page.setRecords(activityUserInfos);
     }
 
     @Override

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRegistrationVo.java

@@ -36,6 +36,12 @@ public class ActivityRegistrationVo extends ActivityRegistration{
 	@ApiModelProperty("真实姓名")
 	private String realName;
 
+	// 用户高最排名信息
+	@ApiModelProperty("最高排名分数")
+	private Double score;
+	@ApiModelProperty("最高排名次数")
+	private Integer times;
+
 	public String getRealName() {
 		return realName;
 	}
@@ -99,4 +105,30 @@ public class ActivityRegistrationVo extends ActivityRegistration{
 	public void setRewardFlag(Boolean rewardFlag) {
 		this.rewardFlag = rewardFlag;
 	}
+
+	public Double getScore() {
+		return score;
+	}
+
+	public void setScore(Double score) {
+		this.score = score;
+	}
+
+	public Integer getTimes() {
+		return times;
+	}
+
+	public void setTimes(Integer times) {
+		this.times = times;
+	}
+
+	public ActivityRegistrationVo score(Double score) {
+		this.score = score;
+		return this;
+	}
+
+	public ActivityRegistrationVo times(Integer times) {
+		this.times = times;
+		return this;
+	}
 }

+ 27 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml

@@ -70,4 +70,31 @@
 		from activity_evaluation_record t 
 		where t.activity_id_ = #{activityPlanId} and t.user_id_ = #{userId} and t.score_ >= 0 order by id_ desc limit 1
     </select>
+
+    <!--用户活动最高排名信息-->
+    <select id="selectUserHighestRankingInfo"
+            resultType="com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord">
+        SELECT t.rownum, t.score, t.times, t.id, t.createTime, t.userId FROM
+            (SELECT
+                 @rownum :=@rownum + 1 AS rownum,
+                 t1.score_ AS score,
+                 t1.times_ AS times ,
+                 t1.id_ AS id,
+                 t1.user_id_ AS userId,
+                 t1.create_time_ AS createTime,
+                 t1.evaluation_id_ AS evaluationId
+             FROM
+                 (SELECT @rownum := 0) r,
+                 activity_evaluation_record t1
+             WHERE
+                 t1.activity_id_ = #{activityId}
+             ORDER BY
+                 t1.score_ DESC,
+                 t1.times_ ASC,
+                 t1.id_ ASC
+             ) t
+        WHERE t.userId IN (<foreach collection="userIds" separator="," item="item">#{item}</foreach>)
+        GROUP BY t.userId ORDER BY t.rownum ASC
+    </select>
+    <!--用户活动最高排名信息-->
 </mapper>