package com.xc.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.xc.common.ServerResponse; import com.xc.config.StockPoll; import com.xc.dao.RealTimeMapper; import com.xc.dao.StockIndexMapper; import com.xc.dao.StockMapper; import com.xc.pojo.*; import com.xc.service.DbStockService; import com.xc.service.IStockMarketsDayService; import com.xc.service.IStockService; import com.xc.service.IUserPositionService; import com.xc.utils.HttpClientRequest; import com.xc.utils.PropertiesUtil; import com.xc.utils.stock.BuyAndSellUtils; import com.xc.utils.stock.pinyin.GetPyByChinese; import com.xc.utils.stock.sina.SinaStockApi; import com.xc.vo.stock.*; import com.xc.vo.stock.k.MinDataVO; import com.xc.vo.stock.k.echarts.EchartsDataVO; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigDecimal; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("iStockService") public class StockServiceImpl implements IStockService { private static final Logger log = LoggerFactory.getLogger(StockServiceImpl.class); @Autowired StockMapper stockMapper; @Autowired RealTimeMapper realTimeMapper; @Autowired IStockMarketsDayService iStockMarketsDayService; @Autowired StockPoll stockPoll; @Autowired StockIndexMapper stockIndexMapper; @Autowired private IUserPositionService userPositionService; @Autowired DbStockService dbStockService; 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 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 num, int pageNum, int pageSize, String keyWords, String stockPlate, String stockType) { List stockList = null; PageHelper.startPage(pageNum, pageSize); stockList = this.stockMapper.findStockListByKeyWords(keyWords, stockPlate, stockType, 0); List stockListVOS = Lists.newArrayList(); for (Stock stock : stockList) { StockListVO stockListVO = dbStockService.getStockListVO(stock.getStockGid()); stockListVO.setName(stock.getStockName()); stockListVO.setId(stock.getId()); 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()); // stockListVO.setTransState(isTransState); // stockListVO.setBuyLimit(stock.getBuyLimit()); stockListVOS.add(stockListVO); } PageInfo pageInfo = new PageInfo(stockList); pageInfo.setList(stockListVOS); return ServerResponse.createBySuccess(pageInfo); } public boolean isTransState(Stock stock){ try { boolean am = BuyAndSellUtils.isTransTime(stock.getTransAmBegin(), stock.getTransAmEnd()); boolean pm = BuyAndSellUtils.isTransTime(stock.getTransPmBegin(), stock.getTransPmEnd()); boolean elseTime = BuyAndSellUtils.isTransTime(stock.getTransElseBegin(), stock.getTransElseEnd()); if(am || pm || elseTime){ return true; } return false; } catch (Exception e) { e.printStackTrace(); return false; } } public void z1() { this.stockPoll.z1(); } public void z2() { this.stockPoll.z2(); } public void z3() { this.stockPoll.z3(); } public void z4() { this.stockPoll.z4(); } public void h1() { this.stockPoll.h1(); } public void h2() { this.stockPoll.h2(); } public void h3() { this.stockPoll.h3(); } public ServerResponse getDateline(HttpServletResponse response, String code) { if (StringUtils.isBlank(code)) return ServerResponse.createByErrorMsg(""); Stock stock = this.stockMapper.findStockByCode(code); if (stock == null) return ServerResponse.createByErrorMsg(""); response.setHeader("Access-Control-Allow-Origin", "*"); Date time = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String end = sdf.format(time); Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(2, -3); Date m = c.getTime(); String mon = sdf.format(m); String methodUrl = "http://q.stock.sohu.com/hisHq?code=cn_" + code + "+&start=" + mon + "&end=" + end + "&stat=1&order=D"; HttpURLConnection connection = null; BufferedReader reader = null; String line = null; EchartsDataVO echartsDataVO = new EchartsDataVO(); try { URL url = new URL(methodUrl); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); if (connection.getResponseCode() == 200) { reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "gbk")); StringBuilder result = new StringBuilder(); while ((line = reader.readLine()) != null) result.append(line).append(System.getProperty("line.separator")); JSONArray jsonArray = JSONArray.fromObject(result.toString()); JSONObject json = jsonArray.getJSONObject(0); JSONArray jsonArray1 = JSONArray.fromObject(json.get("hq")); Collections.reverse((List) jsonArray1); double[][] values = (double[][]) null; Object[][] volumes = (Object[][]) null; String[] date = null; values = new double[jsonArray1.size()][5]; volumes = new Object[jsonArray1.size()][3]; date = new String[jsonArray1.size()]; for (int i = 0; i < jsonArray1.size(); i++) { JSONArray js = JSONArray.fromObject(jsonArray1.get(i)); date[i] = js.get(0).toString(); values[i][0] = Double.valueOf(js.get(1).toString()).doubleValue(); values[i][1] = Double.valueOf(js.get(2).toString()).doubleValue(); values[i][2] = Double.valueOf(js.get(5).toString()).doubleValue(); values[i][3] = Double.valueOf(js.get(6).toString()).doubleValue(); values[i][4] = Double.valueOf(js.get(7).toString()).doubleValue(); volumes[i][0] = Integer.valueOf(i); volumes[i][1] = Double.valueOf(js.get(7).toString()); volumes[i][2] = Integer.valueOf((Double.valueOf(js.get(3).toString()).doubleValue() > 0.0D) ? 1 : -1); } echartsDataVO.setDate(date); echartsDataVO.setValues(values); echartsDataVO.setVolumes(volumes); echartsDataVO.setStockCode(stock.getStockCode()); echartsDataVO.setStockName(stock.getStockName()); log.info(String.valueOf(echartsDataVO)); ServerResponse.createBySuccess(echartsDataVO); } } catch (IOException e) { e.printStackTrace(); } finally { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } connection.disconnect(); } return ServerResponse.createBySuccess(echartsDataVO); } public ServerResponse getSingleStock(Integer id) { Stock stock = this.stockMapper.selectByPrimaryKey(id); // 查询详情 if (stock == null) { return ServerResponse.createByErrorMsg(""); } try { String gid = stock.getStockGid(); StockVO stockVO = dbStockService.getStock(gid); stockVO.setName(stock.getStockName()); stockVO.setId(stock.getId()); stockVO.setCode(stock.getStockCode()); stockVO.setSpell(stock.getStockSpell()); stockVO.setGid(stock.getStockGid()); // stockVO.setBuyLimit(stock.getBuyLimit()); // stockVO.setStockOrBond(stock.getStockOrBond()); return ServerResponse.createBySuccess(stockVO); } catch (Exception e) { StockVO stockVO = new StockVO(); return ServerResponse.createBySuccess(stockVO); } } public ServerResponse getSingleStockConfig(Integer id) { //TODO 查询详情 Stock stock = this.stockMapper.selectByPrimaryKey(id); return ServerResponse.createBySuccess(stock); } 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 SinaStockApi.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 serverResponse = SinaStockApi.getStockMinK(stock, time.intValue(), ma.intValue(), size.intValue()); MinDataVO minDataVO = (MinDataVO) serverResponse.getData(); EchartsDataVO echartsDataVO = SinaStockApi.assembleEchartsDataVO(minDataVO); return ServerResponse.createBySuccess(echartsDataVO); } public ServerResponse findStockByName(String name) { return ServerResponse.createBySuccess(this.stockMapper.findStockByName(name)); } public ServerResponse findStockByCode(String code) { return ServerResponse.createBySuccess(this.stockMapper.findStockByCode(code)); } public ServerResponse findStockById(Integer stockId) { return ServerResponse.createBySuccess(this.stockMapper.selectByPrimaryKey(stockId)); } public ServerResponse listByAdmin(Integer showState, Integer lockState, String code, String name, String stockPlate, String stockType, int pageNum, int pageSize, HttpServletRequest request) { PageHelper.startPage(pageNum, pageSize); List stockList = this.stockMapper.listByAdmin(showState, lockState, code, name, stockPlate, stockType); for (Stock stock : stockList) { StockListVO stockListVO = dbStockService.getStockListVO(stock.getStockGid()); stock.setNowPrice(stockListVO.getNowPrice()); stock.setHcrate(stockListVO.getHcrate()); // stock.setChange(stockListVO.getChange()); // stock.setPctChange(stockListVO.getPctChange()); ServerResponse serverResponse = selectRateByDaysAndStockCode(stock.getStockCode(), 3); BigDecimal day3Rate = new BigDecimal("0"); if (serverResponse.isSuccess()) day3Rate = (BigDecimal) serverResponse.getData(); stock.setDay3Rate(day3Rate); } PageInfo pageInfo = new PageInfo(stockList); pageInfo.setList(stockList); 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()); StockListVO stockListVO = dbStockService.getStockListVO(stock.getStockGid()); stockAdminListVO.setNowPrice(stockListVO.getNowPrice()); stockAdminListVO.setHcrate(stockListVO.getHcrate()); 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()); if (stockPlate != null) stock.setStockPlate(stockPlate); 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 addStock(Stock stock) { // 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.setStockSpell(GetPyByChinese.converterToFirstSpell(stock.getStockName())); stock.setAddTime(new Date()); int insertCount = this.stockMapper.insertSelective(stock); if (insertCount > 0) return ServerResponse.createBySuccessMsg("添加成功"); return ServerResponse.createByErrorMsg("添加失败"); } public ServerResponse update(Stock stock) { stock.setTransAmBegin(stock.getTransAmBegin().replace(":", ":")); stock.setTransAmEnd(stock.getTransAmEnd().replace(":", ":")); stock.setTransPmBegin(stock.getTransPmBegin().replace(":", ":")); stock.setTransPmEnd(stock.getTransPmEnd().replace(":", ":")); stock.setTransElseBegin(stock.getTransElseBegin().replace(":", ":")); stock.setTransElseEnd(stock.getTransElseEnd().replace(":", ":")); int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock); if (updateCount > 0) return ServerResponse.createBySuccessMsg("修改成功"); return ServerResponse.createByErrorMsg("修改失败"); } @Override public List getStockInfoList() { List indexInfoList = stockMapper.selectStockList(); List indexInfoVoList = new ArrayList<>(); IndexInfoVo indexInfoVo; BigDecimal nowPrice; for (IndexInfo indexInfo : indexInfoList) { indexInfoVo = new IndexInfoVo(); nowPrice = new BigDecimal(0); BeanUtils.copyProperties(indexInfo, indexInfoVo); if (StringUtils.isNotEmpty(indexInfo.getDataDbName())) { try { StockListVO stockListVO = dbStockService.getStockListVO(indexInfo.getCode()); nowPrice = new BigDecimal(stockListVO.getNowPrice()); } catch (Exception e) { // 数据库不存在 log.info("数据库不存在"); } } indexInfoVo.setNowPrice(nowPrice); indexInfoVoList.add(indexInfoVo); } return indexInfoVoList; } }