From fc4b1e66b241df686dbd7bebb6df6793060a8107 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 10 Nov 2024 21:36:53 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/utils/task/stock/StockTask.java |  122 +++++++++++++++++++++++-----------------
 1 files changed, 71 insertions(+), 51 deletions(-)

diff --git a/src/main/java/com/nq/utils/task/stock/StockTask.java b/src/main/java/com/nq/utils/task/stock/StockTask.java
index 619e482..506599a 100644
--- a/src/main/java/com/nq/utils/task/stock/StockTask.java
+++ b/src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -52,37 +53,53 @@
     private static final Logger log = LoggerFactory.getLogger(StockTask.class);
 
 
-    boolean syncINStockData = true;
+
+    private final AtomicBoolean syncINStockData = new AtomicBoolean(false);
 
     private final Lock syncINStockDataLock = new ReentrantLock();
+
+    private final AtomicBoolean syncUSStockData = new AtomicBoolean(false);
+
+    private final Lock syncUSStockDataLock = new ReentrantLock();
 
     /**
      * 同步系统所需要的股票
      */
-    @Scheduled(cron = "0 0 0/2  * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void syncINStockData() {
-        if (syncINStockData) // 定义一个布尔变量,代表新闻任务是否在处理中
+        if (syncINStockData.get()) { // 判断任务是否在处理中
             return;
-        syncINStockData = true;
+        }
         if (syncINStockDataLock.tryLock()) {
             try {
-                loadAllStock(EStockType.IN);
-//        loadAllStock(EStockType.HK);
+                syncINStockData.set(true); // 设置处理中标识为true
+                loadAllStock(EStockType.JP);
             } finally {
                 syncINStockDataLock.unlock();
-                syncINStockData = false;
+                syncINStockData.set(false); // 设置处理中标识为false
             }
         }
     }
 
-
-    /**
-     * 同步美国股票
-     */
-//    @Scheduled(cron = "0 0/30 * * * ?")
-    public void loadStockCompanies() {
-        loadAllCompanies();
-    }
+//
+//    /**
+//     * 同步美国股票
+//     */
+//    @Scheduled(cron = "0 0/1 * * * ?")
+//    public void loadStockCompanies() {
+//        if (syncUSStockData.get()) { // 判断任务是否在处理中
+//            return;
+//        }
+//        if (syncUSStockDataLock.tryLock()) {
+//            try {
+//                syncUSStockData.set(true); // 设置处理中标识为true
+//                loadAllStock(EStockType.US);
+//            } finally {
+//                syncUSStockDataLock.unlock();
+//                syncUSStockData.set(false); // 设置处理中标识为false
+//            }
+//        }
+//    }
 
 
     /**
@@ -128,40 +145,42 @@
                 }
             }
             for (DataStockBean o : list) {
-                Stock stock = stockMapper.findStockByCode(o.getId());
-                if (stock == null) {
-                    stock = new Stock();
-                    stock.setStockCode(o.getId());
-                    stock.setStockName(o.getName());
-                    stock.setStockType(eStockType.getCode());
-                    if (o.getType() == null) {
-                        stock.setStockGid(eStockType.getCode());
+                if(o.getType().equals("TSE")){
+                    Stock stock = stockMapper.findStockByCode(o.getId());
+                    if (stock == null) {
+                        stock = new Stock();
+                        stock.setStockCode(o.getId());
+                        stock.setStockName(o.getName());
+                        stock.setStockType(eStockType.getCode());
+                        if (o.getType() == null) {
+                            stock.setStockGid(eStockType.getCode());
+                        } else {
+                            stock.setStockGid(o.getType());
+                        }
+                        stock.setStockSpell(o.getSymbol());
+                        stock.setIsLock(0);
+                        stock.setIsShow(0);
+                        stock.setDataBase(0);
+                        stock.setAddTime(new Date());
+                        stockMapper.insert1(stock);
                     } else {
-                        stock.setStockGid(o.getType());
+                        stock.setStockCode(o.getId());
+                        stock.setStockName(o.getName());
+                        stock.setStockType(eStockType.getCode());
+                        if (o.getType() == null) {
+                            stock.setStockGid(eStockType.getCode());
+                        } else {
+                            stock.setStockGid(o.getType());
+                        }
+                        stock.setStockSpell(o.getSymbol());
+                        stock.setIsLock(0);
+                        stock.setIsShow(0);
+                        stock.setDataBase(0);
+                        stock.setAddTime(new Date());
+                        stockMapper.updateById(stock);
                     }
-                    stock.setStockSpell(o.getSymbol());
-                    stock.setIsLock(0);
-                    stock.setIsShow(0);
-                    stock.setDataBase(0);
-                    stock.setAddTime(new Date());
-                    stockMapper.insert1(stock);
-                } else {
-                    stock.setStockCode(o.getId());
-                    stock.setStockName(o.getName());
-                    stock.setStockType(eStockType.getCode());
-                    if (o.getType() == null) {
-                        stock.setStockGid(eStockType.getCode());
-                    } else {
-                        stock.setStockGid(o.getType());
-                    }
-                    stock.setStockSpell(o.getSymbol());
-                    stock.setIsLock(0);
-                    stock.setIsShow(0);
-                    stock.setDataBase(0);
-                    stock.setAddTime(new Date());
-                    stockMapper.updateById(stock);
+                    RedisKeyUtil.setCaCheKeyBaseStock(eStockType, o);
                 }
-                RedisKeyUtil.setCaCheKeyBaseStock(eStockType, o);
             }
             log.info("同步股票 数据 成功 {}  总共同步数据 {}", eStockType.getCode(), list.size());
         } catch (
@@ -170,18 +189,19 @@
         }
     }
 
-    boolean stockConstraint = true;
+    private final AtomicBoolean stockConstraint = new AtomicBoolean(false);
 
     /**
      * 强制平仓
      */
-    @Scheduled(cron = "0/1 * * * * ?")
+//    @Scheduled(cron = "0/1 * * * * ?")
     public void stockConstraint() {
-        if (stockConstraint) // 定义一个布尔变量,代表新闻任务是否在处理中
+        if (stockConstraint.get()) { // 判断任务是否在处理中
             return;
-        stockConstraint = true;
+        }
         if (stockConstraintLock.tryLock()) {
             try {
+                stockConstraint.set(true); // 设置处理中标识为true
                 List<UserPosition> userPositions = userPositionMapper.selectList(new LambdaQueryWrapper<UserPosition>().isNull(UserPosition::getSellOrderId));
                 if (CollectionUtils.isNotEmpty(userPositions)) {
                     userPositionService.stockConstraint(userPositions);
@@ -191,7 +211,7 @@
                 log.error("强制平仓任务错误:" + e.getMessage());
             } finally {
                 stockConstraintLock.unlock();
-                stockConstraint = false;
+                stockConstraint.set(false); // 设置处理中标识为false
             }
         } else {
             log.info("强制平仓任务--------->上次任务还未执行完成,本次任务忽略");

--
Gitblit v1.9.3