Переглянути джерело

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

FinalYu 2 роки тому
батько
коміт
379c174fb9

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

@@ -24,9 +24,9 @@ public class ConstantStr {
     //用户类型,0前端用户,1后端用户
     public static final Integer FRONT_USER = 0;
     public static final Integer BACK_USER = 1;
-    public static final String FRONT_USER_TOKEN = "front";
-    public static final String BACK_USER_TOKEN = "back";
-    public static final String PHONE_USER_TOKEN = "phone";
+    public static final String FRONT_USER_String = "front";
+    public static final String BACK_USER_String = "backs";
+    public static final String PHONE_USER_String = "phone";
 
     //用户状态,0正常,1锁定,2已逻辑删除
     public static final int NORMAL_USE = 0;

+ 10 - 22
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/Interceptors.java

@@ -26,36 +26,24 @@ public class Interceptors implements HandlerInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
         String token = request.getHeader("token");
-        String requestURI = request.getRequestURI();
+//        String requestURI = request.getRequestURI();
         if (Blank.isEmpty(token)) {
             throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
         }
-//        User user = JSON.parseObject(Convert.toStr(redisUtil.get(token)), User.class);
-//        if (Blank.isEmpty(user, user.getUserId(), user.getUserType())) {
-//            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
-//        }
-//        if (user.getUserType().equals(ConstantStr.BACK_USER)) {
-//            redisUtil.set(token, user, ConstantStr.FIVE_HOUR);
-//        } else {
-//            String tokenType = token.substring(0, 5).toLowerCase();
-//            if (tokenType.equals(ConstantStr.FRONT_USER_TOKEN)){
-//                redisUtil.set(token, user, ConstantStr.FIVE_HOUR);
-//            }else if(tokenType.equals(ConstantStr.PHONE_USER_TOKEN)){
-//                redisUtil.set(token, user, ConstantStr.FIVE_HOUR);
-//            }else{
-//                throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
-//            }
-//        }
         String userId = Convert.toStr(redisUtil.get(token));
         if (Blank.isEmpty(userId)) {
             throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
         }
-        if (!token.equals(Convert.toStr(redisUtil.get(userId)))) {
-            redisUtil.del(token);
-            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), "你的账号在其他地方登录");
+        String userLoginType = token.substring(0, 5);
+        if (userLoginType.equals(ConstantStr.FRONT_USER_String)) {
+            redisUtil.set(ConstantStr.FRONT_USER_String + userId, token, ConstantStr.FIVE_HOUR);
+        } else if (userLoginType.equals(ConstantStr.PHONE_USER_String)) {
+            redisUtil.set(ConstantStr.PHONE_USER_String + userId, token, ConstantStr.FIVE_HOUR);
+        } else if (userLoginType.equals(ConstantStr.BACK_USER_String)) {
+            redisUtil.set(ConstantStr.BACK_USER_String + userId, token, ConstantStr.FIVE_HOUR);
+        } else {
+            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
         }
-        redisUtil.set(token, userId, ConstantStr.FIVE_HOUR);
-
 //        boolean verify = TokenUtil.verify(token);
 //        if (!verify) {
 //            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());

+ 133 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/WebSocket.java

@@ -0,0 +1,133 @@
+package com.example.opc_da.config;
+
+import cn.hutool.core.convert.Convert;
+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.DateUtil;
+import com.example.opc_da.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.Date;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@Slf4j
+@ServerEndpoint("/webSocket/{token}")//定义websocket服务器端
+public class WebSocket {
+
+    @Autowired
+    private RedisUtil redisUtil = SpringContextUtils.getBean(RedisUtil.class);
+
+    private String userId;
+
+    private String token;
+
+    //实例一个session,这个session是websocket的session
+    private Session session;
+
+    private int count = 0;
+
+    //存放websocket的集合
+    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();
+
+    //前端请求一个webSocket时
+    @OnOpen
+    public void onOpen(Session session, @PathParam("token") String token) {
+        if (Blank.isEmpty(token)) {
+            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+        }
+        this.userId = Convert.toStr(redisUtil.get(token));
+        redisUtil.set("websocket" + userId, true);
+        this.token = token;
+        this.session = session;
+        webSocketSet.add(this);
+    }
+
+    //前端关闭一个webSocket时
+    @OnClose
+    public void onClose() {
+        webSocketSet.remove(this);
+        try {
+            Thread.sleep(10000);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+        if ((Boolean) redisUtil.get("websocket" + userId)) {
+            return;
+        }
+        if (Blank.isNotEmpty(userId)) {
+            String userLoginType = token.substring(0, 5);
+            if (userLoginType.equals(ConstantStr.FRONT_USER_String)) {
+                redisUtil.del(ConstantStr.FRONT_USER_String + userId);
+            } else if (userLoginType.equals(ConstantStr.PHONE_USER_String)) {
+                redisUtil.del(ConstantStr.PHONE_USER_String + userId);
+            } else if (userLoginType.equals(ConstantStr.BACK_USER_String)) {
+                redisUtil.del(ConstantStr.BACK_USER_String + userId);
+            } else {
+                throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+            }
+        }
+        //清空相应的token
+        if (Blank.isNotEmpty(token)) {
+            redisUtil.del(token);
+        }
+    }
+
+    //前端向后端发送消息
+    @OnMessage
+    public void onMessage(String message) {
+        log.info("webSocket收到客户端消息{}", message);
+        if (Blank.isEmpty(message)) {
+            count += 1;
+        } else {
+            count = 0;
+        }
+        if (count > 5) {
+            try {
+                if (Blank.isNotEmpty(token)) {
+                    redisUtil.del(token);
+                }
+                if (Blank.isNotEmpty(userId)) {
+                    String userLoginType = token.substring(0, 5);
+                    if (userLoginType.equals(ConstantStr.FRONT_USER_String)) {
+                        redisUtil.del(ConstantStr.FRONT_USER_String + userId);
+                    } else if (userLoginType.equals(ConstantStr.PHONE_USER_String)) {
+                        redisUtil.del(ConstantStr.PHONE_USER_String + userId);
+                    } else if (userLoginType.equals(ConstantStr.BACK_USER_String)) {
+                        redisUtil.del(ConstantStr.BACK_USER_String + userId);
+                    } else {
+                        throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+                    }
+                }
+                webSocketSet.remove(this);
+                session.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    //自定义服务端主动向客户端发送消息的方法
+    public static void sendMessage(String message) {
+        for (WebSocket webSocket : webSocketSet) {
+            log.info("webSocket向客户端发送消息,{}", message);
+            try {
+                webSocket.session.getBasicRemote().sendText(message);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 14 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/WebSocketConfig.java

@@ -0,0 +1,14 @@
+package com.example.opc_da.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+}

+ 142 - 28
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/RawDataServiceImpl.java

@@ -64,17 +64,62 @@ public class RawDataServiceImpl implements RawDataService {
                             for (int i = 0; i < rawDataList.size(); i++) {
                                 String dataValue = rawDataList.get(i).getDataValue();
                                 Boolean[] dataValueList = JSON.parseObject(dataValue, Boolean[].class);
-                                Boolean avg;
+                                Boolean data = null;
                                 if (itemGroup.getValueCondition().equals(ConstantStr.AVERAGE_VALUE)) {
-                                    avg = MathUtil.getAvgBoolean(dataValueList);
+                                    if (Blank.isNotEmpty(dataValueList)) {
+                                        int countFalse = 0;
+                                        int countTrue = 0;
+                                        for (int j = 0; j < dataValueList.length; j++) {
+                                            if (dataValueList[i]) {
+                                                countTrue += 1;
+                                            } else {
+                                                countFalse += 1;
+                                            }
+                                        }
+                                        if (countTrue != countFalse) {
+                                            if (countTrue > countFalse) {
+                                                data = true;
+                                            } else {
+                                                data = false;
+                                            }
+                                        }
+                                    }
                                 } else if (itemGroup.getValueCondition().equals(ConstantStr.MAX_VALUE)) {
-                                    avg = MathUtil.getMaxBoolean(dataValueList);
+                                    if (Blank.isNotEmpty(dataValueList)) {
+                                        for (int j = 0; j < dataValueList.length; j++) {
+                                            if (dataValueList[i]) {
+                                                data = true;
+                                                break;
+                                            } else {
+                                                data = false;
+                                            }
+                                        }
+                                        if (Blank.isNotEmpty(dataValueList)) {
+                                            if (data) {
+                                                break;
+                                            }
+                                        }
+                                    }
                                 } else if (itemGroup.getValueCondition().equals(ConstantStr.MIN_VALUE)) {
-                                    avg = MathUtil.getMinBoolean(dataValueList);
+                                    if (Blank.isNotEmpty(dataValueList)) {
+                                        for (int j = 0; j < dataValueList.length; j++) {
+                                            if (!dataValueList[i]) {
+                                                data = false;
+                                                break;
+                                            } else {
+                                                data = true;
+                                            }
+                                        }
+                                        if (Blank.isNotEmpty(dataValueList)) {
+                                            if (!data) {
+                                                break;
+                                            }
+                                        }
+                                    }
                                 } else {
                                     throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型数据组的取值条件");
                                 }
-                                booleanList.add(avg);
+                                booleanList.add(data);
                                 String valueBelongTime = rawDataList.get(i).getValueBelongTime();
                                 dataTimeList.add(valueBelongTime);
                             }
@@ -206,7 +251,7 @@ public class RawDataServiceImpl implements RawDataService {
                             String dataType = rawDataList.get(0).getDataType();
                             if (dataType.toLowerCase().equals("boolean")) {
                                 if (itemGroup.getValueCondition().equals(ConstantStr.AVERAGE_VALUE)) {
-                                    Boolean data = null;
+                                    Boolean avg = null;
                                     int countFalse = 0;
                                     int countTrue = 0;
                                     for (RawData rawData : rawDataList) {
@@ -221,31 +266,33 @@ public class RawDataServiceImpl implements RawDataService {
                                             }
                                         }
                                     }
-                                    if (countTrue >= countFalse) {
-                                        data = true;
-                                    } else {
-                                        data = false;
+                                    if (countTrue != countFalse) {
+                                        if (countTrue > countFalse) {
+                                            avg = true;
+                                        } else {
+                                            avg = false;
+                                        }
                                     }
-                                    jsonObject.put("data", data);
+                                    jsonObject.put("data", avg);
                                 } else if (itemGroup.getValueCondition().equals(ConstantStr.MAX_VALUE)) {
-                                    Boolean data = null;
+                                    Boolean max = null;
                                     for (RawData rawData : rawDataList) {
                                         Boolean[] dataValueList = JSON.parseObject(rawData.getDataValue(), Boolean[].class);
                                         if (Blank.isNotEmpty(dataValueList)) {
                                             for (int i = 0; i < dataValueList.length; i++) {
                                                 if (dataValueList[i]) {
-                                                    data = true;
+                                                    max = true;
                                                     break;
                                                 }
                                             }
                                         }
-                                        if (Blank.isNotEmpty(data)) {
-                                            if (data) {
+                                        if (Blank.isNotEmpty(max)) {
+                                            if (max) {
                                                 break;
                                             }
                                         }
                                     }
-                                    jsonObject.put("data", data);
+                                    jsonObject.put("data", max);
                                 } else if (itemGroup.getValueCondition().equals(ConstantStr.MIN_VALUE)) {
                                     Boolean data = null;
                                     for (RawData rawData : rawDataList) {
@@ -378,18 +425,59 @@ public class RawDataServiceImpl implements RawDataService {
                         List<Boolean> booleanList = new ArrayList<>();
                         for (int i = 0; i < rawDataList.size(); i++) {
                             String dataValue = rawDataList.get(i).getDataValue();
+                            Boolean data = null;
+                            int countFalse = 0;
+                            int countTrue = 0;
                             Boolean[] dataValueList = JSON.parseObject(dataValue, Boolean[].class);
-                            Boolean avg;
                             if (itemGroup.getValueCondition().equals(ConstantStr.AVERAGE_VALUE)) {
-                                avg = MathUtil.getAvgBoolean(dataValueList);
+                                if (Blank.isNotEmpty(dataValueList)) {
+                                    for (int j = 0; j < dataValueList.length; j++) {
+                                        if (dataValueList[j]) {
+                                            countTrue += 1;
+                                        } else {
+                                            countFalse += 1;
+                                        }
+                                    }
+                                }
+                                if (countTrue != countFalse) {
+                                    if (countTrue > countFalse) {
+                                        data = true;
+                                    } else {
+                                        data = false;
+                                    }
+                                }
                             } else if (itemGroup.getValueCondition().equals(ConstantStr.MAX_VALUE)) {
-                                avg = MathUtil.getMaxBoolean(dataValueList);
+                                if (Blank.isNotEmpty(dataValueList)) {
+                                    for (int j = 0; j < dataValueList.length; j++) {
+                                        if (dataValueList[j]) {
+                                            data = true;
+                                            break;
+                                        }
+                                    }
+                                }
+                                if (Blank.isNotEmpty(data)) {
+                                    if (data) {
+                                        break;
+                                    }
+                                }
                             } else if (itemGroup.getValueCondition().equals(ConstantStr.MIN_VALUE)) {
-                                avg = MathUtil.getMinBoolean(dataValueList);
+                                if (Blank.isNotEmpty(dataValueList)) {
+                                    for (int j = 0; j < dataValueList.length; j++) {
+                                        if (!dataValueList[j]) {
+                                            data = true;
+                                            break;
+                                        }
+                                    }
+                                }
+                                if (Blank.isNotEmpty(data)) {
+                                    if (!data) {
+                                        break;
+                                    }
+                                }
                             } else {
                                 throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型数据组的取值条件");
                             }
-                            booleanList.add(avg);
+                            booleanList.add(data);
                             String valueBelongTime = rawDataList.get(i).getValueBelongTime();
                             dataTimeList.add(valueBelongTime);
                         }
@@ -400,23 +488,49 @@ public class RawDataServiceImpl implements RawDataService {
                             String dataValue = rawDataList.get(i).getDataValue();
                             try {
                                 BigDecimal[] dataValueList = JSON.parseObject(dataValue, BigDecimal[].class);
-                                BigDecimal avg;
+                                BigDecimal data = null;
                                 if (itemGroup.getValueCondition().equals(ConstantStr.AVERAGE_VALUE)) {
-                                    avg = MathUtil.getAvg(dataValueList);
+                                    if (Blank.isNotEmpty(dataValueList)) {
+                                        BigDecimal bigDecimal = null;
+                                        int sum = 0;
+                                        for (int j = 0; j < dataValueList.length; j++) {
+                                            if (Blank.isEmpty(bigDecimal)) {
+                                                bigDecimal = dataValueList[j];
+                                            } else {
+                                                bigDecimal.add(dataValueList[j]);
+                                            }
+                                            sum += 1;
+                                        }
+                                        data = bigDecimal.divide(new BigDecimal(sum));
+                                    }
                                 } else if (itemGroup.getValueCondition().equals(ConstantStr.MAX_VALUE)) {
-                                    avg = MathUtil.getMax(dataValueList);
+                                    if (Blank.isNotEmpty(dataValueList)) {
+                                        for (int j = 0; j < dataValueList.length; j++) {
+                                            if (Blank.isEmpty(data)) {
+                                                data = dataValueList[j];
+                                            } else {
+                                                data.max(dataValueList[j]);
+                                            }
+                                        }
+                                    }
                                 } else if (itemGroup.getValueCondition().equals(ConstantStr.MIN_VALUE)) {
-                                    avg = MathUtil.getMin(dataValueList);
+                                    if (Blank.isNotEmpty(dataValueList)) {
+                                        for (int j = 0; j < dataValueList.length; j++) {
+                                            if (Blank.isEmpty(data)) {
+                                                data = dataValueList[j];
+                                            } else {
+                                                data.min(dataValueList[j]);
+                                            }
+                                        }
+                                    }
                                 } else {
                                     throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型数据组的取值条件");
                                 }
-                                dataList.add(avg);
+                                dataList.add(data);
                             } catch (Exception e) {
                                 String[] dataValueList = JSON.parseObject(dataValue, String[].class);
                                 if (Blank.isNotEmpty(dataValueList)) {
                                     dataList.add(dataValueList[0]);
-                                } else {
-                                    dataList.add("");
                                 }
                             }
                             String valueBelongTime = rawDataList.get(i).getValueBelongTime();

+ 23 - 13
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/UserServiceImpl.java

@@ -102,14 +102,19 @@ public class UserServiceImpl implements UserService {
 //        redisUtil.del(user.getUid() + "-captcha");
         switch (isExistUser.getState()) {
             case ConstantStr.NORMAL_USE:
+                String userId = Convert.toStr(redisUtil.get(ConstantStr.FRONT_USER_String + isExistUser.getUserId()));
+                if (Blank.isNotEmpty(userId)) {
+                    return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "此账号在其他地方登录,请勿重新登录");
+                }
                 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);
+                token = ConstantStr.FRONT_USER_String + token;
+                redisUtil.set(ConstantStr.FRONT_USER_String + isExistUser.getUserId(), token, ConstantStr.FIVE_HOUR);
                 redisUtil.set(token, isExistUser.getUserId(), ConstantStr.FIVE_HOUR);
                 isExistUser.setRoleList(userDao.getRoleListByUserId(isExistUser.getUserId()));
+                json.put("token", token);
                 json.put("user", isExistUser);
                 //更新用户登录状态
                 if (userDao.updateLoginState(isExistUser.getUserId()) <= 0) {
@@ -188,22 +193,22 @@ public class UserServiceImpl implements UserService {
         }
         switch (isExistUser.getState()) {
             case ConstantStr.NORMAL_USE:
-//                String backToken = Convert.toStr(redisUtil.get(ConstantStr.BACK_USER_TOKEN + isExistUser.getUserId()));
-//                if (Blank.isNotEmpty(backToken)) {
-//                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此账号在其他地方登录,请勿重新登录");
-//                }
+                String userId = Convert.toStr(redisUtil.get(ConstantStr.BACK_USER_String + isExistUser.getUserId()));
+                if (Blank.isNotEmpty(userId)) {
+                    return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "此账号在其他地方登录,请勿重新登录");
+                }
                 List<Role> roleList = userDao.getRoleListByUserId(isExistUser.getUserId());
                 JSONObject json = new JSONObject();
                 isExistUser.setPassword("");
                 isExistUser.setRoleList(roleList);
-                json.put("user", isExistUser);
+
                 //生成token
                 String token = TokenUtil.token(isExistUser.getUserName(), ConstantStr.FIVE_HOUR);
-                json.put("token", token);
-                redisUtil.set(isExistUser.getUserId(), token);
+                token = ConstantStr.BACK_USER_String + token;
+                redisUtil.set(ConstantStr.BACK_USER_String + isExistUser.getUserId(), token, ConstantStr.FIVE_HOUR);
                 redisUtil.set(token, isExistUser.getUserId(), ConstantStr.FIVE_HOUR);
-//                redisUtil.set(ConstantStr.BACK_USER_TOKEN + isExistUser.getUserId(), token, ConstantStr.FIVE_HOUR);
-//                redisUtil.set(token, isExistUser, ConstantStr.FIVE_HOUR);
+                json.put("token", token);
+                json.put("user", isExistUser);
                 //更新用户最后登陆时间
                 if (userDao.updateLoginState(isExistUser.getUserId()) <= 0) {
                     return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "更新登录状态失败");
@@ -579,14 +584,19 @@ public class UserServiceImpl implements UserService {
         redisUtil.del(user.getUid() + "-captcha");
         switch (isExistUser.getState()) {
             case ConstantStr.NORMAL_USE:
+                String userId = Convert.toStr(redisUtil.get(ConstantStr.PHONE_USER_String + isExistUser.getUserId()));
+                if (Blank.isNotEmpty(userId)) {
+                    return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "此账号在其他地方登录,请勿重新登录");
+                }
                 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);
+                token = ConstantStr.PHONE_USER_String + token;
+                redisUtil.set(ConstantStr.PHONE_USER_String + isExistUser.getUserId(), token, ConstantStr.FIVE_HOUR);
                 redisUtil.set(token, isExistUser.getUserId(), ConstantStr.FIVE_HOUR);
                 isExistUser.setRoleList(userDao.getRoleListByUserId(isExistUser.getUserId()));
+                json.put("token", token);
                 json.put("user", isExistUser);
                 //更新用户登录状态
                 if (userDao.updateLoginState(isExistUser.getUserId()) <= 0) {

+ 1 - 1
chaunyi_opc/opc_da/src/main/resources/mapper/ItemGroupDao.xml

@@ -177,7 +177,7 @@
     </select>
 
     <select id="getItemDescribe" resultType="java.lang.String">
-        select IFNULL(describe,item_name) as item_name
+        select IFNULL(`describe`,item_name) as item_name
         from t_item
         where item_group_id = #{itemGroupId}
           AND item_name = #{itemName}

+ 83 - 77
chaunyi_opc/pom.xml

@@ -1,85 +1,91 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <!-- 使父工程继承springboot工程 -->
-  <parent>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-starter-parent</artifactId>
-    <version>2.3.4.RELEASE</version>
-    <relativePath/> <!-- lookup parent from repository -->
-  </parent>
+    <!-- 使父工程继承springboot工程 -->
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.4.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
 
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>com.example</groupId>
-  <artifactId>chaunyi_opc</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <!-- 修改父工程的打包方式为pom,子类可继承 -->
-  <packaging>pom</packaging>
-  <name>chaunyi_opc</name>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.example</groupId>
+    <artifactId>chaunyi_opc</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <!-- 修改父工程的打包方式为pom,子类可继承 -->
+    <packaging>pom</packaging>
+    <name>chaunyi_opc</name>
 
-  <modules>
-    <module>opc_common</module>
-    <module>opc_da</module>
-    <module>opc_ua</module>
-  </modules>
+    <modules>
+        <module>opc_common</module>
+        <module>opc_da</module>
+        <module>opc_ua</module>
+    </modules>
 
-  <properties>
-    <java-version>1.8</java-version>
-    <mybatis-version>2.2.2</mybatis-version>
-    <mysql-connector-version>8.0.21</mysql-connector-version>
-    <redis-version>2.3.4.RELEASE</redis-version>
-    <fastjson-version>1.2.83</fastjson-version>
-    <hutool-version>5.5.2</hutool-version>
-    <jwt-version>3.8.2</jwt-version>
-    <quartz-version>2.3.2</quartz-version>
-    <pool2-version>2.8.1</pool2-version>
-    <bdparsii-version>1.0.0</bdparsii-version>
-  </properties>
+    <properties>
+        <java-version>1.8</java-version>
+        <mybatis-version>2.2.2</mybatis-version>
+        <mysql-connector-version>8.0.21</mysql-connector-version>
+        <redis-version>2.3.4.RELEASE</redis-version>
+        <websocket-version>2.3.4.RELEASE</websocket-version>
+        <fastjson-version>1.2.83</fastjson-version>
+        <hutool-version>5.5.2</hutool-version>
+        <jwt-version>3.8.2</jwt-version>
+        <quartz-version>2.3.2</quartz-version>
+        <pool2-version>2.8.1</pool2-version>
+        <bdparsii-version>1.0.0</bdparsii-version>
+    </properties>
 
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.mybatis.spring.boot</groupId>
-        <artifactId>mybatis-spring-boot-starter</artifactId>
-        <version>${mybatis-version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-data-redis</artifactId>
-        <version>${redis-version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.alibaba</groupId>
-        <artifactId>fastjson</artifactId>
-        <version>${fastjson-version}</version>
-      </dependency>
-      <dependency>
-        <groupId>cn.hutool</groupId>
-        <artifactId>hutool-all</artifactId>
-        <version>${hutool-version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.auth0</groupId>
-        <artifactId>java-jwt</artifactId>
-        <version>${jwt-version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.quartz-scheduler</groupId>
-        <artifactId>quartz</artifactId>
-        <version>${quartz-version}</version>
-      </dependency>
-      <!--对象池化组件-->
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-pool2</artifactId>
-        <version>${pool2-version}</version>
-      </dependency>
-      <!--数学四则运算依赖 -->
-      <dependency>
-        <groupId>com.mpobjects</groupId>
-        <artifactId>bdparsii</artifactId>
-        <version>${bdparsii-version}</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.mybatis.spring.boot</groupId>
+                <artifactId>mybatis-spring-boot-starter</artifactId>
+                <version>${mybatis-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-data-redis</artifactId>
+                <version>${redis-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-websocket</artifactId>
+                <version>${websocket-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>fastjson</artifactId>
+                <version>${fastjson-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-all</artifactId>
+                <version>${hutool-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.auth0</groupId>
+                <artifactId>java-jwt</artifactId>
+                <version>${jwt-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.quartz-scheduler</groupId>
+                <artifactId>quartz</artifactId>
+                <version>${quartz-version}</version>
+            </dependency>
+            <!--对象池化组件-->
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-pool2</artifactId>
+                <version>${pool2-version}</version>
+            </dependency>
+            <!--数学四则运算依赖 -->
+            <dependency>
+                <groupId>com.mpobjects</groupId>
+                <artifactId>bdparsii</artifactId>
+                <version>${bdparsii-version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
 </project>