Jelajahi Sumber

加入超短池股票修改

Zhangbw 1 bulan lalu
induk
melakukan
ae84864a7a

+ 24 - 8
ruoyi-modules/yp-stock/src/main/java/com/yingpai/stock/service/impl/StockPoolServiceImpl.java

@@ -83,14 +83,16 @@ public class StockPoolServiceImpl implements IStockPoolService {
         log.info("[添加股票到池] stockCode={}, poolType={}, addDate={}, status={}",
             bo.getStockCode(), bo.getPoolType(), addDate, targetStatus);
 
-        // 1. 先检查是否已存在当前有效的记录(status=2)
-        LambdaQueryWrapper<StockPool> activeWrapper = Wrappers.lambdaQuery();
-        activeWrapper.eq(StockPool::getStockCode, bo.getStockCode())
-            .eq(StockPool::getPoolType, bo.getPoolType())
-            .eq(StockPool::getStatus, 2);
-        if (baseMapper.selectCount(activeWrapper) > 0) {
-            log.warn("[添加股票到池] 股票已存在: {}", bo.getStockCode());
-            throw new RuntimeException("该股票已在池中");
+        // 1. 如果要加入为当前有效(status=2),检查是否已存在其他当前有效的记录
+        if (targetStatus == 2) {
+            LambdaQueryWrapper<StockPool> activeWrapper = Wrappers.lambdaQuery();
+            activeWrapper.eq(StockPool::getStockCode, bo.getStockCode())
+                .eq(StockPool::getPoolType, bo.getPoolType())
+                .eq(StockPool::getStatus, 2);
+            if (baseMapper.selectCount(activeWrapper) > 0) {
+                log.warn("[添加股票到池] 股票已存在: {}", bo.getStockCode());
+                throw new RuntimeException("该股票已在池中");
+            }
         }
 
         // 2. 检查指定日期是否已有记录(任何状态),如果有则修改状态
@@ -230,6 +232,20 @@ public class StockPoolServiceImpl implements IStockPoolService {
         if (pool == null) {
             throw new RuntimeException("记录不存在");
         }
+
+        // 如果要修改为当前有效(status=2),需要检查是否已有其他当前有效的记录
+        if (status == 2) {
+            LambdaQueryWrapper<StockPool> activeWrapper = Wrappers.lambdaQuery();
+            activeWrapper.eq(StockPool::getStockCode, pool.getStockCode())
+                .eq(StockPool::getPoolType, pool.getPoolType())
+                .eq(StockPool::getStatus, 2)
+                .ne(StockPool::getId, id);  // 排除当前记录
+
+            if (baseMapper.selectCount(activeWrapper) > 0) {
+                throw new RuntimeException("该股票已在池中,不能同时存在多条当前有效记录");
+            }
+        }
+
         pool.setStatus(status);
         pool.setUpdateTime(LocalDateTime.now());
         return baseMapper.updateById(pool) > 0;