|
@@ -0,0 +1,135 @@
|
|
|
|
|
+package com.liangjiang.hot_collection.aop;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.liangjiang.hot_collection.dingding.DingTalkPushUtil;
|
|
|
|
|
+import com.liangjiang.hot_collection.domain.aop.HotObj;
|
|
|
|
|
+import com.liangjiang.hot_collection.domain.entity.HotSymbol;
|
|
|
|
|
+import com.liangjiang.hot_collection.exchanges.BinanceTool;
|
|
|
|
|
+import com.liangjiang.hot_collection.exchanges.GateTool;
|
|
|
|
|
+import com.liangjiang.hot_collection.service.IHotSymbolService;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.aspectj.lang.annotation.Aspect;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
+
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 定时 拉交易所的 价格变化
|
|
|
|
|
+ */
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+@Aspect
|
|
|
|
|
+@Component
|
|
|
|
|
+public class TaskHot {
|
|
|
|
|
+ public static List<HotObj> hotListBinance = new ArrayList<>();
|
|
|
|
|
+ public static List<HotObj> hotListGate = new ArrayList<>();
|
|
|
|
|
+ public static Map<String, HotObj> mapHotObj = new HashMap<>();
|
|
|
|
|
+ public static Map<String, HotObj> dynamic = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private BinanceTool binanceTool;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private GateTool gateTool;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DingTalkPushUtil dingTalkPushUtil;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IHotSymbolService iHotSymbolService;
|
|
|
|
|
+
|
|
|
|
|
+ @Scheduled(fixedRate = 5 * 1000)
|
|
|
|
|
+ public void performTask() {
|
|
|
|
|
+ log.info("performTask");
|
|
|
|
|
+ //获取交易所信息。
|
|
|
|
|
+ List<HotObj> hot_binance = binanceTool.getHot();
|
|
|
|
|
+ List<HotObj> hot_gate = gateTool.getHot();
|
|
|
|
|
+ hotListBinance = hot_binance;
|
|
|
|
|
+ hotListGate = hot_gate;
|
|
|
|
|
+ //合并一起
|
|
|
|
|
+ Map<String, HotObj> map = new HashMap<>();
|
|
|
|
|
+ for (HotObj h : hotListBinance) {
|
|
|
|
|
+ String symbol = h.getSymbol().replace("_", "");
|
|
|
|
|
+ map.put(symbol, h);
|
|
|
|
|
+ }
|
|
|
|
|
+ for (HotObj h : hotListGate) {
|
|
|
|
|
+ h.setSymbol(h.getSymbol().replace("_", ""));
|
|
|
|
|
+ String symbol = h.getSymbol();
|
|
|
|
|
+ if (map.containsKey(symbol)) {
|
|
|
|
|
+ HotObj val = map.get(symbol);
|
|
|
|
|
+ val.setExchange(val.getExchange() + "|gate");
|
|
|
|
|
+ map.put(symbol, val);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ map.put(symbol, h);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ mapHotObj = map;
|
|
|
|
|
+
|
|
|
|
|
+ //生成变更记录
|
|
|
|
|
+ int[] fudu = {15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200};
|
|
|
|
|
+
|
|
|
|
|
+ for (String key : mapHotObj.keySet()) {
|
|
|
|
|
+ HotObj hotObj = mapHotObj.get(key);
|
|
|
|
|
+
|
|
|
|
|
+ String diefu = hotObj.getDiefu();
|
|
|
|
|
+ String diefuStr = hotObj.getDiefuStr();
|
|
|
|
|
+ String volume = hotObj.getVolume();
|
|
|
|
|
+ String volumeStr = hotObj.getVolumeStr();
|
|
|
|
|
+ String symbol = hotObj.getSymbol();
|
|
|
|
|
+ String exchange = hotObj.getExchange();
|
|
|
|
|
+
|
|
|
|
|
+ for (int i = fudu.length - 1; i >= 0; i--) {
|
|
|
|
|
+ if (Double.parseDouble(diefu) > fudu[i]) {
|
|
|
|
|
+ dynamic.put(hotObj.getSymbol(), hotObj);
|
|
|
|
|
+// log.info("通知:" + symbol + " ▲上涨" + diefuStr + "% " + exchange + "-->" + volumeStr);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Scheduled(fixedRate = 1 * 60 * 60 * 1000)
|
|
|
|
|
+// @Scheduled(fixedRate = 5 * 1000)
|
|
|
|
|
+ public void performTaskDingDing() {
|
|
|
|
|
+ List<HotSymbol> saveBatch = new ArrayList<>();
|
|
|
|
|
+ StringBuilder str = new StringBuilder();
|
|
|
|
|
+ for (String key : dynamic.keySet()) {
|
|
|
|
|
+ HotObj hotObj = dynamic.get(key);
|
|
|
|
|
+ str.append("\n" + hotObj.getSymbol() + " ▲上涨" + hotObj.getDiefuStr() + " " + hotObj.getExchange() + "-->" + hotObj.getVolumeStr());
|
|
|
|
|
+
|
|
|
|
|
+ saveBatch.add(new HotSymbol()
|
|
|
|
|
+ .setExchange(hotObj.getExchange())
|
|
|
|
|
+ .setSymbol(hotObj.getSymbol())
|
|
|
|
|
+ .setDiefu(hotObj.getDiefu())
|
|
|
|
|
+ .setVolume(hotObj.getVolume())
|
|
|
|
|
+ .setTime(new Date())
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //发送钉钉推送
|
|
|
|
|
+ if (str.toString().length() > 0) {
|
|
|
|
|
+ dingTalkPushUtil.pushText(str.toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ //做一次数据库存储
|
|
|
|
|
+ if (saveBatch.size() > 0) {
|
|
|
|
|
+ iHotSymbolService.saveBatch(saveBatch);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Scheduled(fixedRate = 24 * 60 * 60 * 1000)
|
|
|
|
|
+// @Scheduled(fixedRate = 60 * 1000)
|
|
|
|
|
+ public void delTaskDingDing() {
|
|
|
|
|
+ //每天删除前一天
|
|
|
|
|
+ // 获取当前日期的实例
|
|
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
|
|
+ // 减去一天
|
|
|
|
|
+// calendar.add(Calendar.DATE, -1);
|
|
|
|
|
+ // 创建一个日期格式化对象
|
|
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
+ // 格式化前一天的日期
|
|
|
|
|
+ String yesterdayStr = formatter.format(calendar.getTime());
|
|
|
|
|
+ log.info("时间:" + yesterdayStr);
|
|
|
|
|
+ iHotSymbolService.remove(new LambdaQueryWrapper<HotSymbol>().like(HotSymbol::getTime, yesterdayStr));
|
|
|
|
|
+ }
|
|
|
|
|
+}
|