package com.nq.service.impl;
|
|
import cn.hutool.http.HttpUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.github.pagehelper.PageHelper;
|
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.dao.*;
|
import com.nq.enums.EStockType;
|
import com.nq.pojo.*;
|
import com.nq.pojo.reponse.RPageInfo;
|
import com.nq.service.*;
|
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 com.nq.utils.stock.sina.StockApi;
|
import com.nq.vo.stock.*;
|
import com.nq.vo.stock.ai.StockAiOrderVO;
|
import com.nq.vo.stock.k.MinDataVO;
|
import com.nq.vo.stock.k.echarts.EchartsDataVO;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import static com.nq.utils.timeutil.DateTimeUtil.getWeekDay;
|
|
@Service("iStockService")
|
public class StockServiceImpl implements IStockService {
|
private static final Logger log = LoggerFactory.getLogger(StockServiceImpl.class);
|
|
@Autowired
|
StockMapper stockMapper;
|
|
@Autowired
|
IStockMarketsDayService iStockMarketsDayService;
|
|
@Resource
|
StockFuturesMapper stockFuturesMapper;
|
|
@Resource
|
StockIndexMapper stockIndexMapper;
|
|
@Autowired
|
IUserService iUserService;
|
|
@Autowired
|
ISiteSettingService iSiteSettingService;
|
|
@Resource
|
StockDzMapper stockDzMapper;
|
|
@Autowired
|
IPriceServices iPriceServices;
|
|
@Autowired
|
SiteNewsMapper siteNewsMapper;
|
|
|
public ServerResponse getMarket() {
|
String market_url = PropertiesUtil.getProperty("sina.market.url");
|
String result = null;
|
try {
|
result = HttpClientRequest.doGet(market_url);
|
} catch (Exception e) {
|
log.error("e = {}", e);
|
}
|
String[] marketArray = result.split(";");
|
List<MarketVO> marketVOS = Lists.newArrayList();
|
for (int i = 0; i < marketArray.length; i++) {
|
String hqstr = marketArray[i];
|
try {
|
if (StringUtils.isNotBlank(hqstr)) {
|
hqstr = hqstr.substring(hqstr.indexOf("\"") + 1, hqstr.lastIndexOf("\""));
|
MarketVO marketVO = new MarketVO();
|
String[] sh01_arr = hqstr.split(",");
|
marketVO.setName(sh01_arr[0]);
|
marketVO.setNowPrice(sh01_arr[1]);
|
marketVO.setIncrease(sh01_arr[2]);
|
marketVO.setIncreaseRate(sh01_arr[3]);
|
marketVOS.add(marketVO);
|
}
|
} catch (Exception e) {
|
log.error("str = {} , e = {}", hqstr, e);
|
}
|
}
|
MarketVOResult marketVOResult = new MarketVOResult();
|
marketVOResult.setMarket(marketVOS);
|
return ServerResponse.createBySuccess(marketVOResult);
|
}
|
|
public ServerResponse getStock(int pageNum, int pageSize, String keyWords, String stockPlate, String stockType, HttpServletRequest request) {
|
List<Stock> stockList = new ArrayList<>();
|
if (stockType.equals("99")) {
|
PageHelper.startPage(pageNum, pageSize);
|
stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "MEX", Integer.valueOf(0)));
|
} else if (stockType.equals("100")) {
|
User user = iUserService.getCurrentRefreshUser(request);
|
if (user == null) {
|
return ServerResponse.createByErrorMsg("Please log in");
|
}
|
PageHelper.startPage(pageNum, pageSize);
|
stockList.addAll(stockMapper.findOptions(user.getId() + ""));
|
} else if (stockType.equals("qh")) {
|
PageHelper.startPage(pageNum, pageSize);
|
List<StockDz> stockDzs = stockDzMapper.findStockListByKeyWords(keyWords);
|
for (int i = 0; i < stockDzs.size(); i++) {
|
Stock dzStock = new Stock();
|
StockDz stockDz = stockDzs.get(i);
|
dzStock.setStockName(stockDz.getStockName());
|
dzStock.setStockCode(stockDz.getStockCode());
|
dzStock.setStockGid(stockDz.getStockGid());
|
dzStock.setStockType(stockDz.getStockType());
|
stockList.add(dzStock);
|
}
|
} 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){
|
stockListVOS.addAll(StockApi.getStockReailTimes(stockList));
|
}
|
PageInfo pageInfo = new PageInfo(stockList);
|
pageInfo.setList(stockListVOS);
|
return ServerResponse.createBySuccess(pageInfo);
|
}
|
|
@Override
|
public ServerResponse getStockByType(int pageNum, int pageSize, String orderBy, String keyWords, String stockType, HttpServletRequest request) {
|
PageHelper.startPage(pageNum, pageSize);
|
List<Stock> stockList = stockMapper.findStockByType(orderBy, stockType, keyWords);
|
// 获取分页信息
|
PageInfo<Stock> pageInfo = new PageInfo<>(stockList);
|
|
List<StockListVO> stockListVOS = Lists.newArrayList();
|
if (stockList.size() > 0) {
|
stockListVOS.addAll(Objects.requireNonNull(StockApi.getStockReailTimes(stockList)));
|
}
|
|
RPageInfo resultPageInfo = new RPageInfo();
|
resultPageInfo.setList(stockListVOS);
|
resultPageInfo.setStockType(stockType);
|
// 设置分页信息
|
resultPageInfo.setTotal(pageInfo.getTotal());
|
resultPageInfo.setPageNum(pageInfo.getPageNum());
|
resultPageInfo.setPageSize(pageInfo.getPageSize());
|
resultPageInfo.setPages(pageInfo.getPages());
|
resultPageInfo.setHasNextPage(pageInfo.isHasNextPage());
|
return ServerResponse.createBySuccess(resultPageInfo);
|
}
|
|
@Override
|
public ServerResponse getDateline(HttpServletResponse paramHttpServletResponse, String paramString) {
|
return null;
|
}
|
|
|
public ServerResponse getSingleStock(String code, HttpServletRequest request) {
|
if (StringUtils.isBlank(code))
|
return ServerResponse.createByErrorMsg("");
|
Stock stock = stockMapper.findStockByCode(code);
|
DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stock.getStockType(), stock.getStockCode());
|
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());
|
Map<String, Object> newStock = iPriceServices.getNewStock(stock.getStockCode());
|
stockVO.setHcrate(newStock.get("ChgPct").toString().replaceAll("%", ""));
|
stockVO.setToday_max(newStock.get("High").toString());
|
stockVO.setToday_min(newStock.get("Low").toString());
|
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 ServerResponse.createBySuccess(map);
|
}
|
|
public Map getSingleStock(String code) {
|
if (StringUtils.isBlank(code))
|
return null;
|
Stock stock = stockMapper.findStockByCode(code);
|
DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stock.getStockType(), stock.getStockCode());
|
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;
|
}
|
|
|
//美股
|
public ServerResponse getSingleStockByCode(String code) {
|
if (StringUtils.isBlank(code))
|
return ServerResponse.createByErrorMsg("");
|
Stock stock = new Stock();
|
Integer depositAmt = 0;
|
String introduction = null;
|
String result = null;
|
com.alibaba.fastjson2.JSONObject json = null;
|
//期货
|
String url = null;
|
if (code.contains("sh") || code.contains("sz")) { //指数
|
StockIndex model = stockIndexMapper.selectIndexByCode(code.replace("sh", "").replace("sz", ""));
|
stock.setStockGid(model.getIndexGid());
|
stock.setStockCode(model.getIndexCode());
|
stock.setStockName(model.getIndexName());
|
stock.setAddTime(model.getAddTime());
|
stock.setId(model.getId());
|
stock.setStockSpell("0");
|
depositAmt = model.getDepositAmt();
|
introduction = model.getIntroduction();
|
} else {//股票
|
|
stock = this.stockMapper.findStockByCode(code);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
}
|
String gid = stock.getStockGid();
|
StockUsVO stockVO = new StockUsVO();
|
if (gid.contains("us")) {
|
String us = RedisShardedPoolUtils.get(stock.getStockGid(), 2);
|
stockVO = StockApi.otherUsStockVO(us);
|
String type = "105".equals(stockVO.getType()) ? ".O" : ".N";
|
url = (PropertiesUtil.getProperty("us.stock.introduction.url") + stock.getStockCode() + type);
|
result = HttpClientRequest.doGet(url);
|
if (result.contains("msg")) {
|
introduction = "暂无数据";
|
} else {
|
json = com.alibaba.fastjson2.JSONObject.parseObject(result);
|
if (json.getJSONObject("data").getJSONArray("gszl").size() > 0) {
|
introduction = json.getJSONObject("data").getJSONArray("gszl").getJSONObject(0).getString("COMPPROFILE");
|
} else {
|
introduction = "暂无数据";
|
}
|
|
}
|
}
|
/**
|
* 105.UCL&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_=时间戳
|
*/
|
long now = System.currentTimeMillis();
|
com.alibaba.fastjson2.JSONObject buyjson = null;
|
String buyresult = null;
|
try {
|
String buyurl = PropertiesUtil.getProperty("us.stock.buy.url") + stockVO.getType() + "." + stock.getStockCode() + "&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_=" + now;
|
buyresult = HttpClientRequest.doGet(buyurl);
|
buyjson = com.alibaba.fastjson2.JSONObject.parseObject(buyresult);
|
} catch (Exception e) {
|
log.error("获取分时交易数据失败", e);
|
buyjson.put("data", "暂无数据");
|
}
|
|
|
stockVO.setDepositAmt(depositAmt);
|
stockVO.setId(stock.getId().intValue());
|
stockVO.setCode(stock.getStockCode());
|
stockVO.setSpell(stock.getStockSpell());
|
stockVO.setGid(stock.getStockGid());
|
Map map = Maps.newHashMap();
|
map.put("timedata", buyjson);
|
map.put("introduction", introduction);
|
map.put("stock", stockVO);
|
return ServerResponse.createBySuccess(map);
|
}
|
|
|
public ServerResponse getMinK(String code, Integer time, Integer ma, Integer size) {
|
if (StringUtils.isBlank(code) || time == null || ma == null || size == null)
|
return ServerResponse.createByErrorMsg("");
|
Stock stock = this.stockMapper.findStockByCode(code);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
return StockApi.getStockMinK(stock, time.intValue(), ma.intValue(), size.intValue());
|
}
|
|
public ServerResponse getMinK_Echarts(String code, Integer time, Integer ma, Integer size) {
|
if (StringUtils.isBlank(code) || time == null || ma == null || size == null)
|
return ServerResponse.createByErrorMsg("");
|
Stock stock = this.stockMapper.findStockByCode(code);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = StockApi.getStockMinK(stock, time.intValue(), ma.intValue(), size.intValue());
|
MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
|
/*期货分时-k线*/
|
public ServerResponse getFuturesMinK_Echarts(String code, Integer time, Integer size) {
|
if (StringUtils.isBlank(code) || time == null)
|
return ServerResponse.createByErrorMsg("");
|
StockFutures stock = this.stockFuturesMapper.selectFuturesByCode(code.split("_")[1]);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = StockApi.getFuturesMinK(stock, time.intValue(), size.intValue());
|
MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
|
/*指数分时-k线*/
|
public ServerResponse getIndexMinK_Echarts(String code, Integer time, Integer size) {
|
if (StringUtils.isBlank(code) || time == null)
|
return ServerResponse.createByErrorMsg("");
|
StockIndex stock = this.stockIndexMapper.selectIndexByCode(code.replace("sh", "").replace("sz", ""));
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = StockApi.getIndexMinK(stock, time.intValue(), size.intValue());
|
MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
|
/*股票日线-K线*/
|
public ServerResponse getDayK_Echarts(String code) {
|
if (StringUtils.isBlank(code))
|
return ServerResponse.createByErrorMsg("");
|
Stock stock = this.stockMapper.findStockByCode(code);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = QqStockApi.getGpStockMonthK(stock, "day");
|
MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
|
/*期货日线-K线*/
|
public ServerResponse getFuturesDayK(String code) {
|
if (StringUtils.isBlank(code))
|
return ServerResponse.createByErrorMsg("");
|
StockFutures stock = this.stockFuturesMapper.selectFuturesByCode(code);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = QqStockApi.getQqStockDayK(stock);
|
MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
|
/*指数日线-K线*/
|
public ServerResponse getIndexDayK(String code) {
|
if (StringUtils.isBlank(code))
|
return ServerResponse.createByErrorMsg("");
|
StockIndex stock = this.stockIndexMapper.selectIndexByCode(code.replace("sh", "").replace("sz", ""));
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = QqStockApi.getQqIndexDayK(stock);
|
MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
|
/*股票日线-k线*/
|
public ServerResponse getStockDayK(String code) {
|
if (StringUtils.isBlank(code))
|
return ServerResponse.createByErrorMsg("");
|
Stock stock = this.stockMapper.findStockByCode(code);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
ServerResponse<MinDataVO> serverResponse = QqStockApi.getGpStockMonthK(stock, "day");
|
MinDataVO minDataVO = serverResponse.getData();
|
EchartsDataVO echartsDataVO = StockApi.assembleEchartsDataVO(minDataVO);
|
return ServerResponse.createBySuccess(echartsDataVO);
|
}
|
@lombok.Data
|
class kData {
|
long t;
|
String c;
|
String o;
|
String h;
|
String l;
|
String v;
|
String vo;
|
}
|
|
|
/*股票日线-K线*/
|
@Override
|
public Object getKData(String pid, String interval, String stockType) {
|
EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
|
Object object = HttpUtil.get(eStockType.stockUrl + "kline?pid=" + pid + "&interval=" + interval + "&key=" + eStockType.stockKey);
|
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, stockType));
|
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);
|
}
|
|
@Override
|
public ServerResponse getOptionStock(HttpServletRequest request) {
|
User user = iUserService.getCurrentRefreshUser(request);
|
if (user == null) {
|
return ServerResponse.createByErrorMsg("Please log in");
|
}
|
return ServerResponse.createBySuccess();
|
}
|
|
public ServerResponse<Stock> findStockByName(String name) {
|
return ServerResponse.createBySuccess(this.stockMapper.findStockByName(name));
|
}
|
|
public ServerResponse<Stock> findStockByCode(String code) {
|
return ServerResponse.createBySuccess(this.stockMapper.findStockByCode(code));
|
}
|
|
public ServerResponse<Stock> findStockById(Integer stockId) {
|
return ServerResponse.createBySuccess(this.stockMapper.selectByPrimaryKey(stockId));
|
}
|
|
public ServerResponse<PageInfo> listByAdmin(String stockGid,Integer showState, Integer lockState, String code, String name, String stockPlate, String stockType, int pageNum, int pageSize, HttpServletRequest request) {
|
PageHelper.startPage(pageNum, pageSize);
|
List<Stock> stockList = this.stockMapper.listByAdmin(stockGid,showState, lockState, code, name, stockPlate, stockType);
|
List<StockAdminListVO> stockAdminListVOS = Lists.newArrayList();
|
for (Stock stock : stockList) {
|
StockAdminListVO stockAdminListVO = assembleStockAdminListVO(stock);
|
stockAdminListVOS.add(stockAdminListVO);
|
}
|
PageInfo pageInfo = new PageInfo(stockList);
|
pageInfo.setList(stockAdminListVOS);
|
return ServerResponse.createBySuccess(pageInfo);
|
}
|
|
private StockAdminListVO assembleStockAdminListVO(Stock stock) {
|
StockAdminListVO stockAdminListVO = new StockAdminListVO();
|
stockAdminListVO.setId(stock.getId());
|
stockAdminListVO.setStockName(stock.getStockName());
|
stockAdminListVO.setStockCode(stock.getStockCode());
|
stockAdminListVO.setStockSpell(stock.getStockSpell());
|
stockAdminListVO.setStockType(stock.getStockType());
|
stockAdminListVO.setStockGid(stock.getStockGid());
|
stockAdminListVO.setStockPlate(stock.getStockPlate());
|
stockAdminListVO.setIsLock(stock.getIsLock());
|
stockAdminListVO.setIsShow(stock.getIsShow());
|
stockAdminListVO.setAddTime(stock.getAddTime());
|
stockAdminListVO.setDataBase(stock.getDataBase());
|
StockListVO stockListVO;
|
if ("hk".equals(stock.getStockType())) {
|
String hkStock = RedisShardedPoolUtils.get(stock.getStockGid(), 1);
|
stockListVO = StockApi.otherStockListVO(hkStock);
|
} else if ("us".equals(stock.getStockType())) {
|
String usStock = RedisShardedPoolUtils.get(stock.getStockGid(), 2);
|
stockListVO = StockApi.otherStockListVO(usStock);
|
} else {
|
stockListVO = StockApi.getStockRealTime(stock);
|
}
|
|
// String stockOther = RedisShardedPoolUtils.get(stock.getStockName(), 8);
|
// if (stock.getDataBase()!=0){
|
//
|
// String date = getCurrentTimeMiaoZero();
|
// String result = HttpClientRequest.doGet(PropertiesUtil.getProperty("changePrice.url")+"?cat_time="+date+"&stock_gid="+stock.getStockGid()+"&price="+stockListVO.getNowPrice());
|
// JSONObject jsonObject = JSONObject.fromObject(result);
|
// String nowPrice = jsonObject.getJSONObject("data").getString("new_price");
|
// if (nowPrice!=null){
|
// stockListVO.setNowPrice(nowPrice);
|
// }else {
|
// stockListVO.setNowPrice(stockListVO.getNowPrice());
|
// }
|
// }
|
|
stockAdminListVO.setNowPrice(stockListVO.getNowPrice());
|
stockAdminListVO.setHcrate(stockListVO.getHcrate());
|
stockAdminListVO.setSpreadRate(stock.getSpreadRate());
|
ServerResponse serverResponse = selectRateByDaysAndStockCode(stock.getStockCode(), 3);
|
BigDecimal day3Rate = new BigDecimal("0");
|
if (serverResponse.isSuccess())
|
day3Rate = (BigDecimal) serverResponse.getData();
|
stockAdminListVO.setDay3Rate(day3Rate);
|
return stockAdminListVO;
|
}
|
|
public ServerResponse updateLock(Integer stockId) {
|
Stock stock = this.stockMapper.selectByPrimaryKey(stockId);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
if (stock.getIsLock().intValue() == 1) {
|
stock.setIsLock(Integer.valueOf(0));
|
} else {
|
stock.setIsLock(Integer.valueOf(1));
|
}
|
int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock);
|
if (updateCount > 0)
|
return ServerResponse.createBySuccessMsg("成功");
|
return ServerResponse.createByErrorMsg("失败");
|
}
|
|
public ServerResponse updateShow(Integer stockId) {
|
Stock stock = this.stockMapper.selectByPrimaryKey(stockId);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("");
|
if (stock.getIsShow().intValue() == 0) {
|
stock.setIsShow(Integer.valueOf(1));
|
} else {
|
stock.setIsShow(Integer.valueOf(0));
|
}
|
int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock);
|
if (updateCount > 0)
|
return ServerResponse.createBySuccessMsg("成功");
|
return ServerResponse.createByErrorMsg("失败");
|
}
|
|
public ServerResponse addStock(String stockName, String stockCode, String stockType, String stockPlate, Integer isLock, Integer isShow) {
|
if (StringUtils.isBlank(stockName) || StringUtils.isBlank(stockCode) || StringUtils.isBlank(stockType) || isLock == null || isShow == null)
|
return ServerResponse.createByErrorMsg("所填信息有误");
|
Stock cstock = (Stock) findStockByCode(stockCode).getData();
|
if (cstock != null)
|
return ServerResponse.createByErrorMsg("已有该股票代码");
|
Stock nstock = (Stock) findStockByName(stockName).getData();
|
if (nstock != null)
|
return ServerResponse.createByErrorMsg("已有该股票名称");
|
Stock stock = new Stock();
|
stock.setStockName(stockName);
|
stock.setStockCode(stockCode);
|
stock.setStockSpell(GetPyByChinese.converterToFirstSpell(stockName));
|
stock.setStockType(stockType);
|
stock.setStockGid(stockType + stockCode);
|
stock.setIsLock(isLock);
|
stock.setIsShow(isShow);
|
stock.setAddTime(new Date());
|
int insertCount = this.stockMapper.insert(stock);
|
if (insertCount > 0)
|
return ServerResponse.createBySuccessMsg("添加成功");
|
return ServerResponse.createByErrorMsg("添加失败");
|
}
|
|
public int CountStockNum() {
|
return this.stockMapper.CountStockNum();
|
}
|
|
public int CountShowNum(Integer showState) {
|
return this.stockMapper.CountShowNum(showState);
|
}
|
|
public int CountUnLockNum(Integer lockState) {
|
return this.stockMapper.CountUnLockNum(lockState);
|
}
|
|
public List findStockList() {
|
return this.stockMapper.findStockList();
|
}
|
|
public ServerResponse selectRateByDaysAndStockCode(String stockCode, int days) {
|
Stock stock = this.stockMapper.findStockByCode(stockCode);
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("没有该股票");
|
BigDecimal daysRate = this.iStockMarketsDayService.selectRateByDaysAndStockCode(stock.getId(), days);
|
return ServerResponse.createBySuccess(daysRate);
|
}
|
|
public ServerResponse updateStock(Stock model) {
|
if (StringUtils.isBlank(model.getId().toString()) || StringUtils.isBlank(model.getStockName()))
|
return ServerResponse.createByErrorMsg("修改信息有误");
|
Stock stock = this.stockMapper.selectByPrimaryKey(model.getId());
|
if (stock == null)
|
return ServerResponse.createByErrorMsg("股票不存在");
|
stock.setStockName(model.getStockName());
|
if (model.getSpreadRate() != null)
|
stock.setSpreadRate(model.getSpreadRate());
|
|
int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock);
|
if (updateCount > 0)
|
return ServerResponse.createBySuccessMsg("修改成功");
|
return ServerResponse.createByErrorMsg("修改失败");
|
}
|
|
public ServerResponse deleteByPrimaryKey(Integer id) {
|
int updateCount = this.stockMapper.deleteByPrimaryKey(id);
|
if (updateCount > 0) {
|
return ServerResponse.createBySuccessMsg("操作成功");
|
}
|
return ServerResponse.createByErrorMsg("操作失败");
|
}
|
|
public ServerResponse stockDataBase() {
|
//mybatisplus查询所有database 不是0的
|
List<Stock> stockList = this.stockMapper.selectList(new QueryWrapper<Stock>().ne("data_base", 0));
|
return ServerResponse.createBySuccess(stockList);
|
}
|
|
/**
|
* 涨停板
|
*
|
* @return
|
*/
|
@Override
|
public ServerResponse ztb(String password) {
|
|
|
SiteSetting siteSetting = this.iSiteSettingService.getSiteSetting();
|
if (siteSetting == null) {
|
log.error("出错,网站设置表不存在");
|
return ServerResponse.createByErrorMsg("失败,系统设置错误");
|
}
|
//判断密码
|
if (StringUtils.isBlank(password) || !siteSetting.getVipPassword().equals(password)) {
|
return ServerResponse.createByErrorMsg("获取失败,密码错误");
|
}
|
|
String day = getWeekDay();
|
String url = PropertiesUtil.getProperty("ztb.url");
|
//当前时间戳
|
// log.info("当前时间戳:{}",day);
|
//day去掉-
|
String day1 = day.replace("-", "");
|
long time = System.currentTimeMillis();
|
if (url != null) {
|
url = url.replace("20221202", day1) + time;
|
}
|
log.info("涨停板接口:{}", url);
|
String res = HttpClientRequest.doGet(url);
|
|
com.alibaba.fastjson2.JSONObject json = com.alibaba.fastjson2.JSONObject.parseObject(res);
|
com.alibaba.fastjson2.JSONArray pool = null;
|
if (json.getJSONObject("data") != null) {
|
pool = json.getJSONObject("data").getJSONArray("pool");
|
}
|
return ServerResponse.createBySuccess(pool);
|
}
|
|
@Override
|
public ServerResponse getVipByCode(String code) {
|
String day = getWeekDay();
|
String url = PropertiesUtil.getProperty("ztb.url");
|
String day1 = day.replace("-", "");
|
long time = System.currentTimeMillis();
|
url = url.replace("20221202", day1) + time;
|
// log.info("涨停板接口:{}",url);
|
String res = HttpClientRequest.doGet(url);
|
com.alibaba.fastjson2.JSONObject json = com.alibaba.fastjson2.JSONObject.parseObject(res);
|
com.alibaba.fastjson2.JSONArray pool = null;
|
if (json.getJSONObject("data") != null) {
|
pool = json.getJSONObject("data").getJSONArray("pool");
|
if (pool != null) {
|
for (int i = 0; i < pool.size(); i++) {
|
com.alibaba.fastjson2.JSONObject jsonObject = pool.getJSONObject(i);
|
String c = jsonObject.getString("c");
|
if (c.equals(code)) {
|
pool.removeAll(pool);
|
pool.add(jsonObject);
|
return ServerResponse.createBySuccess(pool);
|
}
|
}
|
}
|
}
|
return ServerResponse.createBySuccess(pool);
|
}
|
|
@Override
|
public ServerResponse getIndicesIndexListAndNews(Integer pageSize) {
|
try {
|
//新闻列表
|
List<SiteNews> newsList = this.siteNewsMapper.getTopNewsList(pageSize);
|
|
String usCodeList = PropertiesUtil.getProperty("us_home_indices_code");
|
String mxCodeList = PropertiesUtil.getProperty("mx_home_indices_code");
|
List<String> usStockCodeList = Arrays.asList(usCodeList.split(","));
|
List<String> mxStockCodeList = Arrays.asList(mxCodeList.split(","));
|
List<DataStockBean> usDataStockBeans = Lists.newArrayList();
|
List<DataStockBean> mxDataStockBeans = Lists.newArrayList();
|
for (int i = 0; i < usStockCodeList.size(); i++) {
|
String stockCode = usStockCodeList.get(i);
|
String stockType = EStockType.US.getCode();
|
DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, stockCode);
|
// 获取K线数据
|
Object kData = RedisKeyUtil.getCaCheStockKData(stockType, stockCode);
|
if (kData == null) {
|
//重新获取并缓存redis
|
kData = getKData(stockCode, "D", stockType);
|
RedisKeyUtil.setCaCheStockKData(stockType, stockCode, kData);
|
}
|
Gson gson = new Gson();
|
List<kData> dataList = gson.fromJson(kData.toString(), new TypeToken<List<kData>>(){}.getType());
|
cacheBaseStock.setKData(dataList);
|
cacheBaseStock.setStockType(stockType);
|
usDataStockBeans.add(cacheBaseStock);
|
}
|
for (int i = 0; i < mxStockCodeList.size(); i++) {
|
String stockCode = mxStockCodeList.get(i);
|
String stockType = EStockType.MX.getCode();
|
DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, stockCode);
|
// 获取K线数据
|
Object kData = RedisKeyUtil.getCaCheStockKData(stockType, stockCode);
|
if (kData == null) {
|
//重新获取并缓存redis
|
kData = getKData(stockCode, "D", stockType);
|
RedisKeyUtil.setCaCheStockKData(stockType, stockCode, kData);
|
}
|
Gson gson = new Gson();
|
List<kData> dataList = gson.fromJson(kData.toString(), new TypeToken<List<kData>>(){}.getType());
|
cacheBaseStock.setKData(dataList);
|
cacheBaseStock.setStockType(stockType);
|
mxDataStockBeans.add(cacheBaseStock);
|
}
|
Map<String, Object> resultMap = new HashMap<>();
|
resultMap.put("newsList", newsList); //新闻列表
|
resultMap.put("usDataStockBeans", usDataStockBeans);//美国指数
|
resultMap.put("mxDataStockBeans", mxDataStockBeans);//墨西哥指数
|
return ServerResponse.createBySuccess(resultMap);
|
} catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
@Override
|
public ServerResponse getIndicesList(String stockType) {
|
try {
|
String codeList;
|
if(stockType.equals(EStockType.MX.getCode()) || stockType.equals("MX")) {
|
codeList = PropertiesUtil.getProperty("mx_home_indices_code");
|
} else {
|
codeList = PropertiesUtil.getProperty("us_home_indices_code");
|
}
|
List<String> stockCodeList = Arrays.asList(codeList.split(","));
|
|
Map<Integer, Object> resultMap = new HashMap<>();
|
for (int i = 0; i < stockCodeList.size(); i++) {
|
String stockCode = stockCodeList.get(i);
|
DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, stockCode);
|
Map<String, Object> stockInfo = new HashMap<>();
|
stockInfo.put("pid", cacheBaseStock.getId());
|
stockInfo.put("name", cacheBaseStock.getName());
|
stockInfo.put("stockType", stockType);
|
resultMap.put(i+1, stockInfo);
|
}
|
return ServerResponse.createBySuccess(resultMap);
|
} catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
@Override
|
public ServerResponse getIndicesAndKData(String pid, String stockType) {
|
try {
|
Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", pid));
|
if (stock == null) {
|
return ServerResponse.createByErrorMsg("无股票信息");
|
}
|
stockType = stock.getStockType();
|
Map<String, Object> resultMap = new HashMap<>();
|
DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, pid);
|
if (cacheBaseStock != null) {
|
resultMap.put("id", cacheBaseStock.getId());
|
resultMap.put("stockType", stockType);
|
resultMap.put("name", cacheBaseStock.getName());
|
resultMap.put("last", cacheBaseStock.getLast());
|
resultMap.put("chg", cacheBaseStock.getChg());
|
resultMap.put("chgPct", cacheBaseStock.getChgPct());
|
resultMap.put("kData", cacheBaseStock.getChg());
|
// 获取K线数据
|
Object kData = RedisKeyUtil.getCaCheStockKData(stockType, pid);
|
if (kData == null) {
|
//重新获取并缓存redis
|
kData = getKData(pid, "D", stockType);
|
RedisKeyUtil.setCaCheStockKData(stockType, pid, kData);
|
}
|
Gson gson = new Gson();
|
List<kData> dataList = gson.fromJson(kData.toString(), new TypeToken<List<kData>>(){}.getType());
|
resultMap.put("kData", dataList);
|
return ServerResponse.createBySuccess(resultMap);
|
}
|
} catch (Exception e){
|
e.printStackTrace();
|
}
|
return ServerResponse.createByError();
|
}
|
|
/**
|
* 搜索
|
* @param pageNum
|
* @param pageSize
|
* @param keyWords
|
* @return
|
*/
|
@Override
|
public ServerResponse getStocksByKeyWords(int pageNum, int pageSize, String keyWords) {
|
try {
|
PageHelper.startPage(pageNum, pageSize);
|
List<StockVOQuery> stocks = stockMapper.findStocksQuery(keyWords);
|
// 获取分页信息
|
PageInfo<StockVOQuery> pageInfo = new PageInfo<>(stocks);
|
if (!pageInfo.getList().isEmpty()) {
|
pageInfo.getList().forEach(stock -> {
|
stock.setNowPrice(iPriceServices.getNowPrice(stock.getStockCode()));
|
});
|
}
|
return ServerResponse.createBySuccess(pageInfo);
|
} catch (Exception e) {
|
log.error("StockAiService getStocksByKeyWords error", e);
|
}
|
return ServerResponse.createByError();
|
}
|
}
|