diff --git a/pom.xml b/pom.xml
index 682980e..096b687 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,11 +90,6 @@
jdk
3.0
-
- com.github.penggle
- kaptcha
- 2.3.2
-
org.codehaus.jackson
jackson-mapper-asl
@@ -106,29 +101,7 @@
jackson-core-asl
1.9.2
-
- io.jsonwebtoken
- jjwt-api
- 0.11.5
-
-
- io.jsonwebtoken
- jjwt-impl
- 0.11.5
- runtime
-
-
- io.jsonwebtoken
- jjwt-jackson
- 0.11.5
- runtime
-
-
-
- org.springframework.boot
- spring-boot-starter-actuator
-
org.springframework.boot
@@ -140,10 +113,6 @@
httpclient
4.5.13
-
- org.springframework.boot
- spring-boot-starter-security
-
diff --git a/src/main/java/cn/van/business/config/KaptchaConfig.java b/src/main/java/cn/van/business/config/KaptchaConfig.java
deleted file mode 100644
index 9cab3e1..0000000
--- a/src/main/java/cn/van/business/config/KaptchaConfig.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cn.van.business.config;
-
-import com.google.code.kaptcha.impl.DefaultKaptcha;
-import com.google.code.kaptcha.util.Config;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.Properties;
-
-@Configuration
-public class KaptchaConfig {
-
- @Bean
- public DefaultKaptcha kaptchaProducer() {
- DefaultKaptcha kaptcha = new DefaultKaptcha();
- Properties properties = new Properties();
-
- // 设置验证码参数
- properties.setProperty("kaptcha.image.width", "150");
- properties.setProperty("kaptcha.image.height", "50");
- properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- properties.setProperty("kaptcha.textproducer.char.length", "4");
-
- kaptcha.setConfig(new Config(properties));
- return kaptcha;
- }
-}
diff --git a/src/main/java/cn/van/business/config/SecurityConfig.java b/src/main/java/cn/van/business/config/SecurityConfig.java
deleted file mode 100644
index a57ed58..0000000
--- a/src/main/java/cn/van/business/config/SecurityConfig.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package cn.van.business.config;
-
-import cn.van.business.filter.JwtAuthFilter;
-import cn.van.business.service.impl.UserDetailsServiceImpl;
-import cn.van.business.util.JwtUtils;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
-import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.core.session.SessionRegistry;
-import org.springframework.security.core.session.SessionRegistryImpl;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.web.SecurityFilterChain;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-import org.springframework.security.web.session.HttpSessionEventPublisher;
-
-@Configuration
-@EnableWebSecurity
-public class SecurityConfig {
-
- private final UserDetailsServiceImpl userDetailsService;
- private final JwtAuthFilter jwtAuthFilter;
-
- public SecurityConfig(UserDetailsServiceImpl userDetailsService, JwtAuthFilter jwtAuthFilter) {
- this.userDetailsService = userDetailsService;
- this.jwtAuthFilter = jwtAuthFilter;
- }
-
- @Bean
- public SecurityFilterChain filterChain(HttpSecurity http,
- PasswordEncoder passwordEncoder) throws Exception {
- DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
- provider.setUserDetailsService(userDetailsService);
- provider.setPasswordEncoder(passwordEncoder);
-
- http
- .csrf(AbstractHttpConfigurer::disable)
- .sessionManagement(session -> session
- .sessionCreationPolicy(SessionCreationPolicy.STATELESS))
- .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
- .authenticationProvider(provider)
- .authorizeHttpRequests(auth -> auth
- .requestMatchers("/auth/login", "/auth/captcha","/wx/message").permitAll()
- .anyRequest().authenticated());
-
- return http.build();
- }
-
- @Bean
- public PasswordEncoder passwordEncoder() {
- return new BCryptPasswordEncoder();
- }
-
- @Bean
- public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
- return config.getAuthenticationManager();
- }
-
- @Bean
- public SessionRegistry sessionRegistry() {
- return new SessionRegistryImpl();
- }
-
- @Bean
- public HttpSessionEventPublisher httpSessionEventPublisher() {
- return new HttpSessionEventPublisher();
- }
-
-}
diff --git a/src/main/java/cn/van/business/controller/BaseController.java b/src/main/java/cn/van/business/controller/BaseController.java
deleted file mode 100644
index 46a5631..0000000
--- a/src/main/java/cn/van/business/controller/BaseController.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package cn.van.business.controller;
-
-import cn.van.business.model.user.UserInfo;
-import cn.van.business.util.JwtUtils;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.StringUtils;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.AbstractController;
-
-import java.util.Collections;
-import java.util.List;
-
-public class BaseController extends AbstractController {
-
- @Autowired
- private JwtUtils jwtUtils;
-
- // 获取当前用户信息
- protected UserInfo getCurrentUser(HttpServletRequest request) {
- String token = extractToken(request);
- if (token != null && jwtUtils.validateToken(token)) {
- String username = jwtUtils.extractUsername(token);
- // 从数据库获取用户信息
- return loadUserInfo(username);
- }
- return null;
- }
-
- // 检查用户是否已登录
- protected boolean isLogin(HttpServletRequest request) {
- return getCurrentUser(request) != null;
- }
-
- // 获取当前用户ID
- protected String getCurrentUserId(HttpServletRequest request) {
- UserInfo user = getCurrentUser(request);
- return user != null ? user.getId() : null;
- }
-
- // 获取当前用户角色
- protected List getCurrentUserRoles(HttpServletRequest request) {
- UserInfo user = getCurrentUser(request);
- return user != null ? user.getRoles() : Collections.emptyList();
- }
-
- // 提取token
- private String extractToken(HttpServletRequest request) {
- String bearerToken = request.getHeader("Authorization");
- if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
- return bearerToken.substring(7);
- }
- return null;
- }
-
- // 加载用户信息
- private UserInfo loadUserInfo(String username) {
- // 实现用户信息加载
- return new UserInfo();
- }
-
- @Override
- protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
- return null;
- }
-}
diff --git a/src/main/java/cn/van/business/controller/jd/OrderController.java b/src/main/java/cn/van/business/controller/jd/OrderController.java
deleted file mode 100644
index e98e7cc..0000000
--- a/src/main/java/cn/van/business/controller/jd/OrderController.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cn.van.business.controller.jd;
-
-import cn.van.business.filter.RequireAuth;
-import cn.van.business.model.ApiResponse;
-import cn.van.business.model.jd.ProductOrder;
-import cn.van.business.mq.MessageProducerService;
-import cn.van.business.repository.ProductOrderRepository;
-import cn.van.business.util.JDUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-
-/**
- * @author Leo
- * @version 1.0
- * @create 2024/11/7 13:39
- * @description:
- */
-@RestController
-@RequestMapping("/recordOrder")
-@RequireAuth
-public class OrderController {
-
- public static String TOKEN = "dd7f298cc465e7a9791796ae1303a1f6c031a18d4894ecd9e75d44fdb0ef32d80a49e4c5811b98d8ac65d73d22a54083630d5329c7c9de2276317669ecb2e544";
- @Autowired
- private MessageProducerService messageProducerService;
- @Autowired
- private ProductOrderRepository productOrderRepository;
-
- @RequestMapping("/list")
- @ResponseBody
- public ApiResponse list() throws Exception {
- try {
-
- List all = productOrderRepository.findAll();
- return ApiResponse.success(all);
- } catch (Exception e) {
- return ApiResponse.error(500, "Server Error: " + e.getMessage());
- }
- }
-
-}
diff --git a/src/main/java/cn/van/business/controller/jd/erp/TestController.java b/src/main/java/cn/van/business/controller/jd/erp/TestController.java
deleted file mode 100644
index 80bebdc..0000000
--- a/src/main/java/cn/van/business/controller/jd/erp/TestController.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.van.business.controller.jd.erp;
-
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpResponse;
-import cn.van.business.erp.request.AuthorizeListQueryRequest;
-import cn.van.business.erp.request.ERPAccount;
-import cn.van.business.erp.request.ProductListQueryRequest;
-import com.alibaba.fastjson2.JSONObject;
-
-/**
- * @author Leo
- * @version 1.0
- * @create 2025/6/17 21:06
- * @description:
- */
-public class TestController {
- public static void main(String[] args) {
- //AuthorizeListQueryRequest authorizeListQueryRequest = new AuthorizeListQueryRequest(ERPAccount.ACCOUNT_HUGE, new JSONObject());
- //String responseBody = authorizeListQueryRequest.getResponseBody();
- //System.out.println(responseBody);
- System.out.println("--------------");
- ProductListQueryRequest productListQueryRequest = new ProductListQueryRequest(ERPAccount.ACCOUNT_HUGE);
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("page_no", 1);
- jsonObject.put("page_size", 1);
- productListQueryRequest.setRequestBody(jsonObject);
- String responseBody1 = productListQueryRequest.getResponseBody();
- System.out.println(responseBody1);
- }
-}
diff --git a/src/main/java/cn/van/business/controller/login/AuthController.java b/src/main/java/cn/van/business/controller/login/AuthController.java
deleted file mode 100644
index cf10101..0000000
--- a/src/main/java/cn/van/business/controller/login/AuthController.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package cn.van.business.controller.login;
-
-import cn.van.business.model.ApiResponse;
-import cn.van.business.model.user.LoginRequest;
-import cn.van.business.model.user.LoginResponse;
-import cn.van.business.service.CaptchaService;
-import cn.van.business.util.JwtUtils;
-import cn.van.business.util.WXUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.concurrent.TimeUnit;
-
-@RestController
-@RequestMapping("/auth")
-public class AuthController {
-
- private static final Logger logger = LoggerFactory.getLogger(AuthController.class);
-
-
- private final CaptchaService captchaService;
- private final JwtUtils jwtUtils;
- private final AuthenticationManager authenticationManager;
- private final StringRedisTemplate redisTemplate;
-
- public AuthController(CaptchaService captchaService, JwtUtils jwtUtils, AuthenticationManager authenticationManager, StringRedisTemplate redisTemplate) {
- this.captchaService = captchaService;
- this.jwtUtils = jwtUtils;
- this.authenticationManager = authenticationManager;
- this.redisTemplate = redisTemplate;
- }
-
- private static final String USER_TOKEN_PREFIX = "user:token:";
-
- @PostMapping("/login")
- public ApiResponse login(@RequestBody LoginRequest request) {
- logger.info("用户登录");
- logger.info("用户名:{}", request.getUsername());
- logger.info("密码:{}", request.getPassword());
- logger.info("验证码:{}", request.getCaptcha());
- logger.info("生成的验证码:{}", request.getGeneratedCaptcha());
- // 1. 基础校验
- if (StringUtils.isBlank(request.getUsername()) || StringUtils.isBlank(request.getPassword())) {
- logger.error("用户名或密码不能为空");
- return ApiResponse.badRequest();
- }
-
- // 2. 验证码校验
- if (!captchaService.validateCaptcha(request.getCaptcha(), request.getGeneratedCaptcha())) {
- logger.error("验证码错误");
- return ApiResponse.badRequest();
- }
- // 在验证码校验后、认证前添加防爆破逻辑
- String loginFailKey = "login:fail:" + request.getUsername();
- Long failCount = redisTemplate.opsForValue().increment(loginFailKey);
- if (failCount != null && failCount > 5) {
- logger.error("尝试次数过多,请稍后再试");
- return ApiResponse.badRequest();
- }else {
- redisTemplate.expire(loginFailKey, 5, TimeUnit.MINUTES);
- }
-
- // 3. 用户认证(Spring Security 标准流程)
- logger.info("3. 用户认证(Spring Security 标准流程)");
- try {
- Authentication authentication = authenticationManager.authenticate(
- new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword()));
- } catch (Exception e) {
- logger.error("用户认证失败:{}", e.getMessage());
- }
-
- // 4. 生成 JWT Token
- logger.info("用户认证成功");
- String token = jwtUtils.generateToken(request.getUsername());
- String refreshToken = generateRefreshToken(request.getUsername());
- logger.info("生成 JWT Token:{}", token);
-
- // 5. 存入 Redis
- saveUserToken(request.getUsername(), token, jwtUtils.getExpiration(token));
-
- // 6. 构造响应
- LoginResponse response = new LoginResponse();
- response.setToken(token);
- response.setRefreshToken(refreshToken);
- response.setUsername(request.getUsername());
-
- return ApiResponse.success(response);
- }
-
-
- @PostMapping("/logout")
- public ApiResponse logout(@RequestHeader("Authorization") String token) {
- String actualToken = token.startsWith("Bearer ") ? token.substring(7) : token;
- String username = jwtUtils.extractUsername(actualToken);
- String userKey = USER_TOKEN_PREFIX + username;
-
- // 从 Redis 删除用户 Token
- redisTemplate.delete(userKey);
-
- // 添加 Token 到黑名单
- addToBlacklist(actualToken, jwtUtils.getRemainingExpirationTime(actualToken));
-
- return ApiResponse.success();
- }
-
-
- @GetMapping("/captcha")
- public ApiResponse getCaptcha() throws Exception {
- logger.info("获取验证码");
- String captchaImage = captchaService.generateCaptchaImage();
- return ApiResponse.success(captchaImage);
- }
-
- /**
- * 将用户 Token 存入 Redis,并设置相同有效期
- */
- private void saveUserToken(String username, String token, long expiration) {
- String key = USER_TOKEN_PREFIX + username;
- redisTemplate.opsForValue().set(key, token, expiration, TimeUnit.MILLISECONDS);
- }
-
- /**
- * 将 Token 加入黑名单
- */
- private void addToBlacklist(String token, long remainingTime) {
- String blacklistKey = "blacklist:token:" + token;
- redisTemplate.opsForValue().set(blacklistKey, "invalid", remainingTime, TimeUnit.MILLISECONDS);
- }
-
- /**
- * 生成刷新 Token(Refresh Token)
- */
- private String generateRefreshToken(String username) {
- return jwtUtils.generateToken(username);
- }
-
-}
diff --git a/src/main/java/cn/van/business/controller/login/CaptchaController.java b/src/main/java/cn/van/business/controller/login/CaptchaController.java
deleted file mode 100644
index a3e5ad6..0000000
--- a/src/main/java/cn/van/business/controller/login/CaptchaController.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.van.business.controller.login;
-
-import cn.van.business.service.CaptchaService;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/captcha")
-public class CaptchaController {
-
- private final CaptchaService captchaService;
-
- public CaptchaController(CaptchaService captchaService) {
- this.captchaService = captchaService;
- }
-
- @GetMapping("/generate")
- public ResponseEntity generateCaptcha() throws Exception {
- String base64Image = captchaService.generateCaptchaImage();
- return ResponseEntity.ok(base64Image);
- }
-}
diff --git a/src/main/java/cn/van/business/filter/JwtAuthFilter.java b/src/main/java/cn/van/business/filter/JwtAuthFilter.java
deleted file mode 100644
index 51a3190..0000000
--- a/src/main/java/cn/van/business/filter/JwtAuthFilter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package cn.van.business.filter;
-
-import cn.van.business.service.impl.UserDetailsServiceImpl;
-import cn.van.business.util.JwtUtils;
-import jakarta.servlet.FilterChain;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import java.io.IOException;
-
-@Component
-@RequiredArgsConstructor
-public class JwtAuthFilter extends OncePerRequestFilter {
-
- private final JwtUtils jwtUtils;
- private final UserDetailsServiceImpl userDetailsService;
-
- @Override
- protected void doFilterInternal(@NonNull HttpServletRequest request,
- @NonNull HttpServletResponse response,
- @NonNull FilterChain filterChain)
- throws ServletException, IOException {
- try {
- logger.debug("JwtAuthFilter.doFilterInternal");
- String jwt = parseJwt(request);
- if (jwt != null && jwtUtils.validateToken(jwt)) {
- String username = jwtUtils.extractUsername(jwt);
-
- UserDetails userDetails = userDetailsService.loadUserByUsername(username);
- UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
- userDetails, null, userDetails.getAuthorities());
-
- authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
- SecurityContextHolder.getContext().setAuthentication(authentication);
- }
-
- } catch (Exception e) {
- logger.error("无法认证用户: {}");
- }
-
- filterChain.doFilter(request, response);
- }
-
- private String parseJwt(HttpServletRequest request) {
- String headerAuth = request.getHeader("Authorization");
-
- if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) {
- return headerAuth.substring(7);
- }
-
- return null;
- }
-}
diff --git a/src/main/java/cn/van/business/filter/RequireAuth.java b/src/main/java/cn/van/business/filter/RequireAuth.java
deleted file mode 100644
index 47d3d81..0000000
--- a/src/main/java/cn/van/business/filter/RequireAuth.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package cn.van.business.filter;
-
-import org.springframework.security.access.prepost.PreAuthorize;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.METHOD, ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
-public @interface RequireAuth {}
diff --git a/src/main/java/cn/van/business/model/pl/TaobaoComment.java b/src/main/java/cn/van/business/model/pl/TaobaoComment.java
new file mode 100644
index 0000000..f926f9e
--- /dev/null
+++ b/src/main/java/cn/van/business/model/pl/TaobaoComment.java
@@ -0,0 +1,48 @@
+package cn.van.business.model.pl;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author Van
+ * @version 1.0
+ * @create 2025/7/6
+ * @description 淘宝评论实体类
+ */
+@Entity
+@Table(name = "taobao_comments")
+@Data
+public class TaobaoComment {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Integer id;
+
+ @Column(name = "product_id", nullable = false, length = 255)
+ private String productId;
+
+ @Column(name = "user_name", length = 255)
+ private String userName;
+
+ @Lob
+ @Column(name = "comment_text")
+ private String commentText;
+
+ @Column(name = "comment_id", length = 255, unique = false)
+ private String commentId;
+
+ @Lob
+ @Column(name = "picture_urls")
+ private String pictureUrls;
+
+ @Column(name = "created_at")
+ private LocalDateTime createdAt;
+
+ @Column(name = "comment_date", length = 255)
+ private String commentDate;
+
+ @Column(name = "is_use", columnDefinition = "int default 0")
+ private Integer isUse;
+}
diff --git a/src/main/java/cn/van/business/model/update-schema.sql b/src/main/java/cn/van/business/model/update-schema.sql
deleted file mode 100644
index 30d8edb..0000000
--- a/src/main/java/cn/van/business/model/update-schema.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-CREATE TABLE product_order
-(
- id BIGINT AUTO_INCREMENT NOT NULL,
- sku_name VARCHAR(255) NULL,
- sku_type INT NULL,
- order_id VARCHAR(255) NULL,
- order_time datetime NULL,
- order_account VARCHAR(255) NULL,
- is_reviewed BIT(1) NULL,
- review_time datetime NULL,
- is_cashback_received BIT(1) NULL,
- cashback_time datetime NULL,
- recipient_name VARCHAR(255) NULL,
- recipient_phone VARCHAR(255) NULL,
- recipient_address VARCHAR(255) NULL,
- who_order VARCHAR(255) NULL,
- CONSTRAINT pk_product_order PRIMARY KEY (id)
-);
diff --git a/src/main/java/cn/van/business/model/user/AdminUser.java b/src/main/java/cn/van/business/model/user/AdminUser.java
deleted file mode 100644
index f97da64..0000000
--- a/src/main/java/cn/van/business/model/user/AdminUser.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cn.van.business.model.user;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import lombok.Getter;
-import lombok.Setter;
-import jakarta.persistence.*;
-
-
-import java.time.LocalDateTime;
-
-/**
- * @author Leo
- * @version 1.0
- * @create 2025/6/16 10:55
- * @description:
- */
-@Getter
-@Setter
-@Entity
-@Table(name = "admin_users")
-public class AdminUser {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Long id;
-
- @Column(unique = true, nullable = false)
- private String username;
-
- private String password;
-
- private String nickname;
-
- private String avatarUrl;
-
- private String roles; // 角色列表,可用逗号分隔
-
- private LocalDateTime lastLoginTime;
-
- private LocalDateTime createTime;
-
- private LocalDateTime updateTime;
-}
-
diff --git a/src/main/java/cn/van/business/model/user/LoginRequest.java b/src/main/java/cn/van/business/model/user/LoginRequest.java
deleted file mode 100644
index 479ea74..0000000
--- a/src/main/java/cn/van/business/model/user/LoginRequest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package cn.van.business.model.user;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class LoginRequest {
- private String username;
- private String password;
- private String captcha; // 验证码字段(如果需要)
- private String generatedCaptcha;
-}
diff --git a/src/main/java/cn/van/business/model/user/LoginResponse.java b/src/main/java/cn/van/business/model/user/LoginResponse.java
deleted file mode 100644
index 9981e0f..0000000
--- a/src/main/java/cn/van/business/model/user/LoginResponse.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.van.business.model.user;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class LoginResponse {
- private String token;
- private Long expiresIn;
- private String refreshToken;
- private UserInfo userInfo;
- private String username;
-}
diff --git a/src/main/java/cn/van/business/model/user/UserInfo.java b/src/main/java/cn/van/business/model/user/UserInfo.java
deleted file mode 100644
index 619411f..0000000
--- a/src/main/java/cn/van/business/model/user/UserInfo.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.van.business.model.user;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-@Getter
-@Setter
-public class UserInfo {
- private String username;
- private String nickname;
- private String id;
- private List roles;
- private String avatarUrl;
-}
diff --git a/src/main/java/cn/van/business/repository/TaobaoCommentRepository.java b/src/main/java/cn/van/business/repository/TaobaoCommentRepository.java
new file mode 100644
index 0000000..e5a0d5b
--- /dev/null
+++ b/src/main/java/cn/van/business/repository/TaobaoCommentRepository.java
@@ -0,0 +1,21 @@
+package cn.van.business.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import cn.van.business.model.pl.TaobaoComment;
+
+import java.util.List;
+
+/**
+ * @author Van
+ * @version 1.0
+ * @create 2025/7/6
+ * @description 淘宝评论数据访问层接口
+ */
+@Repository
+public interface TaobaoCommentRepository extends JpaRepository {
+
+ List findByProductIdAndIsUseNotAndPictureUrlsIsNotNull(String productId, Integer isUse);
+
+ List findByProductIdAndPictureUrlsIsNotNull(String productId);
+}
diff --git a/src/main/java/cn/van/business/service/AdminUserService.java b/src/main/java/cn/van/business/service/AdminUserService.java
deleted file mode 100644
index 5be6f3a..0000000
--- a/src/main/java/cn/van/business/service/AdminUserService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package cn.van.business.service;
-
-import cn.hutool.crypto.digest.MD5;
-import cn.van.business.model.user.AdminUser;
-import cn.van.business.util.Util;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-@Service
-public class AdminUserService {
-
-
- // 模拟数据库存储
- private static final Map users = new HashMap<>();
-
- static {
- // 初始化一个测试用户(生产环境应从数据库加载)
- AdminUser user = new AdminUser();
- user.setUsername("van");
- String password = Util.md5("LK.807878712");
- user.setPassword(new BCryptPasswordEncoder().encode(password));
- users.put("van", user);
- }
-
- public AdminUser findByUsername(String username) {
- return users.get(username);
- }
-}
diff --git a/src/main/java/cn/van/business/service/CaptchaService.java b/src/main/java/cn/van/business/service/CaptchaService.java
deleted file mode 100644
index e2ba0b6..0000000
--- a/src/main/java/cn/van/business/service/CaptchaService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package cn.van.business.service;
-
-import com.google.code.kaptcha.Producer;
-import org.springframework.stereotype.Service;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.util.Base64;
-
-@Service
-public class CaptchaService {
-
- private final Producer kaptchaProducer;
-
- public CaptchaService(Producer kaptchaProducer) {
- this.kaptchaProducer = kaptchaProducer;
- }
-
- public String generateCaptchaImage() throws Exception {
- String text = kaptchaProducer.createText();
- BufferedImage image = kaptchaProducer.createImage(text);
-
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- ImageIO.write(image, "PNG", outputStream);
- return Base64.getEncoder().encodeToString(outputStream.toByteArray());
- }
-
- public boolean validateCaptcha(String userInput, String generatedCaptcha) {
- return userInput.equalsIgnoreCase("Succ");
- }
-}
diff --git a/src/main/java/cn/van/business/service/impl/UserDetailsServiceImpl.java b/src/main/java/cn/van/business/service/impl/UserDetailsServiceImpl.java
deleted file mode 100644
index 1b0b18d..0000000
--- a/src/main/java/cn/van/business/service/impl/UserDetailsServiceImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.van.business.service.impl;
-
-import cn.van.business.model.user.AdminUser;
-import cn.van.business.service.AdminUserService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-
-@Service
-public class UserDetailsServiceImpl implements UserDetailsService {
-
- @Autowired
- private AdminUserService adminUserService;
-
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- AdminUser user = adminUserService.findByUsername(username);
- if (user == null) {
- throw new UsernameNotFoundException("用户不存在");
- }
-
- return User.builder()
- .username(user.getUsername())
- .password(user.getPassword())
- .build();
- }
-
-}
diff --git a/src/main/java/cn/van/business/util/AuthEntryPoint.java b/src/main/java/cn/van/business/util/AuthEntryPoint.java
deleted file mode 100644
index 5fd44ee..0000000
--- a/src/main/java/cn/van/business/util/AuthEntryPoint.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.van.business.util;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.AuthenticationEntryPoint;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-
-@Component
-public class AuthEntryPoint implements AuthenticationEntryPoint {
-
- @Override
- public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException {
- response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "需要登录认证");
- }
-}
diff --git a/src/main/java/cn/van/business/util/JDScheduleJob.java b/src/main/java/cn/van/business/util/JDScheduleJob.java
index 2f9d8b9..1be02f9 100644
--- a/src/main/java/cn/van/business/util/JDScheduleJob.java
+++ b/src/main/java/cn/van/business/util/JDScheduleJob.java
@@ -548,10 +548,10 @@ public class JDScheduleJob {
hashOps.putAll(key, hours.stream().collect(Collectors.toMap(h -> h, h -> "1")));
}
- @Scheduled(cron = "0 0 0,8 * * ?")
+ @Scheduled(cron = "0 0 0 * * ?")
public void checkGiftCouponsExpiry() {
Set keys = redisTemplate.keys("gift_coupon:*");
- if (keys == null || keys.isEmpty()) return;
+ if (keys.isEmpty()) return;
for (String key : keys) {
Map