diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildMemberWeekLevelRewardItemVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildMemberWeekLevelRewardItemVo.java index 815dc87ca..74edc4a2b 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildMemberWeekLevelRewardItemVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildMemberWeekLevelRewardItemVo.java @@ -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; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/GuildMemberRoomMicListener.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/GuildMemberRoomMicListener.java index 4b9f99f44..da9c598b9 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/GuildMemberRoomMicListener.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/GuildMemberRoomMicListener.java @@ -21,7 +21,7 @@ public class GuildMemberRoomMicListener implements ApplicationListener 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 getWeekMicDurationMap(String monday, Integer partitionId, Set keySet){ + RMap 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); } } \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java index cac6cc33d..e2a4bc88d 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java @@ -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 { @@ -45,9 +47,14 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl userProcessMap = getWeekMap(monday, partitionId).getAll(keySet); BigDecimal userProcess = new BigDecimal(userProcessMap.getOrDefault(key, BigDecimal.ZERO).toString()); + Set 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 userMicDurationMap = micDayDurationService.getWeekMicDurationMap(monday, partitionId, micKeySet); + Integer micValidDay = (int) userMicDurationMap.values().stream().filter(seconds->seconds > 120 * 60).count(); + List itemVoList = new ArrayList<>(); vo.setItemList(itemVoList); @@ -127,6 +143,10 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl