123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- package com.zx.dataservice.service.impl;
- import com.zx.dataservice.mapper2.StockMapper;
- import com.zx.dataservice.mapper3.CreatorMapper;
- import com.zx.dataservice.pojo.HistoryPojo;
- import com.zx.dataservice.pojo.StockHistPojo;
- import com.zx.dataservice.pojo.StockPojo;
- import com.zx.dataservice.pojo.StockRestPojo;
- import com.zx.dataservice.service.CreatorService;
- import com.zx.dataservice.utils.TimeUtil;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- @Service
- public class CreatorServiceImpl implements CreatorService {
- @Autowired
- private CreatorMapper creatorMapper;
- @Autowired
- private StockMapper stockMapper;
- private static String initNow = null;
- @Override
- public void creatorUvxy() {
- // 1.先去临时表查找第一条数据
- String tableName = "data_hist_869735_sh_temp";
- String code = "869735.SH";
- String gid = "sh869735";
- Integer stockCount = stockMapper.selectStockByStockCode(code);
- if(0 == stockCount || null == stockCount){
- StockPojo stockPojo = new StockPojo();
- stockPojo.setStockName("华融发债");
- stockPojo.setStockCode(code);
- stockPojo.setStockSpell("hrfz");
- stockPojo.setStockType("sh");
- stockPojo.setStockGid(gid);
- stockPojo.setStockPlate("普通");
- stockPojo.setIsLock(0);
- stockPojo.setIsShow(0);
- stockPojo.setBuyLimit(1);
- stockPojo.setStockOrBond(1);
- stockMapper.insertStock(stockPojo);
- }
- HistoryPojo historyPojo = creatorMapper.selectHistory(tableName);
- // 2.第一次的数据不用实际数据 设置初始值为100
- toCreatorUvxy(historyPojo);
- }
- @Override
- public void creatorUvxyHist() {
- // 1.首先删除掉temp表中的第一条
- String histTempTableName = "data_hist_869735_sh_temp";
- HistoryPojo historyPojo = creatorMapper.selectHistory(histTempTableName);
- creatorMapper.deleteHistoryTemp(histTempTableName);
- // 2.用实时表中的数据构造一条历史记录
- String restTableName = "data_rt_869735_sh";
- StockRestPojo stockRestPojo = creatorMapper.selectRtAll(restTableName);
- StockHistPojo stockHistPojo = new StockHistPojo();
- stockHistPojo.setOpen(stockRestPojo.getOpen());
- stockHistPojo.setClose(stockRestPojo.getOpen());
- stockHistPojo.setHigh(stockRestPojo.getHigh());
- stockHistPojo.setLow(stockRestPojo.getLow());
- stockHistPojo.setAverage("0");
- stockHistPojo.setVolume(stockRestPojo.getVolume());
- stockHistPojo.setHighlimit("0");
- stockHistPojo.setAmount("0");
- stockHistPojo.setTnum("0");
- stockHistPojo.setTradestatus("0");
- stockHistPojo.setLowlimit("0");
- stockHistPojo.setAmplitude("0");
- stockHistPojo.setTnum("0");
- stockHistPojo.setTafactor("0");
- stockHistPojo.setFronttafactor("0");
- stockHistPojo.setIsststock("0");
- stockHistPojo.setIsxststock("0");
- stockHistPojo.setPreclose(stockRestPojo.getClose());
- stockHistPojo.setChange(String.valueOf(new BigDecimal(stockRestPojo.getClose()).subtract(new BigDecimal(stockRestPojo.getPreclose())).setScale(2, BigDecimal.ROUND_HALF_UP)));
- stockHistPojo.setPctchange(String.valueOf(historyPojo.getPctChange()));
- try {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
- Date date = new Date(stockRestPojo.getDate());
- String dateStr = formatter.format(date);
- date = formatter.parse(dateStr);
- String yearDatTime = String.valueOf(date.getTime());
- formatter = new SimpleDateFormat("yyyyMM");
- date = new Date(stockRestPojo.getDate());
- dateStr = formatter.format(date);
- date = formatter.parse(dateStr);
- String monthDatTime = String.valueOf(date.getTime());
- Calendar cld = Calendar.getInstance();
- cld.setTime(new Date(stockRestPojo.getDate()));
- int firstDay = cld.get(Calendar.DAY_OF_WEEK);
- cld.add(Calendar.DATE, -firstDay);
- String weekDatTime = String.valueOf(cld.getTime().getTime());
- formatter = new SimpleDateFormat("yyyyMMdd");
- date = new Date(stockRestPojo.getDate());
- dateStr = formatter.format(date);
- date = formatter.parse(dateStr);
- String dayDatTime = String.valueOf(date.getTime());
- stockHistPojo.setDateYear(yearDatTime);
- stockHistPojo.setDateMonth(monthDatTime);
- stockHistPojo.setDateWeek(weekDatTime);
- stockHistPojo.setDateDay(dayDatTime);
- stockHistPojo.setRealTime(dayDatTime);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- String histTableName = "data_hist_869735_sh";
- creatorMapper.insertHistory(stockHistPojo, histTableName);
- }
- private void toCreatorUvxy(HistoryPojo historyPojo){
- String code = "869735.SH";
- String tableName = "data_rt_869735_sh";
- Date d = new Date();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- SimpleDateFormat sdf1 = new SimpleDateFormat("HHmmss");
- String dateNowStr = sdf.format(d);
- String dateNowStr1 = sdf1.format(d);
- StockRestPojo entry;
- String now ;
- StockRestPojo stockRestPojo = new StockRestPojo();
- stockRestPojo.setDate(dateNowStr);
- stockRestPojo.setTime(dateNowStr1);
- entry = creatorMapper.selectRtLimitOne(tableName);
- if(null == entry){
- initNow = "100";
- now = "100";
- entry = new StockRestPojo();
- entry.setCode(code);
- entry.setNow(now);
- entry.setHigh(now);
- entry.setLow(now);
- entry.setOpen(now);
- entry.setPreclose(now);
- entry.setRoundlot("0");
- entry.setChange("0");
- entry.setPctchange("0");
- entry.setVolume("0");
- entry.setAmount("0");
- entry.setBuyprice1(now);
- entry.setBuyprice2(now);
- entry.setBuyprice3(now);
- entry.setBuyprice4(now);
- entry.setBuyprice5(now);
- entry.setBuyvolume1("0");
- entry.setBuyvolume2("0");
- entry.setBuyvolume3("0");
- entry.setBuyvolume4("0");
- entry.setBuyvolume5("0");
- entry.setSellprice1(now);
- entry.setSellprice2(now);
- entry.setSellprice3(now);
- entry.setSellprice4(now);
- entry.setSellprice5(now);
- entry.setSellvolume1("0");
- entry.setSellvolume2("0");
- entry.setSellvolume3("0");
- entry.setSellvolume4("0");
- entry.setSellvolume5("0");
- stockRestPojo.setNow(now);
- }else{
- now = entry.getNow();
- if(null == initNow){
- initNow = entry.getPreclose();
- }
- // 如果当前时间等于15点整, 则入库价格就是今天的昨收
- String timeStr = "14:59";
- Date time = new Date();
- SimpleDateFormat f = new SimpleDateFormat("HH:mm");
- if(f.format(time).equals(timeStr)){
- stockRestPojo.setNow(String.valueOf(Double.valueOf(initNow) + historyPojo.getPctChange()));
- }else{
- stockRestPojo.setNow(String.valueOf(random(historyPojo, initNow, now)));
- }
- //设置最高
- if(Double.valueOf(stockRestPojo.getNow()) > Double.valueOf(entry.getHigh())){
- stockRestPojo.setHigh(stockRestPojo.getNow());
- }else{
- stockRestPojo.setHigh(entry.getHigh());
- }
- //设置最低
- if(Double.valueOf(stockRestPojo.getNow()) < Double.valueOf(entry.getLow())){
- stockRestPojo.setLow(stockRestPojo.getNow());
- }else{
- stockRestPojo.setLow(entry.getLow());
- }
- stockRestPojo.setOpen(entry.getOpen());
- /*System.out.println("最高:"+stockRestPojo.getHigh());
- System.out.println("最低:"+stockRestPojo.getLow());*/
- }
- stockRestPojo.setHigh(stockRestPojo.getHigh());
- stockRestPojo.setLow(stockRestPojo.getLow());
- stockRestPojo.setOpen(stockRestPojo.getOpen());
- stockRestPojo.setPreclose(initNow);
- stockRestPojo.setRoundlot(String.valueOf(new BigDecimal(entry.getRoundlot()).add(random(historyPojo, initNow, now))));
- stockRestPojo.setChange(String.valueOf(new BigDecimal(stockRestPojo.getNow()).subtract(new BigDecimal(initNow))));
- stockRestPojo.setPctchange(String.valueOf((new BigDecimal(stockRestPojo.getNow()).subtract(new BigDecimal(initNow))).divide(new BigDecimal(initNow),2 ,4)));
- stockRestPojo.setVolume(String.valueOf(new BigDecimal(entry.getVolume()).add(new BigDecimal(randomInt()))));
- stockRestPojo.setAmount(String.valueOf(new BigDecimal(entry.getNow()).multiply(new BigDecimal(stockRestPojo.getVolume()))));
- stockRestPojo.setVolumeratio("");
- stockRestPojo.setCommissionratio("");
- stockRestPojo.setCommissiondiff("");
- stockRestPojo.setTradestatus("");
- stockRestPojo.setOutvolume("");
- stockRestPojo.setInvolume("");
- stockRestPojo.setHighlimit("");
- stockRestPojo.setLowlimit("");
- stockRestPojo.setSpeed("");
- stockRestPojo.setAverageprice("");
- stockRestPojo.setBuyprice1(randomBuySell(stockRestPojo.getNow(),0));
- stockRestPojo.setBuyprice2(randomBuySell(stockRestPojo.getBuyprice1(),0));
- stockRestPojo.setBuyprice3(randomBuySell(stockRestPojo.getBuyprice2(),0));
- stockRestPojo.setBuyprice4(randomBuySell(stockRestPojo.getBuyprice3(),0));
- stockRestPojo.setBuyprice5(randomBuySell(stockRestPojo.getBuyprice4(),0));
- stockRestPojo.setBuyvolume1(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setBuyvolume2(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setBuyvolume3(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setBuyvolume4(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setBuyvolume5(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setSellprice1(randomBuySell(stockRestPojo.getNow(),1));
- stockRestPojo.setSellprice2(randomBuySell(stockRestPojo.getSellprice1(),0));
- stockRestPojo.setSellprice3(randomBuySell(stockRestPojo.getSellprice2(),0));
- stockRestPojo.setSellprice4(randomBuySell(stockRestPojo.getSellprice3(),0));
- stockRestPojo.setSellprice5(randomBuySell(stockRestPojo.getSellprice4(),0));
- stockRestPojo.setSellvolume1(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setSellvolume2(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setSellvolume3(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setSellvolume4(String.valueOf(new BigDecimal(randomInt())));
- stockRestPojo.setSellvolume5(String.valueOf(new BigDecimal(randomInt())));
- 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());
- }
- stockRestPojo.setCode(code);
- creatorMapper.insertRt(stockRestPojo, tableName);
- }
- private BigDecimal random(HistoryPojo historyPojo, String initNow, String now){
- // 昨收 + 涨跌幅
- double max;
- double min;
- if(historyPojo.getPctChange() > 0) {
- max = Double.valueOf(initNow) + historyPojo.getPctChange();
- min = Double.valueOf(initNow) - 2;
- }else{
- max = Double.valueOf(initNow) + 2;
- min = Double.valueOf(initNow) - Math.abs(historyPojo.getPctChange());
- }
- double randomMin = Double.valueOf(now) - 2;
- double randomMax = Double.valueOf(now) + 2;
- if(randomMin < min){
- randomMin = min;
- }
- if(randomMax > max){
- randomMax = max;
- }
- return new BigDecimal(Math.random() * (randomMax - randomMin) + randomMin).setScale(2, BigDecimal.ROUND_HALF_UP);
- }
- private String randomBuySell(String now, int type){
- // 买
- if(0 == type){
- return new BigDecimal(now).subtract(new BigDecimal(0.01)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
- }else{
- return new BigDecimal(now).add(new BigDecimal(0.01)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
- }
- }
- private int randomInt(){
- int max = 10000;
- int min = 5000;
- int ran = (int) (Math.random() * (max - min) + min);
- return ran;
- }
- }
|