房间金币大放送-上下麦克风心跳逻辑处理
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.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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据特定的条件判断是否达成有效天数
|
||||
*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user