diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java index 4ca00e21a..49e443e98 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java @@ -32,6 +32,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.*; @@ -173,30 +174,56 @@ public class GuildPolicy2Service { } - public void statMicSecond(GuildMember guildMember, Long entreTimestamp, Long timestamp) { - if(timestamp <= entreTimestamp){ + public void statMicSecond(GuildMember guildMember, Long upTimestamp, Long downTimestamp) { + if(downTimestamp <= upTimestamp){ return; } - Map durationMap = roomMicService.calUserUpMicDuration(entreTimestamp, timestamp, guildMember.getPartitionId()); - if (durationMap.size() <= 0) { - return; - } - for (Map.Entry entry : durationMap.entrySet()) { - Integer micMinutes = entry.getValue(); - String statDate = entry.getKey(); - Date date = DateUtil.parseDate(statDate); - String cycleDate; - Integer partitionId = guildMember.getPartitionId(); - if (PartitionEnum.getByPartitionId(partitionId).getClanMode().equals(Constant.ClanMode.GUILD)) { - cycleDate = CycleTimeUtil.getAgencyCycleBeginDateStr(date); - } else { - cycleDate = FullMonthCycleTimeUtil.getAgencyCycleBeginDateStr(date); - } - guildMicStatisticsPolicy2Service.updateDayMicStatistics(cycleDate, statDate, guildMember, micMinutes); - if (PartitionEnum.ENGLISH2.getId() == partitionId) { - guildMemberWeekLevelRewardV2Service.addDayDuration(partitionId, statDate, guildMember.getId(), micMinutes * 60); - } + int upMinutes = Instant.ofEpochMilli(upTimestamp) + .atZone(ZoneId.systemDefault()) + .toLocalDateTime().getMinute(); + + Instant downInstant = Instant.ofEpochMilli(downTimestamp); + int downMinutes = downInstant.atZone(ZoneId.systemDefault()) + .toLocalDateTime().getMinute(); + + int upRightScheduleMinute = upMinutes + 5 - (upMinutes%5); + int downLeftScheduleMinute = downMinutes - (downMinutes%5); + + int addMinutes; + if (downLeftScheduleMinute < upRightScheduleMinute) { + addMinutes = downMinutes - upMinutes; + } else { + addMinutes = downMinutes - downLeftScheduleMinute; + } + + if (addMinutes <= 0) { + return; + } + + Integer partitionId = guildMember.getPartitionId(); + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); + // 转换为带时区的 ZonedDateTime + Date date = Date.from(downInstant); + ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId()); + String statDate = nowZoneDateTime.format(DateTimeUtil.dateFormatter); + + String cycleDate; + if (PartitionEnum.getByPartitionId(partitionId).getClanMode().equals(Constant.ClanMode.GUILD)) { + cycleDate = CycleTimeUtil.getAgencyCycleBeginDateStr(date); + } else { + cycleDate = FullMonthCycleTimeUtil.getAgencyCycleBeginDateStr(date); + } + + this.updateDayMicStatistics(cycleDate, statDate, guildMember, addMinutes); + } + + public void updateDayMicStatistics(String cycleDate, String statDate, GuildMember guildMember, Integer micMinutes) { + Integer partitionId = guildMember.getPartitionId(); + guildMicStatisticsPolicy2Service.updateDayMicStatistics(cycleDate, statDate, guildMember, micMinutes); + + if (PartitionEnum.ENGLISH2.getId() == partitionId) { + guildMemberWeekLevelRewardV2Service.addDayDuration(partitionId, statDate, guildMember.getId(), micMinutes * 60); } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/GuildMemberRoomMicRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/GuildMemberRoomMicRecordService.java index 40725507f..97eac6649 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/GuildMemberRoomMicRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/GuildMemberRoomMicRecordService.java @@ -6,10 +6,13 @@ import com.accompany.business.model.guild.GuildMember; import com.accompany.business.param.MicQueueParam; import com.accompany.business.service.guild.GuildMemberService; import com.accompany.business.service.guildpolicy2.GuildPolicy2Service; +import com.accompany.business.util.CycleTimeUtil; +import com.accompany.business.util.FullMonthCycleTimeUtil; import com.accompany.business.vo.MicRecordVo; import com.accompany.business.vo.MicUserVo; import com.accompany.business.vo.home.PlayRoomVo; import com.accompany.common.constant.ApplicationConstant; +import com.accompany.common.constant.Constant; import com.accompany.common.redis.RedisKey; import com.accompany.common.utils.DateTimeUtil; import com.accompany.common.utils.GsonUtil; @@ -34,6 +37,7 @@ import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.ZonedDateTime; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -169,14 +173,7 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl= entreTimestamp) { - this.getMicRecordMap().remove(uid); - beginTime = micRecordVo.getStatTimeStamp() > entreTimestamp ? micRecordVo.getStatTimeStamp() : entreTimestamp; - } - guildPolicy2Service.statMicSecond(guildMember, beginTime, timestamp); + guildPolicy2Service.statMicSecond(guildMember, entreTimestamp, timestamp); this.getMicRecordMap().remove(uid); } } @@ -322,7 +319,7 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl micRecordMap = getMicRecordMap(); if (micRecordMap.isEmpty()) { return; @@ -340,7 +337,7 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl GsonUtil.getGson().fromJson(str, PlayRoomVo.class)).collect(Collectors.toMap(PlayRoomVo::getUid, v->v)); } - Long timeInMillis = Calendar.getInstance().getTimeInMillis(); + Long timeInMillis = date.getTime(); for (Long uid : uids) { MicRecordVo micRecordVo = micRecordMap.get(uid); if (ObjectUtil.isNull(micRecordVo)) { @@ -380,17 +377,26 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl 5 ? 5 : (int) splitMinutes; + guildPolicy2Service.updateDayMicStatistics(cycleDate, statDate, guildMember, addMinutes); } catch (Exception e) { log.error("statMicRecordTask uid {} roomId {} pos {} timeInMillis {}", uid, roomId, pos, timeInMillis, e); } finally { diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java index 9430fc877..631f03345 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java @@ -50,8 +50,8 @@ public class GuildPolicy2Controller { @Authorization @GetMapping("/test") - public BusiResult> listBusiResult(@RequestHeader(PUB_UID) Long uid) { - guildMemberRoomMicRecordService.statMicRecordTask4GuildPolicy2();; + public BusiResult> listBusiResult(@RequestHeader(PUB_UID) Long uid, String nowDateTime) { + guildMemberRoomMicRecordService.statMicRecordTask4GuildPolicy2(DateUtil.parseDateTime(nowDateTime)); return guildPolicy2Service.getCycleDates(uid); } diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildMemberMicTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildMemberMicTask.java index dd08516d6..261a4fa2b 100644 --- a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildMemberMicTask.java +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildMemberMicTask.java @@ -6,6 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.util.Date; + @Component @Slf4j public class GuildMemberMicTask { @@ -16,7 +18,7 @@ public class GuildMemberMicTask { @Scheduled(cron = "0 0/5 * * * ?") public void micStatTask() { log.info("micStatTask start"); - guildMemberRoomMicRecordService.statMicRecordTask4GuildPolicy2(); + guildMemberRoomMicRecordService.statMicRecordTask4GuildPolicy2(new Date()); log.info("micStatTask end"); } }