房间金币大放送-上下麦克风心跳逻辑处理

This commit is contained in:
tianfeng 2026-03-04 14:31:15 +08:00
parent d85a1d8711
commit de802fb8eb

View File

@ -6,6 +6,8 @@ import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.mq.business.model.event.task.TaskApprovalEvent;
import com.red.circle.mq.rocket.business.producer.TaskMqMessage;
import com.red.circle.other.app.dto.clientobject.team.TeamMemberWorkDailyTargetCO;
import com.red.circle.other.app.dto.cmd.task.RoomDailyTaskProgressUpdateCmd;
import com.red.circle.other.app.service.task.RoomDailyTaskProgressService;
import com.red.circle.other.app.service.task.TaskService;
import com.red.circle.other.infra.common.team.TeamTargetCommon;
import com.red.circle.other.infra.database.mongo.entity.live.RoomProfile;
@ -22,6 +24,7 @@ import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.red.circle.other.inner.enums.task.RoomDailyTaskType;
import com.red.circle.other.inner.enums.team.TeamMemberTargetIndex;
import com.red.circle.tool.core.date.LocalDateTimeUtils;
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
@ -48,31 +51,49 @@ public class TeamMemberHeartbeatCmdExe {
private final TaskMqMessage taskMqMessage;
private final AdministratorService administratorService;
private final TaskService taskService;
private final RedisService redisService;
private final RoomDailyTaskProgressService roomDailyTaskProgressService;
private static final int HEARTBEAT_INTERVAL_SECONDS = 60;
public void execute(AppRoomIdCmd cmd) {
//心跳mic 每日任务
taskMqMessage.sendTask(TaskApprovalEvent.builder()
.taskId(1)
.userId(cmd.requiredReqUserId())
.day(LocalDateTimeUtils.nowFormat("yyyy-MM-dd"))
.build());
boolean admin = administratorService.existsAdmin(cmd.requiredReqUserId());
if (admin) {
taskMqMessage.sendTask(TaskApprovalEvent.builder()
.taskId(12)
.userId(cmd.requiredReqUserId())
.day(LocalDateTimeUtils.nowFormat("yyyy-MM-dd"))
.build());
}
// redisService.increment("team:heartbeat:"+cmd.requiredReqUserId(), 1);
if (Boolean.FALSE.equals(teamMemberService.existsMember(cmd.requiredReqUserId()))) {
if (!tryAcquireMinuteTick(cmd.requiredReqUserId())) {
return;
}
if (isOneselfRoom(cmd)) {
//心跳mic 每日任务
taskMqMessage.sendTask(TaskApprovalEvent.builder()
.taskId(1)
.userId(cmd.requiredReqUserId())
.day(LocalDateTimeUtils.nowFormat("yyyy-MM-dd"))
.build());
boolean admin = administratorService.existsAdmin(cmd.requiredReqUserId());
if (admin) {
taskMqMessage.sendTask(TaskApprovalEvent.builder()
.taskId(12)
.userId(cmd.requiredReqUserId())
.day(LocalDateTimeUtils.nowFormat("yyyy-MM-dd"))
.build());
}
boolean oneselfRoom = isOneselfRoom(cmd);
// 在他人房间上麦
if (!oneselfRoom) {
updateDailyTask(cmd, RoomDailyTaskType.MIC_IN_ROOM);
} else {
// 房主自己上麦
updateDailyTask(cmd, RoomDailyTaskType.OWNER_MIC_TIME);
}
if (!teamMemberService.existsMember(cmd.requiredReqUserId())) {
return;
}
if (oneselfRoom) {
teamTargetCommon.incrementBroadcastTime(cmd.requiredReqUserId());
incrEffectiveDay(cmd);
return;
@ -81,6 +102,23 @@ public class TeamMemberHeartbeatCmdExe {
incrEffectiveDay(cmd);
}
private void updateDailyTask(AppRoomIdCmd cmd, RoomDailyTaskType taskType) {
roomDailyTaskProgressService.updateTaskProgress(
new RoomDailyTaskProgressUpdateCmd()
.setUserId(cmd.requiredReqUserId())
.setTaskCode(taskType.name())
.setProgressValue(1)
);
}
/**
* 限流60秒内只允许累加一次返回 true 表示本次可以计算
*/
private boolean tryAcquireMinuteTick(Long userId) {
String key = "team:heartbeat:tick:" + userId;
return redisService.setIfAbsent(key, "1", HEARTBEAT_INTERVAL_SECONDS, TimeUnit.SECONDS);
}
/**
* 根据特定的条件判断是否达成有效天数
*/