Procházet zdrojové kódy

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

FinalYu před 2 roky
rodič
revize
ae07ce2533
29 změnil soubory, kde provedl 475 přidání a 127 odebrání
  1. 1 0
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/util/ConstantStr.java
  2. 12 0
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/util/JavaTypeUtil.java
  3. 1 17
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/util/MathUtil.java
  4. 46 0
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/InitRunner.java
  5. 1 0
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/InterceptorConfig.java
  6. 44 28
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/UserController.java
  7. 1 0
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/UserService.java
  8. 2 1
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/DataModelServiceImpl.java
  9. 30 21
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/DataSourceServiceImpl.java
  10. 4 1
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/RawDataServiceImpl.java
  11. 3 1
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java
  12. 49 0
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/UserServiceImpl.java
  13. 92 0
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java
  14. 8 8
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaTask.java
  15. 3 1
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/util/OpcDaUtil.java
  16. 21 18
      chaunyi_opc/opc_da/src/main/resources/mapper/DataSourceDao.xml
  17. 48 0
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/config/InitRunner.java
  18. 27 1
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/controller/DataSourceController.java
  19. 4 0
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/dao/DataSourceDao.java
  20. 0 2
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/service/DataSourceService.java
  21. 0 13
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/service/impl/DataSourceServiceimpl.java
  22. 0 1
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/service/impl/ItemGroupServiceImpl.java
  23. 37 0
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java
  24. 4 4
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaChangeTask.java
  25. 2 2
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaExceedTask.java
  26. 4 4
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaFrequencyTask.java
  27. 2 2
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaLowerTask.java
  28. 2 2
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/util/OpcUaUtil.java
  29. 27 0
      chaunyi_opc/opc_ua/src/main/resources/mapper/DataSourceDao.xml

+ 1 - 0
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/util/ConstantStr.java

@@ -60,6 +60,7 @@ public class ConstantStr {
     public static final String DATA_VALUE = "dataValue";
     public static final String DATA_VALUE_TIME = "dataValueTime";
     public static final String VALUE_BELONG_TIME = "valueBelongTime";
+    public static final String DATA_SOURCE_TREE = "dataSourceTree";
 
     //t_raw_data水平分表的个数
     public static final Integer SUB_TABLE_NUM = 5;

+ 12 - 0
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/util/JavaTypeUtil.java

@@ -1,5 +1,7 @@
 package com.example.opc_common.util;
 
+import com.alibaba.fastjson.JSONObject;
+
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
@@ -47,4 +49,14 @@ public class JavaTypeUtil {
         }
         return dataList;
     }
+
+    public static List<JSONObject> objChangeListJson(Object dataObject) {
+        List<JSONObject> dataList = new ArrayList<>();
+        if (dataObject instanceof ArrayList<?>) {
+            for (Object o : (List<?>) dataObject) {
+                dataList.add((JSONObject) o);
+            }
+        }
+        return dataList;
+    }
 }

+ 1 - 17
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/util/MathUtil.java

@@ -21,23 +21,7 @@ public class MathUtil {
      * @return
      * @throws ParseException
      */
-    public static BigDecimal quadricOperation(String parameter, String MathString, Double value) {
-        if (Blank.isEmpty(parameter, MathString, value)) {
-            throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "数学参数,表达式,数据值不能为空");
-        }
-        Scope scope = new Scope();
-        Variable a = scope.getVariable(parameter);
-        a.setValue(value);
-        try {
-            Expression expr = Parser.parse(MathString, scope);
-            return expr.evaluate();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return new BigDecimal(0);
-    }
-
-    public static BigDecimal quadricOperation1(String parameter, String MathString, BigDecimal value) {
+    public static BigDecimal quadricOperation(String parameter, String MathString, BigDecimal value) {
         if (Blank.isEmpty(parameter, MathString, value)) {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "数学参数,表达式,数据值不能为空");
         }

+ 46 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/InitRunner.java

@@ -0,0 +1,46 @@
+package com.example.opc_da.config;
+
+import com.example.opc_common.entity.DataSource;
+import com.example.opc_common.enums.DataSourceTypeEnum;
+import com.example.opc_common.util.Blank;
+import com.example.opc_da.dao.DataSourceDao;
+import com.example.opc_da.task.OpcAsyncTask;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+/**
+ * 项目初始化配置
+ */
+@Slf4j
+@Configuration
+public class InitRunner {
+
+    @Autowired
+    private DataSourceDao dataSourceDao;
+
+    @Autowired
+    private OpcAsyncTask opcAsyncTask;
+
+    @PostConstruct
+    public void initData() {
+        //将ua和da的树,加载到redis中去
+        List<DataSource> dataSourceList = dataSourceDao.getAllDataSource(null);
+        if (Blank.isNotEmpty(dataSourceList)) {
+            for (DataSource dataSource : dataSourceList) {
+                String dataSourceTypeKey = dataSource.getDataSourceTypeKey();
+                if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
+                        dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
+                        dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())) {
+                    if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getClsId())) {
+                        log.info("ip地址,账号,opc驱动都不能为空");
+                    }
+                    opcAsyncTask.opcDaGetTree(dataSource);
+                }
+            }
+        }
+    }
+}

+ 1 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/InterceptorConfig.java

@@ -28,6 +28,7 @@ public class InterceptorConfig implements WebMvcConfigurer {
                 .excludePathPatterns("/user/getPublicKey")
                 .excludePathPatterns("/user/frontUserLogin")
                 .excludePathPatterns("/user/backUserLogin")
+                .excludePathPatterns("/user/phoneUserLogin")
                 .excludePathPatterns("/connect/testConnect")
                 .excludePathPatterns("/user/assignUserListByRoleId")
                 .excludePathPatterns("/role/getMenuTreeByRoleList")

+ 44 - 28
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/UserController.java

@@ -61,6 +61,22 @@ public class UserController {
     }
 
     /**
+     * 手机端登录,(只限前端用户,且需要验证码)
+     */
+    /**
+     * @param user
+     * @return
+     */
+    @PostMapping("/phoneUserLogin")
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.LOGIN)
+    public Result phoneUserLogin(@RequestBody User user) {
+        if (Blank.isEmpty(user, user.getUserName(), user.getPassword(), user.getUid(), user.getVerifyCode())) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return userService.phoneUserLogin(user);
+    }
+
+    /**
      * 后台管理系统登录(只允许管理员登录)
      *
      * @param user
@@ -112,7 +128,7 @@ public class UserController {
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.UPDATE)
     public Result updateUser(@RequestBody User user) {
-        if (Blank.isEmpty(user) ) {
+        if (Blank.isEmpty(user)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
         }
         return userService.updateUser(user);
@@ -226,7 +242,7 @@ public class UserController {
     @PostMapping("/assignUserListByRoleId")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.ASSIGN)
-    public Result assignUserListByRoleId(@RequestBody AddUserRole addUserRole ) {
+    public Result assignUserListByRoleId(@RequestBody AddUserRole addUserRole) {
         if (Blank.isEmpty(addUserRole.getUserIdList(), addUserRole.getRoleId())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
         }
@@ -260,19 +276,19 @@ public class UserController {
     @PostMapping("/relieveUserRoles")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.RELIEVE)
-    public Result relieveUserRole(@RequestBody List<UserRole> userRoles){
-        if (userRoles.size()<=0){
+    public Result relieveUserRole(@RequestBody List<UserRole> userRoles) {
+        if (userRoles.size() <= 0) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
         }
-        return  userService.relieveUserRoles(userRoles);
+        return userService.relieveUserRoles(userRoles);
     }
 
     /**
      * 修改密码
      */
     @PostMapping("/updatePassWord")
-    public Result updatePassWord(@RequestBody User user){
-        if (Blank.isEmpty(user.getPassword(),user.getNewPassword(),user.getUserId())){
+    public Result updatePassWord(@RequestBody User user) {
+        if (Blank.isEmpty(user.getPassword(), user.getNewPassword(), user.getUserId())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.updatePassWord(user);
@@ -284,8 +300,8 @@ public class UserController {
     @PostMapping("/updatePasswordByAdmin")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.RELIEVE)
-    public Result updatePasswordByAdmin(@RequestBody User user){
-        if (Blank.isEmpty(user.getNewPassword(),user.getUserId())){
+    public Result updatePasswordByAdmin(@RequestBody User user) {
+        if (Blank.isEmpty(user.getNewPassword(), user.getUserId())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.updatePasswordByAdmin(user);
@@ -297,8 +313,8 @@ public class UserController {
     @GetMapping("queryUserDtail")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.RELIEVE)
-    public Result queryUserDtail(String userId){
-        if (Blank.isEmpty(userId)){
+    public Result queryUserDtail(String userId) {
+        if (Blank.isEmpty(userId)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.queryUserDtail(userId);
@@ -310,8 +326,8 @@ public class UserController {
     @GetMapping("/queryNotMenuByUserId")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.RELIEVE)
-    public Result queryNotMenuByUserId(String userId){
-        if (Blank.isEmpty(userId)){
+    public Result queryNotMenuByUserId(String userId) {
+        if (Blank.isEmpty(userId)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.queryNotMenuByUserId(userId);
@@ -323,8 +339,8 @@ public class UserController {
     @GetMapping("/queryUserRoleByUserId")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.RELIEVE)
-    public Result queryUserRoleByUserId(String userId){
-        if (Blank.isEmpty(userId)){
+    public Result queryUserRoleByUserId(String userId) {
+        if (Blank.isEmpty(userId)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.queryUserRoleByUserId(userId);
@@ -336,11 +352,11 @@ public class UserController {
     @GetMapping("/queryUserType")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.SELECT)
-    public Result queryUserType(Integer startNum, Integer limitNum, String userName, Integer state,Integer roleId){
-        if (Blank.isEmpty(startNum,limitNum)){
+    public Result queryUserType(Integer startNum, Integer limitNum, String userName, Integer state, Integer roleId) {
+        if (Blank.isEmpty(startNum, limitNum)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
-        return userService.queryUserType(startNum, limitNum, userName, state,roleId);
+        return userService.queryUserType(startNum, limitNum, userName, state, roleId);
     }
 
     /**
@@ -349,8 +365,8 @@ public class UserController {
     @GetMapping("/queryUserNOtInDepartment")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.SELECT)
-    public Result queryUserNOtInDepartment(String userName, Integer state, Integer page, Integer num){
-        if (Blank.isEmpty(page,num)){
+    public Result queryUserNOtInDepartment(String userName, Integer state, Integer page, Integer num) {
+        if (Blank.isEmpty(page, num)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.queryUserNOtInDepartment(userName, state, page, num);
@@ -362,8 +378,8 @@ public class UserController {
     @PostMapping("/updateUserListState")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.DELETE)
-    public Result updateUserListState(@RequestBody List<String> userId){
-        if (Blank.isEmpty(userId)){
+    public Result updateUserListState(@RequestBody List<String> userId) {
+        if (Blank.isEmpty(userId)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.updateUserListState(userId);
@@ -375,8 +391,8 @@ public class UserController {
     @GetMapping("/queryDeleteUser")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.SELECT)
-    public Result queryDeleteUser(Integer page, Integer num, String userName, Integer userType){
-        if (Blank.isEmpty(page,num)){
+    public Result queryDeleteUser(Integer page, Integer num, String userName, Integer userType) {
+        if (Blank.isEmpty(page, num)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.queryDeleteUser(page, num, userName, userType);
@@ -389,8 +405,8 @@ public class UserController {
     @GetMapping("/updateUserByListId")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.UPDATE)
-    public Result updateUserByListId(@RequestParam("userIdList") List<String> userIdList){
-        if (Blank.isEmpty(userIdList)){
+    public Result updateUserByListId(@RequestParam("userIdList") List<String> userIdList) {
+        if (Blank.isEmpty(userIdList)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "参数错误");
         }
         return userService.updateUserByListId(userIdList);
@@ -402,7 +418,7 @@ public class UserController {
     @GetMapping("/queryCustomerUserNum")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.SELECT)
-    public Result queryCustomerUserNum(){
+    public Result queryCustomerUserNum() {
         return userService.queryCustomerUserNum();
     }
 
@@ -412,7 +428,7 @@ public class UserController {
     @GetMapping("/queryManagerUserNum")
     @PermissionControl
     @WebLog(ServerEnum = ServerEnum.SERVER, ModelEnum = ModelEnum.USER, OperationEnum = OperationEnum.SELECT)
-    public Result queryManagerUserNum(){
+    public Result queryManagerUserNum() {
         return userService.queryManagerUserNum();
     }
 

+ 1 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/UserService.java

@@ -122,4 +122,5 @@ public interface UserService {
     Result queryManagerUserNum();
 
 
+    Result phoneUserLogin(User user);
 }

+ 2 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/DataModelServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.List;
 
 @Service
@@ -74,6 +75,6 @@ public class DataModelServiceImpl implements DataModelService {
         if (Blank.isEmpty(dataModel)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "没有相应的数据模型");
         }
-        return Result.ok(MathUtil.quadricOperation(dataModel.getMathParameter(), dataModel.getOperationRule(), dataValue));
+        return Result.ok(MathUtil.quadricOperation(dataModel.getMathParameter(), dataModel.getOperationRule(), new BigDecimal(dataValue)));
     }
 }

+ 30 - 21
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/DataSourceServiceImpl.java

@@ -9,11 +9,14 @@ import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.JavaTypeUtil;
 import com.example.opc_common.util.Result;
 import com.example.opc_da.dao.DataSourceDao;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.service.DataSourceService;
+import com.example.opc_da.task.OpcAsyncTask;
 import com.example.opc_da.util.OpcDaUtil;
+import com.example.opc_da.util.RedisUtil;
 import com.example.opc_da.util.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -23,7 +26,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
-import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -42,6 +44,12 @@ public class DataSourceServiceImpl implements DataSourceService {
     private UserUtil userUtil;
 
     @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private OpcAsyncTask opcAsyncTask;
+
+    @Autowired
     private RestTemplate restTemplate;
 
     @Value("${opc_ua_server.address}")
@@ -69,6 +77,7 @@ public class DataSourceServiceImpl implements DataSourceService {
             if (dataSourceDao.addDataSource(dataSource) <= 0) {
                 return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "添加数据源配置失败");
             }
+            opcAsyncTask.opcGetTree(dataSource);
             return Result.ok("添加数据源配置成功");
         } else {
             DataSource isExistDataSource = dataSourceDao.getDataSourceByNameNoId(dataSource.getId(), userId, dataSource.getDataSourceName());
@@ -78,6 +87,7 @@ public class DataSourceServiceImpl implements DataSourceService {
             if (dataSourceDao.updateDataSource(dataSource) <= 0) {
                 return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改数据源配置失败");
             }
+            opcAsyncTask.opcGetTree(dataSource);
             return Result.ok("修改数据源配置成功");
         }
     }
@@ -88,8 +98,9 @@ public class DataSourceServiceImpl implements DataSourceService {
         if (Blank.isNotEmpty(dataSource.getIpPassword())) {
             dataSource = DataSource.convertPassword(dataSource);
         }
-        if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
-                dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
+        String dataSourceTypeKey = dataSourceType.getDataSourceTypeKey();
+        if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
             if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "ip地址,端口号,匿名方式都不能为空");
             }
@@ -99,18 +110,13 @@ public class DataSourceServiceImpl implements DataSourceService {
                 }
             }
             return restTemplate.postForObject(opcUaUrl + "/dataSource/testConnect", new HttpEntity<>(dataSource, new HttpHeaders()), Result.class);
-        } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_DA_REAL.getValue())) {
+        } else if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())) {
             if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getClsId())) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "ip地址,账号,opc驱动都不能为空");
             }
             return OpcDaUtil.opcDaTestConnect(dataSource);
-        } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
-                dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())
-        ) {
-            if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName())) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "ip地址,账号都不能为空");
-            }
-            return OpcDaUtil.opcDaTestConnect(dataSource);
         } else {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "目前还没有此种类型的连接方式");
         }
@@ -158,8 +164,9 @@ public class DataSourceServiceImpl implements DataSourceService {
             dataSource = DataSource.convertPassword(dataSource);
         }
         DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
-        if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
-                dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
+        String dataSourceTypeKey = dataSourceType.getDataSourceTypeKey();
+        if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
             if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "ip地址,端口号,匿名方式都不能为空");
             }
@@ -169,18 +176,20 @@ public class DataSourceServiceImpl implements DataSourceService {
                 }
             }
             return restTemplate.postForObject(opcUaUrl + "/dataSource/getDataSourceItemTree", new HttpEntity<>(dataSource, new HttpHeaders()), Result.class);
-        } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_DA_REAL.getValue())) {
+        } else if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())) {
             if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getClsId())) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "ip地址,账号,opc驱动都不能为空");
             }
-            return OpcDaUtil.opcDaGetTree(dataSource);
-        } else if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
-                dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())
-        ) {
-            if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName())) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "ip地址,账号,opc驱动都不能为空");
+            Object objectTree = redisUtil.lGet(ConstantStr.DATA_SOURCE_TREE + id, 0, -1);
+            if (Blank.isNotEmpty(objectTree)) {
+                List<JSONObject> jsonObjects = JavaTypeUtil.objChangeListJson(objectTree);
+                opcAsyncTask.opcDaGetTree(dataSource);
+                return Result.ok(jsonObjects);
+            } else {
+                return OpcDaUtil.opcDaGetTree(dataSource);
             }
-            return OpcDaUtil.opcDaGetTree(dataSource);
         } else {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "目前还没有此种类型的连接方式");
         }

+ 4 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/RawDataServiceImpl.java

@@ -6,7 +6,10 @@ import com.example.opc_common.entity.*;
 import com.example.opc_common.enums.DataSourceTypeEnum;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
-import com.example.opc_common.util.*;
+import com.example.opc_common.util.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.MathUtil;
+import com.example.opc_common.util.Result;
 import com.example.opc_da.dao.DataSourceDao;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.RawDataDao;

+ 3 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java

@@ -9,7 +9,9 @@ import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_common.util.Result;
-import com.example.opc_da.dao.*;
+import com.example.opc_da.dao.DictDao;
+import com.example.opc_da.dao.ReportTableDao;
+import com.example.opc_da.dao.UserGroupDao;
 import com.example.opc_da.dynamicSchedule.CronTaskRegister;
 import com.example.opc_da.dynamicSchedule.SchedulingRunnable;
 import com.example.opc_da.service.ReportTableService;

+ 49 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/UserServiceImpl.java

@@ -539,6 +539,55 @@ public class UserServiceImpl implements UserService {
         return Result.ok(userDao.queryManagerUserNum(ConstantStr.BACK_USER, ConstantStr.TOMBSTONE));
     }
 
+    @Override
+    public Result phoneUserLogin(User user) {
+        try {
+            user.setPassword(RSAUtil.decrypt(user.getPassword(), "UTF-8"));
+        } catch (Exception e) {
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        User isExistUser = userDao.getUserByNamePass(user.getUserName(), EncryptUtils.StrToMD5(user.getPassword()));
+        if (Blank.isEmpty(isExistUser)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "帐户或密码错误");
+        }
+        if (isExistUser.getUserType() != ConstantStr.FRONT_USER) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "请使用客户端账号登录");
+        }
+        // 校验验证码
+        String storeCode = Convert.toStr(redisUtil.get(user.getUid() + "-captcha"));
+        if (Blank.isEmpty(storeCode)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "验证码失效,请重新获取验证码");
+        }
+        if (!user.getVerifyCode().equals(storeCode)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "输入的验证码不正确");
+        }
+        // 验证码通过则删除验证码
+        redisUtil.del(user.getUid() + "-captcha");
+        switch (isExistUser.getState()) {
+            case ConstantStr.NORMAL_USE:
+                JSONObject json = new JSONObject();
+                isExistUser.setPassword("");
+                //生成token
+                String token = TokenUtil.token(isExistUser.getUserName(), ConstantStr.FIVE_HOUR);
+                json.put("token", token);
+                redisUtil.set(isExistUser.getUserId(), token);
+                redisUtil.set(token, isExistUser.getUserId(), ConstantStr.FIVE_HOUR);
+                isExistUser.setRoleList(userDao.getRoleListByUserId(isExistUser.getUserId()));
+                json.put("user", isExistUser);
+                //更新用户登录状态
+                if (userDao.updateLoginState(isExistUser.getUserId()) <= 0) {
+                    return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "更新登录状态失败");
+                }
+                return Result.ok(json);
+            case ConstantStr.LOCK_USER:
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "用户已被锁定,请联系管理员");
+            case ConstantStr.TOMBSTONE:
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "用户已被删除,请联系管理员");
+            default:
+                throw new CustomException(ResultEnum.UNKNOWN_ERROR.getRespCode(), "用户状态不在系统设置列中");
+        }
+    }
+
 
     @Override
     public synchronized Result updateUser(User user) {

+ 92 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java

@@ -1,12 +1,25 @@
 package com.example.opc_da.task;
 
+import com.alibaba.fastjson.JSONObject;
+import com.example.opc_common.entity.DataSource;
 import com.example.opc_common.entity.RawData;
+import com.example.opc_common.enums.DataSourceTypeEnum;
+import com.example.opc_common.enums.OpcDaDriverEnum;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_da.dao.RawDataDao;
+import com.example.opc_da.util.OpcDaUtil;
+import com.example.opc_da.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.openscada.opc.dcom.da.OPCSERVERSTATE;
+import org.openscada.opc.lib.da.Server;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
@@ -22,6 +35,15 @@ public class OpcAsyncTask {
     @Resource
     private RawDataDao rawDataDao;
 
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Value("${opc_ua_server.address}")
+    private String opcUaUrl;
+
     /**
      * 新增一条原始数据
      *
@@ -45,4 +67,74 @@ public class OpcAsyncTask {
             rawDataDao.addRawDataList(id, remainder, rawDataList);
         }
     }
+
+    public void opcGetTree(DataSource dataSource){
+        String dataSourceTypeKey = dataSource.getDataSourceTypeKey();
+        if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())
+        ) {
+            if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
+                log.info("ip地址,端口号,匿名方式都不能为空");
+            }
+            if (dataSource.getIsAnonymous() == ConstantStr.NOT_ANONYMOUS) {
+                if (Blank.isEmpty(dataSource.getIpUserName())) {
+                    log.info("选择不匿名方式,需要填写账号");
+                }
+            }
+            restTemplate.postForObject(opcUaUrl + "/dataSource/genDataSourceItemTree", new HttpEntity<>(dataSource, new HttpHeaders()), byte[].class);
+        } else if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue()) ||
+                dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue())) {
+            if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getClsId())) {
+                log.info("ip地址,账号,opc驱动都不能为空");
+            }
+            opcDaGetTree(dataSource);
+        } else {
+            log.info("目前还没有此种类型的连接方式");
+        }
+    }
+
+    public void opcDaGetTree(DataSource dataSource) {
+        Server server = null;
+        try {
+            server = OpcDaUtil.createServer(dataSource);
+            server.connect();
+            if (null == server.getServerState()) {
+                log.info("连接失败");
+            }
+            if (OPCSERVERSTATE.OPC_STATUS_RUNNING == server.getServerState().getServerState()) {
+                if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.KEPSERVER.getValue()) ||
+                        dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.OPCIFIX.getValue())) {
+                    List<JSONObject> jsonObjectList = OpcDaUtil.generServerTree(server);
+                    redisUtil.lSet(ConstantStr.DATA_SOURCE_TREE + dataSource.getId(), jsonObjectList);
+//                    redisUtil.set(ConstantStr.DATA_SOURCE_TREE + dataSource.getId(), jsonObjectList);
+                } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.WINCC.getValue()) ||
+                        dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.SCADA.getValue())) {
+                    List<JSONObject> jsonObjectList = OpcDaUtil.generWinccTree(server);
+                    redisUtil.lSet(ConstantStr.DATA_SOURCE_TREE + dataSource.getId(), jsonObjectList);
+                } else {
+                    log.info("目前未适配此种驱动类型");
+                }
+            }
+        } catch (Exception e) {
+            String message = e.getMessage();
+            if (message.contains("0x00000005")) {
+                log.info("账号校验不通过,账号或密码错误,本地安全策略有问题");
+            } else if (message.contains("0x8001FFFF")) {
+                log.info("ip不存在或ip不互通");
+            } else if (message.contains("0x80040154")) {
+                log.info("clsId不存在");
+            } else if (message.contains("0x80040153")) {
+                log.info("注册表中未找到此驱动,可能是注册表未删除干净");
+            } else if (message.contains("0x80070005")) {
+                log.info("访问被拒绝,可能是权限未配置,配置可在组件服务中进行配置");
+            } else {
+                log.info(e.getMessage());
+            }
+        } finally {
+            if (Blank.isNotEmpty(server)) {
+                server.dispose();
+            }
+        }
+    }
 }

+ 8 - 8
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaTask.java

@@ -170,7 +170,7 @@ public class OpcDaTask extends TimerTask {
                                             List<BigDecimal> dataValueList = new ArrayList<>();
                                             BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                             dataValueList.add(Blank.isNotEmpty(dm) ?
-                                                    MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                                     bigDecimal);
                                             redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                                         } catch (Exception e) {
@@ -193,7 +193,7 @@ public class OpcDaTask extends TimerTask {
                                                     dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                                                 }
                                                 BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                                dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                                dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                                 redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                                             } catch (Exception e) {
                                                 List<String> dataValueList = new ArrayList<>();
@@ -240,7 +240,7 @@ public class OpcDaTask extends TimerTask {
                                                 dataValueList = new ArrayList<>();
                                                 BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                                 dataValueList.add(Blank.isNotEmpty(dm) ?
-                                                        MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                                        MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                                         bigDecimal);
                                                 redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                                             } catch (Exception e) {
@@ -472,7 +472,7 @@ public class OpcDaTask extends TimerTask {
                                         try {
                                             List<BigDecimal> dataValueList = new ArrayList<>();
                                             BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                            dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                            dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                             redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                                         } catch (Exception e) {
                                             List<String> dataValueList = new ArrayList<>();
@@ -500,7 +500,7 @@ public class OpcDaTask extends TimerTask {
                                                         dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                                                     }
                                                     BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                                    dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                                    dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                                     redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                                                 } catch (Exception e) {
                                                     List<String> dataValueList = new ArrayList<>();
@@ -568,7 +568,7 @@ public class OpcDaTask extends TimerTask {
 
                                                 dataValueList = new ArrayList<>();
                                                 BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                                dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                                dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                                 redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                                             } catch (Exception e) {
                                                 List<String> dataValueList = new ArrayList<>();
@@ -790,7 +790,7 @@ public class OpcDaTask extends TimerTask {
                                 if (!javaType.toLowerCase().equals("boolean")) {
                                     try {
                                         BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
+                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
                                         if (Blank.isEmpty(storageYmdh)) {
                                             if (dmData.compareTo(bigModeValue) == 1) {
                                                 redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
@@ -998,7 +998,7 @@ public class OpcDaTask extends TimerTask {
                                 if (!javaType.toLowerCase().equals("boolean")) {
                                     try {
                                         BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
+                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
                                         if (Blank.isEmpty(storageYmdh)) {
                                             if (dmData.compareTo(bigModeValue) == -1) {
                                                 redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);

+ 3 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/util/OpcDaUtil.java

@@ -155,6 +155,8 @@ public class OpcDaUtil {
         //获取服务器下所有ITEM列表,树形展示
         TreeBrowser treeBrowser = server.getTreeBrowser();
         Branch browse = treeBrowser.browse();
+//        Collection<String> accessPaths = server.getTreeBrowser().getAccessPaths("111");
+//        server.getTreeBrowser().
         if (Blank.isEmpty(browse)) {
             return null;
         }
@@ -431,7 +433,7 @@ public class OpcDaUtil {
                             } else {
                                 try {
                                     BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                    jsonObject.put("dataValue", Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                    jsonObject.put("dataValue", Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                 } catch (Exception e) {
                                     jsonObject.put("dataValue", val.get("value"));
                                 }

+ 21 - 18
chaunyi_opc/opc_da/src/main/resources/mapper/DataSourceDao.xml

@@ -67,25 +67,28 @@
 
     <select id="getAllDataSource" resultType="com.example.opc_common.entity.DataSource">
         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.cls_id,
-               tds.prog_id,
-               tds.driver_describe,
-               tds.create_time,
-               tdst.data_source_type_name,
-               tdst.data_source_type_key,
-               tdst.data_source_type_describe
+        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.cls_id,
+        tds.prog_id,
+        tds.driver_describe,
+        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}
+        LEFT JOIN t_data_source_type tdst ON tds.type_id = tdst.id
+        where 1=1
+        <if test="userId != null">
+            AND user_id = #{userId}
+        </if>
         order by create_time
     </select>
 

+ 48 - 0
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/config/InitRunner.java

@@ -0,0 +1,48 @@
+package com.example.opc_ua.config;
+
+import com.example.opc_common.entity.DataSource;
+import com.example.opc_common.enums.DataSourceTypeEnum;
+import com.example.opc_common.util.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_ua.dao.DataSourceDao;
+import com.example.opc_ua.task.OpcAsyncTask;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+@Slf4j
+@Configuration
+public class InitRunner {
+
+    @Autowired
+    private DataSourceDao dataSourceDao;
+
+    @Autowired
+    private OpcAsyncTask opcAsyncTask;
+
+    @PostConstruct
+    public void initData() {
+        //将ua和da的树,加载到redis中去
+        List<DataSource> dataSourceList = dataSourceDao.getAllDataSource(null);
+        if (Blank.isNotEmpty(dataSourceList)) {
+            for (DataSource dataSource : dataSourceList) {
+                String dataSourceTypeKey = dataSource.getDataSourceTypeKey();
+                if (dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_REAL.getValue()) ||
+                        dataSourceTypeKey.equals(DataSourceTypeEnum.OPC_UA_HISTORY.getValue())) {
+                    if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpPort(), dataSource.getIsAnonymous())) {
+                        log.info("ip地址,端口号,匿名方式都不能为空");
+                    }
+                    if (dataSource.getIsAnonymous() == ConstantStr.NOT_ANONYMOUS) {
+                        if (Blank.isEmpty(dataSource.getIpUserName())) {
+                            log.info("选择不匿名方式,需要填写账号");
+                        }
+                    }
+                    opcAsyncTask.opcUaGetTree(dataSource);
+                }
+            }
+        }
+    }
+}

+ 27 - 1
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/controller/DataSourceController.java

@@ -1,16 +1,24 @@
 package com.example.opc_ua.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.example.opc_common.entity.DataSource;
+import com.example.opc_common.util.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.JavaTypeUtil;
 import com.example.opc_common.util.Result;
 import com.example.opc_ua.service.DataSourceService;
+import com.example.opc_ua.task.OpcAsyncTask;
 import com.example.opc_ua.util.OpcUaUtil;
+import com.example.opc_ua.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 @RestController
 @RequestMapping("dataSource")
@@ -20,6 +28,12 @@ public class DataSourceController {
     @Resource
     private DataSourceService dataSourceService;
 
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private OpcAsyncTask opcAsyncTask;
+
     /**
      * 测试数据源配置连接
      *
@@ -33,7 +47,19 @@ public class DataSourceController {
 
     @PostMapping("/getDataSourceItemTree")
     public Result getDataSourceItemTree(@RequestBody DataSource dataSource) {
-        return OpcUaUtil.opcUaGetTree(dataSource);
+        Object objectTree = redisUtil.lGet(ConstantStr.DATA_SOURCE_TREE + dataSource.getId(), 0, -1);
+        if (Blank.isNotEmpty(objectTree)) {
+            List<JSONObject> jsonObjects = JavaTypeUtil.objChangeListJson(objectTree);
+            opcAsyncTask.opcUaGetTree(dataSource);
+            return Result.ok(jsonObjects);
+        } else {
+            return OpcUaUtil.opcUaGetTree(dataSource);
+        }
+    }
+
+    @PostMapping("/genDataSourceItemTree")
+    public void genDataSourceItemTree(@RequestBody DataSource dataSource) {
+        opcAsyncTask.opcUaGetTree(dataSource);
     }
 
 }

+ 4 - 0
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/dao/DataSourceDao.java

@@ -4,10 +4,14 @@ import com.example.opc_common.entity.DataSource;
 import com.example.opc_common.entity.DataSourceType;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface DataSourceDao {
 
     DataSource getDataSourceById(Integer id);
 
     DataSourceType getDataSourceTypeById(Integer id);
+
+    List<DataSource> getAllDataSource(String userId);
 }

+ 0 - 2
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/service/DataSourceService.java

@@ -1,6 +1,4 @@
 package com.example.opc_ua.service;
 
-import com.example.opc_common.util.Result;
-
 public interface DataSourceService {
 }

+ 0 - 13
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/service/impl/DataSourceServiceimpl.java

@@ -1,26 +1,13 @@
 package com.example.opc_ua.service.impl;
 
-import com.example.opc_common.entity.*;
-import com.example.opc_common.enums.DataSourceTypeEnum;
-import com.example.opc_common.enums.ResultEnum;
-import com.example.opc_common.exception.CustomException;
-import com.example.opc_common.util.Blank;
-import com.example.opc_common.util.ConstantStr;
-import com.example.opc_common.util.Result;
 import com.example.opc_ua.dao.DataModelDao;
 import com.example.opc_ua.dao.DataSourceDao;
 import com.example.opc_ua.dao.ItemGroupDao;
 import com.example.opc_ua.service.DataSourceService;
-import com.example.opc_ua.util.OpcUaUtil;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 @Transactional
 @Service

+ 0 - 1
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/service/impl/ItemGroupServiceImpl.java

@@ -2,7 +2,6 @@ package com.example.opc_ua.service.impl;
 
 import com.example.opc_common.entity.*;
 import com.example.opc_common.enums.DataSourceTypeEnum;
-import com.example.opc_common.enums.OpcDaDriverEnum;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;

+ 37 - 0
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java

@@ -1,10 +1,15 @@
 package com.example.opc_ua.task;
 
+import com.example.opc_common.entity.DataSource;
 import com.example.opc_common.entity.RawData;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_ua.dao.RawDataDao;
+import com.example.opc_ua.util.OpcUaUtil;
+import com.example.opc_ua.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
@@ -22,6 +27,9 @@ public class OpcAsyncTask {
     @Resource
     private RawDataDao rawDataDao;
 
+    @Autowired
+    private RedisUtil redisUtil;
+
     /**
      * 新增一条原始数据
      *
@@ -45,4 +53,33 @@ public class OpcAsyncTask {
             rawDataDao.addRawDataList(id, remainder, rawDataList);
         }
     }
+
+    public void opcUaGetTree(DataSource dataSource) {
+        OpcUaClient opcUaClient = null;
+        try {
+            opcUaClient = OpcUaUtil.createClient(dataSource);
+            if (Blank.isEmpty(opcUaClient)) {
+                log.info("客户端创建失败");
+            }
+            opcUaClient.connect().get();
+            redisUtil.set(ConstantStr.DATA_SOURCE_TREE + dataSource.getId(), OpcUaUtil.generOpcUaTree(opcUaClient, null));
+        } catch (Exception e) {
+            String message = e.getMessage();
+            if (message.contains("Bad_ConnectionRejected")) {
+                log.info("ip连接不可用");
+            } else if (message.contains("Bad_UserAccessDenied")) {
+                log.info("用户无权执行请求的操作");
+            } else if (message.contains("cannot create signer")) {
+                log.info("证书创建失败,无法创建签名者");
+            } else if (message.contains("Bad_Timeout")) {
+                log.info("连接超时");
+            } else {
+                log.info(e.getMessage());
+            }
+        } finally {
+            if (Blank.isNotEmpty(opcUaClient)) {
+                opcUaClient.disconnect();
+            }
+        }
+    }
 }

+ 4 - 4
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaChangeTask.java

@@ -74,7 +74,7 @@ public class OpcUaChangeTask extends TimerTask {
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (!dataValue.getStatusCode().isGood()) {
-                    break;
+                    continue;
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
@@ -172,7 +172,7 @@ public class OpcUaChangeTask extends TimerTask {
                             List<BigDecimal> dataValueList = new ArrayList<>();
                             BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                             dataValueList.add(Blank.isNotEmpty(dm) ?
-                                    MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                     bigDecimal);
                             redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                         } catch (Exception e) {
@@ -200,7 +200,7 @@ public class OpcUaChangeTask extends TimerTask {
                                         dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                                     }
                                     BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                    dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                    dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                     redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
 
                                     List<String> dataValueTimeList = new ArrayList<>();
@@ -260,7 +260,7 @@ public class OpcUaChangeTask extends TimerTask {
                                 dataValueList = new ArrayList<>();
                                 BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                 dataValueList.add(Blank.isNotEmpty(dm) ?
-                                        MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                        MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                         bigDecimal);
                                 redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
 

+ 2 - 2
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaExceedTask.java

@@ -74,7 +74,7 @@ public class OpcUaExceedTask extends TimerTask {
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (!dataValue.getStatusCode().isGood()) {
-                    break;
+                    continue;
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
@@ -88,7 +88,7 @@ public class OpcUaExceedTask extends TimerTask {
                 if (!javaType.toLowerCase().equals("boolean")) {
                     try {
                         BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
+                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
                         if (Blank.isEmpty(storageYmdh)) {
                             if (dmData.compareTo(bigModeValue) == 1) {
                                 redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);

+ 4 - 4
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaFrequencyTask.java

@@ -75,7 +75,7 @@ public class OpcUaFrequencyTask extends TimerTask {
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (!dataValue.getStatusCode().isGood()) {
-                    break;
+                    continue;
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
@@ -164,7 +164,7 @@ public class OpcUaFrequencyTask extends TimerTask {
                             List<BigDecimal> dataValueList = new ArrayList<>();
                             BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                             dataValueList.add(Blank.isNotEmpty(dm) ?
-                                    MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                     bigDecimal);
                             redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                         } catch (Exception e) {
@@ -187,7 +187,7 @@ public class OpcUaFrequencyTask extends TimerTask {
                                     dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                                 }
                                 BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                dataValueList.add(Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                                 redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
                             } catch (Exception e) {
                                 List<String> dataValueList = new ArrayList<>();
@@ -234,7 +234,7 @@ public class OpcUaFrequencyTask extends TimerTask {
                                 dataValueList = new ArrayList<>();
                                 BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                 dataValueList.add(Blank.isNotEmpty(dm) ?
-                                        MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                        MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                         bigDecimal);
                                 redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
 

+ 2 - 2
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaLowerTask.java

@@ -73,7 +73,7 @@ public class OpcUaLowerTask extends TimerTask {
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (!dataValue.getStatusCode().isGood()) {
-                    break;
+                    continue;
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
@@ -87,7 +87,7 @@ public class OpcUaLowerTask extends TimerTask {
                 if (!javaType.toLowerCase().equals("boolean")) {
                     try {
                         BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
+                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal;
                         if (Blank.isEmpty(storageYmdh)) {
                             if (dmData.compareTo(bigModeValue) == -1) {
                                 redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);

+ 2 - 2
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/util/OpcUaUtil.java

@@ -277,8 +277,8 @@ public class OpcUaUtil {
                             jsonObject.put("dataValue", value.getValue());
                         } else {
                             try {
-                                BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                jsonObject.put("dataValue", Blank.isNotEmpty(dm) ? MathUtil.quadricOperation1(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
+                                BigDecimal bigDecimal = JSON.parseObject(value.getValue().toString(), BigDecimal.class);
+                                jsonObject.put("dataValue", Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) : bigDecimal);
                             } catch (Exception e) {
                                 jsonObject.put("dataValue", value.getValue());
                             }

+ 27 - 0
chaunyi_opc/opc_ua/src/main/resources/mapper/DataSourceDao.xml

@@ -26,4 +26,31 @@
         where id = #{id}
     </select>
 
+    <select id="getAllDataSource" resultType="com.example.opc_common.entity.DataSource">
+        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.cls_id,
+        tds.prog_id,
+        tds.driver_describe,
+        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 1=1
+        <if test="userId != null">
+            AND user_id = #{userId}
+        </if>
+        order by create_time
+    </select>
+
 </mapper>