用户登录日志查询接口

 用户登录日志查询接口
This commit is contained in:
ronger 2022-01-14 12:03:36 +08:00 committed by GitHub
commit e3507b4ac5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 257 additions and 190 deletions

View File

@ -2,6 +2,9 @@ package com.rymcu.forest.mapper;
import com.rymcu.forest.core.mapper.Mapper; import com.rymcu.forest.core.mapper.Mapper;
import com.rymcu.forest.entity.LoginRecord; import com.rymcu.forest.entity.LoginRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* Created on 2022/1/14 8:46. * Created on 2022/1/14 8:46.
@ -11,4 +14,10 @@ import com.rymcu.forest.entity.LoginRecord;
* @packageName com.rymcu.forest.mapper * @packageName com.rymcu.forest.mapper
*/ */
public interface LoginRecordMapper extends Mapper<LoginRecord> { public interface LoginRecordMapper extends Mapper<LoginRecord> {
/**
* 获取用户登录记录
* @param idUser
* @return
*/
List<LoginRecord> selectLoginRecordByIdUser(@Param("idUser") Integer idUser);
} }

View File

@ -3,6 +3,8 @@ package com.rymcu.forest.service;
import com.rymcu.forest.core.service.Service; import com.rymcu.forest.core.service.Service;
import com.rymcu.forest.entity.LoginRecord; import com.rymcu.forest.entity.LoginRecord;
import java.util.List;
/** /**
* Created on 2022/1/14 8:47. * Created on 2022/1/14 8:47.
* *
@ -17,4 +19,11 @@ public interface LoginRecordService extends Service<LoginRecord> {
* @return * @return
*/ */
LoginRecord saveLoginRecord(Integer idUser); LoginRecord saveLoginRecord(Integer idUser);
/**
* 获取用户登录记录
* @param idUser
* @return
*/
List<LoginRecord> findLoginRecordByIdUser(Integer idUser);
} }

View File

@ -15,6 +15,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@ -49,4 +50,9 @@ public class LoginRecordServiceImpl extends AbstractService<LoginRecord> impleme
loginRecordMapper.insertSelective(loginRecord); loginRecordMapper.insertSelective(loginRecord);
return loginRecord; return loginRecord;
} }
@Override
public List<LoginRecord> findLoginRecordByIdUser(Integer idUser) {
return loginRecordMapper.selectLoginRecordByIdUser(idUser);
}
} }

View File

@ -1,14 +1,23 @@
package com.rymcu.forest.web.api.user; package com.rymcu.forest.web.api.user;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.rymcu.forest.core.result.GlobalResult; import com.rymcu.forest.core.result.GlobalResult;
import com.rymcu.forest.core.result.GlobalResultGenerator; import com.rymcu.forest.core.result.GlobalResultGenerator;
import com.rymcu.forest.core.service.security.annotation.SecurityInterceptor; import com.rymcu.forest.core.service.security.annotation.SecurityInterceptor;
import com.rymcu.forest.dto.*; import com.rymcu.forest.dto.ChangeEmailDTO;
import com.rymcu.forest.dto.UpdatePasswordDTO;
import com.rymcu.forest.dto.UserInfoDTO;
import com.rymcu.forest.entity.LoginRecord;
import com.rymcu.forest.entity.UserExtend; import com.rymcu.forest.entity.UserExtend;
import com.rymcu.forest.service.LoginRecordService;
import com.rymcu.forest.service.UserService; import com.rymcu.forest.service.UserService;
import com.rymcu.forest.util.Utils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -20,6 +29,8 @@ public class UserInfoController {
@Resource @Resource
private UserService userService; private UserService userService;
@Resource
private LoginRecordService loginRecordService;
@GetMapping("/detail/{idUser}") @GetMapping("/detail/{idUser}")
@SecurityInterceptor @SecurityInterceptor
@ -63,4 +74,17 @@ public class UserInfoController {
return GlobalResultGenerator.genSuccessResult(map); return GlobalResultGenerator.genSuccessResult(map);
} }
@GetMapping("/login-records")
@SecurityInterceptor
public GlobalResult loginRecords(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows, @RequestParam Integer idUser) {
PageHelper.startPage(page, rows);
List<LoginRecord> list = loginRecordService.findLoginRecordByIdUser(idUser);
PageInfo<LoginRecord> pageInfo = new PageInfo<>(list);
Map<String, Object> map = new HashMap<String, Object>(2);
map.put("records", pageInfo.getList());
Map pagination = Utils.getPagination(pageInfo);
map.put("pagination", pagination);
return GlobalResultGenerator.genSuccessResult(map);
}
} }

View File

@ -1,4 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?> <?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" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.rymcu.forest.mapper.LoginRecordMapper"> <mapper namespace="com.rymcu.forest.mapper.LoginRecordMapper">
<resultMap id="BaseResultMap" type="com.rymcu.forest.entity.LoginRecord">
<result column="id" property="id"></result>
<result column="id_user" property="idUser"></result>
<result column="login_ip" property="loginIp"></result>
<result column="login_browser" property="loginBrowser"></result>
<result column="login_city" property="loginCity"></result>
<result column="login_os" property="loginOS"></result>
<result column="login_ua" property="loginUa"></result>
<result column="created_time" property="createdTime"></result>
</resultMap>
<select id="selectLoginRecordByIdUser" resultMap="BaseResultMap">
select id, id_user, login_ip, login_browser, login_city, login_os, created_time
from forest_login_record
where id_user = #{idUser} order by created_time desc
</select>
</mapper> </mapper>

View File

@ -1,6 +1,8 @@
create database forest default character set utf8mb4 collate utf8mb4_unicode_ci; create
database forest default character set utf8mb4 collate utf8mb4_unicode_ci;
use forest; use
forest;
create table forest_article create table forest_article
( (
@ -22,8 +24,7 @@ create table forest_article
article_status char default '0' null comment '文章状态', article_status char default '0' null comment '文章状态',
article_thumbs_up_count int default 0 null comment '点赞总数', article_thumbs_up_count int default 0 null comment '点赞总数',
article_sponsor_count int default 0 null comment '赞赏总数' article_sponsor_count int default 0 null comment '赞赏总数'
) ) comment ' ' collate = utf8mb4_unicode_ci;
comment ' ' collate = utf8mb4_unicode_ci;
create table forest_article_content create table forest_article_content
( (
@ -32,8 +33,7 @@ create table forest_article_content
article_content_html text null comment '文章内容Html', article_content_html text null comment '文章内容Html',
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间' updated_time datetime null comment '更新时间'
) ) comment ' ' collate = utf8mb4_unicode_ci;
comment ' ' collate = utf8mb4_unicode_ci;
create index forest_article_content_id_article_index create index forest_article_content_id_article_index
on forest_article_content (id_article); on forest_article_content (id_article);
@ -45,8 +45,7 @@ create table forest_article_thumbs_up
id_article bigint null comment '文章表主键', id_article bigint null comment '文章表主键',
id_user bigint null comment '用户表主键', id_user bigint null comment '用户表主键',
thumbs_up_time datetime null comment '点赞时间' thumbs_up_time datetime null comment '点赞时间'
) ) comment '文章点赞表 ';
comment '文章点赞表 ';
create table forest_bank create table forest_bank
( (
@ -57,8 +56,7 @@ create table forest_bank
bank_description varchar(512) null comment '银行描述', bank_description varchar(512) null comment '银行描述',
created_by bigint null comment '创建人', created_by bigint null comment '创建人',
created_time datetime null comment '创建时间' created_time datetime null comment '创建时间'
) ) comment '银行表 ';
comment '银行表 ';
create table forest_bank_account create table forest_bank_account
( (
@ -70,8 +68,7 @@ create table forest_bank_account
account_owner bigint null comment '账户所有者', account_owner bigint null comment '账户所有者',
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
account_type char default '0' null comment '0: 普通账户 1: 银行账户' account_type char default '0' null comment '0: 普通账户 1: 银行账户'
) ) comment '银行账户表 ';
comment '银行账户表 ';
create table forest_comment create table forest_comment
( (
@ -89,8 +86,7 @@ create table forest_comment
comment_reply_count int null comment '回帖计数', comment_reply_count int null comment '回帖计数',
comment_visible char null comment '0所有人可见1仅楼主和自己可见', comment_visible char null comment '0所有人可见1仅楼主和自己可见',
created_time datetime null comment '创建时间' created_time datetime null comment '创建时间'
) ) comment '评论表 ' collate = utf8mb4_unicode_ci;
comment '评论表 ' collate = utf8mb4_unicode_ci;
create table forest_currency_issue create table forest_currency_issue
( (
@ -99,8 +95,7 @@ create table forest_currency_issue
issue_value decimal(32, 8) null comment '发行数额', issue_value decimal(32, 8) null comment '发行数额',
created_by bigint null comment '发行人', created_by bigint null comment '发行人',
created_time datetime null comment '发行时间' created_time datetime null comment '发行时间'
) ) comment '货币发行表 ';
comment '货币发行表 ';
create table forest_currency_rule create table forest_currency_rule
( (
@ -114,8 +109,7 @@ create table forest_currency_rule
maximum_money decimal(32, 8) null comment '上限金额', maximum_money decimal(32, 8) null comment '上限金额',
repeat_days int default 0 null comment '重复(0: 不重复,单位:天)', repeat_days int default 0 null comment '重复(0: 不重复,单位:天)',
status char default '0' null comment '状态' status char default '0' null comment '状态'
) ) comment '货币规则表 ';
comment '货币规则表 ';
create table forest_follow create table forest_follow
( (
@ -124,8 +118,7 @@ create table forest_follow
follower_id bigint null comment '关注者 id', follower_id bigint null comment '关注者 id',
following_id bigint null comment '关注数据 id', following_id bigint null comment '关注数据 id',
following_type char null comment '0用户1标签2帖子收藏3帖子关注' following_type char null comment '0用户1标签2帖子收藏3帖子关注'
) ) comment '关注表 ' collate = utf8mb4_unicode_ci;
comment '关注表 ' collate = utf8mb4_unicode_ci;
create table forest_notification create table forest_notification
( (
@ -137,8 +130,7 @@ create table forest_notification
has_read char default '0' null comment '是否已读', has_read char default '0' null comment '是否已读',
data_summary varchar(256) null comment '数据摘要', data_summary varchar(256) null comment '数据摘要',
created_time datetime null comment '创建时间' created_time datetime null comment '创建时间'
) ) comment '通知表 ' collate = utf8mb4_unicode_ci;
comment '通知表 ' collate = utf8mb4_unicode_ci;
create table forest_portfolio create table forest_portfolio
( (
@ -151,8 +143,7 @@ create table forest_portfolio
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间', updated_time datetime null comment '更新时间',
portfolio_description_html varchar(1024) null comment ' 作品集介绍HTML' portfolio_description_html varchar(1024) null comment ' 作品集介绍HTML'
) ) comment '作品集表' collate = utf8mb4_unicode_ci;
comment '作品集表' collate = utf8mb4_unicode_ci;
create table forest_portfolio_article create table forest_portfolio_article
( (
@ -161,8 +152,7 @@ create table forest_portfolio_article
id_portfolio bigint null comment '作品集表主键', id_portfolio bigint null comment '作品集表主键',
id_article bigint null comment '文章表主键', id_article bigint null comment '文章表主键',
sort_no int null comment '排序号' sort_no int null comment '排序号'
) ) comment '作品集与文章关系表' collate = utf8mb4_unicode_ci;
comment '作品集与文章关系表' collate = utf8mb4_unicode_ci;
create table forest_role create table forest_role
( (
@ -174,8 +164,7 @@ create table forest_role
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间', updated_time datetime null comment '更新时间',
weights tinyint default 0 null comment '权重,数值越小权限越大;0:无权限' weights tinyint default 0 null comment '权重,数值越小权限越大;0:无权限'
) ) comment ' ' collate = utf8mb4_unicode_ci;
comment ' ' collate = utf8mb4_unicode_ci;
create table forest_sponsor create table forest_sponsor
( (
@ -186,8 +175,7 @@ create table forest_sponsor
sponsor bigint null comment '赞赏人', sponsor bigint null comment '赞赏人',
sponsorship_time datetime null comment '赞赏日期', sponsorship_time datetime null comment '赞赏日期',
sponsorship_money decimal(32, 8) null comment '赞赏金额' sponsorship_money decimal(32, 8) null comment '赞赏金额'
) ) comment '赞赏表 ';
comment '赞赏表 ';
create table forest_tag create table forest_tag
( (
@ -206,8 +194,7 @@ create table forest_tag
tag_status char default '0' null comment '标签状态', tag_status char default '0' null comment '标签状态',
tag_reservation char default '0' null comment '保留标签', tag_reservation char default '0' null comment '保留标签',
tag_description_html text null tag_description_html text null
) ) comment '标签表 ' collate = utf8mb4_unicode_ci;
comment '标签表 ' collate = utf8mb4_unicode_ci;
create table forest_tag_article create table forest_tag_article
( (
@ -219,8 +206,7 @@ create table forest_tag_article
article_perfect int default 0 null comment '0:非优选1优选 0', article_perfect int default 0 null comment '0:非优选1优选 0',
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间' updated_time datetime null comment '更新时间'
) ) comment '标签 - 帖子关联表 ' collate = utf8mb4_unicode_ci;
comment '标签 - 帖子关联表 ' collate = utf8mb4_unicode_ci;
create index forest_tag_article_id_tag_index create index forest_tag_article_id_tag_index
on forest_tag_article (id_tag); on forest_tag_article (id_tag);
@ -241,8 +227,7 @@ create table forest_topic
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间', updated_time datetime null comment '更新时间',
topic_description_html text null comment '专题描述 Html' topic_description_html text null comment '专题描述 Html'
) ) comment '主题表' collate = utf8mb4_unicode_ci;
comment '主题表' collate = utf8mb4_unicode_ci;
create table forest_topic_tag create table forest_topic_tag
( (
@ -252,8 +237,7 @@ create table forest_topic_tag
id_tag bigint null comment '标签id', id_tag bigint null comment '标签id',
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间' updated_time datetime null comment '更新时间'
) ) comment '专题- 标签关联表 ' collate = utf8mb4_unicode_ci;
comment '专题- 标签关联表 ' collate = utf8mb4_unicode_ci;
create index forest_topic_tag_id_topic_index create index forest_topic_tag_id_topic_index
on forest_topic_tag (id_topic); on forest_topic_tag (id_topic);
@ -269,8 +253,7 @@ create table forest_transaction_record
money decimal(32, 8) null comment '交易金额', money decimal(32, 8) null comment '交易金额',
transaction_type char default '0' null comment '交易类型', transaction_type char default '0' null comment '交易类型',
transaction_time datetime null comment '交易时间' transaction_time datetime null comment '交易时间'
) ) comment '交易记录表 ';
comment '交易记录表 ';
create table forest_user create table forest_user
( (
@ -290,8 +273,7 @@ create table forest_user
updated_time datetime null comment '更新时间', updated_time datetime null comment '更新时间',
last_login_time datetime null comment '最后登录时间', last_login_time datetime null comment '最后登录时间',
signature varchar(128) null comment '签名' signature varchar(128) null comment '签名'
) ) comment ' ' collate = utf8mb4_unicode_ci;
comment ' ' collate = utf8mb4_unicode_ci;
create table forest_user_extend create table forest_user_extend
( (
@ -301,16 +283,14 @@ create table forest_user_extend
weixin varchar(32) null comment '微信', weixin varchar(32) null comment '微信',
qq varchar(32) null comment 'qq', qq varchar(32) null comment 'qq',
blog varchar(500) null comment '博客' blog varchar(500) null comment '博客'
) ) comment '用户扩展表 ';
comment '用户扩展表 ';
create table forest_user_role create table forest_user_role
( (
id_user bigint not null comment '用户表主键', id_user bigint not null comment '用户表主键',
id_role bigint not null comment '角色表主键', id_role bigint not null comment '角色表主键',
created_time datetime null comment '创建时间' created_time datetime null comment '创建时间'
) ) comment ' ' collate = utf8mb4_unicode_ci;
comment ' ' collate = utf8mb4_unicode_ci;
create table forest_user_tag create table forest_user_tag
( (
@ -321,8 +301,7 @@ create table forest_user_tag
type char null comment '0创建者1帖子使用2用户自评标签', type char null comment '0创建者1帖子使用2用户自评标签',
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
updated_time datetime null comment '更新时间' updated_time datetime null comment '更新时间'
) ) comment '用户 - 标签关联表 ' collate = utf8mb4_unicode_ci;
comment '用户 - 标签关联表 ' collate = utf8mb4_unicode_ci;
create table forest_visit create table forest_visit
( (
@ -337,8 +316,7 @@ create table forest_visit
visit_referer_url varchar(256) null comment '上游链接', visit_referer_url varchar(256) null comment '上游链接',
created_time datetime null comment '创建时间', created_time datetime null comment '创建时间',
expired_time datetime null comment '过期时间' expired_time datetime null comment '过期时间'
) ) comment '浏览表' collate = utf8mb4_unicode_ci;
comment '浏览表' collate = utf8mb4_unicode_ci;
create table forest_lucene_user_dic create table forest_lucene_user_dic
( (
@ -368,16 +346,42 @@ values (1, 'admin', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23',
insert into forest.forest_user_role (id_user, id_role, created_time) insert into forest.forest_user_role (id_user, id_role, created_time)
values (1, 1, '2021-01-25 18:22:12'); values (1, 1, '2021-01-25 18:22:12');
create table forest_file
CREATE TABLE `forest_file`
( (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', id int unsigned auto_increment comment 'id'
`md5_value` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件md5值', primary key,
`file_path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件上传路径', md5_value varchar(40) not null comment '文件md5值',
`file_url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '网络访问路径', file_path varchar(255) not null comment '文件上传路径',
`created_time` datetime DEFAULT NULL COMMENT '创建时间', file_url varchar(255) not null comment '网络访问路径',
`updated_time` datetime DEFAULT NULL COMMENT '更新时间', created_time datetime null comment '创建时间',
`created_by` int(11) DEFAULT NULL COMMENT '创建人', updated_time datetime null comment '更新时间',
PRIMARY KEY (`id`), created_by int null comment '创建人',
UNIQUE KEY `index_md5_value` (`md5_value`) file_size int null comment '文件大小',
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment '文件上传记录表'; file_type varchar(10) null comment '文件类型'
) comment '文件上传记录表';
create index index_md5_value_created_by
on forest_file (md5_value, created_by);
create index index_created_by
on forest_file (created_by);
create index index_md5_value
on forest_file (md5_value);
create table forest_login_record
(
id bigint auto_increment comment '主键'
primary key,
id_user bigint not null comment '用户表主键',
login_ip varchar(128) null comment '登录设备IP',
login_ua varchar(512) null comment '登录设备UA',
login_city varchar(128) null comment '登录设备所在城市',
login_os varchar(64) null comment '登录设备操作系统',
login_browser varchar(64) null comment '登录设备浏览器',
created_time datetime null comment '登录时间',
login_device_id varchar(512) null comment '登录设备/浏览器指纹',
constraint forest_login_record_id_uindex
unique (id)
) comment '登录记录表';