diff --git a/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java b/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java
index 59abaa7..65a7c70 100644
--- a/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java
+++ b/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java
@@ -11,6 +11,12 @@ import lombok.Data;
public class InviteStatsDto {
/** 累计邀请人数 */
private Long inviteCount;
+ /** 当前周期已邀请人数 */
+ private Long milestoneProgress;
/** 累计获得会员天数 */
private Integer rewardDays;
+ /** 里程碑目标人数 */
+ private Integer milestoneTarget;
+ /** 里程碑奖励天数 */
+ private Integer milestoneDays;
}
diff --git a/client-api/src/main/java/org/jiayunet/service/UserManageService.java b/client-api/src/main/java/org/jiayunet/service/UserManageService.java
index 0bde097..58ffe5c 100644
--- a/client-api/src/main/java/org/jiayunet/service/UserManageService.java
+++ b/client-api/src/main/java/org/jiayunet/service/UserManageService.java
@@ -15,6 +15,7 @@ import org.jiayunet.tool.UserSecurityTool;
import org.jiayunet.tool.server.RedisServerTool;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
@@ -42,6 +43,12 @@ public class UserManageService {
@Autowired
private RedisServerTool redisServerTool;
+ @Value("${app.reward.invite-milestone-count:30}")
+ private int inviteMilestoneCount;
+
+ @Value("${app.reward.invite-milestone-days:150}")
+ private int inviteMilestoneDays;
+
/**
* 查看个人信息
*
根据当前登录用户ID查询用户基本信息
@@ -99,9 +106,12 @@ public class UserManageService {
List invites = userInviteMapper.selectList(new LambdaQueryWrapper().eq(UserInvite::getInviterId, userId));
InviteStatsDto dto = new InviteStatsDto();
-
- dto.setInviteCount((long) invites.size());
+ long total = invites.size();
+ dto.setInviteCount(total);
+ dto.setMilestoneProgress(total % inviteMilestoneCount);
dto.setRewardDays(invites.stream().mapToInt(i -> i.getRewardDays() == null ? 0 : i.getRewardDays()).sum());
+ dto.setMilestoneTarget(inviteMilestoneCount);
+ dto.setMilestoneDays(inviteMilestoneDays);
return dto;
}
}
diff --git a/client-api/src/main/java/org/jiayunet/service/UserRegisterService.java b/client-api/src/main/java/org/jiayunet/service/UserRegisterService.java
index f02f681..ae658fb 100644
--- a/client-api/src/main/java/org/jiayunet/service/UserRegisterService.java
+++ b/client-api/src/main/java/org/jiayunet/service/UserRegisterService.java
@@ -61,6 +61,12 @@ public class UserRegisterService {
@Value("${app.reward.invite-days:7}")
private int inviteDays;
+ @Value("${app.reward.invite-milestone-count:30}")
+ private int inviteMilestoneCount;
+
+ @Value("${app.reward.invite-milestone-days:150}")
+ private int inviteMilestoneDays;
+
/**
* 注册新用户
* 1. 创建用户并生成邀请码 2. 若携带邀请码则绑定邀请关系
@@ -123,6 +129,15 @@ public class UserRegisterService {
// 发放邀请人会员权益
memberGrantService.grant(inviter.getId(), inviteDays, 2); // 2=试用
messageService.sendToUser(1, inviter.getId(), "邀请奖励到账", "您邀请的好友已成功注册," + inviteDays + "天会员权益已到账", null, null);
+
+ // 里程碑奖励:每满N人额外发放
+ long totalInvited = userInviteMapper.selectCount(new LambdaQueryWrapper().eq(UserInvite::getInviterId, inviter.getId()));
+ if (totalInvited > 0 && totalInvited % inviteMilestoneCount == 0) {
+ memberGrantService.grant(inviter.getId(), inviteMilestoneDays, 2);
+ messageService.sendToUser(1, inviter.getId(), "里程碑奖励到账",
+ "恭喜您累计邀请满" + totalInvited + "位好友,额外赠送" + inviteMilestoneDays + "天会员权益!", null, null);
+ log.info("邀请里程碑奖励 inviterId:{} totalInvited:{} days:{}", inviter.getId(), totalInvited, inviteMilestoneDays);
+ }
}
/**
diff --git a/client-api/src/main/resources/application-dev.yml b/client-api/src/main/resources/application-dev.yml
index 14427c5..58583d9 100644
--- a/client-api/src/main/resources/application-dev.yml
+++ b/client-api/src/main/resources/application-dev.yml
@@ -93,6 +93,9 @@ app:
register-days: 3
# 邀请好友奖励会员天数
invite-days: 7
+ # 邀请里程碑:每满N人额外奖励
+ invite-milestone-count: 30
+ invite-milestone-days: 150
# AI 多供应商配置,第一个为默认 provider
# base-url 配到版本路径,如 DeepSeek: https://api.deepseek.com/v1,豆包: https://ark.cn-beijing.volces.com/api/v3
diff --git a/client-api/src/main/resources/application-prod.yml b/client-api/src/main/resources/application-prod.yml
index 22265f0..406ae1d 100644
--- a/client-api/src/main/resources/application-prod.yml
+++ b/client-api/src/main/resources/application-prod.yml
@@ -93,6 +93,9 @@ app:
register-days: 3
# 邀请好友奖励会员天数
invite-days: 7
+ # 邀请里程碑:每满N人额外奖励
+ invite-milestone-count: 30
+ invite-milestone-days: 150
# AI 多供应商配置,第一个为默认 provider
# base-url 配到版本路径,如 DeepSeek: https://api.deepseek.com/v1,豆包: https://ark.cn-beijing.volces.com/api/v3
diff --git a/client-api/src/main/resources/application-test.yml b/client-api/src/main/resources/application-test.yml
index d58487a..eb6e8ad 100644
--- a/client-api/src/main/resources/application-test.yml
+++ b/client-api/src/main/resources/application-test.yml
@@ -94,6 +94,9 @@ app:
register-days: 3
# 邀请好友奖励会员天数
invite-days: 7
+ # 邀请里程碑:每满N人额外奖励
+ invite-milestone-count: 30
+ invite-milestone-days: 150
# AI 多供应商配置,第一个为默认 provider
# base-url 配到版本路径,如 DeepSeek: https://api.deepseek.com/v1,豆包: https://ark.cn-beijing.volces.com/api/v3