From 257d66798aa538f8737980f13d94c547bf0b51ea Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期三, 15 一月 2025 15:37:15 +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-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java | 1 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 | 35 +++--- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java | 2 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 + 9 files changed, 169 insertions(+), 73 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-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java index f5a1336..0ef8657 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java @@ -100,5 +100,6 @@ private String expressResult; @ApiModelProperty("最新快递信息") + @TableField(exist = false) private String express; } 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/controller/RefundPassController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java index 7078489..fafbf08 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java @@ -92,7 +92,7 @@ if(StringUtils.isNotEmpty(one.getExpressResult())){ MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(one.getExpressResult(), MapTrackKD100Vo.class); List<QueryKD100ListVo> data = mapTrackKD100Vo.getData(); - one.setExpress(data.size() > 0 ? data.get(0).getContext() : ""); + one.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : ""); } return R.ok(one); } 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 4857a74..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; @@ -205,7 +202,7 @@ if(StringUtils.isNotEmpty(order.getExpressResult())){ MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class); List<QueryKD100ListVo> data = mapTrackKD100Vo.getData(); - orderDetailVO.setExpress(data.size() > 0 ? data.get(0).getContext() : ""); + orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : ""); } if(order.getOrderType() == 1){ @@ -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