From 254dc4d9b8d903246483297ed0799290f856f0de Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期四, 28 七月 2022 17:28:43 +0800
Subject: [PATCH] 便捷登录

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java                   |   42 +++++++++++++++++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java              |   10 +++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java             |    8 ++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java                    |   47 +++++++++++++++++++++--
 dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java                                    |    3 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java |    1 
 6 files changed, 107 insertions(+), 4 deletions(-)

diff --git a/dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java b/dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java
index 1e892f7..6eb0fd9 100644
--- a/dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java
+++ b/dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java
@@ -195,6 +195,9 @@
     INTER_PHONE_HOST_SUB_UNBIND("涓�閿眰鍔╀富瀛愯澶囪В缁�"),
     LOG_RECORD("鏃ュ織璁板綍"),
 
+    //渚挎嵎鐧诲綍key
+    QUICK_LOGIN("渚挎嵎鐧诲綍"),
+
     //娉ㄥ唽涓夊厓鐮佹潈闄�
     BASE_DEVICE_01("baseDevice01"),
     BASE_DEVICE_02("baseDevice02"),
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
index afa51f6..0b7aeba 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
@@ -342,4 +342,14 @@
 
         return ResponseUtil.success(userPermissionList);
     }
+
+
+    @GetMapping("/creatUserKey")
+    public ResponseVO<Object> creatUserKey(@RequestParam(required = false, value = "userId") Long userId,
+                                           @RequestParam(required = false, value = "requstType") Integer type) {
+        if (!AdministratorEnums.ADMIN.getCode().equals(SecurityUtils.getAdministratorIdentity())) {
+            throw new BusinessException("闈炶秴绾х鐞嗗憳鏃犳硶鎿嶄綔锛�");
+        }
+        return ResponseUtil.success(adminService.creatUserKey(userId, type));
+    }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java
index 3994e70..5c47824 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java
@@ -1,6 +1,7 @@
 package com.sandu.ximon.admin.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -28,6 +29,7 @@
 import com.sandu.ximon.admin.service.RoleService;
 import com.sandu.ximon.admin.utils.RedisUtils;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
+import com.sandu.ximon.dao.domain.Admin;
 import com.sandu.ximon.dao.domain.Client;
 import com.sandu.ximon.dao.domain.ClientRoleRelation;
 import com.sandu.ximon.dao.enums.AdministratorEnums;
@@ -260,4 +262,10 @@
         StoreOperationRecordsUtils.storeOperationLoginData(client.getId(), client.getClientName(), "鐢ㄦ埛鐧诲綍", content);
         return ResponseUtil.success(authInfo);
     }
+
+    @GetMapping("/getTokenByKey")
+    public ResponseVO<Object> getLonginKey(@RequestParam(required = false,value = "keyValue") String keyValue) {
+
+        return ResponseUtil.success(clientService.creatKeyByLogin(keyValue));
+    }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
index 2698082..a1de561 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
@@ -19,6 +19,7 @@
     AIR_HEARTBEAT("air_heartbeat:air_heartbeat"),
     //  澶ф皵璁惧蹇冭烦鍖呭瓨鍌�(璁惧鐘舵��))
     AIR_HEARTBEAT_STATE("air_heartbeat:air_heartbeat_state"),
+
     //  澶ф皵璁惧蹇冭烦鍖呭瓨鍌�  鍐滆��
     AIR_HEARTBEAT_NONG_GENG("air_heartbeat_nong_geng:air_heartbeat_nong_geng"),
     //  澶ф皵璁惧蹇冭烦鍖呭瓨鍌�(璁惧鐘舵��))鍐滆��
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
index 7213ec2..8a27dd5 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
@@ -1,8 +1,10 @@
 package com.sandu.ximon.admin.service;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.PageHelper;
+import com.qcloud.cos.utils.Md5Utils;
 import com.sandu.common.enums.RoleLevelStatus;
 import com.sandu.common.execption.BusinessException;
 import com.sandu.common.object.BaseConditionVO;
@@ -12,17 +14,16 @@
 import com.sandu.ximon.admin.param.PwdParam;
 import com.sandu.ximon.admin.param.UserPwsParm;
 import com.sandu.ximon.admin.security.SecurityUtils;
+import com.sandu.ximon.admin.security.authcode.MD5Util;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
 import com.sandu.ximon.dao.bo.AdminBo;
 import com.sandu.ximon.dao.bo.MenuNode;
-import com.sandu.ximon.dao.domain.Admin;
-import com.sandu.ximon.dao.domain.AdminRoleRelation;
-import com.sandu.ximon.dao.domain.Role;
-import com.sandu.ximon.dao.domain.RoleMenuRelation;
+import com.sandu.ximon.dao.domain.*;
 import com.sandu.ximon.dao.enums.AdministratorEnums;
 import com.sandu.ximon.dao.enums.OrderByEnums;
 import com.sandu.ximon.dao.mapper.AdminMapper;
 import lombok.AllArgsConstructor;
+import lombok.Data;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -299,4 +300,42 @@
 
         return resultList;
     }
+
+
+    /**
+     * 鐢熸垚key
+     *
+     * @param userId
+     * @return
+     */
+    public String creatUserKey(Long userId, Integer type) {
+        if (userId == null) {
+            throw new BusinessException("鐢ㄦ埛ID涓嶈兘涓虹┖锛�");
+        }
+        //0锛氬厖閲嶇疆key,1锛氳幏鍙杒ey
+        if (type == null || (type != 0 && type != 1)) {
+            type = 1;
+        }
+
+        ClientService clientService = SpringContextHolder.getBean(ClientService.class);
+        Client client = clientService.getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getId, userId));
+        if (client == null) {
+            throw new BusinessException("鐢ㄦ埛涓嶅瓨鍦紝璇烽噸鏂扮‘璁わ紒");
+        }
+
+        //鑾峰彇
+        if (type == 1) {
+            return "鐢ㄦ埛鐨勪究鎹风櫥褰昸ey涓猴細" + client.getUserKey();
+        } else {
+            //鏇存柊
+            String md5 = MD5Util.md5("uesrId:" + userId + "_AdministratorType:" + 2 + "time:" + System.currentTimeMillis());
+            client.setUserKey(md5);
+            boolean flag = clientService.updateById(client);
+            if (flag) {
+                return "鐢熸垚渚挎嵎鐧诲綍key鎴愬姛锛岃鐢ㄦ埛key涓猴細" + md5 + "锛岃濡ュ杽淇濈锛�";
+            } else {
+                throw new BusinessException("鐢熸垚渚挎嵎鐧诲綍key澶辫触锛�");
+            }
+        }
+    }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
index 3e9aecd..84f1cd8 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
@@ -5,7 +5,11 @@
 import com.sandu.common.enums.RoleLevelStatus;
 import com.sandu.common.execption.BusinessException;
 import com.sandu.common.object.BaseConditionVO;
+import com.sandu.common.redis.RedisService;
+import com.sandu.common.security.LoginUserInfo;
+import com.sandu.common.security.token.TokenProvider;
 import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.common.util.IpUtil;
 import com.sandu.common.util.SpringContextHolder;
 import com.sandu.ximon.admin.param.AddClientPrarm;
 import com.sandu.ximon.admin.param.PwdParam;
@@ -13,17 +17,21 @@
 import com.sandu.ximon.admin.param.UserPwsParm;
 import com.sandu.ximon.admin.security.SecurityUtils;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
+import com.sandu.ximon.admin.utils.StringUtil;
 import com.sandu.ximon.dao.bo.MenuNode;
 import com.sandu.ximon.dao.domain.*;
 import com.sandu.ximon.dao.enums.AdministratorEnums;
 import com.sandu.ximon.dao.mapper.ClientMapper;
 import lombok.AllArgsConstructor;
+import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -33,6 +41,7 @@
     private final PasswordEncoder passwordEncoder;
     private final ClientRoleRelationService clientRoleRelationService;
     private final RoleService roleService;
+    private final TokenProvider tokenProvider;
 
 
     public boolean addClient(AddClientPrarm addClientPrarm) {
@@ -378,4 +387,37 @@
         List<MenuNode> resultList = SpringContextHolder.getBean(MenuService.class).getUserPermissionListById(menuIds);
         return resultList;
     }
+
+    /**
+     * 鐢熸垚渚挎嵎鐧诲綍KEY
+     */
+    public String creatKeyByLogin(String keyValue) {
+        if (keyValue == null) {
+            throw new BusinessException("key涓嶈兘涓虹┖锛�");
+        }
+
+        Object object = SpringContextHolder.getBean(RedisService.class).get(keyValue);
+
+        if (object != null) {
+            return object.toString();
+        } else {
+            Client client = getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getUserKey, keyValue));
+            if (client == null) {
+                throw new BusinessException("鐢ㄦ埛涓嶅瓨鍦紝鑾峰彇淇℃伅寮傚父锛�");
+            }
+
+            Collection<GrantedAuthority> grantedAuthorities = roleService.mapToGrantedAuthorities(client.getId(), false);
+
+            LoginUserInfo loginUserInfo = new LoginUserInfo();
+            loginUserInfo.setUserId(client.getId());
+            loginUserInfo.setAccount(client.getClientName());
+            loginUserInfo.setIp(IpUtil.getRealIp());
+            loginUserInfo.setAdministratorType(AdministratorEnums.NORMAL.getCode());
+            loginUserInfo.setPermission(grantedAuthorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.joining(",")));
+
+            // 鐢熸垚浠ょ墝
+            String token = tokenProvider.createToken(loginUserInfo);
+            return token;
+        }
+    }
 }

--
Gitblit v1.9.3