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;