package org.example.timedTask; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.google.gson.Gson; 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 * 0/6 * * ?") 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) { Stock stock = stockMapper.selectOne(new LambdaQueryWrapper().eq(Stock::getStockCode, 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()); } if (eStockType.getCode().equals("US")) { stock.setStockSpell(o.getSymbol()); } else { stock.setStockSpell(o.getTicker()); } stock.setIsLock(0); stock.setIsShow(0); stock.setDataBase(0); stock.setAddTime(new Date()); stockMapper.insert(stock); } StockMarketNew stockMarketNew = new StockMarketNew(); conv(o,stockMarketNew); StockMarketNew selectById = stockMarketNewMapper.selectById(o.getId()); if(null == selectById){ stockMarketNewMapper.insert(stockMarketNew); }else{ stockMarketNewMapper.updateById(stockMarketNew); } } log.info("同步股票 数据 成功 {} 总共同步数据 {}", eStockType.getCode(), list.size()); } 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(Integer.parseInt(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()); } }