StockServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. package com.xc.service.impl;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.google.common.collect.Lists;
  5. import com.xc.common.ServerResponse;
  6. import com.xc.config.StockPoll;
  7. import com.xc.dao.RealTimeMapper;
  8. import com.xc.dao.StockIndexMapper;
  9. import com.xc.dao.StockMapper;
  10. import com.xc.pojo.*;
  11. import com.xc.service.DbStockService;
  12. import com.xc.service.IStockMarketsDayService;
  13. import com.xc.service.IStockService;
  14. import com.xc.service.IUserPositionService;
  15. import com.xc.utils.HttpClientRequest;
  16. import com.xc.utils.PropertiesUtil;
  17. import com.xc.utils.stock.BuyAndSellUtils;
  18. import com.xc.utils.stock.pinyin.GetPyByChinese;
  19. import com.xc.utils.stock.sina.SinaStockApi;
  20. import com.xc.vo.stock.*;
  21. import com.xc.vo.stock.k.MinDataVO;
  22. import com.xc.vo.stock.k.echarts.EchartsDataVO;
  23. import java.io.BufferedReader;
  24. import java.io.IOException;
  25. import java.io.InputStreamReader;
  26. import java.math.BigDecimal;
  27. import java.net.HttpURLConnection;
  28. import java.net.URL;
  29. import java.text.SimpleDateFormat;
  30. import java.util.*;
  31. import javax.servlet.http.HttpServletRequest;
  32. import javax.servlet.http.HttpServletResponse;
  33. import net.sf.json.JSONArray;
  34. import net.sf.json.JSONObject;
  35. import org.apache.commons.lang3.StringUtils;
  36. import org.slf4j.Logger;
  37. import org.slf4j.LoggerFactory;
  38. import org.springframework.beans.BeanUtils;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.stereotype.Service;
  41. @Service("iStockService")
  42. public class StockServiceImpl implements IStockService {
  43. private static final Logger log = LoggerFactory.getLogger(StockServiceImpl.class);
  44. @Autowired
  45. StockMapper stockMapper;
  46. @Autowired
  47. RealTimeMapper realTimeMapper;
  48. @Autowired
  49. IStockMarketsDayService iStockMarketsDayService;
  50. @Autowired
  51. StockPoll stockPoll;
  52. @Autowired
  53. StockIndexMapper stockIndexMapper;
  54. @Autowired
  55. private IUserPositionService userPositionService;
  56. @Autowired
  57. DbStockService dbStockService;
  58. public ServerResponse getMarket() {
  59. String market_url = PropertiesUtil.getProperty("sina.market.url");
  60. String result = null;
  61. try {
  62. result = HttpClientRequest.doGet(market_url);
  63. } catch (Exception e) {
  64. log.error("e = {}", e);
  65. }
  66. String[] marketArray = result.split(";");
  67. List<MarketVO> marketVOS = Lists.newArrayList();
  68. for (int i = 0; i < marketArray.length; i++) {
  69. String hqstr = marketArray[i];
  70. try {
  71. if (StringUtils.isNotBlank(hqstr)) {
  72. hqstr = hqstr.substring(hqstr.indexOf("\"") + 1, hqstr.lastIndexOf("\""));
  73. MarketVO marketVO = new MarketVO();
  74. String[] sh01_arr = hqstr.split(",");
  75. marketVO.setName(sh01_arr[0]);
  76. marketVO.setNowPrice(sh01_arr[1]);
  77. marketVO.setIncrease(sh01_arr[2]);
  78. marketVO.setIncreaseRate(sh01_arr[3]);
  79. marketVOS.add(marketVO);
  80. }
  81. } catch (Exception e) {
  82. log.error("str = {} , e = {}", hqstr, e);
  83. }
  84. }
  85. MarketVOResult marketVOResult = new MarketVOResult();
  86. marketVOResult.setMarket(marketVOS);
  87. return ServerResponse.createBySuccess(marketVOResult);
  88. }
  89. public ServerResponse getStock(int num, int pageNum, int pageSize, String keyWords, String stockPlate, String stockType) {
  90. List<Stock> stockList = null;
  91. PageHelper.startPage(pageNum, pageSize);
  92. stockList = this.stockMapper.findStockListByKeyWords(keyWords, stockPlate, stockType, 0);
  93. List<StockListVO> stockListVOS = Lists.newArrayList();
  94. for (Stock stock : stockList) {
  95. StockListVO stockListVO = dbStockService.getStockListVO(stock.getStockGid());
  96. stockListVO.setName(stock.getStockName());
  97. stockListVO.setId(stock.getId());
  98. stockListVO.setCode(stock.getStockCode());
  99. stockListVO.setSpell(stock.getStockSpell());
  100. stockListVO.setGid(stock.getStockGid());
  101. BigDecimal day3Rate = (BigDecimal) selectRateByDaysAndStockCode(stock.getStockCode(), 3).getData();
  102. stockListVO.setDay3Rate(day3Rate);
  103. stockListVO.setStock_plate(stock.getStockPlate());
  104. stockListVO.setStock_type(stock.getStockType());
  105. // stockListVO.setTransState(isTransState);
  106. // stockListVO.setBuyLimit(stock.getBuyLimit());
  107. stockListVOS.add(stockListVO);
  108. }
  109. PageInfo pageInfo = new PageInfo(stockList);
  110. pageInfo.setList(stockListVOS);
  111. return ServerResponse.createBySuccess(pageInfo);
  112. }
  113. public boolean isTransState(Stock stock){
  114. try {
  115. boolean am = BuyAndSellUtils.isTransTime(stock.getTransAmBegin(), stock.getTransAmEnd());
  116. boolean pm = BuyAndSellUtils.isTransTime(stock.getTransPmBegin(), stock.getTransPmEnd());
  117. boolean elseTime = BuyAndSellUtils.isTransTime(stock.getTransElseBegin(), stock.getTransElseEnd());
  118. if(am || pm || elseTime){
  119. return true;
  120. }
  121. return false;
  122. } catch (Exception e) {
  123. e.printStackTrace();
  124. return false;
  125. }
  126. }
  127. public void z1() {
  128. this.stockPoll.z1();
  129. }
  130. public void z2() {
  131. this.stockPoll.z2();
  132. }
  133. public void z3() {
  134. this.stockPoll.z3();
  135. }
  136. public void z4() {
  137. this.stockPoll.z4();
  138. }
  139. public void h1() {
  140. this.stockPoll.h1();
  141. }
  142. public void h2() {
  143. this.stockPoll.h2();
  144. }
  145. public void h3() {
  146. this.stockPoll.h3();
  147. }
  148. public ServerResponse getDateline(HttpServletResponse response, String code) {
  149. if (StringUtils.isBlank(code))
  150. return ServerResponse.createByErrorMsg("");
  151. Stock stock = this.stockMapper.findStockByCode(code);
  152. if (stock == null)
  153. return ServerResponse.createByErrorMsg("");
  154. response.setHeader("Access-Control-Allow-Origin", "*");
  155. Date time = new Date();
  156. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  157. String end = sdf.format(time);
  158. Calendar c = Calendar.getInstance();
  159. c.setTime(new Date());
  160. c.add(2, -3);
  161. Date m = c.getTime();
  162. String mon = sdf.format(m);
  163. String methodUrl = "http://q.stock.sohu.com/hisHq?code=cn_" + code + "+&start=" + mon + "&end=" + end + "&stat=1&order=D";
  164. HttpURLConnection connection = null;
  165. BufferedReader reader = null;
  166. String line = null;
  167. EchartsDataVO echartsDataVO = new EchartsDataVO();
  168. try {
  169. URL url = new URL(methodUrl);
  170. connection = (HttpURLConnection) url.openConnection();
  171. connection.setRequestMethod("GET");
  172. connection.connect();
  173. if (connection.getResponseCode() == 200) {
  174. reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "gbk"));
  175. StringBuilder result = new StringBuilder();
  176. while ((line = reader.readLine()) != null)
  177. result.append(line).append(System.getProperty("line.separator"));
  178. JSONArray jsonArray = JSONArray.fromObject(result.toString());
  179. JSONObject json = jsonArray.getJSONObject(0);
  180. JSONArray jsonArray1 = JSONArray.fromObject(json.get("hq"));
  181. Collections.reverse((List<?>) jsonArray1);
  182. double[][] values = (double[][]) null;
  183. Object[][] volumes = (Object[][]) null;
  184. String[] date = null;
  185. values = new double[jsonArray1.size()][5];
  186. volumes = new Object[jsonArray1.size()][3];
  187. date = new String[jsonArray1.size()];
  188. for (int i = 0; i < jsonArray1.size(); i++) {
  189. JSONArray js = JSONArray.fromObject(jsonArray1.get(i));
  190. date[i] = js.get(0).toString();
  191. values[i][0] = Double.valueOf(js.get(1).toString()).doubleValue();
  192. values[i][1] = Double.valueOf(js.get(2).toString()).doubleValue();
  193. values[i][2] = Double.valueOf(js.get(5).toString()).doubleValue();
  194. values[i][3] = Double.valueOf(js.get(6).toString()).doubleValue();
  195. values[i][4] = Double.valueOf(js.get(7).toString()).doubleValue();
  196. volumes[i][0] = Integer.valueOf(i);
  197. volumes[i][1] = Double.valueOf(js.get(7).toString());
  198. volumes[i][2] = Integer.valueOf((Double.valueOf(js.get(3).toString()).doubleValue() > 0.0D) ? 1 : -1);
  199. }
  200. echartsDataVO.setDate(date);
  201. echartsDataVO.setValues(values);
  202. echartsDataVO.setVolumes(volumes);
  203. echartsDataVO.setStockCode(stock.getStockCode());
  204. echartsDataVO.setStockName(stock.getStockName());
  205. log.info(String.valueOf(echartsDataVO));
  206. ServerResponse.createBySuccess(echartsDataVO);
  207. }
  208. } catch (IOException e) {
  209. e.printStackTrace();
  210. } finally {
  211. try {
  212. reader.close();
  213. } catch (IOException e) {
  214. e.printStackTrace();
  215. }
  216. connection.disconnect();
  217. }
  218. return ServerResponse.createBySuccess(echartsDataVO);
  219. }
  220. public ServerResponse getSingleStock(Integer id) {
  221. Stock stock = this.stockMapper.selectByPrimaryKey(id);
  222. // 查询详情
  223. if (stock == null) {
  224. return ServerResponse.createByErrorMsg("");
  225. }
  226. try {
  227. String gid = stock.getStockGid();
  228. StockVO stockVO = dbStockService.getStock(gid);
  229. stockVO.setName(stock.getStockName());
  230. stockVO.setId(stock.getId());
  231. stockVO.setCode(stock.getStockCode());
  232. stockVO.setSpell(stock.getStockSpell());
  233. stockVO.setGid(stock.getStockGid());
  234. // stockVO.setBuyLimit(stock.getBuyLimit());
  235. // stockVO.setStockOrBond(stock.getStockOrBond());
  236. return ServerResponse.createBySuccess(stockVO);
  237. } catch (Exception e) {
  238. StockVO stockVO = new StockVO();
  239. return ServerResponse.createBySuccess(stockVO);
  240. }
  241. }
  242. public ServerResponse getSingleStockConfig(Integer id) {
  243. //TODO 查询详情
  244. Stock stock = this.stockMapper.selectByPrimaryKey(id);
  245. return ServerResponse.createBySuccess(stock);
  246. }
  247. public ServerResponse getMinK(String code, Integer time, Integer ma, Integer size) {
  248. if (StringUtils.isBlank(code) || time == null || ma == null || size == null)
  249. return ServerResponse.createByErrorMsg("");
  250. Stock stock = this.stockMapper.findStockByCode(code);
  251. if (stock == null)
  252. return ServerResponse.createByErrorMsg("");
  253. return SinaStockApi.getStockMinK(stock, time.intValue(), ma.intValue(), size.intValue());
  254. }
  255. public ServerResponse getMinK_Echarts(String code, Integer time, Integer ma, Integer size) {
  256. if (StringUtils.isBlank(code) || time == null || ma == null || size == null)
  257. return ServerResponse.createByErrorMsg("");
  258. Stock stock = this.stockMapper.findStockByCode(code);
  259. if (stock == null)
  260. return ServerResponse.createByErrorMsg("");
  261. ServerResponse<MinDataVO> serverResponse = SinaStockApi.getStockMinK(stock, time.intValue(), ma.intValue(), size.intValue());
  262. MinDataVO minDataVO = (MinDataVO) serverResponse.getData();
  263. EchartsDataVO echartsDataVO = SinaStockApi.assembleEchartsDataVO(minDataVO);
  264. return ServerResponse.createBySuccess(echartsDataVO);
  265. }
  266. public ServerResponse<Stock> findStockByName(String name) {
  267. return ServerResponse.createBySuccess(this.stockMapper.findStockByName(name));
  268. }
  269. public ServerResponse<Stock> findStockByCode(String code) {
  270. return ServerResponse.createBySuccess(this.stockMapper.findStockByCode(code));
  271. }
  272. public ServerResponse<Stock> findStockById(Integer stockId) {
  273. return ServerResponse.createBySuccess(this.stockMapper.selectByPrimaryKey(stockId));
  274. }
  275. public ServerResponse<PageInfo> listByAdmin(Integer showState, Integer lockState, String code, String name, String stockPlate, String stockType, int pageNum, int pageSize, HttpServletRequest request) {
  276. PageHelper.startPage(pageNum, pageSize);
  277. List<Stock> stockList = this.stockMapper.listByAdmin(showState, lockState, code, name, stockPlate, stockType);
  278. for (Stock stock : stockList) {
  279. StockListVO stockListVO = dbStockService.getStockListVO(stock.getStockGid());
  280. stock.setNowPrice(stockListVO.getNowPrice());
  281. stock.setHcrate(stockListVO.getHcrate());
  282. // stock.setChange(stockListVO.getChange());
  283. // stock.setPctChange(stockListVO.getPctChange());
  284. ServerResponse serverResponse = selectRateByDaysAndStockCode(stock.getStockCode(), 3);
  285. BigDecimal day3Rate = new BigDecimal("0");
  286. if (serverResponse.isSuccess())
  287. day3Rate = (BigDecimal) serverResponse.getData();
  288. stock.setDay3Rate(day3Rate);
  289. }
  290. PageInfo pageInfo = new PageInfo(stockList);
  291. pageInfo.setList(stockList);
  292. return ServerResponse.createBySuccess(pageInfo);
  293. }
  294. private StockAdminListVO assembleStockAdminListVO(Stock stock) {
  295. StockAdminListVO stockAdminListVO = new StockAdminListVO();
  296. stockAdminListVO.setId(stock.getId());
  297. stockAdminListVO.setStockName(stock.getStockName());
  298. stockAdminListVO.setStockCode(stock.getStockCode());
  299. stockAdminListVO.setStockSpell(stock.getStockSpell());
  300. stockAdminListVO.setStockType(stock.getStockType());
  301. stockAdminListVO.setStockGid(stock.getStockGid());
  302. stockAdminListVO.setStockPlate(stock.getStockPlate());
  303. stockAdminListVO.setIsLock(stock.getIsLock());
  304. stockAdminListVO.setIsShow(stock.getIsShow());
  305. stockAdminListVO.setAddTime(stock.getAddTime());
  306. StockListVO stockListVO = dbStockService.getStockListVO(stock.getStockGid());
  307. stockAdminListVO.setNowPrice(stockListVO.getNowPrice());
  308. stockAdminListVO.setHcrate(stockListVO.getHcrate());
  309. ServerResponse serverResponse = selectRateByDaysAndStockCode(stock.getStockCode(), 3);
  310. BigDecimal day3Rate = new BigDecimal("0");
  311. if (serverResponse.isSuccess())
  312. day3Rate = (BigDecimal) serverResponse.getData();
  313. stockAdminListVO.setDay3Rate(day3Rate);
  314. return stockAdminListVO;
  315. }
  316. public ServerResponse updateLock(Integer stockId) {
  317. Stock stock = this.stockMapper.selectByPrimaryKey(stockId);
  318. if (stock == null)
  319. return ServerResponse.createByErrorMsg("");
  320. if (stock.getIsLock().intValue() == 1) {
  321. stock.setIsLock(Integer.valueOf(0));
  322. } else {
  323. stock.setIsLock(Integer.valueOf(1));
  324. }
  325. int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock);
  326. if (updateCount > 0)
  327. return ServerResponse.createBySuccessMsg("");
  328. return ServerResponse.createByErrorMsg("");
  329. }
  330. public ServerResponse updateShow(Integer stockId) {
  331. Stock stock = this.stockMapper.selectByPrimaryKey(stockId);
  332. if (stock == null)
  333. return ServerResponse.createByErrorMsg("");
  334. if (stock.getIsShow().intValue() == 0) {
  335. stock.setIsShow(Integer.valueOf(1));
  336. } else {
  337. stock.setIsShow(Integer.valueOf(0));
  338. }
  339. int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock);
  340. if (updateCount > 0)
  341. return ServerResponse.createBySuccessMsg("");
  342. return ServerResponse.createByErrorMsg("");
  343. }
  344. public ServerResponse addStock(String stockName, String stockCode, String stockType, String stockPlate, Integer isLock, Integer isShow) {
  345. if (StringUtils.isBlank(stockName) || StringUtils.isBlank(stockCode) || StringUtils.isBlank(stockType) || isLock == null || isShow == null)
  346. return ServerResponse.createByErrorMsg("");
  347. Stock cstock = (Stock) findStockByCode(stockCode).getData();
  348. if (cstock != null)
  349. return ServerResponse.createByErrorMsg("");
  350. Stock nstock = (Stock) findStockByName(stockName).getData();
  351. if (nstock != null)
  352. return ServerResponse.createByErrorMsg("");
  353. Stock stock = new Stock();
  354. stock.setStockName(stockName);
  355. stock.setStockCode(stockCode);
  356. stock.setStockSpell(GetPyByChinese.converterToFirstSpell(stockName));
  357. stock.setStockType(stockType);
  358. stock.setStockGid(stockType + stockCode);
  359. stock.setIsLock(isLock);
  360. stock.setIsShow(isShow);
  361. stock.setAddTime(new Date());
  362. if (stockPlate != null)
  363. stock.setStockPlate(stockPlate);
  364. int insertCount = this.stockMapper.insert(stock);
  365. if (insertCount > 0)
  366. return ServerResponse.createBySuccessMsg("");
  367. return ServerResponse.createByErrorMsg("");
  368. }
  369. public int CountStockNum() {
  370. return this.stockMapper.CountStockNum();
  371. }
  372. public int CountShowNum(Integer showState) {
  373. return this.stockMapper.CountShowNum(showState);
  374. }
  375. public int CountUnLockNum(Integer lockState) {
  376. return this.stockMapper.CountUnLockNum(lockState);
  377. }
  378. public List findStockList() {
  379. return this.stockMapper.findStockList();
  380. }
  381. public ServerResponse selectRateByDaysAndStockCode(String stockCode, int days) {
  382. Stock stock = this.stockMapper.findStockByCode(stockCode);
  383. if (stock == null)
  384. return ServerResponse.createByErrorMsg("");
  385. BigDecimal daysRate = this.iStockMarketsDayService.selectRateByDaysAndStockCode(stock.getId(), days);
  386. return ServerResponse.createBySuccess(daysRate);
  387. }
  388. public ServerResponse addStock(Stock stock) {
  389. // Stock cstock = (Stock)findStockByCode(stockCode).getData();
  390. // if (cstock != null)
  391. // return ServerResponse.createByErrorMsg("");
  392. // Stock nstock = (Stock)findStockByName(stockName).getData();
  393. // if (nstock != null)
  394. // return ServerResponse.createByErrorMsg("");
  395. stock.setStockSpell(GetPyByChinese.converterToFirstSpell(stock.getStockName()));
  396. stock.setAddTime(new Date());
  397. int insertCount = this.stockMapper.insertSelective(stock);
  398. if (insertCount > 0)
  399. return ServerResponse.createBySuccessMsg("添加成功");
  400. return ServerResponse.createByErrorMsg("添加失败");
  401. }
  402. public ServerResponse update(Stock stock) {
  403. stock.setTransAmBegin(stock.getTransAmBegin().replace(":", ":"));
  404. stock.setTransAmEnd(stock.getTransAmEnd().replace(":", ":"));
  405. stock.setTransPmBegin(stock.getTransPmBegin().replace(":", ":"));
  406. stock.setTransPmEnd(stock.getTransPmEnd().replace(":", ":"));
  407. stock.setTransElseBegin(stock.getTransElseBegin().replace(":", ":"));
  408. stock.setTransElseEnd(stock.getTransElseEnd().replace(":", ":"));
  409. int updateCount = this.stockMapper.updateByPrimaryKeySelective(stock);
  410. if (updateCount > 0)
  411. return ServerResponse.createBySuccessMsg("修改成功");
  412. return ServerResponse.createByErrorMsg("修改失败");
  413. }
  414. @Override
  415. public List<IndexInfoVo> getStockInfoList() {
  416. List<IndexInfo> indexInfoList = stockMapper.selectStockList();
  417. List<IndexInfoVo> indexInfoVoList = new ArrayList<>();
  418. IndexInfoVo indexInfoVo;
  419. BigDecimal nowPrice;
  420. for (IndexInfo indexInfo : indexInfoList) {
  421. indexInfoVo = new IndexInfoVo();
  422. nowPrice = new BigDecimal(0);
  423. BeanUtils.copyProperties(indexInfo, indexInfoVo);
  424. if (StringUtils.isNotEmpty(indexInfo.getDataDbName())) {
  425. try {
  426. StockListVO stockListVO = dbStockService.getStockListVO(indexInfo.getCode());
  427. nowPrice = new BigDecimal(stockListVO.getNowPrice());
  428. } catch (Exception e) {
  429. // 数据库不存在
  430. log.info("数据库不存在");
  431. }
  432. }
  433. indexInfoVo.setNowPrice(nowPrice);
  434. indexInfoVoList.add(indexInfoVo);
  435. }
  436. return indexInfoVoList;
  437. }
  438. }