主播周奖励-在麦时长-vo

This commit is contained in:
2025-08-27 20:11:18 +08:00
parent 9fb2a2a335
commit c4ea3afe78
4 changed files with 47 additions and 12 deletions

View File

@@ -22,6 +22,14 @@ public class GuildMemberWeekLevelRewardItemVo {
private BigDecimal preMaxNum;
@ApiModelProperty("奖励")
private BigDecimal rewardNum;
@ApiModelProperty("在麦时长进度")
private Integer micDurationProcessNum;
@ApiModelProperty("在麦时长上限")
private Integer micDurationMaxNum;
@ApiModelProperty("在麦时长奖励")
private BigDecimal micDurationBonus;
@ApiModelProperty("状态012")
private Byte status;

View File

@@ -21,7 +21,7 @@ public class GuildMemberRoomMicListener implements ApplicationListener<GuildMemb
public void onApplicationEvent(GuildMemberRoomMicEvent event) {
GuildMemberRoomMicRecord record = (GuildMemberRoomMicRecord) event.getSource();
service.add(record.getGuildMemberId(), record.getPartitionId(), record.getUpTime(), record.getDownTime());
service.add(record.getUid(), record.getPartitionId(), record.getUpTime(), record.getDownTime());
}
}

View File

@@ -10,6 +10,8 @@ import org.springframework.stereotype.Service;
import java.time.*;
import java.util.Date;
import java.util.Map;
import java.util.Set;
@Service
public class GuildMemberRoomMicDayDurationService {
@@ -17,29 +19,34 @@ public class GuildMemberRoomMicDayDurationService {
@Autowired
private RedissonClient redissonClient;
public void add(Long guildMemberId, Integer partitionId, Date upTime, Date downTime) {
public void add(Long uid, Integer partitionId, Date upTime, Date downTime) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime upTimeZdt = DateTimeUtil.convertWithZoneId(upTime, partitionEnum.getZoneId());
ZonedDateTime downTimeZdt = DateTimeUtil.convertWithZoneId(downTime, partitionEnum.getZoneId());
addSecondsGroupByDate(guildMemberId, upTimeZdt, downTimeZdt);
addSecondsGroupByDate(uid, partitionId, upTimeZdt, downTimeZdt);
}
public void add(String monday, String date, Long guildMemberId, Integer seconds) {
String cacheKey = getCacheKey(monday);
public void add(String monday, Integer partitionId, String date, Long uid, Integer seconds) {
String cacheKey = getCacheKey(monday, partitionId);
RMap<String, Integer> countMap = redissonClient.getMap(cacheKey);
String key = String.join("_", guildMemberId.toString(), date);
String key = String.join("_", uid.toString(), date);
Integer after = countMap.addAndGet(key, seconds);
//todo log
countMap.expireAsync(Duration.ofDays(14));
}
public String getCacheKey(String monday){
return RedisKey.guild_member_room_mic_day_duration.getKey(monday);
public String getCacheKey(String monday, Integer partitionId){
return RedisKey.guild_member_room_mic_day_duration.getKey(monday, partitionId.toString());
}
public void addSecondsGroupByDate(Long guildMemberId, ZonedDateTime upTimeZdt, ZonedDateTime downTimeZdt) {
public Map<String, Integer> getWeekMicDurationMap(String monday, Integer partitionId, Set<String> keySet){
RMap<String, Integer> countMap = redissonClient.getMap(getCacheKey(monday, partitionId));
return countMap.getAll(keySet);
}
public void addSecondsGroupByDate(Long uid, Integer partitionId, ZonedDateTime upTimeZdt, ZonedDateTime downTimeZdt) {
// 判断是否同一天
if (upTimeZdt.toLocalDate().equals(downTimeZdt.toLocalDate())) {
// 同一天,计算时间差
@@ -48,7 +55,7 @@ public class GuildMemberRoomMicDayDurationService {
String monday = upTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
String date = upTimeZdt.format(DateTimeUtil.dateFormatter);
add(monday, date, guildMemberId, (int) seconds);
add(monday, partitionId, date, uid, (int) seconds);
return;
}
@@ -61,7 +68,7 @@ public class GuildMemberRoomMicDayDurationService {
String upMonday = upTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
String upDate = upTimeZdt.format(DateTimeUtil.dateFormatter);
add(upMonday, upDate, guildMemberId, (int) secondsToEndOfDay);
add(upMonday, partitionId, upDate, uid, (int) secondsToEndOfDay);
// 2. 计算第二天开始时间到downTimeZdt的秒数差
LocalTime downTime = downTimeZdt.toLocalTime();
@@ -70,7 +77,7 @@ public class GuildMemberRoomMicDayDurationService {
String downMonday = downTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
String downDate = downTimeZdt.format(DateTimeUtil.dateFormatter);
add(downMonday, downDate, guildMemberId, (int) secondsFromStartOfDay);
add(downMonday, partitionId, downDate, uid, (int) secondsFromStartOfDay);
}
}

View File

@@ -21,6 +21,7 @@ import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.swagger.models.auth.In;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +32,7 @@ import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Service
public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWeekLevelRewardMapper, GuildMemberWeekLevelReward> {
@@ -45,9 +47,14 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
private SendSysMsgService sendSysMsgService;
@Autowired
private GuildMemberWeekLevelRewardRecordMapper recordMapper;
@Autowired
private GuildMemberRoomMicDayDurationService micDayDurationService;
private final String startMonday = "2024-10-28";
private int validDaySeconds = 120 * 60;
private int micDurationDayMax = 5;
public GuildMemberWeekLevelRewardVo getThisWeekLevelRewardVo(Long uid, Integer partitionId) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
@@ -91,6 +98,15 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
Map<String, Number> userProcessMap = getWeekMap(monday, partitionId).getAll(keySet);
BigDecimal userProcess = new BigDecimal(userProcessMap.getOrDefault(key, BigDecimal.ZERO).toString());
Set<String> micKeySet = IntStream.rangeClosed(0, 6)
.mapToObj(i->{
String dateStr = DateTimeUtil.convertDate(DateTimeUtil.addDays(mondayTime, i), DateTimeUtil.DEFAULT_DATE_PATTERN);
return String.join("_", uid.toString(), dateStr);
})
.collect(Collectors.toSet());
Map<String, Integer> userMicDurationMap = micDayDurationService.getWeekMicDurationMap(monday, partitionId, micKeySet);
Integer micValidDay = (int) userMicDurationMap.values().stream().filter(seconds->seconds > 120 * 60).count();
List<GuildMemberWeekLevelRewardItemVo> itemVoList = new ArrayList<>();
vo.setItemList(itemVoList);
@@ -127,6 +143,10 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
itemVo.setMaxNum(totalProcessNum);
itemVo.setPreMaxNum(preProcessNum);
itemVo.setRewardNum(levelReward.getRewardNum());
itemVo.setMicDurationProcessNum(micValidDay);
itemVo.setMicDurationMaxNum(micDurationDayMax);
itemVo.setMicDurationBonus(levelReward.getMicDurationBonus());
itemVo.setStatus(status);
itemVoList.add(itemVo);