|
|
@@ -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);
|