Jelajahi Sumber

告警故障

liwei19941102 2 tahun lalu
induk
melakukan
157e2ba190

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblBreakdown.java

@@ -25,7 +25,7 @@ public class TblBreakdown extends BaseEntity {
     private static final long serialVersionUID=1L;
 
     /**
-     * 
+     *
      */
     @TableId(value = "id")
     private Long id;
@@ -36,7 +36,7 @@ public class TblBreakdown extends BaseEntity {
     /**
      * 故障值
      */
-    private Long val;
+    private String val;
     /**
      * 设备id
      */

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblWarn.java

@@ -25,7 +25,7 @@ public class TblWarn extends BaseEntity {
     private static final long serialVersionUID=1L;
 
     /**
-     * 
+     *
      */
     @TableId(value = "id")
     private Long id;
@@ -36,7 +36,7 @@ public class TblWarn extends BaseEntity {
     /**
      * 告警值
      */
-    private Long val;
+    private String val;
     /**
      * 设备id
      */

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/data/domain/bo/TblBreakdownBo.java

@@ -39,7 +39,7 @@ public class TblBreakdownBo extends BaseEntity {
      * 故障值
      */
     @NotNull(message = "故障值不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long val;
+    private String val;
 
     /**
      * 设备id

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/data/domain/bo/TblWarnBo.java

@@ -39,7 +39,7 @@ public class TblWarnBo extends BaseEntity {
      * 告警值
      */
 //    @NotNull(message = "告警值不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long val;
+    private String val;
 
     /**
      * 设备id

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblBreakdownVo.java

@@ -24,7 +24,7 @@ public class TblBreakdownVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -39,7 +39,7 @@ public class TblBreakdownVo implements Serializable {
      * 故障值
      */
     @ExcelProperty(value = "故障值")
-    private Long val;
+    private String val;
 
     /**
      * 设备id

+ 3 - 3
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblRuleFilterVo.java

@@ -22,7 +22,7 @@ public class TblRuleFilterVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String id;
@@ -70,13 +70,13 @@ public class TblRuleFilterVo implements Serializable {
     private String remark;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr1;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr2;

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblWarnVo.java

@@ -24,7 +24,7 @@ public class TblWarnVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -39,7 +39,7 @@ public class TblWarnVo implements Serializable {
      * 告警值
      */
     @ExcelProperty(value = "告警值")
-    private Long val;
+    private String val;
 
     /**
      * 设备id

+ 39 - 11
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java

@@ -65,6 +65,8 @@ public class MqttServiceImpl implements MqttService {
 
     private final ITblWarnService iTblWarnService;
 
+    private final ITblRuleExecuteService iTblRuleExecuteService;
+
     @Value("${mqtt.url}")
     private String mqttUrl;
 
@@ -90,7 +92,7 @@ public class MqttServiceImpl implements MqttService {
         websocketService.sendMessageAll(mqttStr);
         MqttSensorDataBo dataBo = JSONUtil.toBean(mqttStr, MqttSensorDataBo.class);
         TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
-        filterData(dataBo);
+        filterData(dataBo,tblSensor);
         //数据保存到数据库
         if(saveAndForward) {
             // 解析数据 异步线程执行
@@ -126,7 +128,7 @@ public class MqttServiceImpl implements MqttService {
                     }
                     //TODO 缓存获取对应设备的缓存数据
                     TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
-                    filterData(dataBo);
+                    filterData(dataBo,tblSensor);
                     if (tblSensor != null) {
                         //保存到数据库
 
@@ -230,20 +232,20 @@ public class MqttServiceImpl implements MqttService {
         }
     }
 
-    public void filterData(MqttSensorDataBo dataBo){
+    public void filterData(MqttSensorDataBo dataBo,TblSensor tblSensor){
           TblRuleBo tblRuleBo = new TblRuleBo();
           tblRuleBo.setSensorId(Long.valueOf(dataBo.getSensorId()));
           List<TblRuleVo> ruleVoList = iTblRuleService.queryList(tblRuleBo);
           dataBo.getData().forEach(i->{
               ruleVoList.forEach(ruleVo->{
                    if(i.getName().equals(ruleVo.getTriggeringCondition())){
-                       ruleFilter(i,ruleVo.getId());
+                       ruleFilter(i,ruleVo.getId(),tblSensor);
                    }
               });
           });
     }
 
-    public void ruleFilter(SensorDataBo bo,Long ruleId){
+    public void ruleFilter(SensorDataBo bo,Long ruleId,TblSensor tblSensor){
         TblRuleFilterBo tblRuleFilterBo = new TblRuleFilterBo();
         tblRuleFilterBo.setRuleId(Long.toString(ruleId));
         List<TblRuleFilterVo> tblRuleFilterVoList = iTblRuleFilterService.queryList(tblRuleFilterBo);
@@ -251,14 +253,10 @@ public class MqttServiceImpl implements MqttService {
             String value = bo.getValue();
               if(StringUtils.isNotBlank(i.getFormula())){
                   try {
-
                       Context context = Context.enter();
                       Scriptable scope = context.initStandardObjects();
                       String script = "function format(data) { return "+i.getFormula()+" ; } format("+value+");";
                       Object result = context.evaluateString(scope, script, "<cmd>", 1, null);
-
-
-
                       value = (String) result;
                       System.out.println(value);
                   } catch (Exception e) {
@@ -269,15 +267,16 @@ public class MqttServiceImpl implements MqttService {
               if(StringUtils.isNotBlank(i.getFilterAlgorithm())){
                   Context context = Context.enter();
                   Scriptable scope = context.initStandardObjects();
-
                       String script = "function isFilter(data,up,down) { return "+i.getFilterAlgorithm()+" ; }";
                       try {
-
                           script+="isFilter("+ value+","+i.getUpperLimit()+","+i.getLowerLimit()+")";
                           Object result = context.evaluateString(scope, script, "<cmd>", 1, null);
                           isFilter = (Boolean) result;
 //                          isFilter = (Boolean) inv.invokeFunction("isFilter", value,i.getUpperLimit(),i.getLowerLimit() );
                           System.out.println(isFilter);
+                          if(isFilter){
+                              ruleExecute(bo,i.getId(),tblSensor);
+                          }
                       } catch (Exception e) {
                           System.out.println("表达式runtime错误:" + e.getMessage());
                       }
@@ -288,6 +287,35 @@ public class MqttServiceImpl implements MqttService {
     private void validEntityBeforeSave(TblSensorRecord entity){
         //TODO 做一些数据校验,如唯一约束
     }
+
+    private void ruleExecute(SensorDataBo bo,String id,TblSensor tblSensor){
+            TblRuleExecuteBo executeBo = new TblRuleExecuteBo();
+            executeBo.setFilterId(Long.valueOf(id));
+            List<TblRuleExecuteVo> list = iTblRuleExecuteService.queryList(executeBo);
+            for(TblRuleExecuteVo vo:list){
+                if(vo.getExecuteAction().equals("warn")){
+                      TblWarnBo warn = new TblWarnBo();
+                      TblEquipmentSbookVo tblEquipment = equipmentSbookService.queryById(tblSensor.getDeviceId());
+                      warn.setName("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"数据异常");
+                      warn.setVal(bo.getValue());
+                      warn.setEquipmentId(tblEquipment.getId());
+                      warn.setEquipmentName(tblEquipment.getName());
+                      warn.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"数据异常,请注意");
+                      warn.setAlarmTime(new Date());
+                      iTblWarnService.insertByBo(warn);
+                } else if (vo.getExecuteAction().equals("breakbown")) {
+                    TblBreakdownBo tblBreakdownBo = new TblBreakdownBo();
+                    TblEquipmentSbookVo tblEquipment = equipmentSbookService.queryById(tblSensor.getDeviceId());
+                    tblBreakdownBo.setName("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"故障");
+                    tblBreakdownBo.setVal(bo.getValue());
+                    tblBreakdownBo.setEquipmentId(tblEquipment.getId());
+                    tblBreakdownBo.setEquipmentName(tblEquipment.getName());
+                    tblBreakdownBo.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"故障,请注意");
+                    tblBreakdownBo.setFaultTime(new Date());
+                    iTblBreakdownService.insertByBo(tblBreakdownBo);
+                }
+            }
+    }
     @Override
     public void createMqtt(TblMqttBo bo){
         LambdaQueryWrapper<TblMqtt> lqw = buildQueryWrapper(bo);