|
|
@@ -1,215 +1,525 @@
|
|
|
package cn.vbdsm.analysis.timer.impl;
|
|
|
|
|
|
+import java.lang.reflect.Method;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Calendar;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.TreeMap;
|
|
|
+import java.util.*;
|
|
|
|
|
|
+import cn.vbdsm.analysis.dao.*;
|
|
|
+import cn.vbdsm.analysis.model.*;
|
|
|
+import cn.vbdsm.common.constants.MonitorWarnConstant;
|
|
|
+import cn.vbdsm.common.utils.MonitorUtil;
|
|
|
+import org.apache.commons.beanutils.PropertyUtils;
|
|
|
import org.apache.log4j.Logger;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import cn.vbdsm.analysis.dao.AnalDataOverwarningDao;
|
|
|
-import cn.vbdsm.analysis.dao.MonitorDao;
|
|
|
-import cn.vbdsm.analysis.dao.OnlineDataOverwarningInfoDao;
|
|
|
-import cn.vbdsm.analysis.model.AnalDataOverwarning;
|
|
|
-import cn.vbdsm.analysis.model.Monitor;
|
|
|
import cn.vbdsm.analysis.model.Monitor.EmDistributionType;
|
|
|
-import cn.vbdsm.analysis.model.OnlineDataOverwarningInfo;
|
|
|
import cn.vbdsm.common.annotation.Comment;
|
|
|
import cn.vbdsm.common.constants.CronExpression;
|
|
|
|
|
|
+import javax.core.common.utils.ListUtils;
|
|
|
+import javax.core.common.utils.StringUtils;
|
|
|
|
|
|
@Component
|
|
|
@Comment("告警扫描")
|
|
|
public class OverWarnTimer {
|
|
|
|
|
|
- @Autowired private MonitorDao monitorDao;
|
|
|
- @Autowired private AnalDataOverwarningDao analDataOverwarningDao;
|
|
|
- @Autowired private OnlineDataOverwarningInfoDao onlineDataOverwarningInfoDao;
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ private MonitorDao monitorDao;
|
|
|
+ @Autowired
|
|
|
+ private AnalDataOverwarningDao analDataOverwarningDao;
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataOverwarningInfoDao onlineDataOverwarningInfoDao;
|
|
|
+ @Autowired
|
|
|
+ private MonitorWarninginfoSetDao warninginfoSetDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataPowerDao onlineDataPowerDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataQtyDao onlineDataQtyDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataHarmonicIDao harmonicIDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataHarmonicUDao harmonicUDao;
|
|
|
+
|
|
|
private Logger LOG = Logger.getLogger(this.getClass());
|
|
|
-
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 5分钟计算一次监测点告警
|
|
|
+ */
|
|
|
+ @Scheduled(cron = CronExpression.EVERY_5_MINUTE_2_DELAY)
|
|
|
+ @Comment("监测点日越限信息统计")
|
|
|
+ @Async
|
|
|
+// @PostConstruct
|
|
|
+ public void calcOnlineDataOverWarn(Date startTime,Date endTime){
|
|
|
+ if(startTime == null){
|
|
|
+ //执行上一个点的告警
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calcOnlineDataOverWarn(calendar.getTime());
|
|
|
+ }else{
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ if(null == endTime){ endTime = startTime; }
|
|
|
+ c.setTime(startTime);
|
|
|
+ while(c.getTime().compareTo(endTime) == 0 || c.getTime().before(endTime)){
|
|
|
+ calcOnlineDataOverWarn(c.getTime());
|
|
|
+ c.add(Calendar.MINUTE, 5);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void calcOnlineDataOverWarn(Date executeDate){
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ if(executeDate != null){
|
|
|
+ calendar.setTime(executeDate);
|
|
|
+ }
|
|
|
+ calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE) % 5);
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
|
|
|
+ Long curTime = Long.parseLong(df.format(calendar.getTime()) + "00");
|
|
|
+ LOG.info("开始统计监测点告警,执行时间" + curTime);
|
|
|
+ Calendar calendar1 = (Calendar) calendar.clone();
|
|
|
+ calendar1.add(Calendar.DATE, -2);
|
|
|
+ Long twoDaysAgoTime = Long.parseLong(df.format(calendar1.getTime()) + "00");
|
|
|
+
|
|
|
+ List<MonitorWarninginfoSet> monitorWarninginfoSets = warninginfoSetDao.selectByMonitorIds(null);
|
|
|
+ if (monitorWarninginfoSets.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<Long, List<MonitorWarninginfoSet>> monitorWaringInfoSetMap = new HashMap<Long, List<MonitorWarninginfoSet>>();
|
|
|
+ for (MonitorWarninginfoSet monitorWarninginfoSet :
|
|
|
+ monitorWarninginfoSets) {
|
|
|
+ if (!monitorWaringInfoSetMap.containsKey(monitorWarninginfoSet.getMonitorId())) {
|
|
|
+ monitorWaringInfoSetMap.put(monitorWarninginfoSet.getMonitorId(), new ArrayList<MonitorWarninginfoSet>());
|
|
|
+ }
|
|
|
+ monitorWaringInfoSetMap.get(monitorWarninginfoSet.getMonitorId()).add(monitorWarninginfoSet);
|
|
|
+ }
|
|
|
+
|
|
|
+ //监测点分组处理,500个一组
|
|
|
+ List<List<Long>> monitorForPage = getMonitorIdPage(new ArrayList<Long>(monitorWaringInfoSetMap.keySet()));
|
|
|
+ List<OnlineDataOverwarningInfo> replaceWarnInfoList = new ArrayList<OnlineDataOverwarningInfo>();
|
|
|
+ for (List<Long> pageData :
|
|
|
+ monitorForPage) {
|
|
|
+ List<Monitor> monitorList = monitorDao.selectByIds(new ArrayList<Long>(pageData));
|
|
|
+ Map<Long, Monitor> monitorMap = new HashMap<Long, Monitor>();
|
|
|
+ Set<String> terminalIds = new HashSet<String>();
|
|
|
+ for (Monitor monitor : monitorList) {
|
|
|
+ if (monitor.getSeeType().compareTo(EmDistributionType.virtual.value) == 0 || monitor.getTerminalId() == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ terminalIds.add(monitor.getTerminalId());
|
|
|
+ monitorMap.put(monitor.getId(), monitor);
|
|
|
+ }
|
|
|
+ if (terminalIds.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //查询电力数据
|
|
|
+ Map<String, OnlineDataPower> onlineDataPowerMap = new HashMap<String, OnlineDataPower>();
|
|
|
+ Map<String, OnlineDataQty> onlineDataQtyMap = new HashMap<String, OnlineDataQty>();
|
|
|
+ Map<String, List<OnlineDataHarmonicI>> onlineDataHarmonicIMap = new HashMap<String, List<OnlineDataHarmonicI>>();
|
|
|
+ Map<String, List<OnlineDataHarmonicU>> onlineDataHarmonicUMap = new HashMap<String, List<OnlineDataHarmonicU>>();
|
|
|
+ List<String> queryTerminalIds = new ArrayList<String>(terminalIds);
|
|
|
+ List<OnlineDataPower> onlineDataPowerList = onlineDataPowerDao.selectByTime(queryTerminalIds, Long.valueOf(curTime));
|
|
|
+ List<OnlineDataQty> onlineDataQtyList = onlineDataQtyDao.selectByTime(queryTerminalIds, Long.valueOf(curTime));
|
|
|
+ List<OnlineDataHarmonicI> harmonicIList = harmonicIDao.selectByTime(queryTerminalIds, Long.valueOf(curTime));
|
|
|
+ List<OnlineDataHarmonicU> harmonicUList = harmonicUDao.selectByTime(queryTerminalIds, Long.valueOf(curTime));
|
|
|
+ for (OnlineDataPower onlineDataPower : onlineDataPowerList) {
|
|
|
+ onlineDataPowerMap.put(onlineDataPower.getTerminalId(), onlineDataPower);
|
|
|
+ }
|
|
|
+ for (OnlineDataQty onlineDataQty : onlineDataQtyList) {
|
|
|
+ onlineDataQtyMap.put(onlineDataQty.getTerminalId(), onlineDataQty);
|
|
|
+ }
|
|
|
+ for (OnlineDataHarmonicI i : harmonicIList) {
|
|
|
+ if (!onlineDataHarmonicIMap.containsKey(i.getTerminalId())) {
|
|
|
+ onlineDataHarmonicIMap.put(i.getTerminalId(), new ArrayList<OnlineDataHarmonicI>());
|
|
|
+ }
|
|
|
+ onlineDataHarmonicIMap.get(i.getTerminalId()).add(i);
|
|
|
+ }
|
|
|
+ for (OnlineDataHarmonicU u : harmonicUList) {
|
|
|
+ if (!onlineDataHarmonicUMap.containsKey(u.getTerminalId())) {
|
|
|
+ onlineDataHarmonicUMap.put(u.getTerminalId(), new ArrayList<OnlineDataHarmonicU>());
|
|
|
+ }
|
|
|
+ onlineDataHarmonicUMap.get(u.getTerminalId()).add(u);
|
|
|
+ }
|
|
|
+ //查询2天内没有恢复的告警
|
|
|
+ List<OnlineDataOverwarningInfo> notRecoverWarns = onlineDataOverwarningInfoDao.getNotRecoverWarnByTimePeriod(new ArrayList<String>(terminalIds), Long.valueOf(twoDaysAgoTime), Long.valueOf(curTime));
|
|
|
+ //监测点、告警类型、越限类型、开始时间确定唯一值
|
|
|
+ Map<String,Map<String,OnlineDataOverwarningInfo>> notRecoverWarnMap = new HashMap<String, Map<String, OnlineDataOverwarningInfo>>();
|
|
|
+ for (OnlineDataOverwarningInfo warn : notRecoverWarns) {
|
|
|
+ if(!notRecoverWarnMap.containsKey(warn.getTerminalId())){
|
|
|
+ notRecoverWarnMap.put(warn.getTerminalId(),new HashMap<String, OnlineDataOverwarningInfo>());
|
|
|
+ }
|
|
|
+ notRecoverWarnMap.get(warn.getTerminalId()).put(warn.getWarningInfoId()+ "_" + warn.getOverFlag(),warn);
|
|
|
+ }
|
|
|
+ for (Map.Entry<Long, Monitor> monitorMapEntry :
|
|
|
+ monitorMap.entrySet()) {
|
|
|
+ //查询电力相关数据
|
|
|
+ String terminalId = monitorMapEntry.getValue().getTerminalId();
|
|
|
+ List<MonitorWarninginfoSet> monitorWarninginfoSetList = monitorWaringInfoSetMap.get(monitorMapEntry.getKey());
|
|
|
+ for (MonitorWarninginfoSet monitorWarninginfoSet:
|
|
|
+ monitorWarninginfoSetList) {
|
|
|
+ List<MonitorWarnConstant.OnlineDataWarnTypeEnum> onlineDataWarnTypeEnums = MonitorWarnConstant.OnlineDataWarnTypeEnum.getWarnTypeBySysCode(monitorWarninginfoSet.getWarningInfoId());
|
|
|
+ OnlineDataPower onlineDataPower = onlinePowerAddCtPt(monitorMapEntry.getValue(),onlineDataPowerMap.get(terminalId));
|
|
|
+ OnlineDataQty onlineDataQty = onlineDataQtyMap.get(terminalId);
|
|
|
+ List<OnlineDataHarmonicI> onlineDataHarmonicIs = onlineDataHarmonicIMap.get(terminalId);
|
|
|
+ List<OnlineDataHarmonicU> onlineDataHarmonicUs = onlineDataHarmonicUMap.get(terminalId);
|
|
|
+ Map<String,OnlineDataOverwarningInfo> terminalNotRecoverWarns = notRecoverWarnMap.get(terminalId);
|
|
|
+ for (MonitorWarnConstant.OnlineDataWarnTypeEnum onlineDataWarnTypeEnum:
|
|
|
+ onlineDataWarnTypeEnums) {
|
|
|
+ BigDecimal infoMin = monitorWarninginfoSet.getInfoMin();
|
|
|
+ BigDecimal infoMax = monitorWarninginfoSet.getInfoMax();
|
|
|
+ switch (onlineDataWarnTypeEnum.getOnlineDataType()){
|
|
|
+ case Power:
|
|
|
+ if(onlineDataPower != null){
|
|
|
+ BigDecimal value = getMethodInvoke(onlineDataPower,onlineDataWarnTypeEnum.getTableEnum().getDataColumn(),BigDecimal.class);
|
|
|
+ handleWarnJudgement(curTime, twoDaysAgoTime, replaceWarnInfoList, terminalId, terminalNotRecoverWarns, onlineDataWarnTypeEnum, infoMin, infoMax, value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case QTY:
|
|
|
+ if(onlineDataQty != null){
|
|
|
+ BigDecimal value = getMethodInvoke(onlineDataQty,onlineDataWarnTypeEnum.getTableEnum().getDataColumn(),BigDecimal.class);
|
|
|
+ handleWarnJudgement(curTime, twoDaysAgoTime, replaceWarnInfoList, terminalId, terminalNotRecoverWarns, onlineDataWarnTypeEnum, infoMin, infoMax, value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Harmonic_i:
|
|
|
+ if(onlineDataHarmonicIs != null){
|
|
|
+ for (OnlineDataHarmonicI onlineDataHarmonicI:
|
|
|
+ onlineDataHarmonicIs) {
|
|
|
+ String type = getMethodInvoke(onlineDataHarmonicI,onlineDataWarnTypeEnum.getTableEnum().getTypeColumnName(),String.class);
|
|
|
+ if(type.equals(onlineDataWarnTypeEnum.getTableEnum().getTypeColumnValue())){
|
|
|
+ BigDecimal value = getMethodInvoke(onlineDataHarmonicI,onlineDataWarnTypeEnum.getTableEnum().getDataColumn(),BigDecimal.class);
|
|
|
+ handleWarnJudgement(curTime, twoDaysAgoTime, replaceWarnInfoList, terminalId, terminalNotRecoverWarns, onlineDataWarnTypeEnum, infoMin, infoMax, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Harmonic_u:
|
|
|
+ if(onlineDataHarmonicUs != null){
|
|
|
+ for (OnlineDataHarmonicU onlineDataHarmonicU:
|
|
|
+ onlineDataHarmonicUs) {
|
|
|
+ String type = getMethodInvoke(onlineDataHarmonicU,onlineDataWarnTypeEnum.getTableEnum().getTypeColumnName(),String.class);
|
|
|
+ if(type.equals(onlineDataWarnTypeEnum.getTableEnum().getTypeColumnValue())){
|
|
|
+ BigDecimal value = getMethodInvoke(onlineDataHarmonicU,onlineDataWarnTypeEnum.getTableEnum().getDataColumn(),BigDecimal.class);
|
|
|
+ handleWarnJudgement(curTime, twoDaysAgoTime, replaceWarnInfoList, terminalId, terminalNotRecoverWarns, onlineDataWarnTypeEnum, infoMin, infoMax, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ LOG.info("本次更新告警记录条数:" + replaceWarnInfoList.size());
|
|
|
+ if (replaceWarnInfoList.size() > 0) {
|
|
|
+ int i = onlineDataOverwarningInfoDao.replaceAll(replaceWarnInfoList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 告警判断
|
|
|
+ * @param curTime
|
|
|
+ * @param twoDaysAgoTime
|
|
|
+ * @param replaceWarnInfoList
|
|
|
+ * @param terminalId
|
|
|
+ * @param terminalNotRecoverWarns
|
|
|
+ * @param onlineDataWarnTypeEnum
|
|
|
+ * @param infoMin
|
|
|
+ * @param infoMax
|
|
|
+ * @param value
|
|
|
+ */
|
|
|
+ private void handleWarnJudgement(Long curTime, Long twoDaysAgoTime, List<OnlineDataOverwarningInfo> replaceWarnInfoList, String terminalId, Map<String, OnlineDataOverwarningInfo> terminalNotRecoverWarns, MonitorWarnConstant.OnlineDataWarnTypeEnum onlineDataWarnTypeEnum, BigDecimal infoMin, BigDecimal infoMax, BigDecimal value) {
|
|
|
+ if(value != null){
|
|
|
+ if ((onlineDataWarnTypeEnum.getCompareType() & 1) > 0){
|
|
|
+ //比较下限值
|
|
|
+ OnlineDataOverwarningInfo notRecoverWarn = terminalNotRecoverWarns != null ? terminalNotRecoverWarns.get(onlineDataWarnTypeEnum.getCode()+"_"+0) : null;
|
|
|
+ if(value.compareTo(infoMin) < 0){
|
|
|
+ if(notRecoverWarn == null){
|
|
|
+ notRecoverWarn = createNewWarnInfo(curTime, terminalId, infoMin,infoMax, value, onlineDataWarnTypeEnum.getCode(),0);
|
|
|
+ replaceWarnInfoList.add(notRecoverWarn);
|
|
|
+ }
|
|
|
+ }else if(notRecoverWarn != null){
|
|
|
+ handleWarnRecovery(notRecoverWarn,twoDaysAgoTime);
|
|
|
+ replaceWarnInfoList.add(notRecoverWarn);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if((onlineDataWarnTypeEnum.getCompareType() & 2) > 0){
|
|
|
+ //比较上限值
|
|
|
+ OnlineDataOverwarningInfo notRecoverWarn = terminalNotRecoverWarns != null ? terminalNotRecoverWarns.get(onlineDataWarnTypeEnum.getCode()+"_"+1) : null;
|
|
|
+ if(value.compareTo(infoMax) > 0){
|
|
|
+ if(notRecoverWarn == null){
|
|
|
+ notRecoverWarn = createNewWarnInfo(curTime, terminalId, infoMin,infoMax, value, onlineDataWarnTypeEnum.getCode(),1);
|
|
|
+ replaceWarnInfoList.add(notRecoverWarn);
|
|
|
+ }
|
|
|
+ }else if(notRecoverWarn != null){
|
|
|
+ handleWarnRecovery(notRecoverWarn,twoDaysAgoTime);
|
|
|
+ replaceWarnInfoList.add(notRecoverWarn);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private OnlineDataOverwarningInfo createNewWarnInfo(Long startTime, String terminalId, BigDecimal infoMin,BigDecimal infoMax, BigDecimal value, Integer warnTypeCode,Integer overFlag) {
|
|
|
+ OnlineDataOverwarningInfo onlineDataOverwarningInfo = new OnlineDataOverwarningInfo();
|
|
|
+ onlineDataOverwarningInfo.setTerminalId(terminalId);
|
|
|
+ onlineDataOverwarningInfo.setValueMin(infoMin.doubleValue());
|
|
|
+ onlineDataOverwarningInfo.setValueMax(infoMax.doubleValue());
|
|
|
+ onlineDataOverwarningInfo.setWarningInfoId(warnTypeCode);
|
|
|
+ onlineDataOverwarningInfo.setOverFlag(overFlag);
|
|
|
+ onlineDataOverwarningInfo.setValue(value.doubleValue());
|
|
|
+ onlineDataOverwarningInfo.setReadFlag(0);
|
|
|
+ onlineDataOverwarningInfo.setWarningTimeStart(startTime);
|
|
|
+ onlineDataOverwarningInfo.setWarningTimeEnd(null);
|
|
|
+ return onlineDataOverwarningInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void handleWarnRecovery(OnlineDataOverwarningInfo onlineDataOverwarningInfo,Long endTime){
|
|
|
+ onlineDataOverwarningInfo.setWarningTimeEnd(endTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ public OnlineDataPower onlinePowerAddCtPt(Monitor monitor, OnlineDataPower onlineDataPowerParam) {
|
|
|
+ if(onlineDataPowerParam == null){
|
|
|
+ return onlineDataPowerParam;
|
|
|
+ }
|
|
|
+ OnlineDataPower onlineDataPower = new OnlineDataPower();
|
|
|
+ try {
|
|
|
+ PropertyUtils.copyProperties(onlineDataPower,onlineDataPowerParam);
|
|
|
+ onlineDataPower.setP(MonitorUtil.calcCtPt(monitor, onlineDataPower.getP()));
|
|
|
+ onlineDataPower.setPa(MonitorUtil.calcCtPt(monitor, onlineDataPower.getPa()));
|
|
|
+ onlineDataPower.setPb(MonitorUtil.calcCtPt(monitor, onlineDataPower.getPb()));
|
|
|
+ onlineDataPower.setPc(MonitorUtil.calcCtPt(monitor, onlineDataPower.getPc()));
|
|
|
+ onlineDataPower.setQ(MonitorUtil.calcCtPt(monitor, onlineDataPower.getQ()));
|
|
|
+ onlineDataPower.setQa(MonitorUtil.calcCtPt(monitor, onlineDataPower.getQa()));
|
|
|
+ onlineDataPower.setQb(MonitorUtil.calcCtPt(monitor, onlineDataPower.getQb()));
|
|
|
+ onlineDataPower.setQc(MonitorUtil.calcCtPt(monitor, onlineDataPower.getQc()));
|
|
|
+
|
|
|
+ onlineDataPower.setIa(MonitorUtil.calcCt(monitor, onlineDataPower.getIa()));
|
|
|
+ onlineDataPower.setIb(MonitorUtil.calcCt(monitor, onlineDataPower.getIb()));
|
|
|
+ onlineDataPower.setIc(MonitorUtil.calcCt(monitor, onlineDataPower.getIc()));
|
|
|
+ onlineDataPower.setIz(MonitorUtil.calcCt(monitor, onlineDataPower.getIz()));
|
|
|
+
|
|
|
+ onlineDataPower.setUa(MonitorUtil.calcPt(monitor, onlineDataPower.getUa()));
|
|
|
+ onlineDataPower.setUb(MonitorUtil.calcPt(monitor, onlineDataPower.getUb()));
|
|
|
+ onlineDataPower.setUc(MonitorUtil.calcPt(monitor, onlineDataPower.getUc()));
|
|
|
+ onlineDataPower.setUab(MonitorUtil.calcPt(monitor, onlineDataPower.getUab()));
|
|
|
+ onlineDataPower.setUbc(MonitorUtil.calcPt(monitor, onlineDataPower.getUbc()));
|
|
|
+ onlineDataPower.setUca(MonitorUtil.calcPt(monitor, onlineDataPower.getUca()));
|
|
|
+ return onlineDataPower;
|
|
|
+ } catch (Exception ex){
|
|
|
+ LOG.error("onlinePowerAddCtPt copyProperties",ex);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private <T> T getMethodInvoke(Object object, String fieldName,Class<T> returnClass){
|
|
|
+ T result = null;
|
|
|
+ try {
|
|
|
+ Method method = object.getClass().getMethod("get" + StringUtils.upperCaseFirstChar(fieldName));
|
|
|
+ result = (T) method.invoke(object);
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOG.error("getMethodInvoke error",e);
|
|
|
+ }finally {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private List<List<Long>> getMonitorIdPage(List<Long> monitorIds) {
|
|
|
+ List<List<Long>> monitorForPage = new ArrayList<List<Long>>();
|
|
|
+ int pageNo = 1, pageSize = 500;
|
|
|
+ List<Long> page = ListUtils.pagination(monitorIds, pageNo, pageSize);
|
|
|
+ monitorForPage.add(page);
|
|
|
+ while (page.size() > 0) {
|
|
|
+ pageNo++;
|
|
|
+ page = ListUtils.pagination(monitorIds, pageNo, pageSize);
|
|
|
+ if (page.size() > 0) {
|
|
|
+ monitorForPage.add(page);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return monitorForPage;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 每天凌晨1点10分开始计算
|
|
|
*/
|
|
|
- @Scheduled(cron=CronExpression.TIME_1_10_HOUR)
|
|
|
+ @Scheduled(cron = CronExpression.TIME_1_10_HOUR)
|
|
|
@Comment("监测点日越限信息统计")
|
|
|
@Async
|
|
|
- public void warnningInfoTimer(){
|
|
|
+ public void warnningInfoTimer() {
|
|
|
LOG.info("====================监测点日越限信息统计开始=======================");
|
|
|
- Map<Long, List<Monitor>> companyMonitorMap = new HashMap<Long, List<Monitor>>(); //机构与监测点对应关系
|
|
|
- Map<Long, List<String>> companyTerminalMap = new TreeMap<Long, List<String>>(); //机构与监测点ID对应关系
|
|
|
- Map<String, Monitor> monitorMap = new HashMap<String, Monitor>(); //监测点ID与监测点对应关系
|
|
|
+ Map<Long, List<Monitor>> companyMonitorMap = new HashMap<Long, List<Monitor>>(); //机构与监测点对应关系
|
|
|
+ Map<Long, List<String>> companyTerminalMap = new TreeMap<Long, List<String>>(); //机构与监测点ID对应关系
|
|
|
+ Map<String, Monitor> monitorMap = new HashMap<String, Monitor>(); //监测点ID与监测点对应关系
|
|
|
List<Monitor> monintorList = monitorDao.getAll();
|
|
|
for (Monitor monitor : monintorList) {
|
|
|
- if(EmDistributionType.virtual.value == monitor.getSeeType()) continue;//虚拟节点不记
|
|
|
- if(!companyMonitorMap.containsKey(monitor.getCompanyId())) {
|
|
|
+ if (EmDistributionType.virtual.value == monitor.getSeeType()) continue;//虚拟节点不记
|
|
|
+ if (!companyMonitorMap.containsKey(monitor.getCompanyId())) {
|
|
|
companyMonitorMap.put(monitor.getCompanyId(), new ArrayList<Monitor>());
|
|
|
}
|
|
|
companyMonitorMap.get(monitor.getCompanyId()).add(monitor);
|
|
|
-
|
|
|
- if(!companyTerminalMap.containsKey(monitor.getCompanyId())) {
|
|
|
+
|
|
|
+ if (!companyTerminalMap.containsKey(monitor.getCompanyId())) {
|
|
|
companyTerminalMap.put(monitor.getCompanyId(), new ArrayList<String>());
|
|
|
}
|
|
|
companyTerminalMap.get(monitor.getCompanyId()).add(monitor.getTerminalId());
|
|
|
-
|
|
|
+
|
|
|
monitorMap.put(monitor.getTerminalId(), monitor);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
SimpleDateFormat dateSdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
Calendar c = Calendar.getInstance();
|
|
|
// c.add(Calendar.DAY_OF_YEAR, -1);
|
|
|
- String today = dateSdf.format(c.getTime()); //获取当前日期
|
|
|
+ String today = dateSdf.format(c.getTime()); //获取当前日期
|
|
|
calculateAnalDataOverwarning(companyTerminalMap, today);
|
|
|
-
|
|
|
+
|
|
|
LOG.info("====================监测点日越限信息统计结束=======================");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private void calculateAnalDataOverwarning(Map<Long, List<String>> companyTerminalMap, String day) {
|
|
|
int count = 1;
|
|
|
for (Long companyId : companyTerminalMap.keySet()) {
|
|
|
- if(companyTerminalMap.get(companyId).isEmpty()) continue;
|
|
|
- List<OnlineDataOverwarningInfo> onlineWarnList = onlineDataOverwarningInfoDao.getOverwarningByTerminilIds(companyTerminalMap.get(companyId), Long.valueOf(day+"000000"), Long.valueOf(day+"242359"));
|
|
|
+ if (companyTerminalMap.get(companyId).isEmpty()) continue;
|
|
|
+ List<OnlineDataOverwarningInfo> onlineWarnList = onlineDataOverwarningInfoDao.getOverwarningByTerminilIds(companyTerminalMap.get(companyId), Long.valueOf(day + "000000"), Long.valueOf(day + "242359"));
|
|
|
Map<String, List<OnlineDataOverwarningInfo>> dataMap = new HashMap<String, List<OnlineDataOverwarningInfo>>();
|
|
|
for (OnlineDataOverwarningInfo online : onlineWarnList) {
|
|
|
- String mapKey = online.getTerminalId()+"_"+online.getWarningInfoId()+"_"+online.getOverFlag();
|
|
|
- if(!dataMap.containsKey(mapKey)) {
|
|
|
+ String mapKey = online.getTerminalId() + "_" + online.getWarningInfoId() + "_" + online.getOverFlag();
|
|
|
+ if (!dataMap.containsKey(mapKey)) {
|
|
|
dataMap.put(mapKey, new ArrayList<OnlineDataOverwarningInfo>());
|
|
|
}
|
|
|
dataMap.get(mapKey).add(online);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
Map<String, AnalDataOverwarning> analDataMap = new HashMap<String, AnalDataOverwarning>();
|
|
|
for (String key : dataMap.keySet()) {
|
|
|
String[] keys = key.split("_");
|
|
|
String terminalId = keys[0], warningInfoId = keys[1], overFlag = keys[2];
|
|
|
AnalDataOverwarning analData = new AnalDataOverwarning();
|
|
|
- if(analDataMap.containsKey(terminalId))
|
|
|
+ if (analDataMap.containsKey(terminalId))
|
|
|
analData = analDataMap.get(terminalId);
|
|
|
else {
|
|
|
analData.setTerminalId(terminalId);
|
|
|
analData.setGetDate(Long.valueOf(day));
|
|
|
analDataMap.put(terminalId, analData);
|
|
|
}
|
|
|
-
|
|
|
- if(warningInfoId.equals("1")&&overFlag.equals("0")){ //A相电压越下限
|
|
|
+
|
|
|
+ if (warningInfoId.equals("1") && overFlag.equals("0")) { //A相电压越下限
|
|
|
analData.setUaLTimes(dataMap.get(key).size());
|
|
|
analData.setUaLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("1")&&overFlag.equals("1")) { //A相电压越上限
|
|
|
+ } else if (warningInfoId.equals("1") && overFlag.equals("1")) { //A相电压越上限
|
|
|
analData.setUaUTimes(dataMap.get(key).size());
|
|
|
analData.setUaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("2")&&overFlag.equals("0")) { //B相电压越下限
|
|
|
+ } else if (warningInfoId.equals("2") && overFlag.equals("0")) { //B相电压越下限
|
|
|
analData.setUbLTimes(dataMap.get(key).size());
|
|
|
analData.setUbLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("2")&&overFlag.equals("1")) { //B相电压越上限
|
|
|
+ } else if (warningInfoId.equals("2") && overFlag.equals("1")) { //B相电压越上限
|
|
|
analData.setUbUTimes(dataMap.get(key).size());
|
|
|
analData.setUbUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("3")&&overFlag.equals("0")) { //C相电压越下限
|
|
|
+ } else if (warningInfoId.equals("3") && overFlag.equals("0")) { //C相电压越下限
|
|
|
analData.setUcLTimes(dataMap.get(key).size());
|
|
|
analData.setUcLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("3")&&overFlag.equals("1")) { //C相电压越上限
|
|
|
+ } else if (warningInfoId.equals("3") && overFlag.equals("1")) { //C相电压越上限
|
|
|
analData.setUcUTimes(dataMap.get(key).size());
|
|
|
analData.setUcUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("4")&&overFlag.equals("1")) { //三相电压不平衡度越上限
|
|
|
+ } else if (warningInfoId.equals("4") && overFlag.equals("1")) { //三相电压不平衡度越上限
|
|
|
analData.setuBalanceUTimes(dataMap.get(key).size());
|
|
|
analData.setuBalanceUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("5")&&overFlag.equals("0")){ //Uab线电压越下限
|
|
|
+ } else if (warningInfoId.equals("5") && overFlag.equals("0")) { //Uab线电压越下限
|
|
|
analData.setUabLTimes(dataMap.get(key).size());
|
|
|
analData.setUabLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("5")&&overFlag.equals("1")) { //Uab线电压越上限
|
|
|
+ } else if (warningInfoId.equals("5") && overFlag.equals("1")) { //Uab线电压越上限
|
|
|
analData.setUabUTimes(dataMap.get(key).size());
|
|
|
analData.setUabUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("6")&&overFlag.equals("0")) { //Ubc线电压越下限
|
|
|
+ } else if (warningInfoId.equals("6") && overFlag.equals("0")) { //Ubc线电压越下限
|
|
|
analData.setUbcLTimes(dataMap.get(key).size());
|
|
|
analData.setUbcLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("6")&&overFlag.equals("1")) { //Ubc线电压越上限
|
|
|
+ } else if (warningInfoId.equals("6") && overFlag.equals("1")) { //Ubc线电压越上限
|
|
|
analData.setUbcUTimes(dataMap.get(key).size());
|
|
|
analData.setUbcUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("7")&&overFlag.equals("0")) { //Uca线电压越下限
|
|
|
+ } else if (warningInfoId.equals("7") && overFlag.equals("0")) { //Uca线电压越下限
|
|
|
analData.setUcaLTimes(dataMap.get(key).size());
|
|
|
analData.setUcaLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("7")&&overFlag.equals("1")) { //Uca线电压越上限
|
|
|
+ } else if (warningInfoId.equals("7") && overFlag.equals("1")) { //Uca线电压越上限
|
|
|
analData.setUcaUTimes(dataMap.get(key).size());
|
|
|
analData.setUcaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("8")&&overFlag.equals("1")) { //三相线电压不平衡度越上限
|
|
|
+ } else if (warningInfoId.equals("8") && overFlag.equals("1")) { //三相线电压不平衡度越上限
|
|
|
analData.setUnBalanceUTimes(dataMap.get(key).size());
|
|
|
analData.setUnBalanceUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("9")&&overFlag.equals("1")) { //A相电流越上限
|
|
|
+ } else if (warningInfoId.equals("9") && overFlag.equals("1")) { //A相电流越上限
|
|
|
analData.setIaUTimes(dataMap.get(key).size());
|
|
|
analData.setIaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("10")&&overFlag.equals("1")) { //B相电流越上限
|
|
|
+ } else if (warningInfoId.equals("10") && overFlag.equals("1")) { //B相电流越上限
|
|
|
analData.setIbUTimes(dataMap.get(key).size());
|
|
|
analData.setIbUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("11")&&overFlag.equals("1")) { //C相电流越上限
|
|
|
+ } else if (warningInfoId.equals("11") && overFlag.equals("1")) { //C相电流越上限
|
|
|
analData.setIcUTimes(dataMap.get(key).size());
|
|
|
analData.setIcUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("12")&&overFlag.equals("1")) { //三相电流不平衡度越上限
|
|
|
+ } else if (warningInfoId.equals("12") && overFlag.equals("1")) { //三相电流不平衡度越上限
|
|
|
analData.setiBalanceUTimes(dataMap.get(key).size());
|
|
|
analData.setiBalanceUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("13")&&overFlag.equals("1")) { //零线电流越上限
|
|
|
+ } else if (warningInfoId.equals("13") && overFlag.equals("1")) { //零线电流越上限
|
|
|
analData.setIzUTimes(dataMap.get(key).size());
|
|
|
analData.setIzUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("14")&&overFlag.equals("1")) { //A相负荷越上限
|
|
|
+ } else if (warningInfoId.equals("14") && overFlag.equals("1")) { //A相负荷越上限
|
|
|
analData.setPaUTimes(dataMap.get(key).size());
|
|
|
analData.setPaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("15")&&overFlag.equals("1")) { //B相负荷越上限
|
|
|
+ } else if (warningInfoId.equals("15") && overFlag.equals("1")) { //B相负荷越上限
|
|
|
analData.setPbUTimes(dataMap.get(key).size());
|
|
|
analData.setPbUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("16")&&overFlag.equals("1")) { //C相负荷越上限
|
|
|
+ } else if (warningInfoId.equals("16") && overFlag.equals("1")) { //C相负荷越上限
|
|
|
analData.setPcUTimes(dataMap.get(key).size());
|
|
|
analData.setPcUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("17")&&overFlag.equals("1")) { //总负荷越上限
|
|
|
+ } else if (warningInfoId.equals("17") && overFlag.equals("1")) { //总负荷越上限
|
|
|
analData.setpUTimes(dataMap.get(key).size());
|
|
|
analData.setpUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("18")&&overFlag.equals("0")){ //A相功率因数越下限
|
|
|
+ } else if (warningInfoId.equals("18") && overFlag.equals("0")) { //A相功率因数越下限
|
|
|
analData.setPfaLTimes(dataMap.get(key).size());
|
|
|
analData.setPfaLTime(getWarningTime(dataMap.get(key)));
|
|
|
}/* else if(warningInfoId.equals("18")&&overFlag.equals("1")) { //A相功率因数越上限
|
|
|
analData.setPfaUTimes(dataMap.get(key).size());
|
|
|
analData.setPfaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- }*/ else if(warningInfoId.equals("19")&&overFlag.equals("0")) { //B相功率因数越下限
|
|
|
+ }*/ else if (warningInfoId.equals("19") && overFlag.equals("0")) { //B相功率因数越下限
|
|
|
analData.setPfbLTimes(dataMap.get(key).size());
|
|
|
analData.setPfbLTime(getWarningTime(dataMap.get(key)));
|
|
|
}/* else if(warningInfoId.equals("19")&&overFlag.equals("1")) { //B相功率因数越上限
|
|
|
analData.setPfbUTimes(dataMap.get(key).size());
|
|
|
analData.setPfbUTime(getWarningTime(dataMap.get(key)));
|
|
|
- }*/ else if(warningInfoId.equals("20")&&overFlag.equals("0")) { //C相功率因数越下限
|
|
|
+ }*/ else if (warningInfoId.equals("20") && overFlag.equals("0")) { //C相功率因数越下限
|
|
|
analData.setPfcLTimes(dataMap.get(key).size());
|
|
|
analData.setPfcLTimes(getWarningTime(dataMap.get(key)));
|
|
|
}/* else if(warningInfoId.equals("20")&&overFlag.equals("1")) { //C相功率因数越上限
|
|
|
analData.setPfcUTimes(dataMap.get(key).size());
|
|
|
analData.setPfcUTime(getWarningTime(dataMap.get(key)));
|
|
|
- }*/ else if(warningInfoId.equals("22")&&overFlag.equals("0")) { //频率越下限
|
|
|
+ }*/ else if (warningInfoId.equals("22") && overFlag.equals("0")) { //频率越下限
|
|
|
analData.setfLTimes(dataMap.get(key).size());
|
|
|
analData.setfLTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("22")&&overFlag.equals("1")) { //频率越上限
|
|
|
+ } else if (warningInfoId.equals("22") && overFlag.equals("1")) { //频率越上限
|
|
|
analData.setfUTimes(dataMap.get(key).size());
|
|
|
analData.setfUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("23")&&overFlag.equals("1")) { //A相谐波电流总畸变率越上限
|
|
|
+ } else if (warningInfoId.equals("23") && overFlag.equals("1")) { //A相谐波电流总畸变率越上限
|
|
|
analData.setThdiaUTimes(dataMap.get(key).size());
|
|
|
analData.setThdiaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("24")&&overFlag.equals("1")) { //B相谐波电流总畸变率越上限
|
|
|
+ } else if (warningInfoId.equals("24") && overFlag.equals("1")) { //B相谐波电流总畸变率越上限
|
|
|
analData.setThdibUTimes(dataMap.get(key).size());
|
|
|
analData.setThdibUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("25")&&overFlag.equals("1")) { //C相谐波电流总畸变率越上限
|
|
|
+ } else if (warningInfoId.equals("25") && overFlag.equals("1")) { //C相谐波电流总畸变率越上限
|
|
|
analData.setThdicUTimes(dataMap.get(key).size());
|
|
|
analData.setThdicUTimes(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("26")&&overFlag.equals("1")) { //A相谐波电压总畸变率越上限
|
|
|
+ } else if (warningInfoId.equals("26") && overFlag.equals("1")) { //A相谐波电压总畸变率越上限
|
|
|
analData.setThduaUTimes(dataMap.get(key).size());
|
|
|
analData.setThduaUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("27")&&overFlag.equals("1")) { //B相谐波电压总畸变率越上限
|
|
|
+ } else if (warningInfoId.equals("27") && overFlag.equals("1")) { //B相谐波电压总畸变率越上限
|
|
|
analData.setThdubUTimes(dataMap.get(key).size());
|
|
|
analData.setThdubUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("28")&&overFlag.equals("1")) { //C相谐波电压总畸变率越上限
|
|
|
+ } else if (warningInfoId.equals("28") && overFlag.equals("1")) { //C相谐波电压总畸变率越上限
|
|
|
analData.setThducUTimes(dataMap.get(key).size());
|
|
|
analData.setThducUTime(getWarningTime(dataMap.get(key)));
|
|
|
- } else if(warningInfoId.equals("31")&&overFlag.equals("0")) { //总功率因数越下限
|
|
|
+ } else if (warningInfoId.equals("31") && overFlag.equals("0")) { //总功率因数越下限
|
|
|
analData.setPfLTimes(dataMap.get(key).size());
|
|
|
analData.setPfLTime(getWarningTime(dataMap.get(key)));
|
|
|
}/* else if(warningInfoId.equals("31")&&overFlag.equals("1")) { //总功率因数越上限
|
|
|
@@ -217,19 +527,20 @@ public class OverWarnTimer {
|
|
|
analData.setPfUTime(getWarningTime(dataMap.get(key)));
|
|
|
}*/
|
|
|
}
|
|
|
- List<AnalDataOverwarning> analWarnList = new ArrayList<AnalDataOverwarning>(analDataMap.values());;
|
|
|
+ List<AnalDataOverwarning> analWarnList = new ArrayList<AnalDataOverwarning>(analDataMap.values());
|
|
|
+ ;
|
|
|
analDataOverwarningDao.replaceForBatch(analWarnList);//保存或更新记录
|
|
|
- LOG.info("监测点日越限信息统计>>>共"+companyTerminalMap.size()+"个机构,当前第"+(count++)+"个,机构ID:" + companyId + ",监测点个数:"+companyTerminalMap.get(companyId).size()+",更新记录数:" + analWarnList.size());
|
|
|
-
|
|
|
- int delete = onlineDataOverwarningInfoDao.deleteAll(onlineWarnList);//删除历史记录
|
|
|
- if(delete>0) LOG.info("删除监测点实时告警记录成功。");
|
|
|
+ LOG.info("监测点日越限信息统计>>>共" + companyTerminalMap.size() + "个机构,当前第" + (count++) + "个,机构ID:" + companyId + ",监测点个数:" + companyTerminalMap.get(companyId).size() + ",更新记录数:" + analWarnList.size());
|
|
|
+
|
|
|
+// int delete = onlineDataOverwarningInfoDao.deleteAll(onlineWarnList);//删除历史记录
|
|
|
+// if (delete > 0) LOG.info("删除监测点实时告警记录成功。");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- private int getWarningTime(List<OnlineDataOverwarningInfo> dataList){
|
|
|
+
|
|
|
+ private int getWarningTime(List<OnlineDataOverwarningInfo> dataList) {
|
|
|
int time = 0;
|
|
|
for (OnlineDataOverwarningInfo onlineData : dataList) {
|
|
|
- if(null != onlineData.getWarningTimeEnd()&&0 != onlineData.getWarningTimeEnd()) {
|
|
|
+ if (null != onlineData.getWarningTimeEnd() && 0 != onlineData.getWarningTimeEnd()) {
|
|
|
time += onlineData.getWarningTimeEnd() - onlineData.getWarningTimeStart();
|
|
|
} else {
|
|
|
time += 5;
|