2 Achegas e24e3747ac ... dbabb4d6cb

Autor SHA1 Mensaxe Data
  liwei19941102 dbabb4d6cb Merge branch 'master' of http://git.xt.wenhq.top:8083/wenhongquan/iotc %!s(int64=2) %!d(string=hai) anos
  liwei19941102 a408f7df40 设备组织机构 %!s(int64=2) %!d(string=hai) anos

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/data/controller/TblEquipmentMqttController.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
+import com.ruoyi.data.domain.MqttObj;
 import lombok.RequiredArgsConstructor;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.*;
@@ -105,4 +106,10 @@ public class TblEquipmentMqttController extends BaseController {
                           @PathVariable Long[] ids) {
         return toAjax(iTblEquipmentMqttService.deleteWithValidByIds(Arrays.asList(ids), true));
     }
+
+    @GetMapping("/listByDeviceId")
+    public R<List<MqttObj>> listByDeviceId(MqttObj mqttObj) {
+        return R.ok(iTblEquipmentMqttService.getMqttListByDeviceId(mqttObj));
+    }
+
 }

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

@@ -134,5 +134,7 @@ public class TblEquipmentSbook extends BaseEntity {
      */
     private String expr2;
 
+    private String isDelete;
+
 
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/data/domain/bo/TblEquipmentOrganizationalBo.java

@@ -77,5 +77,7 @@ public class TblEquipmentOrganizationalBo extends TreeEntity<TblEquipmentOrganiz
 //    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
+    private String ancestors;
+
 
 }

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

@@ -32,13 +32,13 @@ public class TblEquipmentSbookBo extends BaseEntity {
     /**
      * 上层位置
      */
-    @NotNull(message = "上层位置不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotNull(message = "上层位置不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long equipmentTreeId;
 
     /**
      * 设备编码
      */
-    @NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class })
     private String sn;
 
     /**
@@ -50,7 +50,7 @@ public class TblEquipmentSbookBo extends BaseEntity {
     /**
      * 设备名称
      */
-    @NotBlank(message = "设备名称不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "设备名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String name;
 
     /**
@@ -74,7 +74,7 @@ public class TblEquipmentSbookBo extends BaseEntity {
     /**
      * 所属类型
      */
-    @NotNull(message = "所属类型不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotNull(message = "所属类型不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long equipmentTypeId;
 
     /**
@@ -209,5 +209,5 @@ public class TblEquipmentSbookBo extends BaseEntity {
 //    @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
     private String expr2;
 
-
+    private Integer isDelete;
 }

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

@@ -22,7 +22,7 @@ public class TblEquipmentOrganizationalVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -57,5 +57,6 @@ public class TblEquipmentOrganizationalVo implements Serializable {
     @ExcelProperty(value = "备注")
     private String remark;
 
+    private String ancestors;
 
 }

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/ITblEquipmentMqttService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.data.service;
 
+import com.ruoyi.data.domain.MqttObj;
 import com.ruoyi.data.domain.TblEquipmentMqtt;
 import com.ruoyi.data.domain.vo.TblEquipmentMqttVo;
 import com.ruoyi.data.domain.bo.TblEquipmentMqttBo;
@@ -46,4 +47,6 @@ public interface ITblEquipmentMqttService {
      * 校验并批量删除【请填写功能名称】信息
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    List<MqttObj> getMqttListByDeviceId(MqttObj mqttObj);
 }

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

@@ -1,12 +1,12 @@
 package com.ruoyi.data.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.domain.PageQuery;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.data.domain.MqttObj;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import com.ruoyi.data.domain.bo.TblEquipmentMqttBo;
@@ -107,4 +107,9 @@ public class TblEquipmentMqttServiceImpl implements ITblEquipmentMqttService {
         }
         return baseMapper.deleteBatchIds(ids) > 0;
     }
+    @Override
+    public List<MqttObj> getMqttListByDeviceId(MqttObj mqttObj){
+        List<MqttObj> list = baseMapper.selectMqttListByDeviceId(mqttObj);
+        return list;
+    }
 }

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

@@ -15,6 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
+        <result property="ancestors" column="ancestors"/>
     </resultMap>
 
 

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

@@ -36,6 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
+        <result property="isDelete" column="is_delete"/>
 <!--        <association property="equipment" column="id" javaType="TblEquipment" resultMap="TblEquipmentResult"/>-->
     </resultMap>
 

+ 45 - 2
ruoyi-ui-vue3/src/views/device/equipmentdash/add.vue

@@ -336,7 +336,42 @@
       </el-row>
     </el-card>
 
-
+    <el-card class="box-card" style="margin-top: 20px">
+      <template #header>
+        <div class="card-header">
+          <span>Mqtt分发</span>
+          <div>
+            <el-button type="primary" plain @click="addMqtt">添加</el-button>
+          </div>
+        </div>
+      </template>
+      <div>
+        <el-row>
+          <el-col :span="24">
+            <el-table :data="tabledata" border>
+              <el-table-column v-for="item in columns.filter(i => i.visible)" :prop="item.prop"
+                :label="item.label"></el-table-column>
+              <el-table-column label="操作" fixed="right">
+                <template #default="scope">
+                  <el-popconfirm title="解绑该设备?" @confirm="deleterow(scope.row)">
+                    <template #reference>
+                      <el-button link><el-tooltip effect="dark" content="删除"><el-icon>
+                            <Delete />
+                          </el-icon></el-tooltip></el-button>
+                    </template>
+                  </el-popconfirm>
+                </template>
+              </el-table-column>
+
+            </el-table>
+          </el-col>
+          <!-- <el-col :span="24" style="margin-top: 10px;">
+            <el-pagination style="float: right;" small background layout="prev, pager, next" :total="pagedata.total"
+              :page-size="pagedata.size" :current-page="pagedata.current" @current-change="onchangepage" class="mt-4" />
+          </el-col> -->
+        </el-row>
+      </div>
+    </el-card>
   </div>
 </template>
 
@@ -402,6 +437,12 @@ const equipmentObj = ref({
   pictures: ''
 })
 
+const pagedata = ref({
+  total: 0,
+  size: 10,
+  current: 1
+});
+
 const equipmentList = ref([]);
 const treeList = ref([]);
 const value = ref("1");
@@ -486,7 +527,9 @@ const getDetail = () => {
   })
 }
 
-
+const addMqtt = () =>{
+  
+}
 
 getDictsData("equipment_type", typeList);
 getDictsData("status_type", statusList);

+ 143 - 19
ruoyi-ui-vue3/src/views/device/equipmentdash/index.vue

@@ -7,9 +7,12 @@
             <div class="card-header">
               <span>设备台账区域</span>
               <div>
-                <el-button type="primary" plain>
+                <el-button type="primary" plain @click="addOrganizational()">
                   添加
                 </el-button>
+                <!-- <el-button type="primary" plain @click="updateOrganizational()">
+                  编辑
+                </el-button> -->
               </div>
             </div>
           </template>
@@ -17,7 +20,14 @@
             <LayTree :data="treeList" :tail-node-icon="false" :onlyIconControl="true" v-model:selectedKey="selectedKey"
               @node-click="handleClick">
               <template #title="{ data }">
-                {{ data.name }}
+                <div style="display: flex;flex-direction: row;justify-content: space-around;">
+                  <div @click="handleClickTitle(data)">{{ data.name }}</div>
+                  <div>
+                    <el-icon @click="updateOrganizational(data)">
+                      <Edit />
+                    </el-icon>
+                  </div>
+                </div>
               </template>
             </LayTree>
           </div>
@@ -117,7 +127,32 @@
       </el-col>
     </el-row>
 
-
+    <el-dialog v-model="dialogFormVisible" :title="dialogTitle">
+      <el-form :model="organizationalQuery">
+        <el-form-item label="上层位置" :label-width="formLabelWidth">
+          <el-tree-select v-model="organizationalQuery.parentId" :data="treeList"
+            :props="{ value: 'id', label: 'name', children: 'children' }" value-key="id" placeholder="请选上层位置"
+            check-strictly />
+        </el-form-item>
+        <el-form-item label="组织机构编码" :label-width="formLabelWidth">
+          <el-input v-model="organizationalQuery.sn" placeholder="请输入组织编码" />
+        </el-form-item>
+        <el-form-item label="组织机构名称" :label-width="formLabelWidth">
+          <el-input v-model="organizationalQuery.name" placeholder="请输入组织名称" />
+        </el-form-item>
+        <el-form-item label="所属公司" :label-width="formLabelWidth">
+          <el-input v-model="organizationalQuery.company" placeholder="请输入所属公司" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogFormVisible = false">取消</el-button>
+          <el-button type="primary" @click="saveOrgainzational()">
+            确认
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -127,8 +162,8 @@ import { LayTree } from "@layui/layui-vue";
 import "@layui/layui-vue/lib/index.css";
 
 import { useRoute, useRouter } from "vue-router";
-import { listEquipmentOrganizational } from "@/api/data/equipmentOrganizational"
-import { listEquipmentSbook } from "@/api/data/equipmentSbook"
+import { listEquipmentOrganizational, addEquipmentOrganizational, updateEquipmentOrganizational } from "@/api/data/equipmentOrganizational"
+import { listEquipmentSbook, updateEquipmentSbook } from "@/api/data/equipmentSbook"
 import { getDicts } from '@/api/system/dict/data'
 
 
@@ -142,22 +177,57 @@ const goadd = () => {
   router.push("/device/equipmentdash/add")
 }
 
+const dialogFormVisible = ref(false)
+
+const formLabelWidth = '140px'
+
+const dialogTitle = ref("新增组织架构")
+
+const form = {
+  name: '',
+  region: ''
+}
+
+const organizationalQuery = ref({
+  id: null,
+  parentId: "",
+  name: "",
+  sn: "",
+  company: '',
+  ancestors: ""
+})
+
+const organizationalParams = ref({
+  id: null,
+  parentId: "",
+  name: "",
+  sn: "",
+  company: '',
+  ancestors: ''
+})
 
 const goUpdate = (item) => {
   // router.push({ name: 'EquipmentDashAdd', params: { userId: '123' }})
-  router.push({ path: '/device/equipmentdash/add', query:{id:item.id} })
+  router.push({ path: '/device/equipmentdash/add', query: { id: item.id } })
   // router.push({ name: "EquipmentDashAdd", params: { item } })
   // router.push({path:"/device/equipmentdash/add",params:item})
 }
 
-const handleClick = (node) => {
+const handleClick = (node) =>{
+     console.log(node);
+}
+
+const handleClickTitle = (node) => {
   //console.log("Click Node:" + JSON.stringify(node));
   searchform.value.equipmentTreeId = node.id
+  organizationalParams.value = node
+  console.log(organizationalParams.value);
   getlistEquipmentSbook();
 };
 const selectedKey = ref(4);
 const treeList = ref([]);
 const typeList = ref([]);
+const organizationalList = ref([]);
 
 const pagedata = ref({
   total: 0,
@@ -212,6 +282,7 @@ const onchangepage = (page) => {
 const getTreedata = () => {
   listEquipmentOrganizational({ pageSize: 10000 }).then(res => {
     const { rows, total, page, size } = res;
+    organizationalList.value = res.rows;
     treeList.value = proxy.handleTree(res.rows, "id", "parentId");
   })
 }
@@ -245,23 +316,76 @@ const getDictsData = () => {
   })
 }
 
-const getTypeName = (scope) => {
-  var equipment = toRaw(scope)
-  if (equipment != null) {
-    for (var index in typeList.value) {
-      var obj = toRaw(typeList.value[index]);
-      console.log(obj.dictValue);
-      console.log(equipment.equipmentTypeId);
-      if (obj.dictValue == equipment.equipmentTypeId) {
-        console.log(obj.dictLabel);
-        return obj.dictLabel
-      }
+const addOrganizational = () => {
+  organizationalQuery.value = {
+    id: null,
+    parentId: "",
+    name: "",
+    sn: "",
+    company: '',
+    ancestors: ''
+  }
+  dialogTitle.value = "新增组织架构"
+  dialogFormVisible.value = true
+}
+
+const updateOrganizational = (data) => {
+  organizationalQuery.value = data
+  dialogTitle.value = "修改组织架构"
+  dialogFormVisible.value = true
+}
+
+
+// const getTypeName = (scope) => {
+//   var equipment = toRaw(scope)
+//   if (equipment != null) {
+//     for (var index in typeList.value) {
+//       var obj = toRaw(typeList.value[index]);
+//       console.log(obj.dictValue);
+//       console.log(equipment.equipmentTypeId);
+//       if (obj.dictValue == equipment.equipmentTypeId) {
+//         console.log(obj.dictLabel);
+//         return obj.dictLabel
+//       }
+//     }
+//   }
+// }
+
+const saveOrgainzational = () => {
+  for (var index in organizationalList.value) {
+    if (organizationalQuery.value.parentId == organizationalList.value[index].id) {
+      console.log(organizationalList.value[index]);
+      organizationalQuery.value.ancestors = organizationalList.value[index].ancestors + "," + organizationalList.value[index].id
     }
   }
+  console.log(organizationalQuery.value.id);
+  if (organizationalQuery.value.id != null) {
+    updateEquipmentOrganizational(organizationalQuery.value).then(res => {
+      console.log(res);
+      if (res.code == 200) {
+        getTreedata();
+        dialogFormVisible.value = false
+      }
+    })
+  } else {
+    addEquipmentOrganizational(organizationalQuery.value).then(res => {
+      if (res.code == 200) {
+        getTreedata();
+        dialogFormVisible.value = false
+      }
+    })
+  }
 }
 
 const deleteDevice = (scope) => {
-              console.log(scope)
+  console.log(scope.id)
+  var obj = {
+    id: scope.id,
+    isDelete: 1
+  }
+  updateEquipmentSbook(obj).then(res => {
+    getlistEquipmentSbook();
+  })
 }
 
 getTreedata();