package com.zx.dataservice.task; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.zx.dataservice.controller.WebSocketController; import com.zx.dataservice.options.DataOptions; import com.zx.dataservice.options.RiskOptions; import com.zx.dataservice.service.ChoiceHisService; import com.zx.dataservice.utils.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.List; /** * 每天 17点和 6点 初始化 风控相关的配置 */ @Component public class AnalysisRiskDataTask { private static final Logger log = LoggerFactory.getLogger(AnalysisRiskDataTask.class); @Scheduled(cron = "0 0 6,17 * * ? ") public void toAnalysisRestAfterData() { List recordRisks = Db.use("gp").find("select id,riskkey from risk_config "); for (Record record:recordRisks) { String tableNamenow = "risk_control_formula_" + record.getStr("riskkey").toLowerCase() ; Record recordr = Db.use("hb").findFirst("select TABLE_NAME,TABLE_TYPE from information_schema.TABLES where TABLE_NAME = ? ", tableNamenow); if (recordr == null) { // 如果表不存在 Db.use("gp").update("CREATE TABLE `" + tableNamenow + "` (\n" + " `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',\n" + " `code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '代码',\n" + " `minimumFluctuation` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最小波动\\n\\n',\n" + " `riskControl` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '风控参数(+-*/)',\n" + " `status` int(11) NULL DEFAULT NULL COMMENT '状态,0启动、1关闭',\n" + " `codeName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '',\n" + " `tocode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '新币/股 code ',\n" + " `startTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开始时间',\n" + " `endTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '结束时间',\n" + " `multiples` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '倍数',\n" + " PRIMARY KEY (`id`) USING BTREE\n" + ") ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; "); String tableNamenowHist = "risk_control_formula_" + record.getStr("riskkey").toLowerCase() ; Db.use("gp").update("CREATE TABLE "+tableNamenowHist+" (\n" + " `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',\n" + " `code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '指数代码',\n" + " `minimumFluctuation` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最小波动',\n" + " `riskControl` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '风控参数',\n" + " `status` int(11) NULL DEFAULT NULL COMMENT '状态',\n" + " `startTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开始时间',\n" + " `endTime` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '结束时间',\n" + " `tocode` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '新币/股 code ',\n" + " `multiples` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '倍数',\n" + " PRIMARY KEY (`id`) USING BTREE\n" + ") ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;"); }else {// 初始化备份表 List recordRiskList = Db.use("gp").find("select id,code,tocode,minimumFluctuation as mini,multiples,riskControl as risk,status from risk_control_formula_hy "); for (Record r :recordRiskList) { String tableNamenow2 = "data_rt_" + r.getStr("tocode").replace(".","_").toLowerCase()+"_"+ record.getStr("riskkey").toLowerCase(); Record recordr2 = Db.use("gp").findFirst("select TABLE_NAME,TABLE_TYPE from information_schema.TABLES where TABLE_NAME = ? ", tableNamenow2); //还没有备份表 if(recordr2==null){ //创建备份表 //创建实时表 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;"); // 创建历史表 String histTableName = "data_hist_" + r.getStr("tocode").replace(".","_").toLowerCase()+"_" +record.getStr("riskkey").toLowerCase(); 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;"); } // 存入 DataOptions 缓存 DataOptions.set(r.getStr("code")+"_"+r.get("tocode")+"_"+record.getStr("riskkey"), // code _ hy // BTC_hy LTC_LTC_hy LINK_GCT_xh r.getStr("tocode")+"&"+r.get("mini")+"&"+r.get("risk")+"&"+r.get("multiples")+"&"+r.get("status")); //tocode & mini & risk & multiples & status // 开盘价 每天 17点和 6点 初始化更新 清空 RiskOptions缓存 在交易时间内更新系统的话 取 当天的第一条 RiskOptions.remove("open_"+r.getStr("code")+"_"+r.get("tocode")+"_"+record.getStr("riskkey")); //收盘价 定时任务 每天 17点和 6点 初始化更新 添加 当前 rt表 最后一条数据 即为收盘价 其他时间取 最后一条的 现价为风控收盘价 , BigDecimal precloseNow = Db.use("gp").queryBigDecimal( " select now from " + tableNamenow2 + " order by id desc LIMIT 1 "); if(precloseNow!=null){ RiskOptions.set("preclose_"+r.getStr("code")+"_"+r.get("tocode")+"_"+record.getStr("riskkey"),precloseNow+""); } } } } } @Scheduled(cron = "0 0 0/1 * * ? ") public void soutLog(){ new WebSocketController().soutLog(); } }