|
@@ -1,13 +1,11 @@
|
|
|
package com.zx.dataservice.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.zx.dataservice.controller.WebSocketController;
|
|
|
import com.zx.dataservice.mapper1.ChoiceStockMapper;
|
|
|
import com.zx.dataservice.pojo.StockRestPojo;
|
|
|
import com.zx.dataservice.service.ChoiceStockService;
|
|
|
-import com.zx.dataservice.utils.BuyAndSellUtils;
|
|
|
-import com.zx.dataservice.utils.FileStockUtil;
|
|
|
-import com.zx.dataservice.utils.HttpRequest;
|
|
|
-import com.zx.dataservice.utils.TimeUtil;
|
|
|
+import com.zx.dataservice.utils.*;
|
|
|
import com.zx.dataservice.vo.StockRestRedisVO;
|
|
|
import com.zx.dataservice.vo.StockRestVO;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -39,6 +37,12 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
|
|
|
private static final String goalAfterFileUrl = "/www/wwwroot/csqdata/stock/after/backup";
|
|
|
|
|
|
+ private static final String sourceFileUrlInFront = "/www/wwwroot/csqdata/stock/InFront"; // 盘前
|
|
|
+
|
|
|
+ private static final String goalFileUrlInFront = "/www/wwwroot/csqdata/stock/backup/InFront"; //盘前 备份
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
@Autowired
|
|
|
private ChoiceStockMapper choiceStockMapper;
|
|
|
|
|
@@ -66,6 +70,10 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
FileStockUtil.moveFile(sourceAfterFileUrl + File.separator + file.getName(), goalAfterFileUrl);
|
|
|
// 3.读取文件内容
|
|
|
str = FileStockUtil.readFileContent(goalAfterFileUrl + File.separator + file.getName());
|
|
|
+ }else if("inFront".equals(type)){
|
|
|
+ FileStockUtil.moveFile(sourceFileUrlInFront + File.separator + file.getName(), goalFileUrlInFront);
|
|
|
+ // 3.读取文件内容
|
|
|
+ str = FileStockUtil.readFileContent(goalFileUrlInFront + File.separator + file.getName());
|
|
|
}
|
|
|
// 4.并解析
|
|
|
if(StringUtils.isEmpty(str)){
|
|
@@ -81,7 +89,7 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
if(String.valueOf(entry.getValue().get(1)).equals("0")){
|
|
|
continue;
|
|
|
}
|
|
|
- stockRestPojo.setTime("now".equals(type)?String.valueOf(entry.getValue().get(1)):"150000");
|
|
|
+ stockRestPojo.setTime((!"now".equals(type))?String.valueOf(entry.getValue().get(1)):"150000");
|
|
|
stockRestPojo.setNow(String.valueOf(entry.getValue().get(2)));
|
|
|
stockRestPojo.setHigh(String.valueOf(entry.getValue().get(3)));
|
|
|
stockRestPojo.setLow(String.valueOf(entry.getValue().get(4)));
|
|
@@ -191,6 +199,9 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
stockRestRedisVO.setNowPrice(stockRestPojo.getNow());
|
|
|
stockRestRedisVO.setChange(stockRestPojo.getChange());
|
|
|
stockRestRedisVO.setHcrate(stockRestPojo.getPctchange());
|
|
|
+
|
|
|
+ stockRestRedisVO.setHighlimit(stockRestPojo.getHighlimit());
|
|
|
+ stockRestRedisVO.setLowlimit(stockRestPojo.getLowlimit());
|
|
|
stockRestRedisVOList.add(stockRestRedisVO);
|
|
|
}catch (Exception e){
|
|
|
log.error("错误数据导致失败" + e);
|
|
@@ -203,13 +214,12 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
stockRestPojoList = null;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
private void insertList(List<StockRestPojo> list, List<StockRestVO> stockRestVOList, List<StockRestRedisVO> stockRestRedisVOList,String type) {
|
|
|
int insertLength = list.size();
|
|
|
int i = 0;
|
|
|
int insertSize = 500;
|
|
|
while (insertLength > insertSize) {
|
|
|
- if("now".equals(type)){
|
|
|
+ if((!"now".equals(type))){
|
|
|
choiceStockMapper.insertBatch(list.subList(i, i + insertSize));
|
|
|
}else {
|
|
|
choiceStockMapper.insertBatchByAfter(list.subList(i, i + insertSize));
|
|
@@ -222,20 +232,257 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
|
|
|
- if(BuyAndSellUtils.isTransState()){
|
|
|
- try {
|
|
|
- HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
|
|
|
- }catch (Exception e){
|
|
|
- log.error("插入redis错误" + e);
|
|
|
+// if(BuyAndSellUtils.isTransState()){
|
|
|
+ try {
|
|
|
+ final String[] webArr = ZXOptions.get("ws.key").split(";");//websocket key
|
|
|
+ for (int j = 0; j < webArr.length; j++) {
|
|
|
+ new WebSocketController().sendSysMsg(webArr[j],JSON.toJSONString(subRedisList));
|
|
|
}
|
|
|
+// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("插入redis错误" + e);
|
|
|
}
|
|
|
+// }
|
|
|
|
|
|
}
|
|
|
});
|
|
|
thread.start();
|
|
|
}
|
|
|
if (insertLength > 0) {
|
|
|
+ if((!"now".equals(type))){
|
|
|
+ choiceStockMapper.insertBatch(list.subList(i, i + insertLength));
|
|
|
+ }else {
|
|
|
+ choiceStockMapper.insertBatchByAfter(list.subList(i, i + insertLength));
|
|
|
+ }
|
|
|
+ List<StockRestVO> subList = stockRestVOList.subList(i, i + insertLength);
|
|
|
+ List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertLength);
|
|
|
+ Thread thread=new Thread(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
|
|
|
+// if(BuyAndSellUtils.isTransState()){
|
|
|
+ try {
|
|
|
+ final String[] webArr = ZXOptions.get("ws.key").split(";");//websocket key
|
|
|
+ for (int j = 0; j < webArr.length; j++) {
|
|
|
+ new WebSocketController().sendSysMsg(webArr[j],JSON.toJSONString(subRedisList));
|
|
|
+ }
|
|
|
+// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("插入redis错误" + e);
|
|
|
+ }
|
|
|
+// }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ thread.start();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void analysisStockRestDataInFront(String type) {
|
|
|
+ // 1.获取文件夹文件 按照时间顺序拿到一个
|
|
|
+ List<File> files = FileStockUtil.getFile(sourceFileUrlInFront);
|
|
|
+ if(null == files || 0 == files.size()){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<StockRestPojo> stockRestPojoList = new ArrayList<>();
|
|
|
+ List<StockRestVO> stockRestVOList = new ArrayList<>();
|
|
|
+ List<StockRestRedisVO> stockRestRedisVOList = new ArrayList<>();
|
|
|
+ StockRestPojo stockRestPojo;
|
|
|
+ StockRestVO stockRestVO;
|
|
|
+ StockRestRedisVO stockRestRedisVO;
|
|
|
+ for (File file : files){
|
|
|
+ // 2.移动文件去另外一个文件夹
|
|
|
+ String str = "";
|
|
|
if("now".equals(type)){
|
|
|
+ FileStockUtil.moveFile(sourceFileUrl + File.separator + file.getName(), goalFileUrl);
|
|
|
+ // 3.读取文件内容
|
|
|
+ str = FileStockUtil.readFileContent(goalFileUrl + File.separator + file.getName());
|
|
|
+ }else if("after".equals(type)){
|
|
|
+ FileStockUtil.moveFile(sourceAfterFileUrl + File.separator + file.getName(), goalAfterFileUrl);
|
|
|
+ // 3.读取文件内容
|
|
|
+ str = FileStockUtil.readFileContent(goalAfterFileUrl + File.separator + file.getName());
|
|
|
+ }else if("inFront".equals(type)){
|
|
|
+ FileStockUtil.moveFile(sourceFileUrlInFront + File.separator + file.getName(), goalFileUrlInFront);
|
|
|
+ // 3.读取文件内容
|
|
|
+ str = FileStockUtil.readFileContent(goalFileUrlInFront + File.separator + file.getName());
|
|
|
+ }
|
|
|
+ // 4.并解析
|
|
|
+ if(StringUtils.isEmpty(str)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Map<String, List<String>> map = new HashMap<String, List<String>>();
|
|
|
+ map = JSON.parseObject(str, HashMap.class);
|
|
|
+ str = null;
|
|
|
+ for (Map.Entry<String, List<String>> entry : map.entrySet()) {
|
|
|
+ try {
|
|
|
+ stockRestPojo = new StockRestPojo();
|
|
|
+ stockRestPojo.setDate(String.valueOf(entry.getValue().get(0)));
|
|
|
+ if(String.valueOf(entry.getValue().get(1)).equals("0")){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ stockRestPojo.setTime((!"now".equals(type))?String.valueOf(entry.getValue().get(1)):"150000");
|
|
|
+ stockRestPojo.setNow(String.valueOf(entry.getValue().get(2)));
|
|
|
+ stockRestPojo.setHigh(String.valueOf(entry.getValue().get(3)));
|
|
|
+ stockRestPojo.setLow(String.valueOf(entry.getValue().get(4)));
|
|
|
+ stockRestPojo.setOpen(String.valueOf(entry.getValue().get(5)));
|
|
|
+ stockRestPojo.setPreclose(String.valueOf(entry.getValue().get(6)));
|
|
|
+ stockRestPojo.setRoundlot(String.valueOf(entry.getValue().get(7)));
|
|
|
+ stockRestPojo.setChange(String.valueOf(entry.getValue().get(8)));
|
|
|
+ stockRestPojo.setPctchange(String.valueOf(entry.getValue().get(9)));
|
|
|
+ stockRestPojo.setVolume(String.valueOf(entry.getValue().get(10)));
|
|
|
+ stockRestPojo.setAmount(String.valueOf(entry.getValue().get(11)));
|
|
|
+ stockRestPojo.setVolumeratio(String.valueOf(entry.getValue().get(12)));
|
|
|
+ stockRestPojo.setCommissionratio(String.valueOf(entry.getValue().get(13)));
|
|
|
+ stockRestPojo.setCommissiondiff(String.valueOf(entry.getValue().get(14)));
|
|
|
+ stockRestPojo.setTradestatus(String.valueOf(entry.getValue().get(15)));
|
|
|
+ stockRestPojo.setOutvolume(String.valueOf(entry.getValue().get(16)));
|
|
|
+ stockRestPojo.setInvolume(String.valueOf(entry.getValue().get(17)));
|
|
|
+ stockRestPojo.setHighlimit(String.valueOf(entry.getValue().get(18)));
|
|
|
+ stockRestPojo.setLowlimit(String.valueOf(entry.getValue().get(19)));
|
|
|
+ stockRestPojo.setSpeed(String.valueOf(entry.getValue().get(20)));
|
|
|
+ stockRestPojo.setAverageprice(String.valueOf(entry.getValue().get(21)));
|
|
|
+ stockRestPojo.setBuyprice1(String.valueOf(entry.getValue().get(22)));
|
|
|
+ stockRestPojo.setBuyprice2(String.valueOf(entry.getValue().get(23)));
|
|
|
+ stockRestPojo.setBuyprice3(String.valueOf(entry.getValue().get(24)));
|
|
|
+ stockRestPojo.setBuyprice4(String.valueOf(entry.getValue().get(25)));
|
|
|
+ stockRestPojo.setBuyprice5(String.valueOf(entry.getValue().get(26)));
|
|
|
+ stockRestPojo.setBuyvolume1(String.valueOf(entry.getValue().get(27)));
|
|
|
+ stockRestPojo.setBuyvolume2(String.valueOf(entry.getValue().get(28)));
|
|
|
+ stockRestPojo.setBuyvolume3(String.valueOf(entry.getValue().get(29)));
|
|
|
+ stockRestPojo.setBuyvolume4(String.valueOf(entry.getValue().get(30)));
|
|
|
+ stockRestPojo.setBuyvolume5(String.valueOf(entry.getValue().get(31)));
|
|
|
+ stockRestPojo.setSellprice1(String.valueOf(entry.getValue().get(32)));
|
|
|
+ stockRestPojo.setSellprice2(String.valueOf(entry.getValue().get(33)));
|
|
|
+ stockRestPojo.setSellprice3(String.valueOf(entry.getValue().get(34)));
|
|
|
+ stockRestPojo.setSellprice4(String.valueOf(entry.getValue().get(35)));
|
|
|
+ stockRestPojo.setSellprice5(String.valueOf(entry.getValue().get(36)));
|
|
|
+ stockRestPojo.setSellvolume1(String.valueOf(entry.getValue().get(37)));
|
|
|
+ stockRestPojo.setSellvolume2(String.valueOf(entry.getValue().get(38)));
|
|
|
+ stockRestPojo.setSellvolume3(String.valueOf(entry.getValue().get(39)));
|
|
|
+ stockRestPojo.setSellvolume4(String.valueOf(entry.getValue().get(40)));
|
|
|
+ stockRestPojo.setSellvolume5(String.valueOf(entry.getValue().get(41)));
|
|
|
+ stockRestPojo.setClosedtime(String.valueOf(entry.getValue().get(42)));
|
|
|
+ stockRestPojo.setClosedvolume(String.valueOf(entry.getValue().get(43)));
|
|
|
+ stockRestPojo.setClosedamount(String.valueOf(entry.getValue().get(44)));
|
|
|
+ StringBuffer dateStr = new StringBuffer(stockRestPojo.getDate());
|
|
|
+ if (StringUtils.isEmpty(stockRestPojo.getTime())) {
|
|
|
+ dateStr = dateStr.append(000000);
|
|
|
+ } else {
|
|
|
+ if (5 == stockRestPojo.getTime().length()) {
|
|
|
+ // 长度为5表示 小时前面需要补0
|
|
|
+ dateStr = dateStr.append(0).append(stockRestPojo.getTime());
|
|
|
+ } else {
|
|
|
+ dateStr = dateStr.append(stockRestPojo.getTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Date date = TimeUtil.strToDate(dateStr.toString());
|
|
|
+ // 毫秒转成秒
|
|
|
+ stockRestPojo.setRealTime(date.getTime() / 1000);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ int min = calendar.get(Calendar.MINUTE); // 获取分钟
|
|
|
+ int sec = calendar.get(Calendar.SECOND); // 获取秒数
|
|
|
+
|
|
|
+ // 1分钟数据
|
|
|
+ if (sec != 0) {
|
|
|
+ stockRestPojo.setDateOne(stockRestPojo.getRealTime() + 60 - sec);
|
|
|
+ } else {
|
|
|
+ stockRestPojo.setDateOne(stockRestPojo.getRealTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5分钟数据
|
|
|
+ if (sec != 0 || min % 5 != 0) {
|
|
|
+ stockRestPojo.setDateFive(stockRestPojo.getRealTime() + (5 * 60) - sec - (min % 5 * 60));
|
|
|
+ } else {
|
|
|
+ stockRestPojo.setDateFive(stockRestPojo.getRealTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 15分钟数据
|
|
|
+ if (sec != 0 || min % 15 != 0) {
|
|
|
+ stockRestPojo.setDateFifteen(stockRestPojo.getRealTime() + (15 * 60) - sec - (min % 15 * 60));
|
|
|
+ } else {
|
|
|
+ stockRestPojo.setDateFifteen(stockRestPojo.getRealTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 30分钟数据
|
|
|
+ if (sec != 0 || min % 30 != 0) {
|
|
|
+ stockRestPojo.setDateThirty(stockRestPojo.getRealTime() + (30 * 60) - sec - (min % 30 * 60));
|
|
|
+ } else {
|
|
|
+ stockRestPojo.setDateThirty(stockRestPojo.getRealTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 60分钟数据
|
|
|
+ if (sec != 0 || min % 60 != 0) {
|
|
|
+ stockRestPojo.setDateSixty(stockRestPojo.getRealTime() + (60 * 60) - sec - (min % 60 * 60));
|
|
|
+ } else {
|
|
|
+ stockRestPojo.setDateSixty(stockRestPojo.getRealTime());
|
|
|
+ }
|
|
|
+ StringBuffer tableName = new StringBuffer("data_rt_");
|
|
|
+ tableName.append(entry.getKey().replace(".", "_").toLowerCase());
|
|
|
+ stockRestPojo.setCode(entry.getKey().toUpperCase());
|
|
|
+ stockRestPojo.setTableName(tableName.toString());
|
|
|
+ stockRestPojoList.add(stockRestPojo);
|
|
|
+ stockRestVO = new StockRestVO();
|
|
|
+ BeanUtils.copyProperties(stockRestPojo, stockRestVO);
|
|
|
+ stockRestVOList.add(stockRestVO);
|
|
|
+ stockRestRedisVO = new StockRestRedisVO();
|
|
|
+ stockRestRedisVO.setCode(entry.getKey().toUpperCase());
|
|
|
+ stockRestRedisVO.setNowPrice(stockRestPojo.getNow());
|
|
|
+ stockRestRedisVO.setChange(stockRestPojo.getChange());
|
|
|
+ stockRestRedisVO.setHcrate(stockRestPojo.getPctchange());
|
|
|
+
|
|
|
+ stockRestRedisVO.setHighlimit(stockRestPojo.getHighlimit());
|
|
|
+ stockRestRedisVO.setLowlimit(stockRestPojo.getLowlimit());
|
|
|
+ stockRestRedisVOList.add(stockRestRedisVO);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("错误数据导致失败" + e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map = null;
|
|
|
+ }
|
|
|
+ // 5.入库
|
|
|
+ insertListInFront(stockRestPojoList, stockRestVOList, stockRestRedisVOList,type);
|
|
|
+ stockRestPojoList = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void insertListInFront(List<StockRestPojo> list, List<StockRestVO> stockRestVOList, List<StockRestRedisVO> stockRestRedisVOList,String type) {
|
|
|
+ int insertLength = list.size();
|
|
|
+ int i = 0;
|
|
|
+ int insertSize = 500;
|
|
|
+ while (insertLength > insertSize) {
|
|
|
+ if((!"now".equals(type))){
|
|
|
+ choiceStockMapper.insertBatch(list.subList(i, i + insertSize));
|
|
|
+ }else {
|
|
|
+ choiceStockMapper.insertBatchByAfter(list.subList(i, i + insertSize));
|
|
|
+ }
|
|
|
+ List<StockRestVO> subList = stockRestVOList.subList(i, i + insertSize);
|
|
|
+ List<StockRestRedisVO> subRedisList = stockRestRedisVOList.subList(i, i + insertSize);
|
|
|
+ i = i + insertSize;
|
|
|
+ insertLength = insertLength - insertSize;
|
|
|
+ Thread thread=new Thread(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
|
|
|
+// if(BuyAndSellUtils.isTransState()){
|
|
|
+ try {
|
|
|
+ final String[] webArr = ZXOptions.get("ws.key").split(";");//websocket key
|
|
|
+ for (int j = 0; j < webArr.length; j++) {
|
|
|
+ new WebSocketController().sendSysMsg(webArr[j],JSON.toJSONString(subRedisList));
|
|
|
+ }
|
|
|
+// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("插入redis错误" + e);
|
|
|
+ }
|
|
|
+// }
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ thread.start();
|
|
|
+ }
|
|
|
+ if (insertLength > 0) {
|
|
|
+ if((!"now".equals(type))){
|
|
|
choiceStockMapper.insertBatch(list.subList(i, i + insertLength));
|
|
|
}else {
|
|
|
choiceStockMapper.insertBatchByAfter(list.subList(i, i + insertLength));
|
|
@@ -246,13 +493,17 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
// HttpRequest.httpPostWithjson(url, JSON.toJSONString(subList));
|
|
|
- if(BuyAndSellUtils.isTransState()){
|
|
|
- try {
|
|
|
- HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
|
|
|
- }catch (Exception e){
|
|
|
- log.error("插入redis错误" + e);
|
|
|
+// if(BuyAndSellUtils.isTransState()){
|
|
|
+ try {
|
|
|
+ final String[] webArr = ZXOptions.get("ws.key").split(";");//websocket key
|
|
|
+ for (int j = 0; j < webArr.length; j++) {
|
|
|
+ new WebSocketController().sendSysMsg(webArr[j],JSON.toJSONString(subRedisList));
|
|
|
}
|
|
|
+// HttpRequest.httpPostWithjson(urlRedis, JSON.toJSONString(subRedisList));
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("插入redis错误" + e);
|
|
|
}
|
|
|
+// }
|
|
|
}
|
|
|
});
|
|
|
thread.start();
|
|
@@ -260,4 +511,6 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
}
|