1
zj
2024-05-23 649c8433a4f6f0f3ea2544c7f23f7eda74ff3b94
1
2 files modified
33 ■■■■■ changed files
src/main/java/com/nq/service/impl/PriceServicesImpl.java 15 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockServiceImpl.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -64,13 +64,14 @@
    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){
                    if (s != null) {
                        Map<String, Object> stringObjectMap = jsonToMap(s);
                        return   new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
                    }
@@ -79,10 +80,11 @@
        }
        String s = doGet(stock.getStockCode(),eStockType);
        if(null != s) {
        if (s != null) {
            Map<String, Object> stringObjectMap = jsonToMap(s);
            return  new BigDecimal(stringObjectMap.get("last").toString());
        }
        return BigDecimal.ZERO;
    }
@@ -108,6 +110,7 @@
        }else{
            apiUrl  =  eStockType.getStockUrl()+"stock?pid="+pid+"&key="+eStockType.getStockKey();
        }
        try  {
            URL url  =  new  URL(apiUrl);
            HttpURLConnection connection  =  (HttpURLConnection)  url.openConnection();
@@ -132,14 +135,20 @@
    public BigDecimal getNowPrice(String stockCode, String stockType) {
        EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
        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;
        }
        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;
@@ -174,24 +177,25 @@
        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("");