From 4b25a348feacbc6eb1b07fe2a107e3a94c6d9c4e Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 15 一月 2025 15:35:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java | 5 +
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 86 ++++++++++++++++++++-
ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java | 46 +++++------
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 33 ++++----
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java | 52 +++++++------
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java | 6 +
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 9 ++
7 files changed, 166 insertions(+), 71 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
index 60c15e0..e7a43e0 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
@@ -111,6 +111,11 @@
}
@Override
+ public void vipDemotion(Long appUserId) {
+ R.fail("检查会员等级降级失败:" + cause.getMessage());
+ }
+
+ @Override
public void demotionDetection() {
R.fail("用户降级检测失败:" + cause.getMessage());
}
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index 6d3c044..3e367f9 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -101,6 +101,15 @@
/**
+ * 检查会员降级
+ * @param appUserId
+ */
+ @PostMapping("/app-user/vipDemotion")
+ void vipDemotion(@RequestParam("appUserId") Long appUserId);
+
+
+
+ /**
* 用户降级检测
*/
@PostMapping("/app-user/demotionDetection")
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
index 834ecc6..72ecbac 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -374,7 +374,7 @@
.eq(AppUser::getDelFlag, 0));
ArrayList<Long> userIds = new ArrayList<>();
userIds.add(userId);
- getUserAncestorList(userIds, appUserList);
+ getUserAncestorList(user,userIds, appUserList);
// Long count1 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 1).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
// Long count2 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 2).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
// Long count3 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 3).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
@@ -382,13 +382,13 @@
// Long count5 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 5).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
// Long count6 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 6).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
// Long count7 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 7).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
- user.setCount1(count1);
- user.setCount2(count2);
- user.setCount3(count3);
- user.setCount4(count4);
- user.setCount5(count5);
- user.setCount6(count6);
- user.setCount7(count7);
+// user.setCount1(count1);
+// user.setCount2(count2);
+// user.setCount3(count3);
+// user.setCount4(count4);
+// user.setCount5(count5);
+// user.setCount6(count6);
+// user.setCount7(count7);
List<UserSignRecord> list = userSignRecordService.lambdaQuery().eq(UserSignRecord::getSignDay, LocalDate.now())
.eq(UserSignRecord::getAppUserId,userId).list();
@@ -399,25 +399,18 @@
}
return R.ok(user);
}
- private Long count1 = 0L;
- private Long count2 = 0L;
- private Long count3 = 0L;
- private Long count4 = 0L;
- private Long count5 = 0L;
- private Long count6 = 0L;
- private Long count7 = 0L;
- public void getUserAncestorList(List<Long> userIds, List<AppUser> list) {
+ public void getUserAncestorList(AppUser user,List<Long> userIds, List<AppUser> list) {
List<AppUser> children = list.stream().filter(u -> userIds.contains(u.getInviteUserId()) || userIds.contains(u.getTopInviteId())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(children)){
- count1 = count1 + children.stream().filter(e->e.getVipId() == 1).count();
- count2 = count2 + children.stream().filter(e->e.getVipId() == 2).count();
- count3 = count3 + children.stream().filter(e->e.getVipId() == 3).count();
- count4 = count4 + children.stream().filter(e->e.getVipId() == 4).count();
- count5 = count5 + children.stream().filter(e->e.getVipId() == 5).count();
- count6 = count6 + children.stream().filter(e->e.getVipId() == 6).count();
- count7 = count7 + children.stream().filter(e->e.getVipId() == 7).count();
+ user.setCount1((user.getCount1() == null ? 0L : user.getCount1()) + children.stream().filter(e->e.getVipId() == 1).count());
+ user.setCount2((user.getCount2() == null ? 0L : user.getCount2()) + children.stream().filter(e->e.getVipId() == 2).count());
+ user.setCount3((user.getCount3() == null ? 0L : user.getCount3()) + children.stream().filter(e->e.getVipId() == 3).count());
+ user.setCount4((user.getCount4() == null ? 0L : user.getCount4()) + children.stream().filter(e->e.getVipId() == 4).count());
+ user.setCount5((user.getCount5() == null ? 0L : user.getCount5()) + children.stream().filter(e->e.getVipId() == 5).count());
+ user.setCount6((user.getCount6() == null ? 0L : user.getCount6()) + children.stream().filter(e->e.getVipId() == 6).count());
+ user.setCount7((user.getCount7() == null ? 0L : user.getCount7()) + children.stream().filter(e->e.getVipId() == 7).count());
List<Long> userIdList = children.stream().map(AppUser::getId).collect(Collectors.toList());
- getUserAncestorList(userIdList, children);
+ getUserAncestorList(user,userIdList, children);
}
}
@@ -1002,6 +995,17 @@
/**
+ * 检查会员降级
+ * @param appUserId
+ */
+ @PostMapping("/app-user/vipDemotion")
+ public void vipDemotion(@RequestParam("appUserId") Long appUserId){
+ appUserService.vipDemotion(appUserId);
+ }
+
+
+
+ /**
* 用户降级检测
*/
@PostMapping("/demotionDetection")
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
index 7dc3c41..f0671a0 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -94,6 +94,12 @@
*/
void vipUpgrade(Long appUserId);
+ /**
+ * 处理用户会员降级
+ * @param appUserId
+ */
+ void vipDemotion(Long appUserId);
+
/**
* 降级检测
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
index 6f84c3e..7567718 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -179,7 +179,8 @@
}
//查询用户是否注册,没有注册则跳转到注册页面
- AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, mobileLogin.getPhone()).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
+ AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, mobileLogin.getPhone())
+ .ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
if(null == appUser){
LoginVo loginVo = new LoginVo();
loginVo.setSkipPage(2);
@@ -200,8 +201,7 @@
loginUser.setUsername(appUser.getName());
Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
loginVo.setToken(tokenApplet.get("access_token").toString());
- loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
-
+ loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
appUser.setLastLoginTime(LocalDateTime.now());
this.updateById(appUser);
return R.ok(loginVo);
@@ -608,7 +608,85 @@
}
}
-
+ /**
+ * 处理会员降级
+ * @param appUserId
+ */
+ @Override
+ public void vipDemotion(Long appUserId) {
+ AppUser appUser = this.getById(appUserId);
+ Integer vipId = appUser.getVipId();
+ //黄金会员
+ VipSetting vipSetting2 = vipSettingClient.getVipSetting(2).getData();
+ //消费积分满足升级
+ if(1 == vipSetting2.getVipLevelUpShopRole() && appUser.getShopPoint() >= vipSetting2.getVipLevelUpShop() && appUser.getVipId() > 2){
+ appUser.setVipId(2);
+ this.updateById(appUser);
+ //添加等级变化记录
+ UserChangeLog userChangeLog = new UserChangeLog();
+ userChangeLog.setDelFlag(0);
+ userChangeLog.setCreateTime(LocalDateTime.now());
+ userChangeLog.setAppUserId(appUser.getId());
+ userChangeLog.setBeforeVipId(vipId);
+ userChangeLog.setAfterVipId(appUser.getVipId());
+ userChangeLog.setChangeType(0);
+ userChangeLogService.save(userChangeLog);
+ return;
+ }
+ //返佣积分满足升级
+ if(1 == vipSetting2.getVipLevelUpShareRole() && appUser.getSharePoint() >= vipSetting2.getVipLevelUpShare() && appUser.getVipId() > 2){
+ appUser.setVipId(2);
+ this.updateById(appUser);
+ //添加等级变化记录
+ UserChangeLog userChangeLog = new UserChangeLog();
+ userChangeLog.setDelFlag(0);
+ userChangeLog.setCreateTime(LocalDateTime.now());
+ userChangeLog.setAppUserId(appUser.getId());
+ userChangeLog.setBeforeVipId(vipId);
+ userChangeLog.setAfterVipId(appUser.getVipId());
+ userChangeLog.setChangeType(0);
+ userChangeLogService.save(userChangeLog);
+ return;
+ }
+ //下级人数满足升级
+ Integer vipLevelUpNumRole = vipSetting2.getVipLevelUpNumRole();
+ Integer vipDirectNum = vipSetting2.getVipDirectNum();
+ Integer vipTeamNum = vipSetting2.getVipTeamNum();
+ if(1 == vipLevelUpNumRole && appUser.getVipId() > 2){
+ //查询直推用户达到X人或者团队人数达到X人后,可升级
+ //直推用户数
+ long count = this.count(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getStatus, 1).eq(AppUser::getInviteUserId, appUserId));
+ //团队用户数
+ List<AppUser> subordinate = getSubordinate(appUserId);
+ if(vipDirectNum <= count || vipTeamNum <= subordinate.size()){
+ appUser.setVipId(2);
+ this.updateById(appUser);
+ //添加等级变化记录
+ UserChangeLog userChangeLog = new UserChangeLog();
+ userChangeLog.setDelFlag(0);
+ userChangeLog.setCreateTime(LocalDateTime.now());
+ userChangeLog.setAppUserId(appUser.getId());
+ userChangeLog.setBeforeVipId(vipId);
+ userChangeLog.setAfterVipId(appUser.getVipId());
+ userChangeLog.setChangeType(0);
+ userChangeLogService.save(userChangeLog);
+ return;
+ }
+ }
+ if(appUser.getVipId() > 2){
+ appUser.setVipId(1);
+ this.updateById(appUser);
+ //添加等级变化记录
+ UserChangeLog userChangeLog = new UserChangeLog();
+ userChangeLog.setDelFlag(0);
+ userChangeLog.setCreateTime(LocalDateTime.now());
+ userChangeLog.setAppUserId(appUser.getId());
+ userChangeLog.setBeforeVipId(vipId);
+ userChangeLog.setAfterVipId(appUser.getVipId());
+ userChangeLog.setChangeType(0);
+ userChangeLogService.save(userChangeLog);
+ }
+ }
/**
* 递归查询顶级推广人
diff --git a/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java b/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java
index acaa797..7f258a0 100644
--- a/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java
+++ b/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java
@@ -22,38 +22,32 @@
@Test
public void contextLoads() {
List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
- .ne(AppUser::getStatus, 3));
+ .ne(AppUser::getStatus, 3)
+ .eq(AppUser::getDelFlag, 0));
+ AppUser user = appUserService.getById(1879046499735789569L);
ArrayList<Long> userIds = new ArrayList<>();
userIds.add(1879046499735789569L);
- getUserAncestorList(userIds, appUserList);
- System.err.println(count1);
- System.err.println(count2);
- System.err.println(count3);
- System.err.println(count4);
- System.err.println(count5);
- System.err.println(count6);
- System.err.println(count7);
+ getUserAncestorList(user,userIds, appUserList);
+ System.err.println(user.getCount1());
+ System.err.println(user.getCount2());
+ System.err.println(user.getCount3());
+ System.err.println(user.getCount4());
+ System.err.println(user.getCount5());
+ System.err.println(user.getCount6());
+ System.err.println(user.getCount7());
}
-
- private Long count1 = 0L;
- private Long count2 = 0L;
- private Long count3 = 0L;
- private Long count4 = 0L;
- private Long count5 = 0L;
- private Long count6 = 0L;
- private Long count7 = 0L;
- public void getUserAncestorList(List<Long> userIds, List<AppUser> list) {
+ public void getUserAncestorList(AppUser user,List<Long> userIds, List<AppUser> list) {
List<AppUser> children = list.stream().filter(u -> userIds.contains(u.getInviteUserId()) || userIds.contains(u.getTopInviteId())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(children)){
- count1 = count1 + children.stream().filter(e->e.getVipId() == 1).count();
- count2 = count2 + children.stream().filter(e->e.getVipId() == 2).count();
- count3 = count3 + children.stream().filter(e->e.getVipId() == 3).count();
- count4 = count4 + children.stream().filter(e->e.getVipId() == 4).count();
- count5 = count5 + children.stream().filter(e->e.getVipId() == 5).count();
- count6 = count6 + children.stream().filter(e->e.getVipId() == 6).count();
- count7 = count7 + children.stream().filter(e->e.getVipId() == 7).count();
+ user.setCount1((user.getCount1() == null ? 0L : user.getCount1()) + children.stream().filter(e->e.getVipId() == 1).count());
+ user.setCount2((user.getCount2() == null ? 0L : user.getCount2()) + children.stream().filter(e->e.getVipId() == 2).count());
+ user.setCount3((user.getCount3() == null ? 0L : user.getCount3()) + children.stream().filter(e->e.getVipId() == 3).count());
+ user.setCount4((user.getCount4() == null ? 0L : user.getCount4()) + children.stream().filter(e->e.getVipId() == 4).count());
+ user.setCount5((user.getCount5() == null ? 0L : user.getCount5()) + children.stream().filter(e->e.getVipId() == 5).count());
+ user.setCount6((user.getCount6() == null ? 0L : user.getCount6()) + children.stream().filter(e->e.getVipId() == 6).count());
+ user.setCount7((user.getCount7() == null ? 0L : user.getCount7()) + children.stream().filter(e->e.getVipId() == 7).count());
List<Long> userIdList = children.stream().map(AppUser::getId).collect(Collectors.toList());
- getUserAncestorList(userIdList, children);
+ getUserAncestorList(user,userIdList, children);
}
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 7fe2df4..9ed66d0 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -6,10 +6,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.account.api.feignClient.BalanceChangeRecordClient;
-import com.ruoyi.account.api.feignClient.UserCouponClient;
-import com.ruoyi.account.api.feignClient.UserPointClient;
+import com.ruoyi.account.api.feignClient.*;
import com.ruoyi.account.api.model.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
@@ -89,9 +86,6 @@
private UserPointClient userPointClient;
@Resource
- private PointSettingClient pointSettingClient;
-
- @Resource
private OrderBalancePaymentService orderBalancePaymentService;
@Resource
@@ -115,6 +109,9 @@
@Resource
private UserCouponClient userCouponClient;
+
+ @Resource
+ private UserChangeLogClient userChangeLogClient;
@@ -518,11 +515,6 @@
}
appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
- boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
- if(vipDemotion){
- appUser.setVipId(appUser.getVipId() - 1);
- }
-
//构建积分流水明细
UserPoint userPoint = new UserPoint();
userPoint.setType(1);
@@ -534,6 +526,12 @@
userPoint.setObjectId(order.getId());
userPointClient.saveUserPoint(userPoint);
appUserClient.editAppUserById(appUser);
+
+ //降级检测
+ boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
+ if(vipDemotion){
+ appUserClient.vipDemotion(appUser.getId());
+ }
//回退优惠券状态
if(null != order.getUserCouponId()){
UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
@@ -650,11 +648,6 @@
}
appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
- boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
- if(vipDemotion){
- appUser.setVipId(appUser.getVipId() - 1);
- }
-
//构建积分流水明细
UserPoint userPoint = new UserPoint();
userPoint.setType(1);
@@ -666,6 +659,12 @@
userPoint.setObjectId(order.getId());
userPointClient.saveUserPoint(userPoint);
appUserClient.editAppUserById(appUser);
+
+ //降级检测
+ boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
+ if(vipDemotion){
+ appUserClient.vipDemotion(appUser.getId());
+ }
//回退优惠券状态
if(null != order.getUserCouponId()){
--
Gitblit v1.7.1