roomDailyTask 新增倒计时秒字段
This commit is contained in:
parent
b6074ec0d9
commit
4085716563
@ -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);
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user