diff --git a/client-api/src/main/java/org/jiayunet/pojo/dto/memberStatus/MemberStatusDto.java b/client-api/src/main/java/org/jiayunet/pojo/dto/memberStatus/MemberStatusDto.java
index daa0d9c..385849b 100644
--- a/client-api/src/main/java/org/jiayunet/pojo/dto/memberStatus/MemberStatusDto.java
+++ b/client-api/src/main/java/org/jiayunet/pojo/dto/memberStatus/MemberStatusDto.java
@@ -15,6 +15,9 @@ public class MemberStatusDto {
/** 是否是会员 */
private Boolean isMember;
+ /** 会员类型 1=正式 2=试用 */
+ private Integer memberType;
+
/** 到期时间 */
private Instant expireTime;
diff --git a/client-api/src/main/java/org/jiayunet/service/MemberGrantService.java b/client-api/src/main/java/org/jiayunet/service/MemberGrantService.java
index 2a31c02..19baa4f 100644
--- a/client-api/src/main/java/org/jiayunet/service/MemberGrantService.java
+++ b/client-api/src/main/java/org/jiayunet/service/MemberGrantService.java
@@ -48,11 +48,12 @@ public class MemberGrantService {
* 发放会员权益(按天数)
*
1. 续费会员(不存在则创建,存在则延期) 2. 发放功能权限 3. 发放菜单权限
*
- * @param userId 用户ID
- * @param days 会员天数
+ * @param userId 用户ID
+ * @param days 会员天数
+ * @param memberType 会员类型 1=正式 2=试用;发正式必置正式,发试用时若已是正式则保持正式(一旦正式不可回退)
*/
@Transactional(rollbackFor = Exception.class)
- public void grant(Long userId, int days) {
+ public void grant(Long userId, int days, int memberType) {
Instant expireTime = Instant.now().plus(days, ChronoUnit.DAYS);
// 1. 续费会员
@@ -61,10 +62,16 @@ public class MemberGrantService {
MemberUser newMember = new MemberUser();
newMember.setUserId(userId);
newMember.setExpireTime(expireTime);
+ newMember.setMemberType(memberType);
memberUserMapper.insert(newMember);
} else {
Instant baseTime = memberUser.getExpireTime().isAfter(Instant.now()) ? memberUser.getExpireTime() : Instant.now();
- memberUserMapper.update(null, new LambdaUpdateWrapper().eq(MemberUser::getId, memberUser.getId()).set(MemberUser::getExpireTime, baseTime.plus(days, ChronoUnit.DAYS)));
+ LambdaUpdateWrapper update = new LambdaUpdateWrapper().eq(MemberUser::getId, memberUser.getId()).set(MemberUser::getExpireTime, baseTime.plus(days, ChronoUnit.DAYS));
+ // 发正式则升级为正式;发试用时不改类型,避免把已有的正式会员降级(一旦正式不可回退)
+ if (memberType == 1) {
+ update.set(MemberUser::getMemberType, 1);
+ }
+ memberUserMapper.update(null, update);
}
// 2. 发放功能权限
diff --git a/client-api/src/main/java/org/jiayunet/service/MemberProductService.java b/client-api/src/main/java/org/jiayunet/service/MemberProductService.java
index 3cf1faf..5e14a69 100644
--- a/client-api/src/main/java/org/jiayunet/service/MemberProductService.java
+++ b/client-api/src/main/java/org/jiayunet/service/MemberProductService.java
@@ -141,7 +141,7 @@ public class MemberProductService {
// 查商品拿 durationDays,发放会员权益
MemberProduct product = memberProductMapper.selectById(order.getProductId());
- memberGrantService.grant(order.getUserId(), product.getDurationDays());
+ memberGrantService.grant(order.getUserId(), product.getDurationDays(), 1); // 1=正式
messageService.sendToUser(3, order.getUserId(), "会员购买成功", "您已成功购买会员," + product.getDurationDays() + "天会员权益已到账", "memberOrder", order.getId());
log.info("会员支付成功处理完成 orderNo:{} userId:{} durationDays:{}", orderNo, order.getUserId(), product.getDurationDays());
diff --git a/client-api/src/main/java/org/jiayunet/service/MemberStatusService.java b/client-api/src/main/java/org/jiayunet/service/MemberStatusService.java
index ad43331..3c85a92 100644
--- a/client-api/src/main/java/org/jiayunet/service/MemberStatusService.java
+++ b/client-api/src/main/java/org/jiayunet/service/MemberStatusService.java
@@ -52,9 +52,7 @@ public class MemberStatusService {
public MemberStatusDto status() {
Long userId = UserSecurityTool.getUserId();
- MemberUser memberUser = memberUserMapper.selectOne(
- new LambdaQueryWrapper().eq(MemberUser::getUserId, userId)
- );
+ MemberUser memberUser = memberUserMapper.selectOne(new LambdaQueryWrapper().eq(MemberUser::getUserId, userId));
MemberStatusDto dto = new MemberStatusDto();
if (memberUser == null) {
@@ -63,6 +61,7 @@ public class MemberStatusService {
}
dto.setIsMember(memberUser.getExpireTime().isAfter(Instant.now()));
+ dto.setMemberType(memberUser.getMemberType());
dto.setExpireTime(memberUser.getExpireTime());
dto.setCreateTime(memberUser.getCreateTime());
dto.setUpdateTime(memberUser.getUpdateTime());
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 64e5302..f02f681 100644
--- a/client-api/src/main/java/org/jiayunet/service/UserRegisterService.java
+++ b/client-api/src/main/java/org/jiayunet/service/UserRegisterService.java
@@ -87,7 +87,7 @@ public class UserRegisterService {
}
// 发放新用户注册会员权益
- memberGrantService.grant(user.getId(), registerDays);
+ memberGrantService.grant(user.getId(), registerDays, 2); // 2=试用
messageService.sendToUser(1, user.getId(), "欢迎加入OfferPie", "注册成功,已赠送您" + registerDays + "天会员权益,快来体验AI求职助手吧!", null, null);
return user;
@@ -121,7 +121,7 @@ public class UserRegisterService {
userInviteMapper.insert(invite);
// 发放邀请人会员权益
- memberGrantService.grant(inviter.getId(), inviteDays);
+ memberGrantService.grant(inviter.getId(), inviteDays, 2); // 2=试用
messageService.sendToUser(1, inviter.getId(), "邀请奖励到账", "您邀请的好友已成功注册," + inviteDays + "天会员权益已到账", null, null);
}
diff --git a/manager/src/main/java/org/jiayunet/pojo/po/MemberUser.java b/manager/src/main/java/org/jiayunet/pojo/po/MemberUser.java
index a4fc5b1..d100f6d 100644
--- a/manager/src/main/java/org/jiayunet/pojo/po/MemberUser.java
+++ b/manager/src/main/java/org/jiayunet/pojo/po/MemberUser.java
@@ -23,6 +23,9 @@ public class MemberUser {
/** 用户ID */
private Long userId;
+ /** 会员类型 1=正式 2=试用;一旦变为正式(付费)不可再回退为试用 */
+ private Integer memberType;
+
/** 会员到期时间 */
private Instant expireTime;