ChoiceStockServiceImpl.java 41 KB

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