圣诞节活动-cp-cp排行榜-meRank改meRankList

This commit is contained in:
khalil
2023-12-18 19:02:07 +08:00
parent f9da5b10b2
commit b36570b3d0
4 changed files with 57 additions and 34 deletions

View File

@@ -112,7 +112,7 @@ public class ChristmasCpDao implements InitializingBean {
log.error("[2023圣诞节活动] {} 获取 {} 锁超时", uid, lockKey);
throw new ServiceException(BusiStatus.SERVER_BUSY);
}
Map<Long, ChristmasCpUserProp> propMap = userCpPropMap.get(uid);
Map<Long, ChristmasCpUserProp> propMap = userCpPropMap.getOrDefault(uid, new HashMap<>());
return function.apply(propMap);
} catch (InterruptedException e) {
log.error("[2023圣诞节活动] {} 获取 {} 锁异常", uid, lockKey, e);
@@ -161,11 +161,10 @@ public class ChristmasCpDao implements InitializingBean {
BeanUtils.copyProperties(cpProp, userProp);
userProp.setCpTaskStatus(new HashMap<>());
SpringContextHolder.getBean(ChristmasCpDao.class).saveUserCpProp(cpProp.getFromUid(), cpProp.getToUid(), userProp);
SpringContextHolder.getBean(ChristmasCpDao.class).saveUserCpProp(cpProp.getToUid(), cpProp.getFromUid(), userProp);
saveUserCpProp(cpProp.getFromUid(), cpProp.getToUid(), userProp);
saveUserCpProp(cpProp.getToUid(), cpProp.getFromUid(), userProp);
}
@Async
public boolean saveUserCpProp(Long fromUid, Long toUid, ChristmasCpUserProp userProp){
return withLock(fromUid, "user_cp_prop_lock", propMap->{
if (CollectionUtils.isEmpty(propMap)){

View File

@@ -23,6 +23,6 @@ public class ActivityCpRankVo {
@ApiModelProperty("排行榜")
private List<ActivityCpRankItemVo> rankList;
@ApiModelProperty("我的排行信息")
private ActivityCpRankItemVo meRank;
private List<ActivityCpRankItemVo> meRankList;
}

View File

@@ -41,7 +41,7 @@ public abstract class BaseCpRankActService<Provider extends CpRankObjectProvider
public abstract String addAndGetCpUid(CpRankActConfigDto config, Long fromUid, Long toUid, Integer giftId, Integer giftNum, Long totalGoldNum, Date sendGiftTime);
public ActivityCpRankVo getRank(String cpUid, CpRankTypeEnum rankType, String date, Integer rankSize) {
public ActivityCpRankVo getRank(List<String> cpUidList, CpRankTypeEnum rankType, String date, Integer rankSize) {
CpRankActConfigDto configDto = getRankActConfig();
@@ -83,40 +83,55 @@ public abstract class BaseCpRankActService<Provider extends CpRankObjectProvider
}
}
ActivityCpRankItemVo meRankVo = new ActivityCpRankItemVo();
meRankVo.setRanking(0);
meRankVo.setScore(0L);
CpRankObject me = provider.getRankObjectByUid(cpUid);
if (null != me){
meRankVo.setCpUid(me.getCpUid());
meRankVo.setLeftUid(me.getLeftUid());
meRankVo.setLeftErbanNo(me.getLeftErbanNo());
meRankVo.setLeftNick(me.getLeftNick());
meRankVo.setLeftAvatar(me.getLeftAvatar());
meRankVo.setRightUid(me.getRightUid());
meRankVo.setRightErbanNo(me.getRightErbanNo());
meRankVo.setRightNick(me.getRightNick());
meRankVo.setRightAvatar(me.getRightAvatar());
int rankIndex = rank.rank(me.getCpUid());
meRankVo.setRanking(rankIndex > rankSize - 1? 0: rankIndex + 1);
double score = rank.getScore(me.getCpUid());
meRankVo.setScore(BigDecimal.valueOf(score).setScale(0, RoundingMode.DOWN).longValue());
if (CollectionUtils.isEmpty(cpUidList)){
return buildActivityRankVo(rankItemVoList, Collections.emptyList(), configDto, rankType);
}
return buildActivityRankVo(rankItemVoList, meRankVo, configDto, rankType);
List<Integer> cpRankingList = rank.revRank(cpUidList);
List<Double> cpScoreList = rank.getScore(cpUidList);
Map<String, CpRankObject> objMap = provider.mapRankObjectByUids(cpUidList);
int index = 0;
List<ActivityCpRankItemVo> meRankVoList = new ArrayList<>();
for (String cpUid: cpUidList) {
ActivityCpRankItemVo cpRankItemVo = new ActivityCpRankItemVo();
cpRankItemVo.setCpUid(cpUid);
Integer cpRanking = cpRankingList.get(index);
cpRankItemVo.setRanking(null != cpRanking? cpRanking: 0);
Double cpScore = cpScoreList.get(index);
cpRankItemVo.setScore(null != cpScore? BigDecimal.valueOf(cpScore).setScale(0, RoundingMode.DOWN).longValue(): 0L);
CpRankObject cpObj = objMap.get(cpUid);
if (null != cpObj){
cpRankItemVo.setLeftUid(cpObj.getLeftUid());
cpRankItemVo.setLeftErbanNo(cpObj.getLeftErbanNo());
cpRankItemVo.setLeftNick(cpObj.getLeftNick());
cpRankItemVo.setLeftAvatar(cpObj.getLeftAvatar());
cpRankItemVo.setRightUid(cpObj.getRightUid());
cpRankItemVo.setRightErbanNo(cpObj.getRightErbanNo());
cpRankItemVo.setRightNick(cpObj.getRightNick());
cpRankItemVo.setRightAvatar(cpObj.getRightAvatar());
}
meRankVoList.add(cpRankItemVo);
index++;
}
return buildActivityRankVo(rankItemVoList, meRankVoList, configDto, rankType);
}
private ActivityCpRankVo buildActivityRankVo(List<ActivityCpRankItemVo> rankItemVoList, ActivityCpRankItemVo meRankVo,
private ActivityCpRankVo buildActivityRankVo(List<ActivityCpRankItemVo> rankItemVoList, List<ActivityCpRankItemVo> meRankVoList,
CpRankActConfigDto config, CpRankTypeEnum rankType) {
String startTime = config.getStartTime().format(dateTimeFormatter);
String endTime = config.getEndTime().format(dateTimeFormatter);
return new ActivityCpRankVo(startTime, endTime, rankType.getType(), rankItemVoList, meRankVo);
return new ActivityCpRankVo(startTime, endTime, rankType.getType(), rankItemVoList, meRankVoList);
}
protected String getRankKey(CpRankTypeEnum rankType, String date){

View File

@@ -5,6 +5,7 @@ import com.accompany.business.base.service.BaseCpRankActService;
import com.accompany.business.christmas.ChristmasCpDao;
import com.accompany.business.christmas.constant.ChristmasConstant;
import com.accompany.business.christmas.dto.ChristmasCpProp;
import com.accompany.business.christmas.dto.ChristmasCpUserProp;
import com.accompany.business.christmas.vo.ChristmasCpVo;
import com.accompany.business.common.constant.CpRankTypeEnum;
import com.accompany.business.common.dto.CpRankActConfigDto;
@@ -20,7 +21,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
@@ -70,8 +74,13 @@ public class ChristmasCpRankService extends BaseCpRankActService<CpUsersRankObje
}
public ActivityCpRankVo getRank(Long uid, CpRankTypeEnum rankType, String date) {
String cpUid = cpDao.getTheBestCpUidByUid(uid);
return super.getRank(cpUid, rankType, date, 30);
List<ChristmasCpUserProp> cpUserPropList = cpDao.listCpByUid(uid);
List<String> cpUidList = !CollectionUtils.isEmpty(cpUserPropList)?
cpDao.listCpByUid(uid).stream().map(ChristmasCpProp::getCpUid)
.limit(10)
.collect(Collectors.toList()):
Collections.emptyList();
return super.getRank(cpUidList, rankType, date, 30);
}
@Override