1
zj
2024-05-23 649c8433a4f6f0f3ea2544c7f23f7eda74ff3b94
1
2 files modified
105 ■■■■■ changed files
src/main/java/com/nq/service/impl/PriceServicesImpl.java 83 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockServiceImpl.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -61,28 +61,30 @@
        return  new BigDecimal(stockRealTimeBean.getLast());
    }
    public BigDecimal getBuyNowPrice(String stockCode,EStockType eStockType) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
        if(stockSetting != null){
            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
                if(stockSetting.getType().equals("0")){
                    return  new BigDecimal(stockSetting.getPrice());
                }else{
                    String s = doGet(stock.getStockCode(),eStockType);
                    if(null != s){
    public BigDecimal getBuyNowPrice(String stockCode, EStockType eStockType) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code", stockCode));
        if (stockSetting != null) {
            if (TimeUtil.isTradingHour(stockSetting.getStartTime(), stockSetting.getEndTime())) {
                if (stockSetting.getType().equals("0")) {
                    return new BigDecimal(stockSetting.getPrice());
                } else {
                    String s = doGet(stock.getStockCode(), eStockType);
                    if (s != null) {
                        Map<String, Object> stringObjectMap = jsonToMap(s);
                        return   new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
                        return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
                    }
                }
            }
        }
        String s = doGet(stock.getStockCode(),eStockType);
        if(null != s) {
        String s = doGet(stock.getStockCode(), eStockType);
        if (s != null) {
            Map<String, Object> stringObjectMap = jsonToMap(s);
            return  new BigDecimal(stringObjectMap.get("last").toString());
            return new BigDecimal(stringObjectMap.get("last").toString());
        }
        return BigDecimal.ZERO;
    }
@@ -99,30 +101,31 @@
        }
    }
    public String doGet(String pid,EStockType eStockType){
        String  apiUrl  = "";
        if("IN".equals(eStockType.getCode())){
    public String doGet(String pid, EStockType eStockType) {
        String apiUrl = "";
        if ("IN".equals(eStockType.getCode())) {
            String inNowHttpApi = PropertiesUtil.getProperty("IN_NOW_HTTP_API");
            String inNowKey = PropertiesUtil.getProperty("IN_NOW_KEY");
            apiUrl  =  inNowHttpApi+"stock?pid="+pid+"&key="+inNowKey;
        }else{
            apiUrl  =  eStockType.getStockUrl()+"stock?pid="+pid+"&key="+eStockType.getStockKey();
            apiUrl = inNowHttpApi + "stock?pid=" + pid + "&key=" + inNowKey;
        } else {
            apiUrl = eStockType.getStockUrl() + "stock?pid=" + pid + "&key=" + eStockType.getStockKey();
        }
        try  {
            URL url  =  new  URL(apiUrl);
            HttpURLConnection connection  =  (HttpURLConnection)  url.openConnection();
        try {
            URL url = new URL(apiUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            BufferedReader in  =  new  BufferedReader(new InputStreamReader(connection.getInputStream()));
            String  inputLine;
            StringBuffer  response  =  new  StringBuffer();
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while  ((inputLine  =  in.readLine())  !=  null)  {
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            return response.toString();
        }  catch  (Exception  e)  {
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
@@ -131,15 +134,21 @@
    @Override
    public BigDecimal getNowPrice(String stockCode, String stockType) {
        EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
        BigDecimal nowPrice =   getBuyNowPrice(stockCode,eStockType);
        if (!stockType.equals("DZ")){
            return  nowPrice;
        BigDecimal nowPrice = getBuyNowPrice(stockCode, eStockType);
        if (!stockType.equals("DZ")) {
            return nowPrice;
        }
        QueryWrapper queryWrapper =    new QueryWrapper<>();
        queryWrapper.eq("stock_code",stockCode);
        StockDz stockDz =  stockDZMapper.selectOne(queryWrapper);
        if(stockDz == null){
            return  nowPrice;}
        return  nowPrice.multiply(stockDz.getDiscount());
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("stock_code", stockCode);
        StockDz stockDz = stockDZMapper.selectOne(queryWrapper);
        if (stockDz == null) {
            return nowPrice;
        }
        return nowPrice.multiply(stockDz.getDiscount());
    }
}
src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -37,6 +37,9 @@
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -169,29 +172,30 @@
    public ServerResponse getStockByType(int pageNum, int pageSize, String orderBy, String keyWords, String stockType, HttpServletRequest request) {
        List<Stock> stockList = new ArrayList<>();
        PageHelper.startPage(pageNum, pageSize);
        stockList.addAll(stockMapper.findStockByType(orderBy,stockType,keyWords));
        stockList.addAll(stockMapper.findStockByType(orderBy, stockType, keyWords));
        List<StockListVO> stockListVOS = Lists.newArrayList();
        if (stockList.size() > 0){
        if (stockList.size() > 0) {
            stockListVOS.addAll(Objects.requireNonNull(StockApi.getStockReailTimes(stockList)));
        }
        List<CompletableFuture<Void>> futures = new ArrayList<>();
        // Use CompletableFuture to perform asynchronous processing for each stockListVO
        for (StockListVO stockListVO : stockListVOS) {
            CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
                stockListVO.setNowPrice(iPriceServices.getNowPrice(stockListVO.getCode(), stockType).toString());
            });
            futures.add(future);
        }
        ExecutorService executor = Executors.newFixedThreadPool(20); // Create a fixed thread pool with a maximum of 10 threads
        List<CompletableFuture<Void>> futures = stockListVOS.stream()
                .map(stockListVO -> CompletableFuture.supplyAsync(() ->
                                iPriceServices.getNowPrice(stockListVO.getCode(), stockType), executor)
                        .thenAcceptAsync(price -> stockListVO.setNowPrice(price.toString()), executor))
                .collect(Collectors.toList());
        // Wait for all futures to complete
        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
        RPageInfo pageInfo = new RPageInfo();
        pageInfo.setList(stockListVOS);
        pageInfo.setStockType(stockType);
        return ServerResponse.createBySuccess(pageInfo);
    }
    public ServerResponse getDateline(HttpServletResponse response, String code) {
        if (StringUtils.isBlank(code))
            return ServerResponse.createByErrorMsg("");