Browse Source

拦截器修改

Zhangbw 3 tháng trước cách đây
mục cha
commit
acac1281d4

+ 49 - 0
src/main/java/com/yingpai/gupiao/config/MybatisPlusConfig.java

@@ -0,0 +1,49 @@
+package com.yingpai.gupiao.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.time.LocalDateTime;
+
+/**
+ * MyBatis-Plus 配置类
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+    /**
+     * 分页插件配置
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        // 添加分页插件,指定数据库类型为 MySQL
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+
+    /**
+     * 自动填充处理器
+     * 自动填充 createTime 和 updateTime 字段
+     */
+    @Bean
+    public MetaObjectHandler metaObjectHandler() {
+        return new MetaObjectHandler() {
+            @Override
+            public void insertFill(MetaObject metaObject) {
+                this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
+                this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
+            }
+
+            @Override
+            public void updateFill(MetaObject metaObject) {
+                this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
+            }
+        };
+    }
+}

+ 18 - 1
src/main/java/com/yingpai/gupiao/config/WebMvcConfig.java

@@ -1,15 +1,17 @@
 package com.yingpai.gupiao.config;
 
+import com.yingpai.gupiao.interceptor.AuthInterceptor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import java.nio.file.Paths;
 
 /**
- * Web MVC配置 - 静态资源映射
+ * Web MVC配置 - 静态资源映射和拦截器
  */
 @Slf4j
 @Configuration
@@ -17,6 +19,21 @@ import java.nio.file.Paths;
 public class WebMvcConfig implements WebMvcConfigurer {
 
     private final FileStorageConfig fileStorageConfig;
+    private final AuthInterceptor authInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authInterceptor)
+                // 需要认证的路径
+                .addPathPatterns("/v1/user/**")
+                .addPathPatterns("/v1/order/**")
+                // 排除不需要认证的路径
+                .excludePathPatterns("/v1/auth/**")
+                .excludePathPatterns("/v1/stock/**")
+                .excludePathPatterns("/api/**")
+                .excludePathPatterns("/uploads/**");
+        log.info("认证拦截器已注册");
+    }
 
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {

+ 63 - 0
src/main/java/com/yingpai/gupiao/domain/po/SysConfig.java

@@ -0,0 +1,63 @@
+package com.yingpai.gupiao.domain.po;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 系统配置实体类
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("sys_config")
+public class SysConfig {
+
+    /**
+     * 配置ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long configId;
+
+    /**
+     * 配置名称
+     */
+    private String configName;
+
+    /**
+     * 配置键名
+     */
+    private String configKey;
+
+    /**
+     * 配置键值
+     */
+    private String configValue;
+
+    /**
+     * 系统内置(Y是 N否)
+     */
+    private String configType;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 5 - 5
src/main/java/com/yingpai/gupiao/domain/po/User.java

@@ -1,8 +1,6 @@
 package com.yingpai.gupiao.domain.po;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -58,12 +56,14 @@ public class User {
     private Integer status;
     
     /**
-     * 创建时间
+     * 创建时间 - 自动填充
      */
+    @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
     
     /**
-     * 更新时间
+     * 更新时间 - 自动填充
      */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 }

+ 3 - 0
src/main/java/com/yingpai/gupiao/mapper/PaymentOrderMapper.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yingpai.gupiao.domain.po.PaymentOrder;
 import org.apache.ibatis.annotations.Mapper;
 
+/**
+ * 支付订单Mapper
+ */
 @Mapper
 public interface PaymentOrderMapper extends BaseMapper<PaymentOrder> {
 }

+ 4 - 10
src/main/java/com/yingpai/gupiao/mapper/SysConfigMapper.java

@@ -1,18 +1,12 @@
 package com.yingpai.gupiao.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yingpai.gupiao.domain.po.SysConfig;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
 
 /**
- * 系统配置Mapper(只读取配置值)
+ * 系统配置Mapper
  */
 @Mapper
-public interface SysConfigMapper {
-    
-    /**
-     * 根据配置key获取配置值
-     */
-    @Select("SELECT config_value FROM sys_config WHERE config_key = #{configKey} LIMIT 1")
-    String getConfigValue(@Param("configKey") String configKey);
+public interface SysConfigMapper extends BaseMapper<SysConfig> {
 }

+ 0 - 1
src/main/java/com/yingpai/gupiao/mapper/UserMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 用户Mapper接口
- * 继承MyBatis-Plus的BaseMapper,提供基础CRUD操作
  */
 @Mapper
 public interface UserMapper extends BaseMapper<User> {

+ 3 - 10
src/main/java/com/yingpai/gupiao/mapper/UserSubscriptionMapper.java

@@ -3,17 +3,10 @@ package com.yingpai.gupiao.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yingpai.gupiao.domain.po.UserSubscription;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
-
-import java.time.LocalDateTime;
 
+/**
+ * 用户订阅Mapper
+ */
 @Mapper
 public interface UserSubscriptionMapper extends BaseMapper<UserSubscription> {
-    
-    /**
-     * 查询用户某个池的有效订阅
-     */
-    @Select("SELECT * FROM user_subscription WHERE user_id = #{userId} AND pool_type = #{poolType} AND status = 1 AND expire_time > #{now} ORDER BY expire_time DESC LIMIT 1")
-    UserSubscription findActiveSubscription(@Param("userId") Long userId, @Param("poolType") Integer poolType, @Param("now") LocalDateTime now);
 }

+ 10 - 1
src/main/java/com/yingpai/gupiao/service/impl/OrderServiceImpl.java

@@ -169,7 +169,16 @@ public class OrderServiceImpl implements OrderService {
     
     @Override
     public boolean hasActiveSubscription(Long userId, Integer poolType) {
-        return subscriptionMapper.findActiveSubscription(userId, poolType, LocalDateTime.now()) != null;
+        UserSubscription subscription = subscriptionMapper.selectOne(
+            new LambdaQueryWrapper<UserSubscription>()
+                .eq(UserSubscription::getUserId, userId)
+                .eq(UserSubscription::getPoolType, poolType)
+                .eq(UserSubscription::getStatus, 1)
+                .gt(UserSubscription::getExpireTime, LocalDateTime.now())
+                .orderByDesc(UserSubscription::getExpireTime)
+                .last("LIMIT 1")
+        );
+        return subscription != null;
     }
     
     @Override

+ 13 - 2
src/main/java/com/yingpai/gupiao/service/impl/PaymentConfigServiceImpl.java

@@ -1,5 +1,7 @@
 package com.yingpai.gupiao.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yingpai.gupiao.domain.po.SysConfig;
 import com.yingpai.gupiao.domain.vo.PaymentConfigVO;
 import com.yingpai.gupiao.mapper.SysConfigMapper;
 import com.yingpai.gupiao.service.PaymentConfigService;
@@ -27,7 +29,7 @@ public class PaymentConfigServiceImpl implements PaymentConfigService {
     public PaymentConfigVO getConfig(Integer poolType) {
         if (poolType == 1) {
             // 超短池:到当日24点
-            String priceStr = sysConfigMapper.getConfigValue(SHORT_PRICE_KEY);
+            String priceStr = getConfigValue(SHORT_PRICE_KEY);
             BigDecimal price = priceStr != null ? new BigDecimal(priceStr) : new BigDecimal("18");
             
             return PaymentConfigVO.builder()
@@ -38,7 +40,7 @@ public class PaymentConfigServiceImpl implements PaymentConfigService {
                     .build();
         } else if (poolType == 2) {
             // 强势池:1年
-            String priceStr = sysConfigMapper.getConfigValue(STRONG_PRICE_KEY);
+            String priceStr = getConfigValue(STRONG_PRICE_KEY);
             BigDecimal price = priceStr != null ? new BigDecimal(priceStr) : new BigDecimal("998");
             
             return PaymentConfigVO.builder()
@@ -51,4 +53,13 @@ public class PaymentConfigServiceImpl implements PaymentConfigService {
         
         throw new RuntimeException("无效的池类型");
     }
+    
+    private String getConfigValue(String key) {
+        SysConfig config = sysConfigMapper.selectOne(
+            new LambdaQueryWrapper<SysConfig>()
+                .eq(SysConfig::getConfigKey, key)
+                .last("LIMIT 1")
+        );
+        return config != null ? config.getConfigValue() : null;
+    }
 }

+ 8 - 2
src/main/java/com/yingpai/gupiao/service/impl/WxPayConfigServiceImpl.java

@@ -1,5 +1,7 @@
 package com.yingpai.gupiao.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yingpai.gupiao.domain.po.SysConfig;
 import com.yingpai.gupiao.mapper.SysConfigMapper;
 import com.yingpai.gupiao.service.WxPayConfigService;
 import lombok.RequiredArgsConstructor;
@@ -48,7 +50,11 @@ public class WxPayConfigServiceImpl implements WxPayConfigService {
     }
     
     private String getConfigValue(String key) {
-        String value = sysConfigMapper.getConfigValue(key);
-        return value != null ? value : "";
+        SysConfig config = sysConfigMapper.selectOne(
+            new LambdaQueryWrapper<SysConfig>()
+                .eq(SysConfig::getConfigKey, key)
+                .last("LIMIT 1")
+        );
+        return config != null ? config.getConfigValue() : "";
     }
 }