From de823791af80d38e638ccdc647dd63dafc85ec28 Mon Sep 17 00:00:00 2001 From: hy001 Date: Mon, 27 Apr 2026 23:27:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oomContributionActivityCountClientApi.java | 30 ++++++++++++++ .../RoomContributionActivityCountDTO.java | 5 +++ .../ResidentInviteActivityServiceImpl.java | 9 ++++- .../RoomContributionActivityCountService.java | 9 +++-- ...mContributionActivityCountServiceImpl.java | 40 ++++++++++++++++--- ...ntributionActivityCountInnerConvertor.java | 7 ++++ ...ntributionActivityCountClientEndpoint.java | 25 ++++++++++++ ...ontributionActivityCountClientService.java | 21 ++++++++++ ...ibutionActivityCountClientServiceImpl.java | 31 ++++++++++++++ 9 files changed, 167 insertions(+), 10 deletions(-) diff --git a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/activity/api/RoomContributionActivityCountClientApi.java b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/activity/api/RoomContributionActivityCountClientApi.java index b5613fc4..ad6370a5 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/activity/api/RoomContributionActivityCountClientApi.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/activity/api/RoomContributionActivityCountClientApi.java @@ -3,7 +3,9 @@ package com.red.circle.other.inner.endpoint.activity.api; import com.red.circle.framework.dto.PageResult; import com.red.circle.framework.dto.ResultResponse; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; +import java.util.List; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; /** @@ -30,4 +32,32 @@ public interface RoomContributionActivityCountClientApi { @RequestParam("limitSize") Integer limitSize ); + /** + * 上周未发放奖励金币的房间流水数据. + */ + @GetMapping("/listLastWeek") + ResultResponse> listLastWeek(); + + /** + * 当前周房间流水排行榜. + */ + @GetMapping("/listCurrentWeek") + ResultResponse> listCurrentWeek( + @RequestParam(value = "limit", required = false) Integer limit + ); + + /** + * 指定房间当前周流水数据. + */ + @GetMapping("/currentWeek") + ResultResponse getCurrentWeek( + @RequestParam("roomId") Long roomId + ); + + /** + * 标记房间流水奖励金币已发放. + */ + @PostMapping("/rewardCoinsSent") + ResultResponse updateRewardCoinsSent(@RequestParam("id") String id); + } diff --git a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/activity/RoomContributionActivityCountDTO.java b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/activity/RoomContributionActivityCountDTO.java index 3f412d77..e6d58984 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/activity/RoomContributionActivityCountDTO.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/activity/RoomContributionActivityCountDTO.java @@ -50,6 +50,11 @@ public class RoomContributionActivityCountDTO extends DTO implements Serializabl */ private Boolean received; + /** + * 奖励金币是否已发放. + */ + private Boolean rewardCoinsSent; + /** * 比例. */ diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java index d4a7d6cd..0ddb6d37 100644 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java +++ b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java @@ -298,7 +298,7 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity private void validateConfig(InviteCampaignConfigSaveCmd cmd) { ResponseAssert.notNull(CommonErrorCode.DATA_ERROR, cmd.getAntiCheat()); validateRewardItem("inviterBindReward", cmd.getInviterBindReward()); - validateRewardItem("inviteeBindReward", cmd.getInviteeBindReward()); + validateRewardItemOptional("inviteeBindReward", cmd.getInviteeBindReward()); validateRuleItems(cmd.getInviteeRechargeRules()); validateRuleItems(cmd.getInviterValidCountRules()); validateRuleItems(cmd.getInviterTotalRechargeRules()); @@ -334,6 +334,13 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity goldAmount > 0 || item.getRewardGroupId() != null); } + private void validateRewardItemOptional(String fieldName, + InviteCampaignConfigSaveCmd.RewardItemCmd item) { + ResponseAssert.notNull(CommonErrorCode.DATA_ERROR, item); + long goldAmount = Optional.ofNullable(item.getGoldAmount()).orElse(0L); + ResponseAssert.isTrue(CommonErrorCode.DATA_ERROR, goldAmount >= 0); + } + private void validateReusableRuleIds(List existingRules, InviteCampaignConfigSaveCmd cmd) { Map existingRuleMap = existingRules.stream() diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/RoomContributionActivityCountService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/RoomContributionActivityCountService.java index c108d8f4..3763fff1 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/RoomContributionActivityCountService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/RoomContributionActivityCountService.java @@ -98,12 +98,15 @@ public interface RoomContributionActivityCountService { boolean updateRewardCoinsSent(String id); /** - * 获取所有房间上周贡献数据(未领取状态) - * - * @return 所有房间上周贡献数据列表 + * 获取所有房间上周未发放奖励金币的贡献数据. */ List getAllRoomsLastWeekData(); + /** + * 获取当前周房间流水排行榜. + */ + List getAllRoomsCurrentWeekData(Integer limit); + /** * 根据房间ID和日期查询数据 * diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/impl/RoomContributionActivityCountServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/impl/RoomContributionActivityCountServiceImpl.java index b80af129..2bd98aa0 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/impl/RoomContributionActivityCountServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/activity/impl/RoomContributionActivityCountServiceImpl.java @@ -14,6 +14,7 @@ import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils; import com.red.circle.tool.core.text.StringUtils; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.format.DateTimeFormatter; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -294,12 +295,32 @@ public class RoomContributionActivityCountServiceImpl implements @Override public List getAllRoomsLastWeekData() { // 获取上周的 dateNumber - Integer lastWeekDateNumber = ZonedDateTimeAsiaRiyadhUtils.getThisMonday() - 7; - - Criteria criteria = Criteria.where("dateNumber").is(lastWeekDateNumber) - .and("received").is(Boolean.FALSE); - - return mongoTemplate.find(Query.query(criteria), RoomContributionActivityCount.class); + Integer lastWeekDateNumber = Integer.parseInt( + ZonedDateTimeAsiaRiyadhUtils.getLastWeekMonday() + .format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ); + + Criteria criteria = new Criteria().andOperator( + Criteria.where("dateNumber").is(lastWeekDateNumber), + new Criteria().orOperator( + Criteria.where("rewardCoinsSent").exists(false), + Criteria.where("rewardCoinsSent").ne(Boolean.TRUE) + ) + ); + + return mongoTemplate.find( + Query.query(criteria).with(Sort.by(Sort.Order.desc("contributionValue"))), + RoomContributionActivityCount.class + ); + } + + @Override + public List getAllRoomsCurrentWeekData(Integer limit) { + Integer currentWeekDateNumber = ZonedDateTimeAsiaRiyadhUtils.getThisMonday(); + Query query = Query.query(Criteria.where("dateNumber").is(currentWeekDateNumber)) + .with(Sort.by(Sort.Order.desc("contributionValue"))) + .limit(normalizeRankingLimit(limit)); + return mongoTemplate.find(query, RoomContributionActivityCount.class); } @Override @@ -315,4 +336,11 @@ public class RoomContributionActivityCountServiceImpl implements return Optional.ofNullable(result); } + private int normalizeRankingLimit(Integer limit) { + if (Objects.isNull(limit) || limit <= 0) { + return 200; + } + return Math.min(limit, 1000); + } + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/convertor/activity/RoomContributionActivityCountInnerConvertor.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/convertor/activity/RoomContributionActivityCountInnerConvertor.java index cbb38c84..eba05daa 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/convertor/activity/RoomContributionActivityCountInnerConvertor.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/convertor/activity/RoomContributionActivityCountInnerConvertor.java @@ -4,6 +4,7 @@ import com.red.circle.framework.core.convertor.ConvertorModel; import com.red.circle.framework.dto.PageResult; import com.red.circle.other.infra.database.mongo.entity.activity.RoomContributionActivityCount; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; +import java.util.List; import org.mapstruct.Mapper; /** @@ -15,4 +16,10 @@ public interface RoomContributionActivityCountInnerConvertor { PageResult toPageRoomContributionActivityCountDTO( PageResult pageResult); + List toListRoomContributionActivityCountDTO( + List list); + + RoomContributionActivityCountDTO toRoomContributionActivityCountDTO( + RoomContributionActivityCount item); + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/activity/RoomContributionActivityCountClientEndpoint.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/activity/RoomContributionActivityCountClientEndpoint.java index e9e14128..7c5e6304 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/activity/RoomContributionActivityCountClientEndpoint.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/activity/RoomContributionActivityCountClientEndpoint.java @@ -5,6 +5,7 @@ import com.red.circle.framework.dto.ResultResponse; import com.red.circle.other.app.inner.service.activity.RoomContributionActivityCountClientService; import com.red.circle.other.inner.endpoint.activity.api.RoomContributionActivityCountClientApi; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; @@ -33,4 +34,28 @@ public class RoomContributionActivityCountClientEndpoint implements ); } + @Override + public ResultResponse> listLastWeek() { + return ResultResponse.success(roomContributionActivityCountClientService.listLastWeek()); + } + + @Override + public ResultResponse> listCurrentWeek(Integer limit) { + return ResultResponse.success(roomContributionActivityCountClientService.listCurrentWeek(limit)); + } + + @Override + public ResultResponse getCurrentWeek(Long roomId) { + return ResultResponse.success( + roomContributionActivityCountClientService.getCurrentWeek(roomId) + ); + } + + @Override + public ResultResponse updateRewardCoinsSent(String id) { + return ResultResponse.success( + roomContributionActivityCountClientService.updateRewardCoinsSent(id) + ); + } + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/RoomContributionActivityCountClientService.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/RoomContributionActivityCountClientService.java index f7460ae4..9a2ad68e 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/RoomContributionActivityCountClientService.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/RoomContributionActivityCountClientService.java @@ -2,6 +2,7 @@ package com.red.circle.other.app.inner.service.activity; import com.red.circle.framework.dto.PageResult; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; +import java.util.List; /** * 房间贡献. @@ -22,4 +23,24 @@ public interface RoomContributionActivityCountClientService { PageResult pageReceived(Long roomId, Integer current, Integer limitSize); + /** + * 上周未发放奖励金币的房间流水数据. + */ + List listLastWeek(); + + /** + * 当前周房间流水排行榜. + */ + List listCurrentWeek(Integer limit); + + /** + * 指定房间当前周流水数据. + */ + RoomContributionActivityCountDTO getCurrentWeek(Long roomId); + + /** + * 标记房间流水奖励金币已发放. + */ + Boolean updateRewardCoinsSent(String id); + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/impl/RoomContributionActivityCountClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/impl/RoomContributionActivityCountClientServiceImpl.java index 06cafdc4..a8804482 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/impl/RoomContributionActivityCountClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/activity/impl/RoomContributionActivityCountClientServiceImpl.java @@ -5,6 +5,8 @@ import com.red.circle.other.app.inner.convertor.activity.RoomContributionActivit import com.red.circle.other.app.inner.service.activity.RoomContributionActivityCountClientService; import com.red.circle.other.infra.database.mongo.service.activity.RoomContributionActivityCountService; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; +import java.util.List; +import java.util.Objects; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -29,4 +31,33 @@ public class RoomContributionActivityCountClientServiceImpl implements ); } + @Override + public List listLastWeek() { + return roomContributionActivityCountInnerConvertor.toListRoomContributionActivityCountDTO( + roomContributionActivityCountService.getAllRoomsLastWeekData() + ); + } + + @Override + public List listCurrentWeek(Integer limit) { + return roomContributionActivityCountInnerConvertor.toListRoomContributionActivityCountDTO( + roomContributionActivityCountService.getAllRoomsCurrentWeekData(limit) + ); + } + + @Override + public RoomContributionActivityCountDTO getCurrentWeek(Long roomId) { + if (Objects.isNull(roomId)) { + return null; + } + return roomContributionActivityCountInnerConvertor.toRoomContributionActivityCountDTO( + roomContributionActivityCountService.getThisWeekData(roomId) + ); + } + + @Override + public Boolean updateRewardCoinsSent(String id) { + return roomContributionActivityCountService.updateRewardCoinsSent(id); + } + }