ChoiceStockServiceImpl.java 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. package com.zx.dataservice.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.zx.dataservice.controller.WebSocketController;
  4. import com.zx.dataservice.mapper1.ChoiceStockMapper;
  5. import com.zx.dataservice.pojo.StockRestPojo;
  6. import com.zx.dataservice.redismessage.util.RedisUtil;
  7. import com.zx.dataservice.service.ChoiceStockService;
  8. import com.zx.dataservice.utils.*;
  9. import com.zx.dataservice.vo.StockRestRedisVO;
  10. import com.zx.dataservice.vo.StockRestVO;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.BeanUtils;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import java.io.File;
  18. import java.math.BigDecimal;
  19. import java.util.*;
  20. import java.util.concurrent.TimeUnit;
  21. @Service
  22. public class ChoiceStockServiceImpl implements ChoiceStockService {
  23. private static final Logger log = LoggerFactory.getLogger(ChoiceStockServiceImpl.class);
  24. private static final String sourceFileUrl = "/www/wwwroot/csqdata/stock";
  25. private static final String goalFileUrl = "/www/wwwroot/csqdata/stock/backup";
  26. private static final String url = "http://qwer16888.vip/api/stock/updateBatchStockInfo.do";
  27. private static final String urlRedis = "http://qwer16888.vip/init/redis/updateInfo.do";
  28. private static final String sourceAfterFileUrl = "/www/wwwroot/csqdata/stock/after";
  29. private static final String goalAfterFileUrl = "/www/wwwroot/csqdata/stock/after/backup";
  30. private static final String sourceFileUrlInFront = "/www/wwwroot/csqdata/stock/InFront"; // 盘前
  31. private static final String goalFileUrlInFront = "/www/wwwroot/csqdata/stock/backup/InFront"; //盘前 备份
  32. @Autowired
  33. private RedisUtil redisUtil;
  34. @Autowired
  35. private ChoiceStockMapper choiceStockMapper;
  36. @Override
  37. public void analysisStockRestData(String type) {
  38. // 1.获取文件夹文件 按照时间顺序拿到一个
  39. List<File> files = FileStockUtil.getFile(sourceFileUrl);
  40. if(null == files || 0 == files.size()){
  41. return;
  42. }
  43. List<StockRestPojo> stockRestPojoList = new ArrayList<>();
  44. List<StockRestVO> stockRestVOList = new ArrayList<>();
  45. List<StockRestRedisVO> stockRestRedisVOList = new ArrayList<>();
  46. StockRestPojo stockRestPojo;
  47. StockRestVO stockRestVO;
  48. StockRestRedisVO stockRestRedisVO;
  49. for (File file : files){
  50. // 2.移动文件去另外一个文件夹
  51. FileStockUtil.moveFile(sourceFileUrl + File.separator + file.getName(), goalFileUrl);
  52. // 3.读取文件内容
  53. String str = FileStockUtil.readFileContent(goalFileUrl + File.separator + file.getName());
  54. // 4.并解析
  55. if(StringUtils.isEmpty(str)){
  56. continue;
  57. }
  58. Map<String, List<String>> map = new HashMap<String, List<String>>();
  59. map = JSON.parseObject(str, HashMap.class);
  60. str = null;
  61. for (Map.Entry<String, List<String>> entry : map.entrySet()) {
  62. try {
  63. stockRestPojo = new StockRestPojo();
  64. stockRestPojo.setDate(String.valueOf(entry.getValue().get(0)));
  65. if(String.valueOf(entry.getValue().get(1)).equals("0")){
  66. continue;
  67. }
  68. stockRestPojo.setTime(String.valueOf(entry.getValue().get(1)));
  69. stockRestPojo.setNow(String.valueOf(entry.getValue().get(2)));
  70. stockRestPojo.setHigh(String.valueOf(entry.getValue().get(3)));
  71. stockRestPojo.setLow(String.valueOf(entry.getValue().get(4)));
  72. stockRestPojo.setOpen(String.valueOf(entry.getValue().get(5)));
  73. stockRestPojo.setPreclose(String.valueOf(entry.getValue().get(6)));
  74. stockRestPojo.setRoundlot(String.valueOf(entry.getValue().get(7)));
  75. stockRestPojo.setChange(String.valueOf(entry.getValue().get(8)));
  76. stockRestPojo.setPctchange(String.valueOf(entry.getValue().get(9)));
  77. stockRestPojo.setVolume(String.valueOf(entry.getValue().get(10)));
  78. stockRestPojo.setAmount(String.valueOf(entry.getValue().get(11)));
  79. stockRestPojo.setVolumeratio(String.valueOf(entry.getValue().get(12)));
  80. stockRestPojo.setCommissionratio(String.valueOf(entry.getValue().get(13)));
  81. stockRestPojo.setCommissiondiff(String.valueOf(entry.getValue().get(14)));
  82. stockRestPojo.setTradestatus(String.valueOf(entry.getValue().get(15)));
  83. stockRestPojo.setOutvolume(String.valueOf(entry.getValue().get(16)));
  84. stockRestPojo.setInvolume(String.valueOf(entry.getValue().get(17)));
  85. stockRestPojo.setHighlimit(String.valueOf(entry.getValue().get(18)));
  86. stockRestPojo.setLowlimit(String.valueOf(entry.getValue().get(19)));
  87. stockRestPojo.setSpeed(String.valueOf(entry.getValue().get(20)));
  88. stockRestPojo.setAverageprice(String.valueOf(entry.getValue().get(21)));
  89. stockRestPojo.setBuyprice1(String.valueOf(entry.getValue().get(22)));
  90. stockRestPojo.setBuyprice2(String.valueOf(entry.getValue().get(23)));
  91. stockRestPojo.setBuyprice3(String.valueOf(entry.getValue().get(24)));
  92. stockRestPojo.setBuyprice4(String.valueOf(entry.getValue().get(25)));
  93. stockRestPojo.setBuyprice5(String.valueOf(entry.getValue().get(26)));
  94. stockRestPojo.setBuyvolume1(String.valueOf(entry.getValue().get(27)));
  95. stockRestPojo.setBuyvolume2(String.valueOf(entry.getValue().get(28)));
  96. stockRestPojo.setBuyvolume3(String.valueOf(entry.getValue().get(29)));
  97. stockRestPojo.setBuyvolume4(String.valueOf(entry.getValue().get(30)));
  98. stockRestPojo.setBuyvolume5(String.valueOf(entry.getValue().get(31)));
  99. stockRestPojo.setSellprice1(String.valueOf(entry.getValue().get(32)));
  100. stockRestPojo.setSellprice2(String.valueOf(entry.getValue().get(33)));
  101. stockRestPojo.setSellprice3(String.valueOf(entry.getValue().get(34)));
  102. stockRestPojo.setSellprice4(String.valueOf(entry.getValue().get(35)));
  103. stockRestPojo.setSellprice5(String.valueOf(entry.getValue().get(36)));
  104. stockRestPojo.setSellvolume1(String.valueOf(entry.getValue().get(37)));
  105. stockRestPojo.setSellvolume2(String.valueOf(entry.getValue().get(38)));
  106. stockRestPojo.setSellvolume3(String.valueOf(entry.getValue().get(39)));
  107. stockRestPojo.setSellvolume4(String.valueOf(entry.getValue().get(40)));
  108. stockRestPojo.setSellvolume5(String.valueOf(entry.getValue().get(41)));
  109. stockRestPojo.setClosedtime(String.valueOf(entry.getValue().get(42)));
  110. stockRestPojo.setClosedvolume(String.valueOf(entry.getValue().get(43)));
  111. stockRestPojo.setClosedamount(String.valueOf(entry.getValue().get(44)));
  112. StringBuffer dateStr = new StringBuffer(stockRestPojo.getDate());
  113. if (StringUtils.isEmpty(stockRestPojo.getTime())) {
  114. dateStr = dateStr.append(000000);
  115. } else {
  116. dateStr.append( String.format("%06d", Integer.parseInt(stockRestPojo.getTime())));
  117. // if (5 == stockRestPojo.getTime().length()) {
  118. // // 长度为5表示 小时前面需要补0
  119. // dateStr = dateStr.append(0).append(stockRestPojo.getTime());
  120. // } else {
  121. // dateStr = dateStr.append(stockRestPojo.getTime());
  122. // }
  123. }
  124. Date date = TimeUtil.strToDate(dateStr.toString());
  125. // 毫秒转成秒
  126. stockRestPojo.setRealTime(date.getTime() / 1000);
  127. Calendar calendar = Calendar.getInstance();
  128. calendar.setTime(date);
  129. int min = calendar.get(Calendar.MINUTE); // 获取分钟
  130. int sec = calendar.get(Calendar.SECOND); // 获取秒数
  131. // 1分钟数据
  132. if (sec != 0) {
  133. stockRestPojo.setDateOne(stockRestPojo.getRealTime() + 60 - sec);
  134. } else {
  135. stockRestPojo.setDateOne(stockRestPojo.getRealTime());
  136. }
  137. // 5分钟数据
  138. if (sec != 0 || min % 5 != 0) {
  139. stockRestPojo.setDateFive(stockRestPojo.getRealTime() + (5 * 60) - sec - (min % 5 * 60));
  140. } else {
  141. stockRestPojo.setDateFive(stockRestPojo.getRealTime());
  142. }
  143. // 15分钟数据
  144. if (sec != 0 || min % 15 != 0) {
  145. stockRestPojo.setDateFifteen(stockRestPojo.getRealTime() + (15 * 60) - sec - (min % 15 * 60));
  146. } else {
  147. stockRestPojo.setDateFifteen(stockRestPojo.getRealTime());
  148. }
  149. // 30分钟数据
  150. if (sec != 0 || min % 30 != 0) {
  151. stockRestPojo.setDateThirty(stockRestPojo.getRealTime() + (30 * 60) - sec - (min % 30 * 60));
  152. } else {
  153. stockRestPojo.setDateThirty(stockRestPojo.getRealTime());
  154. }
  155. // 60分钟数据
  156. if (sec != 0 || min % 60 != 0) {
  157. stockRestPojo.setDateSixty(stockRestPojo.getRealTime() + (60 * 60) - sec - (min % 60 * 60));
  158. } else {
  159. stockRestPojo.setDateSixty(stockRestPojo.getRealTime());
  160. }
  161. StringBuffer tableName = new StringBuffer("data_rt_");
  162. tableName.append(entry.getKey().replace(".", "_").toLowerCase());
  163. stockRestPojo.setCode(entry.getKey().toUpperCase());
  164. stockRestPojo.setTableName(tableName.toString());
  165. if(new BigDecimal(stockRestPojo.getNow()+"").compareTo(BigDecimal.ZERO)!=0) {
  166. stockRestPojoList.add(stockRestPojo);
  167. stockRestVO = new StockRestVO();
  168. BeanUtils.copyProperties(stockRestPojo, stockRestVO);
  169. stockRestVOList.add(stockRestVO);
  170. stockRestRedisVO = new StockRestRedisVO();
  171. stockRestRedisVO.setCode(entry.getKey().toUpperCase());
  172. stockRestRedisVO.setNowPrice(stockRestPojo.getNow());
  173. stockRestRedisVO.setChange(stockRestPojo.getChange());
  174. stockRestRedisVO.setHcrate(stockRestPojo.getPctchange());
  175. stockRestRedisVO.setHighlimit(stockRestPojo.getHighlimit());
  176. stockRestRedisVO.setLowlimit(stockRestPojo.getLowlimit());
  177. stockRestRedisVO.setBuy1(stockRestPojo.getBuyprice1());
  178. stockRestRedisVO.setBuy2(stockRestPojo.getBuyprice2());
  179. stockRestRedisVO.setBuy3(stockRestPojo.getBuyprice3());
  180. stockRestRedisVO.setBuy4(stockRestPojo.getBuyprice4());
  181. stockRestRedisVO.setBuy5(stockRestPojo.getBuyprice5());
  182. stockRestRedisVO.setSell1(stockRestPojo.getSellprice1());
  183. stockRestRedisVO.setSell2(stockRestPojo.getSellprice2());
  184. stockRestRedisVO.setSell3(stockRestPojo.getSellprice3());
  185. stockRestRedisVO.setSell4(stockRestPojo.getSellprice4());
  186. stockRestRedisVO.setSell5(stockRestPojo.getSellprice5());
  187. stockRestRedisVO.setBuy1_num(stockRestPojo.getBuyvolume1());
  188. stockRestRedisVO.setBuy2_num(stockRestPojo.getBuyvolume2());
  189. stockRestRedisVO.setBuy3_num(stockRestPojo.getBuyvolume3());
  190. stockRestRedisVO.setBuy4_num(stockRestPojo.getBuyvolume4());
  191. stockRestRedisVO.setBuy5_num(stockRestPojo.getBuyvolume5());
  192. stockRestRedisVO.setSell1_num(stockRestPojo.getSellvolume1());
  193. stockRestRedisVO.setSell2_num(stockRestPojo.getSellvolume2());
  194. stockRestRedisVO.setSell3_num(stockRestPojo.getSellvolume3());
  195. stockRestRedisVO.setSell4_num(stockRestPojo.getSellvolume4());
  196. stockRestRedisVO.setSell5_num(stockRestPojo.getSellvolume5());
  197. redisUtil.saveItem("stock_"+stockRestRedisVO.getCode(),JSON.toJSONString(stockRestRedisVO), 10, TimeUnit.DAYS);
  198. // stockRestRedisVOList.add(stockRestRedisVO);
  199. }
  200. }catch (Exception e){
  201. log.error("错误数据导致失败" + e);
  202. }
  203. }
  204. map = null;
  205. }
  206. // 5.入库
  207. insertList(stockRestPojoList, stockRestVOList, stockRestRedisVOList,type);
  208. stockRestPojoList = null;
  209. }
  210. @Override
  211. public void analysisStockRestDataAfter(String type) {
  212. // 1.获取文件夹文件 按照时间顺序拿到一个
  213. List<File> files = FileStockUtil.getFile(sourceAfterFileUrl);
  214. if(null == files || 0 == files.size()){
  215. return;
  216. }
  217. List<StockRestPojo> stockRestPojoList = new ArrayList<>();
  218. List<StockRestVO> stockRestVOList = new ArrayList<>();
  219. List<StockRestRedisVO> stockRestRedisVOList = new ArrayList<>();
  220. StockRestPojo stockRestPojo;
  221. StockRestVO stockRestVO;
  222. StockRestRedisVO stockRestRedisVO;
  223. for (File file : files){
  224. // 2.移动文件去另外一个文件夹
  225. FileStockUtil.moveFile(sourceAfterFileUrl + File.separator + file.getName(), goalAfterFileUrl);
  226. // 3.读取文件内容
  227. String str = FileStockUtil.readFileContent(goalAfterFileUrl + File.separator + file.getName());
  228. // 4.并解析
  229. if(StringUtils.isEmpty(str)){
  230. continue;
  231. }
  232. Map<String, List<String>> map = new HashMap<String, List<String>>();
  233. map = JSON.parseObject(str, HashMap.class);
  234. str = null;
  235. for (Map.Entry<String, List<String>> entry : map.entrySet()) {
  236. try {
  237. stockRestPojo = new StockRestPojo();
  238. stockRestPojo.setDate(String.valueOf(entry.getValue().get(0)));
  239. if(String.valueOf(entry.getValue().get(1)).equals("0")){
  240. continue;
  241. }
  242. stockRestPojo.setTime("150000");
  243. stockRestPojo.setNow(String.valueOf(entry.getValue().get(2)));
  244. stockRestPojo.setHigh(String.valueOf(entry.getValue().get(3)));
  245. stockRestPojo.setLow(String.valueOf(entry.getValue().get(4)));
  246. stockRestPojo.setOpen(String.valueOf(entry.getValue().get(5)));
  247. stockRestPojo.setPreclose(String.valueOf(entry.getValue().get(6)));
  248. stockRestPojo.setRoundlot(String.valueOf(entry.getValue().get(7)));
  249. stockRestPojo.setChange(String.valueOf(entry.getValue().get(8)));
  250. stockRestPojo.setPctchange(String.valueOf(entry.getValue().get(9)));
  251. stockRestPojo.setVolume(String.valueOf(entry.getValue().get(10)));
  252. stockRestPojo.setAmount(String.valueOf(entry.getValue().get(11)));
  253. stockRestPojo.setVolumeratio(String.valueOf(entry.getValue().get(12)));
  254. stockRestPojo.setCommissionratio(String.valueOf(entry.getValue().get(13)));
  255. stockRestPojo.setCommissiondiff(String.valueOf(entry.getValue().get(14)));
  256. stockRestPojo.setTradestatus(String.valueOf(entry.getValue().get(15)));
  257. stockRestPojo.setOutvolume(String.valueOf(entry.getValue().get(16)));
  258. stockRestPojo.setInvolume(String.valueOf(entry.getValue().get(17)));
  259. stockRestPojo.setHighlimit(String.valueOf(entry.getValue().get(18)));
  260. stockRestPojo.setLowlimit(String.valueOf(entry.getValue().get(19)));
  261. stockRestPojo.setSpeed(String.valueOf(entry.getValue().get(20)));
  262. stockRestPojo.setAverageprice(String.valueOf(entry.getValue().get(21)));
  263. stockRestPojo.setBuyprice1(String.valueOf(entry.getValue().get(22)));
  264. stockRestPojo.setBuyprice2(String.valueOf(entry.getValue().get(23)));
  265. stockRestPojo.setBuyprice3(String.valueOf(entry.getValue().get(24)));
  266. stockRestPojo.setBuyprice4(String.valueOf(entry.getValue().get(25)));
  267. stockRestPojo.setBuyprice5(String.valueOf(entry.getValue().get(26)));
  268. stockRestPojo.setBuyvolume1(String.valueOf(entry.getValue().get(27)));
  269. stockRestPojo.setBuyvolume2(String.valueOf(entry.getValue().get(28)));
  270. stockRestPojo.setBuyvolume3(String.valueOf(entry.getValue().get(29)));
  271. stockRestPojo.setBuyvolume4(String.valueOf(entry.getValue().get(30)));
  272. stockRestPojo.setBuyvolume5(String.valueOf(entry.getValue().get(31)));
  273. stockRestPojo.setSellprice1(String.valueOf(entry.getValue().get(32)));
  274. stockRestPojo.setSellprice2(String.valueOf(entry.getValue().get(33)));
  275. stockRestPojo.setSellprice3(String.valueOf(entry.getValue().get(34)));
  276. stockRestPojo.setSellprice4(String.valueOf(entry.getValue().get(35)));
  277. stockRestPojo.setSellprice5(String.valueOf(entry.getValue().get(36)));
  278. stockRestPojo.setSellvolume1(String.valueOf(entry.getValue().get(37)));
  279. stockRestPojo.setSellvolume2(String.valueOf(entry.getValue().get(38)));
  280. stockRestPojo.setSellvolume3(String.valueOf(entry.getValue().get(39)));
  281. stockRestPojo.setSellvolume4(String.valueOf(entry.getValue().get(40)));
  282. stockRestPojo.setSellvolume5(String.valueOf(entry.getValue().get(41)));
  283. stockRestPojo.setClosedtime(String.valueOf(entry.getValue().get(42)));
  284. stockRestPojo.setClosedvolume(String.valueOf(entry.getValue().get(43)));
  285. stockRestPojo.setClosedamount(String.valueOf(entry.getValue().get(44)));
  286. StringBuffer dateStr = new StringBuffer(stockRestPojo.getDate());
  287. if (StringUtils.isEmpty(stockRestPojo.getTime())) {
  288. dateStr = dateStr.append(000000);
  289. } else {
  290. if (5 == stockRestPojo.getTime().length()) {
  291. // 长度为5表示 小时前面需要补0
  292. dateStr = dateStr.append(0).append(stockRestPojo.getTime());
  293. } else {
  294. dateStr = dateStr.append(stockRestPojo.getTime());
  295. }
  296. }
  297. Date date = TimeUtil.strToDate(dateStr.toString());
  298. // 毫秒转成秒
  299. stockRestPojo.setRealTime(date.getTime() / 1000);
  300. Calendar calendar = Calendar.getInstance();
  301. calendar.setTime(date);
  302. int min = calendar.get(Calendar.MINUTE); // 获取分钟
  303. int sec = calendar.get(Calendar.SECOND); // 获取秒数
  304. // 1分钟数据
  305. if (sec != 0) {
  306. stockRestPojo.setDateOne(stockRestPojo.getRealTime() + 60 - sec);
  307. } else {
  308. stockRestPojo.setDateOne(stockRestPojo.getRealTime());
  309. }
  310. // 5分钟数据
  311. if (sec != 0 || min % 5 != 0) {
  312. stockRestPojo.setDateFive(stockRestPojo.getRealTime() + (5 * 60) - sec - (min % 5 * 60));
  313. } else {
  314. stockRestPojo.setDateFive(stockRestPojo.getRealTime());
  315. }
  316. // 15分钟数据
  317. if (sec != 0 || min % 15 != 0) {
  318. stockRestPojo.setDateFifteen(stockRestPojo.getRealTime() + (15 * 60) - sec - (min % 15 * 60));
  319. } else {
  320. stockRestPojo.setDateFifteen(stockRestPojo.getRealTime());
  321. }
  322. // 30分钟数据
  323. if (sec != 0 || min % 30 != 0) {
  324. stockRestPojo.setDateThirty(stockRestPojo.getRealTime() + (30 * 60) - sec - (min % 30 * 60));
  325. } else {
  326. stockRestPojo.setDateThirty(stockRestPojo.getRealTime());
  327. }
  328. // 60分钟数据
  329. if (sec != 0 || min % 60 != 0) {
  330. stockRestPojo.setDateSixty(stockRestPojo.getRealTime() + (60 * 60) - sec - (min % 60 * 60));
  331. } else {
  332. stockRestPojo.setDateSixty(stockRestPojo.getRealTime());
  333. }
  334. StringBuffer tableName = new StringBuffer("data_rt_");
  335. tableName.append(entry.getKey().replace(".", "_").toLowerCase());
  336. stockRestPojo.setCode(entry.getKey().toUpperCase());
  337. stockRestPojo.setTableName(tableName.toString());
  338. if(new BigDecimal(stockRestPojo.getNow()+"").compareTo(BigDecimal.ZERO)!=0) {
  339. stockRestPojo.setRealTime((System.currentTimeMillis() / 1000));
  340. stockRestPojoList.add(stockRestPojo);
  341. stockRestVO = new StockRestVO();
  342. BeanUtils.copyProperties(stockRestPojo, stockRestVO);
  343. stockRestVOList.add(stockRestVO);
  344. stockRestRedisVO = new StockRestRedisVO();
  345. stockRestRedisVO.setCode(entry.getKey().toUpperCase());
  346. stockRestRedisVO.setNowPrice(stockRestPojo.getNow());
  347. stockRestRedisVO.setChange(stockRestPojo.getChange());
  348. stockRestRedisVO.setHcrate(stockRestPojo.getPctchange());
  349. stockRestRedisVO.setHighlimit(stockRestPojo.getHighlimit());
  350. stockRestRedisVO.setLowlimit(stockRestPojo.getLowlimit());
  351. stockRestRedisVO.setBuy1(stockRestPojo.getBuyprice1());
  352. stockRestRedisVO.setBuy2(stockRestPojo.getBuyprice2());
  353. stockRestRedisVO.setBuy3(stockRestPojo.getBuyprice3());
  354. stockRestRedisVO.setBuy4(stockRestPojo.getBuyprice4());
  355. stockRestRedisVO.setBuy5(stockRestPojo.getBuyprice5());
  356. stockRestRedisVO.setSell1(stockRestPojo.getSellprice1());
  357. stockRestRedisVO.setSell2(stockRestPojo.getSellprice2());
  358. stockRestRedisVO.setSell3(stockRestPojo.getSellprice3());
  359. stockRestRedisVO.setSell4(stockRestPojo.getSellprice4());
  360. stockRestRedisVO.setSell5(stockRestPojo.getSellprice5());
  361. stockRestRedisVO.setBuy1_num(stockRestPojo.getBuyvolume1());
  362. stockRestRedisVO.setBuy2_num(stockRestPojo.getBuyvolume2());
  363. stockRestRedisVO.setBuy3_num(stockRestPojo.getBuyvolume3());
  364. stockRestRedisVO.setBuy4_num(stockRestPojo.getBuyvolume4());
  365. stockRestRedisVO.setBuy5_num(stockRestPojo.getBuyvolume5());
  366. stockRestRedisVO.setSell1_num(stockRestPojo.getSellvolume1());
  367. stockRestRedisVO.setSell2_num(stockRestPojo.getSellvolume2());
  368. stockRestRedisVO.setSell3_num(stockRestPojo.getSellvolume3());
  369. stockRestRedisVO.setSell4_num(stockRestPojo.getSellvolume4());
  370. stockRestRedisVO.setSell5_num(stockRestPojo.getSellvolume5());
  371. redisUtil.saveItem("stock_"+stockRestRedisVO.getCode(),JSON.toJSONString(stockRestRedisVO), 10, TimeUnit.DAYS);
  372. // stockRestRedisVOList.add(stockRestRedisVO);
  373. }
  374. }catch (Exception e){
  375. log.error("错误数据导致失败" + e);
  376. }
  377. }
  378. map = null;
  379. }
  380. // 5.入库
  381. insertListAfter(stockRestPojoList, stockRestVOList, stockRestRedisVOList,type);
  382. stockRestPojoList = null;
  383. }
  384. private void insertList(List<StockRestPojo> list, List<StockRestVO> stockRestVOList, List<StockRestRedisVO> stockRestRedisVOList,String type) {
  385. int insertLength = list.size();
  386. int i = 0;
  387. int insertSize = 500;
  388. while (insertLength > insertSize) {
  389. choiceStockMapper.insertBatch(list.subList(i, i + insertSize));
  390. // List<StockRestVO> subList = stockRestVOList.subList(i, i + insertSize);
  391. // List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertSize);
  392. i = i + insertSize;
  393. insertLength = insertLength - insertSize;
  394. // Thread thread=new Thread(new Runnable() {
  395. // @Override
  396. // public void run() {
  397. //// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
  398. //// if(BuyAndSellUtils.isTransState()){
  399. // try {
  400. // new WebSocketController().sendSysMsgType("GP",JSON.toJSONString(subRedisList));
  401. //
  402. //// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
  403. // }catch (Exception e){
  404. // log.error("插入redis错误" + e);
  405. // }
  406. //// }
  407. //
  408. // }
  409. // });
  410. // thread.start();
  411. }
  412. if (insertLength > 0) {
  413. choiceStockMapper.insertBatch(list.subList(i, i + insertLength));
  414. // List<StockRestVO> subList = stockRestVOList.subList(i, i + insertLength);
  415. // List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertLength);
  416. // Thread thread=new Thread(new Runnable() {
  417. // @Override
  418. // public void run() {
  419. //// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
  420. //// if(BuyAndSellUtils.isTransState()){
  421. // try {
  422. // new WebSocketController().sendSysMsgType("GP",JSON.toJSONString(subRedisList));
  423. //// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
  424. // }catch (Exception e){
  425. // log.error("插入redis错误" + e);
  426. // }
  427. //// }
  428. // }
  429. // });
  430. // thread.start();
  431. }
  432. }
  433. private void insertListAfter(List<StockRestPojo> list, List<StockRestVO> stockRestVOList, List<StockRestRedisVO> stockRestRedisVOList,String type) {
  434. int insertLength = list.size();
  435. int i = 0;
  436. int insertSize = 500;
  437. while (insertLength > insertSize) {
  438. choiceStockMapper.insertBatchByAfter(list.subList(i, i + insertSize));
  439. // List<StockRestVO> subList = stockRestVOList.subList(i, i + insertSize);
  440. // List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertSize);
  441. i = i + insertSize;
  442. insertLength = insertLength - insertSize;
  443. // Thread thread=new Thread(new Runnable() {
  444. // @Override
  445. // public void run() {
  446. //// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
  447. //// if(BuyAndSellUtils.isTransState()){
  448. // try {
  449. // new WebSocketController().sendSysMsgType("GP",JSON.toJSONString(subRedisList));
  450. //// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
  451. // }catch (Exception e){
  452. // log.error("插入redis错误" + e);
  453. // }
  454. //// }
  455. //
  456. // }
  457. // });
  458. // thread.start();
  459. }
  460. if (insertLength > 0) {
  461. choiceStockMapper.insertBatchByAfter(list.subList(i, i + insertLength));
  462. // List<StockRestVO> subList = stockRestVOList.subList(i, i + insertLength);
  463. // List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertLength);
  464. // Thread thread=new Thread(new Runnable() {
  465. // @Override
  466. // public void run() {
  467. //// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
  468. //// if(BuyAndSellUtils.isTransState()){
  469. // try {
  470. // new WebSocketController().sendSysMsgType("GP",JSON.toJSONString(subRedisList));
  471. //// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
  472. // }catch (Exception e){
  473. // log.error("插入redis错误" + e);
  474. // }
  475. //// }
  476. // }
  477. // });
  478. // thread.start();
  479. }
  480. }
  481. @Override
  482. public void analysisStockRestDataInFront(String type) {
  483. // 1.获取文件夹文件 按照时间顺序拿到一个
  484. List<File> files = FileStockUtil.getFile(sourceFileUrlInFront);
  485. if(null == files || 0 == files.size()){
  486. return;
  487. }
  488. List<StockRestPojo> stockRestPojoList = new ArrayList<>();
  489. List<StockRestVO> stockRestVOList = new ArrayList<>();
  490. List<StockRestRedisVO> stockRestRedisVOList = new ArrayList<>();
  491. StockRestPojo stockRestPojo;
  492. StockRestVO stockRestVO;
  493. StockRestRedisVO stockRestRedisVO;
  494. for (File file : files){
  495. // 2.移动文件去另外一个文件夹
  496. FileStockUtil.moveFile(sourceFileUrlInFront + File.separator + file.getName(), goalFileUrlInFront);
  497. // 3.读取文件内容
  498. String str = FileStockUtil.readFileContent(goalFileUrlInFront + File.separator + file.getName());
  499. // 4.并解析
  500. if(StringUtils.isEmpty(str)){
  501. continue;
  502. }
  503. Map<String, List<String>> map = new HashMap<String, List<String>>();
  504. map = JSON.parseObject(str, HashMap.class);
  505. str = null;
  506. for (Map.Entry<String, List<String>> entry : map.entrySet()) {
  507. try {
  508. stockRestPojo = new StockRestPojo();
  509. stockRestPojo.setDate(String.valueOf(entry.getValue().get(0)));
  510. if(String.valueOf(entry.getValue().get(1)).equals("0")){
  511. continue;
  512. }
  513. stockRestPojo.setTime(String.valueOf(entry.getValue().get(1)));
  514. stockRestPojo.setNow(String.valueOf(entry.getValue().get(2)));
  515. stockRestPojo.setHigh(String.valueOf(entry.getValue().get(3)));
  516. stockRestPojo.setLow(String.valueOf(entry.getValue().get(4)));
  517. stockRestPojo.setOpen(String.valueOf(entry.getValue().get(5)));
  518. stockRestPojo.setPreclose(String.valueOf(entry.getValue().get(6)));
  519. stockRestPojo.setRoundlot(String.valueOf(entry.getValue().get(7)));
  520. stockRestPojo.setChange(String.valueOf(entry.getValue().get(8)));
  521. stockRestPojo.setPctchange(String.valueOf(entry.getValue().get(9)));
  522. stockRestPojo.setVolume(String.valueOf(entry.getValue().get(10)));
  523. stockRestPojo.setAmount(String.valueOf(entry.getValue().get(11)));
  524. stockRestPojo.setVolumeratio(String.valueOf(entry.getValue().get(12)));
  525. stockRestPojo.setCommissionratio(String.valueOf(entry.getValue().get(13)));
  526. stockRestPojo.setCommissiondiff(String.valueOf(entry.getValue().get(14)));
  527. stockRestPojo.setTradestatus(String.valueOf(entry.getValue().get(15)));
  528. stockRestPojo.setOutvolume(String.valueOf(entry.getValue().get(16)));
  529. stockRestPojo.setInvolume(String.valueOf(entry.getValue().get(17)));
  530. stockRestPojo.setHighlimit(String.valueOf(entry.getValue().get(18)));
  531. stockRestPojo.setLowlimit(String.valueOf(entry.getValue().get(19)));
  532. stockRestPojo.setSpeed(String.valueOf(entry.getValue().get(20)));
  533. stockRestPojo.setAverageprice(String.valueOf(entry.getValue().get(21)));
  534. stockRestPojo.setBuyprice1(String.valueOf(entry.getValue().get(22)));
  535. stockRestPojo.setBuyprice2(String.valueOf(entry.getValue().get(23)));
  536. stockRestPojo.setBuyprice3(String.valueOf(entry.getValue().get(24)));
  537. stockRestPojo.setBuyprice4(String.valueOf(entry.getValue().get(25)));
  538. stockRestPojo.setBuyprice5(String.valueOf(entry.getValue().get(26)));
  539. stockRestPojo.setBuyvolume1(String.valueOf(entry.getValue().get(27)));
  540. stockRestPojo.setBuyvolume2(String.valueOf(entry.getValue().get(28)));
  541. stockRestPojo.setBuyvolume3(String.valueOf(entry.getValue().get(29)));
  542. stockRestPojo.setBuyvolume4(String.valueOf(entry.getValue().get(30)));
  543. stockRestPojo.setBuyvolume5(String.valueOf(entry.getValue().get(31)));
  544. stockRestPojo.setSellprice1(String.valueOf(entry.getValue().get(32)));
  545. stockRestPojo.setSellprice2(String.valueOf(entry.getValue().get(33)));
  546. stockRestPojo.setSellprice3(String.valueOf(entry.getValue().get(34)));
  547. stockRestPojo.setSellprice4(String.valueOf(entry.getValue().get(35)));
  548. stockRestPojo.setSellprice5(String.valueOf(entry.getValue().get(36)));
  549. stockRestPojo.setSellvolume1(String.valueOf(entry.getValue().get(37)));
  550. stockRestPojo.setSellvolume2(String.valueOf(entry.getValue().get(38)));
  551. stockRestPojo.setSellvolume3(String.valueOf(entry.getValue().get(39)));
  552. stockRestPojo.setSellvolume4(String.valueOf(entry.getValue().get(40)));
  553. stockRestPojo.setSellvolume5(String.valueOf(entry.getValue().get(41)));
  554. stockRestPojo.setClosedtime(String.valueOf(entry.getValue().get(42)));
  555. stockRestPojo.setClosedvolume(String.valueOf(entry.getValue().get(43)));
  556. stockRestPojo.setClosedamount(String.valueOf(entry.getValue().get(44)));
  557. StringBuffer dateStr = new StringBuffer(stockRestPojo.getDate());
  558. if (StringUtils.isEmpty(stockRestPojo.getTime())) {
  559. dateStr = dateStr.append(000000);
  560. } else {
  561. if (5 == stockRestPojo.getTime().length()) {
  562. // 长度为5表示 小时前面需要补0
  563. dateStr = dateStr.append(0).append(stockRestPojo.getTime());
  564. } else {
  565. dateStr = dateStr.append(stockRestPojo.getTime());
  566. }
  567. }
  568. Date date = TimeUtil.strToDate(dateStr.toString());
  569. // 毫秒转成秒
  570. stockRestPojo.setRealTime(date.getTime() / 1000);
  571. Calendar calendar = Calendar.getInstance();
  572. calendar.setTime(date);
  573. int min = calendar.get(Calendar.MINUTE); // 获取分钟
  574. int sec = calendar.get(Calendar.SECOND); // 获取秒数
  575. // 1分钟数据
  576. if (sec != 0) {
  577. stockRestPojo.setDateOne(stockRestPojo.getRealTime() + 60 - sec);
  578. } else {
  579. stockRestPojo.setDateOne(stockRestPojo.getRealTime());
  580. }
  581. // 5分钟数据
  582. if (sec != 0 || min % 5 != 0) {
  583. stockRestPojo.setDateFive(stockRestPojo.getRealTime() + (5 * 60) - sec - (min % 5 * 60));
  584. } else {
  585. stockRestPojo.setDateFive(stockRestPojo.getRealTime());
  586. }
  587. // 15分钟数据
  588. if (sec != 0 || min % 15 != 0) {
  589. stockRestPojo.setDateFifteen(stockRestPojo.getRealTime() + (15 * 60) - sec - (min % 15 * 60));
  590. } else {
  591. stockRestPojo.setDateFifteen(stockRestPojo.getRealTime());
  592. }
  593. // 30分钟数据
  594. if (sec != 0 || min % 30 != 0) {
  595. stockRestPojo.setDateThirty(stockRestPojo.getRealTime() + (30 * 60) - sec - (min % 30 * 60));
  596. } else {
  597. stockRestPojo.setDateThirty(stockRestPojo.getRealTime());
  598. }
  599. // 60分钟数据
  600. if (sec != 0 || min % 60 != 0) {
  601. stockRestPojo.setDateSixty(stockRestPojo.getRealTime() + (60 * 60) - sec - (min % 60 * 60));
  602. } else {
  603. stockRestPojo.setDateSixty(stockRestPojo.getRealTime());
  604. }
  605. StringBuffer tableName = new StringBuffer("data_rt_");
  606. tableName.append(entry.getKey().replace(".", "_").toLowerCase());
  607. stockRestPojo.setCode(entry.getKey().toUpperCase());
  608. stockRestPojo.setTableName(tableName.toString());
  609. if(new BigDecimal(stockRestPojo.getNow()+"").compareTo(BigDecimal.ZERO)!=0) {
  610. stockRestPojoList.add(stockRestPojo);
  611. stockRestVO = new StockRestVO();
  612. BeanUtils.copyProperties(stockRestPojo, stockRestVO);
  613. stockRestVOList.add(stockRestVO);
  614. stockRestRedisVO = new StockRestRedisVO();
  615. stockRestRedisVO.setCode(entry.getKey().toUpperCase());
  616. stockRestRedisVO.setNowPrice(stockRestPojo.getNow());
  617. stockRestRedisVO.setChange(stockRestPojo.getChange());
  618. stockRestRedisVO.setHcrate(stockRestPojo.getPctchange());
  619. stockRestRedisVO.setHighlimit(stockRestPojo.getHighlimit());
  620. stockRestRedisVO.setLowlimit(stockRestPojo.getLowlimit());
  621. stockRestRedisVO.setBuy1(stockRestPojo.getBuyprice1());
  622. stockRestRedisVO.setBuy2(stockRestPojo.getBuyprice2());
  623. stockRestRedisVO.setBuy3(stockRestPojo.getBuyprice3());
  624. stockRestRedisVO.setBuy4(stockRestPojo.getBuyprice4());
  625. stockRestRedisVO.setBuy5(stockRestPojo.getBuyprice5());
  626. stockRestRedisVO.setSell1(stockRestPojo.getSellprice1());
  627. stockRestRedisVO.setSell2(stockRestPojo.getSellprice2());
  628. stockRestRedisVO.setSell3(stockRestPojo.getSellprice3());
  629. stockRestRedisVO.setSell4(stockRestPojo.getSellprice4());
  630. stockRestRedisVO.setSell5(stockRestPojo.getSellprice5());
  631. stockRestRedisVO.setBuy1_num(stockRestPojo.getBuyvolume1());
  632. stockRestRedisVO.setBuy2_num(stockRestPojo.getBuyvolume2());
  633. stockRestRedisVO.setBuy3_num(stockRestPojo.getBuyvolume3());
  634. stockRestRedisVO.setBuy4_num(stockRestPojo.getBuyvolume4());
  635. stockRestRedisVO.setBuy5_num(stockRestPojo.getBuyvolume5());
  636. stockRestRedisVO.setSell1_num(stockRestPojo.getSellvolume1());
  637. stockRestRedisVO.setSell2_num(stockRestPojo.getSellvolume2());
  638. stockRestRedisVO.setSell3_num(stockRestPojo.getSellvolume3());
  639. stockRestRedisVO.setSell4_num(stockRestPojo.getSellvolume4());
  640. stockRestRedisVO.setSell5_num(stockRestPojo.getSellvolume5());
  641. redisUtil.saveItem("stock_"+stockRestRedisVO.getCode(),JSON.toJSONString(stockRestRedisVO), 10, TimeUnit.DAYS);
  642. // stockRestRedisVOList.add(stockRestRedisVO);
  643. }
  644. }catch (Exception e){
  645. log.error("错误数据导致失败" + e);
  646. }
  647. }
  648. map = null;
  649. }
  650. // 5.入库
  651. insertListInFront(stockRestPojoList, stockRestVOList, stockRestRedisVOList,type);
  652. stockRestPojoList = null;
  653. }
  654. private void insertListInFront(List<StockRestPojo> list, List<StockRestVO> stockRestVOList, List<StockRestRedisVO> stockRestRedisVOList,String type) {
  655. int insertLength = list.size();
  656. int i = 0;
  657. int insertSize = 500;
  658. while (insertLength > insertSize) {
  659. choiceStockMapper.insertBatch(list.subList(i, i + insertSize));
  660. List<StockRestVO> subList = stockRestVOList.subList(i, i + insertSize);
  661. List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertSize);
  662. i = i + insertSize;
  663. insertLength = insertLength - insertSize;
  664. Thread thread=new Thread(new Runnable() {
  665. @Override
  666. public void run() {
  667. // HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
  668. // if(BuyAndSellUtils.isTransState()){
  669. try {
  670. new WebSocketController().sendSysMsgType("GP",JSON.toJSONString(subRedisList));
  671. // HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
  672. }catch (Exception e){
  673. log.error("插入redis错误" + e);
  674. }
  675. // }
  676. }
  677. });
  678. thread.start();
  679. }
  680. if (insertLength > 0) {
  681. choiceStockMapper.insertBatch(list.subList(i, i + insertLength));
  682. List<StockRestVO> subList = stockRestVOList.subList(i, i + insertLength);
  683. List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertLength);
  684. Thread thread=new Thread(new Runnable() {
  685. @Override
  686. public void run() {
  687. // HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
  688. // if(BuyAndSellUtils.isTransState()){
  689. try {
  690. new WebSocketController().sendSysMsgType("GP",JSON.toJSONString(subRedisList));
  691. // HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
  692. }catch (Exception e){
  693. log.error("插入redis错误" + e);
  694. }
  695. // }
  696. }
  697. });
  698. thread.start();
  699. }
  700. }
  701. }