房间贡献,新增自动方法房间贡献奖励定时任务
This commit is contained in:
parent
b0199267a0
commit
cefa78bdea
@ -43,19 +43,6 @@ public class RoomContributionActivityQueryCmdExe {
|
||||
private final RoomContributionActivityCountService roomContributionActivityCountService;
|
||||
|
||||
public RoomContributionCountCO execute(AppRoomIdCmd cmd) {
|
||||
|
||||
// 印度特殊地区, 刘占洋 2023/07/07
|
||||
/*String regionCode="";
|
||||
if (Objects.equals(cmd.getReqSysOrigin().getOrigin(),
|
||||
SysOriginPlatformEnum.ASWAT.getSysOrigin())) {
|
||||
regionCode = userRegionGateway.getRegionCode(cmd.getReqUserId());
|
||||
List<String> regions = List.of("IN2", "IN");
|
||||
|
||||
if (regions.contains(regionCode.toUpperCase())) {
|
||||
ResponseAssert.failure(CommonErrorCode.SYSTEM_IS_DOWN);
|
||||
}
|
||||
}*/
|
||||
|
||||
Long roomId = roomProfileManagerService.getRoomId(cmd.getReqUserId());
|
||||
ResponseAssert.notNull(CommonErrorCode.NOT_FOUND_RECORD_INFO, roomId);
|
||||
// 是否为请求人自己的房间
|
||||
@ -77,17 +64,6 @@ public class RoomContributionActivityQueryCmdExe {
|
||||
List<RoomContributionActivityCount> activityCounts = roomContributionActivityCountService
|
||||
.listRoomContribution(cmd.getRoomId(), cmd.requireReqSysOriginEnum());
|
||||
|
||||
//如果是菲律宾数据查询的数据从0开始
|
||||
// if(Objects.equals(regionCode,"PH")){
|
||||
// activityCounts = roomContributionActivityCountService
|
||||
// .listRoomContributionByPH(cmd.getRoomId(), new BigDecimal(0));
|
||||
// }
|
||||
// //如果是巴基斯坦地区从100000开始
|
||||
// if(Objects.equals(regionCode,"PK")){
|
||||
// activityCounts = roomContributionActivityCountService
|
||||
// .listRoomContributionByPH(cmd.getRoomId(), new BigDecimal(100000));
|
||||
// }
|
||||
|
||||
ImmutablePair<String, BigDecimal> thisWeekData = getThisWeekData(cmd, activityRatio.getRatio());
|
||||
if (CollectionUtils.isEmpty(activityCounts)) {
|
||||
return new RoomContributionCountCO()
|
||||
@ -118,29 +94,6 @@ public class RoomContributionActivityQueryCmdExe {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
// // 这几个区域调整了金币价值, 4月低 刘占洋 下降41% 流水不变领取点下降
|
||||
// String userRegionCode = userRegionGateway.getRegionCode(cmd.getReqUserId());
|
||||
//
|
||||
// if (isExistsRegion(List.of("NG1", "NG", "PH", "PH1"), userRegionCode)) {
|
||||
// var historyIntegral = getAvailableAmount(cmd, new BigDecimal("0.1"), activityCounts.stream()
|
||||
// .filter(activityCount -> activityCount.getDateNumber() < 20230501)
|
||||
// .map(RoomContributionActivityCount::getContributionValue)
|
||||
// .filter(Objects::nonNull)
|
||||
// .toList());
|
||||
//
|
||||
// var historyIntegralAvailableAmount = historyIntegral.subtract(
|
||||
// historyIntegral.multiply(new BigDecimal("0.41")))
|
||||
// .setScale(0, RoundingMode.DOWN);
|
||||
//
|
||||
// var newIntegral = getAvailableAmount(cmd, activityRatio.getRatio(), activityCounts.stream()
|
||||
// .filter(activityCount -> activityCount.getDateNumber() >= 20230501)
|
||||
// .map(RoomContributionActivityCount::getContributionValue)
|
||||
// .filter(Objects::nonNull)
|
||||
// .toList());
|
||||
//
|
||||
// return historyIntegralAvailableAmount.add(newIntegral);
|
||||
// }
|
||||
|
||||
return getAvailableAmount(cmd, activityRatio.getRatio(), activityCounts.stream()
|
||||
.map(RoomContributionActivityCount::getContributionValue)
|
||||
.filter(Objects::nonNull)
|
||||
|
||||
@ -0,0 +1,140 @@
|
||||
package com.red.circle.other.app.scheduler;
|
||||
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.RoomContributionActivityCount;
|
||||
import com.red.circle.other.infra.database.mongo.service.activity.RoomContributionActivityCountService;
|
||||
import com.red.circle.other.infra.database.mongo.service.live.RoomProfileManagerService;
|
||||
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
|
||||
import com.red.circle.wallet.inner.model.cmd.GoldReceiptCmd;
|
||||
import com.red.circle.wallet.inner.model.enums.GoldOrigin;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 房间贡献周奖励定时任务
|
||||
* <p>
|
||||
* 沙特时间每周一 0 点执行
|
||||
* </p>
|
||||
*
|
||||
* @author Claude
|
||||
* @since 2025-10-28
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class RoomContributionWeeklyRewardTask {
|
||||
|
||||
private final RoomContributionActivityCountService roomContributionActivityCountService;
|
||||
private final WalletGoldClient walletGoldClient;
|
||||
private final RoomProfileManagerService roomProfileManagerService;
|
||||
|
||||
/**
|
||||
* 金币奖励比例(上周贡献金额的比例)
|
||||
*/
|
||||
private static final BigDecimal REWARD_RATIO = new BigDecimal("0.05");
|
||||
|
||||
/**
|
||||
* 沙特时间每周一 0 点执行
|
||||
* cron: 秒 分 时 日 月 周
|
||||
* Asia/Riyadh 时区(UTC+3)
|
||||
*/
|
||||
@Scheduled(cron = "0 0 0 * * MON", zone = "Asia/Riyadh")
|
||||
public void execute() {
|
||||
log.info("【房间贡献周奖励】定时任务开始执行...");
|
||||
|
||||
try {
|
||||
// 校验:沙特时间 2025年10月10号之后(包含)才执行
|
||||
int currentDate = ZonedDateTimeAsiaRiyadhUtils.nowDateToInt();
|
||||
if (currentDate < 20251010) {
|
||||
log.info("【房间贡献周奖励】当前日期: {}, 未到活动开始时间(20251010),跳过执行", currentDate);
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. 获取所有房间上周数据
|
||||
List<RoomContributionActivityCount> lastWeekDataList =
|
||||
roomContributionActivityCountService.getAllRoomsLastWeekData();
|
||||
|
||||
if (CollectionUtils.isEmpty(lastWeekDataList)) {
|
||||
log.info("【房间贡献周奖励】没有需要发放的奖励数据");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("【房间贡献周奖励】待发放奖励房间数: {}", lastWeekDataList.size());
|
||||
|
||||
int successCount = 0;
|
||||
int failCount = 0;
|
||||
|
||||
// 2. 遍历发放奖励
|
||||
for (RoomContributionActivityCount data : lastWeekDataList) {
|
||||
try {
|
||||
// 校验:如果已领取,跳过
|
||||
if (Boolean.TRUE.equals(data.getReceived())) {
|
||||
log.info("【房间贡献周奖励】数据已领取,跳过发放, roomId: {}, recordId: {}",
|
||||
data.getRoomId(), data.getId());
|
||||
continue;
|
||||
}
|
||||
|
||||
// 计算奖励金币 = 上周贡献金额 × 比例
|
||||
BigDecimal rewardAmount = data.getContributionValue()
|
||||
.multiply(REWARD_RATIO)
|
||||
.setScale(2, RoundingMode.DOWN);
|
||||
|
||||
// 如果奖励金额 <= 0,跳过
|
||||
if (rewardAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
log.warn("【房间贡献周奖励】奖励金额为0,跳过发放, roomId: {}, recordId: {}",
|
||||
data.getRoomId(), data.getId());
|
||||
continue;
|
||||
}
|
||||
|
||||
// 3. 发送金币奖励(需要获取房主ID)
|
||||
// 注意:这里假设从其他地方获取房主ID,你需要根据实际情况调整
|
||||
Long roomOwnerId = getRoomOwnerId(data.getRoomId());
|
||||
if (roomOwnerId == null) {
|
||||
log.warn("【房间贡献周奖励】无法获取房主ID, roomId: {}", data.getRoomId());
|
||||
failCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
walletGoldClient.changeBalance(GoldReceiptCmd.builder()
|
||||
.appIncome()
|
||||
.eventId(data.getRoomId())
|
||||
.userId(roomOwnerId)
|
||||
.origin(GoldOrigin.ROOM_CONTRIBUTION_REWARD)
|
||||
.amount(rewardAmount)
|
||||
.build());
|
||||
|
||||
// 4. 修改数据状态为已领取
|
||||
roomContributionActivityCountService.updateReceivedByRoomId(data.getRoomId(), REWARD_RATIO);
|
||||
|
||||
successCount++;
|
||||
|
||||
log.info("【房间贡献周奖励】发放成功, roomId: {}, roomOwnerId: {}, rewardAmount: {}",
|
||||
data.getRoomId(), roomOwnerId, rewardAmount);
|
||||
|
||||
} catch (Exception e) {
|
||||
failCount++;
|
||||
log.error("【房间贡献周奖励】发放失败, roomId: {}, error: ",
|
||||
data.getRoomId(), e);
|
||||
}
|
||||
}
|
||||
|
||||
log.info("【房间贡献周奖励】定时任务执行完成, 成功: {}, 失败: {}", successCount, failCount);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("【房间贡献周奖励】定时任务执行异常: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取房主ID
|
||||
*/
|
||||
private Long getRoomOwnerId(Long roomId) {
|
||||
return roomProfileManagerService.getHomeownerId(roomId);
|
||||
}
|
||||
}
|
||||
@ -91,4 +91,19 @@ public interface RoomContributionActivityCountService {
|
||||
*/
|
||||
List<RoomContributionActivityCount> listRoomContributionByPH(Long roomId,BigDecimal number);
|
||||
|
||||
/**
|
||||
* 获取房间上周贡献数据(未领取状态)
|
||||
*
|
||||
* @param roomId 房间ID
|
||||
* @return 上周贡献数据
|
||||
*/
|
||||
RoomContributionActivityCount getLastWeekData(Long roomId);
|
||||
|
||||
/**
|
||||
* 获取所有房间上周贡献数据(未领取状态)
|
||||
*
|
||||
* @return 所有房间上周贡献数据列表
|
||||
*/
|
||||
List<RoomContributionActivityCount> getAllRoomsLastWeekData();
|
||||
|
||||
}
|
||||
|
||||
@ -207,51 +207,6 @@ public class RoomContributionActivityCountServiceImpl implements
|
||||
BigDecimal.valueOf(30000000)).sorted(Comparator.reverseOrder())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/* if (!Objects.equals(sysOrigin, SysOriginPlatformEnum.TARAB)) {
|
||||
|
||||
return Stream.of(integralMin,
|
||||
BigDecimal.valueOf(100000),
|
||||
BigDecimal.valueOf(200000),
|
||||
BigDecimal.valueOf(300000),
|
||||
BigDecimal.valueOf(500000),
|
||||
BigDecimal.valueOf(700000),
|
||||
BigDecimal.valueOf(1000000),
|
||||
BigDecimal.valueOf(1500000),
|
||||
BigDecimal.valueOf(2000000),
|
||||
BigDecimal.valueOf(2500000),
|
||||
BigDecimal.valueOf(3000000),
|
||||
BigDecimal.valueOf(3500000),
|
||||
BigDecimal.valueOf(4000000),
|
||||
BigDecimal.valueOf(4500000),
|
||||
BigDecimal.valueOf(5000000),
|
||||
BigDecimal.valueOf(6000000),
|
||||
BigDecimal.valueOf(8000000),
|
||||
BigDecimal.valueOf(10000000),
|
||||
BigDecimal.valueOf(12000000),
|
||||
BigDecimal.valueOf(15000000),
|
||||
BigDecimal.valueOf(18000000),
|
||||
BigDecimal.valueOf(20000000),
|
||||
BigDecimal.valueOf(30000000)).sorted(Comparator.reverseOrder())
|
||||
.collect(Collectors.toList());
|
||||
}*/
|
||||
// if(Objects.equals(regionCode,"PK")){
|
||||
// return Stream.of(integralMin,
|
||||
// BigDecimal.valueOf(200000),
|
||||
// BigDecimal.valueOf(300000),
|
||||
// BigDecimal.valueOf(500000),
|
||||
// BigDecimal.valueOf(700000),
|
||||
// BigDecimal.valueOf(1000000),
|
||||
// BigDecimal.valueOf(1500000),
|
||||
// BigDecimal.valueOf(2000000),
|
||||
// BigDecimal.valueOf(5000000),
|
||||
// BigDecimal.valueOf(10000000),
|
||||
// BigDecimal.valueOf(15000000),
|
||||
// BigDecimal.valueOf(20000000),
|
||||
// BigDecimal.valueOf(25000000),
|
||||
// BigDecimal.valueOf(30000000)).sorted(Comparator.reverseOrder())
|
||||
// .collect(Collectors.toList());
|
||||
// }
|
||||
List<BigDecimal> list = Stream.of(otherIntegralMin,
|
||||
BigDecimal.valueOf(300000),
|
||||
BigDecimal.valueOf(500000),
|
||||
@ -274,10 +229,6 @@ public class RoomContributionActivityCountServiceImpl implements
|
||||
BigDecimal.valueOf(20000000),
|
||||
BigDecimal.valueOf(30000000)).sorted(Comparator.reverseOrder())
|
||||
.collect(Collectors.toList());
|
||||
//如果是菲律宾地区从0开始
|
||||
// if(Objects.equals(regionCode,"PH")){
|
||||
// list.add(BigDecimal.valueOf(0));
|
||||
// }
|
||||
return list;
|
||||
|
||||
}
|
||||
@ -328,4 +279,27 @@ public class RoomContributionActivityCountServiceImpl implements
|
||||
RoomContributionActivityCount.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RoomContributionActivityCount getLastWeekData(Long roomId) {
|
||||
// 获取上周的 dateNumber(当前周一 - 7 天)
|
||||
Integer lastWeekDateNumber = ZonedDateTimeAsiaRiyadhUtils.getThisMonday() - 7;
|
||||
|
||||
Criteria criteria = Criteria.where("roomId").is(roomId)
|
||||
.and("dateNumber").is(lastWeekDateNumber)
|
||||
.and("received").is(Boolean.FALSE);
|
||||
|
||||
return mongoTemplate.findOne(Query.query(criteria), RoomContributionActivityCount.class);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user