diff --git a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/task/RoomDailyTaskRestController.java b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/task/RoomDailyTaskRestController.java index 963faf11..472dac02 100644 --- a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/task/RoomDailyTaskRestController.java +++ b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/task/RoomDailyTaskRestController.java @@ -3,6 +3,7 @@ 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.RoomDailyTaskClaimCO; +import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimableCountCO; 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; @@ -44,4 +45,15 @@ public class RoomDailyTaskRestController { public RoomDailyTaskClaimCO claimReward(@RequestBody @Validated RoomDailyTaskClaimCmd cmd) { return roomDailyTaskService.claimReward(cmd); } + + /** + * 获取当前可领取奖励数量 + * @eo.name 获取可领取奖励数量 + * @eo.url /claimable-count + * @eo.method get + */ + @GetMapping("/claimable-count") + public RoomDailyTaskClaimableCountCO getClaimableCount(AppExtCommand cmd) { + return roomDailyTaskService.getClaimableCount(cmd.getReqUserId()); + } } diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/task/RoomDailyTaskClaimableCountQryExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/task/RoomDailyTaskClaimableCountQryExe.java new file mode 100644 index 00000000..5da89791 --- /dev/null +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/task/RoomDailyTaskClaimableCountQryExe.java @@ -0,0 +1,34 @@ +package com.red.circle.other.app.command.task; + +import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimableCountCO; +import com.red.circle.other.infra.database.rds.entity.task.RoomDailyTaskProgress; +import com.red.circle.other.infra.database.rds.service.RoomDailyTaskDatabaseService; +import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.List; + +/** + * 查询用户当日可领取奖励数量 + */ +@Component +@RequiredArgsConstructor +public class RoomDailyTaskClaimableCountQryExe { + + private final RoomDailyTaskDatabaseService taskDatabaseService; + + public RoomDailyTaskClaimableCountCO execute(Long userId) { + LocalDate today = ZonedDateTimeAsiaRiyadhUtils.now().toLocalDate(); + List progressList = taskDatabaseService.listProgressByUser(userId, today); + + int claimableCount = progressList.stream() + .mapToInt(p -> Math.max(0, p.getMaxTierCompleted() - p.getMaxTierClaimed())) + .sum(); + + RoomDailyTaskClaimableCountCO co = new RoomDailyTaskClaimableCountCO(); + co.setClaimableCount(claimableCount); + return co; + } +} diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskServiceImpl.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskServiceImpl.java index 77baed37..b211eb95 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskServiceImpl.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskServiceImpl.java @@ -1,8 +1,10 @@ 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.RoomDailyTaskClaimableCountQryExe; import com.red.circle.other.app.command.task.RoomDailyTaskQueryExe; import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimCO; +import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimableCountCO; import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskListCO; import com.red.circle.other.app.dto.cmd.task.RoomDailyTaskClaimCmd; import lombok.RequiredArgsConstructor; @@ -14,6 +16,7 @@ public class RoomDailyTaskServiceImpl implements RoomDailyTaskService { private final RoomDailyTaskQueryExe queryExe; private final RoomDailyTaskClaimExe claimExe; + private final RoomDailyTaskClaimableCountQryExe claimableCountQryExe; @Override public RoomDailyTaskListCO getTaskList(Long userId, Integer taskCategory) { @@ -24,4 +27,9 @@ public class RoomDailyTaskServiceImpl implements RoomDailyTaskService { public RoomDailyTaskClaimCO claimReward(RoomDailyTaskClaimCmd cmd) { return claimExe.execute(cmd); } + + @Override + public RoomDailyTaskClaimableCountCO getClaimableCount(Long userId) { + return claimableCountQryExe.execute(userId); + } } diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/task/RoomDailyTaskClaimableCountCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/task/RoomDailyTaskClaimableCountCO.java new file mode 100644 index 00000000..c0ad77c7 --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/task/RoomDailyTaskClaimableCountCO.java @@ -0,0 +1,13 @@ +package com.red.circle.other.app.dto.clientobject.task; + +import lombok.Data; + +/** + * 每日任务可领取数量 + */ +@Data +public class RoomDailyTaskClaimableCountCO { + + /** 可领取奖励数量(已完成未领取的档位总数) */ + private Integer claimableCount; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskService.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskService.java index ff641fd4..20bcd038 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskService.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/RoomDailyTaskService.java @@ -1,6 +1,7 @@ package com.red.circle.other.app.service.task; import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimCO; +import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskClaimableCountCO; import com.red.circle.other.app.dto.clientobject.task.RoomDailyTaskListCO; import com.red.circle.other.app.dto.cmd.task.RoomDailyTaskClaimCmd; @@ -9,4 +10,6 @@ public interface RoomDailyTaskService { RoomDailyTaskListCO getTaskList(Long userId, Integer taskCategory); RoomDailyTaskClaimCO claimReward(RoomDailyTaskClaimCmd cmd); + + RoomDailyTaskClaimableCountCO getClaimableCount(Long userId); }