This commit is contained in:
hy001 2026-04-27 23:27:24 +08:00
parent 40dfc9e002
commit de823791af
9 changed files with 167 additions and 10 deletions

View File

@ -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<List<RoomContributionActivityCountDTO>> listLastWeek();
/**
* 当前周房间流水排行榜.
*/
@GetMapping("/listCurrentWeek")
ResultResponse<List<RoomContributionActivityCountDTO>> listCurrentWeek(
@RequestParam(value = "limit", required = false) Integer limit
);
/**
* 指定房间当前周流水数据.
*/
@GetMapping("/currentWeek")
ResultResponse<RoomContributionActivityCountDTO> getCurrentWeek(
@RequestParam("roomId") Long roomId
);
/**
* 标记房间流水奖励金币已发放.
*/
@PostMapping("/rewardCoinsSent")
ResultResponse<Boolean> updateRewardCoinsSent(@RequestParam("id") String id);
}

View File

@ -50,6 +50,11 @@ public class RoomContributionActivityCountDTO extends DTO implements Serializabl
*/
private Boolean received;
/**
* 奖励金币是否已发放.
*/
private Boolean rewardCoinsSent;
/**
* 比例.
*/

View File

@ -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<InviteCampaignRewardRule> existingRules,
InviteCampaignConfigSaveCmd cmd) {
Map<Long, InviteCampaignRewardRule> existingRuleMap = existingRules.stream()

View File

@ -98,12 +98,15 @@ public interface RoomContributionActivityCountService {
boolean updateRewardCoinsSent(String id);
/**
* 获取所有房间上周贡献数据未领取状态
*
* @return 所有房间上周贡献数据列表
* 获取所有房间上周未发放奖励金币的贡献数据.
*/
List<RoomContributionActivityCount> getAllRoomsLastWeekData();
/**
* 获取当前周房间流水排行榜.
*/
List<RoomContributionActivityCount> getAllRoomsCurrentWeekData(Integer limit);
/**
* 根据房间ID和日期查询数据
*

View File

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

View File

@ -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<RoomContributionActivityCountDTO> toPageRoomContributionActivityCountDTO(
PageResult<RoomContributionActivityCount> pageResult);
List<RoomContributionActivityCountDTO> toListRoomContributionActivityCountDTO(
List<RoomContributionActivityCount> list);
RoomContributionActivityCountDTO toRoomContributionActivityCountDTO(
RoomContributionActivityCount item);
}

View File

@ -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<List<RoomContributionActivityCountDTO>> listLastWeek() {
return ResultResponse.success(roomContributionActivityCountClientService.listLastWeek());
}
@Override
public ResultResponse<List<RoomContributionActivityCountDTO>> listCurrentWeek(Integer limit) {
return ResultResponse.success(roomContributionActivityCountClientService.listCurrentWeek(limit));
}
@Override
public ResultResponse<RoomContributionActivityCountDTO> getCurrentWeek(Long roomId) {
return ResultResponse.success(
roomContributionActivityCountClientService.getCurrentWeek(roomId)
);
}
@Override
public ResultResponse<Boolean> updateRewardCoinsSent(String id) {
return ResultResponse.success(
roomContributionActivityCountClientService.updateRewardCoinsSent(id)
);
}
}

View File

@ -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<RoomContributionActivityCountDTO> pageReceived(Long roomId, Integer current,
Integer limitSize);
/**
* 上周未发放奖励金币的房间流水数据.
*/
List<RoomContributionActivityCountDTO> listLastWeek();
/**
* 当前周房间流水排行榜.
*/
List<RoomContributionActivityCountDTO> listCurrentWeek(Integer limit);
/**
* 指定房间当前周流水数据.
*/
RoomContributionActivityCountDTO getCurrentWeek(Long roomId);
/**
* 标记房间流水奖励金币已发放.
*/
Boolean updateRewardCoinsSent(String id);
}

View File

@ -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<RoomContributionActivityCountDTO> listLastWeek() {
return roomContributionActivityCountInnerConvertor.toListRoomContributionActivityCountDTO(
roomContributionActivityCountService.getAllRoomsLastWeekData()
);
}
@Override
public List<RoomContributionActivityCountDTO> 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);
}
}