package org.example.timedTask; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import lombok.extern.log4j.Log4j; import lombok.extern.slf4j.Slf4j; import org.example.dao.StockMapper; import org.example.dao.StockMarketNewMapper; import org.example.enums.EStockType; import org.example.pojo.DataStockBean; import org.example.pojo.ReponseBase; import org.example.pojo.Stock; import org.example.pojo.StockMarketNew; import org.example.util.HttpClientRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @program: webSocketProject * @description: * @create: 2024-03-26 19:11 **/ @Component @Slf4j public class StockTask { @Autowired StockMapper stockMapper; @Autowired StockMarketNewMapper stockMarketNewMapper; private final Lock lock = new ReentrantLock(); @Scheduled(cron = "0/5 * * * * ?") public void syncINStockData() { if (lock.tryLock()) { log.info("同步印度股票--------->开始"); try { loadAllStock(EStockType.IN); } finally { lock.unlock(); log.info("同步印度股票--------->结束"); } } else { log.info("同步印度股票--------->上次任务还未执行完成,本次任务忽略"); } } /** * 加载所有股票数据 */ public void loadAllStock(EStockType eStockType) { log.info("同步股票 数据 {}", eStockType.getCode()); List list = new ArrayList<>(); int totleStock = 1; int page = 0; try { while (totleStock > list.size()) { try { String result = HttpClientRequest.doGet(eStockType.stockUrl + "list?country_id=" + eStockType.getContryId() + "&size=1000&page=" + page + "&key=" + eStockType.stockKey); ReponseBase reponseBase = new Gson().fromJson(result, ReponseBase.class); list.addAll(reponseBase.getData()); page++; totleStock = reponseBase.getTotal(); } catch (Exception e) { e.printStackTrace(); break; } } for (DataStockBean o : list) { StockMarketNew stockMarketNew = new StockMarketNew(); conv(o, stockMarketNew); StockMarketNew selectById = stockMarketNewMapper.selectById(o.getId()); if (null == selectById) { stockMarketNewMapper.insert(stockMarketNew); } else { stockMarketNewMapper.updateById(stockMarketNew); } } } catch ( Exception e) { log.error("同步出错", e); } } public void conv(DataStockBean o, StockMarketNew stockMarketNew) { stockMarketNew.setAvgVolume(o.getAvgVolume()); stockMarketNew.setChg(o.getChg()); stockMarketNew.setChgPct(o.getChgPct()); stockMarketNew.setFundamentalBeta(o.getFundamentalBeta()); stockMarketNew.setFundamentalDividend(o.getFundamentalDividend()); stockMarketNew.setFundamentalEps(o.getFundamentalEps()); stockMarketNew.setFundamentalMarketCap(o.getFundamentalMarketCap()); stockMarketNew.setFundamentalRatio(o.getFundamentalRatio()); stockMarketNew.setFundamentalRevenue(o.getFundamentalRevenue()); stockMarketNew.setFundamentalSharesOutstanding(o.getFundamentalSharesOutstanding()); stockMarketNew.setHigh(o.getHigh()); stockMarketNew.setId(o.getId()); stockMarketNew.setIsOpen(o.getIsOpen()); stockMarketNew.setLast(o.getLast()); stockMarketNew.setLastPairDecimal(o.getLastPairDecimal()); stockMarketNew.setLow(o.getLow()); stockMarketNew.setName(o.getName()); stockMarketNew.setOpen(o.getOpen()); stockMarketNew.setPrevClose(o.getPrevClose()); stockMarketNew.setSymbol(o.getSymbol()); stockMarketNew.setTime(o.getTime()); stockMarketNew.setVolume(o.getVolume()); stockMarketNew.setType(o.getType()); } // @Scheduled(cron = "0 0/56 * * * ?") // public void sysnNewStock() { // // try { // String ipoString = HttpClientRequest.doGet(EStockType.IN.getStockUrl()) + "/new-stock?key=" + (EStockType.IN.getStockKey() + "&country_id=14"); // }catch (Exception e){ // } // } }