| | |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.google.common.collect.Lists; |
| | | import com.google.common.collect.Maps; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.reflect.TypeToken; |
| | | import com.nq.common.ServerResponse; |
| | | import com.nq.config.StockPoll; |
| | | import com.nq.dao.*; |
| | | import com.nq.enums.EStockType; |
| | | import com.nq.pojo.*; |
| | | import com.nq.pojo.reponse.RPageInfo; |
| | | import com.nq.service.*; |
| | | import com.nq.utils.DateUtil; |
| | | import com.nq.utils.http.HttpClientRequest; |
| | | import com.nq.utils.PropertiesUtil; |
| | | import com.nq.utils.redis.RedisKeyUtil; |
| | | import com.nq.utils.redis.RedisShardedPoolUtils; |
| | | import com.nq.utils.stock.pinyin.GetPyByChinese; |
| | | import com.nq.utils.stock.qq.QqStockApi; |
| | |
| | | import java.net.URL; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.*; |
| | | import java.util.stream.Collectors; |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | @Resource |
| | | StockDzMapper stockDzMapper; |
| | | |
| | | @Resource |
| | | StockSubscribeMapper stockSubscribeMapper; |
| | | |
| | | @Autowired |
| | | IPriceServices iPriceServices; |
| | | |
| | | public ServerResponse getMarket() { |
| | | String market_url = PropertiesUtil.getProperty("sina.market.url"); |
| | |
| | | |
| | | public ServerResponse getStock(int pageNum, int pageSize, String keyWords, String stockPlate, String stockType, HttpServletRequest request) { |
| | | List<Stock> stockList = new ArrayList<>(); |
| | | List<StockSubscribe> stockSubscribeList = new ArrayList<>(); |
| | | if (stockType.equals("99")) { |
| | | if(null == stockType){ |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | stockList.addAll(stockMapper.findStockListByKeyWords(keyWords, stockPlate, stockType, Integer.valueOf(0), pageNum - 1, pageSize)); |
| | | }else if (stockType.equals("99")) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "IN", Integer.valueOf(0))); |
| | | } else if (stockType.equals("100")) { |
| | |
| | | } |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | stockList.addAll(stockMapper.findOptions(user.getId() + "")); |
| | | } else if (stockType.equals("xg")) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | LambdaQueryWrapper<StockSubscribe> queryWrapper = new LambdaQueryWrapper(); |
| | | queryWrapper.eq(StockSubscribe::getZt, 0); |
| | | stockSubscribeList = stockSubscribeMapper.selectList(queryWrapper); |
| | | if (stockSubscribeList != null && stockSubscribeList.size() > 0) { |
| | | for (StockSubscribe stockSubscribe : stockSubscribeList) { |
| | | Stock dzStock = new Stock(); |
| | | Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, stockSubscribe.getCode())); |
| | | if (null != stock) { |
| | | dzStock.setStockName(stockSubscribe.getName()); |
| | | dzStock.setStockCode(stockSubscribe.getCode()); |
| | | dzStock.setStockType(stockSubscribe.getStockType()); |
| | | dzStock.setStockGid(stock.getStockGid()); |
| | | dzStock.setType(stockSubscribe.getType()); |
| | | dzStock.setPrice(stockSubscribe.getPrice()); |
| | | dzStock.setSubscribeTime(stockSubscribe.getSubscribeTime()); |
| | | dzStock.setSubscriptionTime(stockSubscribe.getSubscriptionEndTime()); |
| | | dzStock.setListDate(stockSubscribe.getListDate()); |
| | | dzStock.setOrderNumber(stockSubscribe.getOrderNumber()); |
| | | dzStock.setOrderMinNumber(stockSubscribe.getOrderMinNumber()); |
| | | stockList.add(dzStock); |
| | | } |
| | | } |
| | | } |
| | | } else if (stockType.equals("sg")) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | LambdaQueryWrapper<StockSubscribe> queryWrapper = new LambdaQueryWrapper(); |
| | | queryWrapper.eq(StockSubscribe::getZt, 0); |
| | | queryWrapper.eq(StockSubscribe::getType, 2); |
| | | stockSubscribeList = stockSubscribeMapper.selectList(queryWrapper); |
| | | if (stockSubscribeList != null && stockSubscribeList.size() > 0) { |
| | | for (StockSubscribe stockSubscribe : stockSubscribeList) { |
| | | Stock dzStock = new Stock(); |
| | | dzStock.setStockName(stockSubscribe.getName()); |
| | | dzStock.setStockCode(stockSubscribe.getCode()); |
| | | dzStock.setStockType(stockSubscribe.getStockType()); |
| | | stockList.add(dzStock); |
| | | } |
| | | } |
| | | } else if (stockType.equals("qh")) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | List<StockDz> stockDzs = stockDzMapper.findStockListByKeyWords(keyWords); |
| | |
| | | dzStock.setStockType(stockDz.getStockType()); |
| | | stockList.add(dzStock); |
| | | } |
| | | } else if (stockType.equals("ztb")) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | stockList.addAll(stockMapper.dailyLimitQuery(keyWords, stockPlate, "in", Integer.valueOf(0), pageNum - 1, pageSize)); |
| | | } else { |
| | | }else { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | stockList.addAll(stockMapper.findStockListByKeyWords(keyWords, stockPlate, stockType, Integer.valueOf(0), pageNum - 1, pageSize)); |
| | | } |
| | | |
| | | List<StockListVO> stockListVOS = Lists.newArrayList(); |
| | | if (stockList.size() > 0) { |
| | | if (stockList.size() > 0){ |
| | | stockListVOS.addAll(StockApi.getStockReailTimes(stockList)); |
| | | } |
| | | PageInfo pageInfo = new PageInfo(stockList); |
| | |
| | | if (stockList.size() > 0) { |
| | | stockListVOS.addAll(Objects.requireNonNull(StockApi.getStockReailTimes(stockList))); |
| | | } |
| | | PageInfo pageInfo = new PageInfo(stockList); |
| | | |
| | | // 根据实际情况调整核心线程数和最大线程数 |
| | | int corePoolSize = Runtime.getRuntime().availableProcessors(); // 根据实际情况设置核心线程数(通常为CPU核心数) |
| | | int maxPoolSize = corePoolSize * 2; // 设置最大线程数为核心线程数的两倍 |
| | | ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); |
| | | 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()); |
| | | |
| | | // 等待所有CompletableFuture完成 |
| | | 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)) |
| | |
| | | Stock stock = stockMapper.findStockByCode(code); |
| | | Integer depositAmt = 0; |
| | | String introduction = null; |
| | | String result = null; |
| | | com.alibaba.fastjson2.JSONObject json = null; |
| | | |
| | | String gid = stock.getStockGid(); |
| | | |
| | | StockVO stockVO = StockApi.assembleInStockVO(stock); |
| | | StockVO stockVO = StockApi.assembleInStockVO(stock); |
| | | stockVO.setDepositAmt(depositAmt); |
| | | BigDecimal price = stockDzMapper.getPrice(stock.getStockCode()); |
| | | stockVO.setPrice(price != null ? price.toString() : "0"); |
| | | stockVO.setNowPrice(iPriceServices.getNowPrice(stock.getStockCode(),stock.getStockType()).toString()); |
| | | stockVO.setType(stock.getStockType()); |
| | | stockVO.setId(stock.getId().intValue()); |
| | | stockVO.setCode(stock.getStockCode()); |
| | | stockVO.setName(stock.getStockName()); |
| | | stockVO.setSpell(stock.getStockSpell()); |
| | | stockVO.setGid(stock.getStockGid().toUpperCase()); |
| | | Map map = Maps.newHashMap(); |
| | |
| | | return ServerResponse.createBySuccess(echartsDataVO); |
| | | } |
| | | |
| | | /*股票日线-K线*/ |
| | | @lombok.Data |
| | | class kData { |
| | | long t; |
| | | String c; |
| | | String o; |
| | | String h; |
| | | String l; |
| | | String v; |
| | | String vo; |
| | | } |
| | | |
| | | @Override |
| | | public Object getKData(String pid, String interval, String stockType) { |
| | | EStockType eStockType = EStockType.getEStockTypeByCode(stockType); |
| | | if(eStockType == EStockType.IN){ |
| | | Object object = HttpUtil.get(eStockType.stockUrl + "api/all/getKData.do?pid=" + pid + "&interval=" + interval + "&stockType=in"); |
| | | Gson gson = new Gson(); |
| | | List<kData> dataList = gson.fromJson(object.toString(), new TypeToken<List<kData>>(){}.getType()); |
| | | |
| | | Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, pid).eq(Stock::getStockType, "IN")); |
| | | BigDecimal nowPrice = iPriceServices.getNowPrice(stock.getStockCode()); |
| | | Map singleStock = getSingleStock(stock.getStockCode()); |
| | | StockVO stockVO = (StockVO)singleStock.get("stock"); |
| | | // 修改 List 中的最后一条数据 |
| | | kData lastData = dataList.get(dataList.size() - 1); |
| | | lastData.setC(nowPrice.toString()); |
| | | lastData.setO(stockVO.getOpen_px()); |
| | | lastData.setH(stockVO.getToday_max()); |
| | | lastData.setL(stockVO.getToday_min()); |
| | | return gson.toJson(dataList); |
| | | |
| | | String string = HttpUtil.get("http://103.215.76.36:8001/api/all/getKData.do?pid=" + pid + "&interval=" + interval + "&stockType=in"); |
| | | } |
| | | return HttpUtil.get(eStockType.stockUrl + "kline?pid=" + pid + "&interval=" + interval + "&key=" + eStockType.stockKey); |
| | | } |
| | | |
| | | return string; |
| | | public Map getSingleStock(String code) { |
| | | if (StringUtils.isBlank(code)) |
| | | return null; |
| | | Stock stock = stockMapper.findStockByCode(code); |
| | | DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stock); |
| | | Integer depositAmt = 0; |
| | | String introduction = null; |
| | | StockVO stockVO = StockApi.assembleInStockVO(stock); |
| | | stockVO.setDepositAmt(depositAmt); |
| | | stockVO.setNowPrice(iPriceServices.getNowPrice(stock.getStockCode()).toString()); |
| | | stockVO.setType(stock.getStockType()); |
| | | stockVO.setId(stock.getId().intValue()); |
| | | stockVO.setCode(stock.getStockCode()); |
| | | stockVO.setName(stock.getStockName()); |
| | | stockVO.setSpell(stock.getStockSpell()); |
| | | stockVO.setGid(stock.getStockGid().toUpperCase()); |
| | | if(null != cacheBaseStock){ |
| | | stockVO.setOpen_px(cacheBaseStock.getOpen()); |
| | | stockVO.setPreclose_px(cacheBaseStock.getPrevClose()); |
| | | } |
| | | Map map = Maps.newHashMap(); |
| | | map.put("introduction", introduction); |
| | | map.put("stock", stockVO); |
| | | return map; |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (user == null) { |
| | | return ServerResponse.createByErrorMsg("Please log in"); |
| | | } |
| | | |
| | | return ServerResponse.createBySuccess(); |
| | | // List<Stock> stockList = stockMapper.findOptions(user.getId() + ""); |
| | | //// List<Stock> stockList = stockMapper.findOptions("485"); |
| | | // List<StockListVO> stockListVOS = Lists.newArrayList(); |
| | | // if (stockList.size() > 0) |
| | | // for (Stock stock : stockList) { |
| | | // StockListVO stockListVO = new StockListVO(); |
| | | // QueryWrapper<InStockBean> queryWrapper = new QueryWrapper<>(); |
| | | // queryWrapper.eq("id", stock.getStockCode()); |
| | | // InStockBean inStockBean = inStockMapper.selectOne(queryWrapper); |
| | | // if (inStockBean == null) { |
| | | // continue; |
| | | // } |
| | | // stockListVO.setNowPrice(inStockBean.getLast()); |
| | | // stockListVO.setToday_max(inStockBean.getHigh()); |
| | | // stockListVO.setToday_min(inStockBean.getLow()); |
| | | // stockListVO.setHcrate(BigDecimal.valueOf(Double.parseDouble(inStockBean.getChgPct()))); |
| | | // stockListVO.setBusiness_amount(inStockBean.getVolume()); |
| | | // stockListVO.setBusiness_balance(inStockBean.getAvgVolume()); |
| | | // stockListVO.setPreclose_px(inStockBean.getPrevClose()); |
| | | // stockListVO.setOpen_px(inStockBean.getOpen()); |
| | | // stockListVO.setName(stock.getStockName()); |
| | | // stockListVO.setCode(stock.getStockCode()); |
| | | // stockListVO.setSpell(stock.getStockSpell()); |
| | | // stockListVO.setGid(stock.getStockGid()); |
| | | // BigDecimal day3Rate = (BigDecimal) selectRateByDaysAndStockCode(stock.getStockCode(), 3).getData(); |
| | | // stockListVO.setDay3Rate(day3Rate); |
| | | // stockListVO.setStock_plate(stock.getStockPlate()); |
| | | // stockListVO.setStock_type(stock.getStockType()); |
| | | // stockListVOS.add(stockListVO); |
| | | // } |
| | | // PageInfo pageInfo = new PageInfo(stockList); |
| | | // pageInfo.setList(stockListVOS); |
| | | |
| | | } |
| | | |
| | | public ServerResponse<Stock> findStockByName(String name) { |
| | |
| | | } |
| | | } |
| | | return ServerResponse.createBySuccess(pool); |
| | | } |
| | | |
| | | @Override |
| | | public ServerResponse getStockSubscribeList(StockSubscribeListParamVo vo) { |
| | | Integer pageType = vo.getPageType(); |
| | | if (pageType == null || pageType == 0) { |
| | | return ServerResponse.createByErrorMsg("param is null"); |
| | | } |
| | | QueryWrapper<StockSubscribe> subscribeQueryWrapper = new QueryWrapper<>(); |
| | | switch (pageType) { |
| | | case 1: |
| | | subscribeQueryWrapper.between("list_date",new Date(), DateUtil.afterManyDays(30)); |
| | | break; |
| | | case 2: |
| | | subscribeQueryWrapper.eq("type",1); |
| | | break; |
| | | case 3: |
| | | subscribeQueryWrapper.eq("type",2); |
| | | break; |
| | | } |
| | | return ServerResponse.createBySuccess(stockSubscribeMapper.selectList(subscribeQueryWrapper)); |
| | | } |
| | | } |