主播周奖励-在麦时长-vo
This commit is contained in:
@@ -22,6 +22,14 @@ public class GuildMemberWeekLevelRewardItemVo {
|
|||||||
private BigDecimal preMaxNum;
|
private BigDecimal preMaxNum;
|
||||||
@ApiModelProperty("奖励")
|
@ApiModelProperty("奖励")
|
||||||
private BigDecimal rewardNum;
|
private BigDecimal rewardNum;
|
||||||
|
|
||||||
|
@ApiModelProperty("在麦时长进度")
|
||||||
|
private Integer micDurationProcessNum;
|
||||||
|
@ApiModelProperty("在麦时长上限")
|
||||||
|
private Integer micDurationMaxNum;
|
||||||
|
@ApiModelProperty("在麦时长奖励")
|
||||||
|
private BigDecimal micDurationBonus;
|
||||||
|
|
||||||
@ApiModelProperty("状态012")
|
@ApiModelProperty("状态012")
|
||||||
private Byte status;
|
private Byte status;
|
||||||
|
|
||||||
|
@@ -21,7 +21,7 @@ public class GuildMemberRoomMicListener implements ApplicationListener<GuildMemb
|
|||||||
public void onApplicationEvent(GuildMemberRoomMicEvent event) {
|
public void onApplicationEvent(GuildMemberRoomMicEvent event) {
|
||||||
GuildMemberRoomMicRecord record = (GuildMemberRoomMicRecord) event.getSource();
|
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.time.*;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class GuildMemberRoomMicDayDurationService {
|
public class GuildMemberRoomMicDayDurationService {
|
||||||
@@ -17,29 +19,34 @@ public class GuildMemberRoomMicDayDurationService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RedissonClient redissonClient;
|
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);
|
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
|
||||||
ZonedDateTime upTimeZdt = DateTimeUtil.convertWithZoneId(upTime, partitionEnum.getZoneId());
|
ZonedDateTime upTimeZdt = DateTimeUtil.convertWithZoneId(upTime, partitionEnum.getZoneId());
|
||||||
ZonedDateTime downTimeZdt = DateTimeUtil.convertWithZoneId(downTime, 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) {
|
public void add(String monday, Integer partitionId, String date, Long uid, Integer seconds) {
|
||||||
String cacheKey = getCacheKey(monday);
|
String cacheKey = getCacheKey(monday, partitionId);
|
||||||
RMap<String, Integer> countMap = redissonClient.getMap(cacheKey);
|
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);
|
Integer after = countMap.addAndGet(key, seconds);
|
||||||
//todo log
|
//todo log
|
||||||
countMap.expireAsync(Duration.ofDays(14));
|
countMap.expireAsync(Duration.ofDays(14));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getCacheKey(String monday){
|
public String getCacheKey(String monday, Integer partitionId){
|
||||||
return RedisKey.guild_member_room_mic_day_duration.getKey(monday);
|
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())) {
|
if (upTimeZdt.toLocalDate().equals(downTimeZdt.toLocalDate())) {
|
||||||
// 同一天,计算时间差
|
// 同一天,计算时间差
|
||||||
@@ -48,7 +55,7 @@ public class GuildMemberRoomMicDayDurationService {
|
|||||||
String monday = upTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
String monday = upTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||||
String date = upTimeZdt.format(DateTimeUtil.dateFormatter);
|
String date = upTimeZdt.format(DateTimeUtil.dateFormatter);
|
||||||
|
|
||||||
add(monday, date, guildMemberId, (int) seconds);
|
add(monday, partitionId, date, uid, (int) seconds);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -61,7 +68,7 @@ public class GuildMemberRoomMicDayDurationService {
|
|||||||
String upMonday = upTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
String upMonday = upTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||||
String upDate = upTimeZdt.format(DateTimeUtil.dateFormatter);
|
String upDate = upTimeZdt.format(DateTimeUtil.dateFormatter);
|
||||||
|
|
||||||
add(upMonday, upDate, guildMemberId, (int) secondsToEndOfDay);
|
add(upMonday, partitionId, upDate, uid, (int) secondsToEndOfDay);
|
||||||
|
|
||||||
// 2. 计算第二天开始时间到downTimeZdt的秒数差
|
// 2. 计算第二天开始时间到downTimeZdt的秒数差
|
||||||
LocalTime downTime = downTimeZdt.toLocalTime();
|
LocalTime downTime = downTimeZdt.toLocalTime();
|
||||||
@@ -70,7 +77,7 @@ public class GuildMemberRoomMicDayDurationService {
|
|||||||
String downMonday = downTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
String downMonday = downTimeZdt.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||||
String downDate = downTimeZdt.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.exception.ServiceException;
|
||||||
import com.accompany.core.util.I18NMessageSourceUtil;
|
import com.accompany.core.util.I18NMessageSourceUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import io.swagger.models.auth.In;
|
||||||
import org.redisson.api.RMap;
|
import org.redisson.api.RMap;
|
||||||
import org.redisson.api.RedissonClient;
|
import org.redisson.api.RedissonClient;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -31,6 +32,7 @@ import java.math.BigDecimal;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWeekLevelRewardMapper, GuildMemberWeekLevelReward> {
|
public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWeekLevelRewardMapper, GuildMemberWeekLevelReward> {
|
||||||
@@ -45,9 +47,14 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
|||||||
private SendSysMsgService sendSysMsgService;
|
private SendSysMsgService sendSysMsgService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private GuildMemberWeekLevelRewardRecordMapper recordMapper;
|
private GuildMemberWeekLevelRewardRecordMapper recordMapper;
|
||||||
|
@Autowired
|
||||||
|
private GuildMemberRoomMicDayDurationService micDayDurationService;
|
||||||
|
|
||||||
private final String startMonday = "2024-10-28";
|
private final String startMonday = "2024-10-28";
|
||||||
|
|
||||||
|
private int validDaySeconds = 120 * 60;
|
||||||
|
private int micDurationDayMax = 5;
|
||||||
|
|
||||||
public GuildMemberWeekLevelRewardVo getThisWeekLevelRewardVo(Long uid, Integer partitionId) {
|
public GuildMemberWeekLevelRewardVo getThisWeekLevelRewardVo(Long uid, Integer partitionId) {
|
||||||
|
|
||||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(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);
|
Map<String, Number> userProcessMap = getWeekMap(monday, partitionId).getAll(keySet);
|
||||||
BigDecimal userProcess = new BigDecimal(userProcessMap.getOrDefault(key, BigDecimal.ZERO).toString());
|
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<>();
|
List<GuildMemberWeekLevelRewardItemVo> itemVoList = new ArrayList<>();
|
||||||
vo.setItemList(itemVoList);
|
vo.setItemList(itemVoList);
|
||||||
|
|
||||||
@@ -127,6 +143,10 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
|||||||
itemVo.setMaxNum(totalProcessNum);
|
itemVo.setMaxNum(totalProcessNum);
|
||||||
itemVo.setPreMaxNum(preProcessNum);
|
itemVo.setPreMaxNum(preProcessNum);
|
||||||
itemVo.setRewardNum(levelReward.getRewardNum());
|
itemVo.setRewardNum(levelReward.getRewardNum());
|
||||||
|
|
||||||
|
itemVo.setMicDurationProcessNum(micValidDay);
|
||||||
|
itemVo.setMicDurationMaxNum(micDurationDayMax);
|
||||||
|
itemVo.setMicDurationBonus(levelReward.getMicDurationBonus());
|
||||||
itemVo.setStatus(status);
|
itemVo.setStatus(status);
|
||||||
|
|
||||||
itemVoList.add(itemVo);
|
itemVoList.add(itemVo);
|
||||||
|
Reference in New Issue
Block a user