1 public void hazardAlertJob(){ 2 Map<String,Map<String,Object>> alertTranNoMaps=new HashMap<String,Map<String,Object>>(); 3 EmConfig config=emConfigMapper.select(); 4 Long startTranNo=0L; 5 if(config!=null&&config.getHazardDataTranNo()!=null){ 6 startTranNo=config.getHazardDataTranNo(); 7 } 8 Long maxTranNo=hazardMonitorDataMapper.selectMaxTranNo(); 9 if(maxTranNo==null||startTranNo>=maxTranNo){ 10 return; 11 } 12 List<Map<String,Object>> list=hazardMonitorDataMapper.selectAlertRecord(startTranNo, maxTranNo); 13 for(Map<String,Object> map:list){ 14 Long alertTranNo=null; 15 Boolean alertIsReported=null; 16 Date alertTime=null; 17 String deviceCode=(String)map.get("deviceCode"); 18 String deviceName=(String)map.get("deviceName"); 19 Long tranNo=((BigDecimal)map.get("tranNo")).longValue(); 20 Date timeCreated=(Date)map.get("timeCreated"); 21 Map<String,Object> res=alertTranNoMaps.get(deviceCode); 22 if(res!=null){//上一条已经触发阀值,取存储的值 23 alertTranNo=(Long)res.get("alertTranNo"); 24 alertIsReported=(Boolean)res.get("alertIsReported"); 25 alertTime=(Date)res.get("alertTime"); 26 }else{ 27 Object atn=map.get("alertTranNo"); 28 alertTranNo=atn==null?null:((BigDecimal)atn).longValue(); 29 Object air=map.get("alertIsReported"); 30 alertIsReported=air==null?null:(map.get("alertIsReported").equals("1")?true:false); 31 Object atc=map.get("alertTime"); 32 alertTime=atc==null?null:(Date)atc; 33 } 34 Map<String,Object> newMap=new HashMap<String,Object>(); 35 newMap.put("alertTranNo", tranNo); 36 newMap.put("alertTime", timeCreated); 37 38 boolean isContinuous =false; 39 if(alertTranNo!=null&&alertTime!=null){ 40 /* Calendar calendar=Calendar.getInstance(); 41 calendar.setTime(timeCreated); 42 calendar.add(Calendar.SECOND, -10); 43 Calendar alertCalendar=Calendar.getInstance(); 44 alertCalendar.setTime(alertTime); 45 //if(calendar.compareTo(alertCalendar)<=0&&tranNo-alertTranNo.longValue()==1){ 46 if(calendar.compareTo(alertCalendar)<=0){//10秒内计为连续批次,因数据采集的时间无规律,有5秒、10更新采集的 47 isContinuous=true; 48 }*/ 49 50 Map<String,Object> frontData=hazardMonitorDataMapper.selectFrontFirstData(deviceCode, timeCreated); 51 if(frontData!=null&&((Date)frontData.get("timeCreated")).compareTo(alertTime)==0){//前一个数据与设备表中的已经报警过的日期相等,则为连续记录 52 isContinuous=true; 53 } 54 } 55 56 newMap.put("alertIsReported", isContinuous); 57 alertTranNoMaps.put(deviceCode, newMap); 58 hazardMonitorDeviceMapper.updateAlertTranNo(deviceCode, tranNo, isContinuous,timeCreated); 59 if(!isContinuous){ 60 continue; 61 } 62 63 if(alertIsReported!=null&&alertIsReported==false){//连续的且上一次没有生成报警记录 64 AlertInfo info=new AlertInfo(); 65 info.setMonitoringPoint(deviceName); 66 info.setEquipmentType(String.valueOf(FinalStaticValues.WEIXIANYUAN)); 67 info.setAlertTime((Date)timeCreated); 68 BigDecimal dataValue=(BigDecimal)map.get("dataValue"); 69 BigDecimal hValue=(BigDecimal)map.get("hValue"); 70 BigDecimal hhValue=(BigDecimal)map.get("hhValue"); 71 BigDecimal lValue=(BigDecimal)map.get("lValue"); 72 BigDecimal llValue=(BigDecimal)map.get("llValue"); 73 String alertLevel=null; 74 String alertInfo="监测值:"+dataValue; 75 BigDecimal rate=null; 76 if(dataValue.compareTo(hhValue)>=0){ 77 alertLevel="HH"; 78 alertInfo+=",高二级报警(HH:"+hhValue+")"; 79 }else if(dataValue.compareTo(hValue)>=0){ 80 alertLevel="H"; 81 alertInfo+=",高一级报警(H:"+hValue+")"; 82 }else if(dataValue.compareTo(llValue)<=0){ 83 alertLevel="LL"; 84 alertInfo+=",低二级报警(LL:"+llValue+")"; 85 }else if(dataValue.compareTo(lValue)<=0){ 86 alertLevel="L"; 87 alertInfo+=",低一级报警(L:"+lValue+")"; 88 } 89 if(alertLevel.equals("HH")||alertLevel.equals("H")){ 90 if(hValue.doubleValue()==0){ 91 rate=dataValue; 92 }else{ 93 rate=dataValue.subtract(hValue).divide(hValue,3, BigDecimal.ROUND_HALF_UP); 94 } 95 }else if(alertLevel.equals("LL")||alertLevel.equals("L")){ 96 if(lValue.doubleValue()==0){ 97 rate=dataValue; 98 }else{ 99 rate=dataValue.subtract(lValue).divide(lValue).setScale(3, BigDecimal.ROUND_HALF_UP); 100 } 101 } 102 info.setAlertInfo(alertInfo); 103 info.setAlertLevel(alertLevel); 104 info.setEquipmentId(deviceCode); 105 info.setEntId((String)map.get("companyId")); 106 info.setCurrentValue(String.valueOf(dataValue)); 107 info.setRate(rate.doubleValue()==0?"0":rate.toString()); 108 info.setlValue(lValue.doubleValue()); 109 info.setLlValue(llValue.doubleValue()); 110 info.sethValue(hValue.doubleValue()); 111 info.setHhValue(hhValue.doubleValue()); 112 alertInfoMapper.insert2(info); 113 } 114 } 115 emConfigMapper.update("HAZARD_DATA_TRAN_NO",maxTranNo); 116 }
原文地址:https://www.cnblogs.com/A-a-r-o-n/p/8290013.html
时间: 2024-10-07 07:59:08