数据规范性校验
首先这是一个每分钟执行一次的定时任务。
数据表实体类:
包括平台、维度键值、维度值、信令数量totalNum、
查询前一分钟的数据集合
首先 获得当前时间的前一分钟,创建数据表实体类 ,将前一分钟的时间set实体类的CreateTime,然后根据 这个字段 查询数据库
查询到前一分钟的所有数据集合
如果数据集合为空
List<String> getDatas = new ArrayList<>();
就说明前一分钟没有数据,下发短信:sendMsg(getDatas,null,createTime);
如果数据集合不为空
判断当前时间判断是否在8:10~20:30之间
获取当前时分秒
字符串
拼接字符串“20190215”
,转化成Date日期,转化成单位秒
判断是否在8:10~20:30之间,是 返回ture 不是返回false;
如果在8:10~20:30之间
从Redis中获取“DATA_NUMBER_CHECK”的值
判断Redis中flag的值
Flag为null
判断值是否为null,如果为null,将1存进缓存,并且设置flag赋值为0;
Flag为1
获取维度表总条数
获取数据集合的大小。
判断数据表中上一分钟的数据条数和维度表(我们要监控的数据)中的总条数是否相等
如果size不等于count
新建一个集合List<String> mdatas = new ArrayList<String>();
,将数据集合中的 平台 和维度值 加入到新的集合mdatas中mdatas.add(mdata.getDataType()+"_"+mdata.getStatisticsVal());
获取当前数据时间createTimeString createTime = DateUtilPlus.getTimeStr(monitorDatas.get(0).getCreateTime(), 3);
新建一个集合,加入一个字符串:List<String> getDataStrs = new ArrayList<>(); getDataStrs.add("success");
比对两个数据中缺少的数据:List<ResultData> getDatas = dimensionDao.getDatas(mdatas, createTime);
返回维度表中没有的数据
SELECT id, CONCAT(data_type,'_',statistics_val) as data_type_a FROM mhaqjk.mhaq_dimension where alarm_state = 1
HAVING data_type_a NOT IN
<foreach collection="mdatas" index="index" item="statistics_val" open="(" separator="," close=")">
#{statistics_val}
</foreach>
SQL CONCAT()函数用于将两个字符串连接起来,形成一个单一的字符串
这个sql可以查询 上一分钟的数据中缺少的维度表中我们要监控的数据。
getDatas就是缺少的数据
如果getDatas不是空,就说明有存在缺少的数据,就需要发送短信:sendMsg(getDataStrs, getDatas, createTime);
对数据是否符合规则进行校验
monitorService.dataCheck (monitorDatas);
查询对应维度是否存在
新建MhaqMonitorData mhaqMonitorData = new MhaqMonitorData();
获取当天的时间状态
日期状态 0为休息日 1为工作日
获取当天的时间 yyyy-MM-dd,并根据时间查询数据库,该时间的的状态是工作日还是节假日。并存入redis。
如果不存在对应维度,则将数据添加记录到数据库中,并结束本次循环,
否侧获取对应维度,通过维度获取当前数据对应的规则;
通过维度ID查询对应规则