Quellcode durchsuchen

新增在线用户查询界面

王鸿臣 vor 1 Jahr
Ursprung
Commit
23510d0138

+ 85 - 42
backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java

@@ -65,27 +65,23 @@ public class SysUserController {
         try {
             Integer cp;
             if (StringUtils.isNotEmpty(currentPage)) {
-                if (NumberUtil.isInteger(currentPage)){
+                if (NumberUtil.isInteger(currentPage)) {
                     cp = Integer.parseInt(currentPage);
-                }
-                else{
+                } else {
                     return ResponseVO.fail("currentPage不是整数!");
                 }
-            }
-            else{
+            } else {
                 return ResponseVO.fail("currentPage不能是空!");
             }
 
             Integer ps;
             if (StringUtils.isNotEmpty(pageSize)) {
-                if (NumberUtil.isInteger(pageSize)){
+                if (NumberUtil.isInteger(pageSize)) {
                     ps = Integer.parseInt(pageSize);
-                }
-                else{
+                } else {
                     return ResponseVO.fail("pageSize不是整数!");
                 }
-            }
-            else{
+            } else {
                 return ResponseVO.fail("pageSize不能是空!");
             }
 
@@ -111,7 +107,7 @@ public class SysUserController {
             }
 
             SysRole sysRole = sysRoleService.selectRoleListByUserId();
-            if ("YWGL".equals(sysRole.getRoleKey())){
+            if ("YWGL".equals(sysRole.getRoleKey())) {
                 // 业务管理员员
                 wrapper.eq("usertype", "1");
             }
@@ -134,6 +130,59 @@ public class SysUserController {
     }
 
     /**
+     * 获取用户分页信息(查询在线用户使用 其中屏蔽了状态为注销的用户)
+     *
+     * @return 用户信息
+     */
+    @GetMapping(value = "/getUserByHealthy")
+    @PreAuthorize("@ss.hasPermi('monitor:onLine:list')")
+    @PreventReplay
+    public ResponseVO getUserByHealthy(String currentPage, String pageSize, String onLineStatus) throws CustomException {
+        try {
+            Integer cp;
+            if (StringUtils.isNotEmpty(currentPage)) {
+                if (NumberUtil.isInteger(currentPage)) {
+                    cp = Integer.parseInt(currentPage);
+                } else {
+                    return ResponseVO.fail("currentPage不是整数!");
+                }
+            } else {
+                return ResponseVO.fail("currentPage不能是空!");
+            }
+
+            Integer ps;
+            if (StringUtils.isNotEmpty(pageSize)) {
+                if (NumberUtil.isInteger(pageSize)) {
+                    ps = Integer.parseInt(pageSize);
+                } else {
+                    return ResponseVO.fail("pageSize不是整数!");
+                }
+            } else {
+                return ResponseVO.fail("pageSize不能是空!");
+            }
+            QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+            wrapper.ne("status", "2");
+            if (StringUtils.isNotEmpty(onLineStatus)) {
+                wrapper.eq("online_status", onLineStatus);
+            }
+            Page<SysUser> result = sysUserService.page(new Page<>(cp, ps), wrapper);
+            List<SysUser> records = result.getRecords();
+            //遍历对象数组的方法
+            records.forEach(
+                    record -> {
+                        record.setMailbox(AesUtils.decryptStr(record.getMailbox()));
+                        record.setPhonenumber(AesUtils.decryptStr(record.getPhonenumber()));
+                        record.setNickname(AesUtils.decryptStr(record.getNickname()));
+                        record.setIdcard(AesUtils.decryptStr(record.getIdcard()));
+                    }
+            );
+            return ResponseVO.success(result);
+        } catch (Exception e) {
+            throw new CustomException("获取用户异常", e);
+        }
+    }
+
+    /**
      * 获取当前用户信息
      *
      * @return 用户信息
@@ -167,17 +216,16 @@ public class SysUserController {
         try {
             if (StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getUsername().trim())) {
                 return ResponseVO.fail("用户账号不能为空!");
-            }
-            else {
+            } else {
                 String username = user.getUsername().trim();
-                if (username.contains(" ")){
+                if (username.contains(" ")) {
                     return ResponseVO.fail("账号中不能含有空格!");
                 }
                 if (sysUserService.queryUserName(username) != null) {
                     return ResponseVO.fail(username + "账号已存在!");
                 } else {
                     String regExp = "^[^0-9][\\w_]{4,19}$";
-                    if (!username.matches(regExp)){
+                    if (!username.matches(regExp)) {
                         return ResponseVO.fail("用户账号长度必须是5-20位,只能包含字母、数字和下划线,不能数字开头!");
                     }
                 }
@@ -218,14 +266,14 @@ public class SysUserController {
             // 加密邮箱
             user.setMailbox(AesUtils.encryptHex(user.getMailbox()).toUpperCase());
 
-            if (user.getExpDate()!=null){
+            if (user.getExpDate() != null) {
                 // 判断临时账号有效期不能超过30天
                 Calendar calendar = Calendar.getInstance();
                 // 将当前日期增加30天
                 calendar.add(Calendar.DAY_OF_MONTH, 29);
                 // 获取增加30天后的日期
                 Date endDate = calendar.getTime();
-                if (!user.getExpDate().before(endDate)){
+                if (!user.getExpDate().before(endDate)) {
                     return ResponseVO.fail("账号有效期不能超过30天!");
                 }
             }
@@ -274,13 +322,13 @@ public class SysUserController {
 
             if (StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getUsername().trim())) {
                 return ResponseVO.fail("用户账号不能为空!");
-            } else{
+            } else {
                 String username = user.getUsername().trim();
-                if (username.contains(" ")){
+                if (username.contains(" ")) {
                     return ResponseVO.fail("账号中不能含有空格!");
                 }
                 String regExp = "^[^0-9][\\w_]{4,19}$";
-                if (!username.matches(regExp)){
+                if (!username.matches(regExp)) {
                     return ResponseVO.fail("用户账号长度必须是5-20位,只能包含字母、数字和下划线,不能数字开头!");
                 } else if (!existUser.getUsername().equals(username)) {
                     if (sysUserService.queryUserName(username) != null) {
@@ -329,17 +377,16 @@ public class SysUserController {
                 user.setLockTime(0L);
             }
 
-            if (user.getExpDate()==null) {
+            if (user.getExpDate() == null) {
                 user.setExpDate(null);
-            }
-            else{
+            } else {
                 // 判断临时账号有效期不能超过30天
                 Calendar calendar = Calendar.getInstance();
                 // 将当前日期增加30天
                 calendar.add(Calendar.DAY_OF_MONTH, 29);
                 // 获取增加30天后的日期
                 Date endDate = calendar.getTime();
-                if (!user.getExpDate().before(endDate)){
+                if (!user.getExpDate().before(endDate)) {
                     return ResponseVO.fail("账号有效期不能超过30天!");
                 }
             }
@@ -387,13 +434,13 @@ public class SysUserController {
 
         SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
         // 生成8位初始密码
-        String randomPwd = RandomRulePwd.createPwd(sysPolicy.getPasswordRule(),8);
-        log.info("用户名:"+sysUser.getUsername()+" 初始/重置密码:"+randomPwd);
+        String randomPwd = RandomRulePwd.createPwd(sysPolicy.getPasswordRule(), 8);
+        log.info("用户名:" + sysUser.getUsername() + " 初始/重置密码:" + randomPwd);
         // 加密密码
         String sm3password = SmUtil.sm3(randomPwd).toUpperCase();
         // 签名
         String signstr = SmUtil.sm3(sm3password).toUpperCase();
-        boolean bo = sysUserService.resetPassword(Integer.parseInt(id), sm3password,signstr);
+        boolean bo = sysUserService.resetPassword(Integer.parseInt(id), sm3password, signstr);
         if (!bo) {
             return ResponseVO.fail("密码生成失败!");
         }
@@ -491,7 +538,7 @@ public class SysUserController {
 
             if (StringUtils.isEmpty(oldPassword)) {
                 return ResponseVO.fail("旧密码不能为空!");
-            } else if (! (sysUser.getPassword().equals(SmUtil.sm3(oldPassword).toUpperCase()) && sysUser.getSignstr().equals(SmUtil.sm3(sysUser.getPassword()).toUpperCase()))) {
+            } else if (!(sysUser.getPassword().equals(SmUtil.sm3(oldPassword).toUpperCase()) && sysUser.getSignstr().equals(SmUtil.sm3(sysUser.getPassword()).toUpperCase()))) {
                 return ResponseVO.fail("旧密码不正确或验签失败!");
             }
 
@@ -503,7 +550,7 @@ public class SysUserController {
                 return ResponseVO.fail("新密码两次输入的密码不一致!");
             }
 
-            if (newPassword.contains(" ")){
+            if (newPassword.contains(" ")) {
                 return ResponseVO.fail("新密码中不能含有空格!");
             }
 
@@ -516,8 +563,8 @@ public class SysUserController {
             }
 
             SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
-            String ruleInfo = PasswordRuleUtil.ruleRegx(sysPolicy.getPasswordRule(),newPassword);
-            if (!"true".equals(ruleInfo)){
+            String ruleInfo = PasswordRuleUtil.ruleRegx(sysPolicy.getPasswordRule(), newPassword);
+            if (!"true".equals(ruleInfo)) {
                 return ResponseVO.fail(ruleInfo);
             }
 
@@ -592,27 +639,23 @@ public class SysUserController {
         try {
             Long userid;
             if (StringUtils.isNotEmpty(userId)) {
-                if (NumberUtil.isLong(userId)){
+                if (NumberUtil.isLong(userId)) {
                     userid = Long.parseLong(userId);
-                }
-                else{
+                } else {
                     return ResponseVO.fail("用户id不是类型不对!");
                 }
-            }
-            else{
+            } else {
                 return ResponseVO.fail("用户id不能为空!");
             }
 
             Long roleid;
             if (StringUtils.isNotEmpty(roleId)) {
-                if (NumberUtil.isLong(roleId)){
+                if (NumberUtil.isLong(roleId)) {
                     roleid = Long.parseLong(roleId);
-                }
-                else{
+                } else {
                     return ResponseVO.fail("角色id不是类型不对!");
                 }
-            }
-            else{
+            } else {
                 return ResponseVO.fail("角色id不能为空!");
             }
 
@@ -669,7 +712,7 @@ public class SysUserController {
             SysUser sysUser = SecurityContextUtil.getSysUser();
             String upwd = CacheConstants.usernamePasswordMap.get(sysUser.getUsername());
             SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
-            String ruleInfo = PasswordRuleUtil.ruleRegx(sysPolicy.getPasswordRule(),upwd);
+            String ruleInfo = PasswordRuleUtil.ruleRegx(sysPolicy.getPasswordRule(), upwd);
             return ResponseVO.success(ruleInfo);
         } catch (Exception e) {
             throw new CustomException("检测用户密码是否符合规则异常", e);

+ 221 - 0
ui/src/views/monitor/onLine/index.vue

@@ -0,0 +1,221 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="24">
+      <!--用户数据-->
+      <el-col :span="24" :xs="24">
+        <el-form ref="queryForm" :inline="true" label-width="68px" size="small">
+          <el-form-item label="用户状态" prop="status">
+            <el-select
+              v-model="queryParams.onLineStatus"
+              clearable
+              placeholder="请选择用户状态"
+              style="width: 240px"
+            >
+              <el-option
+                v-for="item in onLineStatusOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">查询用户登陆状态
+            </el-button>
+          </el-form-item>
+        </el-form>
+        <div style="padding-top: 10px">
+          <vxe-table
+            ref="xTable"
+            :data="userList"
+            :loading="loading"
+            :radio-config="{trigger: 'row'}"
+            align="center"
+            auto-resize
+            border
+            class="mytable-style"
+            export-config
+            highlight-current-row
+            max-height="700"
+            resizable
+            show-overflow
+          >
+            <vxe-table-column field="username" title="用户账号"/>
+            <vxe-table-column field="nickname" title="用户姓名"/>
+            <vxe-table-column :formatter="onlineStatusFormat" field="onlineStatus" title="账号在线状态"/>
+          </vxe-table>
+          <vxe-pager
+            v-show="showTable"
+            :current-page.sync="currentPage"
+            :layouts="['PrevJump', 'PrevPage','JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']"
+            :page-size.sync="pageSize"
+            :page-sizes="[10,50,100]"
+            :total="total"
+            perfect
+            @page-change="handlePageChange"
+          >
+          </vxe-pager>
+        </div>
+      </el-col>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+import {debounce} from 'lodash'
+
+export default {
+  name: "onLine",
+  data() {
+    return {
+      isShow: false,
+      // 遮罩层
+      loading: false,
+      showTable: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      currentPage: 1,
+      pageSize: 10,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 默认密码
+      initPassword: undefined,
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {
+        type: "0",
+      },
+      onLineStatusOptions: [
+        {value: '0', label: '在线'},
+        {value: '1', label: '离线'},
+      ],
+      // 查询参数
+      queryParams: {
+        onLineStatus: undefined
+      },
+      username: '',
+      typeOptions: [
+        {value: '0', label: '永久'},
+        {value: '1', label: '时间范围'}
+      ],
+      // 表单校验
+      rules: {
+        ip: [
+          {required: true, message: "ip不能为空", trigger: "blur"},
+          {pattern: /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/, message: "请输入正确的IP", trigger: "blur"}
+        ]
+      }
+    };
+  },
+  watch: {},
+  created() {
+    //this.getList()
+  },
+  methods: {
+    changeType(val) {
+      if (val == "0") {
+        this.isShow = false;
+      } else {
+        this.isShow = true;
+      }
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        ip: undefined,
+        type: "0",
+        limitTime: undefined,
+        limitStartTime: undefined,
+        limitEndTime: undefined,
+        sysTime: undefined,
+        lk: undefined
+      };
+      this.isShow = false;
+    },
+    // 列表用户状态格式化
+    statusFormat({cellValue}) {
+      let belongTo = ''
+      if (cellValue === "0") {
+        belongTo = "正常"
+      } else if (cellValue === "1") {
+        belongTo = "锁定(休眠)"
+      }
+      return belongTo
+    },
+    //用户在线状态格式化
+    onlineStatusFormat({cellValue}) {
+      let belongTo = ''
+      if (cellValue === "0") {
+        belongTo = "在线"
+      } else if (cellValue === "1") {
+        belongTo = "离线"
+      }
+      return belongTo
+    },
+    //用户类型格式化
+    userTypeFormat({cellValue}) {
+      let belongTo = ''
+      if (cellValue === "0") {
+        belongTo = "管理员"
+      } else if (cellValue === "1") {
+        belongTo = "业务用户"
+      }
+      return belongTo
+    },
+    handlePageChange({currentPage, pageSize}) {
+      this.currentPage = currentPage
+      this.pageSize = pageSize
+      this.getList()
+    },
+    /** 查询用户列表 */
+    async getList() {
+      this.loading = true;
+      let sysTime
+      let lk
+      await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {
+        sysTime = res.data.sysTime
+        lk = res.data.lk
+      }).catch((error) => {
+        this.loading = false;
+      })
+
+      var searchParams = {
+        currentPage: this.currentPage,
+        pageSize: this.pageSize,
+        onLineStatus: this.queryParams.onLineStatus,
+        sysTime: sysTime,
+        lk: lk
+      }
+      await this.$axios.get('/sysUserController/getUserByHealthy',
+        {params: searchParams}).then((res) => {
+        this.userList = res.data.records
+        this.total = res.data.total
+
+        if (res.data.records === '') {
+          this.showTable = false
+        } else {
+          this.showTable = true
+        }
+        this.loading = false
+      }).catch((error) => {
+        this.loading = false;
+        // this.$message.error(error)
+      })
+    },
+    /** 搜索按钮操作 */
+    handleQuery: debounce(function () {
+      this.currentPage = 1
+      this.pageSize = 10
+      this.getList()
+    }, 1000),
+  }
+};
+</script>