Browse Source

🔧 简化 loginLog 和 operateLog 模块的 VO

YunaiV 1 year ago
parent
commit
4225db217d
21 changed files with 176 additions and 558 deletions
  1. 0 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java
  2. 13 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java
  3. 20 34
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java
  4. 0 42
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java
  5. 0 40
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java
  6. 0 28
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExportReqVO.java
  7. 34 7
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java
  8. 0 85
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java
  9. 0 42
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java
  10. 0 31
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java
  11. 75 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java
  12. 0 24
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java
  13. 9 22
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java
  14. 0 17
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java
  15. 0 17
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java
  16. 4 14
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java
  17. 4 11
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java
  18. 2 13
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java
  19. 14 26
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java
  20. 0 34
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java
  21. 1 50
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java

+ 0 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/vo/ErrorCodeRespVO.java

@@ -26,17 +26,14 @@ public class ErrorCodeRespVO {
     private Integer type;
 
     @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard")
-    @NotNull(message = "应用名不能为空")
     @ExcelProperty("应用名")
     private String applicationName;
 
     @Schema(description = "错误码编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1234")
-    @NotNull(message = "错误码编码不能为空")
     @ExcelProperty("错误码编码")
     private Integer code;
 
     @Schema(description = "错误码错误提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "帅气")
-    @NotNull(message = "错误码错误提示不能为空")
     @ExcelProperty("错误码错误提示")
     private String message;
 

+ 13 - 13
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/LoginLogController.java

@@ -1,18 +1,17 @@
 package cn.iocoder.yudao.module.system.controller.admin.logger;
 
-import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExcelVO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO;
-import cn.iocoder.yudao.module.system.convert.logger.LoginLogConvert;
+import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -25,6 +24,7 @@ import javax.validation.Valid;
 import java.io.IOException;
 import java.util.List;
 
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 
 @Tag(name = "管理后台 - 登录日志")
@@ -39,21 +39,21 @@ public class LoginLogController {
     @GetMapping("/page")
     @Operation(summary = "获得登录日志分页列表")
     @PreAuthorize("@ss.hasPermission('system:login-log:query')")
-    public CommonResult<PageResult<LoginLogRespVO>> getLoginLogPage(@Valid LoginLogPageReqVO reqVO) {
-        PageResult<LoginLogDO> page = loginLogService.getLoginLogPage(reqVO);
-        return CommonResult.success(LoginLogConvert.INSTANCE.convertPage(page));
+    public CommonResult<PageResult<LoginLogRespVO>> getLoginLogPage(@Valid LoginLogPageReqVO pageReqVO) {
+        PageResult<LoginLogDO> pageResult = loginLogService.getLoginLogPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, LoginLogRespVO.class));
     }
 
     @GetMapping("/export")
     @Operation(summary = "导出登录日志 Excel")
     @PreAuthorize("@ss.hasPermission('system:login-log:export')")
     @OperateLog(type = EXPORT)
-    public void exportLoginLog(HttpServletResponse response, @Valid LoginLogExportReqVO reqVO) throws IOException {
-        List<LoginLogDO> list = loginLogService.getLoginLogList(reqVO);
-        // 拼接数据
-        List<LoginLogExcelVO> data = LoginLogConvert.INSTANCE.convertList(list);
+    public void exportLoginLog(HttpServletResponse response, @Valid LoginLogPageReqVO exportReqVO) throws IOException {
+        exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<LoginLogDO> list = loginLogService.getLoginLogPage(exportReqVO).getList();
         // 输出
-        ExcelUtils.write(response, "登录日志.xls", "数据列表", LoginLogExcelVO.class, data);
+        ExcelUtils.write(response, "登录日志.xls", "数据列表", LoginLogRespVO.class,
+                BeanUtils.toBean(list, LoginLogRespVO.class));
     }
 
 }

+ 20 - 34
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java

@@ -1,22 +1,19 @@
 package cn.iocoder.yudao.module.system.controller.admin.logger;
 
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
 import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
-import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -27,12 +24,11 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 
 @Tag(name = "管理后台 - 操作日志")
@@ -49,37 +45,27 @@ public class OperateLogController {
     @GetMapping("/page")
     @Operation(summary = "查看操作日志分页列表")
     @PreAuthorize("@ss.hasPermission('system:operate-log:query')")
-    public CommonResult<PageResult<OperateLogRespVO>> pageOperateLog(@Valid OperateLogPageReqVO reqVO) {
-        PageResult<OperateLogDO> pageResult = operateLogService.getOperateLogPage(reqVO);
-
+    public CommonResult<PageResult<OperateLogRespVO>> pageOperateLog(@Valid OperateLogPageReqVO pageReqVO) {
+        PageResult<OperateLogDO> pageResult = operateLogService.getOperateLogPage(pageReqVO);
         // 获得拼接需要的数据
-        Collection<Long> userIds = CollectionUtils.convertList(pageResult.getList(), OperateLogDO::getUserId);
-        Map<Long, AdminUserDO> userMap = userService.getUserMap(userIds);
-        // 拼接数据
-        List<OperateLogRespVO> list = new ArrayList<>(pageResult.getList().size());
-        pageResult.getList().forEach(operateLog -> {
-            OperateLogRespVO respVO = OperateLogConvert.INSTANCE.convert(operateLog);
-            list.add(respVO);
-            // 拼接用户信息
-            MapUtils.findAndThen(userMap, operateLog.getUserId(), user -> respVO.setUserNickname(user.getNickname()));
-        });
-        return success(new PageResult<>(list, pageResult.getTotal()));
+        Map<Long, AdminUserDO> userMap = userService.getUserMap(
+                convertList(pageResult.getList(), OperateLogDO::getUserId));
+        return success(new PageResult<>(OperateLogConvert.INSTANCE.convertList(pageResult.getList(), userMap),
+                pageResult.getTotal()));
     }
 
     @Operation(summary = "导出操作日志")
     @GetMapping("/export")
     @PreAuthorize("@ss.hasPermission('system:operate-log:export')")
     @OperateLog(type = EXPORT)
-    public void exportOperateLog(HttpServletResponse response, @Valid OperateLogExportReqVO reqVO) throws IOException {
-        List<OperateLogDO> list = operateLogService.getOperateLogList(reqVO);
-
-        // 获得拼接需要的数据
-        Collection<Long> userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId);
-        Map<Long, AdminUserDO> userMap = userService.getUserMap(userIds);
-        // 拼接数据
-        List<OperateLogExcelVO> excelDataList = OperateLogConvert.INSTANCE.convertList(list, userMap);
+    public void exportOperateLog(HttpServletResponse response, @Valid OperateLogPageReqVO exportReqVO) throws IOException {
+        exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<OperateLogDO> list = operateLogService.getOperateLogPage(exportReqVO).getList();
         // 输出
-        ExcelUtils.write(response, "操作日志.xls", "数据列表", OperateLogExcelVO.class, excelDataList);
+        Map<Long, AdminUserDO> userMap = userService.getUserMap(
+                convertList(list, OperateLogDO::getUserId));
+        ExcelUtils.write(response, "操作日志.xls", "数据列表", OperateLogRespVO.class,
+                OperateLogConvert.INSTANCE.convertList(list, userMap));
     }
 
 }

+ 0 - 42
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogBaseVO.java

@@ -1,42 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-/**
- * 登录日志 Base VO,提供给添加、修改、详细的子 VO 使用
- * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
- */
-@Data
-public class LoginLogBaseVO {
-
-    @Schema(description = "日志类型,参见 LoginLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "日志类型不能为空")
-    private Integer logType;
-
-    @Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
-    @NotEmpty(message = "链路追踪编号不能为空")
-    private String traceId;
-
-    @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
-    @NotBlank(message = "用户账号不能为空")
-    @Size(max = 30, message = "用户账号长度不能超过30个字符")
-    private String username;
-
-    @Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "登录结果不能为空")
-    private Integer result;
-
-    @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
-    @NotEmpty(message = "用户 IP 不能为空")
-    private String userIp;
-
-    @Schema(description = "浏览器 UserAgent", example = "Mozilla/5.0")
-    private String userAgent;
-
-}

+ 0 - 40
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExcelVO.java

@@ -1,40 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog;
-
-import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
-import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
-import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-/**
- * 登录日志 Excel 导出响应 VO
- */
-@Data
-public class LoginLogExcelVO {
-
-    @ExcelProperty("日志主键")
-    private Long id;
-
-    @ExcelProperty("用户账号")
-    private String username;
-
-    @ExcelProperty(value = "日志类型", converter = DictConvert.class)
-    @DictFormat(DictTypeConstants.LOGIN_TYPE)
-    private Integer logType;
-
-    @ExcelProperty(value = "登录结果", converter = DictConvert.class)
-    @DictFormat(DictTypeConstants.LOGIN_RESULT)
-    private Integer result;
-
-    @ExcelProperty("登录 IP")
-    private String userIp;
-
-    @ExcelProperty("浏览器 UA")
-    private String userAgent;
-
-    @ExcelProperty("登录时间")
-    private LocalDateTime createTime;
-
-}

+ 0 - 28
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogExportReqVO.java

@@ -1,28 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 登录日志分页列表 Request VO")
-@Data
-public class LoginLogExportReqVO {
-
-    @Schema(description = "用户 IP,模拟匹配", example = "127.0.0.1")
-    private String userIp;
-
-    @Schema(description = "用户账号,模拟匹配", example = "芋道")
-    private String username;
-
-    @Schema(description = "操作状态", example = "true")
-    private Boolean status;
-
-    @Schema(description = "登录时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 34 - 7
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java

@@ -1,30 +1,57 @@
 package cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog;
 
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
 
-import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 
 @Schema(description = "管理后台 - 登录日志 Response VO")
 @Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class LoginLogRespVO extends LoginLogBaseVO {
+@ExcelIgnoreUnannotated
+public class LoginLogRespVO {
 
     @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    @ExcelProperty("日志主键")
     private Long id;
 
+    @Schema(description = "日志类型,参见 LoginLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty(value = "日志类型", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.LOGIN_TYPE)
+    private Integer logType;
+
     @Schema(description = "用户编号", example = "666")
     private Long userId;
 
     @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-    @NotNull(message = "用户类型不能为空")
     private Integer userType;
 
+    @Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
+    private String traceId;
+
+    @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
+    @ExcelProperty("用户账号")
+    private String username;
+
+    @Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty(value = "登录结果", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.LOGIN_RESULT)
+    private Integer result;
+
+    @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+    @ExcelProperty("登录 IP")
+    private String userIp;
+
+    @Schema(description = "浏览器 UserAgent", example = "Mozilla/5.0")
+    @ExcelProperty("浏览器 UA")
+    private String userAgent;
+
     @Schema(description = "登录时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("登录时间")
     private LocalDateTime createTime;
 
 }

+ 0 - 85
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogBaseVO.java

@@ -1,85 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import java.time.LocalDateTime;
-import java.util.Map;
-
-/**
- * 操作日志 Base VO,提供给添加、修改、详细的子 VO 使用
- * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
- */
-@Data
-public class OperateLogBaseVO {
-
-    @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab")
-    @NotEmpty(message = "链路追踪编号不能为空")
-    private String traceId;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    @NotNull(message = "用户编号不能为空")
-    private Long userId;
-
-    @Schema(description = "操作模块", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单")
-    @NotEmpty(message = "操作模块不能为空")
-    private String module;
-
-    @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建订单")
-    @NotEmpty(message = "操作名")
-    private String name;
-
-    @Schema(description = "操作分类,参见 OperateLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "操作分类不能为空")
-    private Integer type;
-
-    @Schema(description = "操作明细", example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。")
-    private String content;
-
-    @Schema(description = "拓展字段", example = "{'orderId': 1}")
-    private Map<String, Object> exts;
-
-    @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET")
-    @NotEmpty(message = "请求方法名不能为空")
-    private String requestMethod;
-
-    @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy")
-    @NotEmpty(message = "请求地址不能为空")
-    private String requestUrl;
-
-    @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
-    @NotEmpty(message = "用户 IP 不能为空")
-    private String userIp;
-
-    @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0")
-    @NotEmpty(message = "浏览器 UserAgent 不能为空")
-    private String userAgent;
-
-    @Schema(description = "Java 方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "cn.iocoder.yudao.adminserver.UserController.save(...)")
-    @NotEmpty(message = "Java 方法名不能为空")
-    private String javaMethod;
-
-    @Schema(description = "Java 方法的参数")
-    private String javaMethodArgs;
-
-    @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "开始时间不能为空")
-    private LocalDateTime startTime;
-
-    @Schema(description = "执行时长,单位:毫秒", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "执行时长不能为空")
-    private Integer duration;
-
-    @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "结果码不能为空")
-    private Integer resultCode;
-
-    @Schema(description = "结果提示")
-    private String resultMsg;
-
-    @Schema(description = "结果数据")
-    private String resultData;
-
-}

+ 0 - 42
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExcelVO.java

@@ -1,42 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog;
-
-import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
-import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
-import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-/**
- * 操作日志 Excel 导出响应 VO
- */
-@Data
-public class OperateLogExcelVO {
-
-    @ExcelProperty("日志编号")
-    private Long id;
-
-    @ExcelProperty("操作模块")
-    private String module;
-
-    @ExcelProperty("操作名")
-    private String name;
-
-    @ExcelProperty(value = "操作类型", converter = DictConvert.class)
-    @DictFormat(DictTypeConstants.OPERATE_TYPE)
-    private String type;
-
-    @ExcelProperty("操作人")
-    private String userNickname;
-
-    @ExcelProperty(value = "操作结果") // 成功 or 失败
-    private String successStr;
-
-    @ExcelProperty("操作日志")
-    private LocalDateTime startTime;
-
-    @ExcelProperty("执行时长")
-    private Integer duration;
-
-}

+ 0 - 31
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogExportReqVO.java

@@ -1,31 +0,0 @@
-package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 操作日志分页列表 Request VO")
-@Data
-public class OperateLogExportReqVO {
-
-    @Schema(description = "操作模块,模拟匹配", example = "订单")
-    private String module;
-
-    @Schema(description = "用户昵称,模拟匹配", example = "芋道")
-    private String userNickname;
-
-    @Schema(description = "操作分类,参见 OperateLogTypeEnum 枚举类", example = "1")
-    private Integer type;
-
-    @Schema(description = "操作状态", example = "true")
-    private Boolean success;
-
-    @Schema(description = "开始时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] startTime;
-
-}

+ 75 - 5
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java

@@ -1,20 +1,90 @@
 package cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog;
 
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+
+import javax.validation.constraints.NotEmpty;
+import java.time.LocalDateTime;
+import java.util.Map;
 
 @Schema(description = "管理后台 - 操作日志 Response VO")
 @Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class OperateLogRespVO extends OperateLogBaseVO {
+@ExcelIgnoreUnannotated
+public class OperateLogRespVO {
 
     @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    @ExcelProperty("日志编号")
     private Long id;
 
+    @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab")
+    private String traceId;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long userId;
+
     @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+    @ExcelProperty("操作人")
     private String userNickname;
 
+    @Schema(description = "操作模块", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单")
+    @ExcelProperty("操作模块")
+    private String module;
+
+    @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建订单")
+    @ExcelProperty("操作名")
+    private String name;
+
+    @Schema(description = "操作分类,参见 OperateLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty(value = "操作类型", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.OPERATE_TYPE)
+    private Integer type;
+
+    @Schema(description = "操作明细", example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。")
+    private String content;
+
+    @Schema(description = "拓展字段", example = "{'orderId': 1}")
+    private Map<String, Object> exts;
+
+    @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET")
+    @NotEmpty(message = "请求方法名不能为空")
+    private String requestMethod;
+
+    @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy")
+    private String requestUrl;
+
+    @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+    private String userIp;
+
+    @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0")
+    private String userAgent;
+
+    @Schema(description = "Java 方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "cn.iocoder.yudao.adminserver.UserController.save(...)")
+    private String javaMethod;
+
+    @Schema(description = "Java 方法的参数")
+    private String javaMethodArgs;
+
+    @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("操作日志")
+    private LocalDateTime startTime;
+
+    @Schema(description = "执行时长,单位:毫秒", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("执行时长")
+    private Integer duration;
+
+    @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty(value = "结果码")
+    private Integer resultCode;
+
+    @Schema(description = "结果提示")
+    private String resultMsg;
+
+    @Schema(description = "结果数据")
+    private String resultData;
+
 }

+ 0 - 24
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/LoginLogConvert.java

@@ -1,24 +0,0 @@
-package cn.iocoder.yudao.module.system.convert.logger;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExcelVO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-import java.util.List;
-
-@Mapper
-public interface LoginLogConvert {
-
-    LoginLogConvert INSTANCE = Mappers.getMapper(LoginLogConvert.class);
-
-    PageResult<LoginLogRespVO> convertPage(PageResult<LoginLogDO> page);
-
-    List<LoginLogExcelVO> convertList(List<LoginLogDO> list);
-
-    LoginLogDO convert(LoginLogCreateReqDTO bean);
-
-}

+ 9 - 22
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java

@@ -1,41 +1,28 @@
 package cn.iocoder.yudao.module.system.convert.logger;
 
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
+import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
-import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
-
-import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.SUCCESS;
 
 @Mapper
 public interface OperateLogConvert {
 
     OperateLogConvert INSTANCE = Mappers.getMapper(OperateLogConvert.class);
 
-    OperateLogDO convert(OperateLogCreateReqDTO bean);
-
-    PageResult<OperateLogRespVO> convertPage(PageResult<OperateLogDO> page);
-
-    OperateLogRespVO convert(OperateLogDO bean);
-
-    default List<OperateLogExcelVO> convertList(List<OperateLogDO> list, Map<Long, AdminUserDO> userMap) {
-        return list.stream().map(operateLog -> {
-            OperateLogExcelVO excelVO = convert02(operateLog);
-            MapUtils.findAndThen(userMap, operateLog.getUserId(), user -> excelVO.setUserNickname(user.getNickname()));
-            excelVO.setSuccessStr(SUCCESS.getCode().equals(operateLog.getResultCode()) ? "成功" : "失败");
-            return excelVO;
-        }).collect(Collectors.toList());
+    default List<OperateLogRespVO> convertList(List<OperateLogDO> list, Map<Long, AdminUserDO> userMap) {
+        return CollectionUtils.convertList(list, log -> {
+            OperateLogRespVO logVO = BeanUtils.toBean(log, OperateLogRespVO.class);
+            MapUtils.findAndThen(userMap, log.getUserId(), user -> logVO.setUserNickname(user.getNickname()));
+            return logVO;
+        });
     }
 
-    OperateLogExcelVO convert02(OperateLogDO bean);
-
 }

+ 0 - 17
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/LoginLogMapper.java

@@ -3,14 +3,11 @@ package cn.iocoder.yudao.module.system.dal.mysql.logger;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
 import org.apache.ibatis.annotations.Mapper;
 
-import java.util.List;
-
 @Mapper
 public interface LoginLogMapper extends BaseMapperX<LoginLogDO> {
 
@@ -28,18 +25,4 @@ public interface LoginLogMapper extends BaseMapperX<LoginLogDO> {
         return selectPage(reqVO, query);
     }
 
-    default List<LoginLogDO> selectList(LoginLogExportReqVO reqVO) {
-        LambdaQueryWrapperX<LoginLogDO> query = new LambdaQueryWrapperX<LoginLogDO>()
-                .likeIfPresent(LoginLogDO::getUserIp, reqVO.getUserIp())
-                .likeIfPresent(LoginLogDO::getUsername, reqVO.getUsername())
-                .betweenIfPresent(LoginLogDO::getCreateTime, reqVO.getCreateTime());
-        if (Boolean.TRUE.equals(reqVO.getStatus())) {
-            query.eq(LoginLogDO::getResult, LoginResultEnum.SUCCESS.getResult());
-        } else if (Boolean.FALSE.equals(reqVO.getStatus())) {
-            query.gt(LoginLogDO::getResult, LoginResultEnum.SUCCESS.getResult());
-        }
-        query.orderByDesc(LoginLogDO::getId); // 降序
-        return selectList(query);
-    }
-
 }

+ 0 - 17
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/logger/OperateLogMapper.java

@@ -4,13 +4,11 @@ import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstant
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Collection;
-import java.util.List;
 
 @Mapper
 public interface OperateLogMapper extends BaseMapperX<OperateLogDO> {
@@ -30,19 +28,4 @@ public interface OperateLogMapper extends BaseMapperX<OperateLogDO> {
         return selectPage(reqVO, query);
     }
 
-    default List<OperateLogDO> selectList(OperateLogExportReqVO reqVO, Collection<Long> userIds) {
-        LambdaQueryWrapperX<OperateLogDO> query = new LambdaQueryWrapperX<OperateLogDO>()
-                .likeIfPresent(OperateLogDO::getModule, reqVO.getModule())
-                .inIfPresent(OperateLogDO::getUserId, userIds)
-                .eqIfPresent(OperateLogDO::getType, reqVO.getType())
-                .betweenIfPresent(OperateLogDO::getStartTime, reqVO.getStartTime());
-        if (Boolean.TRUE.equals(reqVO.getSuccess())) {
-            query.eq(OperateLogDO::getResultCode, GlobalErrorCodeConstants.SUCCESS.getCode());
-        } else if (Boolean.FALSE.equals(reqVO.getSuccess())) {
-            query.gt(OperateLogDO::getResultCode, GlobalErrorCodeConstants.SUCCESS.getCode());
-        }
-        query.orderByDesc(OperateLogDO::getId); // 降序
-        return selectList(query);
-    }
-
 }

+ 4 - 14
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java

@@ -1,13 +1,11 @@
 package cn.iocoder.yudao.module.system.service.logger;
 
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
+import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 
 import javax.validation.Valid;
-import java.util.List;
 
 /**
  * 登录日志 Service 接口
@@ -17,18 +15,10 @@ public interface LoginLogService {
     /**
      * 获得登录日志分页
      *
-     * @param reqVO 分页条件
+     * @param pageReqVO 分页条件
      * @return 登录日志分页
      */
-    PageResult<LoginLogDO> getLoginLogPage(LoginLogPageReqVO reqVO);
-
-    /**
-     * 获得登录日志列表
-     *
-     * @param reqVO 列表条件
-     * @return 登录日志列表
-     */
-    List<LoginLogDO> getLoginLogList(LoginLogExportReqVO reqVO);
+    PageResult<LoginLogDO> getLoginLogPage(LoginLogPageReqVO pageReqVO);
 
     /**
      * 创建登录日志

+ 4 - 11
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java

@@ -1,17 +1,15 @@
 package cn.iocoder.yudao.module.system.service.logger;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
-import cn.iocoder.yudao.module.system.convert.logger.LoginLogConvert;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-import java.util.List;
 
 /**
  * 登录日志 Service 实现
@@ -24,18 +22,13 @@ public class LoginLogServiceImpl implements LoginLogService {
     private LoginLogMapper loginLogMapper;
 
     @Override
-    public PageResult<LoginLogDO> getLoginLogPage(LoginLogPageReqVO reqVO) {
-        return loginLogMapper.selectPage(reqVO);
-    }
-
-    @Override
-    public List<LoginLogDO> getLoginLogList(LoginLogExportReqVO reqVO) {
-        return loginLogMapper.selectList(reqVO);
+    public PageResult<LoginLogDO> getLoginLogPage(LoginLogPageReqVO pageReqVO) {
+        return loginLogMapper.selectPage(pageReqVO);
     }
 
     @Override
     public void createLoginLog(LoginLogCreateReqDTO reqDTO) {
-        LoginLogDO loginLog = LoginLogConvert.INSTANCE.convert(reqDTO);
+        LoginLogDO loginLog = BeanUtils.toBean(reqDTO, LoginLogDO.class);
         loginLogMapper.insert(loginLog);
     }
 

+ 2 - 13
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java

@@ -2,12 +2,9 @@ package cn.iocoder.yudao.module.system.service.logger;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 
-import java.util.List;
-
 /**
  * 操作日志 Service 接口
  *
@@ -25,17 +22,9 @@ public interface OperateLogService {
     /**
      * 获得操作日志分页列表
      *
-     * @param reqVO 分页条件
+     * @param pageReqVO 分页条件
      * @return 操作日志分页列表
      */
-    PageResult<OperateLogDO> getOperateLogPage(OperateLogPageReqVO reqVO);
-
-    /**
-     * 获得操作日志列表
-     *
-     * @param reqVO 列表条件
-     * @return 日志列表
-     */
-    List<OperateLogDO> getOperateLogList(OperateLogExportReqVO reqVO);
+    PageResult<OperateLogDO> getOperateLogPage(OperateLogPageReqVO pageReqVO);
 
 }

+ 14 - 26
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java

@@ -3,11 +3,10 @@ package cn.iocoder.yudao.module.system.service.logger;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.common.util.string.StrUtils;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
-import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
@@ -18,13 +17,16 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH;
 import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.RESULT_MAX_LENGTH;
 
+/**
+ * 操作日志 Service 实现类
+ *
+ * @author 芋道源码
+ */
 @Service
 @Validated
 @Slf4j
@@ -38,38 +40,24 @@ public class OperateLogServiceImpl implements OperateLogService {
 
     @Override
     public void createOperateLog(OperateLogCreateReqDTO createReqDTO) {
-        OperateLogDO logDO = OperateLogConvert.INSTANCE.convert(createReqDTO);
-        logDO.setJavaMethodArgs(StrUtils.maxLength(logDO.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH));
-        logDO.setResultData(StrUtils.maxLength(logDO.getResultData(), RESULT_MAX_LENGTH));
-        operateLogMapper.insert(logDO);
+        OperateLogDO log = BeanUtils.toBean(createReqDTO, OperateLogDO.class);
+        log.setJavaMethodArgs(StrUtils.maxLength(log.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH));
+        log.setResultData(StrUtils.maxLength(log.getResultData(), RESULT_MAX_LENGTH));
+        operateLogMapper.insert(log);
     }
 
     @Override
-    public PageResult<OperateLogDO> getOperateLogPage(OperateLogPageReqVO reqVO) {
+    public PageResult<OperateLogDO> getOperateLogPage(OperateLogPageReqVO pageReqVO) {
         // 处理基于用户昵称的查询
         Collection<Long> userIds = null;
-        if (StrUtil.isNotEmpty(reqVO.getUserNickname())) {
-            userIds = convertSet(userService.getUserListByNickname(reqVO.getUserNickname()), AdminUserDO::getId);
+        if (StrUtil.isNotEmpty(pageReqVO.getUserNickname())) {
+            userIds = convertSet(userService.getUserListByNickname(pageReqVO.getUserNickname()), AdminUserDO::getId);
             if (CollUtil.isEmpty(userIds)) {
                 return PageResult.empty();
             }
         }
         // 查询分页
-        return operateLogMapper.selectPage(reqVO, userIds);
-    }
-
-    @Override
-    public List<OperateLogDO> getOperateLogList(OperateLogExportReqVO reqVO) {
-        // 处理基于用户昵称的查询
-        Collection<Long> userIds = null;
-        if (StrUtil.isNotEmpty(reqVO.getUserNickname())) {
-            userIds = convertSet(userService.getUserListByNickname(reqVO.getUserNickname()), AdminUserDO::getId);
-            if (CollUtil.isEmpty(userIds)) {
-                return Collections.emptyList();
-            }
-        }
-        // 查询列表
-        return operateLogMapper.selectList(reqVO, userIds);
+        return operateLogMapper.selectPage(pageReqVO, userIds);
     }
 
 }

+ 0 - 34
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java

@@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.system.service.logger;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
 import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper;
@@ -11,7 +10,6 @@ import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
-import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
@@ -64,38 +62,6 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest {
         assertPojoEquals(loginLogDO, pageResult.getList().get(0));
     }
 
-    @Test
-    public void testGetLoginLogList() {
-        // mock 数据
-        LoginLogDO loginLogDO = randomPojo(LoginLogDO.class, o -> {
-            o.setUserIp("192.168.199.16");
-            o.setUsername("wang");
-            o.setResult(SUCCESS.getResult());
-            o.setCreateTime(buildTime(2021, 3, 6));
-        });
-        loginLogMapper.insert(loginLogDO);
-        // 测试 status 不匹配
-        loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setResult(CAPTCHA_CODE_ERROR.getResult())));
-        // 测试 ip 不匹配
-        loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUserIp("192.168.128.18")));
-        // 测试 username 不匹配
-        loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUsername("yunai")));
-        // 测试 createTime 不匹配
-        loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setCreateTime(buildTime(2021, 2, 6))));
-        // 构造调用参数
-        LoginLogExportReqVO reqVO = new LoginLogExportReqVO();
-        reqVO.setUsername("wang");
-        reqVO.setUserIp("192.168.199");
-        reqVO.setStatus(true);
-        reqVO.setCreateTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7));
-
-        // 调用service方法
-        List<LoginLogDO> list = loginLogService.getLoginLogList(reqVO);
-        // 断言
-        assertEquals(1, list.size());
-        assertPojoEquals(loginLogDO, list.get(0));
-    }
-
     @Test
     public void testCreateLoginLog() {
         LoginLogCreateReqDTO reqDTO = randomPojo(LoginLogCreateReqDTO.class);

+ 1 - 50
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java

@@ -9,7 +9,6 @@ import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
-import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
@@ -21,7 +20,6 @@ import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
 import java.util.Collections;
-import java.util.List;
 
 import static cn.hutool.core.util.RandomUtil.randomEle;
 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
@@ -46,7 +44,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
     private AdminUserService userService;
 
     @Test
-    public void testCreateOperateLogAsync() {
+    public void testCreateOperateLog() {
         OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class,
                 o -> o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build()));
 
@@ -105,51 +103,4 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
         assertPojoEquals(operateLogDO, pageResult.getList().get(0));
     }
 
-    @Test
-    public void testGetOperateLogs() {
-        // mock(用户信息)
-        AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> {
-            o.setNickname("wang");
-            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
-        });
-        when(userService.getUserListByNickname("wang")).thenReturn(Collections.singletonList(user));
-        Long userId = user.getId();
-
-        // 构造操作日志
-        OperateLogDO operateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> {
-            o.setUserId(userId);
-            o.setUserType(randomEle(UserTypeEnum.values()).getValue());
-            o.setModule("order");
-            o.setType(OperateTypeEnum.CREATE.getType());
-            o.setStartTime(buildTime(2021, 3, 6));
-            o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode());
-            o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build());
-        });
-        operateLogMapper.insert(operateLogDO);
-        // 测试 userId 不匹配
-        operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setUserId(userId + 1)));
-        // 测试 module 不匹配
-        operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setModule("user")));
-        // 测试 type 不匹配
-        operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setType(OperateTypeEnum.IMPORT.getType())));
-        // 测试 createTime 不匹配
-        operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setStartTime(buildTime(2021, 2, 6))));
-        // 测试 resultCode 不匹配
-        operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setResultCode(BAD_REQUEST.getCode())));
-
-        // 构造调用参数
-        OperateLogExportReqVO reqVO = new OperateLogExportReqVO();
-        reqVO.setUserNickname("wang");
-        reqVO.setModule("order");
-        reqVO.setType(OperateTypeEnum.CREATE.getType());
-        reqVO.setStartTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7));
-        reqVO.setSuccess(true);
-
-        // 调用 service 方法
-        List<OperateLogDO> list = operateLogServiceImpl.getOperateLogList(reqVO);
-        // 断言,只查到了一条符合条件的
-        assertEquals(1, list.size());
-        assertPojoEquals(operateLogDO, list.get(0));
-    }
-
 }