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.PageResult;
import com.red.circle.framework.dto.ResultResponse; import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; 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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
/** /**
@ -30,4 +32,32 @@ public interface RoomContributionActivityCountClientApi {
@RequestParam("limitSize") Integer limitSize @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 received;
/**
* 奖励金币是否已发放.
*/
private Boolean rewardCoinsSent;
/** /**
* 比例. * 比例.
*/ */

View File

@ -298,7 +298,7 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
private void validateConfig(InviteCampaignConfigSaveCmd cmd) { private void validateConfig(InviteCampaignConfigSaveCmd cmd) {
ResponseAssert.notNull(CommonErrorCode.DATA_ERROR, cmd.getAntiCheat()); ResponseAssert.notNull(CommonErrorCode.DATA_ERROR, cmd.getAntiCheat());
validateRewardItem("inviterBindReward", cmd.getInviterBindReward()); validateRewardItem("inviterBindReward", cmd.getInviterBindReward());
validateRewardItem("inviteeBindReward", cmd.getInviteeBindReward()); validateRewardItemOptional("inviteeBindReward", cmd.getInviteeBindReward());
validateRuleItems(cmd.getInviteeRechargeRules()); validateRuleItems(cmd.getInviteeRechargeRules());
validateRuleItems(cmd.getInviterValidCountRules()); validateRuleItems(cmd.getInviterValidCountRules());
validateRuleItems(cmd.getInviterTotalRechargeRules()); validateRuleItems(cmd.getInviterTotalRechargeRules());
@ -334,6 +334,13 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
goldAmount > 0 || item.getRewardGroupId() != null); 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, private void validateReusableRuleIds(List<InviteCampaignRewardRule> existingRules,
InviteCampaignConfigSaveCmd cmd) { InviteCampaignConfigSaveCmd cmd) {
Map<Long, InviteCampaignRewardRule> existingRuleMap = existingRules.stream() Map<Long, InviteCampaignRewardRule> existingRuleMap = existingRules.stream()

View File

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

View File

@ -14,6 +14,7 @@ import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
import com.red.circle.tool.core.text.StringUtils; import com.red.circle.tool.core.text.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.format.DateTimeFormatter;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -294,12 +295,32 @@ public class RoomContributionActivityCountServiceImpl implements
@Override @Override
public List<RoomContributionActivityCount> getAllRoomsLastWeekData() { public List<RoomContributionActivityCount> getAllRoomsLastWeekData() {
// 获取上周的 dateNumber // 获取上周的 dateNumber
Integer lastWeekDateNumber = ZonedDateTimeAsiaRiyadhUtils.getThisMonday() - 7; Integer lastWeekDateNumber = Integer.parseInt(
ZonedDateTimeAsiaRiyadhUtils.getLastWeekMonday()
Criteria criteria = Criteria.where("dateNumber").is(lastWeekDateNumber) .format(DateTimeFormatter.ofPattern("yyyyMMdd"))
.and("received").is(Boolean.FALSE); );
return mongoTemplate.find(Query.query(criteria), RoomContributionActivityCount.class); 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 @Override
@ -315,4 +336,11 @@ public class RoomContributionActivityCountServiceImpl implements
return Optional.ofNullable(result); 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.framework.dto.PageResult;
import com.red.circle.other.infra.database.mongo.entity.activity.RoomContributionActivityCount; import com.red.circle.other.infra.database.mongo.entity.activity.RoomContributionActivityCount;
import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO;
import java.util.List;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
@ -15,4 +16,10 @@ public interface RoomContributionActivityCountInnerConvertor {
PageResult<RoomContributionActivityCountDTO> toPageRoomContributionActivityCountDTO( PageResult<RoomContributionActivityCountDTO> toPageRoomContributionActivityCountDTO(
PageResult<RoomContributionActivityCount> pageResult); 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.app.inner.service.activity.RoomContributionActivityCountClientService;
import com.red.circle.other.inner.endpoint.activity.api.RoomContributionActivityCountClientApi; import com.red.circle.other.inner.endpoint.activity.api.RoomContributionActivityCountClientApi;
import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO;
import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated; 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.framework.dto.PageResult;
import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; 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, PageResult<RoomContributionActivityCountDTO> pageReceived(Long roomId, Integer current,
Integer limitSize); 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.app.inner.service.activity.RoomContributionActivityCountClientService;
import com.red.circle.other.infra.database.mongo.service.activity.RoomContributionActivityCountService; import com.red.circle.other.infra.database.mongo.service.activity.RoomContributionActivityCountService;
import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO; import com.red.circle.other.inner.model.dto.activity.RoomContributionActivityCountDTO;
import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; 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);
}
} }