|
|
@@ -5,6 +5,7 @@ import com.global.base.tools.FastJsonUtil;
|
|
|
import com.shkpr.service.warncore.commtools.CommTool;
|
|
|
import com.shkpr.service.warncore.commtools.TimeTool;
|
|
|
import com.shkpr.service.warncore.constants.CommFieldStatus;
|
|
|
+import com.shkpr.service.warncore.constants.EventAction;
|
|
|
import com.shkpr.service.warncore.constants.FrequencyUnit;
|
|
|
import com.shkpr.service.warncore.dbdao.DBMgrProxy;
|
|
|
import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanInfoDBService;
|
|
|
@@ -23,6 +24,8 @@ import java.util.*;
|
|
|
* 站点数据处理
|
|
|
*/
|
|
|
public class SiteDataWarnHandler {
|
|
|
+ private static int COMPARE_TURE = 1;
|
|
|
+ private static int COMPARE_FALSE = 0;
|
|
|
private static OrdWarnPlanInfoDBService getWarnPlanInfoDBService(){
|
|
|
return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanInfoDBService.class);
|
|
|
}
|
|
|
@@ -43,7 +46,7 @@ public class SiteDataWarnHandler {
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
}
|
|
|
|
|
|
- boolean doForTodayBefore = false;//是否只分析今日之前的数据
|
|
|
+ boolean doForTodayBefore = false;//是否只分析今日之前的数据(针对小时/日分析有用)
|
|
|
final long curUTCTm = TimeTool.getCurMsUTC();
|
|
|
int curClock = (int)((curUTCTm/1000/60/60%24+8)%24);
|
|
|
long queryBeginUTC = 0L, queryEndUTC = 0L, conditionMinUTC = 0L;
|
|
|
@@ -75,6 +78,7 @@ public class SiteDataWarnHandler {
|
|
|
queryEndUTC = Math.min(TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, curClock))
|
|
|
, TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, rules.get(i).getEnd())));
|
|
|
}
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if (findStartClock < 0){
|
|
|
@@ -130,26 +134,28 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
if (!StringUtils.isEmpty(planDetail.getLastEventId())){
|
|
|
//向数据库中快速查询事件最近处理阶段action的值
|
|
|
- //并赋值给thisTempStep
|
|
|
+ //并赋值给thisStepTempRes
|
|
|
}
|
|
|
-
|
|
|
+ }while (false);
|
|
|
+ if (code == ResponseCode.RESULT_NORMAL){
|
|
|
if (planDetail.getItemKey().endsWith("empty")){//无数据
|
|
|
- return analysisDataForReportByHour(planDetail, rules, thisStepTempRes);
|
|
|
+ code = analysisDataForReportByHour(planDetail, rules, thisStepTempRes);
|
|
|
}else if (planDetail.getItemKey().endsWith("swo")){//小时水量
|
|
|
- return analysisDataForReportByHour(planDetail, rules, thisStepTempRes);
|
|
|
+ code = analysisDataForReportByHour(planDetail, rules, thisStepTempRes);
|
|
|
}else {
|
|
|
if ("set".equals(planDetail.getDoPickWay())){//时段曲线
|
|
|
- return analysisDataForRealBySet(planDetail, rules, thisStepTempRes);
|
|
|
+ code = analysisDataForRealBySet(planDetail, rules, thisStepTempRes);
|
|
|
}
|
|
|
}
|
|
|
- }while (false);
|
|
|
+ }else {//单独更新预警方案的分析时间、次数、说明
|
|
|
+ }
|
|
|
return code;
|
|
|
}
|
|
|
|
|
|
//处理站点的实时样本曲线
|
|
|
private static ResponseCode analysisDataForRealBySet(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules, OrdWarnPlanTempStep thisTempStep){
|
|
|
- ResponseCode code = ResponseCode.RESULT_NORMAL;
|
|
|
String step = "Start to deep analysis";
|
|
|
+ ResponseCode code = ResponseCode.RESULT_NORMAL;
|
|
|
long curTime = TimeTool.getCurMsUTC();
|
|
|
final String siteId = rules.get(0).getObjId();
|
|
|
SiteSampleDataResult siteSampleData = null;
|
|
|
@@ -182,7 +188,7 @@ public class SiteDataWarnHandler {
|
|
|
Collections.sort(siteSampleData.getData().get(0).getRecords(), new Comparator<SiteSampleGroupItem>() {
|
|
|
@Override
|
|
|
public int compare(SiteSampleGroupItem o1, SiteSampleGroupItem o2) {
|
|
|
- return Long.compare(o1.getTime(),o2.getTime());//按时间升序排列
|
|
|
+ return Long.compare(o1.getTime(), o2.getTime());
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -223,7 +229,7 @@ public class SiteDataWarnHandler {
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
break;
|
|
|
}else {
|
|
|
- matched = matched || (pkRes==1?true:false);
|
|
|
+ matched = matched || (pkRes==COMPARE_TURE?true:false);
|
|
|
}
|
|
|
}
|
|
|
if (code != ResponseCode.RESULT_NORMAL)
|
|
|
@@ -231,16 +237,16 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
if (!matched){//本次没有匹配成功
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(0);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_FALSE);
|
|
|
thisTempStep.setFirstMatchSampleTime(0L);
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
continue;
|
|
|
}//本次匹配成功进入下一步
|
|
|
|
|
|
- if (thisTempStep.getLastCompareSampleResult() <= 0){//上一次没有匹配成功
|
|
|
+ if (thisTempStep.getLastCompareSampleResult() <= COMPARE_FALSE){//上一次没有匹配成功
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
continue;
|
|
|
}//上一次匹配成功了进入下一步
|
|
|
@@ -249,7 +255,7 @@ public class SiteDataWarnHandler {
|
|
|
long diffMatch = sampleRecordTm-thisTempStep.getLastCompareSampleTime();//两个最近匹配样本之间的采集时间差(单位:毫秒)
|
|
|
if (diffMatch > triggerEventPeriodSwitch){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可认为重新计数
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
@@ -258,7 +264,7 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
@@ -269,28 +275,28 @@ public class SiteDataWarnHandler {
|
|
|
if (StringUtils.isEmpty(thisTempStep.getLastEventId())){//之前无预警事件
|
|
|
if (matchLen < triggerEventPeriodSwitch){//还得持续等待,达不到触发事件的累计时长
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
if (thisTempStep.getFirstMatchSampleTime() <= 0)
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
}else {//触发一个新的事件
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
//[!!!]do not change the FirstMatchSampleTime[!!!]
|
|
|
}
|
|
|
}else {//之前有预警事件
|
|
|
- if (planDetail.getMergeToEvent() == 0 || thisTempStep.getLastEventAction() >= 2){//之前的预警事件已处理,则可认为进行重新计数
|
|
|
+ if (planDetail.getMergeToEvent() == 0 || thisTempStep.getLastEventAction() >= EventAction.DONE){//之前的预警事件已处理,则可认为进行重新计数
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
}else {//之前的预警事件未处理,则更新预警事件的样本截止时刻
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
eventId2NewEndUTC.put(thisTempStep.getLastEventId(), sampleRecordTm);
|
|
|
}
|
|
|
}
|
|
|
@@ -301,8 +307,8 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
//处理站点时段的小时统计数据
|
|
|
private static ResponseCode analysisDataForReportByHour(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules, OrdWarnPlanTempStep thisTempStep){
|
|
|
- ResponseCode code = ResponseCode.RESULT_NORMAL;
|
|
|
String step = "Start to deep analysis";
|
|
|
+ ResponseCode code = ResponseCode.RESULT_NORMAL;
|
|
|
long curTime = TimeTool.getCurMsUTC();
|
|
|
final String siteId = rules.get(0).getObjId();
|
|
|
SiteStatsDataResult siteStatsData = null;
|
|
|
@@ -317,7 +323,7 @@ public class SiteDataWarnHandler {
|
|
|
do {
|
|
|
String[] storeTagAndBackTag = rules.get(0).getConditions().get(0).getFormat().split("@");
|
|
|
if (storeTagAndBackTag == null || storeTagAndBackTag.length < 2){
|
|
|
- step = String.format("Format param valid in rules");
|
|
|
+ step = String.format("Format param invalid in rules");
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
break;
|
|
|
}
|
|
|
@@ -396,7 +402,7 @@ public class SiteDataWarnHandler {
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
break;
|
|
|
}else {
|
|
|
- matched = matched || (pkRes==1?true:false);
|
|
|
+ matched = matched || (pkRes==COMPARE_TURE?true:false);
|
|
|
}
|
|
|
}
|
|
|
if (code != ResponseCode.RESULT_NORMAL)
|
|
|
@@ -404,7 +410,7 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
if (!matched){//本次没有匹配成功
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(0);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_FALSE);
|
|
|
thisTempStep.setFirstMatchSampleTime(0L);
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
@@ -412,14 +418,14 @@ public class SiteDataWarnHandler {
|
|
|
}//本次匹配成功进入下一步
|
|
|
|
|
|
long triggerEventPeriodSwitch = planDetail.getFrequency()*planDetail.getThreshold();//触发预警事件的最小时长(单位:小时)
|
|
|
- if (thisTempStep.getLastCompareSampleResult() <= 0){//上一次没有匹配成功
|
|
|
+ if (thisTempStep.getLastCompareSampleResult() <= COMPARE_FALSE){//上一次没有匹配成功
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
if (triggerEventPeriodSwitch <= 1){//触发事件
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
}
|
|
|
continue;
|
|
|
@@ -428,12 +434,12 @@ public class SiteDataWarnHandler {
|
|
|
long diffMatch = (sampleRecordTm-thisTempStep.getLastCompareSampleTime())/TimeTool.MS_ONE_HOUR;//两个最近匹配样本之间的采集时间差(单位:小时)
|
|
|
if (diffMatch > triggerEventPeriodSwitch){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可认为重新计数
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
if (triggerEventPeriodSwitch <= 1){//触发事件
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
}else {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
@@ -444,12 +450,12 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
if (triggerEventPeriodSwitch <= 1){//触发事件
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
}else {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
@@ -462,34 +468,34 @@ public class SiteDataWarnHandler {
|
|
|
if (StringUtils.isEmpty(thisTempStep.getLastEventId())){//之前无预警事件
|
|
|
if (matchLen < triggerEventPeriodSwitch){//还得持续等待,达不到触发事件的累计时长
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
if (thisTempStep.getFirstMatchSampleTime() <= 0){
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
if (triggerEventPeriodSwitch <= 1){//补充触发事件
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
}
|
|
|
}
|
|
|
}else {//触发一个新的事件
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
//[!!!]do not change the FirstMatchSampleTime[!!!]
|
|
|
}
|
|
|
}else {//之前有预警事件
|
|
|
if (planDetail.getMergeToEvent() == 0 || thisTempStep.getLastEventAction() >= 2){//之前的预警事件已处理,则可认为进行重新计数
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
|
|
|
if (triggerEventPeriodSwitch <= 1){//触发事件
|
|
|
thisTempStep.setLastEventId("新事件ID");
|
|
|
thisTempStep.setLastEventTime(curTime);
|
|
|
- thisTempStep.setLastEventAction(1);
|
|
|
+ thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
}else {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
@@ -497,7 +503,7 @@ public class SiteDataWarnHandler {
|
|
|
}
|
|
|
}else {//之前的预警事件未处理,则更新预警事件的样本截止时刻
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
- thisTempStep.setLastCompareSampleResult(1);
|
|
|
+ thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
eventId2NewEndUTC.put(thisTempStep.getLastEventId(), sampleRecordTm);
|
|
|
}
|
|
|
}
|