Selaa lähdekoodia

Merge remote-tracking branch 'origin/dev_v3.0.0' into dev_v3.0.0

wangliang 3 vuotta sitten
vanhempi
commit
24e209f76e

+ 5 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -1,17 +1,18 @@
 package com.qmth.distributed.print.api;
 
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.templete.execute.AsyncCourseDataImportService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
+import com.qmth.teachcloud.common.enums.log.LevelEnum;
+import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -125,7 +126,8 @@ public class BasicCourseController {
     @ApiOperation(value = "课程管理-根据查询条件批量启用/禁用")
     @RequestMapping(value = "/enable_by_query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
-    @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+    @OperationLogDetail(detail = "根据查询条件【所属机构id[{{belongOrgId}}],课程名称(模糊查询)[{{courseName}}],创建时间(起始位置)[{{startCreateTime}}]," +
+            "创建时间(终止位置)[{{endCreateTime}}],状态[{{enable}}],启用&禁用操作[{{enableOperate}}]】批量启用/禁用课程",level = LevelEnum.TERTIARY,operationType = OperationTypeEnum.EDIT)
     public Result enableBasicCourseByQuery(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
                                            @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
                                            @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,

+ 8 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachCourseController.java

@@ -4,8 +4,12 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.params.TeachCourseParams;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.TeachCourseService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.log.LevelEnum;
+import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.OperationUnitEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -37,6 +41,7 @@ public class TeachCourseController {
     @ApiOperation(value = "教学课程-查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    @OperationLogDetail(detail = "根据查询条件课程名称[{{courseName}}]模糊查询教学课程,查询第[{{pageNumber}}]页,每页查[{{pageSize}}]个", operationType = OperationTypeEnum.SELECT, operationUnit = OperationUnitEnum.TEACH_COURSE)
     public Result findTeachCoursePage(@ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
                                       @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                       @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
@@ -47,6 +52,7 @@ public class TeachCourseController {
     @ApiOperation(value = "教学课程-创建教学课程")
     @RequestMapping(value = "/create", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    @OperationLogDetail(detail = "创建教学课程,参数[{{teachCourseParams}}]", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.EDIT, operationUnit = OperationUnitEnum.TEACH_COURSE)
     public Result createTeachCourse(@Valid @RequestBody TeachCourseParams teachCourseParams, BindingResult bindingResult) throws IllegalAccessException {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (bindingResult.hasErrors()) {
@@ -59,6 +65,7 @@ public class TeachCourseController {
     @ApiOperation(value = "教学课程-查找基础课程")
     @RequestMapping(value = "/find_basic_course", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    @OperationLogDetail(detail = "用户查找可被创建课程的基础课程信息", operationType = OperationTypeEnum.SELECT)
     public Result findBasicCourse() {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         return ResultUtil.ok(teachCourseService.findBasicCourseByUser(requestUser));
@@ -67,6 +74,7 @@ public class TeachCourseController {
     @ApiOperation(value = "教学课程-批量删除")
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    @OperationLogDetail(detail = "用户根据教学课程id集合[{{idList}}]批量删除教学课程", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.DELETE, operationUnit = OperationUnitEnum.TEACH_COURSE)
     public Result deleteTeachCourse(@ApiParam(value = "选择的要删除的课程id集合", required = true) @RequestParam List<Long> idList) {
         return ResultUtil.ok(teachCourseService.deleteTeachCourseBatch(idList));
     }

+ 44 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/annotation/OperationLogDetail.java

@@ -0,0 +1,44 @@
+package com.qmth.teachcloud.common.annotation;
+
+import com.qmth.teachcloud.common.enums.log.LevelEnum;
+import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.OperationUnitEnum;
+import com.qmth.teachcloud.common.enums.log.SystemEnum;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description: 操作日志注解
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+@Documented
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface OperationLogDetail {
+
+    /**
+     * 日志记录 - 具体操作的内容(默认为空)
+     */
+    String detail() default "";
+
+    /**
+     * 日志记录 - 日志等级(默认为第四级(普通信息))
+     */
+    LevelEnum level() default LevelEnum.QUATERNARY;
+
+    /**
+     * 日志记录 - 操作类型(主要是 'SELECT,EDIT,DELETE',默认为'未知')
+     */
+    OperationTypeEnum operationType() default OperationTypeEnum.UN_KNOW;
+
+    /**
+     * 日志记录 - 被操作对象(主要是表,默认为'未知')
+     */
+    OperationUnitEnum operationUnit() default OperationUnitEnum.UN_KNOW;
+
+    /**
+     * 日志记录 - 被记录日志的系统(默认为'分布式印刷系统')
+     */
+    SystemEnum system() default SystemEnum.DISTRIBUTED_PRINT;
+}

+ 214 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java

@@ -0,0 +1,214 @@
+package com.qmth.teachcloud.common.aspect;
+
+import com.alibaba.fastjson.JSON;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
+import com.qmth.teachcloud.common.bean.dto.LogArgsDto;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicOperationLog;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.service.BasicOperationLogService;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BeanPropertyBindingResult;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ * @Description: 日志操作记录拦截aop
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+@Aspect
+@Component
+public class LogAspect {
+    @Resource
+    private BasicOperationLogService basicOperationLogService;
+
+    private final static Logger log = LoggerFactory.getLogger(LogAspect.class);
+
+    /**
+     * 日志注解切入点
+     */
+    @Pointcut("@annotation(com.qmth.teachcloud.common.annotation.OperationLogDetail)")
+    public void operationLog() {
+
+    }
+
+    /**
+     * 环绕增强,操作日志环绕切入
+     *
+     * @param joinPoint joinPoint
+     * @return return
+     * @throws Throwable Throwable
+     */
+    @Around(value = "operationLog()")
+    public Object aroundOperationLogPoint(ProceedingJoinPoint joinPoint) throws Throwable {
+        Object res = null;
+        long beginTime = System.currentTimeMillis();
+        long endTime = 0;
+        String runStatus = "成功";
+        try {
+            res = joinPoint.proceed();
+            endTime = System.currentTimeMillis();
+            return res;
+        } catch (Exception e) {
+            endTime = System.currentTimeMillis();
+            res = "Exception: " + e.getMessage();
+            runStatus = "失败";
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                return ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                return ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            try {
+                //方法执行完成后增加日志
+                addOperationLog(joinPoint, res, endTime - beginTime,runStatus);
+            } catch (Exception e) {
+                System.out.println("LogAspect 操作失败:" + e.getMessage());
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    /**
+     * 记录日志操作
+     *
+     * @param joinPoint joinPoint
+     * @param res       返回值
+     * @param time      方法执行时间
+     * @param runStatus 方法执行状态
+     */
+    private void addOperationLog(JoinPoint joinPoint, Object res, long time,String runStatus) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        String userName = requestUser.getRealName();
+        HttpServletRequest request = ServletUtil.getRequest();
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        String clazzName = signature.getDeclaringTypeName();
+        String methodName = signature.getName();
+        Object[] args = joinPoint.getArgs();
+        String[] paramsName = signature.getParameterNames();
+
+        BasicOperationLog operationLog = new BasicOperationLog();
+
+        // 方法中的信息
+        operationLog.setId(SystemConstant.getDbUuid());
+        operationLog.setUrl(request.getServletPath());
+        operationLog.setClazzName(clazzName);
+        operationLog.setMethod(methodName);
+        operationLog.setArgs(this.getTranslateArgs(paramsName, args));
+        operationLog.setRunTime(time);
+        operationLog.setRunStatus(runStatus);
+        operationLog.setReturnValue(JSON.toJSONString(res));
+        operationLog.setUserId(requestUser.getId());
+        operationLog.setUserName(userName);
+        operationLog.setCreateTime(new Date().getTime());
+
+        // 注解中的信息
+        OperationLogDetail annotation = signature.getMethod().getAnnotation(OperationLogDetail.class);
+        if (annotation != null) {
+            operationLog.setDetail(getDetail(((MethodSignature) joinPoint.getSignature()).getParameterNames(), joinPoint.getArgs(), annotation));
+            operationLog.setLevel(annotation.level());
+            operationLog.setOperationType(annotation.operationType());
+            operationLog.setOperationUnit(annotation.operationUnit());
+            operationLog.setSystemType(annotation.system());
+        }
+        // 保存操作日志
+        basicOperationLogService.save(operationLog);
+    }
+
+    private String getTranslateArgs(String[] paramsName, Object[] args) {
+        List<LogArgsDto> logArgsDtoList = new ArrayList<>();
+        for (int i = 0; i < args.length; i++) {
+            if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
+                continue;
+            }
+            LogArgsDto logArgsDto = new LogArgsDto();
+            logArgsDto.setArg(args[i]);
+            logArgsDto.setParamName(paramsName[i]);
+            logArgsDtoList.add(logArgsDto);
+        }
+        return JSON.toJSONString(logArgsDtoList);
+    }
+
+    /**
+     * 对当前登录用户和占位符处理
+     *
+     * @param argNames   方法参数名称数组
+     * @param args       方法参数数组
+     * @param annotation 注解信息
+     * @return 返回处理后的描述
+     */
+    private String getDetail(String[] argNames, Object[] args, OperationLogDetail annotation) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+
+        Map<Object, Object> map = new HashMap<>();
+        for (int i = 0; i < argNames.length; i++) {
+            if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
+                continue;
+            }
+            map.put(argNames[i], args[i]);
+        }
+
+        String detail = annotation.detail();
+        try {
+            detail = "'" + requestUser.getRealName() + "'=》" + annotation.detail();
+            for (Map.Entry<Object, Object> entry : map.entrySet()) {
+                Object k = entry.getKey();
+                Object v = entry.getValue();
+                detail = detail.replace("{{" + k + "}}", JSON.toJSONString(v));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return detail;
+    }
+
+    @Before(value = "operationLog()")
+    public void doBeforeAdvice(JoinPoint joinPoint) {
+        System.out.println("进入方法前执行.....");
+
+    }
+
+    /**
+     * 处理完请求,返回内容
+     *
+     * @param ret ret
+     */
+    @AfterReturning(returning = "ret", pointcut = "operationLog()")
+    public void doAfterReturning(Object ret) {
+        System.out.println("方法的返回值 : " + ret);
+    }
+
+    /**
+     * 后置异常通知
+     */
+    @AfterThrowing(value = "operationLog()")
+    public void throwss(JoinPoint jp) {
+        System.out.println("方法异常时执行.....");
+    }
+
+
+    /**
+     * 后置最终通知,final增强,不管是抛出异常或者正常退出都会执行
+     */
+    @After(value = "operationLog()")
+    public void after(JoinPoint jp) {
+        System.out.println("方法最后执行.....");
+    }
+}

+ 32 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/LogArgsDto.java

@@ -0,0 +1,32 @@
+package com.qmth.teachcloud.common.bean.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 日志方法中参数Dto
+ * @Author: CaoZixuan
+ * @Date: 2022-02-15
+ */
+public class LogArgsDto {
+    @ApiModelProperty(value = "参数")
+    private Object arg;
+
+    @ApiModelProperty(value = "参数名称")
+    private String paramName;
+
+    public Object getArg() {
+        return arg;
+    }
+
+    public void setArg(Object arg) {
+        this.arg = arg;
+    }
+
+    public String getParamName() {
+        return paramName;
+    }
+
+    public void setParamName(String paramName) {
+        this.paramName = paramName;
+    }
+}

+ 202 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicOperationLog.java

@@ -0,0 +1,202 @@
+package com.qmth.teachcloud.common.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.log.LevelEnum;
+import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.OperationUnitEnum;
+import com.qmth.teachcloud.common.enums.log.SystemEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 基础日志记录表
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+@ApiModel(value = "BasicOperationLog对象", description = "基础日志记录表")
+public class BasicOperationLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    @ApiModelProperty(value = "日志详情")
+    private String detail;
+
+    @ApiModelProperty(value = "日志等级(PRIMARY(\"一级日志:敏感信息\"),SECONDARY(\"二级日志:重要信息\"),TERTIARY(\"三级日志:次要信息\"),QUATERNARY(\"四级日志:普通信息\"))")
+    private LevelEnum level;
+
+    @ApiModelProperty(value = "操作类型(UN_KNOW(\"未知\"),SELECT(\"查询\"),EDIT(\"新增或更新\"),DELETE(\"删除\"))")
+    private OperationTypeEnum operationType;
+
+    @ApiModelProperty(value = "操作对象(略)")
+    private OperationUnitEnum operationUnit;
+
+    @ApiModelProperty(value = "日志系统类型")
+    private SystemEnum systemType;
+
+    @ApiModelProperty(value = "请求地址url")
+    private String url;
+
+    @ApiModelProperty(value = "类名称")
+    private String clazzName;
+
+    @ApiModelProperty(value = "方法名称")
+    private String method;
+
+    @ApiModelProperty(value = "参数")
+    private String args;
+
+    @ApiModelProperty(value = "方法运行时间")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long runTime;
+
+    @ApiModelProperty(value = "运行状态")
+    private String runStatus;
+
+    @ApiModelProperty(value = "方法返回值")
+    private String returnValue;
+
+    @ApiModelProperty(value = "用户对象id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+
+    @ApiModelProperty(value = "日志记录时间")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long createTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDetail() {
+        return detail;
+    }
+
+    public void setDetail(String detail) {
+        this.detail = detail;
+    }
+
+    public LevelEnum getLevel() {
+        return level;
+    }
+
+    public void setLevel(LevelEnum level) {
+        this.level = level;
+    }
+
+    public OperationTypeEnum getOperationType() {
+        return operationType;
+    }
+
+    public void setOperationType(OperationTypeEnum operationType) {
+        this.operationType = operationType;
+    }
+
+    public OperationUnitEnum getOperationUnit() {
+        return operationUnit;
+    }
+
+    public void setOperationUnit(OperationUnitEnum operationUnit) {
+        this.operationUnit = operationUnit;
+    }
+
+    public SystemEnum getSystemType() {
+        return systemType;
+    }
+
+    public void setSystemType(SystemEnum systemType) {
+        this.systemType = systemType;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public String getMethod() {
+        return method;
+    }
+
+    public void setMethod(String method) {
+        this.method = method;
+    }
+
+    public String getArgs() {
+        return args;
+    }
+
+    public void setArgs(String args) {
+        this.args = args;
+    }
+
+    public Long getRunTime() {
+        return runTime;
+    }
+
+    public void setRunTime(Long runTime) {
+        this.runTime = runTime;
+    }
+
+    public String getRunStatus() {
+        return runStatus;
+    }
+
+    public void setRunStatus(String runStatus) {
+        this.runStatus = runStatus;
+    }
+
+    public String getReturnValue() {
+        return returnValue;
+    }
+
+    public void setReturnValue(String returnValue) {
+        this.returnValue = returnValue;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+}

+ 40 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/LevelEnum.java

@@ -0,0 +1,40 @@
+package com.qmth.teachcloud.common.enums.log;
+
+import java.util.Objects;
+
+/**
+ * @Description: 日志等级枚举类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+public enum LevelEnum {
+    PRIMARY("一级日志:敏感信息"),
+    SECONDARY("二级日志:重要信息"),
+    TERTIARY("三级日志:次要信息"),
+    QUATERNARY("四级日志:普通信息"),
+    ;
+    private final String desc;
+
+    LevelEnum(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param p desc
+     * @return name
+     */
+    public static String convertToName(String p) {
+        for (LevelEnum e : LevelEnum.values()) {
+            if (Objects.equals(p, e.getDesc())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 39 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/OperationTypeEnum.java

@@ -0,0 +1,39 @@
+package com.qmth.teachcloud.common.enums.log;
+
+import java.util.Objects;
+
+/**
+ * @Description: 操作类型枚举
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+public enum OperationTypeEnum {
+    UN_KNOW("未知"),
+    SELECT("查询"),
+    EDIT("新增或更新"),
+    DELETE("删除");
+    private final String desc;
+
+    OperationTypeEnum(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param p desc
+     * @return name
+     */
+    public static String convertToName(String p) {
+        for (OperationTypeEnum e : OperationTypeEnum.values()) {
+            if (Objects.equals(p, e.getDesc())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 50 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/OperationUnitEnum.java

@@ -0,0 +1,50 @@
+package com.qmth.teachcloud.common.enums.log;
+
+import java.util.Objects;
+
+/**
+ * @Description: 被操作对象枚举类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+public enum OperationUnitEnum {
+    UN_KNOW("未知", "", ""),
+    TEACH_COURSE("操作'teach_course'表", "teach_course", "TeachCourse"),
+    ;
+    private final String desc;
+    private final String table;
+    private final String object;
+
+    OperationUnitEnum(String desc, String table, String object) {
+        this.desc = desc;
+        this.table = table;
+        this.object = object;
+    }
+
+    public String getTable() {
+        return table;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getObject() {
+        return object;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param p desc
+     * @return name
+     */
+    public static String convertToName(String p) {
+        for (OperationUnitEnum e : OperationUnitEnum.values()) {
+            if (Objects.equals(p, e.getDesc())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 38 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/SystemEnum.java

@@ -0,0 +1,38 @@
+package com.qmth.teachcloud.common.enums.log;
+
+import java.util.Objects;
+
+/**
+ * @Description: 日志系统枚举
+ * @Author: CaoZixuan
+ * @Date: 2022-02-14
+ */
+public enum SystemEnum {
+    DISTRIBUTED_PRINT("分布式印刷系统日志"),
+    TEACH_CLOUD_REPORT("教研分析系统日志"),
+    ;
+    private final String desc;
+
+    SystemEnum(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param p desc
+     * @return name
+     */
+    public static String convertToName(String p) {
+        for (SystemEnum e : SystemEnum.values()) {
+            if (Objects.equals(p, e.getDesc())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicOperationLogMapper.java

@@ -0,0 +1,12 @@
+package com.qmth.teachcloud.common.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.teachcloud.common.entity.BasicOperationLog;
+
+/**
+ * @Description: 基础操作日志记录mapper
+ * @Author: CaoZixuan
+ * @Date: 2022-02-15
+ */
+public interface BasicOperationLogMapper extends BaseMapper<BasicOperationLog> {
+}

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicOperationLogService.java

@@ -0,0 +1,12 @@
+package com.qmth.teachcloud.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.entity.BasicOperationLog;
+
+/**
+ * @Description: 操作日志记录服务类
+ * @Author: CaoZixuan
+ * @Date: 2022-2-15
+ */
+public interface BasicOperationLogService extends IService<BasicOperationLog> {
+}

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicOperationLogServiceImpl.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.entity.BasicOperationLog;
+import com.qmth.teachcloud.common.mapper.BasicOperationLogMapper;
+import com.qmth.teachcloud.common.service.BasicOperationLogService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 基础操作日志服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-15
+ */
+@Service
+public class BasicOperationLogServiceImpl extends ServiceImpl<BasicOperationLogMapper, BasicOperationLog> implements BasicOperationLogService {
+}

+ 5 - 0
teachcloud-common/src/main/resources/mapper/BasicOperationLogMapper.xml

@@ -0,0 +1,5 @@
+<?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="com.qmth.teachcloud.common.mapper.BasicOperationLogMapper">
+
+</mapper>