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