主播周奖励-在麦时长-vo
This commit is contained in:
@@ -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;
|
||||
|
||||
|
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user