liwei19941102 2 rokov pred
rodič
commit
c6ce6cf8b4

+ 4 - 4
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblRuleExecute.java

@@ -23,7 +23,7 @@ public class TblRuleExecute extends BaseEntity {
     private static final long serialVersionUID=1L;
 
     /**
-     * 
+     *
      */
     @TableId(value = "id")
     private String id;
@@ -48,11 +48,11 @@ public class TblRuleExecute extends BaseEntity {
      */
     private String remark;
     /**
-     * 
+     *
      */
     private String expr1;
     /**
-     * 
+     *
      */
     private String expr2;
     /**
@@ -62,6 +62,6 @@ public class TblRuleExecute extends BaseEntity {
     /**
      * 条件id
      */
-    private Long executeId;
+    private Long filterId;
 
 }

+ 5 - 5
ruoyi-system/src/main/java/com/ruoyi/data/domain/bo/TblRuleExecuteBo.java

@@ -26,25 +26,25 @@ public class TblRuleExecuteBo extends BaseEntity {
     /**
      *
      */
-    @NotBlank(message = "不能为空", groups = { EditGroup.class })
+//    @NotBlank(message = "不能为空", groups = { EditGroup.class })
     private String id;
 
     /**
      * 规则Id
      */
-    @NotBlank(message = "规则Id不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "规则Id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String sn;
 
     /**
      * 条件Id
      */
-    @NotBlank(message = "条件Id不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "条件Id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String name;
 
     /**
      * 设备ID
      */
-//    @NotNull(message = "设备ID不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotNull(message = "设备ID不/能为空", groups = { AddGroup.class, EditGroup.class })
     private Long equipmentId;
 
     /**
@@ -105,7 +105,7 @@ public class TblRuleExecuteBo extends BaseEntity {
      * 条件id
      */
 //    @NotNull(message = "条件id不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long executeId;
+    private Long filterId;
 
 
 }

+ 4 - 4
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblRuleExecuteVo.java

@@ -22,7 +22,7 @@ public class TblRuleExecuteVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String id;
@@ -58,13 +58,13 @@ public class TblRuleExecuteVo implements Serializable {
     private String remark;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr1;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private String expr2;
@@ -79,7 +79,7 @@ public class TblRuleExecuteVo implements Serializable {
      * 条件id
      */
     @ExcelProperty(value = "条件id")
-    private Long executeId;
+    private Long filterId;
 
 
 }

+ 28 - 3
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java

@@ -17,9 +17,7 @@ import com.ruoyi.data.domain.*;
 import com.ruoyi.data.domain.bo.*;
 import com.ruoyi.data.domain.vo.*;
 import com.ruoyi.data.mapper.*;
-import com.ruoyi.data.service.ITblEquipmentSbookService;
-import com.ruoyi.data.service.MqttService;
-import com.ruoyi.data.service.WebsocketService;
+import com.ruoyi.data.service.*;
 import com.ruoyi.system.service.ISysDictTypeService;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
@@ -56,6 +54,10 @@ public class MqttServiceImpl implements MqttService {
 
     private final ITblEquipmentSbookService equipmentSbookService;
 
+    private final ITblRuleService iTblRuleService;
+
+    private final ITblRuleFilterService iTblRuleFilterService;
+
     @Value("${mqtt.url}")
     private String mqttUrl;
 
@@ -114,6 +116,7 @@ public class MqttServiceImpl implements MqttService {
                     }
                     //TODO 缓存获取对应设备的缓存数据
                     TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
+                    filterData(dataBo);
                     if (tblSensor != null) {
                         //保存到数据库
 
@@ -217,6 +220,28 @@ public class MqttServiceImpl implements MqttService {
         }
     }
 
+    public void filterData(MqttSensorDataBo dataBo){
+          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());
+                   }
+              });
+          });
+    }
+
+    public void ruleFilter(SensorDataBo bo,Long ruleId){
+        TblRuleFilterBo tblRuleFilterBo = new TblRuleFilterBo();
+        tblRuleFilterBo.setRuleId(Long.toString(ruleId));
+        List<TblRuleFilterVo> tblRuleFilterVoList = iTblRuleFilterService.queryList(tblRuleFilterBo);
+        tblRuleFilterVoList.forEach(i->{
+
+        });
+    }
+
 
     public void updateNowRecord(TblSensorRecordBo bo){
            TblSensorRecordBo tblSensorRecordBo = new TblSensorRecordBo();

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/TblRuleExecuteServiceImpl.java

@@ -68,7 +68,7 @@ public class TblRuleExecuteServiceImpl implements ITblRuleExecuteService {
         lqw.eq(StringUtils.isNotBlank(bo.getExpr1()), TblRuleExecute::getExpr1, bo.getExpr1());
         lqw.eq(StringUtils.isNotBlank(bo.getExpr2()), TblRuleExecute::getExpr2, bo.getExpr2());
         lqw.eq(bo.getRuleId() != null, TblRuleExecute::getRuleId, bo.getRuleId());
-        lqw.eq(bo.getExecuteId() != null, TblRuleExecute::getExecuteId, bo.getExecuteId());
+        lqw.eq(bo.getFilterId() != null, TblRuleExecute::getFilterId, bo.getFilterId());
         return lqw;
     }
 

+ 1 - 1
ruoyi-system/src/main/resources/mapper/data/TblRuleExecuteMapper.xml

@@ -18,7 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
         <result property="ruleId" column="rule_id"/>
-        <result property="executeId" column="execute_id"/>
+        <result property="filterId;" column="filter_id"/>
     </resultMap>
 
 

+ 179 - 21
ruoyi-ui-vue3/src/views/rules/add.vue

@@ -111,7 +111,7 @@
             </el-descriptions>
           </el-card>
         </el-col>
-        <el-col :span="12" style="padding-right: 5px;margin-top: 10px">
+        <el-col :span="12" style="padding-right: 5px;margin-top: 10px" v-if="objId != null">
           <el-card>
             <template #header>
               <div class="card-header">
@@ -121,7 +121,7 @@
                 </div>
               </div>
             </template>
-            <el-table :data="tjdata">
+            <el-table :data="tjdata" @cell-click="selectRow">
               <el-table-column label="过滤方式" prop="filterWay"></el-table-column>
               <el-table-column label="过滤算法" prop="filterAlgorithm"></el-table-column>
               <el-table-column prop="sn" label="操作">
@@ -137,7 +137,8 @@
                     </el-button>
                     <el-popconfirm title="确定删除该编码?" @confirm="">
                       <template #reference>
-                        <el-button link><el-tooltip effect="dark" content="删除"><el-icon @click="godelRuleFilter(scope.row)">
+                        <el-button link><el-tooltip effect="dark" content="删除"><el-icon
+                              @click="godelRuleFilter(scope.row)">
                               <Delete />
                             </el-icon></el-tooltip></el-button>
                       </template>
@@ -150,22 +151,47 @@
 
           </el-card>
         </el-col>
-        <el-col :span="12" style="padding-left: 5px;margin-top: 10px">
+        <el-col :span="12" style="padding-left: 5px;margin-top: 10px" v-if="objId != null">
           <el-card>
             <template #header>
               <div class="card-header">
-                <span>执行</span>
+                <span>执行({{ filterObj.name }})</span>
                 <div>
-                  <el-button type="primary" plain>添加</el-button>
+                  <el-button type="primary" plain @click="goAddRuleEXecute">添加</el-button>
                 </div>
               </div>
             </template>
             <el-table :data="zxdata">
-              <el-table-column label="设备"></el-table-column>
-              <el-table-column label="执行动作"></el-table-column>
-              <el-table-column label="操作"></el-table-column>
+              <el-table-column label="设备">
+                <template #default="scope">
+                  <span>{{ getDeviceName(scope.row) }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="执行动作" prop="executeAction"></el-table-column>
+              <el-table-column label="操作">
+                <template #default="scope">
+                  <div>
+                    <el-button link @click="
+                    ">
+                      <el-tooltip effect="dark" content="编辑">
+                        <el-icon @click="goupdateExecute(scope.row)">
+                          <Edit />
+                        </el-icon>
+                      </el-tooltip>
+                    </el-button>
+                    <el-popconfirm title="确定删除该编码?" @confirm="">
+                      <template #reference>
+                        <el-button link><el-tooltip effect="dark" content="删除"><el-icon
+                              @click="godelRuleExecute(scope.row)">
+                              <Delete />
+                            </el-icon></el-tooltip></el-button>
+                      </template>
+                    </el-popconfirm>
+                  </div>
+                </template>
+              </el-table-column>
             </el-table>
-
+            <!-- goupdateExecute -->
           </el-card>
         </el-col>
       </el-row>
@@ -189,8 +215,6 @@
           <el-input v-model="ruleFilterParam.formula" placeholder="请输入公式" />
         </el-form-item>
       </el-form>
-
-
       <template #footer>
         <span class="dialog-footer">
           <el-button @click="dialogFormVisible = false">取消</el-button>
@@ -200,6 +224,33 @@
         </span>
       </template>
     </el-dialog>
+
+    <el-dialog v-model="dialogFormExVisible" :title="dialogExTitle">
+      <el-form :model="ruleExecuteParam">
+        <el-form-item label="名称" label-width="140px">
+          <el-input v-model="ruleExecuteParam.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="设备" label-width="140px">
+          <el-select v-model="ruleExecuteParam.equipmentId" value-key="id" filterable placeholder="Select">
+            <el-option v-for="item in deviceList" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="执行动作" label-width="140px">
+          <el-input v-model="ruleExecuteParam.executeAction" placeholder="请输入执行动作" />
+        </el-form-item>
+        <el-form-item label="备注" label-width="140px">
+          <el-input v-model="ruleExecuteParam.remark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogFormExVisible = false">取消</el-button>
+          <el-button type="primary" @click="saveRuleExecute()">
+            确认
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -209,7 +260,10 @@ import { useRoute, useRouter } from "vue-router";
 import { listEquipmentSbook } from "@/api/data/equipmentSbook";
 import { listSensor, addSensor } from "@/api/data/sensor"
 import { addRule, getRule, updateRule } from "@/api/data/rule"
-import { addRuleFilter, getRuleFilter, updateRuleFilter, listRuleFilter,delRuleFilter } from "@/api/data/ruleFilter"
+import { addRuleFilter, getRuleFilter, updateRuleFilter, listRuleFilter, delRuleFilter } from "@/api/data/ruleFilter"
+import { addRuleExecute, getRuleExecute, updateRuleExecute, listRuleExecute, delRuleExecute } from "@/api/data/ruleExecute"
+
+import { ElMessage } from 'element-plus'
 
 
 const route = useRoute();
@@ -222,6 +276,8 @@ const zxdata = ref([]);
 const deviceList = ref([]);
 const sensorList = ref([]);
 const dialogFormVisible = ref(false)
+const dialogFormExVisible = ref(false)
+const dialogExTitle = ref("添加执行动作")
 const dialogTitle = ref("添加条件")
 const ruleFilterParam = ref({
   id: null,
@@ -233,6 +289,18 @@ const ruleFilterParam = ref({
   formula: ''
 })
 
+const ruleExecuteParam = ref({
+  id: null,
+  ruleId: null,
+  filterId: null,
+  name: '',
+  equipmentId: "",
+  executeAction: "",
+  remark: ''
+})
+
+const filterObj = ref({ id: null, name: "" })
+
 const ruleParam = ref({
   id: "",
   sn: "",
@@ -252,6 +320,15 @@ const getEquipmentSbookList = () => {
   })
 }
 
+const getDeviceName = (item) => {
+  for (var index in deviceList.value) {
+    if (deviceList.value[index].id = item.equipmentId) {
+      return deviceList.value[index].name;
+    }
+    return item.equipmentId;
+  }
+}
+
 const selectEquipment = (value) => {
   console.log(value);
   var obj = {
@@ -311,15 +388,44 @@ const saveRuleFilter = () => {
   }
 }
 
+const saveRuleExecute = () => {
+  if (ruleExecuteParam.value.id != null) {
+    ruleExecuteParam.value.ruleId = objId;
+    ruleExecuteParam.value.filterId = filterObj.value.id
+    updateRuleExecute(ruleExecuteParam.value).then(res => {
+      if (res.code == 200) {
+        getRuleExecuteList();
+        dialogFormExVisible.value = false
+      }
+    })
+  } else {
+    ruleExecuteParam.value.ruleId = objId;
+    ruleExecuteParam.value.filterId = filterObj.value.id
+    addRuleExecute(ruleExecuteParam.value).then(res => {
+      if (res.code == 200) {
+        getRuleExecuteList();
+        dialogFormExVisible.value = false
+      }
+    })
+  }
+}
+
+const goupdateExecute = (item) => {
+  dialogExTitle.value = "修改执行动作"
+  getRuleExecute(item.id).then(res => {
+    ruleExecuteParam.value = res.data
+    dialogFormExVisible.value = true;
+  })
+}
+
 const goupdate = (item) => {
-  console.log(item)
+  dialogTitle.value = "修改条件"
   getRuleFilter(item.id).then(res => {
     ruleFilterParam.value = res.data
     dialogFormVisible.value = true;
   })
 }
 
-
 const addFilter = () => {
   ruleFilterParam.value = {
     id: null,
@@ -339,16 +445,64 @@ const getFilterList = () => {
   })
 }
 
-const godelRuleFilter = (item) =>{
-  delRuleFilter(item.id).then(res=>{
-       if(res.code == 200){
-        getFilterList();
-       }
+const godelRuleFilter = (item) => {
+  delRuleFilter(item.id).then(res => {
+    if (res.code == 200) {
+      getFilterList();
+    }
+  })
+}
+
+const godelRuleExecute = (item) => {
+  delRuleExecute(item.id).then(res => {
+    if (res.code == 200) {
+      getRuleExecuteList();
+    }
+  })
+}
+
+const openMessage = () => {
+  ElMessage({
+    message: '请选择规则条件',
+    type: 'warning',
+  })
+}
+
+const goAddRuleEXecute = () => {
+  ruleExecuteParam.value = {
+    id: null,
+    ruleId: null,
+    executeId: null,
+    name: '',
+    equipmentId: "",
+    execute_action: "",
+    remark: ''
+  }
+  if (filterObj.value.id != null) {
+    dialogFormExVisible.value = true
+  } else {
+    openMessage();
+  }
+}
+
+const selectRow = (row, column, event) => {
+  filterObj.value.id = row.id;
+  filterObj.value.name = row.filterWay;
+  console.log(filterObj.value)
+  getRuleExecuteList();
+}
+
+const getRuleExecuteList = () => {
+  listRuleExecute({ filterId: filterObj.value.id, pageSize: 10000 }).then(res => {
+    console.log(res);
+    zxdata.value = res.rows;
   })
 }
 
 getEquipmentSbookList();
-getFilterList();
+if (objId != null) {
+  getFilterList();
+}
 
 </script>
 
@@ -363,4 +517,8 @@ getFilterList();
   display: inline-flex;
   max-width: 160px;
 }
+
+.el-table .success-row {
+  --el-table-tr-bg-color: var(--el-color-success-light-9);
+}
 </style>