| src/main/java/com/nq/service/impl/PriceServicesImpl.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/service/impl/StockServiceImpl.java | ●●●●● 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("");