From e148da7e7f1c0b02a18c4a413355988ef03c3a65 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Wed, 4 Mar 2026 19:37:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E9=87=91=E5=B8=81=E5=A4=A7?= =?UTF-8?q?=E6=94=BE=E9=80=81-=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E5=8F=AF=E9=A2=86=E5=8F=96=E5=A5=96=E5=8A=B1?= =?UTF-8?q?=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/task/RoomDailyTaskRestController.java | 12 +++++++ .../RoomDailyTaskClaimableCountQryExe.java | 34 +++++++++++++++++++ .../task/RoomDailyTaskServiceImpl.java | 8 +++++ .../task/RoomDailyTaskClaimableCountCO.java | 13 +++++++ .../service/task/RoomDailyTaskService.java | 3 ++ 5 files changed, 70 insertions(+) create mode 100644 rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/task/RoomDailyTaskClaimableCountQryExe.java create mode 100644 rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/task/RoomDailyTaskClaimableCountCO.java 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); }