当前位置:网站首页>实现自动记录日志
实现自动记录日志
2022-07-17 17:35:00 【程序员柒七】
我使用的是springboot+mybatis-plus实现自动记录日志
导入的xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zwl</groupId>
<artifactId>materiallog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>materiallog</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<!-- <parent>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-parent</artifactId>-->
<!-- <version>2.7.0</version>-->
<!-- <relativePath/>-->
<!-- </parent>-->
<dependencies>
<!--aop-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<!--拦截器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.zwl.MateriallogApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
yml配置
server:
port: 8888
file:
path: D:/Development/Excel
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver #我用的是mysql5的
url: jdbc:mysql://localhost:3306/books?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8
username: root
password: root
mybatis-plus:
# mybatis相关配置
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-aliases-package: com.zwl.entity
方法一:Aop实现
数据库表
日志表
CREATE TABLE `device_log` (
`id` int(11) NOT NULL COMMENT 'id',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人',
`uid` int(11) NULL DEFAULT NULL COMMENT '用户id',
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作类型',
`error` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '失败原因',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
用户表
CREATE TABLE `user` (
`id` int(255) NOT NULL AUTO_INCREMENT COMMENT '主键Id,同时可用于工牌编号',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
`phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '联系电话',
`state` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否已禁用',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2037460995 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
创建实体类
DeviceLog
import com.baomidou.mybatisplus.annotation.*;
import com.zwl.emuns.OperationType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "device_log", autoResultMap = true)
public class DeviceLog implements Serializable {
private static final long serialVersionUID = 1L;
/** * id */
private Integer id;
/** * 操作人 */
private OperationType name;
/** * 用户id */
private Integer uid;
/** * 操作类型 */
private String type;
/** * 失败原因 */
private String error;
public DeviceLog() {
}
public DeviceLog(Integer id, String type) {
this.id = id;
this.type = type;
}
}
user
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User implements Serializable {
private static final long serialVersionUID = 5846464524840272868L;
/** * 主键id */
private Integer id;
/** * 姓名 */
private String name;
/** * 密码 */
private String password;
/** * 手机号 */
private String phone;
/** * 状态 */
private String state;
}
创建自定义注解
import com.zwl.emuns.OperationType;
import java.lang.annotation.*;
@Target({
ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {
String module();
/** 操作类型 * @return*/
OperationType type();
}
创建注解返回层
public enum OperationType {
ADD,
UPDATE,
DELETE,
Upload,
Download,
selectAll;
public String getType() {
if (this.equals(ADD)) {
return "ADD";
}
if (this.equals(UPDATE)) {
return "UPDATE";
}
if (this.equals(DELETE)) {
return "DELETE";
}
if (this.equals(Upload)) {
return "Upload";
}
if (this.equals(Download)) {
return "Download";
}if (this.equals(selectAll)) {
return "selectAll";
}
return null;
};
}
public class LogsConstant {
/** * 用户管理 */
public static final String BASICS_CURRENCY_USER = "用户管理-";
public static final String USER_ADD = BASICS_CURRENCY_ROLE + "新增角色";
public static final String USER_UPDATE = BASICS_CURRENCY_ROLE + "编辑角色";
public static final String USER_DELETE = BASICS_CURRENCY_ROLE + "删除角色";
public static final String USER_SELECT = BASICS_CURRENCY_ROLE + "查看角色详情";
}
创建Aop切面
import com.zwl.annotation.LogAnnotation;
import com.zwl.entity.DeviceLog;
import com.zwl.sevice.DeviceLogService;
import lombok.AllArgsConstructor;
import lombok.Singular;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.security.SecurityUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
@Aspect
@Component
@Slf4j
@AllArgsConstructor
public class LogAspect {
private DeviceLogService deviceLogService;
/** * 定义切入点 */
@Pointcut("@annotation(com.zwl.annotation.LogAnnotation)")
public void pt(){
}
/** * 环绕通知 */
@Around("pt()")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable{
/** * 定义时间 */
Long beginTime =System.currentTimeMillis();
MethodSignature signature= (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
LogAnnotation annotation = method.getAnnotation(LogAnnotation.class);
DeviceLog deviceLog = new DeviceLog();
deviceLog.setType(annotation.module());
deviceLog.setName(annotation.type());
try {
return joinPoint.proceed();
} catch (Exception e) {
log.error(e.getMessage());
deviceLog.setError(e.getMessage());
throw e;
} finally {
deviceLogService.addLog(deviceLog);
}
}
}
Controller层
UserController
import com.zwl.entity.User;
import com.zwl.response.Result;
import com.zwl.sevice.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//采用注解方式
@RequestMapping("/add")
@LogAnnotation(module = LogsConstant.USER_ADD,type = OperationType.ADD)
public Result addTest(User user){
return userService.addUser(user);
}
@RequestMapping("/update")
@LogAnnotation(module = LogsConstant.USER_UPDATE,type = OperationType.UPDATE)
public Result updateTest(User user){
return userService.updateUser(user);
}
@RequestMapping("/del")
@LogAnnotation(module = LogsConstant.USER_DELETE,type = OperationType.DELETE)
public Result deleteTest(Integer id){
return userService.deleteUser(id);
}
}
DeviceLogController
import com.zwl.response.Result;
import com.zwl.sevice.DeviceLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/log")
public class DeviceLogController {
@Autowired
private DeviceLogService deviceLogService;
@RequestMapping("/selectAll")
public Result selectAll(){
return deviceLogService.selectAll();
}
}
返回层
ResultCode
package com.zwl.emuns;
/** * @author zhouleibin * @Type com.sunyard.am.result * @Desc * @date 2021/6/30 8:19 */
public enum ResultCode {
//2xx-成功
SUCCESS(200, "操作成功"),
private Integer code;
private String msg;
ResultCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public static ResultCode getEnum(Integer code) {
for (ResultCode retEnum : ResultCode.values()) {
if (retEnum.getCode().equals(code)) {
return retEnum;
}
}
return null;
}
public String getMsg() {
return msg;
}
public Integer getCode() {
return code;
}
}
Result
package com.zwl.response;
import com.zwl.emuns.ResultCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/** * @author zhouleibin * @Type com.sunyard.am.result * @Desc * @date 2021/6/30 8:17 */
public class Result<T> implements Serializable {
private Integer code;
private String msg;
private T data;
/***/
public static <T> Result<T> create() {
Result<T> result = new Result<>();
result.setData(null);
result.setMsg(ResultCode.SUCCESS.getMsg());
result.setCode(ResultCode.SUCCESS.getCode());
return result;
}
/***/
public static <T> Result<T> create(T value) {
Result<T> result = new Result<>();
result.setData(value);
result.setMsg(ResultCode.SUCCESS.getMsg());
result.setCode(ResultCode.SUCCESS.getCode());
return result;
}
/***/
public static <T> Result<T> error(ResultCode resultCode) {
Result<T> result = new Result<>();
result.setData(null);
result.setMsg(resultCode.getMsg());
result.setCode(resultCode.getCode());
return result;
}
/***/
public static <T> Result<T> error(String message, ResultCode resultCode) {
Result<T> result = new Result<>();
result.setData(null);
if (null == message || 0 == message.length()) {
result.setMsg(resultCode.getMsg());
} else {
result.setMsg(message);
}
result.setCode(resultCode.getCode());
return result;
}
/** * 创建自定义的回传信息 * * @param code 回执代号 * @param msg 回执信息 * @param <T> 数据类型 * @return 实例 */
public static <T> Result<T> error(String msg, Integer code) {
Result<T> result = new Result<>();
result.setData(null);
result.setMsg(msg);
result.setCode(code);
return result;
}
/***/
public boolean isSucc() {
return ResultCode.SUCCESS.getCode().equals(this.code);
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
service层
DeviceLogService:
import com.zwl.entity.DeviceLog;
public interface DeviceLogService {
void addLog(DeviceLog deviceLog);
void selectAll();
}
userService:
import com.zwl.entity.User;
public interface UserService {
void addUser(User user);
void updateUser(User user);
void deleteUser(Integer i);
}
serviceImpl层
DeviceLogServiceImpl
import com.zwl.response.Result;
import com.zwl.sevice.DeviceLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** * Revision history * ------------------------------------------------------------------------- * * Date Author Note * ------------------------------------------------------------------------- * creat */
@RestController
@RequestMapping("/log")
public class DeviceLogController {
@Autowired
private DeviceLogService deviceLogService;
@RequestMapping("/selectAll")
public Result selectAll(){
return deviceLogService.selectAll();
}
}
UserServiceImpl
package com.zwl.sevice.Impl;
import com.zwl.entity.DeviceLog;
import com.zwl.entity.User;
import com.zwl.mapper.UserMapper;
import com.zwl.response.Result;
import com.zwl.sevice.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Override
@Transactional(rollbackFor = Exception.class)
public Result addUser(User user) {
userMapper.insert(user);
DeviceLog deviceLog = new DeviceLog( null, "新增用户");
applicationEventPublisher.publishEvent(deviceLog);
return Result.create();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result updateUser(User user) {
userMapper.updateById(user);
DeviceLog deviceLog = new DeviceLog(null, "编辑用户");
applicationEventPublisher.publishEvent(deviceLog);
return Result.create();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result deleteUser(Integer i) {
userMapper.deleteById(i);
DeviceLog deviceLog = new DeviceLog(null, "删除用户");
applicationEventPublisher.publishEvent(deviceLog);
return Result.create();
}
}
Mapper层
DeviceLogMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zwl.entity.DeviceLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceLogMapper extends BaseMapper<DeviceLog> {
}
UserMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
方法二:拦截器实现
数据库表
日志表
CREATE TABLE `device_log` (
`id` int(11) NOT NULL COMMENT 'id',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人',
`uid` int(11) NULL DEFAULT NULL COMMENT '用户id',
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作类型',
`error` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '失败原因',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
用户表
CREATE TABLE `user` (
`id` int(255) NOT NULL AUTO_INCREMENT COMMENT '主键Id,同时可用于工牌编号',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
`phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '联系电话',
`state` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否已禁用',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2037460995 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
创建实体类
DeviceLog
import com.baomidou.mybatisplus.annotation.*;
import com.zwl.emuns.OperationType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "device_log", autoResultMap = true)
public class DeviceLog implements Serializable {
private static final long serialVersionUID = 1L;
/** * id */
private Integer id;
/** * 操作人 */
private String name;
/** * 用户id */
private Integer uid;
/** * 操作类型 */
private String type;
/** * 失败原因 */
private String error;
}
user
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User implements Serializable {
private static final long serialVersionUID = 5846464524840272868L;
/** * 主键id */
private Integer id;
/** * 姓名 */
private String name;
/** * 密码 */
private String password;
/** * 手机号 */
private String phone;
/** * 状态 */
private String state;
}
Controller层
UserController
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zwl.emuns.ResponseCode;
import com.zwl.entity.DeviceLog;
import com.zwl.entity.User;
import com.zwl.response.Result;
import com.zwl.sevice.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.security.KeyStore;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//采用注解方式
@RequestMapping("/add")
public Result addTest(User user){
userService.addUser(user);
return new Result(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), "用户新增成功");
}
@RequestMapping("/update")
public Result updateTest(User user){
userService.updateUser(user);
return new Result(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), "用户编辑成功");
}
@RequestMapping("/del")
public Result deleteTest(Integer id){
userService.deleteUser(id);
return new Result(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), "用户删除成功");
}
}
DeviceLogController
import com.zwl.annotation.LogAnnotation;
import com.zwl.constant.LogsConstant;
import com.zwl.emuns.OperationType;
import com.zwl.emuns.ResponseCode;
import com.zwl.entity.Account;
import com.zwl.response.Result;
import com.zwl.sevice.DeviceLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/log")
public class DeviceLogController {
@Autowired
private DeviceLogService deviceLogService;
@RequestMapping("/selectAll")
@LogAnnotation(module = LogsConstant.Log_selectAll,type = OperationType.selectAll)
public Result selectAll(){
deviceLogService.selectAll();
return new Result(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), "日志获取成功");
}
}
返回层
ResultCode
package com.zwl.emuns;
/** * @author zhouleibin * @Type com.sunyard.am.result * @Desc * @date 2021/6/30 8:19 */
public enum ResultCode {
//2xx-成功
SUCCESS(200, "操作成功"),
private Integer code;
private String msg;
ResultCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public static ResultCode getEnum(Integer code) {
for (ResultCode retEnum : ResultCode.values()) {
if (retEnum.getCode().equals(code)) {
return retEnum;
}
}
return null;
}
public String getMsg() {
return msg;
}
public Integer getCode() {
return code;
}
}
Result
package com.zwl.response;
import com.zwl.emuns.ResultCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/** * @author zhouleibin * @Type com.sunyard.am.result * @Desc * @date 2021/6/30 8:17 */
public class Result<T> implements Serializable {
private Integer code;
private String msg;
private T data;
/***/
public static <T> Result<T> create() {
Result<T> result = new Result<>();
result.setData(null);
result.setMsg(ResultCode.SUCCESS.getMsg());
result.setCode(ResultCode.SUCCESS.getCode());
return result;
}
/***/
public static <T> Result<T> create(T value) {
Result<T> result = new Result<>();
result.setData(value);
result.setMsg(ResultCode.SUCCESS.getMsg());
result.setCode(ResultCode.SUCCESS.getCode());
return result;
}
/***/
public static <T> Result<T> error(ResultCode resultCode) {
Result<T> result = new Result<>();
result.setData(null);
result.setMsg(resultCode.getMsg());
result.setCode(resultCode.getCode());
return result;
}
/***/
public static <T> Result<T> error(String message, ResultCode resultCode) {
Result<T> result = new Result<>();
result.setData(null);
if (null == message || 0 == message.length()) {
result.setMsg(resultCode.getMsg());
} else {
result.setMsg(message);
}
result.setCode(resultCode.getCode());
return result;
}
/** * 创建自定义的回传信息 * * @param code 回执代号 * @param msg 回执信息 * @param <T> 数据类型 * @return 实例 */
public static <T> Result<T> error(String msg, Integer code) {
Result<T> result = new Result<>();
result.setData(null);
result.setMsg(msg);
result.setCode(code);
return result;
}
/***/
public boolean isSucc() {
return ResultCode.SUCCESS.getCode().equals(this.code);
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
拦截器
@Component
public class DeviceLogEventListener {
@Autowired
private DeviceLogService deviceLogService;
/** * 日志监听 * @param deviceLog */
@Async
@EventListener(value = DeviceLog.class)
public void saveLog(DeviceLog deviceLog) {
deviceLogService.addLog(deviceLog);
}
}
service层
DeviceLogService:
import com.zwl.entity.DeviceLog;
public interface DeviceLogService {
void addLog(DeviceLog deviceLog);
void selectAll();
}
userService:
import com.zwl.entity.User;
public interface UserService {
void addUser(User user);
void updateUser(User user);
void deleteUser(Integer i);
}
serviceImpl层
DeviceLogServiceImpl
import com.zwl.response.Result;
import com.zwl.sevice.DeviceLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** * Revision history * ------------------------------------------------------------------------- * * Date Author Note * ------------------------------------------------------------------------- * creat */
@RestController
@RequestMapping("/log")
public class DeviceLogController {
@Autowired
private DeviceLogService deviceLogService;
@RequestMapping("/selectAll")
public Result selectAll(){
return deviceLogService.selectAll();
}
}
UserServiceImpl
package com.zwl.sevice.Impl;
import com.zwl.entity.DeviceLog;
import com.zwl.entity.User;
import com.zwl.mapper.UserMapper;
import com.zwl.response.Result;
import com.zwl.sevice.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Override
@Transactional(rollbackFor = Exception.class)
public Result addUser(User user) {
userMapper.insert(user);
DeviceLog deviceLog = new DeviceLog( null, "新增用户");
applicationEventPublisher.publishEvent(deviceLog);
return Result.create();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result updateUser(User user) {
userMapper.updateById(user);
DeviceLog deviceLog = new DeviceLog(null, "编辑用户");
applicationEventPublisher.publishEvent(deviceLog);
return Result.create();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result deleteUser(Integer i) {
userMapper.deleteById(i);
DeviceLog deviceLog = new DeviceLog(null, "删除用户");
applicationEventPublisher.publishEvent(deviceLog);
return Result.create();
}
}
Mapper层
DeviceLogMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zwl.entity.DeviceLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceLogMapper extends BaseMapper<DeviceLog> {
}
UserMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
边栏推荐
- Metal organic framework / nitrogen carbide nano sheet (uio-66/hocn) composite | mil-101 loaded Au Pd alloy nanoparticles | chemical reagent MOF customization
- Metal organic framework material / polymer composite zif-8/p (TDA co HDA) | zinc oxide [email protected] (FE) composite nan
- 最懂你的服装设计师是AI?让用户 “凭心意” 生成数字服装#Adidas OZWORLD
- Equivalent domain name
- [dynamic planning]dp27 jumping game (II) - medium
- Li Kou 413 division of equal difference sequence dynamic programming
- 【Pygame 学习笔记】5.rect对象的碰撞检测
- Knowledge sorting of MySQL
- LeetCode 0565. Array nesting: convert to graph + modify in place の optimization
- AE如何制作星云粒子特效
猜你喜欢

MOF customized product | n-k2ti4o9/g-c3n4/uio-66 ternary composite | paper based au-aginse2-zif-8 Nanocomposite

Ultrasonic sensor (ch101 & ch201) - I

Ultrasonic sensor (ch101 & ch201) - Ⅱ

通货收缩的市场何时反转?我们该如何操作?2020-03-13

基于STM32设计的云端健康管理系统(采用阿里云物联网平台)

Metal organic framework / nitrogen carbide nano sheet (uio-66/hocn) composite | mil-101 loaded Au Pd alloy nanoparticles | chemical reagent MOF customization

Interview difficulties: difficulties in implementing distributed session, this is enough!

Amino metal organic framework material Fe MOF, fe-mil-88nh2 | Zr based metal organic framework catalyst (pt-uio-66) | Qiyue biology

XML file parsing

Qiyue supplies cumof nanocrystals loaded with methylene blue | femof nanosheets grown in situ on foam nickel | oxide nanowires /zif MOFs sugar gourd like Composites
随机推荐
XML文件解析
松下A6伺服驱动器外部绝对值光栅尺全闭环参数设置
Uio-66 | fe3o4/cu3 (BTC) 2 metal organic framework (MOF) nanocomposites supported on silver nanoparticles | nagdf4:yb, er upconversion nanoparticles @zif-8
[C language programming 7] BTB model
深度梳理:机器学习建模调参方法总结
[try to hack] ARP and ARP deception
Uio-66 - (COOH) 2 modified polyamide nanofiltration membrane | zif-8/pvp composite nanofiber membrane | uio-66-nh2 modified polyamide nanofiltration membrane
JS operation string string string
Nombre minimal d'échanges
Using the case statement will produce a latch condition
ASP. Net collaborative OA office service management platform source code
How can MySQL delete data tables and associated data tables
Logical operator 1 (Gretel software - Jiuye training)
Is it safe for Everbright futures to open an account online? Are there any account opening guidelines?
MOF customized materials | ultra thin MOF nanobelts | magnetic Fe3O4 @cd-mof nanocomposites | zif-8/ graphene composite nanoparticles
[pyGame learning notes] 7 event
二叉树2—对称性递归问题
面试难题:分布式 Session 实现难点,这篇就够!
Stable super odds, 9 years old mixin | 2022 Jincang innovative product launch was successfully held
CMOS switch learning (I)