房间金币大放送-新增获取当前可领取奖励数量

This commit is contained in:
tianfeng 2026-03-04 19:37:18 +08:00
parent 2b0335cbc4
commit e148da7e7f
5 changed files with 70 additions and 0 deletions

View File

@ -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());
}
}

View File

@ -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<RoomDailyTaskProgress> 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;
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,13 @@
package com.red.circle.other.app.dto.clientobject.task;
import lombok.Data;
/**
* 每日任务可领取数量
*/
@Data
public class RoomDailyTaskClaimableCountCO {
/** 可领取奖励数量(已完成未领取的档位总数) */
private Integer claimableCount;
}

View File

@ -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);
}