From b6c999b2bb066b9147be00b9cdf41b2638e5a70d Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Fri, 07 Jan 2022 22:58:04 +0800
Subject: [PATCH] 登录记录新增
---
src/main/java/org/springblade/common/config/ServerConfig.java | 66 +++++++++
src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java | 38 +++++
src/main/java/org/springblade/modules/loginrecord/service/LoginRecordService.java | 20 ++
src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.xml | 22 +++
src/main/java/org/springblade/modules/loginrecord/controller/LoginRecordController.java | 94 +++++++++++++
src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.java | 25 +++
src/main/java/org/springblade/modules/loginrecord/vo/LoginRecordVo.java | 17 ++
src/main/java/org/springblade/modules/loginrecord/entity/LoginRecord.java | 74 ++++++++++
src/main/java/org/springblade/modules/loginrecord/service/impl/LoginRecordServiceImpl.java | 32 ++++
9 files changed, 388 insertions(+), 0 deletions(-)
diff --git a/src/main/java/org/springblade/common/config/ServerConfig.java b/src/main/java/org/springblade/common/config/ServerConfig.java
new file mode 100644
index 0000000..fead92e
--- /dev/null
+++ b/src/main/java/org/springblade/common/config/ServerConfig.java
@@ -0,0 +1,66 @@
+package org.springblade.common.config;
+
+import org.springframework.boot.web.context.WebServerInitializedEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 服务器配置
+ * @author zhongrj
+ * @since 2022-01-07
+ */
+@Component
+public class ServerConfig implements ApplicationListener<WebServerInitializedEvent> {
+ private int serverPort;
+
+ /**
+ * 获取服务器 url
+ * @return
+ */
+ public String getUrl() {
+ InetAddress address = null;
+ try {
+ address = InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ }
+ return "http://"+address.getHostAddress() +":"+this.serverPort;
+ }
+
+ /**
+ * 获取服务器 ip
+ * @return
+ */
+ public String getServerIp() {
+ InetAddress address = null;
+ try {
+ address = InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ }
+ return address.getHostAddress();
+ }
+
+ /**
+ * 获取服务器 hostname
+ * @return
+ */
+ public String getServerHostName() {
+ InetAddress address = null;
+ try {
+ address = InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ }
+ return address.getHostName();
+ }
+
+ @Override
+ public void onApplicationEvent(WebServerInitializedEvent event) {
+ this.serverPort = event.getWebServer().getPort();
+ }
+
+}
diff --git a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
index dce10aa..c7c8957 100644
--- a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
+++ b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -23,6 +23,7 @@
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.common.cache.CacheNames;
+import org.springblade.common.config.ServerConfig;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.jwt.JwtUtil;
import org.springblade.core.jwt.props.JwtProperties;
@@ -43,12 +44,18 @@
import org.springblade.modules.exam.entity.ExamPaper;
import org.springblade.modules.exam.service.ExamPaperService;
import org.springblade.modules.exam.vo.ExamPaperVO;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+import org.springblade.modules.loginrecord.service.LoginRecordService;
import org.springblade.modules.system.entity.UserInfo;
import org.springblade.modules.zc.service.IZcService;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.Duration;
+import java.util.Date;
import java.util.List;
import java.util.UUID;
@@ -71,6 +78,10 @@
private final JwtProperties jwtProperties;
private final IZcService iZcService;
private final ExamPaperService examPaperService;
+
+ private final LoginRecordService loginRecordService;
+
+ private final ServerConfig serverConfig;
/**
* 登录
@@ -131,10 +142,37 @@
}
}
}
+ }else {
+ //新增登录记录
+ this.saveLoginRecord(userInfo);
}
return TokenUtil.createAuthInfo(userInfo);
}
+ /**
+ * 新增登录记录信息
+ * @param userInfo
+ */
+ private void saveLoginRecord(UserInfo userInfo) {
+ //创建对象
+ LoginRecord loginRecord = new LoginRecord();
+ //request 对象获取
+ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ HttpServletRequest request = requestAttributes.getRequest();
+ //数据封装
+ loginRecord.setCreateTime(new Date());
+ loginRecord.setServerIp(serverConfig.getServerIp());
+ loginRecord.setServerHost(serverConfig.getServerHostName());
+ loginRecord.setRequestUri(request.getRequestURI());
+ loginRecord.setRemoteIp(request.getRemoteAddr());
+ loginRecord.setDeptId(userInfo.getUser().getDeptId());
+ loginRecord.setUserId(userInfo.getUser().getId());
+ loginRecord.setType("1");
+ loginRecord.setCreateBy(userInfo.getUser().getRealName());
+ //新增
+ loginRecordService.save(loginRecord);
+ }
+
@GetMapping("/oauth/logout")
@ApiOperation(value = "退出登录")
diff --git a/src/main/java/org/springblade/modules/loginrecord/controller/LoginRecordController.java b/src/main/java/org/springblade/modules/loginrecord/controller/LoginRecordController.java
new file mode 100644
index 0000000..1510359
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/controller/LoginRecordController.java
@@ -0,0 +1,94 @@
+package org.springblade.modules.loginrecord.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+import org.springblade.modules.loginrecord.service.LoginRecordService;
+import org.springblade.modules.loginrecord.vo.LoginRecordVo;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zhongrj
+ * @time 2022-01-07
+ * @desc 登录记录控制层
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/loginRecord")
+public class LoginRecordController {
+
+ private final LoginRecordService loginRecordService;
+
+
+ /**
+ * 自定义分页
+ * @param query page,size
+ * @param loginRecord 登录记录信息对象
+ */
+ @GetMapping("/page")
+ public R<IPage<LoginRecordVo>> page(LoginRecordVo loginRecord, Query query) {
+ IPage<LoginRecordVo> pages = loginRecordService.selectSecurityPaperPage(Condition.getPage(query), loginRecord);
+ return R.data(pages);
+ }
+
+ /**
+ * 新增
+ * @param loginRecord 登录记录信息对象
+ */
+ @PostMapping("/save")
+ @ApiOperation(value = "新增", notes = "传入loginRecord")
+ public R save(@RequestBody LoginRecord loginRecord){
+ return R.data(loginRecordService.save(loginRecord));
+ }
+
+
+ /**
+ * 修改
+ * @param loginRecord 登录记录信息对象
+ */
+ @PostMapping("/update")
+ public R update(@RequestBody LoginRecord loginRecord){
+ return R.status(loginRecordService.updateById(loginRecord));
+ }
+
+ /**
+ * 新增或修改
+ * @param loginRecord 登录记录信息对象
+ */
+ @PostMapping("/submit")
+ public R submit(@RequestBody LoginRecord loginRecord){
+ if (null==loginRecord.getId()){
+ loginRecordService.save(loginRecord);
+ }else {
+ loginRecordService.updateById(loginRecord);
+ }
+ return R.data(loginRecord);
+ }
+
+ /**
+ * 删除
+ * @param ids 登录记录信息ids 数组
+ */
+ @PostMapping("/remove")
+ public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) {
+ return R.status(loginRecordService.removeByIds(Func.toLongList(ids)));
+ }
+
+ /**
+ * 详情
+ * @param loginRecord 登录记录信息对象
+ */
+ @GetMapping("/detail")
+ @ApiOperation(value = "详情", notes = "传入loginRecord")
+ public R<LoginRecord> detail(LoginRecord loginRecord) {
+ LoginRecord detail = loginRecordService.getOne(Condition.getQueryWrapper(loginRecord));
+ return R.data(detail);
+ }
+
+}
diff --git a/src/main/java/org/springblade/modules/loginrecord/entity/LoginRecord.java b/src/main/java/org/springblade/modules/loginrecord/entity/LoginRecord.java
new file mode 100644
index 0000000..b9279bf
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/entity/LoginRecord.java
@@ -0,0 +1,74 @@
+package org.springblade.modules.loginrecord.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 登录记录实体类
+ * @author zhongrj
+ * @time 2022-01-07
+ */
+@Data
+@TableName("sys_login_record")
+public class LoginRecord implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 登录记录主键id,非自增
+ */
+ @TableId(value = "id",type = IdType.ASSIGN_ID)
+ private Long id;
+
+
+ private Long userId;
+
+ /**
+ * 服务器名
+ */
+ private String serverHost;
+
+ /**
+ * 服务器ip
+ */
+ private String serverIp;
+
+ /**
+ * 登录类型 1:外网 2:内网
+ */
+ private String type;
+
+ /**
+ * 请求uri
+ */
+ private String requestUri;
+
+ /**
+ * 请求ip
+ */
+ private String remoteIp;
+
+ /**
+ * 请求人姓名
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 公司部门id
+ */
+ private String deptId;
+
+}
diff --git a/src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.java b/src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.java
new file mode 100644
index 0000000..540c48f
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.java
@@ -0,0 +1,25 @@
+package org.springblade.modules.loginrecord.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+import org.springblade.modules.loginrecord.vo.LoginRecordVo;
+
+import java.util.List;
+
+
+/**
+ * 工商信息Mapper 接口
+ * @author zhongrj
+ */
+public interface LoginRecordMapper extends BaseMapper<LoginRecord> {
+
+ /**
+ * 登录记录自定义分页
+ * @param page
+ * @param loginRecord
+ * @return
+ */
+ List<LoginRecordVo> selectSecurityPaperPage(@Param("page") IPage<LoginRecordVo> page,@Param("loginRecord") LoginRecordVo loginRecord);
+}
diff --git a/src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.xml b/src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.xml
new file mode 100644
index 0000000..ed3f548
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.loginrecord.mapper.LoginRecordMapper">
+
+ <!--登录记录自定义分页信息-->
+ <select id="selectSecurityPaperPage" resultType="org.springblade.modules.loginrecord.vo.LoginRecordVo">
+ select
+ slr.*,
+ bd.dept_name deptName
+ from
+ sys_login_record slr
+ left join blade_dept bd on bd.id = slr.dept_id
+ <if test="loginRecord.deptName!=null and loginRecord.deptName!=''">
+ bd.dept_name like concat('%',#{loginRecord.deptName},'%')
+ </if>
+ <if test="loginRecord.createBy!=null and loginRecord.createBy!=''">
+ slr.create_by like concat('%',#{loginRecord.createBy},'%')
+ </if>
+ order by slr.id desc
+ </select>
+
+</mapper>
diff --git a/src/main/java/org/springblade/modules/loginrecord/service/LoginRecordService.java b/src/main/java/org/springblade/modules/loginrecord/service/LoginRecordService.java
new file mode 100644
index 0000000..8eedbba
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/service/LoginRecordService.java
@@ -0,0 +1,20 @@
+package org.springblade.modules.loginrecord.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+import org.springblade.modules.loginrecord.vo.LoginRecordVo;
+
+/**
+ * 登录记录服务类
+ * @author zhongrj
+ */
+public interface LoginRecordService extends IService<LoginRecord> {
+
+ /**
+ * 自定义分页
+ * @param page
+ * @param loginRecord 登录记录信息对象
+ */
+ IPage<LoginRecordVo> selectSecurityPaperPage(IPage<LoginRecordVo> page, LoginRecordVo loginRecord);
+}
diff --git a/src/main/java/org/springblade/modules/loginrecord/service/impl/LoginRecordServiceImpl.java b/src/main/java/org/springblade/modules/loginrecord/service/impl/LoginRecordServiceImpl.java
new file mode 100644
index 0000000..bc6fa2b
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/service/impl/LoginRecordServiceImpl.java
@@ -0,0 +1,32 @@
+
+package org.springblade.modules.loginrecord.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+import org.springblade.modules.loginrecord.mapper.LoginRecordMapper;
+import org.springblade.modules.loginrecord.service.LoginRecordService;
+import org.springblade.modules.loginrecord.vo.LoginRecordVo;
+import org.springframework.stereotype.Service;
+
+/**
+ * 保安员证管理服务实现类
+ * @author zhongrj
+ * @since 2022-01-07
+ */
+@Service
+@AllArgsConstructor
+public class LoginRecordServiceImpl extends ServiceImpl<LoginRecordMapper, LoginRecord> implements LoginRecordService {
+
+ /**
+ * 自定义分页
+ * @param page
+ * @param loginRecord 登录记录信息对象
+ * @return
+ */
+ @Override
+ public IPage<LoginRecordVo> selectSecurityPaperPage(IPage<LoginRecordVo> page, LoginRecordVo loginRecord) {
+ return page.setRecords(baseMapper.selectSecurityPaperPage(page,loginRecord));
+ }
+}
diff --git a/src/main/java/org/springblade/modules/loginrecord/vo/LoginRecordVo.java b/src/main/java/org/springblade/modules/loginrecord/vo/LoginRecordVo.java
new file mode 100644
index 0000000..60624bd
--- /dev/null
+++ b/src/main/java/org/springblade/modules/loginrecord/vo/LoginRecordVo.java
@@ -0,0 +1,17 @@
+package org.springblade.modules.loginrecord.vo;
+
+import lombok.Data;
+import org.springblade.modules.loginrecord.entity.LoginRecord;
+
+import java.io.Serializable;
+
+/**
+ * 登录记录vo
+ * @author zhongrj
+ * @since 2022-01-07
+ */
+@Data
+public class LoginRecordVo extends LoginRecord implements Serializable {
+
+ private String deptName;
+}
--
Gitblit v1.9.3