fillUserInfoAndGift

This commit is contained in:
2024-12-11 17:10:53 +08:00
committed by hokli
parent 5301c1a24c
commit ff0e525a72
17 changed files with 353 additions and 13 deletions

View File

@@ -0,0 +1,22 @@
package com.accompany.core.vo;
import com.accompany.common.annotation.ReplaceAppDomain;
import com.accompany.core.annotation.I18n;
import lombok.Data;
@Data
public class FillVo {
@ReplaceAppDomain
private String avatar;
private Long erbanNo;
private String nick;
@ReplaceAppDomain
private String loverAvatar;
private Long loverErbanNo;
private String loverNick;
@ReplaceAppDomain
private String picUrl;
@I18n(className = "Gift", fieldName = "giftName")
private String giftName;
private Integer giftId;
}

View File

@@ -10,6 +10,8 @@ public class SplashVo {
private String link;
private Integer type;
private FillVo fillVo;
public String getPict() {
return pict;
}
@@ -33,4 +35,12 @@ public class SplashVo {
public void setType(Integer type) {
this.type = type;
}
public FillVo getFillVo() {
return fillVo;
}
public void setFillVo(FillVo fillVo) {
this.fillVo = fillVo;
}
}

View File

@@ -1,6 +1,7 @@
package com.accompany.business.vo.firstpage;
import com.accompany.common.annotation.ReplaceAppDomain;
import com.accompany.core.vo.FillVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -79,4 +80,6 @@ public class FirstPageBannerVo {
*/
@ApiModelProperty("banner链接")
private String bannerUrl;
private FillVo fillVo;
}

View File

@@ -482,4 +482,32 @@ public class WeekStarService extends BaseService {
}
return vo;
}
/**
* 只从缓存里面拿数据,使用需要注意
* @param partitionId
* @param limit
* @return
*/
public List<WeekStarStatis> lastWeekTop(Integer partitionId, Integer limit) {
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
String zoneId = null != partitionInfo? partitionInfo.getZoneId(): ZoneId.systemDefault().getId();
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(zoneId);
ZonedDateTime monday = zdt.with(DayOfWeek.MONDAY);
String lastKey = monday.minusWeeks(1L).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_));
WeekStarConfig lastConfig = weekStarConfigService.getWeekStarConfig(lastKey);
String weekStarVoStr = jedisService.hget(RedisKey.week_star_rank.getKey(WeekStarRankTypeEnum.LEVEL.getValue().toString(), partitionId.toString()), lastConfig.getId());
if (StringUtils.isBlank(weekStarVoStr)) {
return Collections.emptyList();
}
WeekStarVo weekStarVo = JSON.parseObject(weekStarVoStr, WeekStarVo.class);
List<WeekStarStatis> weekStarRankList = weekStarVo.getWeekStarRankList();
if (CollectionUtils.isEmpty(weekStarRankList)) {
return Collections.emptyList();
}
if (limit > weekStarRankList.size()) {
return weekStarRankList;
}
return weekStarRankList.subList(0, limit);
}
}

View File

@@ -43,8 +43,6 @@ public class ActivityOfCpService {
@Autowired
private ActivityH5AwardRecordService activityH5AwardRecordService;
@Autowired
private ActivityH5RecordService activityH5RecordService;
@Autowired
private ActivityRankRuleService activityRankRuleService;
@Autowired
private RelationUserService relationUserService;
@@ -83,16 +81,16 @@ public class ActivityOfCpService {
List<CpUserVo> topCpList = topCpList(zonedDateTime, partitionId, 6);
List<SquareCpUserVo> squareCpList = squareCpList(zonedDateTime, partitionId, 10);
List<CpUserVo> thisWeekCpRank = thisWeekCpRank(currentDate, partitionId, 29);
List<CpUserVo> weekCpRank = weekCpRank(currentDate, partitionId, 29);
//获取本轮活动结束时间
Long endDate = getEndDate(zonedDateTime).toInstant().toEpochMilli();
return ActivityH5CpRankVo.builder()
.topCpList(topCpList)
.squareCpList(squareCpList)
.thisWeekCpRank(thisWeekCpRank)
.thisWeekCpRank(weekCpRank)
.endTime(endDate)
.partitionId(partitionId)
.myCpRank(getMyRanking(thisWeekCpRank, currentDate, partitionId, uid))
.myCpRank(getMyRanking(weekCpRank, currentDate, partitionId, uid))
.build();
}
@@ -109,7 +107,7 @@ public class ActivityOfCpService {
weekSize--;
zonedDateTime = zonedDateTime.minusDays(7);
String weekBeginKey = activityRankRuleService.getCurrentWeekBeginKey(zonedDateTime);
List<CpUserVo> userVos = thisWeekCpRank(weekBeginKey, partitionId, 0);
List<CpUserVo> userVos = weekCpRank(weekBeginKey, partitionId, 0);
if (CollectionUtils.isEmpty(userVos)) {
continue;
}
@@ -129,7 +127,7 @@ public class ActivityOfCpService {
squareCpUserVo.setBeginDate(activityRankRuleService.getWeekBeginDateTime(zonedDateTime).toInstant().toEpochMilli());
squareCpUserVo.setEndDate(activityRankRuleService.getWeekEndDateTime(zonedDateTime).toInstant().toEpochMilli());
String weekBeginKey = activityRankRuleService.getCurrentWeekBeginKey(zonedDateTime);
List<CpUserVo> userVos = thisWeekCpRank(weekBeginKey, partitionId, 2);
List<CpUserVo> userVos = weekCpRank(weekBeginKey, partitionId, 2);
if (CollectionUtils.isEmpty(userVos)) {
continue;
}
@@ -181,7 +179,7 @@ public class ActivityOfCpService {
return activityRankRuleService.getRankKey4String(activityType(), currentDate, partitionId.toString());
}
private List<CpUserVo> thisWeekCpRank(String date, Integer partitionId, Integer limit) {
private List<CpUserVo> weekCpRank(String date, Integer partitionId, Integer limit) {
RScoredSortedSet<String> scoredSortedSet = this.getCurrentDate(date, partitionId);
Collection<ScoredEntry<String>> typedTuples = scoredSortedSet.entryRangeReversed(0, limit);
if (CollectionUtils.isEmpty(typedTuples)) {
@@ -262,7 +260,7 @@ public class ActivityOfCpService {
String format = zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
log.info("ActivityOfCpService.taskpartitionId:{},date:{},zonedDateTime:{}", partitionEnum.name(), DateUtil.formatDateTime(date), format);
String weekBeginKey = activityRankRuleService.getCurrentWeekBeginKey(zonedDateTime);
List<CpUserVo> cpUserVos = thisWeekCpRank(weekBeginKey, partitionEnum.getId(), 2);
List<CpUserVo> cpUserVos = weekCpRank(weekBeginKey, partitionEnum.getId(), 2);
if (CollectionUtils.isEmpty(cpUserVos)) {
log.info("ActivityOfCpService.taskemptyList");
return;
@@ -284,4 +282,11 @@ public class ActivityOfCpService {
String weekBeginKey = activityRankRuleService.getCurrentWeekBeginKey(zonedDateTime);
getCurrentDate(weekBeginKey, partitionId).remove(uidAppendByAsc);
}
public List<CpUserVo> lastWeekCpTop(Integer partitionId, final Integer limit) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId());
String weekBeginKey = activityRankRuleService.getLastWeekBeginKey(zonedDateTime);
return weekCpRank(weekBeginKey, partitionId, limit);
}
}

View File

@@ -144,9 +144,13 @@ public class ActivityOfSpecialGiftService {
.build();
}
public static void main(String[] args) {
PartitionEnum partition = PartitionEnum.ARAB;
ZonedDateTime zonedDateTime =ZonedDateTime.of(2024, 12, 05, 0, 0, 0, 0, ZoneId.of(partition.getZoneId()));
ZonedDateTime[] superGiftSendDate = getSuperGiftSendDate(zonedDateTime, partition);
public List<ActivityH5GiftVo> lastWeekGiftRank(Integer partitionId, Integer limit) {
if (partitionId != PartitionEnum.ARAB.getId()) {
return null;
}
ZonedDateTime zonedDateTime = activityRankRuleService.getCurrentZoneDate(partitionId);
String lastWeekBeginDate = activityRankRuleService.getLastWeekBeginKey(zonedDateTime);
return activityRankRuleService.getRankGiftVos(activityType(), limit, getGiftKey(partitionId, giftNumSplit, lastWeekBeginDate));
}
}

View File

@@ -521,6 +521,10 @@ public class ActivityRankRuleService {
return getWeekBeginDateTime(zonedDateTime).format(dateFormatter_);
}
public String getLastWeekBeginKey(ZonedDateTime zonedDateTime) {
return this.getCurrentWeekBeginKey(zonedDateTime.minusDays(7));
}
/**
* 获取当前周开始时间
* @param zonedDateTime

View File

@@ -0,0 +1,19 @@
package com.accompany.business.service.fillstrategy;
import com.accompany.business.service.fillstrategy.strategy.AbstractFillStrategy;
import com.accompany.business.service.fillstrategy.strategy.FillConstant;
import com.accompany.core.vo.FillVo;
import org.springframework.stereotype.Component;
@Component
public class BaseFillStrategy extends AbstractFillStrategy {
@Override
public FillVo calFillVo(Integer partitionId) {
return null;
}
@Override
public Integer getSkipType() {
return FillConstant.SkipType.defineUri;
}
}

View File

@@ -0,0 +1,52 @@
package com.accompany.business.service.fillstrategy;
import com.accompany.business.service.activity.h5.ActivityOfCpService;
import com.accompany.business.service.fillstrategy.strategy.AbstractFillStrategy;
import com.accompany.business.service.fillstrategy.strategy.FillConstant;
import com.accompany.core.vo.FillVo;
import com.accompany.business.vo.activity.h5.CpUserVo;
import com.accompany.core.enumeration.PartitionEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class CPListFillStrategy extends AbstractFillStrategy {
@Autowired
private ActivityOfCpService activityOfCpService;
@Override
public FillVo calFillVo(Integer partitionId) {
try {
if (partitionId == null) {
partitionId = PartitionEnum.ENGLISH.getId();
}
List<CpUserVo> cpUserVos = activityOfCpService.lastWeekCpTop(partitionId, 1);
if (CollectionUtils.isEmpty(cpUserVos)) {
return null;
}
FillVo fillVo = new FillVo();
CpUserVo cpUserVo = cpUserVos.get(0);
fillVo.setNick(cpUserVo.getLeftNick());
fillVo.setLoverNick(cpUserVo.getRightNick());
fillVo.setAvatar(cpUserVo.getLeftAvatar());
fillVo.setLoverAvatar(cpUserVo.getRightAvatar());
fillVo.setErbanNo(cpUserVo.getLeftErbanNo());
fillVo.setLoverErbanNo(cpUserVo.getRightErbanNo());
fillVo.setLoverNick(cpUserVo.getRightNick());
return fillVo;
} catch (Exception e) {
log.error("CPListFillStrategy,partitionId:{},e:{}", partitionId, e.getMessage(), e);
}
return null;
}
@Override
public Integer getSkipType() {
return FillConstant.SkipType.h5CP;
}
}

View File

@@ -0,0 +1,48 @@
package com.accompany.business.service.fillstrategy;
import com.accompany.business.service.activity.h5.ActivityOfSpecialGiftService;
import com.accompany.business.service.fillstrategy.strategy.AbstractFillStrategy;
import com.accompany.business.service.fillstrategy.strategy.FillConstant;
import com.accompany.core.vo.FillVo;
import com.accompany.business.vo.activity.h5.ActivityH5GiftVo;
import com.accompany.core.enumeration.PartitionEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Slf4j
@Component
public class CustomizedGiftFillStrategy extends AbstractFillStrategy {
@Autowired
private ActivityOfSpecialGiftService specialGiftService;
@Override
public FillVo calFillVo(Integer partitionId) {
try {
if (partitionId == null) {
partitionId = PartitionEnum.ENGLISH.getId();
}
List<ActivityH5GiftVo> activityH5GiftVos = specialGiftService.lastWeekGiftRank(partitionId, 1);
if (CollectionUtils.isEmpty(activityH5GiftVos)) {
return null;
}
ActivityH5GiftVo lastWeekTop = activityH5GiftVos.get(0);
FillVo fillVo = new FillVo();
fillVo.setPicUrl(lastWeekTop.getPicUrl());
fillVo.setGiftName(lastWeekTop.getGiftName());
fillVo.setGiftId(lastWeekTop.getGiftId());
return fillVo;
} catch (Exception e) {
log.error("CustomizedGiftFillStrategy,partitionId:{},e:{}", partitionId, e.getMessage(), e);
}
return null;
}
@Override
public Integer getSkipType() {
return FillConstant.SkipType.h5Custom;
}
}

View File

@@ -0,0 +1,48 @@
package com.accompany.business.service.fillstrategy;
import com.accompany.business.service.activity.WeekStarService;
import com.accompany.business.service.fillstrategy.strategy.AbstractFillStrategy;
import com.accompany.business.service.fillstrategy.strategy.FillConstant;
import com.accompany.core.vo.FillVo;
import com.accompany.business.vo.activity.weekstar.WeekStarStatis;
import com.accompany.core.enumeration.PartitionEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class WeekStarFillStrategy extends AbstractFillStrategy {
@Autowired
private WeekStarService weekStarService;
@Override
public FillVo calFillVo(Integer partitionId) {
try {
if (partitionId == null) {
partitionId = PartitionEnum.ENGLISH.getId();
}
List<WeekStarStatis> weekStarStatisList = weekStarService.lastWeekTop(partitionId, 1);
if (CollectionUtils.isEmpty(weekStarStatisList)) {
return null;
}
WeekStarStatis weekStar = weekStarStatisList.get(0);
FillVo fillVo = new FillVo();
fillVo.setAvatar(weekStar.getAvatar());
fillVo.setErbanNo(weekStar.getErbanNo());
fillVo.setNick(weekStar.getNick());
return fillVo;
} catch (Exception e) {
log.error("WeekStarFillStrategy,partitionId:{},e:{}", partitionId, e.getMessage(), e);
}
return null;
}
@Override
public Integer getSkipType() {
return FillConstant.SkipType.h5WeeStar;
}
}

View File

@@ -0,0 +1,15 @@
package com.accompany.business.service.fillstrategy.strategy;
import com.accompany.core.vo.FillVo;
public abstract class AbstractFillStrategy implements FillStrategy {
@Override
public FillVo calFillVo(Integer partitionId) {
return null;
}
public Integer getSkipType() {
return FillConstant.SkipType.defineUri;
}
}

View File

@@ -0,0 +1,14 @@
package com.accompany.business.service.fillstrategy.strategy;
public interface FillConstant {
interface SkipType {
int defineUri = 1;
int room = 3;
int h5Link = 4;
int h5CP = 5;
int h5WeeStar = 6;
int h5Custom = 7;
}
}

View File

@@ -0,0 +1,45 @@
package com.accompany.business.service.fillstrategy.strategy;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class FillFactory implements ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> {
private ApplicationContext applicationContext;
private static final Map<Integer, FillStrategy> strategys = new ConcurrentHashMap<>();
public FillStrategy getStrategy(Integer skipType) {
FillStrategy strategy = strategys.get(skipType);
if (strategy == null) {
return strategys.get(FillConstant.SkipType.defineUri);
}
return strategy;
}
public synchronized void initialStrategy() {
Map<String, FillStrategy> strategyMap = applicationContext.getBeansOfType(FillStrategy.class);
strategyMap.forEach(
(name, strategy) -> {
strategys.putIfAbsent(strategy.getSkipType(), strategy);
});
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
initialStrategy();
}
}

View File

@@ -0,0 +1,12 @@
package com.accompany.business.service.fillstrategy.strategy;
import com.accompany.core.vo.FillVo;
public interface FillStrategy {
FillVo calFillVo(Integer partitionId);
Integer getSkipType();
}

View File

@@ -7,6 +7,7 @@ import com.accompany.business.model.UserLevelExperience;
import com.accompany.business.model.firstpage.FirstPageBanner;
import com.accompany.business.mybatismapper.FirstPageBannerMapper;
import com.accompany.business.mybatismapper.LevelExperienceMapper;
import com.accompany.business.service.fillstrategy.strategy.FillFactory;
import com.accompany.business.service.level.LevelService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.firstpage.FirstPageBannerVo;
@@ -47,6 +48,8 @@ public class FirstPageBannerService extends ServiceImpl<FirstPageBannerMapper, F
private LevelExperienceMapper levelExperienceMapper;
@Autowired
private LevelService levelService;
@Autowired
private FillFactory fillFactory;
private Gson gson = new Gson();
@@ -63,6 +66,7 @@ public class FirstPageBannerService extends ServiceImpl<FirstPageBannerMapper, F
if (null == u){
return Collections.emptyList();
}
Integer partitionId = u.getPartitionId();
Date now = new Date();
List<FirstPageBanner> list;
Map<String, String> bannerMap = jedisService.hgetAll(RedisKey.home_banner.getKey(type.toString()));
@@ -114,6 +118,7 @@ public class FirstPageBannerService extends ServiceImpl<FirstPageBannerMapper, F
return;
}
}
bannerVo.setFillVo(fillFactory.getStrategy(banner.getSkipType()).calFillVo(partitionId));
bannerVos.add(bannerVo);
});
return bannerVos;

View File

@@ -9,6 +9,7 @@ import com.accompany.business.model.UserLevelExperience;
import com.accompany.business.model.resource.Resource;
import com.accompany.business.model.resource.ResourceRule;
import com.accompany.business.mybatismapper.resource.ResourceMapper;
import com.accompany.business.service.fillstrategy.strategy.FillFactory;
import com.accompany.business.service.level.LevelService;
import com.accompany.business.service.resource.ResourceRuleService;
import com.accompany.business.service.resource.ResourceService;
@@ -20,6 +21,7 @@ import com.accompany.common.enums.OperateType;
import com.accompany.common.utils.AppVersionUtil;
import com.accompany.core.base.DeviceInfoContextHolder;
import com.accompany.core.base.UidContextHolder;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.Users;
import com.accompany.core.service.user.UsersBaseService;
import com.accompany.core.vo.SplashVo;
@@ -56,6 +58,9 @@ public class ResourceServiceImpl extends ServiceImpl<ResourceMapper, Resource> i
@Autowired
private UsersBaseService usersBaseService;
@Autowired
private FillFactory fillFactory;
@Override
public boolean isOpen(String code) {
return getResource(code) != null;
@@ -269,6 +274,7 @@ public class ResourceServiceImpl extends ServiceImpl<ResourceMapper, Resource> i
splash.setType(skipType);
splash.setPict(resource.getUrl());
splash.setLink(skipContent);
splash.setFillVo(fillFactory.getStrategy(skipType).calFillVo(resource.getPartitionId()));
return splash;
}
}