Jelajahi Sumber

日志管理-对save方法对象id处理 区分是新增还是更新

caozixuan 2 tahun lalu
induk
melakukan
8249c8ed71

+ 7 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCardRuleController.java

@@ -6,8 +6,10 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.CardRuleDto;
 import com.qmth.distributed.print.business.entity.BasicCardRule;
 import com.qmth.distributed.print.business.service.BasicCardRuleService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.Api;
@@ -50,6 +52,7 @@ public class BasicCardRuleController {
      */
     @ApiOperation(value = "查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result list(@RequestParam(value = "enable", required = false) Boolean enable,
                        @RequestParam(value = "name", required = false) String name,
                        @RequestParam(value = "createStartTime", required = false) Long createStartTime,
@@ -68,6 +71,7 @@ public class BasicCardRuleController {
      */
     @ApiOperation(value = "模糊查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result list(@RequestParam(value = "param", required = false) String param) {
         List<BasicCardRule> cardRules = basicCardRuleService.list(param);
         return ResultUtil.ok(cardRules);
@@ -81,6 +85,7 @@ public class BasicCardRuleController {
      */
     @ApiOperation(value = "查询单个")
     @RequestMapping(value = "/get_one", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result getOne(@RequestParam(value = "id", required = false) Long id) {
         if(id == null){
             throw ExceptionResultEnum.ERROR.exception("");
@@ -97,6 +102,7 @@ public class BasicCardRuleController {
      */
     @ApiOperation(value = "新增/修改")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
     public Result save(@RequestBody BasicCardRule cardRule) {
         boolean isSuccess = basicCardRuleService.saveCardRule(cardRule);
         return ResultUtil.ok(isSuccess);
@@ -110,6 +116,7 @@ public class BasicCardRuleController {
      */
     @ApiOperation(value = "删除")
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result enable(@RequestBody BasicCardRule cardRule) {
         boolean isSuccess = basicCardRuleService.enable(cardRule);
         return ResultUtil.ok(isSuccess);

+ 4 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java

@@ -61,6 +61,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级基本信息管理-新增/编辑")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
     public Result saveBasicClazz(@Valid @RequestBody BasicClazzParams basicClazzParams, BindingResult bindingResult) throws IllegalAccessException {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
@@ -72,6 +73,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级基本信息管理-批量删除(逻辑)")
     @RequestMapping(value = "/delete_batch", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result deleteBasicClazz(@ApiParam(value = "选择的要删除的班级id集合", required = true) @RequestParam List<String> idList) {
         return ResultUtil.ok(basicClazzService.removeBasicClazzBatch(idList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList())));
     }
@@ -79,6 +81,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级基本信息管理-批量导入(异步)")
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.IMPORT)
     public Result basicClazzImportAsync(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.CLAZZ_IMPORT);
@@ -92,6 +95,7 @@ public class BasicClazzController {
     @ApiOperation(value = "班级数据源查询")
     @RequestMapping(value = "/datasource", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result findBasicClazzList(@ApiParam(value = "校区主键") @RequestParam(required = false) String campusId) {
         return ResultUtil.ok(basicClazzService.findClazzDatasource(SystemConstant.convertIdToLong(campusId)));
     }

+ 14 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/annotation/EditKey.java

@@ -0,0 +1,14 @@
+package com.qmth.teachcloud.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description: 编辑 新增和更新的主键
+ * @Author: CaoZixuan
+ * @Date: 2022-11-30
+ */
+@Documented
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EditKey {
+}

+ 33 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.aspect;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.annotation.EditKey;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.dto.LogArgsDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -30,6 +31,7 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Field;
 import java.util.*;
 
 /**
@@ -102,7 +104,7 @@ public class LogAspect {
      * @param time      方法执行时间
      * @param runStatus 方法执行状态
      */
-    private void addOperationLog(JoinPoint joinPoint, Object res, long time, String runStatus) {
+    private void addOperationLog(JoinPoint joinPoint, Object res, long time, String runStatus) throws IllegalAccessException {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         String userName = requestUser.getRealName();
         HttpServletRequest request = ServletUtil.getRequest();
@@ -140,7 +142,13 @@ public class LogAspect {
             }
             operationLog.setLevel(annotation.level());
             CustomizedOperationTypeEnum customizedOperationType = annotation.customizedOperationType();
+            if (CustomizedOperationTypeEnum.EDIT.equals(customizedOperationType)){
+                customizedOperationType = this.getAddOrUpdateByParam(args);
+            }
+
             operationLog.setCustomizedOperationType(customizedOperationType);
+
+
             OperationTypeEnum operationType = annotation.operationType();
             if (OperationTypeEnum.UN_KNOW.equals(operationType)) {
                 operationType = customizedOperationType.getOperationType();
@@ -167,6 +175,30 @@ public class LogAspect {
         return JSON.toJSONString(logArgsDtoList);
     }
 
+    private CustomizedOperationTypeEnum getAddOrUpdateByParam(Object[] args) throws IllegalAccessException {
+        for (Object arg : args) {
+            if (Objects.nonNull(arg) && (arg instanceof HttpServletRequest || arg instanceof HttpServletResponse || arg instanceof MultipartFile || arg instanceof BeanPropertyBindingResult)) {
+                continue;
+            }
+            Class<?> clazz = arg.getClass();
+            Field[] fields = clazz.getDeclaredFields();
+            for (Field field : fields) {
+                EditKey editKey = field.getAnnotation(EditKey.class);
+                if (editKey != null) {
+                    // 捕捉到编辑对象的id
+                    field.setAccessible(true);
+                    Object x = field.get(arg);
+                    if (Objects.nonNull(x)) {
+                        return CustomizedOperationTypeEnum.UPDATE;
+                    } else {
+                        return CustomizedOperationTypeEnum.ADD;
+                    }
+                }
+            }
+        }
+        return CustomizedOperationTypeEnum.EDIT;
+    }
+
     /**
      * 对当前登录用户和占位符处理
      *

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicClazzParams.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.bean.params;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.annotation.DBVerify;
+import com.qmth.teachcloud.common.annotation.EditKey;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
@@ -19,6 +20,7 @@ public class BasicClazzParams {
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "班级id(修改时必填)")
     @DBVerify(value = "班级id")
+    @EditKey
     private Long id;
 
     @JsonSerialize(using = ToStringSerializer.class)

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/log/CustomizedOperationTypeEnum.java

@@ -8,6 +8,7 @@ package com.qmth.teachcloud.common.enums.log;
 public enum CustomizedOperationTypeEnum {
     LOGIN("用户登录", OperationTypeEnum.UN_KNOW),
     LOGOUT("用户登出", OperationTypeEnum.UN_KNOW),
+    EDIT("编辑",OperationTypeEnum.EDIT),
     ADD("新增", OperationTypeEnum.EDIT),
     DELETE("删除", OperationTypeEnum.DELETE),
     UPDATE("修改", OperationTypeEnum.EDIT),

+ 0 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java

@@ -77,7 +77,6 @@ public interface SysPrivilegeService extends IService<SysPrivilege> {
      * 构建权限url的目录
      *
      * @param privilegeParentId 权限父id eg。 101
-     * @param path              当前路径
      * @return eg。考试中心->印刷管理->印刷计划管理
      */
     String findPrivilegeUrlCatalog(Long privilegeParentId);