package com.xcong.excoin.quartz.job; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.huobi.client.model.Candlestick; import com.xcong.excoin.modules.coin.dao.OrderCoinDealDao; import com.xcong.excoin.modules.coin.entity.OrderCoinsDealEntity; import com.xcong.excoin.modules.coin.service.OrderCoinService; import com.xcong.excoin.processor.CoinProcessorFactory; import com.xcong.excoin.trade.TradePlateModel; import com.xcong.excoin.utils.RedisUtils; import com.xcong.excoin.websocket.CandlestickModel; import com.xcong.excoin.websocket.NewCandlestick; import com.xcong.excoin.websocket.TradePlateSendWebSocket; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Random; /** * 生成各时间段的K线信息 * */ @Component @Slf4j public class KLineGeneratorJob { @Resource private CoinProcessorFactory processorFactory; @Resource private OrderCoinService orderCoinService; @Scheduled(cron = "0/1 * * * * *") public void test(){ // for(int i=1;i<=2;i++){ // OrderCoinsDealEntity detail = new OrderCoinsDealEntity(); // detail.setMemberId(13L); // //detail.setOrderId(111); // detail.setOrderNo("tete"); // detail.setOrderType(1); // detail.setTradeType(1); // detail.setSymbol("NEKK"); // detail.setSymbolCnt(new BigDecimal(10)); // detail.setEntrustPrice(new BigDecimal(10)); // detail.setDealPrice(new BigDecimal(i*10*Math.random())); // detail.setDealAmount(new BigDecimal(50)); // detail.setFeeAmount(new BigDecimal(1)); // detail.setOrderStatus(OrderCoinsDealEntity.ORDERSTATUS_DONE); // orderCoinDealDao.insert(detail); // } Random random = new Random(); Integer type = OrderCoinsDealEntity.ORDERTYPE_BUY; Integer tradeType = OrderCoinsDealEntity.TRADETYPE_FIXEDPRICE; int i = random.nextInt(100); if(i==0){ i=10; } BigDecimal price = new BigDecimal(i); orderCoinService.initOrders("NEKK",type,tradeType,price,new BigDecimal(2),null); orderCoinService.initOrders("NEKK",OrderCoinsDealEntity.ORDERTYPE_SELL,tradeType,price,new BigDecimal(2),null); } /** * 每分钟定时器,处理分钟K线 */ @Scheduled(cron = "0 * * * * *") public void handle5minKLine(){ Calendar calendar = Calendar.getInstance(); //log.debug("分钟K线:{}",calendar.getTime()); //将秒、微秒字段置为0 calendar.set(Calendar.SECOND,0); calendar.set(Calendar.MILLISECOND,0); long time = calendar.getTimeInMillis(); int minute = calendar.get(Calendar.MINUTE); int hour = calendar.get(Calendar.HOUR_OF_DAY); processorFactory.getProcessorMap().forEach((symbol,processor)->{ if(!processor.isStopKline()) { //log.debug("生成{}分钟k线:{}",symbol); //生成1分钟K线 processor.autoGenerate(); processor.generateKLine(1, Calendar.MINUTE, time); //更新24H成交量 processor.update24HVolume(time); if(minute%5 == 0) { // 五分钟的当前K线 processor.generateKLine(5, Calendar.MINUTE, time); } if(minute%10 == 0){ processor.generateKLine(10, Calendar.MINUTE,time); } if(minute%15 == 0){ processor.generateKLine(15, Calendar.MINUTE,time); } if(minute%30 == 0){ processor.generateKLine(30, Calendar.MINUTE,time); } if(hour == 0 && minute == 0){ processor.resetThumb(); } } }); } /** * 每小时运行 */ @Scheduled(cron = "0 0 * * * *") public void handleHourKLine(){ processorFactory.getProcessorMap().forEach((symbol,processor)-> { if(!processor.isStopKline()) { Calendar calendar = Calendar.getInstance(); log.info("小时K线:{}",calendar.getTime()); //将秒、微秒字段置为0 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); long time = calendar.getTimeInMillis(); processor.generateKLine(1, Calendar.HOUR_OF_DAY, time); } }); } /** * 每日0点处理器,处理日K线 */ @Scheduled(cron = "0 0 0 * * *") public void handleDayKLine(){ processorFactory.getProcessorMap().forEach((symbol,processor)->{ if(!processor.isStopKline()) { Calendar calendar = Calendar.getInstance(); log.info("日K线:{}",calendar.getTime()); //将秒、微秒字段置为0 calendar.set(Calendar.HOUR_OF_DAY,0); calendar.set(Calendar.MINUTE,0); calendar.set(Calendar.SECOND,0); calendar.set(Calendar.MILLISECOND,0); long time = calendar.getTimeInMillis(); int week = calendar.get(Calendar.DAY_OF_WEEK); int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); if(week == 1){ processor.generateKLine(1, Calendar.DAY_OF_WEEK, time); } if(dayOfMonth == 1){ processor.generateKLine(1, Calendar.DAY_OF_MONTH, time); } processor.generateKLine(1, Calendar.DAY_OF_YEAR,time); } }); } }