1
zj
2025-04-24 c134d6137dff1d4533b12a07f85e44a1d7d57362
src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -3,6 +3,8 @@
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.nq.dao.StockMapper;
import com.nq.dao.UserPositionMapper;
@@ -15,12 +17,15 @@
import com.nq.service.IStockService;
import com.nq.service.IUserPositionService;
import com.nq.utils.http.HttpClientRequest;
import com.nq.utils.redis.RedisKeyConstant;
import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.redis.RedisShardedPoolUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.Date;
@@ -77,7 +82,86 @@
        }
    }
    //黄金
    private static final String gold_API_URL = "http://139.196.211.109/exchange_curr.action?username=Qq112233&password=3ce25a66d5b3a8cd661024fea6c79388&id=AUUSDO";
    //原油
    private static final String crude_oil_API_URL = "http://47.112.169.122/fOption_curr.action?username=Qq112233&password=3ce25a66d5b3a8cd661024fea6c79388&id=@CL0W";
    @Scheduled(cron = "0/6 * * * * ?")  // 每6秒执行一次
    public void gold() {
        try {
            // 使用RestTemplate发起HTTP请求
            RestTemplate restTemplate = new RestTemplate();
            String response = restTemplate.getForObject(gold_API_URL, String.class);
            // 解析返回的CSV格式数据,去除可能存在的换行符
            if (response != null && !response.contains("参数错误")) {
                // 清除换行符并按逗号分割数据
                String[] parts = response.trim().split(",");
                String price = parts[2].trim();  // "3348.4"
                // 转换价格为Double类型
                // 保存价格到Redis
                RedisShardedPoolUtils.set(RedisKeyConstant.gold, String.valueOf(price));
                log.info("黄金定时任务------成功");
            } else {
                log.info("黄金定时任务------没有接收到数据");
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("黄金定时任务------请求或数据解析失败:" + e.getMessage());
        }
    }
    @Scheduled(cron = "0/7 * * * * ?")  // 每6秒执行一次
    public void crudeOil() {
        try {
            // 使用RestTemplate发起HTTP请求
            RestTemplate restTemplate = new RestTemplate();
            String response = restTemplate.getForObject(crude_oil_API_URL, String.class);
            // 解析返回的CSV格式数据,去除可能存在的换行符
            if (response != null && !response.contains("参数错误")) {
                // 清除换行符并按逗号分割数据
                String[] parts = response.trim().split(",");
                String price = parts[2].trim();  // "3348.4"
                // 转换价格为Double类型
                // 保存价格到Redis
                RedisShardedPoolUtils.set(RedisKeyConstant.crude_oil, String.valueOf(price));
                log.info("原油定时任务------没有接收到数据");
            } else {
                log.info("原油定时任务------没有接收到数据");
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("原油定时任务------请求或数据解析失败:" + e.getMessage());
        }
    }
    //黄金
    private static final String k_gold_API_URL = "http://139.196.211.109/ldMetal_k.action?username=Qq112233&password=3ce25a66d5b3a8cd661024fea6c79388&id=AUUSDO&num=-100&period=";
    //原油
    private static final String k_crude_oil_API_URL = "http://47.112.169.122/fOption_k.action?username=Qq112233&password=3ce25a66d5b3a8cd661024fea6c79388&id=@CL0W&num=-100&period=";
    @Scheduled(cron = "0/6 * * * * ?")  // 每6秒执行一次
    public void getKDate() throws InterruptedException {
        RestTemplate restTemplate = new RestTemplate();
        String[] arr = {"d", "w", "m", "1", "5", "30"};
        for (String str : arr) {
            String g = restTemplate.getForObject(k_gold_API_URL+str, String.class);
            if(!g.contains("参数错误")){
                RedisShardedPoolUtils.set("k_gold_"+str, g);
                Thread.sleep(10000);
            }
            String c = restTemplate.getForObject(k_crude_oil_API_URL+str, String.class);
            if(!c.contains("参数错误")){
                RedisShardedPoolUtils.set("k_crude_oil_"+str, c);
                Thread.sleep(10000);
            }
        }
    }
    /**
     * 同步美国股票
     */