diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java
index 3e9e40ddf..9ab470061 100644
--- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java
+++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java
@@ -17,6 +17,7 @@ import cn.stylefeng.roses.kernel.jwt.api.exception.JwtException;
import cn.stylefeng.roses.kernel.jwt.api.exception.enums.JwtExceptionEnum;
import cn.stylefeng.roses.kernel.jwt.api.pojo.payload.DefaultJwtPayload;
import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil;
+import cn.stylefeng.roses.kernel.system.LoginLogServiceApi;
import cn.stylefeng.roses.kernel.system.UserServiceApi;
import cn.stylefeng.roses.kernel.system.enums.UserStatusEnum;
import cn.stylefeng.roses.kernel.system.pojo.user.UserLoginInfoDTO;
@@ -54,6 +55,9 @@ public class AuthServiceImpl implements AuthServiceApi {
@Resource
private PasswordTransferEncryptApi passwordTransferEncryptApi;
+ @Resource
+ private LoginLogServiceApi loginLogServiceApi;
+
@Override
public LoginResponse login(LoginRequest loginRequest) {
return loginAction(loginRequest, true);
@@ -69,8 +73,13 @@ public class AuthServiceImpl implements AuthServiceApi {
@Override
public void logout() {
String token = LoginContext.me().getToken();
+ //退出日志
+ if (StrUtil.isNotEmpty(token)) {
+ loginLogServiceApi.loginOutSuccess(LoginContext.me().getLoginUser().getUserId());
+ }
logoutWithToken(token);
sessionManagerApi.destroySessionCookie();
+
}
@Override
@@ -198,7 +207,9 @@ public class AuthServiceImpl implements AuthServiceApi {
String ip = HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest());
userServiceApi.updateUserLoginInfo(loginUser.getUserId(), new Date(), ip);
- // 11. 组装返回结果
+ // 11.登录成功日志
+ loginLogServiceApi.loginSuccess(loginUser.getUserId());
+ // 12. 组装返回结果
return new LoginResponse(loginUser, jwtToken, defaultJwtPayload.getExpirationDate());
}
diff --git a/kernel-s-system/pom.xml b/kernel-s-system/pom.xml
index 9445f242e..cf27c8902 100644
--- a/kernel-s-system/pom.xml
+++ b/kernel-s-system/pom.xml
@@ -24,6 +24,7 @@
system-business-role
system-business-menu
system-business-notice
+ system-business-login-log
system-spring-boot-starter
diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/LoginLogServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/LoginLogServiceApi.java
new file mode 100644
index 000000000..e751a5e0d
--- /dev/null
+++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/LoginLogServiceApi.java
@@ -0,0 +1,66 @@
+package cn.stylefeng.roses.kernel.system;
+
+import cn.stylefeng.roses.kernel.system.pojo.loginlog.request.SysLoginLogRequest;
+
+/**
+ * 登录日志api接口
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 11:12
+ */
+public interface LoginLogServiceApi {
+
+ /**
+ * 添加日志
+ *
+ * @param sysLoginLogRequest 参数
+ * @author chenjinlong
+ * @date 2021/1/13 10:56
+ */
+ void add(SysLoginLogRequest sysLoginLogRequest);
+
+ /**
+ * 登录成功
+ *
+ * @param userId 用户id
+ * @author chenjinlong
+ * @date 2021/1/13 11:36
+ */
+ void loginSuccess(Long userId);
+
+ /**
+ * 登录失败
+ *
+ * @param userId 用户id
+ * @param llgMessage 错误信息
+ * @author chenjinlong
+ * @date 2021/1/13 11:36
+ */
+ void loginFail(Long userId, String llgMessage);
+
+ /**
+ * 登出成功
+ *
+ * @param userId 用户id
+ * @author chenjinlong
+ * @date 2021/1/13 11:36
+ */
+ void loginOutSuccess(Long userId);
+
+ /**
+ * 登出失败
+ *
+ * @param userId 用户id
+ * @author chenjinlong
+ * @date 2021/1/13 11:36
+ */
+ void loginOutFail(Long userId);
+
+ /**
+ * 清空
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 10:55
+ */
+ void deleteAll();
+}
diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/loginlog/request/SysLoginLogRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/loginlog/request/SysLoginLogRequest.java
new file mode 100644
index 000000000..180351e3d
--- /dev/null
+++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/loginlog/request/SysLoginLogRequest.java
@@ -0,0 +1,65 @@
+package cn.stylefeng.roses.kernel.system.pojo.loginlog.request;
+
+import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 登录日志表
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 11:06
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SysLoginLogRequest extends BaseRequest {
+
+ /**
+ * 主键id
+ */
+ @NotNull(message = "llgId不能为空", groups = {detail.class})
+ private Long llgId;
+
+ /**
+ * 日志名称
+ */
+ private String llgName;
+
+ /**
+ * 是否执行成功
+ */
+ private String llgSucceed;
+
+ /**
+ * 具体消息
+ */
+ private String llgMessage;
+
+ /**
+ * 登录ip
+ */
+ private String llgIpAddress;
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ /**
+ * 开始时间
+ */
+ private Date createTime;
+
+ /**
+ * 开始时间
+ */
+ private String beginTime;
+
+ /**
+ * 结束时间
+ */
+ private String endTime;
+}
diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/loginlog/response/SysLoginLogResponse.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/loginlog/response/SysLoginLogResponse.java
new file mode 100644
index 000000000..88e9d7e41
--- /dev/null
+++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/loginlog/response/SysLoginLogResponse.java
@@ -0,0 +1,46 @@
+package cn.stylefeng.roses.kernel.system.pojo.loginlog.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 登录日志表
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 11:06
+ */
+@Data
+public class SysLoginLogResponse implements Serializable {
+
+ /**
+ * 主键id
+ */
+ private Long llgId;
+
+ /**
+ * 日志名称
+ */
+ private String llgName;
+
+ /**
+ * 是否执行成功
+ */
+ private String llgSucceed;
+
+ /**
+ * 具体消息
+ */
+ private String llgMessage;
+
+ /**
+ * 登录ip
+ */
+ private String llgIpAddress;
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+}
diff --git a/kernel-s-system/system-business-login-log/README.md b/kernel-s-system/system-business-login-log/README.md
new file mode 100644
index 000000000..0b1834c49
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/README.md
@@ -0,0 +1 @@
+登录日志相关业务
\ No newline at end of file
diff --git a/kernel-s-system/system-business-login-log/pom.xml b/kernel-s-system/system-business-login-log/pom.xml
new file mode 100644
index 000000000..8591dc99e
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+
+
+ cn.stylefeng.roses
+ kernel-s-system
+ 1.0.0
+ ../pom.xml
+
+
+ system-business-login-log
+
+ jar
+
+
+
+
+
+ cn.stylefeng.roses
+ system-api
+ 1.0.0
+
+
+
+
+
+ cn.stylefeng.roses
+ scanner-api
+ 1.0.0
+
+
+
+
+
+ cn.stylefeng.roses
+ validator-api
+ 1.0.0
+
+
+
+
+
+ cn.stylefeng.roses
+ db-sdk-mp
+ 1.0.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/constants/LoginLogConstant.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/constants/LoginLogConstant.java
new file mode 100644
index 000000000..4a191dcbf
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/constants/LoginLogConstant.java
@@ -0,0 +1,20 @@
+package cn.stylefeng.roses.kernel.loginlog.modular.constants;
+
+public interface LoginLogConstant {
+
+ String LOGIN_IN_LOGINNAME = "登录日志";
+
+ String LOGIN_OUT_LOGINNAME = "退出日志";
+
+ String OPERATION_SUCCESS = "成功";
+
+ String OPERATION_FAIL = "失败";
+
+ String LOGIN_IN_SUCCESS_MESSAGE = "系统登录成功!";
+
+ String LOGIN_IN_SUCCESS_FAIL = "系统登录失败!";
+
+ String LOGIN_OUT_SUCCESS_MESSAGE = "系统退出成功!";
+
+ String LOGIN_OUT_SUCCESS_FAIL = "系统退出失败!";
+}
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/controller/SysLoginLogController.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/controller/SysLoginLogController.java
new file mode 100644
index 000000000..49a405d3c
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/controller/SysLoginLogController.java
@@ -0,0 +1,64 @@
+package cn.stylefeng.roses.kernel.loginlog.modular.controller;
+
+import cn.stylefeng.roses.kernel.loginlog.modular.service.SysLoginLogService;
+import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
+import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
+import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
+import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
+import cn.stylefeng.roses.kernel.system.pojo.loginlog.request.SysLoginLogRequest;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 登陆日志控制器
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 17:51
+ */
+@RestController
+@ApiResource(name = "登录日志")
+public class SysLoginLogController {
+
+ @Resource
+ private SysLoginLogService sysLoginLogService;
+
+
+ /**
+ * 清空登录日志
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 17:51
+ */
+ @GetResource(name = "清空登录日志", path = "/loginLog/deleteAll")
+ public ResponseData deleteAll() {
+ sysLoginLogService.deleteAll();
+ return new SuccessResponseData();
+ }
+
+
+ /**
+ * 查询登录日志详情
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 17:51
+ */
+ @GetResource(name = "查看详情登录日志", path = "/loginLog/detail")
+ public ResponseData detail(@Validated(SysLoginLogRequest.detail.class) SysLoginLogRequest sysLoginLogRequest) {
+ return new SuccessResponseData(sysLoginLogService.detail(sysLoginLogRequest));
+ }
+
+ /**
+ * 分页查询登录日志
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 17:51
+ */
+ @GetResource(name = "分页查询登录日志", path = "/loginLog/page")
+ public ResponseData page(SysLoginLogRequest sysLoginLogRequest) {
+ return new SuccessResponseData(sysLoginLogService.page(sysLoginLogRequest));
+ }
+
+
+}
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/entity/SysLoginLog.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/entity/SysLoginLog.java
new file mode 100644
index 000000000..2f1a0d790
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/entity/SysLoginLog.java
@@ -0,0 +1,63 @@
+package cn.stylefeng.roses.kernel.loginlog.modular.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 登录日志表
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 11:05
+ */
+@Data
+@TableName("sys_login_log")
+public class SysLoginLog {
+
+ /**
+ * 主键id
+ */
+ @TableId("llg_id")
+ private Long llgId;
+
+ /**
+ * 日志名称
+ */
+ @TableField("llg_name")
+ private String llgName;
+
+ /**
+ * 是否执行成功
+ */
+ @TableField("llg_succeed")
+ private String llgSucceed;
+
+ /**
+ * 具体消息
+ */
+ @TableField("llg_message")
+ private String llgMessage;
+
+ /**
+ * 登录ip
+ */
+ @TableField("llg_ip_address")
+ private String llgIpAddress;
+
+ /**
+ * 用户id
+ */
+ @TableField(value = "user_id")
+ private Long userId;
+
+ /**
+ * 创建时间
+ */
+ @TableField(value = "create_time", fill = FieldFill.INSERT)
+ private Date createTime;
+
+}
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/factory/SysLoginLogFactory.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/factory/SysLoginLogFactory.java
new file mode 100644
index 000000000..0f60ad42c
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/factory/SysLoginLogFactory.java
@@ -0,0 +1,6 @@
+package cn.stylefeng.roses.kernel.loginlog.modular.factory;
+
+public class SysLoginLogFactory {
+
+
+}
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/mapper/SysLoginLogMapper.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/mapper/SysLoginLogMapper.java
new file mode 100644
index 000000000..130d86c96
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/mapper/SysLoginLogMapper.java
@@ -0,0 +1,37 @@
+/*
+Copyright [2020] [https://www.stylefeng.cn]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+
+1.请不要删除和修改根目录下的LICENSE文件。
+2.请不要删除和修改Guns源码头部的版权声明。
+3.请保留源码和相关描述文件的项目出处,作者声明等。
+4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns-separation
+5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns-separation
+6.若您的项目无法满足以上几点,可申请商业授权,获取Guns商业授权许可,请在官网购买授权,地址为 https://www.stylefeng.cn
+ */
+package cn.stylefeng.roses.kernel.loginlog.modular.mapper;
+
+import cn.stylefeng.roses.kernel.loginlog.modular.entity.SysLoginLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 系统应用mapper接口
+ *
+ * @author fengshuonan
+ * @date 2020/3/13 16:17
+ */
+public interface SysLoginLogMapper extends BaseMapper {
+}
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/mapper/mapping/SysLoginLogMapper.xml b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/mapper/mapping/SysLoginLogMapper.xml
new file mode 100644
index 000000000..abdfc7861
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/mapper/mapping/SysLoginLogMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/service/SysLoginLogService.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/service/SysLoginLogService.java
new file mode 100644
index 000000000..32f1191fe
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/service/SysLoginLogService.java
@@ -0,0 +1,71 @@
+/*
+Copyright [2020] [https://www.stylefeng.cn]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+
+1.请不要删除和修改根目录下的LICENSE文件。
+2.请不要删除和修改Guns源码头部的版权声明。
+3.请保留源码和相关描述文件的项目出处,作者声明等。
+4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns-separation
+5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns-separation
+6.若您的项目无法满足以上几点,可申请商业授权,获取Guns商业授权许可,请在官网购买授权,地址为 https://www.stylefeng.cn
+ */
+package cn.stylefeng.roses.kernel.loginlog.modular.service;
+
+import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
+import cn.stylefeng.roses.kernel.loginlog.modular.entity.SysLoginLog;
+import cn.stylefeng.roses.kernel.system.LoginLogServiceApi;
+import cn.stylefeng.roses.kernel.system.pojo.loginlog.request.SysLoginLogRequest;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 登录日志service接口
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 10:56
+ */
+public interface SysLoginLogService extends IService, LoginLogServiceApi {
+
+
+ /**
+ * 删除
+ *
+ * @param sysLoginLogRequest 参数
+ * @author chenjinlong
+ * @date 2021/1/13 10:55
+ */
+ void delete(SysLoginLogRequest sysLoginLogRequest);
+
+
+ /**
+ * 查看相信
+ *
+ * @param sysLoginLogRequest 参数
+ * @author chenjinlong
+ * @date 2021/1/13 10:56
+ */
+ SysLoginLog detail(SysLoginLogRequest sysLoginLogRequest);
+
+ /**
+ * 分页查询
+ *
+ * @param sysLoginLogRequest 参数
+ * @author chenjinlong
+ * @date 2021/1/13 10:57
+ */
+ PageResult page(SysLoginLogRequest sysLoginLogRequest);
+
+
+}
diff --git a/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/service/impl/SysLoginLogServiceImpl.java b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/service/impl/SysLoginLogServiceImpl.java
new file mode 100644
index 000000000..7365fd0c8
--- /dev/null
+++ b/kernel-s-system/system-business-login-log/src/main/java/cn/stylefeng/roses/kernel/loginlog/modular/service/impl/SysLoginLogServiceImpl.java
@@ -0,0 +1,133 @@
+package cn.stylefeng.roses.kernel.loginlog.modular.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
+import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
+import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
+import cn.stylefeng.roses.kernel.loginlog.modular.constants.LoginLogConstant;
+import cn.stylefeng.roses.kernel.loginlog.modular.entity.SysLoginLog;
+import cn.stylefeng.roses.kernel.loginlog.modular.mapper.SysLoginLogMapper;
+import cn.stylefeng.roses.kernel.loginlog.modular.service.SysLoginLogService;
+import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
+import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil;
+import cn.stylefeng.roses.kernel.system.exception.enums.AppExceptionEnum;
+import cn.stylefeng.roses.kernel.system.pojo.loginlog.request.SysLoginLogRequest;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 系统应用service接口实现类
+ *
+ * @author fengshuonan
+ * @date 2020/3/13 16:15
+ */
+@Service
+public class SysLoginLogServiceImpl extends ServiceImpl implements SysLoginLogService {
+
+ @Override
+ public void add(SysLoginLogRequest sysLoginLogRequest) {
+ SysLoginLog sysLoginLog = new SysLoginLog();
+ BeanUtil.copyProperties(sysLoginLogRequest, sysLoginLog);
+ this.save(sysLoginLog);
+ }
+
+ @Override
+ public void loginSuccess(Long userId) {
+ SysLoginLog sysLoginLog = new SysLoginLog();
+ sysLoginLog.setLlgName(LoginLogConstant.LOGIN_IN_LOGINNAME);
+ sysLoginLog.setUserId(userId);
+ sysLoginLog.setLlgIpAddress(HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest()));
+ sysLoginLog.setLlgSucceed(LoginLogConstant.OPERATION_SUCCESS);
+ sysLoginLog.setLlgMessage(LoginLogConstant.LOGIN_IN_SUCCESS_MESSAGE);
+ this.save(sysLoginLog);
+ }
+
+ @Override
+ public void loginFail(Long userId, String llgMessage) {
+ SysLoginLog sysLoginLog = new SysLoginLog();
+ sysLoginLog.setLlgName(LoginLogConstant.LOGIN_IN_LOGINNAME);
+ sysLoginLog.setUserId(userId);
+ sysLoginLog.setLlgIpAddress(HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest()));
+ sysLoginLog.setLlgSucceed(LoginLogConstant.OPERATION_FAIL);
+ sysLoginLog.setLlgMessage(llgMessage);
+ this.save(sysLoginLog);
+ }
+
+ @Override
+ public void loginOutSuccess(Long userId) {
+ SysLoginLog sysLoginLog = new SysLoginLog();
+ sysLoginLog.setLlgName(LoginLogConstant.LOGIN_OUT_LOGINNAME);
+ sysLoginLog.setUserId(userId);
+ sysLoginLog.setLlgIpAddress(HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest()));
+ sysLoginLog.setLlgSucceed(LoginLogConstant.OPERATION_SUCCESS);
+ sysLoginLog.setLlgMessage(LoginLogConstant.LOGIN_OUT_SUCCESS_MESSAGE);
+ this.save(sysLoginLog);
+ }
+
+ @Override
+ public void loginOutFail(Long userId) {
+ SysLoginLog sysLoginLog = new SysLoginLog();
+ sysLoginLog.setLlgName(LoginLogConstant.LOGIN_OUT_LOGINNAME);
+ sysLoginLog.setUserId(userId);
+ sysLoginLog.setLlgIpAddress(HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest()));
+ sysLoginLog.setLlgSucceed(LoginLogConstant.OPERATION_FAIL);
+ sysLoginLog.setLlgMessage(LoginLogConstant.LOGIN_OUT_SUCCESS_FAIL);
+ this.save(sysLoginLog);
+ }
+
+ @Override
+ public void delete(SysLoginLogRequest sysLoginLogRequest) {
+
+ }
+
+ @Override
+ public void deleteAll() {
+ this.remove(null);
+ }
+
+ @Override
+ public SysLoginLog detail(SysLoginLogRequest sysLoginLogRequest) {
+ return this.querySysLoginLog(sysLoginLogRequest);
+ }
+
+ @Override
+ public PageResult page(SysLoginLogRequest sysLoginLogRequest) {
+ LambdaQueryWrapper wrapper = createWrapper(sysLoginLogRequest);
+ wrapper.orderByDesc(SysLoginLog::getCreateTime);
+ Page page = this.page(PageFactory.defaultPage(), wrapper);
+ return PageResultFactory.createPageResult(page);
+ }
+
+ /**
+ * 获取详细信息
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 10:50
+ */
+ private SysLoginLog querySysLoginLog(SysLoginLogRequest sysLoginLogRequest) {
+ SysLoginLog sysLoginLog = this.getById(sysLoginLogRequest.getLlgId());
+ if (ObjectUtil.isNull(sysLoginLog)) {
+ throw new ServiceException(AppExceptionEnum.APP_NOT_EXIST);
+ }
+ return sysLoginLog;
+ }
+
+ /**
+ * 构建wrapper
+ *
+ * @author chenjinlong
+ * @date 2021/1/13 10:50
+ */
+ private LambdaQueryWrapper createWrapper(SysLoginLogRequest sysLoginLogRequest) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(StrUtil.isNotBlank(sysLoginLogRequest.getLlgName()), SysLoginLog::getLlgName, sysLoginLogRequest.getLlgName());
+ queryWrapper.ge(StrUtil.isNotBlank(sysLoginLogRequest.getBeginTime()), SysLoginLog::getCreateTime, sysLoginLogRequest.getBeginTime());
+ queryWrapper.le(StrUtil.isNotBlank(sysLoginLogRequest.getEndTime()), SysLoginLog::getCreateTime, sysLoginLogRequest.getEndTime());
+ return queryWrapper;
+ }
+
+}
diff --git a/kernel-s-system/system-business-notice/src/main/java/cn/stylefeng/roses/kernel/notice/modular/service/impl/SysNoticeServiceImpl.java b/kernel-s-system/system-business-notice/src/main/java/cn/stylefeng/roses/kernel/notice/modular/service/impl/SysNoticeServiceImpl.java
index 5c130d442..ec5298312 100644
--- a/kernel-s-system/system-business-notice/src/main/java/cn/stylefeng/roses/kernel/notice/modular/service/impl/SysNoticeServiceImpl.java
+++ b/kernel-s-system/system-business-notice/src/main/java/cn/stylefeng/roses/kernel/notice/modular/service/impl/SysNoticeServiceImpl.java
@@ -19,9 +19,9 @@ import cn.stylefeng.roses.kernel.system.pojo.notice.SysNoticeRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
import java.util.List;
/**
@@ -36,15 +36,14 @@ public class SysNoticeServiceImpl extends ServiceImpl1.0.0
+
+
+ cn.stylefeng.roses
+ system-business-login-log
+ 1.0.0
+
+
+