123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- package com.zx.dataservice.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.zx.dataservice.controller.WebSocketController;
- import com.zx.dataservice.mapper2.ChoiceBondMapper;
- import com.zx.dataservice.pojo.StockRestPojo;
- import com.zx.dataservice.service.ChoiceBondService;
- import com.zx.dataservice.utils.*;
- import com.zx.dataservice.vo.StockRestRedisVO;
- import com.zx.dataservice.vo.StockRestVO;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.io.File;
- import java.util.*;
- @Service
- public class ChoiceBondServiceImpl implements ChoiceBondService {
- private static final Logger log = LoggerFactory.getLogger(ChoiceBondServiceImpl.class);
- private static final String sourceFileUrl = "/www/wwwroot/csqdata/bond";// 盘中
- private static final String goalFileUrl = "/www/wwwroot/csqdata/bond/backup"; // 盘中 备份
- private static final String url = "http://qwer16888.vip/api/stock/updateBatchStockInfo.do"; //
- private static final String urlRedis = "http://qwer16888.vip/init/redis/updateInfo.do";
- private static final String sourceAfterFileUrl = "/www/wwwroot/csqdata/bond/after"; // 盘后
- private static final String goalAfterFileUrl = "/www/wwwroot/csqdata/bond/after/backup"; // 盘后备份
- @Autowired
- private ChoiceBondMapper choiceBondMapper;
- @Override
- public void analysisBondRestData(String type) {
- // 1.获取文件夹文件 按照时间顺序拿到一个
- List<File> files = FileBondUtil.getFile("now".equals(type)?sourceFileUrl:sourceAfterFileUrl);
- 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)){
- FileBondUtil.moveFile(sourceFileUrl + File.separator + file.getName(), goalFileUrl);
- // 3.读取文件内容
- str = FileBondUtil.readFileContent(goalFileUrl + File.separator + file.getName());
- }else if("after".equals(type)){
- FileBondUtil.moveFile(sourceAfterFileUrl + File.separator + file.getName(), goalAfterFileUrl);
- // 3.读取文件内容
- str = FileBondUtil.readFileContent(goalAfterFileUrl + 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("");
- stockRestPojo.setCommissionratio("");
- stockRestPojo.setCommissiondiff("");
- stockRestPojo.setTradestatus("");
- stockRestPojo.setOutvolume("");
- stockRestPojo.setInvolume("");
- stockRestPojo.setHighlimit("");
- stockRestPojo.setLowlimit("");
- stockRestPojo.setSpeed("");
- stockRestPojo.setAverageprice("");
- stockRestPojo.setBuyprice1(String.valueOf(entry.getValue().get(12)));
- stockRestPojo.setBuyprice2(String.valueOf(entry.getValue().get(13)));
- stockRestPojo.setBuyprice3(String.valueOf(entry.getValue().get(14)));
- stockRestPojo.setBuyprice4(String.valueOf(entry.getValue().get(15)));
- stockRestPojo.setBuyprice5(String.valueOf(entry.getValue().get(16)));
- stockRestPojo.setBuyvolume1(String.valueOf(entry.getValue().get(17)));
- stockRestPojo.setBuyvolume2(String.valueOf(entry.getValue().get(18)));
- stockRestPojo.setBuyvolume3(String.valueOf(entry.getValue().get(19)));
- stockRestPojo.setBuyvolume4(String.valueOf(entry.getValue().get(20)));
- stockRestPojo.setBuyvolume5(String.valueOf(entry.getValue().get(21)));
- stockRestPojo.setSellprice1(String.valueOf(entry.getValue().get(22)));
- stockRestPojo.setSellprice2(String.valueOf(entry.getValue().get(23)));
- stockRestPojo.setSellprice3(String.valueOf(entry.getValue().get(24)));
- stockRestPojo.setSellprice4(String.valueOf(entry.getValue().get(25)));
- stockRestPojo.setSellprice5(String.valueOf(entry.getValue().get(26)));
- stockRestPojo.setSellvolume1(String.valueOf(entry.getValue().get(27)));
- stockRestPojo.setSellvolume2(String.valueOf(entry.getValue().get(28)));
- stockRestPojo.setSellvolume3(String.valueOf(entry.getValue().get(29)));
- stockRestPojo.setSellvolume4(String.valueOf(entry.getValue().get(30)));
- stockRestPojo.setSellvolume5(String.valueOf(entry.getValue().get(31)));
- stockRestPojo.setClosedtime("");
- stockRestPojo.setClosedvolume("");
- stockRestPojo.setClosedamount("");
- 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.入库
- insertList(stockRestPojoList, stockRestVOList, stockRestRedisVOList ,type );
- 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)){
- choiceBondMapper.insertBatch(list.subList(i, i + insertSize));
- }else {
- choiceBondMapper.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)){
- choiceBondMapper.insertBatch(list.subList(i, i + insertLength));
- }else {
- choiceBondMapper.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();
- }
- }
- }
|