mrbird преди 6 години
родител
ревизия
bfce970b98
променени са 19 файла, в които са добавени 359 реда и са изтрити 436 реда
  1. 17 0
      febs-common/src/main/java/cc/mrbird/febs/common/annotation/ControllerEndpoint.java
  2. 5 0
      febs-common/src/main/java/cc/mrbird/febs/common/entity/FebsConstant.java
  3. 12 0
      febs-common/src/main/java/cc/mrbird/febs/common/utils/FebsUtil.java
  4. 36 0
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/AspectSupport.java
  5. 57 0
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/ControllerEndpointAspect.java
  6. 0 61
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/LogAspect.java
  7. 15 40
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/DeptController.java
  8. 35 43
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/EximportController.java
  9. 5 11
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/GeneratorConfigController.java
  10. 29 36
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/GeneratorController.java
  11. 9 18
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/LogController.java
  12. 9 22
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/LoginLogController.java
  13. 15 40
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/MenuController.java
  14. 16 41
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/RoleController.java
  15. 27 70
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java
  16. 14 9
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/ILogService.java
  17. 2 2
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/IMenuService.java
  18. 2 2
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/IRoleService.java
  19. 54 41
      febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/LogServiceImpl.java

+ 17 - 0
febs-common/src/main/java/cc/mrbird/febs/common/annotation/ControllerEndpoint.java

@@ -0,0 +1,17 @@
+package cc.mrbird.febs.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author MrBird
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ControllerEndpoint {
+
+    String operation() default "";
+    String exceptionMessage() default "FEBS系统内部异常";
+}

+ 5 - 0
febs-common/src/main/java/cc/mrbird/febs/common/entity/FebsConstant.java

@@ -42,4 +42,9 @@ public class FebsConstant {
      */
     public static final String CODE_PREFIX = "febs.captcha.";
 
+    /**
+     * 异步线程池名称
+     */
+    public static final String ASYNC_POOL = "febsAsyncThreadPool";
+
 }

+ 12 - 0
febs-common/src/main/java/cc/mrbird/febs/common/utils/FebsUtil.java

@@ -111,4 +111,16 @@ public class FebsUtil {
         data.put("total", pageInfo.getTotal());
         return data;
     }
+
+    /**
+     * 判断是否包含中文
+     *
+     * @param value 内容
+     * @return 结果
+     */
+    public static boolean containChinese(String value) {
+        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
+        Matcher m = p.matcher(value);
+        return m.find();
+    }
 }

+ 36 - 0
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/AspectSupport.java

@@ -0,0 +1,36 @@
+package cc.mrbird.febs.server.system.aspect;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.reflect.MethodSignature;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author MrBird
+ */
+public abstract class AspectSupport {
+
+    Method resolveMethod(ProceedingJoinPoint point) {
+        MethodSignature signature = (MethodSignature)point.getSignature();
+        Class<?> targetClass = point.getTarget().getClass();
+
+        Method method = getDeclaredMethod(targetClass, signature.getName(),
+                signature.getMethod().getParameterTypes());
+        if (method == null) {
+            throw new IllegalStateException("无法解析目标方法: " + signature.getMethod().getName());
+        }
+        return method;
+    }
+
+    private Method getDeclaredMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
+        try {
+            return clazz.getDeclaredMethod(name, parameterTypes);
+        } catch (NoSuchMethodException e) {
+            Class<?> superClass = clazz.getSuperclass();
+            if (superClass != null) {
+                return getDeclaredMethod(superClass, name, parameterTypes);
+            }
+        }
+        return null;
+    }
+}

+ 57 - 0
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/ControllerEndpointAspect.java

@@ -0,0 +1,57 @@
+package cc.mrbird.febs.server.system.aspect;
+
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.FebsUtil;
+import cc.mrbird.febs.common.utils.HttpContextUtil;
+import cc.mrbird.febs.server.system.service.ILogService;
+import org.apache.commons.lang3.StringUtils;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+/**
+ * @author MrBird
+ */
+@Aspect
+@Component
+public class ControllerEndpointAspect extends AspectSupport {
+
+    @Autowired
+    private ILogService logService;
+
+    @Pointcut("@annotation(cc.mrbird.febs.common.annotation.ControllerEndpoint)")
+    public void pointcut() {
+    }
+
+    @Around("pointcut()")
+    public Object around(ProceedingJoinPoint point) throws FebsException {
+        Object result;
+        Method targetMethod = resolveMethod(point);
+        ControllerEndpoint annotation = targetMethod.getAnnotation(ControllerEndpoint.class);
+        String operation = annotation.operation();
+        long start = System.currentTimeMillis();
+        try {
+            result = point.proceed();
+            if (StringUtils.isNotBlank(operation)) {
+                HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
+                logService.saveLog(point, targetMethod, request, operation, start);
+            }
+            return result;
+        } catch (Throwable throwable) {
+            String exceptionMessage = annotation.exceptionMessage();
+            String message = throwable.getMessage();
+            String error = FebsUtil.containChinese(message) ? exceptionMessage + "," + message : exceptionMessage;
+            throw new FebsException(error);
+        }
+    }
+}
+
+
+

+ 0 - 61
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/LogAspect.java

@@ -1,61 +0,0 @@
-package cc.mrbird.febs.server.system.aspect;
-
-import cc.mrbird.febs.common.entity.system.Log;
-import cc.mrbird.febs.common.utils.HttpContextUtil;
-import cc.mrbird.febs.common.utils.IPUtil;
-import cc.mrbird.febs.server.system.service.ILogService;
-import cc.mrbird.febs.server.system.service.IUserService;
-import lombok.extern.slf4j.Slf4j;
-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.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * AOP 记录用户操作日志
- *
- * @author MrBird
- */
-@Slf4j
-@Aspect
-@Component
-public class LogAspect {
-
-    @Autowired
-    private ILogService logService;
-    @Autowired
-    private IUserService userService;
-
-    @Pointcut("@annotation(cc.mrbird.febs.common.annotation.Log)")
-    public void pointcut() {
-        // do nothing
-    }
-
-    @Around("pointcut()")
-    public Object around(ProceedingJoinPoint point) throws Throwable {
-        Object result;
-        long beginTime = System.currentTimeMillis();
-        // 执行方法
-        result = point.proceed();
-        HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
-        // 设置 IP地址
-        String ip = IPUtil.getIpAddr(request);
-        // 执行时长(毫秒)
-        long time = System.currentTimeMillis() - beginTime;
-        // 保存日志
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        String username = (String) authentication.getPrincipal();
-        Log log = new Log();
-        log.setUsername(username);
-        log.setIp(ip);
-        log.setTime(time);
-        logService.saveLog(point, log);
-        return result;
-    }
-}

+ 15 - 40
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/DeptController.java

@@ -1,10 +1,9 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Dept;
-import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.server.system.service.IDeptService;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.wuwenze.poi.ExcelKit;
@@ -35,57 +34,33 @@ public class DeptController {
         return new FebsResponse().data(depts);
     }
 
-    @Log("新增部门")
     @PostMapping
     @PreAuthorize("hasAnyAuthority('dept:add')")
-    public void addDept(@Valid Dept dept) throws FebsException {
-        try {
-            this.deptService.createDept(dept);
-        } catch (Exception e) {
-            String message = "新增部门失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "新增部门", exceptionMessage = "新增部门失败")
+    public void addDept(@Valid Dept dept) {
+        this.deptService.createDept(dept);
     }
 
-    @Log("删除部门")
     @DeleteMapping("/{deptIds}")
     @PreAuthorize("hasAnyAuthority('dept:delete')")
-    public void deleteDepts(@NotBlank(message = "{required}") @PathVariable String deptIds) throws FebsException {
-        try {
-            String[] ids = deptIds.split(StringPool.COMMA);
-            this.deptService.deleteDepts(ids);
-        } catch (Exception e) {
-            String message = "删除部门失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "删除部门", exceptionMessage = "删除部门失败")
+    public void deleteDepts(@NotBlank(message = "{required}") @PathVariable String deptIds) {
+        String[] ids = deptIds.split(StringPool.COMMA);
+        this.deptService.deleteDepts(ids);
     }
 
-    @Log("修改部门")
     @PutMapping
     @PreAuthorize("hasAnyAuthority('dept:update')")
-    public void updateDept(@Valid Dept dept) throws FebsException {
-        try {
-            this.deptService.updateDept(dept);
-        } catch (Exception e) {
-            String message = "修改部门失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "修改部门", exceptionMessage = "修改部门失败")
+    public void updateDept(@Valid Dept dept) {
+        this.deptService.updateDept(dept);
     }
 
-    @Log("导出部门数据")
     @PostMapping("excel")
     @PreAuthorize("hasAnyAuthority('dept:export')")
-    public void export(Dept dept, QueryRequest request, HttpServletResponse response) throws FebsException {
-        try {
-            List<Dept> depts = this.deptService.findDepts(dept, request);
-            ExcelKit.$Export(Dept.class, response).downXlsx(depts, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "导出部门数据", exceptionMessage = "导出Excel失败")
+    public void export(Dept dept, QueryRequest request, HttpServletResponse response) {
+        List<Dept> depts = this.deptService.findDepts(dept, request);
+        ExcelKit.$Export(Dept.class, response).downXlsx(depts, false);
     }
 }

+ 35 - 43
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/EximportController.java

@@ -1,5 +1,6 @@
 package cc.mrbird.febs.server.system.controller;
 
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Eximport;
@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -60,55 +62,45 @@ public class EximportController {
     }
 
     @PostMapping("import")
-    public FebsResponse importExcels(MultipartFile file) throws FebsException {
-        try {
-            if (file.isEmpty()) {
-                throw new FebsException("导入数据为空");
-            }
-            String filename = file.getOriginalFilename();
-            if (!StringUtils.endsWith(filename, ".xlsx")) {
-                throw new FebsException("只支持.xlsx类型文件导入");
+    @ControllerEndpoint(exceptionMessage = "导入Excel数据失败")
+    public FebsResponse importExcels(MultipartFile file) throws IOException, FebsException {
+        if (file.isEmpty()) {
+            throw new FebsException("导入数据为空");
+        }
+        String filename = file.getOriginalFilename();
+        if (!StringUtils.endsWith(filename, ".xlsx")) {
+            throw new FebsException("只支持.xlsx类型文件导入");
+        }
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        final List<Eximport> data = Lists.newArrayList();
+        final List<Map<String, Object>> error = Lists.newArrayList();
+        ExcelKit.$Import(Eximport.class).readXlsx(file.getInputStream(), new ExcelReadHandler<Eximport>() {
+            @Override
+            public void onSuccess(int sheet, int row, Eximport eximport) {
+                eximport.setCreateTime(new Date());
+                data.add(eximport);
             }
-            Stopwatch stopwatch = Stopwatch.createStarted();
-            final List<Eximport> data = Lists.newArrayList();
-            final List<Map<String, Object>> error = Lists.newArrayList();
-            ExcelKit.$Import(Eximport.class).readXlsx(file.getInputStream(), new ExcelReadHandler<Eximport>() {
-                @Override
-                public void onSuccess(int sheet, int row, Eximport eximport) {
-                    eximport.setCreateTime(new Date());
-                    data.add(eximport);
-                }
 
-                @Override
-                public void onError(int sheet, int row, List<ExcelErrorField> errorFields) {
-                    error.add(ImmutableMap.of("row", row, "errorFields", errorFields));
-                }
-            });
-            if (CollectionUtils.isNotEmpty(data)) {
-                this.eximportService.batchInsert(data);
+            @Override
+            public void onError(int sheet, int row, List<ExcelErrorField> errorFields) {
+                error.add(ImmutableMap.of("row", row, "errorFields", errorFields));
             }
-            ImmutableMap<String, Object> result = ImmutableMap.of(
-                    "time", stopwatch.stop().toString(),
-                    "data", data,
-                    "error", error
-            );
-            return new FebsResponse().data(result);
-        } catch (Exception e) {
-            String message = "导入Excel数据失败," + e.getMessage();
-            log.error(message);
-            throw new FebsException(message);
+        });
+        if (CollectionUtils.isNotEmpty(data)) {
+            this.eximportService.batchInsert(data);
         }
+        ImmutableMap<String, Object> result = ImmutableMap.of(
+                "time", stopwatch.stop().toString(),
+                "data", data,
+                "error", error
+        );
+        return new FebsResponse().data(result);
     }
 
     @PostMapping("excel")
-    public void export(QueryRequest queryRequest, Eximport eximport, HttpServletResponse response) throws FebsException {
-        try {
-            List<Eximport> eximports = this.eximportService.findEximports(queryRequest, eximport).getRecords();
-            ExcelKit.$Export(Eximport.class, response).downXlsx(eximports, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(exceptionMessage = "导出Excel失败")
+    public void export(QueryRequest queryRequest, Eximport eximport, HttpServletResponse response) {
+        List<Eximport> eximports = this.eximportService.findEximports(queryRequest, eximport).getRecords();
+        ExcelKit.$Export(Eximport.class, response).downXlsx(eximports, false);
     }
 }

+ 5 - 11
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/GeneratorConfigController.java

@@ -1,6 +1,6 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.system.GeneratorConfig;
 import cc.mrbird.febs.common.exception.FebsException;
@@ -33,18 +33,12 @@ public class GeneratorConfigController {
         return new FebsResponse().data(generatorConfigService.findGeneratorConfig());
     }
 
-    @Log("修改生成代码配置")
     @PostMapping
     @PreAuthorize("hasAnyAuthority('gen:config:update')")
+    @ControllerEndpoint(operation = "修改生成代码配置", exceptionMessage = "修改GeneratorConfig失败")
     public void updateGeneratorConfig(@Valid GeneratorConfig generatorConfig) throws FebsException {
-        try {
-            if (StringUtils.isBlank(generatorConfig.getId()))
-                throw new FebsException("配置id不能为空");
-            this.generatorConfigService.updateGeneratorConfig(generatorConfig);
-        } catch (Exception e) {
-            String message = "修改GeneratorConfig失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+        if (StringUtils.isBlank(generatorConfig.getId()))
+            throw new FebsException("配置id不能为空");
+        this.generatorConfigService.updateGeneratorConfig(generatorConfig);
     }
 }

+ 29 - 36
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/GeneratorController.java

@@ -1,13 +1,12 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Column;
 import cc.mrbird.febs.common.entity.system.GeneratorConfig;
 import cc.mrbird.febs.common.entity.system.GeneratorConstant;
 import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.common.exception.FileDownloadException;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.FileUtil;
 import cc.mrbird.febs.server.system.helper.GeneratorHelper;
@@ -52,43 +51,37 @@ public class GeneratorController {
         return new FebsResponse().data(dataTable);
     }
 
-    @Log("生成代码")
     @PostMapping
     @PreAuthorize("hasAnyAuthority('gen:generate:gen')")
-    public void generate(@NotBlank(message = "{required}") String name, String remark, HttpServletResponse response) throws FileDownloadException {
-        try {
-            GeneratorConfig generatorConfig = generatorConfigService.findGeneratorConfig();
-            if (generatorConfig == null) {
-                throw new FebsException("代码生成配置为空");
-            }
-
-            String className = name;
-            if (GeneratorConfig.TRIM_YES.equals(generatorConfig.getIsTrim())) {
-                className = RegExUtils.replaceFirst(name, generatorConfig.getTrimValue(), StringUtils.EMPTY);
-            }
+    @ControllerEndpoint(operation = "生成代码", exceptionMessage = "代码生成失败")
+    public void generate(@NotBlank(message = "{required}") String name, String remark, HttpServletResponse response) throws Exception {
+        GeneratorConfig generatorConfig = generatorConfigService.findGeneratorConfig();
+        if (generatorConfig == null) {
+            throw new FebsException("代码生成配置为空");
+        }
 
-            generatorConfig.setTableName(name);
-            generatorConfig.setClassName(FebsUtil.underscoreToCamel(className));
-            generatorConfig.setTableComment(remark);
-            // 生成代码到临时目录
-            List<Column> columns = generatorService.getColumns(GeneratorConstant.DATABASE_TYPE, GeneratorConstant.DATABASE_NAME, name);
-            generatorHelper.generateEntityFile(columns, generatorConfig);
-            generatorHelper.generateMapperFile(columns, generatorConfig);
-            generatorHelper.generateMapperXmlFile(columns, generatorConfig);
-            generatorHelper.generateServiceFile(columns, generatorConfig);
-            generatorHelper.generateServiceImplFile(columns, generatorConfig);
-            generatorHelper.generateControllerFile(columns, generatorConfig);
-            // 打包
-            String zipFile = System.currentTimeMillis() + SUFFIX;
-            FileUtil.compress(GeneratorConstant.TEMP_PATH + "src", zipFile);
-            // 下载
-            FileUtil.download(zipFile, name + SUFFIX, true, response);
-            // 删除临时目录
-            FileUtil.delete(GeneratorConstant.TEMP_PATH);
-        } catch (Exception e) {
-            String message = "代码生成失败," + e.getMessage();
-            log.error(message, e);
-            throw new FileDownloadException(message);
+        String className = name;
+        if (GeneratorConfig.TRIM_YES.equals(generatorConfig.getIsTrim())) {
+            className = RegExUtils.replaceFirst(name, generatorConfig.getTrimValue(), StringUtils.EMPTY);
         }
+
+        generatorConfig.setTableName(name);
+        generatorConfig.setClassName(FebsUtil.underscoreToCamel(className));
+        generatorConfig.setTableComment(remark);
+        // 生成代码到临时目录
+        List<Column> columns = generatorService.getColumns(GeneratorConstant.DATABASE_TYPE, GeneratorConstant.DATABASE_NAME, name);
+        generatorHelper.generateEntityFile(columns, generatorConfig);
+        generatorHelper.generateMapperFile(columns, generatorConfig);
+        generatorHelper.generateMapperXmlFile(columns, generatorConfig);
+        generatorHelper.generateServiceFile(columns, generatorConfig);
+        generatorHelper.generateServiceImplFile(columns, generatorConfig);
+        generatorHelper.generateControllerFile(columns, generatorConfig);
+        // 打包
+        String zipFile = System.currentTimeMillis() + SUFFIX;
+        FileUtil.compress(GeneratorConstant.TEMP_PATH + "src", zipFile);
+        // 下载
+        FileUtil.download(zipFile, name + SUFFIX, true, response);
+        // 删除临时目录
+        FileUtil.delete(GeneratorConstant.TEMP_PATH);
     }
 }

+ 9 - 18
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/LogController.java

@@ -1,5 +1,6 @@
 package cc.mrbird.febs.server.system.controller;
 
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Log;
@@ -37,28 +38,18 @@ public class LogController {
 
     @DeleteMapping("{ids}")
     @PreAuthorize("hasAnyAuthority('log:delete')")
-    public void deleteLogss(@NotBlank(message = "{required}") @PathVariable String ids) throws FebsException {
-        try {
-            String[] logIds = ids.split(StringPool.COMMA);
-            this.logService.deleteLogs(logIds);
-        } catch (Exception e) {
-            String message = "删除日志失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(exceptionMessage = "删除日志失败")
+    public void deleteLogss(@NotBlank(message = "{required}") @PathVariable String ids) {
+        String[] logIds = ids.split(StringPool.COMMA);
+        this.logService.deleteLogs(logIds);
     }
 
 
     @PostMapping("excel")
     @PreAuthorize("hasAnyAuthority('log:export')")
-    public void export(QueryRequest request, Log lg, HttpServletResponse response) throws FebsException {
-        try {
-            List<Log> logs = this.logService.findLogs(lg, request).getRecords();
-            ExcelKit.$Export(Log.class, response).downXlsx(logs, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(exceptionMessage = "导出Excel失败")
+    public void export(QueryRequest request, Log lg, HttpServletResponse response) {
+        List<Log> logs = this.logService.findLogs(lg, request).getRecords();
+        ExcelKit.$Export(Log.class, response).downXlsx(logs, false);
     }
 }

+ 9 - 22
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/LoginLogController.java

@@ -1,10 +1,9 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.LoginLog;
-import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.server.system.service.ILoginLogService;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -42,31 +41,19 @@ public class LoginLogController {
         return new FebsResponse().data(userLastSevenLoginLogs);
     }
 
-    @Log("删除登录日志")
     @DeleteMapping("{ids}")
     @PreAuthorize("hasAnyAuthority('loginlog:delete')")
-    public void deleteLogss(@NotBlank(message = "{required}") @PathVariable String ids) throws FebsException {
-        try {
-            String[] loginLogIds = ids.split(StringPool.COMMA);
-            this.loginLogService.deleteLoginLogs(loginLogIds);
-        } catch (Exception e) {
-            String message = "删除登录日志失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "删除登录日志", exceptionMessage = "删除登录日志失败")
+    public void deleteLogss(@NotBlank(message = "{required}") @PathVariable String ids) {
+        String[] loginLogIds = ids.split(StringPool.COMMA);
+        this.loginLogService.deleteLoginLogs(loginLogIds);
     }
 
-    @Log("导出登录日志数据")
     @PostMapping("excel")
     @PreAuthorize("hasAnyAuthority('loginlog:export')")
-    public void export(QueryRequest request, LoginLog loginLog, HttpServletResponse response) throws FebsException {
-        try {
-            List<LoginLog> loginLogs = this.loginLogService.findLoginLogs(loginLog, request).getRecords();
-            ExcelKit.$Export(LoginLog.class, response).downXlsx(loginLogs, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "导出登录日志数据", exceptionMessage = "导出Excel失败")
+    public void export(QueryRequest request, LoginLog loginLog, HttpServletResponse response) {
+        List<LoginLog> loginLogs = this.loginLogService.findLoginLogs(loginLog, request).getRecords();
+        ExcelKit.$Export(LoginLog.class, response).downXlsx(loginLogs, false);
     }
 }

+ 15 - 40
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/MenuController.java

@@ -1,10 +1,9 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.router.VueRouter;
 import cc.mrbird.febs.common.entity.system.Menu;
-import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.server.system.service.IMenuService;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.wuwenze.poi.ExcelKit;
@@ -59,57 +58,33 @@ public class MenuController {
         return this.menuService.findUserPermissions(username);
     }
 
-    @Log("新增菜单/按钮")
     @PostMapping
     @PreAuthorize("hasAnyAuthority('menu:add')")
-    public void addMenu(@Valid Menu menu) throws FebsException {
-        try {
-            this.menuService.createMenu(menu);
-        } catch (Exception e) {
-            String message = "新增菜单/按钮失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "新增菜单/按钮", exceptionMessage = "新增菜单/按钮失败")
+    public void addMenu(@Valid Menu menu) {
+        this.menuService.createMenu(menu);
     }
 
-    @Log("删除菜单/按钮")
     @DeleteMapping("/{menuIds}")
     @PreAuthorize("hasAnyAuthority('menu:delete')")
-    public void deleteMenus(@NotBlank(message = "{required}") @PathVariable String menuIds) throws FebsException {
-        try {
-            String[] ids = menuIds.split(StringPool.COMMA);
-            this.menuService.deleteMeuns(ids);
-        } catch (Exception e) {
-            String message = "删除菜单/按钮失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "删除菜单/按钮", exceptionMessage = "删除菜单/按钮失败")
+    public void deleteMenus(@NotBlank(message = "{required}") @PathVariable String menuIds) {
+        String[] ids = menuIds.split(StringPool.COMMA);
+        this.menuService.deleteMeuns(ids);
     }
 
-    @Log("修改菜单/按钮")
     @PutMapping
     @PreAuthorize("hasAnyAuthority('menu:update')")
-    public void updateMenu(@Valid Menu menu) throws FebsException {
-        try {
-            this.menuService.updateMenu(menu);
-        } catch (Exception e) {
-            String message = "修改菜单/按钮失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "修改菜单/按钮", exceptionMessage = "修改菜单/按钮失败")
+    public void updateMenu(@Valid Menu menu) {
+        this.menuService.updateMenu(menu);
     }
 
-    @Log("导出菜单数据")
     @PostMapping("excel")
     @PreAuthorize("hasAnyAuthority('menu:export')")
-    public void export(Menu menu, HttpServletResponse response) throws FebsException {
-        try {
-            List<Menu> menus = this.menuService.findMenuList(menu);
-            ExcelKit.$Export(Menu.class, response).downXlsx(menus, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "导出菜单数据", exceptionMessage = "导出Excel失败")
+    public void export(Menu menu, HttpServletResponse response) {
+        List<Menu> menus = this.menuService.findMenuList(menu);
+        ExcelKit.$Export(Menu.class, response).downXlsx(menus, false);
     }
 }

+ 16 - 41
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/RoleController.java

@@ -1,10 +1,9 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Role;
-import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.server.system.service.IRoleService;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -39,7 +38,7 @@ public class RoleController {
     }
 
     @GetMapping("options")
-    public FebsResponse roles(){
+    public FebsResponse roles() {
         List<Role> allRoles = roleService.findAllRoles();
         return new FebsResponse().data(allRoles);
     }
@@ -50,57 +49,33 @@ public class RoleController {
         return result == null;
     }
 
-    @Log("新增角色")
     @PostMapping
     @PreAuthorize("hasAnyAuthority('role:add')")
-    public void addRole(@Valid Role role) throws FebsException {
-        try {
-            this.roleService.createRole(role);
-        } catch (Exception e) {
-            message = "新增角色失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "新增角色", exceptionMessage = "新增角色失败")
+    public void addRole(@Valid Role role) {
+        this.roleService.createRole(role);
     }
 
-    @Log("删除角色")
     @DeleteMapping("/{roleIds}")
     @PreAuthorize("hasAnyAuthority('role:delete')")
-    public void deleteRoles(@NotBlank(message = "{required}") @PathVariable String roleIds) throws FebsException {
-        try {
-            String[] ids = roleIds.split(StringPool.COMMA);
-            this.roleService.deleteRoles(ids);
-        } catch (Exception e) {
-            message = "删除角色失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "删除角色", exceptionMessage = "删除角色失败")
+    public void deleteRoles(@NotBlank(message = "{required}") @PathVariable String roleIds) {
+        String[] ids = roleIds.split(StringPool.COMMA);
+        this.roleService.deleteRoles(ids);
     }
 
-    @Log("修改角色")
     @PutMapping
     @PreAuthorize("hasAnyAuthority('role:update')")
-    public void updateRole(@Valid Role role) throws FebsException {
-        try {
-            this.roleService.updateRole(role);
-        } catch (Exception e) {
-            message = "修改角色失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "修改角色", exceptionMessage = "修改角色失败")
+    public void updateRole(@Valid Role role) {
+        this.roleService.updateRole(role);
     }
 
-    @Log("导出角色数据")
     @PostMapping("excel")
     @PreAuthorize("hasAnyAuthority('role:export')")
-    public void export(QueryRequest queryRequest, Role role, HttpServletResponse response) throws FebsException {
-        try {
-            List<Role> roles = this.roleService.findRoles(role, queryRequest).getRecords();
-            ExcelKit.$Export(Role.class, response).downXlsx(roles, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "导出角色数据", exceptionMessage = "导出Excel失败")
+    public void export(QueryRequest queryRequest, Role role, HttpServletResponse response) {
+        List<Role> roles = this.roleService.findRoles(role, queryRequest).getRecords();
+        ExcelKit.$Export(Role.class, response).downXlsx(roles, false);
     }
 }

+ 27 - 70
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java

@@ -1,6 +1,6 @@
 package cc.mrbird.febs.server.system.controller;
 
-import cc.mrbird.febs.common.annotation.Log;
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.LoginLog;
@@ -86,67 +86,40 @@ public class UserController {
         return this.userService.findByName(username) == null;
     }
 
-    @Log("新增用户")
     @PostMapping
     @PreAuthorize("hasAnyAuthority('user:add')")
-    public void addUser(@Valid SystemUser user) throws FebsException {
-        try {
-            this.userService.createUser(user);
-        } catch (Exception e) {
-            String message = "新增用户失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "新增用户", exceptionMessage = "新增用户失败")
+    public void addUser(@Valid SystemUser user) {
+        this.userService.createUser(user);
     }
 
-    @Log("新增用户")
     @PutMapping
     @PreAuthorize("hasAnyAuthority('user:update')")
-    public void updateUser(@Valid SystemUser user) throws FebsException {
-        try {
-            this.userService.updateUser(user);
-        } catch (Exception e) {
-            String message = "修改用户失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "修改用户", exceptionMessage = "修改用户失败")
+    public void updateUser(@Valid SystemUser user) {
+        this.userService.updateUser(user);
     }
 
     @DeleteMapping("/{userIds}")
     @PreAuthorize("hasAnyAuthority('user:delete')")
-    public void deleteUsers(@NotBlank(message = "{required}") @PathVariable String userIds) throws FebsException {
-        try {
-            String[] ids = userIds.split(StringPool.COMMA);
-            this.userService.deleteUsers(ids);
-        } catch (Exception e) {
-            String message = "删除用户失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(operation = "删除用户", exceptionMessage = "删除用户失败")
+    public void deleteUsers(@NotBlank(message = "{required}") @PathVariable String userIds) {
+        String[] ids = userIds.split(StringPool.COMMA);
+        this.userService.deleteUsers(ids);
     }
 
     @PutMapping("profile")
-    public void updateProfile(@Valid SystemUser user) throws FebsException {
-        try {
-            this.userService.updateProfile(user);
-        } catch (Exception e) {
-            String message = "修改个人信息失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(exceptionMessage = "修改个人信息失败")
+    public void updateProfile(@Valid SystemUser user) {
+        this.userService.updateProfile(user);
     }
 
     @PutMapping("avatar")
+    @ControllerEndpoint(exceptionMessage = "修改头像失败")
     public void updateAvatar(
             @NotBlank(message = "{required}") String username,
-            @NotBlank(message = "{required}") String avatar) throws FebsException {
-        try {
-            this.userService.updateAvatar(username, avatar);
-        } catch (Exception e) {
-            String message = "修改头像失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+            @NotBlank(message = "{required}") String avatar) {
+        this.userService.updateAvatar(username, avatar);
     }
 
     @GetMapping("password/check")
@@ -158,42 +131,26 @@ public class UserController {
     }
 
     @PutMapping("password")
+    @ControllerEndpoint(exceptionMessage = "修改密码失败")
     public void updatePassword(
             @NotBlank(message = "{required}") String username,
-            @NotBlank(message = "{required}") String password) throws FebsException {
-        try {
-            userService.updatePassword(username, password);
-        } catch (Exception e) {
-            String message = "修改密码失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+            @NotBlank(message = "{required}") String password) {
+        userService.updatePassword(username, password);
     }
 
     @PutMapping("password/reset")
     @PreAuthorize("hasAnyAuthority('user:reset')")
-    public void resetPassword(@NotBlank(message = "{required}") String usernames) throws FebsException {
-        try {
-            String[] usernameArr = usernames.split(StringPool.COMMA);
-            this.userService.resetPassword(usernameArr);
-        } catch (Exception e) {
-            String message = "重置用户密码失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+    @ControllerEndpoint(exceptionMessage = "重置用户密码失败")
+    public void resetPassword(@NotBlank(message = "{required}") String usernames) {
+        String[] usernameArr = usernames.split(StringPool.COMMA);
+        this.userService.resetPassword(usernameArr);
     }
 
-    @Log("导出用户数据")
     @PostMapping("excel")
     @PreAuthorize("hasAnyAuthority('user:export')")
+    @ControllerEndpoint(operation = "导出用户数据", exceptionMessage = "导出Excel失败")
     public void export(QueryRequest queryRequest, SystemUser user, HttpServletResponse response) throws FebsException {
-        try {
-            List<SystemUser> users = this.userService.findUserDetail(user, queryRequest).getRecords();
-            ExcelKit.$Export(SystemUser.class, response).downXlsx(users, false);
-        } catch (Exception e) {
-            String message = "导出Excel失败";
-            log.error(message, e);
-            throw new FebsException(message);
-        }
+        List<SystemUser> users = this.userService.findUserDetail(user, queryRequest).getRecords();
+        ExcelKit.$Export(SystemUser.class, response).downXlsx(users, false);
     }
 }

+ 14 - 9
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/ILogService.java

@@ -1,14 +1,17 @@
 package cc.mrbird.febs.server.system.service;
 
 
+import cc.mrbird.febs.common.entity.FebsConstant;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Log;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.springframework.scheduling.annotation.Async;
 
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
 /**
  * @author MrBird
  */
@@ -17,9 +20,9 @@ public interface ILogService extends IService<Log> {
     /**
      * 查询操作日志分页
      *
-     * @param log     日志
-     * @param request QueryRequest
-     * @return IPage<Log>
+     * @param Log 日志
+     * @param request   QueryRequest
+     * @return IPage<SystemLog>
      */
     IPage<Log> findLogs(Log log, QueryRequest request);
 
@@ -33,10 +36,12 @@ public interface ILogService extends IService<Log> {
     /**
      * 异步保存操作日志
      *
-     * @param point 切点
-     * @param log   日志
-     * @throws JsonProcessingException 异常
+     * @param point     切点
+     * @param method    Method
+     * @param request   HttpServletRequest
+     * @param operation 操作内容
+     * @param start     开始时间
      */
-    @Async("febsAsyncThreadPool")
-    void saveLog(ProceedingJoinPoint point, Log log) throws JsonProcessingException;
+    @Async(FebsConstant.ASYNC_POOL)
+    void saveLog(ProceedingJoinPoint point, Method method, HttpServletRequest request, String operation, long start);
 }

+ 2 - 2
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/IMenuService.java

@@ -21,13 +21,13 @@ public interface IMenuService extends IService<Menu> {
 
     void createMenu(Menu menu);
 
-    void updateMenu(Menu menu) throws Exception;
+    void updateMenu(Menu menu);
 
     /**
      * 递归删除菜单/按钮
      *
      * @param menuIds menuIds
      */
-    void deleteMeuns(String[] menuIds) throws Exception;
+    void deleteMeuns(String[] menuIds);
 
 }

+ 2 - 2
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/IRoleService.java

@@ -19,7 +19,7 @@ public interface IRoleService extends IService<Role> {
 
     void createRole(Role role);
 
-    void deleteRoles(String[] roleIds) throws Exception;
+    void deleteRoles(String[] roleIds);
 
-    void updateRole(Role role) throws Exception;
+    void updateRole(Role role);
 }

+ 54 - 41
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/LogServiceImpl.java

@@ -4,6 +4,7 @@ package cc.mrbird.febs.server.system.service.impl;
 import cc.mrbird.febs.common.entity.FebsConstant;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.Log;
+import cc.mrbird.febs.common.utils.IPUtil;
 import cc.mrbird.febs.common.utils.SortUtil;
 import cc.mrbird.febs.server.system.mapper.LogMapper;
 import cc.mrbird.febs.server.system.service.ILogService;
@@ -12,18 +13,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.lang3.StringUtils;
 import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.*;
@@ -48,13 +50,15 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log> implements ILogS
         if (StringUtils.isNotBlank(log.getOperation())) {
             queryWrapper.lambda().like(Log::getOperation, log.getOperation());
         }
+        if (StringUtils.isNotBlank(log.getLocation())) {
+            queryWrapper.lambda().like(Log::getLocation, log.getLocation());
+        }
         if (StringUtils.isNotBlank(log.getCreateTimeFrom()) && StringUtils.isNotBlank(log.getCreateTimeTo())) {
             queryWrapper.lambda()
                     .ge(Log::getCreateTime, log.getCreateTimeFrom())
                     .le(Log::getCreateTime, log.getCreateTimeTo());
         }
 
-
         Page<Log> page = new Page<>(request.getPageNum(), request.getPageSize());
         SortUtil.handlePageSort(request, page, "createTime", FebsConstant.ORDER_DESC, true);
 
@@ -69,19 +73,24 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log> implements ILogS
     }
 
     @Override
-    public void saveLog(ProceedingJoinPoint point, Log log) throws JsonProcessingException {
-        MethodSignature signature = (MethodSignature) point.getSignature();
-        Method method = signature.getMethod();
-        cc.mrbird.febs.common.annotation.Log logAnnotation = method.getAnnotation(cc.mrbird.febs.common.annotation.Log.class);
-        if (logAnnotation != null) {
-            // 注解上的描述
-            log.setOperation(logAnnotation.value());
-        }
+    public void saveLog(ProceedingJoinPoint point, Method method, HttpServletRequest request, String operation, long start) {
+        Log Log = new Log();
+        // 设置 IP地址
+        String ip = IPUtil.getIpAddr(request);
+        Log.setIp(ip);
+        // 设置操作用户
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        String username = (String) authentication.getPrincipal();
+        Log.setUsername(username);
+        // 设置耗时
+        Log.setTime(System.currentTimeMillis() - start);
+        // 设置操作描述
+        Log.setOperation(operation);
         // 请求的类名
         String className = point.getTarget().getClass().getName();
         // 请求的方法名
-        String methodName = signature.getName();
-        log.setMethod(className + "." + methodName + "()");
+        String methodName = method.getName();
+        Log.setMethod(className + "." + methodName + "()");
         // 请求的方法参数值
         Object[] args = point.getArgs();
         // 请求的方法参数名称
@@ -90,42 +99,46 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log> implements ILogS
         if (args != null && paramNames != null) {
             StringBuilder params = new StringBuilder();
             params = handleParams(params, args, Arrays.asList(paramNames));
-            log.setParams(params.toString());
+            Log.setParams(params.toString());
         }
-        log.setCreateTime(new Date());
-        log.setLocation(AddressUtil.getCityInfo(log.getIp()));
+        Log.setCreateTime(new Date());
+        Log.setLocation(AddressUtil.getCityInfo(ip));
         // 保存系统日志
-        save(log);
+        save(Log);
     }
 
-    private StringBuilder handleParams(StringBuilder params, Object[] args, List paramNames) throws JsonProcessingException {
-        for (int i = 0; i < args.length; i++) {
-            if (args[i] instanceof Map) {
-                Set set = ((Map) args[i]).keySet();
-                List<Object> list = new ArrayList<>();
-                List<Object> paramList = new ArrayList<>();
-                for (Object key : set) {
-                    list.add(((Map) args[i]).get(key));
-                    paramList.add(key);
-                }
-                return handleParams(params, list.toArray(), paramList);
-            } else {
-                if (args[i] instanceof Serializable) {
-                    Class<?> aClass = args[i].getClass();
-                    try {
-                        aClass.getDeclaredMethod("toString", new Class[]{null});
-                        // 如果不抛出 NoSuchMethodException 异常则存在 toString 方法 ,安全的 writeValueAsString ,否则 走 Object的 toString方法
-                        params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i]));
-                    } catch (NoSuchMethodException e) {
-                        params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i].toString()));
+    private StringBuilder handleParams(StringBuilder params, Object[] args, List paramNames) {
+        try {
+            for (int i = 0; i < args.length; i++) {
+                if (args[i] instanceof Map) {
+                    Set set = ((Map) args[i]).keySet();
+                    List<Object> list = new ArrayList<>();
+                    List<Object> paramList = new ArrayList<>();
+                    for (Object key : set) {
+                        list.add(((Map) args[i]).get(key));
+                        paramList.add(key);
                     }
-                } else if (args[i] instanceof MultipartFile) {
-                    MultipartFile file = (MultipartFile) args[i];
-                    params.append(" ").append(paramNames.get(i)).append(": ").append(file.getName());
+                    return handleParams(params, list.toArray(), paramList);
                 } else {
-                    params.append(" ").append(paramNames.get(i)).append(": ").append(args[i]);
+                    if (args[i] instanceof Serializable) {
+                        Class<?> aClass = args[i].getClass();
+                        try {
+                            aClass.getDeclaredMethod("toString", new Class[]{null});
+                            // 如果不抛出 NoSuchMethodException 异常则存在 toString 方法 ,安全的 writeValueAsString ,否则 走 Object的 toString方法
+                            params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i]));
+                        } catch (NoSuchMethodException e) {
+                            params.append(" ").append(paramNames.get(i)).append(": ").append(objectMapper.writeValueAsString(args[i].toString()));
+                        }
+                    } else if (args[i] instanceof MultipartFile) {
+                        MultipartFile file = (MultipartFile) args[i];
+                        params.append(" ").append(paramNames.get(i)).append(": ").append(file.getName());
+                    } else {
+                        params.append(" ").append(paramNames.get(i)).append(": ").append(args[i]);
+                    }
                 }
             }
+        } catch (Exception ignore) {
+            params.append("参数解析失败");
         }
         return params;
     }