AnalysisRiskDataTask.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.zx.dataservice.task;
  2. import com.jfinal.plugin.activerecord.Db;
  3. import com.jfinal.plugin.activerecord.Record;
  4. import com.zx.dataservice.controller.WebSocketController;
  5. import com.zx.dataservice.options.DataOptions;
  6. import com.zx.dataservice.options.RiskOptions;
  7. import com.zx.dataservice.service.ChoiceHisService;
  8. import com.zx.dataservice.utils.DateUtils;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import java.math.BigDecimal;
  15. import java.util.List;
  16. /**
  17. * 每天 17点和 6点 初始化 风控相关的配置
  18. */
  19. @Component
  20. public class AnalysisRiskDataTask {
  21. private static final Logger log = LoggerFactory.getLogger(AnalysisRiskDataTask.class);
  22. @Scheduled(cron = "0 0 6,17 * * ? ")
  23. public void toAnalysisRestAfterData() {
  24. List<Record> recordRisks = Db.use("gp").find("select id,riskkey from risk_config ");
  25. for (Record record:recordRisks) {
  26. String tableNamenow = "risk_control_formula_" + record.getStr("riskkey").toLowerCase() ;
  27. Record recordr = Db.use("hb").findFirst("select TABLE_NAME,TABLE_TYPE from information_schema.TABLES where TABLE_NAME = ? ", tableNamenow);
  28. if (recordr == null) { // 如果表不存在
  29. Db.use("gp").update("CREATE TABLE `" + tableNamenow + "` (\n" +
  30. " `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',\n" +
  31. " `code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '代码',\n" +
  32. " `minimumFluctuation` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最小波动\\n\\n',\n" +
  33. " `riskControl` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '风控参数(+-*/)',\n" +
  34. " `status` int(11) NULL DEFAULT NULL COMMENT '状态,0启动、1关闭',\n" +
  35. " `codeName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '',\n" +
  36. " `tocode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '新币/股 code ',\n" +
  37. " `startTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开始时间',\n" +
  38. " `endTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '结束时间',\n" +
  39. " `multiples` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '倍数',\n" +
  40. " PRIMARY KEY (`id`) USING BTREE\n" +
  41. ") ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; ");
  42. String tableNamenowHist = "risk_control_formula_" + record.getStr("riskkey").toLowerCase() ;
  43. Db.use("gp").update("CREATE TABLE "+tableNamenowHist+" (\n" +
  44. " `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',\n" +
  45. " `code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '指数代码',\n" +
  46. " `minimumFluctuation` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最小波动',\n" +
  47. " `riskControl` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '风控参数',\n" +
  48. " `status` int(11) NULL DEFAULT NULL COMMENT '状态',\n" +
  49. " `startTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开始时间',\n" +
  50. " `endTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '结束时间',\n" +
  51. " `tocode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '新币/股 code ',\n" +
  52. " `multiples` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '倍数',\n" +
  53. " PRIMARY KEY (`id`) USING BTREE\n" +
  54. ") ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;");
  55. }else {// 初始化备份表
  56. List<Record> recordRiskList = Db.use("gp").find("select id,code,tocode,minimumFluctuation as mini,multiples,riskControl as risk,status from risk_control_formula_hy ");
  57. for (Record r :recordRiskList) {
  58. String tableNamenow2 = "data_rt_" + r.getStr("tocode").replace(".","_").toLowerCase()+"_"+ record.getStr("riskkey").toLowerCase();
  59. Record recordr2 = Db.use("gp").findFirst("select TABLE_NAME,TABLE_TYPE from information_schema.TABLES where TABLE_NAME = ? ", tableNamenow2);
  60. //还没有备份表
  61. if(recordr2==null){
  62. //创建备份表
  63. //创建实时表
  64. Db.use("gp").update("CREATE TABLE `" + tableNamenow2 + "` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` varchar(128) NOT NULL COMMENT '日期', `time` varchar(128) NOT NULL COMMENT '交易时间', `now` decimal(64,6) NOT NULL COMMENT '最新价', `high` decimal(64,6) NOT NULL COMMENT '最高价', `low` decimal(64,6) NOT NULL COMMENT '最低价', `open` decimal(64,6) NOT NULL COMMENT '开盘价', `preclose` decimal(64,6) NOT NULL COMMENT '前收盘价', `roundlot` varchar(128) NOT NULL COMMENT '现手', `change` varchar(128) NOT NULL COMMENT '涨跌', `pctchange` varchar(128) NOT NULL COMMENT '涨跌幅', `volume` varchar(128) NOT NULL COMMENT '成交量', `amount` varchar(128) NOT NULL COMMENT '成交额', `volumeratio` varchar(128) NOT NULL COMMENT '量比', `commissionratio` varchar(128) NOT NULL COMMENT '委比', `commissiondiff` varchar(128) NOT NULL COMMENT '委差', `tradestatus` varchar(128) NOT NULL COMMENT '交易状态', `outvolume` varchar(128) NOT NULL COMMENT '外盘', `involume` varchar(128) NOT NULL COMMENT '内盘', `highlimit` varchar(128) NOT NULL COMMENT '涨停价', `lowlimit` varchar(128) NOT NULL COMMENT '跌停价', `speed` varchar(128) NOT NULL COMMENT '涨速', `averageprice` varchar(128) NOT NULL COMMENT '均价', `buyprice1` varchar(128) NOT NULL COMMENT '买1价', `buyprice2` varchar(128) NOT NULL COMMENT '买2价', `buyprice3` varchar(128) NOT NULL COMMENT '买3价', `buyprice4` varchar(128) NOT NULL COMMENT '买4价', `buyprice5` varchar(128) NOT NULL COMMENT '买5价', `buyvolume1` varchar(128) NOT NULL COMMENT '买1量', `buyvolume2` varchar(128) NOT NULL COMMENT '买2量', `buyvolume3` varchar(128) NOT NULL COMMENT '买3量', `buyvolume4` varchar(128) NOT NULL COMMENT '买4量', `buyvolume5` varchar(128) NOT NULL COMMENT '买5量', `sellprice1` varchar(128) NOT NULL COMMENT '卖1价', `sellprice2` varchar(128) NOT NULL COMMENT '卖2价', `sellprice3` varchar(128) NOT NULL COMMENT '卖3价', `sellprice4` varchar(128) NOT NULL COMMENT '卖4价', `sellprice5` varchar(128) NOT NULL COMMENT '卖5价', `sellvolume1` varchar(128) NOT NULL COMMENT '卖1量', `sellvolume2` varchar(128) NOT NULL COMMENT '卖2量', `sellvolume3` varchar(128) NOT NULL COMMENT '卖3量', `sellvolume4` varchar(128) NOT NULL COMMENT '卖4量', `sellvolume5` varchar(128) NOT NULL COMMENT '卖5量', `closedtime` varchar(128) NOT NULL COMMENT '盘后时间', `closedvolume` varchar(128) NOT NULL COMMENT '盘后成交量', `closedamount` varchar(128) NOT NULL COMMENT '盘后成交额', `addTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `dateOne` bigint(15) DEFAULT '0', `dateFive` bigint(15) DEFAULT '0', `dateFifteen` bigint(15) DEFAULT '0', `dateThirty` bigint(15) DEFAULT '0', `dateSixty` bigint(15) DEFAULT '0', `realTime` bigint(15) DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
  65. // 创建历史表
  66. String histTableName = "data_hist_" + r.getStr("tocode").replace(".","_").toLowerCase()+"_" +record.getStr("riskkey").toLowerCase();
  67. Db.use("gp").update("CREATE TABLE `" + histTableName + "` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', `open` decimal(64,6) NOT NULL COMMENT '开盘价', `close` decimal(64,6) NOT NULL COMMENT '收盘价', `high` decimal(64,6) NOT NULL COMMENT '最高价', `low` decimal(64,6) NOT NULL COMMENT '最低价', `preclose` decimal(64,6) NOT NULL COMMENT '前收盘价', `average` varchar(128) NOT NULL COMMENT '均价', `change` varchar(128) NOT NULL COMMENT '涨跌', `pctchange` varchar(128) NOT NULL COMMENT '涨跌幅', `volume` varchar(128) NOT NULL COMMENT '成交量', `highlimit` varchar(128) NOT NULL COMMENT '是否涨停', `amount` varchar(128) NOT NULL COMMENT '成交金额', `turn` varchar(128) NOT NULL COMMENT '换手率', `tradestatus` varchar(128) NOT NULL COMMENT '交易状态', `lowlimit` varchar(128) NOT NULL COMMENT '是否跌停', `amplitude` varchar(128) NOT NULL COMMENT '振幅', `tnum` varchar(128) NOT NULL COMMENT '成交笔数', `tafactor` varchar(128) NOT NULL COMMENT '复权因子(后)', `fronttafactor` varchar(128) NOT NULL COMMENT '前复权因子(定点复权)', `isststock` varchar(128) NOT NULL COMMENT '是否为ST股票', `isxststock` varchar(128) NOT NULL COMMENT '是否为*ST股票', `date_year` bigint(20) DEFAULT '0' COMMENT '年期', `date_month` bigint(20) DEFAULT '0' COMMENT '月期', `date_week` bigint(20) DEFAULT '0' COMMENT '周', `realTime` bigint(20) DEFAULT '0' COMMENT '日', `dates` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
  68. }
  69. // 存入 DataOptions 缓存
  70. DataOptions.set(r.getStr("code")+"_"+r.get("tocode")+"_"+record.getStr("riskkey"), // code _ hy // BTC_hy LTC_LTC_hy LINK_GCT_xh
  71. r.getStr("tocode")+"&"+r.get("mini")+"&"+r.get("risk")+"&"+r.get("multiples")+"&"+r.get("status")); //tocode & mini & risk & multiples & status
  72. // 开盘价 每天 17点和 6点 初始化更新 清空 RiskOptions缓存 在交易时间内更新系统的话 取 当天的第一条
  73. RiskOptions.remove("open_"+r.getStr("code")+"_"+r.get("tocode")+"_"+record.getStr("riskkey"));
  74. //收盘价 定时任务 每天 17点和 6点 初始化更新 添加 当前 rt表 最后一条数据 即为收盘价 其他时间取 最后一条的 现价为风控收盘价 ,
  75. BigDecimal precloseNow = Db.use("gp").queryBigDecimal(
  76. " select now from " + tableNamenow2 + " order by id desc LIMIT 1 ");
  77. if(precloseNow!=null){
  78. RiskOptions.set("preclose_"+r.getStr("code")+"_"+r.get("tocode")+"_"+record.getStr("riskkey"),precloseNow+"");
  79. }
  80. }
  81. }
  82. }
  83. }
  84. @Scheduled(cron = "0 0 0/1 * * ? ")
  85. public void soutLog(){
  86. new WebSocketController().soutLog();
  87. }
  88. }