Răsfoiți Sursa

Merge branch 'master' of http://116.63.33.55/git/read_opc

ljh 2 ani în urmă
părinte
comite
34795ccf34
27 a modificat fișierele cu 406 adăugiri și 66 ștergeri
  1. 14 12
      chuanyi_client2/package-lock.json
  2. 18 7
      chuanyi_client2/src/components/HeaderMain/index.vue
  3. 12 0
      chuanyi_client2/src/components/LeftMenu/index.vue
  4. 4 0
      chuanyi_client2/src/router/index.js
  5. 23 0
      chuanyi_client2/src/views/report_template/index.vue
  6. 44 6
      chuanyi_server/src/main/java/com/judong/chuanyiserver/config/OpcAsyncTask.java
  7. 14 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/MenuController.java
  8. 14 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/RoleController.java
  9. 1 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/DataSourceDao.java
  10. 1 3
      chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/ItemGroupDao.java
  11. 15 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/MenuDao.java
  12. 14 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/RoleDao.java
  13. 7 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/DataSource.java
  14. 6 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/Item.java
  15. 2 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/MenuService.java
  16. 5 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/RoleService.java
  17. 2 3
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/DictServiceImpl.java
  18. 5 3
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/ItemGroupServiceImpl.java
  19. 46 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/MenuServiceImpl.java
  20. 47 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/RoleServiceImpl.java
  21. 1 1
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/UserServiceImpl.java
  22. 48 2
      chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcUaUtil.java
  23. 6 6
      chuanyi_server/src/main/resources/application-dev.yml
  24. 16 12
      chuanyi_server/src/main/resources/mapper/DataSourceDao.xml
  25. 5 11
      chuanyi_server/src/main/resources/mapper/ItemGroupDao.xml
  26. 17 0
      chuanyi_server/src/main/resources/mapper/MenuDao.xml
  27. 19 0
      chuanyi_server/src/main/resources/mapper/RoleDao.xml

+ 14 - 12
chuanyi_client2/package-lock.json

@@ -2837,6 +2837,13 @@
         "regenerator-runtime": "^0.11.0"
       }
     },
+    "node_modules/babel-runtime/node_modules/core-js": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+      "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+      "hasInstallScript": true
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -4396,13 +4403,6 @@
         "webpack": "^5.1.0"
       }
     },
-    "node_modules/core-js": {
-      "version": "2.6.12",
-      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
-      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
-      "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
-      "hasInstallScript": true
-    },
     "node_modules/core-util-is": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -19218,6 +19218,13 @@
       "requires": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+        }
       }
     },
     "balanced-match": {
@@ -20528,11 +20535,6 @@
         "serialize-javascript": "^6.0.0"
       }
     },
-    "core-js": {
-      "version": "2.6.12",
-      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
-      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
-    },
     "core-util-is": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",

+ 18 - 7
chuanyi_client2/src/components/HeaderMain/index.vue

@@ -189,7 +189,7 @@
                      :highlight-current="true"
                      :default-expand-all="true">
               <span class="custom-tree-node" slot-scope="{ node, data }">
-                <svg-icon v-if="!data.children" icon-class="file"/>
+                <svg-icon v-if="!data.children || data.children.length == 0" icon-class="file"/>
                 <svg-icon v-else-if="node.expanded" icon-class="folder-open"/>
                 <svg-icon v-else icon-class="folder"/>
                 <span :title='node.label || "-"' style="margin-left: 2px;">{{ node.label }}</span>
@@ -370,7 +370,7 @@ export default {
       if (e.paneName == '1') {
         this.gotoPageByName('/groupItem')
       } else {
-        this.gotoPageByName('/index')
+        this.gotoPageByName('/reportTemplate')
       }
     },
     /** 页面跳转 */
@@ -551,8 +551,12 @@ export default {
     getChooseItemData(item) {
       let arr = []
       for (let i in item.itemList) {
+        let temp = item.itemList[i]
         arr.push({
-          'label': item.itemList[i].itemName
+          'label': temp.itemName,
+          'nodeIdentifier': temp.nodeIdentifier,
+          'nodeIndex': temp.nodeIndex,
+          'dataType': temp.dataType
         })
       }
       this.chooseItemDataListByTree = arr
@@ -737,7 +741,10 @@ export default {
         const nodeId = checkedNode.$treeNodeId;
         let channelName = this.treeFindPath(this.itemDataListByTree, data => data.$treeNodeId === nodeId, "label")
         let temp = {
-          'label': channelName.join('.')
+          'label': channelName.join('.'),
+          'nodeIdentifier': checkedNode.nodeIdentifier,
+          'nodeIndex': checkedNode.nodeIndex,
+          'dataType': checkedNode.dataType
         }
         chooseChannelNameList.push(temp)
       }
@@ -801,10 +808,14 @@ export default {
         return
       }
       let itemList = []
-      let itemNameList = this.chooseItemDataListByTree.map(map => { return map.label })
-      for (let i in itemNameList) {
+      // let itemNameList = this.chooseItemDataListByTree.map(map => { return map.label })
+      for (let i in this.chooseItemDataListByTree) {
+        let temp = this.chooseItemDataListByTree[i]
         itemList.push({
-          'itemName': itemNameList[i]
+          'itemName': temp.label,
+          'nodeIdentifier': temp.nodeIdentifier,
+          'nodeIndex': temp.nodeIndex,
+          'dataType': temp.dataType,
         })
       }
       this.groupBasicForm.itemList = itemList

+ 12 - 0
chuanyi_client2/src/components/LeftMenu/index.vue

@@ -57,6 +57,9 @@
                         v-model="datasourceForm.desc"
                         placeholder="请输入备注"></el-input>
             </el-form-item>
+            <el-form-item style="margin-top: 10px;">
+              <el-tag type="info" style="width: 100%;">数据类型:{{ chooseDatasourceType }}</el-tag>
+            </el-form-item>
           </el-form>
         </div>
         <!-- 服务连接列表 -->
@@ -159,6 +162,7 @@ export default {
       connDialogTitle: '选择OPC服务',
       connDialogVisible: false,
       labelPosition: 'top',
+      chooseDatasourceType: '',
       // 选择的服务类型
       chooseServerType: null,
       // 选择的连接服务
@@ -248,6 +252,7 @@ export default {
     /** 添加数据源配置 */
     createDatasourceEvent() {
       this.changeNavType(0)
+      this.chooseDatasourceType = ''
       this.datasourceDialogVisible = true
     },
     /** 修改菜单点击项 */
@@ -286,6 +291,7 @@ export default {
         const loading = showLoading(_this, '删除中,请稍候···')
         delDataSourceById(data.id).then(res => {
           loading.close()
+          this.chooseDatasourceType = ''
           // 刷新右侧数据源类型列表
           _this.getMyDatasourceList()
           _this.$message({
@@ -309,6 +315,7 @@ export default {
       this.chooseConnServer = conn
       this.datasourceForm.datasourceName = conn.dataSourceName
       this.datasourceForm.desc = conn.dataSourceDescribe
+      this.chooseDatasourceType = conn.dataSourceTypeName
     },
     /** 数据类型树点击事件 */
     handleNodeClick(data, node, target) {
@@ -318,6 +325,11 @@ export default {
       }
       this.$refs['datasourceForm'].resetFields()
       this.chooseServerType = data
+      if (data.children && data.children.length > 0) {
+        this.chooseDatasourceType = ''
+      } else {
+        this.chooseDatasourceType = data.label
+      }
     },
     /** 数据源配置事件 */
     handleDatasourceConfig() {

+ 4 - 0
chuanyi_client2/src/router/index.js

@@ -41,6 +41,10 @@ const routes = [
                 component: () => import('@/views/home/index')
             },
             {
+                path: 'reportTemplate',
+                component: () => import('@/views/report_template/index')
+            },
+            {
                 path: 'groupItem',
                 component: () => import('@/views/group_item/index')
             },

+ 23 - 0
chuanyi_client2/src/views/report_template/index.vue

@@ -0,0 +1,23 @@
+<template>
+
+</template>
+
+<script>
+
+export default {
+  name: 'index',
+  data() {
+    return {
+    }
+  },
+  mounted() {
+  },
+  created() {
+  },
+  methods: {
+  }
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+</style>

+ 44 - 6
chuanyi_server/src/main/java/com/judong/chuanyiserver/config/OpcAsyncTask.java

@@ -6,11 +6,13 @@ import com.judong.chuanyiserver.dao.RawDataDao;
 import com.judong.chuanyiserver.entity.*;
 import com.judong.chuanyiserver.enums.ResultEnum;
 import com.judong.chuanyiserver.exception.CustomException;
-import com.judong.chuanyiserver.util.Blank;
-import com.judong.chuanyiserver.util.ConstantStr;
-import com.judong.chuanyiserver.util.KepOpcServerUtil;
-import com.judong.chuanyiserver.util.RedisUtil;
+import com.judong.chuanyiserver.util.*;
 import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
 import org.openscada.opc.dcom.da.OPCSERVERSTATE;
 import org.openscada.opc.lib.da.Item;
 import org.openscada.opc.lib.da.*;
@@ -21,6 +23,7 @@ import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Future;
 
 import static com.judong.chuanyiserver.util.KepOpcServerUtil.getVal;
@@ -137,10 +140,45 @@ public class OpcAsyncTask {
             }
         } catch (Exception e) {
             e.printStackTrace();
+        } finally {
+            server.dispose();
             redisUtil.del(ConstantStr.ITEM_GROUP + id);
             itemGroupDao.runItemGroupById(id, ConstantStr.STOP_IT);
-        }finally {
-            server.dispose();
+        }
+    }
+
+    //异步读取OpcUa
+    public void runOpcUa(ItemGroup itemGroup, DataSource dataSource) throws Exception {
+        Integer id = itemGroup.getId();
+        OpcUaClient opcUaClient = OpcUaUtil.createClient(dataSource);
+        List<com.judong.chuanyiserver.entity.Item> itemList = itemGroupDao.getItemListByGroupId(id);
+        List<NodeId> nodeIdList = OpcUaUtil.genNodeId(itemList);
+        try {
+            opcUaClient.connect().get();
+            Boolean flage = true;
+            while (flage) {
+                List<RawData> rawDataList = new ArrayList<>();
+                List<DataValue> valueList = opcUaClient.readValues(0.0, TimestampsToReturn.Neither, nodeIdList).get();
+                Date date = new Date();
+                for (DataValue dataValue : valueList) {
+
+//                    rawDataList.add(new RawData(itemGroup.getDataSourceId(), key.getId(), val.get("javaType").toString(), val.get("value").toString(), date));
+                }
+                addRawDataList(id, rawDataList);
+                Thread.sleep(itemGroup.getModeValue() * 1000);
+                flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
+                if (Blank.isEmpty(flage)) {
+                    flage = false;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Blank.isNotEmpty(opcUaClient)) {
+                opcUaClient.disconnect();
+                redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                itemGroupDao.runItemGroupById(id, ConstantStr.STOP_IT);
+            }
         }
     }
 

+ 14 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/MenuController.java

@@ -155,4 +155,18 @@ public class MenuController {
         }
         return menuService.deleteMenuPermission(menu.getId(),menu.getPermissionList());
     }
+
+    /**
+     * 给菜单分配权限
+     *
+     */
+    @PostMapping("assignMenuAndPermission")
+    @PermissionControl
+    @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.MENU, OperationEnum = OperationEnum.SELECT)
+    public Result assignMenuAndPermission(@RequestBody Menu menu){
+        if (Blank.isEmpty(menu.getId(),menu.getPermissionList())){
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return menuService.assignMenuAndPermission(menu);
+    }
 }

+ 14 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/RoleController.java

@@ -181,4 +181,18 @@ public class RoleController {
         }
         return roleService.deleteRoleByIds(roleIdList);
     }
+
+    /**
+     * 给角色分配菜单
+     *
+     */
+    @PostMapping("/assignRoleAndMenu")
+    @PermissionControl
+    @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.ROLE, OperationEnum = OperationEnum.SELECT)
+    public Result assignRoleAndMenu(@RequestBody Role role){
+        if (Blank.isEmpty(role.getId(),role.getMenuList())){
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return roleService.assignRoleAndMenu(role);
+    }
 }

+ 1 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/DataSourceDao.java

@@ -5,6 +5,7 @@ import com.judong.chuanyiserver.entity.DataSourceType;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Map;
 
 @Repository
 public interface DataSourceDao {

+ 1 - 3
chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/ItemGroupDao.java

@@ -27,9 +27,7 @@ public interface ItemGroupDao {
 
     Integer delItemGroupById(Integer id);
 
-    List<Item> getItemByGroupId(Integer itemGroupId);
-
-    List<Item> getItemList(Integer itemGroupId);
+    List<Item> getItemListByGroupId(Integer itemGroupId);
 
     List<Item> getPublicItemList(Integer itemGroupId, List<Item> itemList);
 

+ 15 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/MenuDao.java

@@ -60,5 +60,20 @@ public interface MenuDao {
 
     Integer getPermissionListByMenuListPageSize(@Param("menuList") List<Menu> menuList);
 
+    /**
+     * 查询菜单对应权限
+     */
+    List<Integer> queryPermissionId(Integer menuId);
+
+    /**
+     * 批量新增菜单权限
+     */
+    Integer addMenuAndPermission(@Param("menu") Menu menu);
+
+    /**
+     *批量取消角色菜单
+     */
+    Integer deleteMenuAndPermission(@Param("menu") Menu menu);
+
 
 }

+ 14 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/RoleDao.java

@@ -61,6 +61,20 @@ public interface RoleDao {
      */
     List<Role> queryRoleByRoleIds(@Param("ids") List<Integer> ids);
 
+    /**
+     * 查询角色对应菜单的角色菜单id
+     */
+    List<Integer> queryRoleAndMenuId(Integer roleId);
+
+    /**
+     * 批量新增角色菜单
+     */
+    Integer addRoleAndMenu(@Param("role") Role role);
+
+    /**
+     *批量取消角色菜单
+     */
+    Integer deleteRoleAndMenu(@Param("role") Role role);
 
 
 }

+ 7 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/DataSource.java

@@ -53,4 +53,11 @@ public class DataSource implements Serializable {
      * 创建时间
      */
     private String createTime;
+
+    /**
+     * 虚拟字段
+     */
+    private String dataSourceTypeName;
+    private String dataSourceTypeKey;
+    private String dataSourceTypeDescribe;
 }

+ 6 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/Item.java

@@ -21,4 +21,10 @@ public class Item implements Serializable {
      * 项名称
      */
     private String itemName;
+    /**
+     * opcUa特有的nodeId路径
+     */
+    private Integer nodeIndex;
+    private String nodeIdentifier;
+    private String dataType;
 }

+ 2 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/MenuService.java

@@ -34,4 +34,6 @@ public interface MenuService {
      */
     Result deleteMenuPermission(Integer menuId, List<Permission> permissionList);
 
+    Result assignMenuAndPermission(Menu menu);
+
 }

+ 5 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/RoleService.java

@@ -33,4 +33,9 @@ public interface RoleService {
      * 批量删除角色
      */
     Result deleteRoleByIds(List<Integer> roleIdList);
+
+    /**
+     * 为角色分配菜单
+     */
+    Result assignRoleAndMenu(Role role);
 }

+ 2 - 3
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/DictServiceImpl.java

@@ -10,12 +10,11 @@ import com.judong.chuanyiserver.util.Blank;
 import com.judong.chuanyiserver.util.Result;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import sun.java2d.loops.Blit;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
+
 
 
 @Service
@@ -50,7 +49,7 @@ public class DictServiceImpl implements DictService {
         Integer count;
         Integer startNum=(page-1)*num;
         //判断是否展示全部字典数据
-        if (Blank.isEmpty(dictKey)&&Blank.isEmpty(dictValue)&&Blank.isEmpty(dictTypeId)){
+        if (Blank.isEmpty(dictKey)&&Blank.isEmpty(dictValue)){
             count = dictDao.queryNumber(dictKey, dictValue,dictTypeId,0);
             dictPage = dictDao.queryPage(dictKey, dictValue,dictTypeId, startNum, num,0);
             for (Dict d:dictPage){

+ 5 - 3
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/ItemGroupServiceImpl.java

@@ -72,7 +72,7 @@ public class ItemGroupServiceImpl implements ItemGroupService {
                         itemGroupDao.delItemByGroupId(id);
                         return Result.ok("修改item组成功");
                     }
-                    List<Item> oldItemList = itemGroupDao.getItemList(id);
+                    List<Item> oldItemList = itemGroupDao.getItemListByGroupId(id);
                     if (Blank.isEmpty(oldItemList)) {
                         itemGroupDao.addItem(id, itemList);
                         return Result.ok("修改item组成功");
@@ -114,8 +114,10 @@ public class ItemGroupServiceImpl implements ItemGroupService {
     @Override
     public Result getItemGroupById(Integer id) {
         ItemGroup itemGroup = itemGroupDao.getItemGroupById(id);
-        List<Item> itemList = itemGroupDao.getItemByGroupId(id);
-        itemGroup.setItemList(itemList);
+        List<Item> itemList = itemGroupDao.getItemListByGroupId(id);
+        if (Blank.isNotEmpty(itemList)){
+            itemGroup.setItemList(itemList);
+        }
         return Result.ok(itemGroup);
     }
 

+ 46 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/MenuServiceImpl.java

@@ -193,6 +193,52 @@ public class MenuServiceImpl implements MenuService {
         return Result.ok(integer);
     }
 
+    @Override
+    public Result assignMenuAndPermission(Menu menu) {
+        //查询原有权限
+        List<Integer> oldPermissionId = menuDao.queryPermissionId(menu.getId());
+        //获取新权限
+        List<Permission> newpermissionList = menu.getPermissionList();
+        //存放公共权限
+        ArrayList<Permission> allPermission = new ArrayList<>();
+        //获取公共权限
+        for (Permission p:newpermissionList){
+            for (Integer pid:oldPermissionId){
+                if (p.getId()==pid){
+                    allPermission.add(p);
+                }
+            }
+        }
+        List<Permission> oldPermission = new ArrayList<>();
+        for (Integer id:oldPermissionId){
+            Permission permission = new Permission();
+            permission.setId(id);
+            oldPermission.add(permission);
+        }
+        //新权限移除公共权限得到需要新增的权限
+        newpermissionList.removeAll(allPermission);
+        Integer add=0;
+        Integer dle=0;
+        if (newpermissionList.size()>0){
+            Menu addmenu = new Menu();
+            addmenu.setId(menu.getId());
+            addmenu.setPermissionList(newpermissionList);
+            add = menuDao.addMenuAndPermission(menu);
+        }
+        //新权限移除公共权限得到需要新增的权限
+        oldPermission.removeAll(allPermission);
+        if (oldPermission.size()>0){
+            Menu dlemenu = new Menu();
+            dlemenu.setId(menu.getId());
+            dlemenu.setPermissionList(oldPermission);
+            dle = menuDao.deleteMenuAndPermission(dlemenu);
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("add",add);
+        jsonObject.put("del",dle);
+        return Result.ok(jsonObject);
+    }
+
 
     public List<Menu> getChildMenu(List<Menu> menuList, List<Menu> newMenuList, Integer parentId) {
         if (Blank.isEmpty(menuList)) {

+ 47 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/RoleServiceImpl.java

@@ -164,6 +164,52 @@ public class RoleServiceImpl implements RoleService {
         return Result.ok(jsonObject);
     }
 
+    @Override
+    public Result assignRoleAndMenu(Role role) {
+        //查询角色原有菜单
+        List<Integer> oldRolAndMenuId = roleDao.queryRoleAndMenuId(role.getId());
+        //存放新菜单
+        List<Menu> newRolAndMenuId = role.getMenuList();
+        //公共菜单
+        List<Menu> allRolAndMenuId = new ArrayList<>();
+        //获取公共菜单
+        for (Menu menu:newRolAndMenuId){
+            for (Integer RolAndMenuId:oldRolAndMenuId){
+                if (menu.getId()==RolAndMenuId){
+                    allRolAndMenuId.add(menu);
+                }
+            }
+        }
+        List<Menu> oldRolAndMenu = new ArrayList<>();
+        for (Integer menuId:oldRolAndMenuId){
+            Menu menu = new Menu();
+            menu.setId(menuId);
+            oldRolAndMenu.add(menu);
+        }
+        Integer add=0;
+        Integer del=0;
+        //新菜单移除公共菜单得到需要新增的菜单
+        newRolAndMenuId.removeAll(allRolAndMenuId);
+        if (newRolAndMenuId.size()>0){
+            Role addRole = new Role();
+            addRole.setId(role.getId());
+            addRole.setMenuList(newRolAndMenuId);
+            add = roleDao.addRoleAndMenu(addRole);
+        }
+        //新菜单移除公共菜单得到需要删除的菜单
+        oldRolAndMenu.removeAll(allRolAndMenuId);
+        if (oldRolAndMenu.size()>0){
+            Role dleRole = new Role();
+            dleRole.setId(role.getId());
+            dleRole.setMenuList(oldRolAndMenu);
+            del = roleDao.deleteRoleAndMenu(dleRole);
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("add",add);
+        jsonObject.put("del",del);
+        return Result.ok(jsonObject);
+    }
+
     public List<JSONObject> gennerMenuTree(List<Menu> menuList, Integer parentId) {
         List<JSONObject> jsonObjectList = new ArrayList<>();
         if (Blank.isEmpty(menuList)) {
@@ -183,4 +229,5 @@ public class RoleServiceImpl implements RoleService {
         return jsonObjectList;
     }
 
+
 }

+ 1 - 1
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/UserServiceImpl.java

@@ -397,7 +397,7 @@ public class UserServiceImpl implements UserService {
         //判断原始密码是否正确
         User isExistUser = userDao.getUserByNamePass(user.getUserName(), EncryptUtils.StrToMD5(oldPassword));
         if (isExistUser==null){
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "密码输入错误");
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "密码输入错误");
         }
         //修改密码
         user.setNewPassword(EncryptUtils.StrToMD5(newPassword));

+ 48 - 2
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcUaUtil.java

@@ -2,19 +2,24 @@ package com.judong.chuanyiserver.util;
 
 import com.alibaba.fastjson.JSONObject;
 import com.judong.chuanyiserver.entity.DataSource;
+import com.judong.chuanyiserver.entity.Item;
 import com.judong.chuanyiserver.enums.ResultEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
 import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
 import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider;
 import org.eclipse.milo.opcua.sdk.client.api.identity.UsernameProvider;
+import org.eclipse.milo.opcua.sdk.client.model.nodes.variables.PropertyTypeNode;
 import org.eclipse.milo.opcua.sdk.client.nodes.UaNode;
 import org.eclipse.milo.opcua.stack.client.DiscoveryClient;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
-import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
+import org.eclipse.milo.opcua.stack.core.types.builtin.*;
+import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned;
+import org.eclipse.milo.opcua.stack.core.types.enumerated.IdType;
+import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
 import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription;
 
 import java.nio.file.Files;
@@ -23,6 +28,7 @@ import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.function.Predicate;
 
@@ -105,7 +111,7 @@ public class OpcUaUtil {
         }
     }
 
-    public static Result opcUaGetTree(DataSource dataSource){
+    public static Result opcUaGetTree(DataSource dataSource) {
         OpcUaClient opcUaClient = null;
         try {
             opcUaClient = createClient(dataSource);
@@ -145,10 +151,50 @@ public class OpcUaUtil {
             }
             JSONObject jsonObject = new JSONObject();
             jsonObject.put("label", nd.getBrowseName().getName());
+            jsonObject.put("nodeId", nd.getNodeId());
+            jsonObject.put("nodeIndex", nd.getNodeId().getNamespaceIndex());
+            jsonObject.put("nodeIdentifier", nd.getNodeId().getIdentifier());
+            jsonObject.put("dataType", nd.getNodeId().getType());
+//            jsonObject.put("value", client.readValue(0.0, TimestampsToReturn.Both, nd.getNodeId()).get());
+//            jsonObject.put("dataType", client.readValue(0.0, TimestampsToReturn.Neither, nd.getNodeId()).get().getValue().getDataType().get().getType());
+            jsonObject.put("description", nd.getDescription());
+//            PropertyTypeNode nd1 = (PropertyTypeNode) nd;
+//            nd1.getMinimumSamplingInterval();
+            DataValue dataValue = client.readValue(0.0, TimestampsToReturn.Both, nd.getNodeId()).get();
+            StatusCode statusCode = dataValue.getStatusCode();
+            if (Blank.isNotEmpty(statusCode)) {
+                if (statusCode.isGood()) {
+                    jsonObject.put("value", dataValue.getValue().getValue());
+                }
+            }
+
+//            Variant value = dataValue.getValue();
+//            Object value1 = value.getValue();
+//            Optional<ExpandedNodeId> dataType = value.getDataType();
+//            int value2 = dataType.get().getType().getValue();
+//            UShort serverPicoseconds = dataValue.getServerPicoseconds();
+//            DateTime serverTime = dataValue.getServerTime();
+//            UShort sourcePicoseconds = dataValue.getSourcePicoseconds();
+//            DateTime sourceTime = dataValue.getSourceTime();
+//            StatusCode statusCode = dataValue.getStatusCode();
+//            jsonObject.put("value",client.readValue(0.0, TimestampsToReturn.Neither, nd.getNodeId()).get());
+//            jsonObject.put("nodeId",nd.);
 //            jsonObject.put("value",client.readValue(0.0, TimestampsToReturn.Neither, nd.getNodeId()).get());
             jsonObject.put("children", generOpcUaTree(client, nd));
             jsonList.add(jsonObject);
         }
         return jsonList;
     }
+
+    public static List<NodeId> genNodeId(List<Item> itemList) {
+        if (Blank.isEmpty(itemList)) {
+            return null;
+        }
+        List<NodeId> nodeIdList = new ArrayList<>();
+        for (Item item : itemList) {
+            NodeId nodeId = new NodeId(item.getNodeIndex(), item.getNodeIdentifier());
+            nodeIdList.add(nodeId);
+        }
+        return nodeIdList;
+    }
 }

+ 6 - 6
chuanyi_server/src/main/resources/application-dev.yml

@@ -10,16 +10,16 @@ spring:
       max-request-size: 500MB
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://116.63.49.144:3307/cqcy?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
-    username: jvdong
-    password: '@jvdong123465'
+    url: jdbc:mysql://192.168.0.40:3306/chuanyi?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
+    username: root
+    password: root
   resources:
     static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${file.path},file:${file.location}
   redis:
     database: 0
-    host: 116.63.49.144
-    port: 6380
-    password: '@jvdong_2022'
+    host: 192.168.0.40
+    port: 6379
+#    password: 123456
     jedis:
       pool:
         max-active: 50

+ 16 - 12
chuanyi_server/src/main/resources/mapper/DataSourceDao.xml

@@ -59,18 +59,22 @@
     </select>
 
     <select id="getAllDataSource" resultType="com.judong.chuanyiserver.entity.DataSource">
-        select id,
-               type_id,
-               user_id,
-               data_source_name,
-               data_source_describe,
-               ip_address,
-               ip_port,
-               ip_user_name,
-               ip_password,
-               is_anonymous,
-               create_time
-        from t_data_source
+        select tds.id,
+               tds.type_id,
+               tds.user_id,
+               tds.data_source_name,
+               tds.data_source_describe,
+               tds.ip_address,
+               tds.ip_port,
+               tds.ip_user_name,
+               tds.ip_password,
+               tds.is_anonymous,
+               tds.create_time,
+               tdst.data_source_type_name,
+               tdst.data_source_type_key,
+               tdst.data_source_type_describe
+        from t_data_source tds
+                 LEFT JOIN t_data_source_type tdst ON tds.type_id = tdst.id
         where user_id = #{userId}
         order by create_time
     </select>

+ 5 - 11
chuanyi_server/src/main/resources/mapper/ItemGroupDao.xml

@@ -10,10 +10,10 @@
     </insert>
 
     <insert id="addItem">
-        insert into t_item (item_group_id, item_name)
+        insert into t_item (item_group_id, item_name,node_index,node_identifier,data_type)
         VALUES
         <foreach collection="itemList" item="item" index="index" separator=",">
-            (#{itemGroupId},#{item.itemName})
+            (#{itemGroupId},#{item.itemName},#{item.nodeIndex},#{item.nodeIdentifier},#{item.dataType})
         </foreach>
     </insert>
 
@@ -113,21 +113,15 @@
           AND group_name = #{groupName}
     </select>
 
-    <select id="getItemByGroupId" resultType="com.judong.chuanyiserver.entity.Item">
-        select id, item_group_id, item_name
+    <select id="getItemListByGroupId" resultType="com.judong.chuanyiserver.entity.Item">
+        select id, item_group_id, item_name, node_index, node_identifier, data_type
         from t_item
         where item_group_id = #{itemGroupId}
         order by item_name
     </select>
 
-    <select id="getItemList" resultType="com.judong.chuanyiserver.entity.Item">
-        select id, item_group_id, item_name
-        from t_item
-        where item_group_id = #{itemGroupId}
-    </select>
-
     <select id="getPublicItemList" resultType="com.judong.chuanyiserver.entity.Item">
-        select id, item_group_id, item_name
+        select id, item_group_id, item_name, node_index, node_identifier, data_type
         from t_item
         where item_group_id=#{itemGroupId} and
         item_name in

+ 17 - 0
chuanyi_server/src/main/resources/mapper/MenuDao.xml

@@ -276,6 +276,23 @@
         )
     </select>
 
+    <select id="queryPermissionId" resultType="java.lang.Integer">
+        SELECT permission_id FROM sys_menu_permission WHERE menu_id=#{menuId}
+    </select>
+
+    <insert id="addMenuAndPermission">
+        insert into sys_menu_permission(menu_id,permission_id) VALUES
+        <foreach collection="menu.permissionList" item="permission" separator=",">
+            (#{menu.id},#{permission.id})
+        </foreach>
+    </insert>
 
+    <delete id="deleteMenuAndPermission">
+        delete from sys_menu_permission where menu_id=#{menu.id}
+        AND permission_id in (
+        <foreach collection="menu.permissionList" item="permission" index="index" separator=",">
+            #{permission.id}
+        </foreach>)
+    </delete>
 
 </mapper>

+ 19 - 0
chuanyi_server/src/main/resources/mapper/RoleDao.xml

@@ -166,4 +166,23 @@
         </foreach>
     </select>
 
+    <select id="queryRoleAndMenuId" resultType="java.lang.Integer">
+        SELECT menu_id FROM sys_role_menu WHERE role_id=#{roleId}
+    </select>
+
+    <insert id="addRoleAndMenu">
+        INSERT INTO sys_role_menu(role_id,menu_id) VALUES
+        <foreach collection="role.menuList" item="menu" separator=",">
+            (#{role.id},#{menu.id})
+        </foreach>
+    </insert>
+
+    <delete id="deleteRoleAndMenu">
+        delete from sys_role_menu where role_id=#{role.id}
+        AND menu_id in (
+        <foreach collection="role.menuList" item="menu" index="index" separator=",">
+            #{menu.id}
+        </foreach>)
+    </delete>
+
 </mapper>