四两拨千斤

Posted a-a-r-o-n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四两拨千斤相关的知识,希望对你有一定的参考价值。

  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     }

 

以上是关于四两拨千斤的主要内容,如果未能解决你的问题,请参考以下文章

金融篇-保证金制度(四两拨千斤)

四两拨千斤——你不知道的VScode编码TypeScript的技巧

程序员不要总想着四两拨千斤

四两拨千斤,一招搞定数字格式化问题

四两拨千斤,GCC编译器(同余模) - HDU 3123

四两拨千斤,如何做到自然语言预训练加速十倍