瀏覽代碼

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

ljh 2 年之前
父節點
當前提交
44423c9566
共有 17 個文件被更改,包括 633 次插入7 次删除
  1. 60 1
      chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/DataSourceController.java
  2. 30 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/ItemGroupController.java
  3. 17 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/DataSourceDao.java
  4. 7 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/ItemGroupDao.java
  5. 25 1
      chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/DataSource.java
  6. 9 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/Item.java
  7. 49 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/ItemGroup.java
  8. 34 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/enums/DataSourceTypeEnum.java
  9. 8 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/DataSourceService.java
  10. 8 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/ItemGroupService.java
  11. 77 5
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/DataSourceServiceImpl.java
  12. 23 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/ItemGroupServiceImpl.java
  13. 46 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcDaUtil.java
  14. 101 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcUaUtil.java
  15. 35 0
      chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcUtil.java
  16. 99 0
      chuanyi_server/src/main/resources/mapper/DataSourceDao.xml
  17. 5 0
      chuanyi_server/src/main/resources/mapper/ItemGroupDao.xml

+ 60 - 1
chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/DataSourceController.java

@@ -28,11 +28,70 @@ public class DataSourceController {
         return dataSourceService.getDataSourceTree();
     }
 
+    /**
+     * 增加数据源
+     *
+     * @param dataSource
+     * @return
+     */
     @PostMapping("/addDataSource")
-    public Result addDataSource(@RequestBody DataSource dataSource) {
+    public Result addDataSource(DataSource dataSource) {
         if (Blank.isEmpty(dataSource, dataSource.getTypeId(), dataSource.getDataSourceName())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源名称不能为空");
         }
         return dataSourceService.addDataSource(dataSource);
     }
+
+    /**
+     * 测试数据源配置连接
+     *
+     * @param dataSource
+     * @return
+     */
+    @PostMapping("/testConnect")
+    public Result testConnect(@RequestBody DataSource dataSource) {
+        if (Blank.isEmpty(dataSource, dataSource.getTypeId(), dataSource.getDataSourceName())) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源名称不能为空");
+        }
+        return dataSourceService.testConnect(dataSource);
+    }
+
+    /**
+     * 获取当前登录人的所有数据源配置
+     *
+     * @return
+     */
+    @GetMapping("/getAllDataSource")
+    public Result getAllDataSource() {
+        return dataSourceService.getAllDataSource();
+    }
+
+    /**
+     * 通过id获取数据源配置
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/getDataSourceById/{id}")
+    public Result getDataSourceById(@PathVariable Integer id) {
+        if (Blank.isEmpty(id)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return dataSourceService.getDataSourceById(id);
+    }
+
+    /**
+     * 通过id删除数据源配置
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("/delDataSourceById/{id}")
+    public Result delDataSourceById(@PathVariable Integer id) {
+        if (Blank.isEmpty(id)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return dataSourceService.delDataSourceById(id);
+    }
+
 }

+ 30 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/controller/ItemGroupController.java

@@ -0,0 +1,30 @@
+package com.judong.chuanyiserver.controller;
+
+import com.judong.chuanyiserver.entity.ItemGroup;
+import com.judong.chuanyiserver.enums.ResultEnum;
+import com.judong.chuanyiserver.service.ItemGroupService;
+import com.judong.chuanyiserver.util.Blank;
+import com.judong.chuanyiserver.util.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("itemGroup")
+@Slf4j
+public class ItemGroupController {
+
+    @Resource
+    private ItemGroupService itemGroupService;
+
+    @PostMapping("/addItemGroup")
+    public Result addItemGroup(ItemGroup itemGroup){
+        if (Blank.isEmpty(itemGroup,itemGroup.getGroupName())){
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "组名称不能为空");
+        }
+        return itemGroupService.addItemGroup(itemGroup);
+    }
+}

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

@@ -1,5 +1,6 @@
 package com.judong.chuanyiserver.dao;
 
+import com.judong.chuanyiserver.entity.DataSource;
 import com.judong.chuanyiserver.entity.DataSourceType;
 import org.springframework.stereotype.Repository;
 
@@ -9,4 +10,20 @@ import java.util.List;
 public interface DataSourceDao {
 
     List<DataSourceType> getAllDataSourceType();
+
+    DataSource getDataSourceByName(String userId, String dataSourceName);
+
+    Integer addDataSource(DataSource dataSource);
+
+    DataSourceType getDataSourceTypeById(Integer id);
+
+    List<DataSource> getAllDataSource(String userId);
+
+    DataSource getDataSourceById(Integer id);
+
+    Integer delDataSourceById(Integer id);
+
+    DataSource getDataSourceByNameNoId(Integer id, String userId, String dataSourceName);
+
+    Integer updateDataSource(DataSource dataSource);
 }

+ 7 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/dao/ItemGroupDao.java

@@ -0,0 +1,7 @@
+package com.judong.chuanyiserver.dao;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ItemGroupDao {
+}

+ 25 - 1
chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/DataSource.java

@@ -14,10 +14,14 @@ public class DataSource implements Serializable {
      */
     private Integer id;
     /**
-     * id
+     * 数据源类型id
      */
     private Integer typeId;
     /**
+     * 用户id
+     */
+    private String userId;
+    /**
      * 数据源类型名称
      */
     private String dataSourceName;
@@ -26,6 +30,26 @@ public class DataSource implements Serializable {
      */
     private String dataSourceDescribe;
     /**
+     * ip地址
+     */
+    private String ipAddress;
+    /**
+     * ip端口
+     */
+    private String ipPort;
+    /**
+     * ip用户名
+     */
+    private String ipUserName;
+    /**
+     * ip密码
+     */
+    private String ipPassword;
+    /**
+     * 是否匿名;0不匿名,1匿名
+     */
+    private Integer isAnonymous;
+    /**
      * 创建时间
      */
     private String createTime;

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

@@ -0,0 +1,9 @@
+package com.judong.chuanyiserver.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class Item implements Serializable {
+}

+ 49 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/entity/ItemGroup.java

@@ -0,0 +1,49 @@
+package com.judong.chuanyiserver.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class ItemGroup implements Serializable {
+
+    private static final long serialVersionUID = -96536212774977561L;
+
+    /**
+     * id
+     */
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private String userId;
+    /**
+     * 组名称
+     */
+    private String groupName;
+    /**
+     * 组描述
+     */
+    private String groupDescribe;
+    /**
+     * 数据源配置id
+     */
+    private Integer dataSourceId;
+    /**
+     * 读取模式
+     */
+    private Integer readMode;
+    /**
+     * 模式值
+     */
+    private String modeValue;
+    /**
+     * 创建时间
+     */
+    private String createTime;
+    /**
+     * 标签集合
+     */
+    private List<Item> itemList;
+}

+ 34 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/enums/DataSourceTypeEnum.java

@@ -0,0 +1,34 @@
+package com.judong.chuanyiserver.enums;
+
+public enum DataSourceTypeEnum {
+
+    OPC_UA_REAL("OPC UA 实时数据", "opc_ua_real"),
+    OPC_UA_HISTORY("OPC UA 历史数据", "opc_ua_history"),
+    OPC_DA_REAL("OPC DA 实时数据", "opc_da_real"),
+    OPC_HDA_HISTORY("OPC HDA 历史数据访问", "opc_hda_history"),
+    OPC_AE_ALARMS("OPC AE 实时报警", "opc_ae_alarms");
+
+    private String name;
+    private String value;
+
+    DataSourceTypeEnum(String name, String value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 8 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/DataSourceService.java

@@ -8,4 +8,12 @@ public interface DataSourceService {
     Result getDataSourceTree();
 
     Result addDataSource(DataSource dataSource);
+
+    Result testConnect(DataSource dataSource);
+
+    Result getAllDataSource();
+
+    Result getDataSourceById(Integer id);
+
+    Result delDataSourceById(Integer id);
 }

+ 8 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/ItemGroupService.java

@@ -0,0 +1,8 @@
+package com.judong.chuanyiserver.service;
+
+import com.judong.chuanyiserver.entity.ItemGroup;
+import com.judong.chuanyiserver.util.Result;
+
+public interface ItemGroupService {
+    Result addItemGroup(ItemGroup itemGroup);
+}

+ 77 - 5
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/DataSourceServiceImpl.java

@@ -4,10 +4,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.judong.chuanyiserver.dao.DataSourceDao;
 import com.judong.chuanyiserver.entity.DataSource;
 import com.judong.chuanyiserver.entity.DataSourceType;
+import com.judong.chuanyiserver.enums.DataSourceTypeEnum;
+import com.judong.chuanyiserver.enums.ResultEnum;
+import com.judong.chuanyiserver.exception.CustomException;
 import com.judong.chuanyiserver.service.DataSourceService;
-import com.judong.chuanyiserver.util.Blank;
-import com.judong.chuanyiserver.util.ConstantStr;
-import com.judong.chuanyiserver.util.Result;
+import com.judong.chuanyiserver.util.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,6 +24,9 @@ public class DataSourceServiceImpl implements DataSourceService {
     @Resource
     private DataSourceDao dataSourceDao;
 
+    @Resource
+    private UserUtil userUtil;
+
     @Override
     public Result getDataSourceTree() {
         List<DataSourceType> dataSourceTypeList = dataSourceDao.getAllDataSourceType();
@@ -33,8 +37,76 @@ public class DataSourceServiceImpl implements DataSourceService {
     }
 
     @Override
-    public Result addDataSource(DataSource dataSource) {
-        return null;
+    public synchronized Result addDataSource(DataSource dataSource) {
+        dataSource = OpcUtil.convertPassword(dataSource);
+        String userId = userUtil.getCurrentUserId();
+        dataSource.setUserId(userId);
+        if (Blank.isEmpty(dataSource.getId())) {
+            DataSource isExistDataSource = dataSourceDao.getDataSourceByName(userId, dataSource.getDataSourceName());
+            if (Blank.isNotEmpty(isExistDataSource)) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此名称的数据源配置了,请更改名称");
+            }
+            if (dataSourceDao.addDataSource(dataSource) <= 0) {
+                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "添加数据源配置失败");
+            }
+            return Result.ok("添加数据源配置成功");
+        } else {
+            DataSource isExistDataSource = dataSourceDao.getDataSourceByNameNoId(dataSource.getId(), userId, dataSource.getDataSourceName());
+            if (Blank.isNotEmpty(isExistDataSource)) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此名称的数据源配置了,请更改名称");
+            }
+            if (dataSourceDao.updateDataSource(dataSource) <= 0) {
+                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改数据源配置失败");
+            }
+            return Result.ok("修改数据源配置成功");
+        }
+    }
+
+    @Override
+    public Result testConnect(DataSource dataSource) {
+        DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
+        dataSource = OpcUtil.convertPassword(dataSource);
+        if (dataSourceType.getDataSourceTypeKey() == DataSourceTypeEnum.OPC_UA_REAL.getValue() ||
+                dataSourceType.getDataSourceTypeKey() == DataSourceTypeEnum.OPC_UA_HISTORY.getValue()) {
+            if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,端口号,匿名方式都不能为空");
+            }
+            if (dataSource.getIsAnonymous() == ConstantStr.NOT_ANONYMOUS) {
+                if (Blank.isEmpty(dataSource.getIpUserName(), dataSource.getIpPassword())) {
+                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "选择不匿名方式,需要填写用户名和密码");
+                }
+            }
+            return OpcUaUtil.opcUaTestConnect(dataSource);
+        } else if (dataSourceType.getDataSourceTypeKey() == DataSourceTypeEnum.OPC_DA_REAL.getValue() ||
+                dataSourceType.getDataSourceTypeKey() == DataSourceTypeEnum.OPC_HDA_HISTORY.getValue() ||
+                dataSourceType.getDataSourceTypeKey() == DataSourceTypeEnum.OPC_AE_ALARMS.getValue()
+        ) {
+            if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源ip,用户名,密码都不能为空");
+            }
+            return OpcDaUtil.opcDaTestConnect(dataSource);
+        } else {
+            throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "目前还没有此种类型的连接方式");
+        }
+    }
+
+    @Override
+    public Result getAllDataSource() {
+        String userId = userUtil.getCurrentUserId();
+        return Result.ok(dataSourceDao.getAllDataSource(userId));
+    }
+
+    @Override
+    public Result getDataSourceById(Integer id) {
+        return Result.ok(dataSourceDao.getDataSourceById(id));
+    }
+
+    @Override
+    public Result delDataSourceById(Integer id) {
+        if (dataSourceDao.delDataSourceById(id) <= 0) {
+            return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "删除数据源配置失败");
+        }
+        return Result.ok("删除数据源配置成功");
     }
 
     public List<JSONObject> genDataSourceTree(List<DataSourceType> dataSourceTypeList, Integer parentId) {

+ 23 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/service/impl/ItemGroupServiceImpl.java

@@ -0,0 +1,23 @@
+package com.judong.chuanyiserver.service.impl;
+
+import com.judong.chuanyiserver.dao.ItemGroupDao;
+import com.judong.chuanyiserver.entity.ItemGroup;
+import com.judong.chuanyiserver.service.ItemGroupService;
+import com.judong.chuanyiserver.util.Result;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+@Service
+@Transactional
+public class ItemGroupServiceImpl implements ItemGroupService {
+
+    @Resource
+    private ItemGroupDao itemGroupDao;
+
+    @Override
+    public Result addItemGroup(ItemGroup itemGroup) {
+        return null;
+    }
+}

+ 46 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcDaUtil.java

@@ -0,0 +1,46 @@
+package com.judong.chuanyiserver.util;
+
+import com.judong.chuanyiserver.entity.DataSource;
+import com.judong.chuanyiserver.enums.ConnectModeEnum;
+import com.judong.chuanyiserver.enums.ResultEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.openscada.opc.lib.common.ConnectionInformation;
+import org.openscada.opc.lib.da.Server;
+
+import java.util.concurrent.Executors;
+
+@Slf4j
+public class OpcDaUtil {
+
+    public static Server createServer(DataSource dataSource) {
+        final ConnectionInformation ci = new ConnectionInformation();
+        ci.setHost(dataSource.getIpAddress());
+        ci.setDomain("");
+        ci.setUser(dataSource.getIpUserName());
+        ci.setPassword(dataSource.getIpPassword());
+        ci.setClsid(ConnectModeEnum.KEPOPCSERVER.getName());
+        return new Server(ci, Executors.newSingleThreadScheduledExecutor());
+    }
+
+    public static Result opcDaTestConnect(DataSource dataSource) {
+        Server server = null;
+        try {
+            server = createServer(dataSource);
+            if (Blank.isEmpty(server)) {
+                return Result.no(ResultEnum.REQUEST_TIME_OUT.getRespCode(), "创建服务失败");
+            }
+            // 连接到服务
+            long start = System.currentTimeMillis();
+            server.connect();
+            long finish = System.currentTimeMillis();
+            log.info("连接耗费时间为:" + (finish - start) + "毫秒");
+            return Result.ok("测试连接成功");
+        } catch (Exception e) {
+            return Result.no(ResultEnum.REQUEST_TIME_OUT.getRespCode(), e.getMessage());
+        } finally {
+            if (Blank.isNotEmpty(server)) {
+                server.dispose();
+            }
+        }
+    }
+}

+ 101 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcUaUtil.java

@@ -0,0 +1,101 @@
+package com.judong.chuanyiserver.util;
+
+import com.judong.chuanyiserver.entity.DataSource;
+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.stack.client.DiscoveryClient;
+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.unsigned.Unsigned;
+import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.function.Predicate;
+
+@Slf4j
+public class OpcUaUtil {
+
+    private static final String certPath = "C:/Users/Administrator/Desktop/";
+
+    /**
+     * 创建OPC UA客户端
+     *
+     * @return
+     */
+    public static OpcUaClient createClient(DataSource dataSource) throws Exception {
+        String endpointUrl = "opc.tcp://" + dataSource.getIpAddress() + ":" + dataSource.getIpPort();
+        Path securityTempDir = Paths.get(certPath, "security");
+
+        Files.createDirectories(securityTempDir);
+        if (!Files.exists(securityTempDir)) {
+            log.info("无法创建安全目录: " + securityTempDir);
+            return null;
+        }
+        KeyStoreLoader keyStoreLoader = new KeyStoreLoader();
+        KeyStoreLoader loader = keyStoreLoader.load(securityTempDir);
+        // 搜索OPC节点
+        List<EndpointDescription> endpoints = null;
+        try {
+            endpoints = DiscoveryClient.getEndpoints(endpointUrl).get();
+        } catch (Throwable e) {
+            String discoveryUrl = endpointUrl;
+            if (!discoveryUrl.endsWith("/")) {
+                discoveryUrl += "/";
+            }
+            discoveryUrl += "discovery";
+            endpoints = DiscoveryClient.getEndpoints(discoveryUrl).get();
+        }
+        EndpointDescription endpoint = endpoints.stream()
+                .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri())).filter(endpointFilter())
+                .findFirst().orElseThrow(() -> new Exception("no desired endpoints returned"));
+        OpcUaClientConfig config = OpcUaClientConfig.builder()
+                .setApplicationName(LocalizedText.english("my"))
+                .setApplicationUri("urn:Jellyleo:UnifiedAutomation:UaExpert@Jellyleo")
+                .setCertificate(loader.getClientCertificate()).setKeyPair(loader.getClientKeyPair())
+                .setEndpoint(endpoint)
+                //如果不是匿名则获取用户名和密码
+                .setIdentityProvider(dataSource.getIsAnonymous() == ConstantStr.NOT_ANONYMOUS ? new UsernameProvider(dataSource.getDataSourceName(), dataSource.getIpPassword()) : new AnonymousProvider())
+                .setRequestTimeout(Unsigned.uint(5000)).build();
+
+        return OpcUaClient.create(config);
+    }
+
+    private static Predicate<EndpointDescription> endpointFilter() {
+        return e -> true;
+    }
+
+    /**
+     * 测试opcUa连接
+     *
+     * @param dataSource
+     * @return
+     */
+    public static Result opcUaTestConnect(DataSource dataSource) {
+        OpcUaClient opcUaClient = null;
+        try {
+            opcUaClient = createClient(dataSource);
+            if (Blank.isEmpty(opcUaClient)) {
+                return Result.no(ResultEnum.REQUEST_TIME_OUT.getRespCode(), "客户端创建失败");
+            }
+            long start = System.currentTimeMillis();
+            opcUaClient.connect().get();
+            long finish = System.currentTimeMillis();
+            log.info("连接耗费时间为:" + (finish - start) + "毫秒");
+            return Result.ok("测试连接成功");
+        } catch (Exception e) {
+            return Result.no(ResultEnum.REQUEST_TIME_OUT.getRespCode(), e.getMessage());
+        } finally {
+            if (Blank.isNotEmpty(opcUaClient)) {
+                opcUaClient.disconnect();
+            }
+        }
+
+    }
+}

+ 35 - 0
chuanyi_server/src/main/java/com/judong/chuanyiserver/util/OpcUtil.java

@@ -0,0 +1,35 @@
+package com.judong.chuanyiserver.util;
+
+import com.judong.chuanyiserver.dao.DataSourceDao;
+import com.judong.chuanyiserver.entity.DataSource;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.annotation.Resource;
+
+@Slf4j
+public class OpcUtil {
+
+    @Resource
+    private DataSourceDao dataSourceDao;
+
+
+    /**
+     * 将传入的数据源的密码转换为正常的密码
+     *
+     * @param dataSource
+     * @return
+     */
+    public static DataSource convertPassword(DataSource dataSource) {
+        if (Blank.isEmpty(dataSource)) {
+            return null;
+        }
+        if (Blank.isNotEmpty(dataSource.getIpPassword())) {
+            try {
+                dataSource.setIpPassword(RSAUtil.decrypt(dataSource.getIpPassword(), "UTF-8"));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return dataSource;
+    }
+}

+ 99 - 0
chuanyi_server/src/main/resources/mapper/DataSourceDao.xml

@@ -2,10 +2,109 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.judong.chuanyiserver.dao.DataSourceDao">
 
+    <insert id="addDataSource">
+        insert into t_data_source(type_id, user_id, data_source_name, data_source_describe, ip_address, ip_port,
+                                  ip_user_name,
+                                  ip_password, is_anonymous, create_time)
+            VALUE (#{typeId}, #{userId}, #{dataSourceName}, #{dataSourceDescribe},
+                   #{ipAddress}, #{ipPort},
+                   #{ipUserName}, #{ipPassword},
+                   #{isAnonymous}, now())
+    </insert>
+
+    <update id="updateDataSource">
+        update t_data_source
+        set data_source_name=#{dataSourceName},
+            data_source_describe=#{dataSourceDescribe},
+            ip_address=#{ipAddress},
+            ip_port=#{ipPort},
+            ip_user_name=#{ipUserName},
+            ip_password=#{ipPassword},
+            is_anonymous=#{isAnonymous}
+        where id = #{id}
+    </update>
+
+    <delete id="delDataSourceById">
+        delete
+        from t_data_source
+        where id = #{id}
+    </delete>
 
     <select id="getAllDataSourceType" resultType="com.judong.chuanyiserver.entity.DataSourceType">
         select id, parent_id, data_source_type_name, data_source_type_key, sort_num, data_source_type_describe
         from t_data_source_type
         order by sort_num;
     </select>
+
+    <select id="getDataSourceByName" resultType="com.judong.chuanyiserver.entity.DataSource">
+        select id,
+               type_id,
+               data_source_name,
+               data_source_describe,
+               ip_address,
+               ip_port,
+               ip_user_name,
+               ip_password,
+               is_anonymous,
+               create_time
+        from t_data_source
+        where user_id = #{userId}
+          and data_source_name = #{dataSourceName}
+    </select>
+
+    <select id="getDataSourceTypeById" resultType="com.judong.chuanyiserver.entity.DataSourceType">
+        select id, parent_id, data_source_type_name, data_source_type_key, sort_num, data_source_type_describe
+        from t_data_source_type
+        where id = #{id}
+    </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
+        where user_id = #{userId}
+        order by create_time
+    </select>
+
+    <select id="getDataSourceById" 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
+        where id = #{id}
+    </select>
+
+    <select id="getDataSourceByNameNoId" resultType="com.judong.chuanyiserver.entity.DataSource">
+        select id,
+               type_id,
+               data_source_name,
+               data_source_describe,
+               ip_address,
+               ip_port,
+               ip_user_name,
+               ip_password,
+               is_anonymous,
+               create_time
+        from t_data_source
+        where user_id = #{userId}
+          and data_source_name = #{dataSourceName}
+          and id != #{id}
+    </select>
 </mapper>

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

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.judong.chuanyiserver.dao.ItemGroupDao">
+
+</mapper>