Просмотр исходного кода

feat(gen,controller):

代码生成模板增删改接口增加日志;
controller接口增删改方法新增日志;
新增操作日志切面
18339543638 2 лет назад
Родитель
Сommit
b422cdc372
35 измененных файлов с 548 добавлено и 726 удалено
  1. 0 5
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/config/mapper/mapping/GenConfigMapper.xml
  2. 5 1
      tr-modules/tr-module-gen/src/main/resources/backend/Controller.java.btl
  3. 0 3
      tr-modules/tr-module-gen/src/main/resources/backend/DTO.java.btl
  4. 1 1
      tr-modules/tr-module-gen/src/main/resources/backend/Service.java.btl
  5. 2 2
      tr-modules/tr-module-gen/src/main/resources/backend/ServiceImpl.java.btl
  6. 4 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/controller/SysDictController.java
  7. 4 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/controller/SysDictItemController.java
  8. 0 30
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/config/OperateConfig.java
  9. 0 57
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/controller/SysOperLogController.java
  10. 0 16
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/dto/SysOpeLogQueryDTO.java
  11. 0 123
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/dto/SysOperLogDTO.java
  12. 0 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/package-info.java
  13. 0 147
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/po/SysOperLogPO.java
  14. 0 43
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/service/ISysOperLogService.java
  15. 0 47
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/service/impl/SysOperLogServiceImpl.java
  16. 31 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/SysOperLogMapper.java
  17. 0 26
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/log/OperLogMapper.java
  18. 30 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/config/OperLogConfig.java
  19. 57 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/controller/SysOperLogController.java
  20. 51 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/dto/SysOperLogDTO.java
  21. 26 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/dto/SysOperLogQueryDTO.java
  22. 76 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/po/SysOperLogPO.java
  23. 9 8
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/repository/SysOperLogRepository.java
  24. 54 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/service/ISysOperLogService.java
  25. 90 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/service/impl/SysOperLogServiceImpl.java
  26. 5 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantController.java
  27. 17 13
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantPackageController.java
  28. 4 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysOrgController.java
  29. 5 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPortalController.java
  30. 10 6
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPositionController.java
  31. 6 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java
  32. 3 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysUserController.java
  33. 1 17
      tr-plugins/tr-spring-boot-starter-plugin-operatelog/src/main/java/cn/tr/plugin/operatelog/annotation/OperateLog.java
  34. 25 57
      tr-plugins/tr-spring-boot-starter-plugin-operatelog/src/main/java/cn/tr/plugin/operatelog/bo/OperateLogBO.java
  35. 32 121
      tr-plugins/tr-spring-boot-starter-plugin-operatelog/src/main/java/cn/tr/plugin/operatelog/config/OperateLogAspect.java

+ 0 - 5
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/config/mapper/mapping/GenConfigMapper.xml

@@ -1,5 +0,0 @@
-<?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="vip.xiaonuo.gen.modular.config.mapper.GenConfigMapper">
-
-</mapper>

+ 5 - 1
tr-modules/tr-module-gen/src/main/resources/backend/Controller.java.btl

@@ -19,13 +19,14 @@ import ${packageName}.${backendModuleName}.${busName}.dto.${className}QueryDTO;
 import java.util.*;
 import cn.tr.plugin.mybatis.base.BaseController;
 import org.springframework.web.bind.annotation.*;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 /**
  * ${functionName}控制器
  *
  * @author ${authorName}
  * @date ${genTime}
  */
-@Api(tags = "${functionName}控制器")
+@Api(tags = "${functionName}")
 @RestController
 @RequestMapping("/${backendModuleName}/${busName}")
 @AllArgsConstructor
@@ -53,6 +54,7 @@ public class ${className}Controller extends BaseController{
     @ApiOperationSupport(author = "${authorName}",order = 3)
     @ApiOperation(value="添加${functionName}",notes = "权限: ${backendModuleName}:${busName}:add")
     @PostMapping("/add")
+    @OperateLog
     @SaCheckPermission("${backendModuleName}:${busName}:add")
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) ${className}DTO source) {
         return CommonResult.success(${classNameFirstLower}Service.insert${className}(source));
@@ -61,6 +63,7 @@ public class ${className}Controller extends BaseController{
     @ApiOperationSupport(author = "${authorName}",order = 4)
     @ApiOperation(value="通过主键id编辑${functionName}",notes = "权限: ${backendModuleName}:${busName}:edit")
     @PostMapping("/edit")
+    @OperateLog
     @SaCheckPermission("${backendModuleName}:${busName}:edit")
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) ${className}DTO source) {
         return CommonResult.success(${classNameFirstLower}Service.update${className}ById(source));
@@ -69,6 +72,7 @@ public class ${className}Controller extends BaseController{
     @ApiOperationSupport(author = "${authorName}",order = 5)
     @ApiOperation(value="删除${functionName}",notes = "权限: ${backendModuleName}:${busName}:remove")
     @PostMapping("/removeByIds")
+    @OperateLog
     @SaCheckPermission("${backendModuleName}:${busName}:remove")
     public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
         return CommonResult.success(${classNameFirstLower}Service.remove${className}ByIds(ids));

+ 0 - 3
tr-modules/tr-module-gen/src/main/resources/backend/DTO.java.btl

@@ -26,7 +26,6 @@ public class ${className}DTO extends BaseDTO  {
     <% var fieldNameCamelCase=configList[i].fieldNameCamelCase;
 if(fieldNameCamelCase== "createTime" || fieldNameCamelCase == "createBy" || fieldNameCamelCase == "updateTime" ||fieldNameCamelCase == "updateBy" || fieldNameCamelCase == "tenantId"  || fieldNameCamelCase== "deleted" ) {
         continue ;} %>
-    <% if(configList[i].needPage) { %>
     @ApiModelProperty(value = "${configList[i].fieldRemark}", position = ${i + 1})
     <% if(configList[i].needTableId ) { %>
     @NotNull(message = "主键不能为空",groups = {Update.class})
@@ -34,7 +33,5 @@ if(fieldNameCamelCase== "createTime" || fieldNameCamelCase == "createBy" || fiel
     @NotNull(message = "configList[i].fieldRemark不能为空",groups = {Update.class,Insert.class})
     <% } %>
     private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
-
-    <% } %>
     <% } %>
 }

+ 1 - 1
tr-modules/tr-module-gen/src/main/resources/backend/Service.java.btl

@@ -10,7 +10,7 @@ import java.util.*;
  * @author ${authorName}
  * @date ${genTime}
  **/
-public interface ${className}Service{
+public interface I${className}Service{
 
     /**
      * 根据条件查询${functionName}

+ 2 - 2
tr-modules/tr-module-gen/src/main/resources/backend/ServiceImpl.java.btl

@@ -12,7 +12,7 @@ import ${packageName}.${backendModuleName}.${busName}.po.${className}PO;
 import ${packageName}.${backendModuleName}.${busName}.dto.${className}DTO;
 import ${packageName}.${backendModuleName}.${busName}.dto.${className}QueryDTO;
 import java.util.*;
-import ${packageName}.${backendModuleName}.${busName}.service.${className}Service;
+import ${packageName}.${backendModuleName}.${busName}.service.I${className}Service;
 import ${packageName}.${backendModuleName}.mapper.${className}Mapper;
 /**
  * ${functionName}Service接口实现类
@@ -21,7 +21,7 @@ import ${packageName}.${backendModuleName}.mapper.${className}Mapper;
  * @date ${genTime}
  **/
 @Service
-public class ${className}ServiceImpl implements ${className}Service {
+public class ${className}ServiceImpl implements I${className}Service {
     @Autowired
     private ${className}Repository baseRepository;
 

+ 4 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/controller/SysDictController.java

@@ -9,6 +9,7 @@ import cn.tr.module.sys.dict.dto.SysDictDTO;
 import cn.tr.module.sys.dict.dto.SysDictQueryDTO;
 import cn.tr.module.sys.dict.service.ISysDictService;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -53,6 +54,7 @@ public class SysDictController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:dict:edit")
     @ApiOperation(value = "根据id更新字典",notes = "权限: sys:dict:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysDictDTO source){
         return CommonResult.success(dictService.updateDictById(source));
     }
@@ -61,6 +63,7 @@ public class SysDictController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:dict:add")
     @ApiOperation(value = "新增字典",notes = "权限: sys:dict:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysDictDTO source){
         return CommonResult.success(dictService.insertDict(source));
     }
@@ -69,6 +72,7 @@ public class SysDictController extends BaseController {
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:dict:del")
+    @OperateLog
     @ApiOperation(value = "删除字典",notes = "权限: sys:dict:del")
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(dictService.deleteDictByIds(ids));

+ 4 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/controller/SysDictItemController.java

@@ -12,6 +12,7 @@ import cn.tr.module.sys.dict.dto.SysDictItemSmallDTO;
 import cn.tr.module.sys.dict.service.ISysDictItemService;
 import cn.tr.module.sys.dict.service.ISysDictService;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -54,6 +55,7 @@ public class SysDictItemController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:dictItem:edit")
     @ApiOperation(value = "根据id更新字典项",notes = "权限: sys:dictItem:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysDictItemDTO source){
         return CommonResult.success(dictItemService.updateDictItemById(source));
     }
@@ -62,6 +64,7 @@ public class SysDictItemController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "新增字典项",notes = "权限: sys:dictItem:add")
     @SaCheckPermission("sys:dictItem:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysDictItemDTO source){
         return CommonResult.success(dictItemService.insertDictItem(source));
     }
@@ -71,6 +74,7 @@ public class SysDictItemController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "删除字典项",notes = "权限: sys:dictItem:del")
     @SaCheckPermission("sys:dictItem:del")
+    @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(dictItemService.deleteDictItemByIds(ids));
     }

+ 0 - 30
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/config/OperateConfig.java

@@ -1,30 +0,0 @@
-package cn.tr.module.sys.log.config;
-
-import cn.tr.module.sys.mapper.log.OperLogMapper;
-import cn.tr.module.sys.log.service.ISysOperLogService;
-import cn.tr.plugin.operatelog.strategy.OperateStrategy;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Configuration;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @ClassName : OperateConfig
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
-@Slf4j
-@Configuration
-@AllArgsConstructor
-public class OperateConfig {
-    private final ISysOperLogService operLogService;
-    @PostConstruct
-    public void init(){
-        OperateStrategy.tr.logSaveConsumer=log->{
-            operLogService.insertOperLog( OperLogMapper.INSTANCE.toOperLogDto(log));
-        };
-    }
-
-}

+ 0 - 57
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/controller/SysOperLogController.java

@@ -1,57 +0,0 @@
-package cn.tr.module.sys.log.controller;
-
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.tr.core.pojo.CommonResult;
-import cn.tr.core.pojo.TableDataInfo;
-import cn.tr.module.sys.log.dto.SysOperLogDTO;
-import cn.tr.module.sys.log.dto.SysOpeLogQueryDTO;
-import cn.tr.module.sys.log.service.ISysOperLogService;
-import cn.tr.plugin.mybatis.base.BaseController;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-/**
- * @ClassName : SysOperLogController
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
-@RestController
-@RequestMapping("/sys/operLog")
-@Api(tags = "操作日志")
-@AllArgsConstructor
-public class SysOperLogController extends BaseController {
-    private final ISysOperLogService operLogService;
-
-    @PostMapping("/query/page")
-    @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "根据条件查询操作日志",notes = "权限: sys:operLog:query")
-    @SaCheckPermission("sys:operLog:query")
-    public TableDataInfo<SysOperLogDTO> selectList(@RequestBody SysOpeLogQueryDTO query){
-        startPage();
-        return getDataTable(operLogService.selectOperLogDataList(query));
-    }
-
-    @GetMapping("/detail/{id}")
-    @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "根据id查询操作日志",notes = "权限: sys:operLog:query")
-    @SaCheckPermission("sys:operLog:query")
-    public CommonResult<SysOperLogDTO> findById(@PathVariable("id") String id){
-        return CommonResult.success(operLogService.selectOperLogById(id));
-    }
-
-    @PostMapping("/deleteByIds")
-    @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "删除查询日志",notes = "权限: sys:operLog:del")
-    @SaCheckPermission("sys:operLog:del")
-    public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
-        return CommonResult.success(operLogService.deleteOperLogByIds(ids));
-    }
-
-    //todo 导出
-
-}

+ 0 - 16
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/dto/SysOpeLogQueryDTO.java

@@ -1,16 +0,0 @@
-package cn.tr.module.sys.log.dto;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @ClassName : SysOpeLogQueryDTO
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
-@Data
-public class SysOpeLogQueryDTO implements Serializable {
-    private static final long serialVersionUID = -4279171934716001840L;
-}

+ 0 - 123
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/dto/SysOperLogDTO.java

@@ -1,123 +0,0 @@
-package cn.tr.module.sys.log.dto;
-
-
-import cn.tr.plugin.mybatis.pojo.BaseDTO;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 操作日志记录对象 sys_oper_log
- *
- * @author tr
- * @date 2022-11-22 08:59:03
- */
-@Data
-@ToString
-@EqualsAndHashCode(callSuper = true)
-public class SysOperLogDTO extends BaseDTO {
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "主键")
-    private String operId;
-    /**
-     * 用户id
-     */
-    @ApiModelProperty("操作用户id")
-    private String userId;
-
-
-    /**
-     * 操作模块
-     */
-    @ApiModelProperty("操作模块")
-    private String module;
-
-    /**
-     * 操作名
-     */
-    @ApiModelProperty("操作名称")
-    private String name;
-
-    /**
-     * 操作分类
-     */
-    @ApiModelProperty("操作分类")
-    private Integer type;
-
-    /**
-     * 操作明细
-     */
-    @ApiModelProperty("操作明细")
-    private String content;
-
-    /**
-     * 请求方法名
-     */
-    @ApiModelProperty("请求方法名")
-    private String requestMethod;
-
-    /**
-     * 请求地址
-     */
-    @ApiModelProperty("请求地址")
-    private String requestUrl;
-
-    /**
-     * 用户 IP
-     */
-    @ApiModelProperty("用户IP")
-    private String userIp;
-
-    /**
-     * 浏览器 UserAgent
-     */
-    @ApiModelProperty("浏览器UserAgent")
-    private String userAgent;
-
-    /**
-     * Java 方法名
-     */
-    @ApiModelProperty("Java方法名")
-    private String javaMethod;
-
-    /**
-     * Java 方法的参数
-     */
-    @ApiModelProperty("Java方法的参数")
-    private String javaMethodArgs;
-
-    /**
-     * 开始时间
-     */
-    @ApiModelProperty("开始时间")
-    private Date startTime;
-
-    /**
-     * 执行时长,单位:毫秒
-     */
-    @ApiModelProperty("执行时长,单位:毫秒")
-    private Integer duration;
-
-    /**
-     * 响应码
-     */
-    @ApiModelProperty("响应码")
-    private String resultCode;
-
-    /**
-     * 结果提示
-     */
-    @ApiModelProperty("响应信息")
-    private String resultMsg;
-
-    /**
-     * 结果数据
-     */
-    @ApiModelProperty("响应数据")
-    private String resultData;
-}

+ 0 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/package-info.java

@@ -1,2 +0,0 @@
-package cn.tr.module.sys.log;
-//日志相关包

+ 0 - 147
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/po/SysOperLogPO.java

@@ -1,147 +0,0 @@
-package cn.tr.module.sys.log.po;
-
-import cn.tr.core.annotation.Comment;
-import cn.tr.plugin.constant.annotation.Constant;
-import cn.tr.plugin.mybatis.pojo.BasePO;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.apache.ibatis.type.JdbcType;
-
-import java.util.Date;
-
-/**
- * 操作日志记录对象 sys_oper_log
- *
- * @author tr
- * @date 2022-11-22 08:59:03
- */
-@Data
-@ToString
-@TableName("sys_oper_log")
-@EqualsAndHashCode(callSuper = true)
-public class SysOperLogPO extends BasePO {
-
-    @ApiModelProperty(value = "主键")
-    @TableId
-    @Constant(cate = "code")
-    private String operId;
-
-    /**
-     * 用户id
-     */
-    @ApiModelProperty("操作用户id")
-    @Comment("操作用户id")
-    private String userId;
-
-
-    /**
-     * 操作模块
-     */
-    @ApiModelProperty("操作模块")
-    @Comment("操作模块")
-    private String module;
-
-    /**
-     * 操作名
-     */
-    @ApiModelProperty("操作名称")
-    @Comment("操作名称")
-    private String name;
-
-    /**
-     * 操作分类
-     */
-    @ApiModelProperty("操作分类")
-    @Comment("操作分类")
-    private Integer type;
-
-    /**
-     * 操作明细
-     */
-    @ApiModelProperty("操作明细")
-    @Comment("操作明细")
-    private String content;
-
-    /**
-     * 请求方法名
-     */
-    @ApiModelProperty("请求方法名")
-    @Comment("请求方法名")
-    private String requestMethod;
-
-    /**
-     * 请求地址
-     */
-    @ApiModelProperty("请求地址")
-    @Comment("请求地址")
-    private String requestUrl;
-
-    /**
-     * 用户 IP
-     */
-    @ApiModelProperty("用户IP")
-    @Comment("用户IP")
-    private String userIp;
-
-    /**
-     * 浏览器 UserAgent
-     */
-    @ApiModelProperty("浏览器UserAgent")
-    @Comment("浏览器UserAgent")
-    private String userAgent;
-
-    /**
-     * Java 方法名
-     */
-    @ApiModelProperty("Java方法名")
-    @Comment("Java方法名")
-    private String javaMethod;
-
-    /**
-     * Java 方法的参数
-     */
-    @ApiModelProperty("Java方法的参数")
-    @Comment("Java方法的参数")
-    private String javaMethodArgs;
-
-    /**
-     * 开始时间
-     */
-    @ApiModelProperty("开始时间")
-    @Comment("开始时间")
-    private Date startTime;
-
-    /**
-     * 执行时长,单位:毫秒
-     */
-    @ApiModelProperty("执行时长,单位:毫秒")
-    @Comment("执行时长,单位:毫秒")
-    private Integer duration;
-
-    /**
-     * 响应码
-     */
-    @ApiModelProperty("响应码")
-    @Comment("响应码")
-    private String resultCode;
-
-    /**
-     * 结果提示
-     */
-    @ApiModelProperty("响应信息")
-    @Comment("响应信息")
-    private String resultMsg;
-
-    /**
-     * 结果数据
-     */
-    @ApiModelProperty("响应数据")
-    @Comment("响应数据")
-    @TableField(jdbcType = JdbcType.LONGVARCHAR)
-    private String resultData;
-}

+ 0 - 43
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/service/ISysOperLogService.java

@@ -1,43 +0,0 @@
-package cn.tr.module.sys.log.service;
-
-import cn.tr.module.sys.log.dto.SysOperLogDTO;
-import cn.tr.module.sys.log.dto.SysOpeLogQueryDTO;
-
-import java.util.*;
-/**
- * @ClassName : ISysOperLogService
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
-
-public interface ISysOperLogService {
-    /**
-     * 根据条件查询
-     * @param query 查询参数
-     * @return
-     */
-    List<SysOperLogDTO> selectOperLogDataList(SysOpeLogQueryDTO query);
-
-    /**
-     * 根据id查询操作日志
-     * @param id 日志id
-     * @return 日志
-     */
-    SysOperLogDTO selectOperLogById(String id);
-
-    /**
-     * 新增日志
-     * @param source 新增日志
-     * @return true:新增成功
-     */
-    boolean insertOperLog(SysOperLogDTO source);
-
-    /**
-     * 根据id删除日志
-     * @param ids 日志id
-     * @return 删除数量
-     */
-    int deleteOperLogByIds(Collection<String> ids);
-
-}

+ 0 - 47
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/service/impl/SysOperLogServiceImpl.java

@@ -1,47 +0,0 @@
-package cn.tr.module.sys.log.service.impl;
-
-import cn.tr.module.sys.mapper.log.OperLogMapper;
-import cn.tr.module.sys.log.dto.SysOperLogDTO;
-import cn.tr.module.sys.log.dto.SysOpeLogQueryDTO;
-import cn.tr.module.sys.log.repository.SysOperLogRepository;
-import cn.tr.module.sys.log.service.ISysOperLogService;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @ClassName : ISysOperLogService
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
-@Slf4j
-@AllArgsConstructor
-@Service
-public class SysOperLogServiceImpl implements ISysOperLogService {
-
-    private  final SysOperLogRepository logRepository;
-    @Override
-    public List<SysOperLogDTO> selectOperLogDataList(SysOpeLogQueryDTO query) {
-        return OperLogMapper.INSTANCE.toOperLogDto(logRepository.selectList(new QueryWrapper<>()));
-    }
-
-    @Override
-    public SysOperLogDTO selectOperLogById(String id) {
-        return OperLogMapper.INSTANCE.toOperLogDto(logRepository.selectById(id));
-    }
-
-    @Override
-    public boolean insertOperLog(SysOperLogDTO source) {
-        return logRepository.insert(OperLogMapper.INSTANCE.toOperLogPO(source))!=0;
-    }
-
-    @Override
-    public int deleteOperLogByIds(Collection<String> ids) {
-        return logRepository.deleteBatchIds(ids);
-    }
-}

+ 31 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/SysOperLogMapper.java

@@ -0,0 +1,31 @@
+package cn.tr.module.sys.mapper;
+
+import cn.tr.module.sys.operLog.po.SysOperLogPO;
+import cn.tr.module.sys.operLog.dto.SysOperLogDTO;
+import cn.tr.plugin.operatelog.bo.OperateLogBO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+* 操作日志映射工具
+*
+* @author lf
+* @date  2023/04/17 16:17
+**/
+@Mapper
+public interface SysOperLogMapper {
+    SysOperLogMapper INSTANCE = Mappers.getMapper(SysOperLogMapper.class);
+
+    SysOperLogPO convertPO(SysOperLogDTO source);
+
+    SysOperLogDTO convertDto(SysOperLogPO source);
+
+    SysOperLogDTO convertDto(OperateLogBO source);
+
+    List<SysOperLogDTO> convertDtoList(List<SysOperLogPO> source);
+
+    List<SysOperLogPO> convertPOList(List<SysOperLogDTO> source);
+
+}

+ 0 - 26
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/log/OperLogMapper.java

@@ -1,26 +0,0 @@
-package cn.tr.module.sys.mapper.log;
-
-import cn.tr.module.sys.log.dto.SysOperLogDTO;
-import cn.tr.module.sys.log.po.SysOperLogPO;
-import cn.tr.plugin.operatelog.bo.OperateLogBO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-import java.util.*;
-/**
- * @ClassName : OperateMapper
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
-@Mapper
-public interface OperLogMapper {
-    OperLogMapper INSTANCE = Mappers.getMapper(OperLogMapper.class);
-
-    SysOperLogPO toOperLogPO(SysOperLogDTO source);
-
-    SysOperLogDTO toOperLogDto(OperateLogBO source);
-
-    SysOperLogDTO toOperLogDto(SysOperLogPO source);
-
-    List<SysOperLogDTO> toOperLogDto(List<SysOperLogPO> source);
-}

+ 30 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/config/OperLogConfig.java

@@ -0,0 +1,30 @@
+package cn.tr.module.sys.operLog.config;
+
+import cn.tr.module.sys.mapper.SysOperLogMapper;
+import cn.tr.module.sys.operLog.service.ISysOperLogService;
+import cn.tr.module.sys.user.service.ISysOrgService;
+import cn.tr.plugin.operatelog.strategy.OperateStrategy;
+import lombok.AllArgsConstructor;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @ClassName : OperLogConfig
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年04月17日
+ */
+@Configuration
+@AllArgsConstructor
+public class OperLogConfig {
+    private final ISysOperLogService sysOperLogService;
+
+    @PostConstruct
+    public void init() {
+        OperateStrategy.tr.logSaveConsumer=operLog->{
+            sysOperLogService.insertSysOperLog(SysOperLogMapper.INSTANCE.convertDto(operLog));
+        };;
+
+    }
+}

+ 57 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/controller/SysOperLogController.java

@@ -0,0 +1,57 @@
+package cn.tr.module.sys.operLog.controller;
+
+import cn.tr.module.sys.operLog.service.ISysOperLogService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.tr.core.pojo.CommonResult;
+import lombok.AllArgsConstructor;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import cn.tr.module.sys.operLog.dto.SysOperLogDTO;
+import cn.tr.module.sys.operLog.dto.SysOperLogQueryDTO;
+import java.util.*;
+import cn.tr.plugin.mybatis.base.BaseController;
+import org.springframework.web.bind.annotation.*;
+/**
+ * 操作日志
+ *
+ * @author lf
+ * @date  2023/04/17 16:17
+ */
+@Api(tags = "操作日志")
+@RestController
+@RequestMapping("/sys/operLog")
+@AllArgsConstructor
+public class SysOperLogController extends BaseController{
+
+    private final ISysOperLogService sysOperLogService;
+
+    @ApiOperationSupport(author = "lf",order = 1)
+    @ApiOperation(value="根据条件查询操作日志",notes = "权限: sys:operLog:query")
+    @PostMapping("/query/page")
+    @SaCheckPermission("sys:operLog:query")
+    public CommonResult<List<SysOperLogDTO>> selectList(@RequestBody SysOperLogQueryDTO query) {
+        startPage();
+        return CommonResult.success(sysOperLogService.selectSysOperLogList(query));
+    }
+
+    @ApiOperationSupport(author = "lf",order = 2)
+    @ApiOperation(value = "根据id查询操作日志",notes = "权限: sys:operLog:query")
+    @GetMapping("/detail/{id}")
+    @SaCheckPermission("sys:operLog:query")
+    public CommonResult<SysOperLogDTO> findById(@PathVariable("id") String id){
+        return CommonResult.success(sysOperLogService.selectSysOperLogById(id));
+    }
+
+    @ApiOperationSupport(author = "lf",order = 5)
+    @ApiOperation(value="删除操作日志",notes = "权限: sys:operLog:remove")
+    @PostMapping("/removeByIds")
+    @SaCheckPermission("sys:operLog:remove")
+    public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
+        return CommonResult.success(sysOperLogService.removeSysOperLogByIds(ids));
+    }
+}

+ 51 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/dto/SysOperLogDTO.java

@@ -0,0 +1,51 @@
+package cn.tr.module.sys.operLog.dto;
+
+import cn.tr.plugin.mybatis.pojo.BaseDTO;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import cn.tr.core.validation.Update;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+import java.util.*;
+/**
+ * 操作日志传输对象
+ *
+ * @author lf
+ * @date  2023/04/17 16:28
+ **/
+@Data
+@ApiModel("操作日志传输对象")
+@EqualsAndHashCode(callSuper = true)
+@ToString
+public class SysOperLogDTO extends BaseDTO  {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "id", position = 1)
+    @NotNull(message = "主键不能为空",groups = {Update.class})
+    private String id;
+    @ApiModelProperty(value = "操作名称", position = 2)
+    private String opName;
+    @ApiModelProperty(value = "用户IP", position = 3)
+    private String userIp;
+    @ApiModelProperty(value = "用户地址", position = 4)
+    private String loginLocation;
+    @ApiModelProperty(value = "类名称", position = 5)
+    private String javaClass;
+    @ApiModelProperty(value = "方法名称", position = 6)
+    private String javaMethod;
+    @ApiModelProperty(value = "操作时间", position = 7)
+    private Date opTime;
+    @ApiModelProperty(value = "执行时长", position = 8)
+    private Integer duration;
+    @ApiModelProperty(value = "操作用户", position = 9)
+    private String opUser;
+    @ApiModelProperty(value = "请求参数", position = 10)
+    private String requestArgs;
+    @ApiModelProperty(value = "响应类型", position = 11)
+    private Boolean responseType;
+    @ApiModelProperty(value = "浏览器UserAgent", position = 12)
+    private String userAgent;
+    @ApiModelProperty(value = "响应结果", position = 13)
+    private String resultJson;
+}

+ 26 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/dto/SysOperLogQueryDTO.java

@@ -0,0 +1,26 @@
+package cn.tr.module.sys.operLog.dto;
+
+import lombok.ToString;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import cn.tr.plugin.mybatis.pojo.BetweenQuery;
+import java.util.*;
+/**
+ * 操作日志查询参数
+ *
+ * @author lf
+ * @date  2023/04/17 16:17
+ **/
+@Data
+@ApiModel("操作日志查询参数")
+@ToString
+public class SysOperLogQueryDTO  {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "操作名称", position = 2)
+    private String opName;
+
+    @ApiModelProperty(value = "响应类型", position = 11)
+    private Boolean responseType;
+
+}

+ 76 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/po/SysOperLogPO.java

@@ -0,0 +1,76 @@
+package cn.tr.module.sys.operLog.po;
+
+import cn.tr.plugin.mybatis.pojo.TenantPO;   
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import java.util.*;
+/**
+ * 操作日志实体
+ *
+ * @author lf
+ * @date  2023/04/17 16:17
+ **/
+@Data
+@TableName("sys_oper_log")
+@EqualsAndHashCode(callSuper = true)
+@ToString
+public class SysOperLogPO extends TenantPO {
+
+    /** id */
+    @TableId
+    @ApiModelProperty(value = "id", position = 1)
+    private String id;
+
+    /** 操作名称 */
+    @ApiModelProperty(value = "操作名称", position = 2)
+    private String opName;
+
+    /** 用户IP */
+    @ApiModelProperty(value = "用户IP", position = 3)
+    private String userIp;
+
+    /** 用户地址 */
+    @ApiModelProperty(value = "用户地址", position = 4)
+    private String loginLocation;
+
+    /** 类名称 */
+    @ApiModelProperty(value = "类名称", position = 5)
+    private String javaClass;
+
+    /** 方法名称 */
+    @ApiModelProperty(value = "方法名称", position = 6)
+    private String javaMethod;
+
+    /** 操作时间 */
+    @ApiModelProperty(value = "操作时间", position = 7)
+    private Date opTime;
+
+    /** 执行时长 */
+    @ApiModelProperty(value = "执行时长", position = 8)
+    private Integer duration;
+
+    /** 操作用户 */
+    @ApiModelProperty(value = "操作用户", position = 9)
+    private String opUser;
+
+    /** 请求参数 */
+    @ApiModelProperty(value = "请求参数", position = 10)
+    private String requestArgs;
+
+    /** 响应类型 */
+    @ApiModelProperty(value = "响应类型", position = 11)
+    private Boolean responseType;
+
+    /** 浏览器UserAgent */
+    @ApiModelProperty(value = "浏览器UserAgent", position = 12)
+    private String userAgent;
+
+    /** 响应结果 */
+    @ApiModelProperty(value = "响应结果", position = 13)
+    private String resultJson;
+
+}

+ 9 - 8
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/log/repository/SysOperLogRepository.java → tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/repository/SysOperLogRepository.java

@@ -1,16 +1,17 @@
-package cn.tr.module.sys.log.repository;
+package cn.tr.module.sys.operLog.repository;
 
-import cn.tr.module.sys.log.po.SysOperLogPO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
-
+import java.util.*;
+import cn.tr.module.sys.operLog.po.SysOperLogPO;
 /**
- * @ClassName : SysOperLogMapper
- * @Description :
- * @Author : LF
- * @Date: 2023年03月24日
- */
+ * 操作日志Mapper接口
+ *
+ * @author lf
+ * @date  2023/04/17 16:17
+ **/
 @Repository
 @Mapper
 public interface SysOperLogRepository extends BaseMapper<SysOperLogPO> {

+ 54 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/service/ISysOperLogService.java

@@ -0,0 +1,54 @@
+package cn.tr.module.sys.operLog.service;
+
+import cn.tr.module.sys.operLog.dto.SysOperLogDTO;
+import cn.tr.module.sys.operLog.dto.SysOperLogQueryDTO;
+import java.util.*;
+
+/**
+ * 操作日志Service接口
+ *
+ * @author lf
+ * @date  2023/04/17 16:17
+ **/
+public interface ISysOperLogService{
+
+    /**
+     * 根据条件查询操作日志
+     * @param    query 查询参数
+     * @author   lf
+     * @date      2023/04/17 16:17
+     */
+    List<SysOperLogDTO> selectSysOperLogList(SysOperLogQueryDTO query);
+
+    /**
+     * 根据id查询操作日志
+     * @param    id 主键id
+     * @author   lf
+     * @date      2023/04/17 16:17
+     */
+    SysOperLogDTO selectSysOperLogById(String id);
+
+    /**
+     * 编辑操作日志
+     * @param   source 编辑实体类
+     * @author  lf
+     * @date     2023/04/17 16:17
+     */
+    boolean updateSysOperLogById(SysOperLogDTO source);
+
+    /**
+     * 新增操作日志
+     * @param   source 新增实体类
+     * @author lf
+     * @date  2023/04/17 16:17
+     */
+    boolean insertSysOperLog(SysOperLogDTO source);
+
+    /**
+     * 删除操作日志详情
+     * @param  ids 删除主键集合
+     * @author lf
+     * @date    2023/04/17 16:17
+     */
+    int removeSysOperLogByIds(Collection<String> ids);
+}

+ 90 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/operLog/service/impl/SysOperLogServiceImpl.java

@@ -0,0 +1,90 @@
+package cn.tr.module.sys.operLog.service.impl;
+
+import cn.tr.module.sys.operLog.service.ISysOperLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import cn.tr.module.sys.operLog.repository.SysOperLogRepository;
+import cn.tr.module.sys.operLog.po.SysOperLogPO;
+import cn.tr.module.sys.operLog.dto.SysOperLogDTO;
+import cn.tr.module.sys.operLog.dto.SysOperLogQueryDTO;
+import java.util.*;
+import cn.tr.module.sys.mapper.SysOperLogMapper;
+/**
+ * 操作日志Service接口实现类
+ *
+ * @author lf
+ * @date  2023/04/17 16:17
+ **/
+@Service
+public class SysOperLogServiceImpl implements ISysOperLogService {
+    @Autowired
+    private SysOperLogRepository baseRepository;
+
+
+    /**
+     * 根据条件查询操作日志
+     * @param    query 查询参数
+     * @author   lf
+     * @date      2023/04/17 16:17
+     */
+    @Override
+    public List<SysOperLogDTO> selectSysOperLogList(SysOperLogQueryDTO query){
+        return SysOperLogMapper.INSTANCE.convertDtoList(
+                baseRepository.selectList(new LambdaQueryWrapper<SysOperLogPO>()
+                        .like(Objects.nonNull(query.getOpName()),SysOperLogPO::getOpName,
+                                query.getOpName())
+                        .eq(Objects.nonNull(query.getResponseType()),SysOperLogPO::getResponseType,
+                                query.getResponseType())
+                )
+        );
+    };
+
+    /**
+     * 根据id查询操作日志
+     * @param    id 主键id
+     * @author   lf
+     * @date      2023/04/17 16:17
+     */
+    @Override
+    public SysOperLogDTO selectSysOperLogById(String id){
+        return SysOperLogMapper.INSTANCE.convertDto(baseRepository.selectById(id));
+    };
+
+    /**
+     * 编辑操作日志
+     * @param   source 编辑实体类
+     * @author  lf
+     * @date     2023/04/17 16:17
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean updateSysOperLogById(SysOperLogDTO source){
+        return baseRepository.updateById(SysOperLogMapper.INSTANCE.convertPO(source))!=0;
+    };
+
+    /**
+     * 新增操作日志
+     * @param   source 新增实体类
+     * @author lf
+     * @date  2023/04/17 16:17
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertSysOperLog(SysOperLogDTO source){
+        return baseRepository.insert(SysOperLogMapper.INSTANCE.convertPO(source))!=0;
+    };
+
+    /**
+     * 删除操作日志详情
+     * @param  ids 删除主键集合
+     * @author lf
+     * @date    2023/04/17 16:17
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int removeSysOperLogByIds(Collection<String> ids){
+        return baseRepository.deleteBatchIds(ids);
+    };
+}

+ 5 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantController.java

@@ -2,6 +2,7 @@ package cn.tr.module.sys.tenant.controller;
 
 import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.tr.core.validation.Insert;
@@ -26,7 +27,7 @@ import org.springframework.web.bind.annotation.*;
  * @author lf
  * @date  2023/04/15 15:27
  */
-@Api(tags = "租户列表控制器")
+@Api(tags = "租户列表")
 @RestController
 @RequestMapping("/sys/tenant")
 @AllArgsConstructor
@@ -55,6 +56,7 @@ public class SysTenantController extends BaseController{
     @ApiOperation(value="添加租户列表",notes = "权限: sys:tenant:add")
     @PostMapping("/add")
     @SaCheckPermission("sys:tenant:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysTenantAddDTO source) {
         return CommonResult.success(sysTenantService.insertSysTenant(source));
     }
@@ -63,6 +65,7 @@ public class SysTenantController extends BaseController{
     @ApiOperation(value="通过主键id编辑租户列表",notes = "权限: sys:tenant:edit")
     @PostMapping("/edit")
     @SaCheckPermission("sys:tenant:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysTenantCommonDTO source) {
         return CommonResult.success(sysTenantService.updateSysTenantById(source));
     }
@@ -71,6 +74,7 @@ public class SysTenantController extends BaseController{
     @ApiOperation(value="删除租户列表",notes = "权限: sys:tenant:remove")
     @PostMapping("/removeByIds")
     @SaCheckPermission("sys:tenant:remove")
+    @OperateLog
     public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
         return CommonResult.success(sysTenantService.removeSysTenantByIds(ids));
     }

+ 17 - 13
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantPackageController.java

@@ -1,5 +1,6 @@
-package cn.tr.module.tenant.tenantPackage.controller;
+package cn.tr.module.sys.tenant.controller;
 
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.tr.core.validation.Insert;
@@ -25,51 +26,54 @@ import org.springframework.web.bind.annotation.*;
  * @author lf
  * @date  2023/04/15 15:28
  */
-@Api(tags = "租户套餐控制器")
+@Api(tags = "租户套餐")
 @RestController
-@RequestMapping("/tenant/tenantPackage")
+@RequestMapping("/sys/tenantPackage")
 @AllArgsConstructor
 public class SysTenantPackageController extends BaseController{
 
     private final ISysTenantPackageService sysTenantPackageService;
 
     @ApiOperationSupport(author = "lf",order = 1)
-    @ApiOperation(value="根据条件查询租户套餐",notes = "权限: tenant:tenantPackage:query")
+    @ApiOperation(value="根据条件查询租户套餐",notes = "权限: sys:tenantPackage:query")
     @PostMapping("/query/page")
-    @SaCheckPermission("tenant:tenantPackage:query")
+    @SaCheckPermission("sys:tenantPackage:query")
     public CommonResult<List<SysTenantPackageDTO>> selectList(@RequestBody SysTenantPackageQueryDTO query) {
         startPage();
         return CommonResult.success(sysTenantPackageService.selectSysTenantPackageList(query));
     }
 
     @ApiOperationSupport(author = "lf",order = 2)
-    @ApiOperation(value = "根据id查询租户套餐",notes = "权限: tenant:tenantPackage:query")
+    @ApiOperation(value = "根据id查询租户套餐",notes = "权限: sys:tenantPackage:query")
     @GetMapping("/detail/{id}")
-    @SaCheckPermission("tenant:tenantPackage:query")
+    @SaCheckPermission("sys:tenantPackage:query")
     public CommonResult<SysTenantPackageDTO> findById(@PathVariable("id") String id){
         return CommonResult.success(sysTenantPackageService.selectSysTenantPackageById(id));
     }
 
     @ApiOperationSupport(author = "lf",order = 3)
-    @ApiOperation(value="添加租户套餐",notes = "权限: tenant:tenantPackage:add")
+    @ApiOperation(value="添加租户套餐",notes = "权限: sys:tenantPackage:add")
     @PostMapping("/add")
-    @SaCheckPermission("tenant:tenantPackage:add")
+    @SaCheckPermission("sys:tenantPackage:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysTenantPackageDTO source) {
         return CommonResult.success(sysTenantPackageService.insertSysTenantPackage(source));
     }
 
     @ApiOperationSupport(author = "lf",order = 4)
-    @ApiOperation(value="通过主键id编辑租户套餐",notes = "权限: tenant:tenantPackage:edit")
+    @ApiOperation(value="通过主键id编辑租户套餐",notes = "权限: sys:tenantPackage:edit")
     @PostMapping("/edit")
-    @SaCheckPermission("tenant:tenantPackage:edit")
+    @SaCheckPermission("sys:tenantPackage:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysTenantPackageDTO source) {
         return CommonResult.success(sysTenantPackageService.updateSysTenantPackageById(source));
     }
 
     @ApiOperationSupport(author = "lf",order = 5)
-    @ApiOperation(value="删除租户套餐",notes = "权限: tenant:tenantPackage:remove")
+    @ApiOperation(value="删除租户套餐",notes = "权限: sys:tenantPackage:remove")
     @PostMapping("/removeByIds")
-    @SaCheckPermission("tenant:tenantPackage:remove")
+    @SaCheckPermission("sys:tenantPackage:remove")
+    @OperateLog
     public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
         return CommonResult.success(sysTenantPackageService.removeSysTenantPackageByIds(ids));
     }

+ 4 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysOrgController.java

@@ -10,6 +10,7 @@ import cn.tr.module.sys.user.dto.SysOrgQueryDTO;
 import cn.tr.module.sys.user.dto.SysOrgTreeDTO;
 import cn.tr.module.sys.user.service.ISysOrgService;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -60,6 +61,7 @@ public class SysOrgController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:org:edit")
     @ApiOperation(value = "根据id更新组织",notes = "权限: sys:org:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysOrgDTO source){
         return CommonResult.success(orgService.updateSysOrgById(source));
     }
@@ -68,6 +70,7 @@ public class SysOrgController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:org:add")
     @ApiOperation(value = "新增组织",notes = "权限: sys:org:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysOrgDTO source){
         return CommonResult.success(orgService.insertSysOrg(source));
     }
@@ -76,6 +79,7 @@ public class SysOrgController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "删除组织",notes = "权限: sys:org:del")
     @SaCheckPermission("sys:org:del")
+    @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(orgService.deleteSysOrgByIds(ids));
     }

+ 5 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPortalController.java

@@ -12,6 +12,7 @@ import cn.tr.module.sys.user.dto.SysPortalQueryDTO;
 import cn.tr.module.sys.user.service.ISysPortalMenuService;
 import cn.tr.module.sys.user.service.ISysPortalService;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -65,6 +66,7 @@ public class SysPortalController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "根据id查询门户",notes = "权限: sys:portal:query")
     @SaCheckPermission("sys:portal:query")
+    @OperateLog
     public CommonResult<SysPortalDTO> findById(@PathVariable("id") String id){
         return CommonResult.success(portalService.selectSysPortalById(id));
     }
@@ -73,6 +75,7 @@ public class SysPortalController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:portal:edit")
     @ApiOperation(value = "根据id更新门户",notes = "权限: sys:portal:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysPortalDTO source){
         return CommonResult.success(portalService.updateSysPortalById(source));
     }
@@ -81,6 +84,7 @@ public class SysPortalController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:portal:add")
     @ApiOperation(value = "新增门户",notes = "权限: sys:portal:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysPortalDTO source){
         return CommonResult.success(portalService.insertSysPortal(source));
     }
@@ -89,6 +93,7 @@ public class SysPortalController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "删除门户",notes = "权限: sys:portal:del")
     @SaCheckPermission("sys:portal:del")
+    @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(portalService.deleteSysPortalByIds(ids));
     }

+ 10 - 6
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPositionController.java

@@ -9,6 +9,7 @@ import cn.tr.module.sys.user.dto.SysPositionDTO;
 import cn.tr.module.sys.user.dto.SysPositionQueryDTO;
 import cn.tr.module.sys.user.service.ISysPositionService;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -32,7 +33,7 @@ public class SysPositionController extends BaseController {
     private final ISysPositionService PositionService;
 
     @PostMapping("/query/page")
-    @ApiOperationSupport(author = "lf")
+    @ApiOperationSupport(author = "lf",order = 1)
     @ApiOperation(value = "根据条件查询岗位",notes = "权限: sys:pos:query")
     @SaCheckPermission("sys:pos:query")
     public TableDataInfo<SysPositionDTO> selectList(@RequestBody SysPositionQueryDTO query){
@@ -41,7 +42,7 @@ public class SysPositionController extends BaseController {
     }
 
     @GetMapping("/detail/{id}")
-    @ApiOperationSupport(author = "lf")
+    @ApiOperationSupport(author = "lf",order = 2)
     @ApiOperation(value = "根据id查询岗位",notes = "权限: sys:pos:query")
     @SaCheckPermission("sys:pos:query")
     public CommonResult<SysPositionDTO> findById(@PathVariable("id") String id){
@@ -49,29 +50,32 @@ public class SysPositionController extends BaseController {
     }
 
     @PostMapping("/edit")
-    @ApiOperationSupport(author = "lf")
+    @ApiOperationSupport(author = "lf",order = 3)
     @SaCheckPermission("sys:pos:edit")
     @ApiOperation(value = "根据id更新岗位",notes = "权限: sys:pos:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysPositionDTO source){
         return CommonResult.success(PositionService.updateSysPositionById(source));
     }
 
     @PostMapping("/add")
-    @ApiOperationSupport(author = "lf")
+    @ApiOperationSupport(author = "lf",order = 4)
     @SaCheckPermission("sys:pos:add")
     @ApiOperation(value = "新增岗位",notes = "权限: sys:pos:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysPositionDTO source){
         return CommonResult.success(PositionService.insertSysPosition(source));
     }
 
     @PostMapping("/deleteByIds")
-    @ApiOperationSupport(author = "lf")
+    @ApiOperationSupport(author = "lf",order = 5)
     @ApiOperation(value = "删除岗位",notes = "权限: sys:pos:del")
     @SaCheckPermission("sys:pos:del")
+    @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(PositionService.deleteSysPositionByIds(ids));
     }
-    
+
 
     //todo 导出
 

+ 6 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java

@@ -13,6 +13,7 @@ import cn.tr.module.sys.user.service.ISysRoleMenuService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.user.vo.RouteItemVO;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -58,6 +59,7 @@ public class SysRoleController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "为角色分配权限",notes = "权限: sys:role:assign")
     @SaCheckPermission("sys:role:assign")
+    @OperateLog
     public CommonResult<Boolean> selectList(@RequestBody@Validated SysRoleMenuAssignDTO source){
         List<String> menuIds = source.getMenuIds();
         roleMenuService.assignRoleMenu(menuIds
@@ -74,6 +76,7 @@ public class SysRoleController extends BaseController {
 
     @GetMapping("/detail/{id}")
     @ApiOperationSupport(author = "lf")
+    @OperateLog
     @ApiOperation(value = "根据id查询角色",notes = "权限: sys:role:query")
     @SaCheckPermission("sys:role:query")
     public CommonResult<SysRoleDTO> findById(@PathVariable("id") String id){
@@ -84,6 +87,7 @@ public class SysRoleController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:role:edit")
     @ApiOperation(value = "根据id更新角色",notes = "权限: sys:role:edit")
+    @OperateLog
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysRoleDTO source){
         source.setType(RoleEnum.custom.name());
         return CommonResult.success(roleService.updateSysRoleById(source));
@@ -92,6 +96,7 @@ public class SysRoleController extends BaseController {
     @PostMapping("/add")
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:role:add")
+    @OperateLog
     @ApiOperation(value = "新增角色",notes = "权限: sys:role:add")
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysRoleDTO source){
         source.setType(RoleEnum.custom.name());
@@ -102,6 +107,7 @@ public class SysRoleController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "删除角色",notes = "权限: sys:role:del")
     @SaCheckPermission("sys:role:del")
+    @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(roleService.deleteSysRoleByIds(ids));
     }

+ 3 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysUserController.java

@@ -10,6 +10,7 @@ import cn.tr.module.sys.user.dto.SysUserEditDTO;
 import cn.tr.module.sys.user.dto.SysUserQueryDTO;
 import cn.tr.module.sys.user.service.ISysUserService;
 import cn.tr.plugin.mybatis.base.BaseController;
+import cn.tr.plugin.operatelog.annotation.OperateLog;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -61,6 +62,7 @@ public class SysUserController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @SaCheckPermission("sys:user:add")
     @ApiOperation(value = "新增用户",notes = "权限: sys:user:add")
+    @OperateLog
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysUserDTO source){
         return CommonResult.success(userService.insertSysUser(source));
     }
@@ -69,6 +71,7 @@ public class SysUserController extends BaseController {
     @ApiOperationSupport(author = "lf")
     @ApiOperation(value = "删除用户",notes = "权限: sys:user:del")
     @SaCheckPermission("sys:user:del")
+    @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(userService.deleteSysUserByIds(ids));
     }

+ 1 - 17
tr-plugins/tr-spring-boot-starter-plugin-operatelog/src/main/java/cn/tr/plugin/operatelog/annotation/OperateLog.java

@@ -20,24 +20,13 @@ public @interface OperateLog {
 
     // ========== 模块字段 ==========
 
-    /**
-     * 操作模块
-     *
-     * 为空时,会尝试读取 {@link Api#value()} 属性
-     */
-    String module() default "";
     /**
      * 操作名
      *
      * 为空时,会尝试读取 {@link ApiOperation#value()} ()} 属性
      */
     String name() default "";
-    /**
-     * 操作分类
-     *
-     * 实际并不是数组,因为枚举不能设置 null 作为默认值
-     */
-    OperateTypeEnum[] type() default {};
+
 
     // ========== 开关字段 ==========
 
@@ -54,9 +43,4 @@ public @interface OperateLog {
      */
     boolean logResultData() default true;
 
-    /**
-     * 是否为登录日志
-     */
-    boolean isLogin() default false;
-
 }

+ 25 - 57
tr-plugins/tr-spring-boot-starter-plugin-operatelog/src/main/java/cn/tr/plugin/operatelog/bo/OperateLogBO.java

@@ -3,6 +3,7 @@ package cn.tr.plugin.operatelog.bo;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.Map;
 
 /**
@@ -12,85 +13,52 @@ import java.util.Map;
  */
 @Data
 public class OperateLogBO {
-
     /**
-     * 用户id
+     * 操作名称
      */
-    private String userId;
-
-    /**
-     * 操作模块
-     */
-    private String module;
-
+    private String opName;
     /**
-     * 操作名
+     * 用户IP
      */
-    private String name;
-
-    /**
-     * 操作分类
-     */
-    private Integer type;
-
-    /**
-     * 操作明细
-     */
-    private String content;
-
+    private String userIp;
     /**
-     * 请求方法名
+     * 用户地址
      */
-    private String requestMethod;
-
+    private String loginLocation;
     /**
-     * 请求地址
+     * 类名称
      */
-    private String requestUrl;
-
+    private String javaClass;
     /**
-     * 用户 IP
+     * 方法名称
      */
-    private String userIp;
-
-    /**
-     * 浏览器 UserAgent
-     */
-    private String userAgent;
-
+    private String javaMethod;
     /**
-     * Java 方法名
+     * 操作时间
      */
-    private String javaMethod;
-
+    private Date opTime;
     /**
-     * Java 方法的参数
+     * 执行时长
      */
-    private String javaMethodArgs;
-
+    private Integer duration;
     /**
-     * 开始时间
+     * 操作用户
      */
-    private LocalDateTime startTime;
-
+    private String opUser;
     /**
-     * 执行时长,单位:毫秒
+     * 请求参数
      */
-    private Integer duration;
-
+    private String requestArgs;
     /**
-     * 结果码
+     * 响应类型
      */
-    private String resultCode;
-
+    private Boolean responseType;
     /**
-     * 结果提示
+     * 浏览器UserAgent
      */
-    private String resultMsg;
-
+    private String userAgent;
     /**
-     * 结果数据
+     * 响应结果
      */
-    private String resultData;
-
+    private String resultJson;
 }

+ 32 - 121
tr-plugins/tr-spring-boot-starter-plugin-operatelog/src/main/java/cn/tr/plugin/operatelog/config/OperateLogAspect.java

@@ -1,21 +1,20 @@
 package cn.tr.plugin.operatelog.config;
 
-import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.core.strategy.ExceptionStrategy;
 import cn.tr.core.strategy.LoginUserStrategy;
+import cn.tr.core.utils.IpUtil;
 import cn.tr.core.utils.JsonUtils;
 import cn.tr.core.utils.ServletUtils;
 import cn.tr.plugin.operatelog.annotation.OperateLog;
 import cn.tr.plugin.operatelog.bo.OperateLogBO;
-import cn.tr.plugin.operatelog.enums.OperateTypeEnum;
 import cn.tr.plugin.operatelog.strategy.OperateStrategy;
 import cn.tr.plugin.web.context.RequestContextHolder;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
@@ -28,9 +27,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Array;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Predicate;
 import java.util.stream.IntStream;
@@ -44,15 +41,6 @@ import java.util.stream.IntStream;
 @Aspect
 @Slf4j
 public class OperateLogAspect {
-//    @Around("@annotation(operation)")
-//    public Object around(ProceedingJoinPoint joinPoint, ApiOperation operation) throws Throwable {
-//        // 可能也添加了 @ApiOperation 注解
-//        OperateLog operateLog = getMethodAnnotation(joinPoint,
-//                OperateLog.class);
-//        return around0(joinPoint, operateLog, operation);
-//    }
-
-//    @Around("!@annotation(io.swagger.annotations.ApiOperation) && @annotation(operateLog)")
     @Around("@annotation(operateLog)")
     // 兼容处理,只添加 @OperateLog 注解的情况
     public Object around(ProceedingJoinPoint joinPoint,
@@ -64,7 +52,7 @@ public class OperateLogAspect {
                            OperateLog operateLog,
                            ApiOperation apiOperation) throws Throwable {
         // 记录开始时间
-        LocalDateTime startTime = LocalDateTime.now();
+        Date startTime = new Date();
         try {
             // 执行原有方法
             Object result = joinPoint.proceed();
@@ -81,7 +69,7 @@ public class OperateLogAspect {
     private void log(ProceedingJoinPoint joinPoint,
                      OperateLog operateLog,
                      ApiOperation apiOperation,
-                     LocalDateTime startTime, Object result, Throwable exception) {
+                     Date startTime, Object result, Throwable exception) {
         try {
             // 判断不记录的情况
             if (!isLogEnable(joinPoint, operateLog)) {
@@ -96,10 +84,10 @@ public class OperateLogAspect {
         }
     }
 
-    private void log0(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation, LocalDateTime startTime, Object result, Throwable exception) {
+    private void log0(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation, Date startTime, Object result, Throwable exception) {
         OperateLogBO log = new OperateLogBO();
         // 补全通用字段
-        log.setStartTime(startTime);
+        log.setOpTime(startTime);
         // 补充用户信息
         fillUserFields(log);
         // 补全模块信息
@@ -117,29 +105,27 @@ public class OperateLogAspect {
     private static void fillMethodFields(OperateLogBO operateLogObj,
                                          ProceedingJoinPoint joinPoint,
                                          OperateLog operateLog,
-                                         LocalDateTime startTime, Object result, Throwable exception) {
+                                         Date startTime, Object result, Throwable exception) {
         MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+
+        operateLogObj.setJavaClass(methodSignature.getMethod().getDeclaringClass().getCanonicalName());
         operateLogObj.setJavaMethod(methodSignature.toString());
-        if (operateLog == null || operateLog.logArgs()) {
-            operateLogObj.setJavaMethodArgs(obtainMethodArgs(joinPoint));
-        }
-        if (operateLog == null || operateLog.logResultData()) {
-            operateLogObj.setResultData(obtainResultData(result));
-        }
-        operateLogObj.setDuration((int) (LocalDateTimeUtil.between(startTime, LocalDateTime.now()).toMillis()));
-        // (正常)处理 resultCode 和 resultMsg 字段
-        if (result instanceof CommonResult) {
-            CommonResult<?> commonResult = (CommonResult<?>) result;
-            operateLogObj.setResultCode(commonResult.getCode());
-            operateLogObj.setResultMsg(commonResult.getErrorMsg());
-        } else {
-            operateLogObj.setResultCode(TRExcCode.SUCCESS.getErrCode());
+
+
+        operateLogObj.setDuration((int) (DateUtil.between(startTime,DateUtil.date(),DateUnit.MS)));
+        // 处理响应结果
+        if (result != null) {
+            operateLogObj.setResponseType(true);
+            if (operateLog == null || operateLog.logArgs()) {
+                operateLogObj.setResultJson(obtainMethodArgs(joinPoint));
+            }
         }
         // (异常)处理 resultCode 和 resultMsg 字段
         if (exception != null) {
-            CommonResult<?> commonResult = ExceptionStrategy.tr.exceptionHandle(ServletUtils.getRequest(),exception);
-            operateLogObj.setResultCode(commonResult.getCode());
-            operateLogObj.setResultMsg(commonResult.getErrorMsg());
+            operateLogObj.setResponseType(false);
+            if (operateLog == null || operateLog.logArgs()) {
+                operateLogObj.setResultJson(obtainResultData( ExceptionStrategy.tr.exceptionHandle(ServletUtils.getRequest(),exception)));
+            }
         }
     }
 
@@ -200,93 +186,30 @@ public class OperateLogAspect {
             return;
         }
         // 补全请求信息
-        operateLogObj.setRequestMethod(request.getMethod());
-        operateLogObj.setRequestUrl(request.getRequestURI());
-        operateLogObj.setUserIp(ServletUtils.getClientIP(request));
+        String clientIP = ServletUtils.getClientIP(request);
+        operateLogObj.setUserIp(clientIP);
+        operateLogObj.setLoginLocation(IpUtil.getCityInfo(clientIP));
         operateLogObj.setUserAgent(ServletUtils.getUserAgent(request));
     }
 
     private void fillUserFields(OperateLogBO log) {
-        log.setUserId(LoginUserStrategy.tr.getCurrentUserId());
+        log.setOpUser(LoginUserStrategy.tr.getCurrentUsername());
     }
 
     private static void fillModuleFields(OperateLogBO operateLogObj,
                                          ProceedingJoinPoint joinPoint,
                                          OperateLog operateLog,
                                          ApiOperation apiOperation) {
-        // module 属性
-        if (operateLog != null) {
-            operateLogObj.setModule(operateLog.module());
-        }
-        if (StrUtil.isEmpty(operateLogObj.getModule())) {
-            Tag tag = getClassAnnotation(joinPoint, Tag.class);
-            if (tag != null) {
-                // 优先读取 @Tag 的 name 属性
-                if (StrUtil.isNotEmpty(tag.name())) {
-                    operateLogObj.setModule(tag.name());
-                }
-                // 没有的话,读取 @API 的 description 属性
-                if (StrUtil.isEmpty(operateLogObj.getModule()) && ArrayUtil.isNotEmpty(tag.description())) {
-                    operateLogObj.setModule(tag.description());
-                }
-            }
-        }
+
         // name 属性
         if (operateLog != null) {
-            operateLogObj.setName(operateLog.name());
-        }
-        if (StrUtil.isEmpty(operateLogObj.getName()) && apiOperation != null) {
-            operateLogObj.setName(apiOperation.value());
+            operateLogObj.setOpName(operateLog.name());
         }
-        // type 属性
-        if (operateLog != null && ArrayUtil.isNotEmpty(operateLog.type())) {
-            operateLogObj.setType(operateLog.type()[0].getType());
-        }
-        if (operateLogObj.getType() == null) {
-            RequestMethod requestMethod = obtainFirstMatchRequestMethod(obtainRequestMethod(joinPoint));
-            OperateTypeEnum operateLogType = convertOperateLogType(requestMethod);
-            operateLogObj.setType(operateLogType != null ? operateLogType.getType() : null);
+        if (StrUtil.isEmpty(operateLogObj.getOpName()) && apiOperation != null) {
+            operateLogObj.setOpName(apiOperation.value());
         }
         // content
-        operateLogObj.setContent(RequestContextHolder.getRequestBody());
-    }
-
-
-    private static RequestMethod obtainFirstMatchRequestMethod(RequestMethod[] requestMethods) {
-        if (ArrayUtil.isEmpty(requestMethods)) {
-            return null;
-        }
-        // 优先,匹配最优的 POST、PUT、DELETE
-        RequestMethod result = obtainFirstLogRequestMethod(requestMethods);
-        if (result != null) {
-            return result;
-        }
-        // 然后,匹配次优的 GET
-        result = Arrays.stream(requestMethods).filter(requestMethod -> requestMethod == RequestMethod.GET)
-                .findFirst().orElse(null);
-        if (result != null) {
-            return result;
-        }
-        // 兜底,获得第一个
-        return requestMethods[0];
-    }
-
-    private static OperateTypeEnum convertOperateLogType(RequestMethod requestMethod) {
-        if (requestMethod == null) {
-            return null;
-        }
-        switch (requestMethod) {
-            case GET:
-                return OperateTypeEnum.GET;
-            case POST:
-                return OperateTypeEnum.CREATE;
-            case PUT:
-                return OperateTypeEnum.UPDATE;
-            case DELETE:
-                return OperateTypeEnum.DELETE;
-            default:
-                return OperateTypeEnum.OTHER;
-        }
+        operateLogObj.setRequestArgs(RequestContextHolder.getRequestBody());
     }
 
     private static boolean isLogEnable(ProceedingJoinPoint joinPoint,
@@ -318,16 +241,4 @@ public class OperateLogAspect {
                 ((MethodSignature) joinPoint.getSignature()).getMethod(), RequestMapping.class);
         return requestMapping != null ? requestMapping.method() : new RequestMethod[]{};
     }
-
-
-    private static <T extends Annotation> T getMethodAnnotation(ProceedingJoinPoint joinPoint, Class<T> annotationClass) {
-        return ((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(annotationClass);
-    }
-
-    @SuppressWarnings("SameParameterValue")
-    private static <T extends Annotation> T getClassAnnotation(ProceedingJoinPoint joinPoint, Class<T> annotationClass) {
-        return ((MethodSignature) joinPoint.getSignature()).getMethod().getDeclaringClass().getAnnotation(annotationClass);
-    }
-
-
 }