roomDailyTask 新增倒计时秒字段

This commit is contained in:
tianfeng 2026-03-04 10:50:43 +08:00
parent b6074ec0d9
commit 4085716563
5 changed files with 44 additions and 14 deletions

View File

@ -2,15 +2,14 @@ package com.red.circle.other.adapter.app.task;
import com.red.circle.common.business.dto.cmd.AppExtCommand;
import jakarta.validation.constraints.NotNull;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskListCO;
import com.red.circle.other.app.dto.cmd.task.RoomDailyTaskClaimCmd;
import com.red.circle.other.app.service.task.RoomDailyTaskService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 每日任务接口
@ -29,7 +28,7 @@ public class RoomDailyTaskRestController {
* @eo.method get
*/
@GetMapping("/list")
public List<RoomDailyTaskCO> getTaskList(AppExtCommand cmd,
public RoomDailyTaskListCO getTaskList(AppExtCommand cmd,
@RequestParam @NotNull(message = "任务分类不能为空") Integer taskCategory) {
return roomDailyTaskService.getTaskList(cmd.getReqUserId(), taskCategory);
}

View File

@ -1,6 +1,7 @@
package com.red.circle.other.app.command.task;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskListCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskTierCO;
import com.red.circle.other.infra.database.rds.entity.task.RoomDailyTaskConfig;
import com.red.circle.other.infra.database.rds.entity.task.RoomDailyTaskProgress;
@ -12,6 +13,8 @@ import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -26,10 +29,15 @@ public class RoomDailyTaskQueryExe {
private final RoomDailyTaskDatabaseService taskDatabaseService;
public List<RoomDailyTaskCO> execute(Long userId, Integer taskCategory) {
public RoomDailyTaskListCO execute(Long userId, Integer taskCategory) {
List<RoomDailyTaskConfig> configs = taskDatabaseService.listEnabledConfigs(taskCategory);
RoomDailyTaskListCO result = new RoomDailyTaskListCO();
result.setCountdownSeconds(calcCountdownSeconds());
if (CollectionUtils.isEmpty(configs)) {
return new ArrayList<>();
result.setTasks(new ArrayList<>());
return result;
}
List<String> taskCodes = configs.stream().map(RoomDailyTaskConfig::getTaskCode).collect(Collectors.toList());
@ -43,9 +51,19 @@ public class RoomDailyTaskQueryExe {
Map<String, RoomDailyTaskProgress> progressMap = progressList.stream()
.collect(Collectors.toMap(RoomDailyTaskProgress::getTaskCode, p -> p, (a, b) -> a));
return configs.stream()
List<RoomDailyTaskCO> tasks = configs.stream()
.map(config -> buildTaskCO(config, tierMap.getOrDefault(config.getTaskCode(), new ArrayList<>()), progressMap.get(config.getTaskCode())))
.collect(Collectors.toList());
result.setTasks(tasks);
return result;
}
/** 计算距沙特时间今日午夜的剩余秒数 */
private long calcCountdownSeconds() {
ZonedDateTime now = ZonedDateTimeAsiaRiyadhUtils.now();
ZonedDateTime midnight = now.toLocalDate().plusDays(1).atStartOfDay(now.getZone());
return ChronoUnit.SECONDS.between(now, midnight);
}
private RoomDailyTaskCO buildTaskCO(RoomDailyTaskConfig config, List<RoomDailyTaskTier> tiers, RoomDailyTaskProgress progress) {

View File

@ -2,14 +2,12 @@ package com.red.circle.other.app.service.task;
import com.red.circle.other.app.command.task.RoomDailyTaskClaimExe;
import com.red.circle.other.app.command.task.RoomDailyTaskQueryExe;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskListCO;
import com.red.circle.other.app.dto.cmd.task.RoomDailyTaskClaimCmd;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class RoomDailyTaskServiceImpl implements RoomDailyTaskService {
@ -18,7 +16,7 @@ public class RoomDailyTaskServiceImpl implements RoomDailyTaskService {
private final RoomDailyTaskClaimExe claimExe;
@Override
public List<RoomDailyTaskCO> getTaskList(Long userId, Integer taskCategory) {
public RoomDailyTaskListCO getTaskList(Long userId, Integer taskCategory) {
return queryExe.execute(userId, taskCategory);
}

View File

@ -0,0 +1,17 @@
package com.red.circle.other.app.dto.clientobject.task;
import lombok.Data;
import java.util.List;
/**
* 每日任务列表返回结构
*/
@Data
public class RoomDailyTaskListCO {
/** 距当日结束的剩余秒数(沙特时间午夜重置) */
private Long countdownSeconds;
private List<RoomDailyTaskCO> tasks;
}

View File

@ -1,14 +1,12 @@
package com.red.circle.other.app.service.task;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimCO;
import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskListCO;
import com.red.circle.other.app.dto.cmd.task.RoomDailyTaskClaimCmd;
import java.util.List;
public interface RoomDailyTaskService {
List<RoomDailyTaskCO> getTaskList(Long userId, Integer taskCategory);
RoomDailyTaskListCO getTaskList(Long userId, Integer taskCategory);
RoomDailyTaskClaimCO claimReward(RoomDailyTaskClaimCmd cmd);
}