Procházet zdrojové kódy

搜索股票接口改进

Zhangbw před 3 měsíci
rodič
revize
d8351794f2

+ 29 - 5
src/main/java/com/yingpai/gupiao/service/impl/StockSearchServiceImpl.java

@@ -53,6 +53,8 @@ public class StockSearchServiceImpl implements StockSearchService {
                 .and(w -> w
                         .likeRight(StockInfo::getStockCode, keyword) // 代码前缀匹配
                         .or()
+                        .likeLeft(StockInfo::getStockCode, keyword)  // 代码后缀匹配
+                        .or()
                         .like(StockInfo::getStockName, keyword)      // 名称包含匹配
                         .or()
                         .like(StockInfo::getAbbr, keyword)           // 拼音缩写包含匹配
@@ -76,12 +78,34 @@ public class StockSearchServiceImpl implements StockSearchService {
         if (!StringUtils.hasText(stockCode)) {
             throw new IllegalArgumentException("参数错误:stockCode不能为空");
         }
-        String finalStockCode = stockCode.trim();
+        String keyword = stockCode.trim();
 
-        // 修改点:直接查询该股票最新的一条记录,不再依赖全局最新日期
-        LambdaQueryWrapper<StockInfo> wrapper = new LambdaQueryWrapper<StockInfo>()
-                .eq(StockInfo::getStockCode, finalStockCode)
-                .orderByDesc(StockInfo::getTradeDate)
+        // 判断输入是股票代码(6位数字)还是股票名称
+        boolean isFullStockCode = keyword.matches("^\\d{6}$");
+        boolean isNumeric = keyword.matches("^\\d+$");
+        
+        LambdaQueryWrapper<StockInfo> wrapper = new LambdaQueryWrapper<StockInfo>();
+        
+        if (isFullStockCode) {
+            // 如果是6位数字,按股票代码精确查询(原有功能)
+            wrapper.eq(StockInfo::getStockCode, keyword);
+        } else if (isNumeric) {
+            // 如果是纯数字但不是6位,同时匹配前缀和后缀
+            // 例如:输入 "547" 可以匹配到前缀为547的股票(如 547001)和后缀为547的股票(如 000547)
+            // 使用 likeRight 匹配前缀,使用 likeLeft 匹配后缀
+            wrapper.and(w -> w
+                    .likeRight(StockInfo::getStockCode, keyword)  // 前缀匹配:547xxx
+                    .or()
+                    .likeLeft(StockInfo::getStockCode, keyword)   // 后缀匹配:xxx547
+            )
+            .apply("LENGTH(stock_code) = 6"); // 确保股票代码是6位
+        } else {
+            // 如果是股票名称,按股票名称精确匹配查询(原有功能)
+            wrapper.eq(StockInfo::getStockName, keyword);
+        }
+        
+        // 查询该股票最新的一条记录
+        wrapper.orderByDesc(StockInfo::getTradeDate)
                 .last("limit 1");
 
         StockInfo stockInfo = stockInfoMapper.selectOne(wrapper);

+ 2 - 3
src/main/resources/application.properties

@@ -2,15 +2,14 @@ spring.application.name=gupiao
 
 
 # application.properties ? application.yml
-spring.datasource.url=jdbc:mysql://localhost:3306/gupiao?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
+spring.datasource.url=jdbc:mysql://localhost:3306/gupiao?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
 spring.datasource.username=root
 spring.datasource.password=121380
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 
-# MyBatis-Plus 配置
+# MyBatis-Plus
 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
 
-# 日志配置
 logging.level.root=info
 logging.level.com.yingpai.gupiao=debug
 logging.level.com.baomidou.mybatisplus=debug