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);
|
}
|
});
|
}
|
|
}
|