From ebde3f4f38741aaa0764b2e319f89f93d3296449 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期五, 23 八月 2024 17:12:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/filter/AuthFilter.java                        |  118 ++++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java                      |    2 
 ruoyi-service/ruoyi-payment/pom.xml                                                                     |   11 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java               |   24 +
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TAdvertising.java                    |    8 
 ruoyi-service/ruoyi-account/pom.xml                                                                     |   11 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java            |  120 ++++++++
 ruoyi-service/ruoyi-integration/pom.xml                                                                 |   11 
 ruoyi-service/ruoyi-chargingPile/pom.xml                                                                |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/filter/AuthFilter.java                          |  119 ++++++++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java                      |  120 ++++++++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java                      |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/filter/AuthFilter.java                          |  119 ++++++++
 ruoyi-service/ruoyi-order/pom.xml                                                                       |    6 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TAdvertisingMapper.xml                        |    5 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java         |    2 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java             |    7 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java        |    3 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java                              |    1 
 ruoyi-service/ruoyi-other/pom.xml                                                                       |    6 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java          |   33 ++
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java                                    |   92 ++----
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/RuoYiAccountApplication.java                |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java |    2 
 24 files changed, 752 insertions(+), 78 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TAdvertising.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TAdvertising.java
index c86c93c..02ba4a2 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TAdvertising.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TAdvertising.java
@@ -64,8 +64,12 @@
     @ApiModelProperty(value = "上架状态(0=否,1=是)")
     @TableField("status")
     private Integer status;
-
-
+    @ApiModelProperty(value = "小程序id")
+    @TableField("applet_id")
+    private String appletId;
+    @ApiModelProperty(value = "小程序名称")
+    @TableField("applet_name")
+    private String appletName;
 
     @ApiModelProperty(value = "广告状态 1未开始 2已开始 3已结束")
     @TableField(exist = false)
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java
index b67f5ef..bfa5fc4 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java
@@ -24,4 +24,5 @@
 				" |  |  \\    /  \\      /           \n" +
 				" ''-'   `'-'    `-..-'              ");
 	}
+	
 }
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index 1cd3f9c..0ec1a71 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -1,17 +1,13 @@
 package com.ruoyi.gateway.filter;
 
-import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.account.api.model.TAppUser;
-import com.ruoyi.system.api.domain.SysUser;
-import com.ruoyi.system.api.feignClient.SysUserClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.core.Ordered;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
@@ -27,7 +23,6 @@
 import io.jsonwebtoken.Claims;
 import reactor.core.publisher.Mono;
 
-import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -48,14 +43,6 @@
 	@Autowired
 	private RedisService redisService;
 	
-	@Lazy
-	@Resource
-	private AppUserClient appUserClient;
-	
-	@Lazy
-	@Resource
-	private SysUserClient sysUserClient;
-	
 	
 	
 	@Override
@@ -69,30 +56,31 @@
 			return chain.filter(exchange);
 		}
 		//防抖校验
-//		try {
-//			antiShake(request);
-//		}catch (Exception e){
-//			log.error("[重复提交]请求路径:{}", exchange.getRequest().getPath());
-//			return ServletUtils.webFluxResponseWriter(exchange.getResponse(), e.getMessage(), HttpStatus.SUCCESS);
-//		}
+		try {
+			antiShake(request);
+		}catch (Exception e){
+			log.error("[重复提交]请求路径:{}", exchange.getRequest().getPath());
+			return ServletUtils.webFluxResponseWriter(exchange.getResponse(), e.getMessage(), HttpStatus.SUCCESS);
+		}
 		
 		//校验账户是否有效
-//		try {
-//			verifyToken(request);
-//			verifyAccount(request);
-//		}catch (Exception e){
-//			return unauthorizedResponse(exchange, e.getMessage());
-//		}
+		try {
+			verifyToken(request);
+		}catch (Exception e){
+			return unauthorizedResponse(exchange, e.getMessage());
+		}
 		String token = getToken(request);
 		Claims claims = JwtUtils.parseToken(token);
 		String userkey = JwtUtils.getUserKey(claims);
 		String userid = JwtUtils.getUserId(claims);
 		String username = JwtUtils.getUserName(claims);
+		String userType = JwtUtils.getUserType(claims);
 		
 		// 设置用户信息到请求
 		addHeader(mutate, SecurityConstants.USER_KEY, userkey);
 		addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
 		addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
+		addHeader(mutate, SecurityConstants.USER_TYPE, userType);
 		// 内部请求来源参数清除
 		removeHeader(mutate, SecurityConstants.FROM_SOURCE);
 		return chain.filter(exchange.mutate().request(mutate.build()).build());
@@ -140,9 +128,19 @@
 	 * 防抖处理
 	 */
 	public void antiShake(ServerHttpRequest request) throws Exception{
+		HttpMethod method = request.getMethod();
+		if(HttpMethod.OPTIONS == method){
+			return;
+		}
 		HttpHeaders headers = request.getHeaders();
 		String client = headers.getFirst("client");
 		String timestamp = headers.getFirst("timestamp");
+		if(StringUtils.isEmpty(client)){
+			throw new RuntimeException("参数异常");
+		}
+		if(StringUtils.isEmpty(timestamp)){
+			throw new RuntimeException("参数异常");
+		}
 		String url = request.getURI().getPath();
 		Map<String, Object> cacheMap = redisService.getCacheMap(client);
 		if(null == cacheMap){
@@ -183,47 +181,15 @@
 		if (claims == null) {
 			throw new RuntimeException("令牌已过期或验证不正确!");
 		}
-		String userkey = JwtUtils.getUserKey(claims);
-		boolean islogin = redisService.hasKey(getTokenKey(userkey));
-		if (!islogin) {
-			throw new RuntimeException("登录状态已过期");
-		}
+//		String userkey = JwtUtils.getUserKey(claims);
+//		boolean islogin = redisService.hasKey(getTokenKey(userkey));
+//		if (!islogin) {
+//			throw new RuntimeException("登录状态已过期");
+//		}
 		String userid = JwtUtils.getUserId(claims);
 		String username = JwtUtils.getUserName(claims);
 		if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) {
 			throw new RuntimeException("令牌验证失败");
-		}
-	}
-	
-	/**
-	 * 校验账户是否有效
-	 * @param request
-	 * @throws Exception
-	 */
-	public void verifyAccount(ServerHttpRequest request) throws Exception{
-		String token = getToken(request);
-		Claims claims = JwtUtils.parseToken(token);
-		String userid = JwtUtils.getUserId(claims);
-		String userType = JwtUtils.getUserType(claims);
-		//管理后台用户
-		if ("system".equals(userType)) {
-			SysUser sysUser = sysUserClient.getSysUser(Long.valueOf(userid)).getData();
-			if(null == sysUser || "2".equals(sysUser.getDelFlag())){
-				throw new RuntimeException("无效的账户");
-			}
-			if("1".equals(sysUser.getStatus())){
-				throw new RuntimeException("账户已被停用,请联系系统管理员!");
-			}
-		}
-		//小程序用户
-		if ("applet".equals(userType)) {
-			TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData();
-			if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){
-				throw new RuntimeException("无效的账户");
-			}
-			if(2 == appUser.getStatus()){
-				throw new RuntimeException("账户已被冻结,请联系系统管理员!");
-			}
 		}
 	}
 	
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 1c3736d..dea823f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -718,4 +718,11 @@
         userService.resetPwd(user);
         return R.ok();
     }
+    
+    
+    @ResponseBody
+    @PostMapping("/getSysUserById")
+    public SysUser getSysUserById(@RequestParam("userId") Long userId){
+        return userService.getById(userId);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/filter/AuthFilter.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/filter/AuthFilter.java
new file mode 100644
index 0000000..9b0c010
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/filter/AuthFilter.java
@@ -0,0 +1,118 @@
+package com.ruoyi.system.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.ruoyi.system.service.ISysUserService;
+import org.apache.logging.log4j.core.config.Order;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/23 11:22
+ */
+@Order(-200)
+@Component
+public class AuthFilter implements Filter {
+	private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+	
+	@Lazy
+	@Resource
+	private AppUserClient appUserClient;
+	
+	@Lazy
+	@Resource
+	private ISysUserService sysUserService;
+	
+	
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		String userid = request.getHeader("user_id");
+		if(StringUtils.isEmpty(userid)){
+			filterChain.doFilter(request, response);
+			return;
+		}
+		String userType = request.getHeader("user_type");
+		//管理后台用户
+		if ("system".equals(userType)) {
+			SysUser sysUser = sysUserService.getById(userid);
+			if(null == sysUser || "2".equals(sysUser.getDelFlag())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if("1".equals(sysUser.getStatus())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被停用,请联系系统管理员!");
+				return;
+			}
+		}
+		//小程序用户
+		if ("applet".equals(userType)) {
+			TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData();
+			if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if(2 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被冻结,请联系系统管理员!");
+				return;
+			}
+		}
+		filterChain.doFilter(request, response);
+	}
+	
+	
+	
+	private void unauthorizedResponse(HttpServletResponse response, String msg) {
+		response.setStatus(HttpStatus.OK.value());
+		response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE);
+		PrintWriter writer = null;
+		try {
+			writer = response.getWriter();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		writer.println(JSON.toJSONString(R.fail(msg)));
+		writer.flush();
+		writer.close();
+	}
+	
+	
+	
+	/**
+	 * 获取请求token
+	 */
+	private String getToken(HttpServletRequest request) {
+		String token = request.getHeader(TokenConstants.AUTHENTICATION);
+		// 如果前端设置了令牌前缀,则裁剪掉前缀
+		if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
+			token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
+		}
+		return token;
+	}
+	
+	
+}
diff --git a/ruoyi-service/ruoyi-account/pom.xml b/ruoyi-service/ruoyi-account/pom.xml
index 6df3409..e109f2e 100644
--- a/ruoyi-service/ruoyi-account/pom.xml
+++ b/ruoyi-service/ruoyi-account/pom.xml
@@ -40,12 +40,23 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
         </dependency>
+    
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
+        </dependency>
 
         <!-- SpringBoot Actuator -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+    
+        <!-- SpringCloud Loadbalancer -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-loadbalancer</artifactId>
+        </dependency>
 
         <!-- Swagger UI -->
         <dependency>
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/RuoYiAccountApplication.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/RuoYiAccountApplication.java
index b879af8..29b5337 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/RuoYiAccountApplication.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/RuoYiAccountApplication.java
@@ -6,6 +6,7 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@@ -19,6 +20,7 @@
 @EnableRyFeignClients
 @SpringBootApplication
 @EnableScheduling//开启定时任务
+@ServletComponentScan
 @EnableTransactionManagement//开启事务
 public class RuoYiAccountApplication {
     public static void main(String[] args) {
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index b74dc0c..49fd3af 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -1,5 +1,7 @@
 package com.ruoyi.account.controller;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -647,7 +649,7 @@
         //签到加积分记录
         R<TIntegralRule> set = integralRuleClient.getSet();
         TIntegralRule data = set.getData();
-        JSONObject jsonObject = JSON.parseObject(data.getAddVehiclesEarnsPoints());
+        JSONObject jsonObject = JSON.parseObject(data.getSignInForPoints());
         //增加每日积分
         Integer points = 0;
         Integer point = jsonObject.getInteger("num1");
@@ -675,6 +677,35 @@
         appUserService.updateById(byId);
         return R.ok();
     }
+    //已签到日期
+    @ApiOperation(value = "本月已签到日期", tags = {"小程序-个人中心-签到"})
+    @GetMapping(value = "/user/has/sign")
+    public R<List<TAppUserSign>> hasSign() {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        DateTime startOfMonth = DateUtil.beginOfMonth(new Date());
+        DateTime endOfMonth = DateUtil.endOfMonth(new Date());
+        // 获取用户的所有签到记录
+        List<TAppUserSign> signRecords = signService.lambdaQuery()
+                .between(TAppUserSign::getSignDay, startOfMonth, endOfMonth)
+                .eq(TAppUserSign::getAppUserId, userId)
+                .orderByDesc(TAppUserSign::getSignDay)
+                .list();
+        return R.ok(signRecords);
+
+    }
+
+
+
+    //已连续签到多少天
+
+    @ApiOperation(value = "本月已连续签到天数", tags = {"小程序-个人中心-签到"})
+    @GetMapping(value = "/user/continue/sign")
+    public R continueSign() {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        int days = signDayUtil.calculateContinuousSignDays(userId);
+        return R.ok(days);
+    }
+
 
 
     //积分变化记录用
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java
new file mode 100644
index 0000000..494fa29
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java
@@ -0,0 +1,120 @@
+package com.ruoyi.account.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.account.service.TAppUserService;
+import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.JwtUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import io.jsonwebtoken.Claims;
+import org.apache.logging.log4j.core.config.Order;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/23 11:22
+ */
+@Order(-200)
+@Component
+public class AuthFilter implements Filter {
+	private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+	
+	@Lazy
+	@Resource
+	private TAppUserService appUserService;
+	
+	@Lazy
+	@Resource
+	private SysUserClient sysUserClient;
+	
+	
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		String userid = request.getHeader("user_id");
+		if(StringUtils.isEmpty(userid)){
+			filterChain.doFilter(request, response);
+			return;
+		}
+		String userType = request.getHeader("user_type");
+		//管理后台用户
+		if ("system".equals(userType)) {
+			SysUser sysUser = sysUserClient.getSysUser(Long.valueOf(userid)).getData();
+			if(null == sysUser || "2".equals(sysUser.getDelFlag())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if("1".equals(sysUser.getStatus())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被停用,请联系系统管理员!");
+				return;
+			}
+		}
+		//小程序用户
+		if ("applet".equals(userType)) {
+			TAppUser appUser = appUserService.getById(userid);
+			if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if(2 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被冻结,请联系系统管理员!");
+				return;
+			}
+		}
+		filterChain.doFilter(request, response);
+	}
+	
+	
+	
+	private void unauthorizedResponse(HttpServletResponse response, String msg) {
+		response.setStatus(HttpStatus.OK.value());
+		response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE);
+		PrintWriter writer = null;
+		try {
+			writer = response.getWriter();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		writer.println(JSON.toJSONString(R.fail(msg)));
+		writer.flush();
+		writer.close();
+	}
+	
+	
+	
+	/**
+	 * 获取请求token
+	 */
+	private String getToken(HttpServletRequest request) {
+		String token = request.getHeader(TokenConstants.AUTHENTICATION);
+		// 如果前端设置了令牌前缀,则裁剪掉前缀
+		if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
+			token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
+		}
+		return token;
+	}
+	
+	
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/pom.xml b/ruoyi-service/ruoyi-chargingPile/pom.xml
index c214baa..75191c3 100644
--- a/ruoyi-service/ruoyi-chargingPile/pom.xml
+++ b/ruoyi-service/ruoyi-chargingPile/pom.xml
@@ -55,6 +55,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+    
+        <!-- SpringCloud Loadbalancer -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-loadbalancer</artifactId>
+        </dependency>
 
         <!-- Swagger UI -->
         <dependency>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java
index 25eaf50..cee17bf 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java
@@ -6,6 +6,7 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@@ -19,6 +20,7 @@
 @EnableRyFeignClients
 @SpringBootApplication
 @EnableScheduling//开启定时任务
+@ServletComponentScan
 @EnableTransactionManagement//开启事务
 public class RuoYiChargingPileApplication {
     public static void main(String[] args) {
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java
new file mode 100644
index 0000000..7383d16
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java
@@ -0,0 +1,120 @@
+package com.ruoyi.chargingPile.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.JwtUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import io.jsonwebtoken.Claims;
+import org.apache.logging.log4j.core.config.Order;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/23 11:22
+ */
+@Order(-200)
+@Component
+public class AuthFilter implements Filter {
+	private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+	
+	@Lazy
+	@Resource
+	private AppUserClient appUserClient;
+	
+	@Lazy
+	@Resource
+	private SysUserClient sysUserClient;
+	
+	
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		String userid = request.getHeader("user_id");
+		if(StringUtils.isEmpty(userid)){
+			filterChain.doFilter(request, response);
+			return;
+		}
+		String userType = request.getHeader("user_type");
+		//管理后台用户
+		if ("system".equals(userType)) {
+			SysUser sysUser = sysUserClient.getSysUser(Long.valueOf(userid)).getData();
+			if(null == sysUser || "2".equals(sysUser.getDelFlag())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if("1".equals(sysUser.getStatus())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被停用,请联系系统管理员!");
+				return;
+			}
+		}
+		//小程序用户
+		if ("applet".equals(userType)) {
+			TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData();
+			if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if(2 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被冻结,请联系系统管理员!");
+				return;
+			}
+		}
+		filterChain.doFilter(request, response);
+	}
+	
+	
+	
+	private void unauthorizedResponse(HttpServletResponse response, String msg) {
+		response.setStatus(HttpStatus.OK.value());
+		response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE);
+		PrintWriter writer = null;
+		try {
+			writer = response.getWriter();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		writer.println(JSON.toJSONString(R.fail(msg)));
+		writer.flush();
+		writer.close();
+	}
+	
+	
+	
+	/**
+	 * 获取请求token
+	 */
+	private String getToken(HttpServletRequest request) {
+		String token = request.getHeader(TokenConstants.AUTHENTICATION);
+		// 如果前端设置了令牌前缀,则裁剪掉前缀
+		if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
+			token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
+		}
+		return token;
+	}
+	
+	
+}
diff --git a/ruoyi-service/ruoyi-integration/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml
index 5a824fc..573df82 100644
--- a/ruoyi-service/ruoyi-integration/pom.xml
+++ b/ruoyi-service/ruoyi-integration/pom.xml
@@ -32,12 +32,23 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
         </dependency>
+    
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
+        </dependency>
 
         <!-- SpringBoot Actuator -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+    
+        <!-- SpringCloud Loadbalancer -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-loadbalancer</artifactId>
+        </dependency>
 
         <!-- Swagger UI -->
         <dependency>
diff --git a/ruoyi-service/ruoyi-order/pom.xml b/ruoyi-service/ruoyi-order/pom.xml
index c3c837a..a4353da 100644
--- a/ruoyi-service/ruoyi-order/pom.xml
+++ b/ruoyi-service/ruoyi-order/pom.xml
@@ -67,6 +67,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+    
+        <!-- SpringCloud Loadbalancer -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-loadbalancer</artifactId>
+        </dependency>
 
         <!-- Swagger UI -->
         <dependency>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java
index 5fe3649..7255afa 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java
@@ -6,6 +6,7 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@@ -19,6 +20,7 @@
 @EnableRyFeignClients
 @SpringBootApplication
 @EnableScheduling//开启定时任务
+@ServletComponentScan
 @EnableTransactionManagement//开启事务
 public class RuoYiOrderApplication {
     public static void main(String[] args) {
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
index 1e5f04f..905b3ba 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -93,6 +93,7 @@
             case 1:
                 for (int i = 0; i < split.length-1; i++) {
                     Integer reduce = tShoppingOrderService.list(new QueryWrapper<TShoppingOrder>()
+                                    .eq("order_type",1)
                                     .eq("goods_id", split[i])
                                     .eq("payment_status", 2)
                                     .ne("refund_status", 2))
@@ -103,6 +104,8 @@
             case 2:
                 for (int i = 0; i < split.length-1; i++) {
                     Integer reduce = exchangeOrderService.list(new QueryWrapper<TExchangeOrder>()
+                                            .eq("order_type",1)
+                                    .ne("status",4)
                                     .eq("goods_id", split[i])
                                     )
                             .stream().map(TExchangeOrder::getPurchaseQuantity).reduce(0, Integer::sum);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/filter/AuthFilter.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/filter/AuthFilter.java
new file mode 100644
index 0000000..9702f6d
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/filter/AuthFilter.java
@@ -0,0 +1,119 @@
+package com.ruoyi.order.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.JwtUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import io.jsonwebtoken.Claims;
+import org.apache.logging.log4j.core.config.Order;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/23 11:22
+ */
+@Order(-200)
+@Component
+public class AuthFilter implements Filter {
+	private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+	
+	@Lazy
+	@Resource
+	private AppUserClient appUserClient;
+	
+	@Lazy
+	@Resource
+	private SysUserClient sysUserClient;
+	
+	
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		String userid = request.getHeader("user_id");
+		if(StringUtils.isEmpty(userid)){
+			filterChain.doFilter(request, response);
+			return;
+		}
+		String userType = request.getHeader("user_type");
+		//管理后台用户
+		if ("system".equals(userType)) {
+			SysUser sysUser = sysUserClient.getSysUser(Long.valueOf(userid)).getData();
+			if(null == sysUser || "2".equals(sysUser.getDelFlag())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if("1".equals(sysUser.getStatus())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被停用,请联系系统管理员!");
+				return;
+			}
+		}
+		//小程序用户
+		if ("applet".equals(userType)) {
+			TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData();
+			if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if(2 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被冻结,请联系系统管理员!");
+				return;
+			}
+		}
+		filterChain.doFilter(request, response);
+	}
+	
+	
+	
+	private void unauthorizedResponse(HttpServletResponse response, String msg) {
+		response.setStatus(HttpStatus.OK.value());
+		response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE);
+		PrintWriter writer = null;
+		try {
+			writer = response.getWriter();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		writer.println(JSON.toJSONString(R.fail(msg)));
+		writer.flush();
+		writer.close();
+	}
+	
+	
+	
+	/**
+	 * 获取请求token
+	 */
+	private String getToken(HttpServletRequest request) {
+		String token = request.getHeader(TokenConstants.AUTHENTICATION);
+		// 如果前端设置了令牌前缀,则裁剪掉前缀
+		if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
+			token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
+		}
+		return token;
+	}
+	
+	
+}
diff --git a/ruoyi-service/ruoyi-other/pom.xml b/ruoyi-service/ruoyi-other/pom.xml
index 0ca03f6..a44ba7c 100644
--- a/ruoyi-service/ruoyi-other/pom.xml
+++ b/ruoyi-service/ruoyi-other/pom.xml
@@ -55,6 +55,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+    
+        <!-- SpringCloud Loadbalancer -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-loadbalancer</artifactId>
+        </dependency>
 
         <!-- Swagger UI -->
         <dependency>
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java
index 310262a..f1b9f56 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/RuoYiOtherApplication.java
@@ -7,6 +7,7 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@@ -20,6 +21,7 @@
 @EnableRyFeignClients
 @SpringBootApplication
 @EnableScheduling//开启定时任务
+@ServletComponentScan
 @EnableTransactionManagement//开启事务
 public class RuoYiOtherApplication {
     public static void main(String[] args) {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
index dda7683..d8c9658 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
@@ -35,7 +35,7 @@
     
     
     @GetMapping("/getSet")
-    @ApiOperation(tags = {"管理后台-积分管理"},value = "获取积分设置")
+    @ApiOperation(tags = {"管理后台-积分管理","小程序-个人中心-签到"},value = "获取积分设置")
     public R<TIntegralRule> getSet() {
         TIntegralRule res = integralRuleService.getOne(new QueryWrapper<>());
         return R.ok(res);
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/filter/AuthFilter.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/filter/AuthFilter.java
new file mode 100644
index 0000000..5fab005
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/filter/AuthFilter.java
@@ -0,0 +1,119 @@
+package com.ruoyi.other.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.JwtUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import io.jsonwebtoken.Claims;
+import org.apache.logging.log4j.core.config.Order;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/23 11:22
+ */
+@Order(-200)
+@Component
+public class AuthFilter implements Filter {
+	private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+	
+	@Lazy
+	@Resource
+	private AppUserClient appUserClient;
+	
+	@Lazy
+	@Resource
+	private SysUserClient sysUserClient;
+	
+	
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		String userid = request.getHeader("user_id");
+		if(StringUtils.isEmpty(userid)){
+			filterChain.doFilter(request, response);
+			return;
+		}
+		String userType = request.getHeader("user_type");
+		//管理后台用户
+		if ("system".equals(userType)) {
+			SysUser sysUser = sysUserClient.getSysUser(Long.valueOf(userid)).getData();
+			if(null == sysUser || "2".equals(sysUser.getDelFlag())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if("1".equals(sysUser.getStatus())){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被停用,请联系系统管理员!");
+				return;
+			}
+		}
+		//小程序用户
+		if ("applet".equals(userType)) {
+			TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData();
+			if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"无效的账户");
+				return;
+			}
+			if(2 == appUser.getStatus()){
+				log.error("[账户异常处理]请求账户id:{}", userid);
+				unauthorizedResponse(response,"账户已被冻结,请联系系统管理员!");
+				return;
+			}
+		}
+		filterChain.doFilter(request, response);
+	}
+	
+	
+	
+	private void unauthorizedResponse(HttpServletResponse response, String msg) {
+		response.setStatus(HttpStatus.OK.value());
+		response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE);
+		PrintWriter writer = null;
+		try {
+			writer = response.getWriter();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		writer.println(JSON.toJSONString(R.fail(msg)));
+		writer.flush();
+		writer.close();
+	}
+	
+	
+	
+	/**
+	 * 获取请求token
+	 */
+	private String getToken(HttpServletRequest request) {
+		String token = request.getHeader(TokenConstants.AUTHENTICATION);
+		// 如果前端设置了令牌前缀,则裁剪掉前缀
+		if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
+			token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
+		}
+		return token;
+	}
+	
+	
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java
index f0d8245..d15b333 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java
@@ -9,8 +9,10 @@
 import com.ruoyi.other.mapper.TVipMapper;
 import com.ruoyi.other.service.TVipService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.util.List;
 
@@ -34,18 +36,20 @@
 
         for (TVip tVip : list) {
             String coupon = tVip.getCoupon();
-            JSONArray jsonArray = JSONObject.parseArray(coupon);
-            StringBuilder stringBuilder = new StringBuilder();
-            for (int i = 0; i < jsonArray.size(); i++) {
-                JSONObject jsonObject = jsonArray.getJSONObject(i);
-                Integer id = jsonObject.getInteger("id");
-                Integer number = jsonObject.getInteger("number");
-                TCoupon tCoupon = tCouponMapper.selectById(id);
-                if (tCoupon!=null){
-                    stringBuilder.append(tCoupon.getName()).append("*").append(number).append(";");
+            if (StringUtils.hasLength(coupon)){
+                JSONArray jsonArray = JSONObject.parseArray(coupon);
+                StringBuilder stringBuilder = new StringBuilder();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject jsonObject = jsonArray.getJSONObject(i);
+                    Integer id = jsonObject.getInteger("id");
+                    Integer number = jsonObject.getInteger("number");
+                    TCoupon tCoupon = tCouponMapper.selectById(id);
+                    if (tCoupon!=null){
+                        stringBuilder.append(tCoupon.getName()).append("*").append(number).append(";");
+                    }
                 }
+                tVip.setCouponName(stringBuilder.toString());
             }
-            tVip.setCouponName(stringBuilder.toString());
         }
         pageInfo.setRecords(list);
         return pageInfo;
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TAdvertisingMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TAdvertisingMapper.xml
index bc87ba2..8a29448 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TAdvertisingMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TAdvertisingMapper.xml
@@ -15,11 +15,14 @@
         <result column="status" property="status" />
         <result column="create_time" property="createTime" />
         <result column="del_flag" property="delFlag" />
+        <result column="applet_id" property="appletId" />
+        <result column="applet_name" property="appletName" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, img, start_time, end_time, position, jump_type, jump_url, status, create_time, del_flag
+        id, name, img, start_time, end_time, position, jump_type, jump_url, status, create_time, del_flag,
+          applet_id, applet_name
     </sql>
     <select id="pageList" resultType="com.ruoyi.other.api.domain.TAdvertising">
         select * from t_advertising
diff --git a/ruoyi-service/ruoyi-payment/pom.xml b/ruoyi-service/ruoyi-payment/pom.xml
index cb8466b..eedddef 100644
--- a/ruoyi-service/ruoyi-payment/pom.xml
+++ b/ruoyi-service/ruoyi-payment/pom.xml
@@ -32,12 +32,23 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
         </dependency>
+    
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
+        </dependency>
 
         <!-- SpringBoot Actuator -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+    
+        <!-- SpringCloud Loadbalancer -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-loadbalancer</artifactId>
+        </dependency>
 
         <!-- Swagger UI -->
         <dependency>

--
Gitblit v1.7.1