zhoupeng 2 жил өмнө
parent
commit
31b6ac699c

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

@@ -28,6 +28,9 @@ public class ConstantStr {
     public static final String BACK_USER_String = "backs";
     public static final String PHONE_USER_String = "phone";
 
+    //webSocket键
+    public static final String WEBSOCKET_STRING = "websocket";
+
     //用户状态,0正常,1锁定,2已逻辑删除
     public static final int NORMAL_USE = 0;
     public static final int LOCK_USER = 1;

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

@@ -28,11 +28,11 @@ public class Interceptors implements HandlerInterceptor {
         String token = request.getHeader("token");
 //        String requestURI = request.getRequestURI();
         if (Blank.isEmpty(token)) {
-            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+            throw new CustomException(ResultEnum.LOGIN_EXPIRED.getRespCode(), ResultEnum.LOGIN_EXPIRED.getRespMsg());
         }
         String userId = Convert.toStr(redisUtil.get(token));
         if (Blank.isEmpty(userId)) {
-            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+            throw new CustomException(ResultEnum.LOGIN_EXPIRED.getRespCode(), ResultEnum.LOGIN_EXPIRED.getRespMsg());
         }
         String userLoginType = token.substring(0, 5);
         if (userLoginType.equals(ConstantStr.FRONT_USER_String)) {
@@ -42,7 +42,7 @@ public class Interceptors implements HandlerInterceptor {
         } 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());
+            throw new CustomException(ResultEnum.LOGIN_EXPIRED.getRespCode(), ResultEnum.LOGIN_EXPIRED.getRespMsg());
         }
         redisUtil.set(token, userId, ConstantStr.FIVE_HOUR);
 //        boolean verify = TokenUtil.verify(token);

+ 17 - 6
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/WebSocket.java

@@ -42,11 +42,16 @@ public class WebSocket {
     //前端请求一个webSocket时
     @OnOpen
     public void onOpen(Session session, @PathParam("token") String token) {
-        if (Blank.isEmpty(token)) {
-            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+        log.info("连接websocekt:并且token为:{}", token);
+        if (Blank.isNotEmpty(token)) {
+            this.userId = Convert.toStr(redisUtil.get(token));
+//            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+        }
+//        this.userId = Convert.toStr(redisUtil.get(token));
+        log.info("userId为:{}", userId);
+        if (Blank.isNotEmpty(userId)) {
+            redisUtil.set(ConstantStr.WEBSOCKET_STRING + userId, true);
         }
-        this.userId = Convert.toStr(redisUtil.get(token));
-        redisUtil.set("websocket" + userId, true);
         this.token = token;
         this.session = session;
         webSocketSet.add(this);
@@ -55,15 +60,20 @@ public class WebSocket {
     //前端关闭一个webSocket时
     @OnClose
     public void onClose() {
+        log.info("关闭websocekt");
         webSocketSet.remove(this);
-        redisUtil.set("websocket" + userId, true, 5);
+        if (Blank.isEmpty(userId)) {
+            return;
+        }
+        log.info("设置websocket{}的过期时间5s", userId);
+        redisUtil.set(ConstantStr.WEBSOCKET_STRING + userId, true, 5);
         try {
             Thread.sleep(5000);
         } catch (InterruptedException e) {
             throw new RuntimeException(e);
         }
         Boolean flage = false;
-        Object o = redisUtil.get("websocket" + userId);
+        Object o = redisUtil.get(ConstantStr.WEBSOCKET_STRING + userId);
         if (Blank.isNotEmpty(o)) {
             flage = (Boolean) o;
         }
@@ -92,6 +102,7 @@ public class WebSocket {
     @OnMessage
     public void onMessage(String message) {
         log.info("webSocket收到客户端消息{}", message);
+        this.token = message;
         if (Blank.isEmpty(message)) {
             count += 1;
         } else {

+ 34 - 6
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/UserServiceImpl.java

@@ -84,12 +84,6 @@ public class UserServiceImpl implements UserService {
             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)) {
@@ -100,6 +94,38 @@ public class UserServiceImpl implements UserService {
 //        }
 //        // 验证码通过则删除验证码
 //        redisUtil.del(user.getUid() + "-captcha");
+        //获取登陆失败次数
+        Integer count = (Integer) redisUtil.get("Number of password errors:" + user.getUserName() + user.getUserType());
+        if (Blank.isEmpty(count)) {
+            count = 0;
+        }
+        //判断账号是否被锁定
+        if (count >= 5) {
+            long expire = redisUtil.getExpire("Number of password errors:" + user.getUserName() + user.getUserType());
+            long minutes = expire / 60;
+            long second = expire % 60;
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "密码错误次数过多账号已锁定,请" + minutes + "分" + second + "秒后再试");
+        }
+        if (Blank.isEmpty(isExistUser)) {
+            //记录登陆失败次数
+            count++;
+            if (count >= 5) {
+                if (count.equals(5)) {
+                    //账号锁定5分钟
+                    redisUtil.set("Number of password errors:" + user.getUserName() + user.getUserType(), count, ConstantStr.FIVE_MINUTE);
+                }
+                long expire = redisUtil.getExpire("Number of password errors:" + user.getUserName() + user.getUserType());
+                long minutes = expire / 60;
+                long second = expire % 60;
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "密码错误次数过多账号已锁定,请" + minutes + "分" + second + "秒后再试");
+            } else {
+                redisUtil.set("Number of password errors:" + user.getUserName() + user.getUserType(), count, ConstantStr.FIVE_MINUTE);
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "密码错误,还可尝试" + (5 - count) + "次");
+            }
+        }
+        if (isExistUser.getUserType() != ConstantStr.FRONT_USER) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "请使用客户端账号登录");
+        }
         switch (isExistUser.getState()) {
             case ConstantStr.NORMAL_USE:
                 String userId = Convert.toStr(redisUtil.get(ConstantStr.FRONT_USER_String + isExistUser.getUserId()));
@@ -120,6 +146,8 @@ public class UserServiceImpl implements UserService {
                 if (userDao.updateLoginState(isExistUser.getUserId()) <= 0) {
                     return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "更新登录状态失败");
                 }
+                //登陆成功则删除错误登陆次数
+                redisUtil.del("Number of password errors:" + user.getUserName() + user.getUserType());
                 return Result.ok(json);
             case ConstantStr.LOCK_USER:
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "用户已被锁定,请联系管理员");

+ 2 - 2
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/util/UserUtil.java

@@ -43,7 +43,7 @@ public class UserUtil {
         HttpServletRequest request = attributes.getRequest();
         String token = request.getHeader("token");
         if (Blank.isEmpty(token)) {
-            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+            throw new CustomException(ResultEnum.LOGIN_EXPIRED.getRespCode(), ResultEnum.LOGIN_EXPIRED.getRespMsg());
         }
         return token;
     }
@@ -58,7 +58,7 @@ public class UserUtil {
         HttpServletRequest request = attributes.getRequest();
         String token = request.getHeader("token");
         if (Blank.isEmpty(token)) {
-            throw new CustomException(ResultEnum.UNAUTHORIZED.getRespCode(), ResultEnum.UNAUTHORIZED.getRespMsg());
+            throw new CustomException(ResultEnum.LOGIN_EXPIRED.getRespCode(), ResultEnum.LOGIN_EXPIRED.getRespMsg());
         }
         String userId = (String) redisUtil.get(token);
         if (Blank.isEmpty(userId)) {

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

@@ -40,8 +40,7 @@
             mode_value=#{modeValue},
             start_read_time=#{startReadTime},
             end_read_time=#{endReadTime},
-            event_mode=#{eventMode},
-            event_value=#{eventValue}
+            value_condition=#{valueCondition}
         where id = #{id}
     </update>
 

+ 13 - 5
chaunyi_opc/opc_da/src/main/resources/mapper/ReportTableDao.xml

@@ -237,11 +237,19 @@
     </select>
 
     <select id="getReportTableByUserGroupId" resultType="com.example.opc_common.entity.ReportTable">
-        select
-        <include refid="reportTableNoData"/>
-        from t_report_table
-        WHERE
-        user_group_id=#{userGroupId}
+        SELECT trt.id,
+               trt.table_template_id,
+               trt.user_id,
+               trt.report_table_name,
+               trt.report_value_format,
+               trt.is_auto_report,
+               trt.version,
+               trt.cron_id,
+               trt.cron,
+               trt.create_time
+        FROM t_report_table trt
+                 INNER JOIN (SELECT table_id FROM t_table_user_group WHERE user_group_id = #{userGroupId}) ttug
+                            ON trt.id = ttug.table_id;
     </select>
 
     <select id="getSysTableTemplate" resultType="com.example.opc_common.entity.SysTableTemplate">