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