房间金币大放送-上下麦克风心跳逻辑处理
This commit is contained in:
parent
d85a1d8711
commit
de802fb8eb
@ -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.business.model.event.task.TaskApprovalEvent;
|
||||||
import com.red.circle.mq.rocket.business.producer.TaskMqMessage;
|
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.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.app.service.task.TaskService;
|
||||||
import com.red.circle.other.infra.common.team.TeamTargetCommon;
|
import com.red.circle.other.infra.common.team.TeamTargetCommon;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.live.RoomProfile;
|
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.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
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.other.inner.enums.team.TeamMemberTargetIndex;
|
||||||
import com.red.circle.tool.core.date.LocalDateTimeUtils;
|
import com.red.circle.tool.core.date.LocalDateTimeUtils;
|
||||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||||
@ -48,31 +51,49 @@ public class TeamMemberHeartbeatCmdExe {
|
|||||||
private final TaskMqMessage taskMqMessage;
|
private final TaskMqMessage taskMqMessage;
|
||||||
private final AdministratorService administratorService;
|
private final AdministratorService administratorService;
|
||||||
private final TaskService taskService;
|
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) {
|
public void execute(AppRoomIdCmd cmd) {
|
||||||
|
|
||||||
//心跳mic 每日任务
|
if (!tryAcquireMinuteTick(cmd.requiredReqUserId())) {
|
||||||
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()))) {
|
|
||||||
return;
|
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());
|
teamTargetCommon.incrementBroadcastTime(cmd.requiredReqUserId());
|
||||||
incrEffectiveDay(cmd);
|
incrEffectiveDay(cmd);
|
||||||
return;
|
return;
|
||||||
@ -81,6 +102,23 @@ public class TeamMemberHeartbeatCmdExe {
|
|||||||
incrEffectiveDay(cmd);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据特定的条件判断是否达成有效天数
|
* 根据特定的条件判断是否达成有效天数
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user