mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-30 10:05:59 +08:00 
			
		
		
		
	🔧 简化 errorLog 和 accessLog 模块的 VO
This commit is contained in:
		| @ -28,7 +28,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { | |||||||
|  |  | ||||||
|     default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) { |     default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) { | ||||||
|         // 特殊:不分页,直接查询全部 |         // 特殊:不分页,直接查询全部 | ||||||
|         if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageNo())) { |         if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { | ||||||
|             List<T> list = selectList(queryWrapper); |             List<T> list = selectList(queryWrapper); | ||||||
|             return new PageResult<>(list, (long) list.size()); |             return new PageResult<>(list, (long) list.size()); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -1,18 +1,17 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger; | package cn.iocoder.yudao.module.infra.controller.admin.logger; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 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.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.excel.core.util.ExcelUtils; | ||||||
| import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExcelVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogRespVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogRespVO; | ||||||
| import cn.iocoder.yudao.module.infra.convert.logger.ApiAccessLogConvert; |  | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | ||||||
| import cn.iocoder.yudao.module.infra.service.logger.ApiAccessLogService; | import cn.iocoder.yudao.module.infra.service.logger.ApiAccessLogService; | ||||||
| import io.swagger.v3.oas.annotations.tags.Tag; |  | ||||||
| import io.swagger.v3.oas.annotations.Operation; | 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.security.access.prepost.PreAuthorize; | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
| import org.springframework.web.bind.annotation.GetMapping; | import org.springframework.web.bind.annotation.GetMapping; | ||||||
| @ -40,21 +39,22 @@ public class ApiAccessLogController { | |||||||
|     @GetMapping("/page") |     @GetMapping("/page") | ||||||
|     @Operation(summary = "获得API 访问日志分页") |     @Operation(summary = "获得API 访问日志分页") | ||||||
|     @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") |     @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") | ||||||
|     public CommonResult<PageResult<ApiAccessLogRespVO>> getApiAccessLogPage(@Valid ApiAccessLogPageReqVO pageVO) { |     public CommonResult<PageResult<ApiAccessLogRespVO>> getApiAccessLogPage(@Valid ApiAccessLogPageReqVO pageReqVO) { | ||||||
|         PageResult<ApiAccessLogDO> pageResult = apiAccessLogService.getApiAccessLogPage(pageVO); |         PageResult<ApiAccessLogDO> pageResult = apiAccessLogService.getApiAccessLogPage(pageReqVO); | ||||||
|         return success(ApiAccessLogConvert.INSTANCE.convertPage(pageResult)); |         return success(BeanUtils.toBean(pageResult, ApiAccessLogRespVO.class)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @GetMapping("/export-excel") |     @GetMapping("/export-excel") | ||||||
|     @Operation(summary = "导出API 访问日志 Excel") |     @Operation(summary = "导出API 访问日志 Excel") | ||||||
|     @PreAuthorize("@ss.hasPermission('infra:api-access-log:export')") |     @PreAuthorize("@ss.hasPermission('infra:api-access-log:export')") | ||||||
|     @OperateLog(type = EXPORT) |     @OperateLog(type = EXPORT) | ||||||
|     public void exportApiAccessLogExcel(@Valid ApiAccessLogExportReqVO exportReqVO, |     public void exportApiAccessLogExcel(@Valid ApiAccessLogPageReqVO exportReqVO, | ||||||
|                                         HttpServletResponse response) throws IOException { |                                         HttpServletResponse response) throws IOException { | ||||||
|         List<ApiAccessLogDO> list = apiAccessLogService.getApiAccessLogList(exportReqVO); |         exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||||||
|  |         List<ApiAccessLogDO> list = apiAccessLogService.getApiAccessLogPage(exportReqVO).getList(); | ||||||
|         // 导出 Excel |         // 导出 Excel | ||||||
|         List<ApiAccessLogExcelVO> datas = ApiAccessLogConvert.INSTANCE.convertList02(list); |         ExcelUtils.write(response, "API 访问日志.xls", "数据", ApiAccessLogRespVO.class, | ||||||
|         ExcelUtils.write(response, "API 访问日志.xls", "数据", ApiAccessLogExcelVO.class, datas); |                 BeanUtils.toBean(list, ApiAccessLogRespVO.class)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,20 +1,19 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger; | package cn.iocoder.yudao.module.infra.controller.admin.logger; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 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.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.excel.core.util.ExcelUtils; | ||||||
| import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExcelVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogRespVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogRespVO; | ||||||
| import cn.iocoder.yudao.module.infra.convert.logger.ApiErrorLogConvert; |  | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | ||||||
| import cn.iocoder.yudao.module.infra.service.logger.ApiErrorLogService; | import cn.iocoder.yudao.module.infra.service.logger.ApiErrorLogService; | ||||||
| import io.swagger.v3.oas.annotations.tags.Tag; | import io.swagger.v3.oas.annotations.Operation; | ||||||
| import io.swagger.v3.oas.annotations.Parameter; | import io.swagger.v3.oas.annotations.Parameter; | ||||||
| import io.swagger.v3.oas.annotations.Parameters; | import io.swagger.v3.oas.annotations.Parameters; | ||||||
| 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.security.access.prepost.PreAuthorize; | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
| @ -54,21 +53,22 @@ public class ApiErrorLogController { | |||||||
|     @GetMapping("/page") |     @GetMapping("/page") | ||||||
|     @Operation(summary = "获得 API 错误日志分页") |     @Operation(summary = "获得 API 错误日志分页") | ||||||
|     @PreAuthorize("@ss.hasPermission('infra:api-error-log:query')") |     @PreAuthorize("@ss.hasPermission('infra:api-error-log:query')") | ||||||
|     public CommonResult<PageResult<ApiErrorLogRespVO>> getApiErrorLogPage(@Valid ApiErrorLogPageReqVO pageVO) { |     public CommonResult<PageResult<ApiErrorLogRespVO>> getApiErrorLogPage(@Valid ApiErrorLogPageReqVO pageReqVO) { | ||||||
|         PageResult<ApiErrorLogDO> pageResult = apiErrorLogService.getApiErrorLogPage(pageVO); |         PageResult<ApiErrorLogDO> pageResult = apiErrorLogService.getApiErrorLogPage(pageReqVO); | ||||||
|         return success(ApiErrorLogConvert.INSTANCE.convertPage(pageResult)); |         return success(BeanUtils.toBean(pageResult, ApiErrorLogRespVO.class)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @GetMapping("/export-excel") |     @GetMapping("/export-excel") | ||||||
|     @Operation(summary = "导出 API 错误日志 Excel") |     @Operation(summary = "导出 API 错误日志 Excel") | ||||||
|     @PreAuthorize("@ss.hasPermission('infra:api-error-log:export')") |     @PreAuthorize("@ss.hasPermission('infra:api-error-log:export')") | ||||||
|     @OperateLog(type = EXPORT) |     @OperateLog(type = EXPORT) | ||||||
|     public void exportApiErrorLogExcel(@Valid ApiErrorLogExportReqVO exportReqVO, |     public void exportApiErrorLogExcel(@Valid ApiErrorLogPageReqVO exportReqVO, | ||||||
|               HttpServletResponse response) throws IOException { |               HttpServletResponse response) throws IOException { | ||||||
|         List<ApiErrorLogDO> list = apiErrorLogService.getApiErrorLogList(exportReqVO); |         exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||||||
|  |         List<ApiErrorLogDO> list = apiErrorLogService.getApiErrorLogPage(exportReqVO).getList(); | ||||||
|         // 导出 Excel |         // 导出 Excel | ||||||
|         List<ApiErrorLogExcelVO> datas = ApiErrorLogConvert.INSTANCE.convertList02(list); |         ExcelUtils.write(response, "API 错误日志.xls", "数据", ApiErrorLogRespVO.class, | ||||||
|         ExcelUtils.write(response, "API 错误日志.xls", "数据", ApiErrorLogExcelVO.class, datas); |                 BeanUtils.toBean(list, ApiErrorLogRespVO.class)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,75 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; |  | ||||||
|  |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; |  | ||||||
| import lombok.Data; |  | ||||||
| import org.springframework.format.annotation.DateTimeFormat; |  | ||||||
|  |  | ||||||
| import javax.validation.constraints.NotNull; |  | ||||||
| import java.time.LocalDateTime; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
| * API 访问日志 Base VO,提供给添加、修改、详细的子 VO 使用 |  | ||||||
| * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |  | ||||||
| */ |  | ||||||
| @Data |  | ||||||
| public class ApiAccessLogBaseVO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "66600cb6-7852-11eb-9439-0242ac130002") |  | ||||||
|     @NotNull(message = "链路追踪编号不能为空") |  | ||||||
|     private String traceId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") |  | ||||||
|     @NotNull(message = "用户编号不能为空") |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") |  | ||||||
|     @NotNull(message = "用户类型不能为空") |  | ||||||
|     private Integer userType; |  | ||||||
|  |  | ||||||
|     @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard") |  | ||||||
|     @NotNull(message = "应用名不能为空") |  | ||||||
|     private String applicationName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") |  | ||||||
|     @NotNull(message = "请求方法名不能为空") |  | ||||||
|     private String requestMethod; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy") |  | ||||||
|     @NotNull(message = "请求地址不能为空") |  | ||||||
|     private String requestUrl; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求参数") |  | ||||||
|     private String requestParams; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") |  | ||||||
|     @NotNull(message = "用户 IP不能为空") |  | ||||||
|     private String userIp; |  | ||||||
|  |  | ||||||
|     @Schema(description = "浏览器 UA", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") |  | ||||||
|     @NotNull(message = "浏览器 UA不能为空") |  | ||||||
|     private String userAgent; |  | ||||||
|  |  | ||||||
|     @Schema(description = "开始请求时间", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "开始请求时间不能为空") |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     private LocalDateTime beginTime; |  | ||||||
|  |  | ||||||
|     @Schema(description = "结束请求时间", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "结束请求时间不能为空") |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     private LocalDateTime endTime; |  | ||||||
|  |  | ||||||
|     @Schema(description = "执行时长", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") |  | ||||||
|     @NotNull(message = "执行时长不能为空") |  | ||||||
|     private Integer duration; |  | ||||||
|  |  | ||||||
|     @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |  | ||||||
|     @NotNull(message = "结果码不能为空") |  | ||||||
|     private Integer resultCode; |  | ||||||
|  |  | ||||||
|     @Schema(description = "结果提示", example = "芋道源码,牛逼!") |  | ||||||
|     private String resultMsg; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,65 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; |  | ||||||
|  |  | ||||||
| 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; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * API 访问日志 Excel VO |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Data |  | ||||||
| public class ApiAccessLogExcelVO { |  | ||||||
|  |  | ||||||
|     @ExcelProperty("日志主键") |  | ||||||
|     private Long id; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("链路追踪编号") |  | ||||||
|     private String traceId; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("用户编号") |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     @ExcelProperty(value = "用户类型", converter = DictConvert.class) |  | ||||||
|     @DictFormat(DictTypeConstants.USER_TYPE) |  | ||||||
|     private Integer userType; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("应用名") |  | ||||||
|     private String applicationName; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("请求方法名") |  | ||||||
|     private String requestMethod; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("请求地址") |  | ||||||
|     private String requestUrl; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("请求参数") |  | ||||||
|     private String requestParams; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("用户 IP") |  | ||||||
|     private String userIp; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("浏览器 UA") |  | ||||||
|     private String userAgent; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("开始请求时间") |  | ||||||
|     private LocalDateTime beginTime; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("结束请求时间") |  | ||||||
|     private LocalDateTime endTime; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("执行时长") |  | ||||||
|     private Integer duration; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("结果码") |  | ||||||
|     private Integer resultCode; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("结果提示") |  | ||||||
|     private String resultMsg; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,37 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; |  | ||||||
|  |  | ||||||
| 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 = "管理后台 - API 访问日志 Excel 导出 Request VO,参数和 ApiAccessLogPageReqVO 是一致的") |  | ||||||
| @Data |  | ||||||
| public class ApiAccessLogExportReqVO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户编号", example = "666") |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户类型", example = "2") |  | ||||||
|     private Integer userType; |  | ||||||
|  |  | ||||||
|     @Schema(description = "应用名", example = "dashboard") |  | ||||||
|     private String applicationName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求地址,模糊匹配", example = "/xxx/yyy") |  | ||||||
|     private String requestUrl; |  | ||||||
|  |  | ||||||
|     @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[] beginTime; |  | ||||||
|  |  | ||||||
|     @Schema(description = "执行时长,大于等于,单位:毫秒", example = "100") |  | ||||||
|     private Integer duration; |  | ||||||
|  |  | ||||||
|     @Schema(description = "结果码", example = "0") |  | ||||||
|     private Integer resultCode; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,21 +1,81 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; | package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog; | ||||||
|  |  | ||||||
|  | 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 io.swagger.v3.oas.annotations.media.Schema; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
| import lombok.EqualsAndHashCode; |  | ||||||
| import lombok.ToString; |  | ||||||
|  |  | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
|  |  | ||||||
| @Schema(description = "管理后台 - API 访问日志 Response VO") | @Schema(description = "管理后台 - API 访问日志 Response VO") | ||||||
| @Data | @Data | ||||||
| @EqualsAndHashCode(callSuper = true) | @ExcelIgnoreUnannotated | ||||||
| @ToString(callSuper = true) | public class ApiAccessLogRespVO { | ||||||
| public class ApiAccessLogRespVO extends ApiAccessLogBaseVO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "日志主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |     @Schema(description = "日志主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||||
|  |     @ExcelProperty("日志主键") | ||||||
|     private Long id; |     private Long id; | ||||||
|  |  | ||||||
|  |     @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "66600cb6-7852-11eb-9439-0242ac130002") | ||||||
|  |     @ExcelProperty("链路追踪编号") | ||||||
|  |     private String traceId; | ||||||
|  |  | ||||||
|  |     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") | ||||||
|  |     @ExcelProperty("用户编号") | ||||||
|  |     private Long userId; | ||||||
|  |  | ||||||
|  |     @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||||||
|  |     @ExcelProperty(value = "用户类型", converter = DictConvert.class) | ||||||
|  |     @DictFormat(DictTypeConstants.USER_TYPE) | ||||||
|  |     private Integer userType; | ||||||
|  |  | ||||||
|  |     @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard") | ||||||
|  |     @ExcelProperty("应用名") | ||||||
|  |     private String applicationName; | ||||||
|  |  | ||||||
|  |     @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") | ||||||
|  |     @ExcelProperty("请求方法名") | ||||||
|  |     private String requestMethod; | ||||||
|  |  | ||||||
|  |     @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy") | ||||||
|  |     @ExcelProperty("请求地址") | ||||||
|  |     private String requestUrl; | ||||||
|  |  | ||||||
|  |     @Schema(description = "请求参数") | ||||||
|  |     @ExcelProperty("请求参数") | ||||||
|  |     private String requestParams; | ||||||
|  |  | ||||||
|  |     @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") | ||||||
|  |     @ExcelProperty("用户 IP") | ||||||
|  |     private String userIp; | ||||||
|  |  | ||||||
|  |     @Schema(description = "浏览器 UA", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") | ||||||
|  |     @ExcelProperty("浏览器 UA") | ||||||
|  |     private String userAgent; | ||||||
|  |  | ||||||
|  |     @Schema(description = "开始请求时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("开始请求时间") | ||||||
|  |     private LocalDateTime beginTime; | ||||||
|  |  | ||||||
|  |     @Schema(description = "结束请求时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("结束请求时间") | ||||||
|  |     private LocalDateTime endTime; | ||||||
|  |  | ||||||
|  |     @Schema(description = "执行时长", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") | ||||||
|  |     @ExcelProperty("执行时长") | ||||||
|  |     private Integer duration; | ||||||
|  |  | ||||||
|  |     @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") | ||||||
|  |     @ExcelProperty("结果码") | ||||||
|  |     private Integer resultCode; | ||||||
|  |  | ||||||
|  |     @Schema(description = "结果提示", example = "芋道源码,牛逼!") | ||||||
|  |     @ExcelProperty("结果提示") | ||||||
|  |     private String resultMsg; | ||||||
|  |  | ||||||
|     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) |     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|     private LocalDateTime createTime; |     private LocalDateTime createTime; | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,95 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; |  | ||||||
| import lombok.Data; |  | ||||||
| import org.springframework.format.annotation.DateTimeFormat; |  | ||||||
|  |  | ||||||
| import javax.validation.constraints.NotNull; |  | ||||||
| import java.time.LocalDateTime; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
| * API 错误日志 Base VO,提供给添加、修改、详细的子 VO 使用 |  | ||||||
| * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |  | ||||||
| */ |  | ||||||
| @Data |  | ||||||
| public class ApiErrorLogBaseVO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "66600cb6-7852-11eb-9439-0242ac130002") |  | ||||||
|     @NotNull(message = "链路追踪编号不能为空") |  | ||||||
|     private String traceId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") |  | ||||||
|     @NotNull(message = "用户编号不能为空") |  | ||||||
|     private Integer userId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |  | ||||||
|     @NotNull(message = "用户类型不能为空") |  | ||||||
|     private Integer userType; |  | ||||||
|  |  | ||||||
|     @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard") |  | ||||||
|     @NotNull(message = "应用名不能为空") |  | ||||||
|     private String applicationName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") |  | ||||||
|     @NotNull(message = "请求方法名不能为空") |  | ||||||
|     private String requestMethod; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xx/yy") |  | ||||||
|     @NotNull(message = "请求地址不能为空") |  | ||||||
|     private String requestUrl; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求参数", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "请求参数不能为空") |  | ||||||
|     private String requestParams; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") |  | ||||||
|     @NotNull(message = "用户 IP不能为空") |  | ||||||
|     private String userIp; |  | ||||||
|  |  | ||||||
|     @Schema(description = "浏览器 UA", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") |  | ||||||
|     @NotNull(message = "浏览器 UA不能为空") |  | ||||||
|     private String userAgent; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常发生时间", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常发生时间不能为空") |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     private LocalDateTime exceptionTime; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常名", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常名不能为空") |  | ||||||
|     private String exceptionName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常导致的消息", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常导致的消息不能为空") |  | ||||||
|     private String exceptionMessage; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常导致的根消息", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常导致的根消息不能为空") |  | ||||||
|     private String exceptionRootCauseMessage; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常的栈轨迹", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常的栈轨迹不能为空") |  | ||||||
|     private String exceptionStackTrace; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常发生的类全名", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常发生的类全名不能为空") |  | ||||||
|     private String exceptionClassName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常发生的类文件", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常发生的类文件不能为空") |  | ||||||
|     private String exceptionFileName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常发生的方法名", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常发生的方法名不能为空") |  | ||||||
|     private String exceptionMethodName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "异常发生的方法所在行", requiredMode = Schema.RequiredMode.REQUIRED) |  | ||||||
|     @NotNull(message = "异常发生的方法所在行不能为空") |  | ||||||
|     private Integer exceptionLineNumber; |  | ||||||
|  |  | ||||||
|     @Schema(description = "处理状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |  | ||||||
|     @NotNull(message = "处理状态不能为空") |  | ||||||
|     private Integer processStatus; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,90 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; |  | ||||||
| import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; |  | ||||||
| import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; |  | ||||||
| import com.alibaba.excel.annotation.ExcelProperty; |  | ||||||
| import lombok.Data; |  | ||||||
|  |  | ||||||
| import java.time.LocalDateTime; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * API 错误日志 Excel VO |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Data |  | ||||||
| public class ApiErrorLogExcelVO { |  | ||||||
|  |  | ||||||
|     @ExcelProperty("编号") |  | ||||||
|     private Integer id; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("链路追踪编号") |  | ||||||
|     private String traceId; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("用户编号") |  | ||||||
|     private Integer userId; |  | ||||||
|  |  | ||||||
|     @ExcelProperty(value = "用户类型", converter = DictConvert.class) |  | ||||||
|     @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.USER_TYPE) |  | ||||||
|     private Integer userType; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("应用名") |  | ||||||
|     private String applicationName; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("请求方法名") |  | ||||||
|     private String requestMethod; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("请求地址") |  | ||||||
|     private String requestUrl; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("请求参数") |  | ||||||
|     private String requestParams; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("用户 IP") |  | ||||||
|     private String userIp; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("浏览器 UA") |  | ||||||
|     private String userAgent; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常发生时间") |  | ||||||
|     private LocalDateTime exceptionTime; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常名") |  | ||||||
|     private String exceptionName; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常导致的消息") |  | ||||||
|     private String exceptionMessage; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常导致的根消息") |  | ||||||
|     private String exceptionRootCauseMessage; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常的栈轨迹") |  | ||||||
|     private String exceptionStackTrace; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常发生的类全名") |  | ||||||
|     private String exceptionClassName; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常发生的类文件") |  | ||||||
|     private String exceptionFileName; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常发生的方法名") |  | ||||||
|     private String exceptionMethodName; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("异常发生的方法所在行") |  | ||||||
|     private Integer exceptionLineNumber; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("创建时间") |  | ||||||
|     private LocalDateTime createTime; |  | ||||||
|  |  | ||||||
|     @ExcelProperty(value = "处理状态", converter = DictConvert.class) |  | ||||||
|     @DictFormat(DictTypeConstants.API_ERROR_LOG_PROCESS_STATUS) |  | ||||||
|     private Integer processStatus; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("处理时间") |  | ||||||
|     private LocalDateTime processTime; |  | ||||||
|  |  | ||||||
|     @ExcelProperty("处理用户编号") |  | ||||||
|     private Integer processUserId; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; |  | ||||||
|  |  | ||||||
| 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 = "管理后台 - API 错误日志 Excel 导出 Request VO,参数和 ApiErrorLogPageReqVO 是一致的") |  | ||||||
| @Data |  | ||||||
| public class ApiErrorLogExportReqVO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户编号", example = "666") |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户类型", example = "1") |  | ||||||
|     private Integer userType; |  | ||||||
|  |  | ||||||
|     @Schema(description = "应用名", example = "dashboard") |  | ||||||
|     private String applicationName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "请求地址", example = "/xx/yy") |  | ||||||
|     private String requestUrl; |  | ||||||
|  |  | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |  | ||||||
|     @Schema(description = "异常发生时间") |  | ||||||
|     private LocalDateTime[] exceptionTime; |  | ||||||
|  |  | ||||||
|     @Schema(description = "处理状态", example = "0") |  | ||||||
|     private Integer processStatus; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,28 +1,112 @@ | |||||||
| package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; | package cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | ||||||
|  | import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||||||
|  | import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
| import lombok.EqualsAndHashCode; |  | ||||||
| import lombok.ToString; |  | ||||||
|  |  | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
|  |  | ||||||
| @Schema(description = "管理后台 - API 错误日志 Response VO") | @Schema(description = "管理后台 - API 错误日志 Response VO") | ||||||
| @Data | @Data | ||||||
| @EqualsAndHashCode(callSuper = true) | @ExcelIgnoreUnannotated | ||||||
| @ToString(callSuper = true) | public class ApiErrorLogRespVO { | ||||||
| public class ApiErrorLogRespVO extends ApiErrorLogBaseVO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |     @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||||
|  |     @ExcelProperty("编号") | ||||||
|     private Integer id; |     private Integer id; | ||||||
|  |  | ||||||
|     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) |     @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "66600cb6-7852-11eb-9439-0242ac130002") | ||||||
|     private LocalDateTime createTime; |     @ExcelProperty("链路追踪编号") | ||||||
|  |     private String traceId; | ||||||
|  |  | ||||||
|  |     @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") | ||||||
|  |     @ExcelProperty("用户编号") | ||||||
|  |     private Integer userId; | ||||||
|  |  | ||||||
|  |     @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||||
|  |     @ExcelProperty(value = "用户类型", converter = DictConvert.class) | ||||||
|  |     @DictFormat(cn.iocoder.yudao.module.system.enums.DictTypeConstants.USER_TYPE) | ||||||
|  |     private Integer userType; | ||||||
|  |  | ||||||
|  |     @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard") | ||||||
|  |     @ExcelProperty("应用名") | ||||||
|  |     private String applicationName; | ||||||
|  |  | ||||||
|  |     @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") | ||||||
|  |     @ExcelProperty("请求方法名") | ||||||
|  |     private String requestMethod; | ||||||
|  |  | ||||||
|  |     @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xx/yy") | ||||||
|  |     @ExcelProperty("请求地址") | ||||||
|  |     private String requestUrl; | ||||||
|  |  | ||||||
|  |     @Schema(description = "请求参数", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("请求参数") | ||||||
|  |     private String requestParams; | ||||||
|  |  | ||||||
|  |     @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") | ||||||
|  |     @ExcelProperty("用户 IP") | ||||||
|  |     private String userIp; | ||||||
|  |  | ||||||
|  |     @Schema(description = "浏览器 UA", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") | ||||||
|  |     @ExcelProperty("浏览器 UA") | ||||||
|  |     private String userAgent; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常发生时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常发生时间") | ||||||
|  |     private LocalDateTime exceptionTime; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常名", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常名") | ||||||
|  |     private String exceptionName; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常导致的消息", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常导致的消息") | ||||||
|  |     private String exceptionMessage; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常导致的根消息", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常导致的根消息") | ||||||
|  |     private String exceptionRootCauseMessage; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常的栈轨迹", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常的栈轨迹") | ||||||
|  |     private String exceptionStackTrace; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常发生的类全名", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常发生的类全名") | ||||||
|  |     private String exceptionClassName; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常发生的类文件", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常发生的类文件") | ||||||
|  |     private String exceptionFileName; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常发生的方法名", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常发生的方法名") | ||||||
|  |     private String exceptionMethodName; | ||||||
|  |  | ||||||
|  |     @Schema(description = "异常发生的方法所在行", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("异常发生的方法所在行") | ||||||
|  |     private Integer exceptionLineNumber; | ||||||
|  |  | ||||||
|  |     @Schema(description = "处理状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") | ||||||
|  |     @ExcelProperty(value = "处理状态", converter = DictConvert.class) | ||||||
|  |     @DictFormat(DictTypeConstants.API_ERROR_LOG_PROCESS_STATUS) | ||||||
|  |     private Integer processStatus; | ||||||
|  |  | ||||||
|     @Schema(description = "处理时间", requiredMode = Schema.RequiredMode.REQUIRED) |     @Schema(description = "处理时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("处理时间") | ||||||
|     private LocalDateTime processTime; |     private LocalDateTime processTime; | ||||||
|  |  | ||||||
|     @Schema(description = "处理用户编号", example = "233") |     @Schema(description = "处理用户编号", example = "233") | ||||||
|  |     @ExcelProperty("处理用户编号") | ||||||
|     private Integer processUserId; |     private Integer processUserId; | ||||||
|  |  | ||||||
|  |     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|  |     @ExcelProperty("创建时间") | ||||||
|  |     private LocalDateTime createTime; | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,33 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.convert.logger; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; |  | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExcelVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogRespVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; |  | ||||||
| import org.mapstruct.Mapper; |  | ||||||
| import org.mapstruct.factory.Mappers; |  | ||||||
|  |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * API 访问日志 Convert |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Mapper |  | ||||||
| public interface ApiAccessLogConvert { |  | ||||||
|  |  | ||||||
|     ApiAccessLogConvert INSTANCE = Mappers.getMapper(ApiAccessLogConvert.class); |  | ||||||
|  |  | ||||||
|     ApiAccessLogRespVO convert(ApiAccessLogDO bean); |  | ||||||
|  |  | ||||||
|     List<ApiAccessLogRespVO> convertList(List<ApiAccessLogDO> list); |  | ||||||
|  |  | ||||||
|     PageResult<ApiAccessLogRespVO> convertPage(PageResult<ApiAccessLogDO> page); |  | ||||||
|  |  | ||||||
|     List<ApiAccessLogExcelVO> convertList02(List<ApiAccessLogDO> list); |  | ||||||
|  |  | ||||||
|     ApiAccessLogDO convert(ApiAccessLogCreateReqDTO bean); |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.infra.convert.logger; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; |  | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExcelVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogRespVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; |  | ||||||
| import org.mapstruct.Mapper; |  | ||||||
| import org.mapstruct.factory.Mappers; |  | ||||||
|  |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * API 错误日志 Convert |  | ||||||
|  * |  | ||||||
|  * @author 芋道源码 |  | ||||||
|  */ |  | ||||||
| @Mapper |  | ||||||
| public interface ApiErrorLogConvert { |  | ||||||
|  |  | ||||||
|     ApiErrorLogConvert INSTANCE = Mappers.getMapper(ApiErrorLogConvert.class); |  | ||||||
|  |  | ||||||
|     ApiErrorLogRespVO convert(ApiErrorLogDO bean); |  | ||||||
|  |  | ||||||
|     PageResult<ApiErrorLogRespVO> convertPage(PageResult<ApiErrorLogDO> page); |  | ||||||
|  |  | ||||||
|     List<ApiErrorLogExcelVO> convertList02(List<ApiErrorLogDO> list); |  | ||||||
|  |  | ||||||
|     ApiErrorLogDO convert(ApiErrorLogCreateReqDTO bean); |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -3,7 +3,6 @@ package cn.iocoder.yudao.module.infra.dal.mysql.logger; | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | ||||||
| import org.apache.ibatis.annotations.Delete; | import org.apache.ibatis.annotations.Delete; | ||||||
| @ -11,7 +10,6 @@ import org.apache.ibatis.annotations.Mapper; | |||||||
| import org.apache.ibatis.annotations.Param; | import org.apache.ibatis.annotations.Param; | ||||||
|  |  | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * API 访问日志 Mapper |  * API 访问日志 Mapper | ||||||
| @ -34,19 +32,6 @@ public interface ApiAccessLogMapper extends BaseMapperX<ApiAccessLogDO> { | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     default List<ApiAccessLogDO> selectList(ApiAccessLogExportReqVO reqVO) { |  | ||||||
|         return selectList(new LambdaQueryWrapperX<ApiAccessLogDO>() |  | ||||||
|                 .eqIfPresent(ApiAccessLogDO::getUserId, reqVO.getUserId()) |  | ||||||
|                 .eqIfPresent(ApiAccessLogDO::getUserType, reqVO.getUserType()) |  | ||||||
|                 .eqIfPresent(ApiAccessLogDO::getApplicationName, reqVO.getApplicationName()) |  | ||||||
|                 .likeIfPresent(ApiAccessLogDO::getRequestUrl, reqVO.getRequestUrl()) |  | ||||||
|                 .betweenIfPresent(ApiAccessLogDO::getBeginTime, reqVO.getBeginTime()) |  | ||||||
|                 .geIfPresent(ApiAccessLogDO::getDuration, reqVO.getDuration()) |  | ||||||
|                 .eqIfPresent(ApiAccessLogDO::getResultCode, reqVO.getResultCode()) |  | ||||||
|                 .orderByDesc(ApiAccessLogDO::getId) |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 物理删除指定时间之前的日志 |      * 物理删除指定时间之前的日志 | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ package cn.iocoder.yudao.module.infra.dal.mysql.logger; | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | ||||||
| import org.apache.ibatis.annotations.Delete; | import org.apache.ibatis.annotations.Delete; | ||||||
| @ -11,7 +10,6 @@ import org.apache.ibatis.annotations.Mapper; | |||||||
| import org.apache.ibatis.annotations.Param; | import org.apache.ibatis.annotations.Param; | ||||||
|  |  | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * API 错误日志 Mapper |  * API 错误日志 Mapper | ||||||
| @ -33,18 +31,6 @@ public interface ApiErrorLogMapper extends BaseMapperX<ApiErrorLogDO> { | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     default List<ApiErrorLogDO> selectList(ApiErrorLogExportReqVO reqVO) { |  | ||||||
|         return selectList(new LambdaQueryWrapperX<ApiErrorLogDO>() |  | ||||||
|                 .eqIfPresent(ApiErrorLogDO::getUserId, reqVO.getUserId()) |  | ||||||
|                 .eqIfPresent(ApiErrorLogDO::getUserType, reqVO.getUserType()) |  | ||||||
|                 .eqIfPresent(ApiErrorLogDO::getApplicationName, reqVO.getApplicationName()) |  | ||||||
|                 .likeIfPresent(ApiErrorLogDO::getRequestUrl, reqVO.getRequestUrl()) |  | ||||||
|                 .betweenIfPresent(ApiErrorLogDO::getExceptionTime, reqVO.getExceptionTime()) |  | ||||||
|                 .eqIfPresent(ApiErrorLogDO::getProcessStatus, reqVO.getProcessStatus()) |  | ||||||
|                 .orderByDesc(ApiErrorLogDO::getId) |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 物理删除指定时间之前的日志 |      * 物理删除指定时间之前的日志 | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -2,12 +2,9 @@ package cn.iocoder.yudao.module.infra.service.logger; | |||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | ||||||
|  |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * API 访问日志 Service 接口 |  * API 访问日志 Service 接口 | ||||||
|  * |  * | ||||||
| @ -30,14 +27,6 @@ public interface ApiAccessLogService { | |||||||
|      */ |      */ | ||||||
|     PageResult<ApiAccessLogDO> getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO); |     PageResult<ApiAccessLogDO> getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO); | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获得 API 访问日志列表, 用于 Excel 导出 |  | ||||||
|      * |  | ||||||
|      * @param exportReqVO 查询条件 |  | ||||||
|      * @return API 访问日志分页 |  | ||||||
|      */ |  | ||||||
|     List<ApiAccessLogDO> getApiAccessLogList(ApiAccessLogExportReqVO exportReqVO); |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 清理 exceedDay 天前的访问日志 |      * 清理 exceedDay 天前的访问日志 | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -1,10 +1,9 @@ | |||||||
| package cn.iocoder.yudao.module.infra.service.logger; | package cn.iocoder.yudao.module.infra.service.logger; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.convert.logger.ApiAccessLogConvert; |  | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; | import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; | ||||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||||
| @ -13,7 +12,6 @@ import org.springframework.validation.annotation.Validated; | |||||||
|  |  | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * API 访问日志 Service 实现类 |  * API 访问日志 Service 实现类 | ||||||
| @ -30,7 +28,7 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void createApiAccessLog(ApiAccessLogCreateReqDTO createDTO) { |     public void createApiAccessLog(ApiAccessLogCreateReqDTO createDTO) { | ||||||
|         ApiAccessLogDO apiAccessLog = ApiAccessLogConvert.INSTANCE.convert(createDTO); |         ApiAccessLogDO apiAccessLog = BeanUtils.toBean(createDTO, ApiAccessLogDO.class); | ||||||
|         apiAccessLogMapper.insert(apiAccessLog); |         apiAccessLogMapper.insert(apiAccessLog); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -39,11 +37,6 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService { | |||||||
|         return apiAccessLogMapper.selectPage(pageReqVO); |         return apiAccessLogMapper.selectPage(pageReqVO); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public List<ApiAccessLogDO> getApiAccessLogList(ApiAccessLogExportReqVO exportReqVO) { |  | ||||||
|         return apiAccessLogMapper.selectList(exportReqVO); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     @SuppressWarnings("DuplicatedCode") |     @SuppressWarnings("DuplicatedCode") | ||||||
|     public Integer cleanAccessLog(Integer exceedDay, Integer deleteLimit) { |     public Integer cleanAccessLog(Integer exceedDay, Integer deleteLimit) { | ||||||
|  | |||||||
| @ -2,12 +2,9 @@ package cn.iocoder.yudao.module.infra.service.logger; | |||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | ||||||
|  |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * API 错误日志 Service 接口 |  * API 错误日志 Service 接口 | ||||||
|  * |  * | ||||||
| @ -30,14 +27,6 @@ public interface ApiErrorLogService { | |||||||
|      */ |      */ | ||||||
|     PageResult<ApiErrorLogDO> getApiErrorLogPage(ApiErrorLogPageReqVO pageReqVO); |     PageResult<ApiErrorLogDO> getApiErrorLogPage(ApiErrorLogPageReqVO pageReqVO); | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获得 API 错误日志列表, 用于 Excel 导出 |  | ||||||
|      * |  | ||||||
|      * @param exportReqVO 查询条件 |  | ||||||
|      * @return API 错误日志分页 |  | ||||||
|      */ |  | ||||||
|     List<ApiErrorLogDO> getApiErrorLogList(ApiErrorLogExportReqVO exportReqVO); |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 更新 API 错误日志已处理 |      * 更新 API 错误日志已处理 | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -1,10 +1,9 @@ | |||||||
| package cn.iocoder.yudao.module.infra.service.logger; | package cn.iocoder.yudao.module.infra.service.logger; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.convert.logger.ApiErrorLogConvert; |  | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; | import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; | ||||||
| import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; | import cn.iocoder.yudao.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; | ||||||
| @ -14,11 +13,9 @@ import org.springframework.validation.annotation.Validated; | |||||||
|  |  | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||||
| import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; | import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; | ||||||
| import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_PROCESSED; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * API 错误日志 Service 实现类 |  * API 错误日志 Service 实现类 | ||||||
| @ -35,7 +32,7 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void createApiErrorLog(ApiErrorLogCreateReqDTO createDTO) { |     public void createApiErrorLog(ApiErrorLogCreateReqDTO createDTO) { | ||||||
|         ApiErrorLogDO apiErrorLog = ApiErrorLogConvert.INSTANCE.convert(createDTO) |         ApiErrorLogDO apiErrorLog = BeanUtils.toBean(createDTO, ApiErrorLogDO.class) | ||||||
|                 .setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); |                 .setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); | ||||||
|         apiErrorLogMapper.insert(apiErrorLog); |         apiErrorLogMapper.insert(apiErrorLog); | ||||||
|     } |     } | ||||||
| @ -45,11 +42,6 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService { | |||||||
|         return apiErrorLogMapper.selectPage(pageReqVO); |         return apiErrorLogMapper.selectPage(pageReqVO); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public List<ApiErrorLogDO> getApiErrorLogList(ApiErrorLogExportReqVO exportReqVO) { |  | ||||||
|         return apiErrorLogMapper.selectList(exportReqVO); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { |     public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { | ||||||
|         ApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); |         ApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstant | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; | import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiAccessLogMapper; | ||||||
| @ -13,7 +12,6 @@ import org.junit.jupiter.api.Test; | |||||||
| import org.springframework.context.annotation.Import; | import org.springframework.context.annotation.Import; | ||||||
|  |  | ||||||
| import javax.annotation.Resource; | 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.buildBetweenTime; | ||||||
| import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; | import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; | ||||||
| @ -75,49 +73,6 @@ public class ApiAccessLogServiceImplTest extends BaseDbUnitTest { | |||||||
|         assertPojoEquals(apiAccessLogDO, pageResult.getList().get(0)); |         assertPojoEquals(apiAccessLogDO, pageResult.getList().get(0)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testGetApiAccessLogList() { |  | ||||||
|         ApiAccessLogDO apiAccessLogDO = randomPojo(ApiAccessLogDO.class, o -> { |  | ||||||
|             o.setUserId(2233L); |  | ||||||
|             o.setUserType(UserTypeEnum.ADMIN.getValue()); |  | ||||||
|             o.setApplicationName("yudao-test"); |  | ||||||
|             o.setRequestUrl("foo"); |  | ||||||
|             o.setBeginTime(buildTime(2021, 3, 13)); |  | ||||||
|             o.setDuration(1000); |  | ||||||
|             o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()); |  | ||||||
|         }); |  | ||||||
|         apiAccessLogMapper.insert(apiAccessLogDO); |  | ||||||
|         // 测试 userId 不匹配 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setUserId(3344L))); |  | ||||||
|         // 测试 userType 不匹配 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); |  | ||||||
|         // 测试 applicationName 不匹配 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setApplicationName("test"))); |  | ||||||
|         // 测试 requestUrl 不匹配 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setRequestUrl("bar"))); |  | ||||||
|         // 测试 beginTime 不匹配:构造一个早期时间 2021-02-06 00:00:00 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setBeginTime(buildTime(2021, 2, 6)))); |  | ||||||
|         // 测试 duration 不匹配 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setDuration(100))); |  | ||||||
|         // 测试 resultCode 不匹配 |  | ||||||
|         apiAccessLogMapper.insert(cloneIgnoreId(apiAccessLogDO, o -> o.setResultCode(2))); |  | ||||||
|         // 准备参数 |  | ||||||
|         ApiAccessLogExportReqVO reqVO = new ApiAccessLogExportReqVO(); |  | ||||||
|         reqVO.setUserId(2233L); |  | ||||||
|         reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); |  | ||||||
|         reqVO.setApplicationName("yudao-test"); |  | ||||||
|         reqVO.setRequestUrl("foo"); |  | ||||||
|         reqVO.setBeginTime(buildBetweenTime(2021, 3, 13, 2021, 3, 13)); |  | ||||||
|         reqVO.setDuration(1000); |  | ||||||
|         reqVO.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()); |  | ||||||
|  |  | ||||||
|         // 调用 |  | ||||||
|         List<ApiAccessLogDO> list = apiAccessLogService.getApiAccessLogList(reqVO); |  | ||||||
|         // 断言,只查到了一条符合条件的 |  | ||||||
|         assertEquals(1, list.size()); |  | ||||||
|         assertPojoEquals(apiAccessLogDO, list.get(0)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |     @Test | ||||||
|     public void testCreateApiAccessLog() { |     public void testCreateApiAccessLog() { | ||||||
|         // 准备参数 |         // 准备参数 | ||||||
|  | |||||||
| @ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogExportReqVO; |  | ||||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | ||||||
| import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; | import cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper; | ||||||
| @ -13,7 +12,6 @@ import org.junit.jupiter.api.Test; | |||||||
| import org.springframework.context.annotation.Import; | import org.springframework.context.annotation.Import; | ||||||
|  |  | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| import static cn.hutool.core.util.RandomUtil.randomEle; | import static cn.hutool.core.util.RandomUtil.randomEle; | ||||||
| import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; | import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; | ||||||
| @ -78,46 +76,6 @@ public class ApiErrorLogServiceImplTest extends BaseDbUnitTest { | |||||||
|         assertPojoEquals(apiErrorLogDO, pageResult.getList().get(0)); |         assertPojoEquals(apiErrorLogDO, pageResult.getList().get(0)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testGetApiErrorLogList() { |  | ||||||
|         // mock 数据 |  | ||||||
|         ApiErrorLogDO apiErrorLogDO = randomPojo(ApiErrorLogDO.class, o -> { |  | ||||||
|             o.setUserId(2233L); |  | ||||||
|             o.setUserType(UserTypeEnum.ADMIN.getValue()); |  | ||||||
|             o.setApplicationName("yudao-test"); |  | ||||||
|             o.setRequestUrl("foo"); |  | ||||||
|             o.setExceptionTime(buildTime(2021, 3, 13)); |  | ||||||
|             o.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); |  | ||||||
|         }); |  | ||||||
|         apiErrorLogMapper.insert(apiErrorLogDO); |  | ||||||
|         // 测试 userId 不匹配 |  | ||||||
|         apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, o -> o.setUserId(3344L))); |  | ||||||
|         // 测试 userType 不匹配 |  | ||||||
|         apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, logDO -> logDO.setUserType(UserTypeEnum.MEMBER.getValue()))); |  | ||||||
|         // 测试 applicationName 不匹配 |  | ||||||
|         apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, logDO -> logDO.setApplicationName("test"))); |  | ||||||
|         // 测试 requestUrl 不匹配 |  | ||||||
|         apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, logDO -> logDO.setRequestUrl("bar"))); |  | ||||||
|         // 测试 exceptionTime 不匹配:构造一个早期时间 2021-02-06 00:00:00 |  | ||||||
|         apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, logDO -> logDO.setExceptionTime(buildTime(2021, 2, 6)))); |  | ||||||
|         // 测试 progressStatus 不匹配 |  | ||||||
|         apiErrorLogMapper.insert(cloneIgnoreId(apiErrorLogDO, logDO -> logDO.setProcessStatus(ApiErrorLogProcessStatusEnum.DONE.getStatus()))); |  | ||||||
|         // 准备参数 |  | ||||||
|         ApiErrorLogExportReqVO reqVO = new ApiErrorLogExportReqVO(); |  | ||||||
|         reqVO.setUserId(2233L); |  | ||||||
|         reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); |  | ||||||
|         reqVO.setApplicationName("yudao-test"); |  | ||||||
|         reqVO.setRequestUrl("foo"); |  | ||||||
|         reqVO.setExceptionTime(buildBetweenTime(2021, 3, 1, 2021, 3, 31)); |  | ||||||
|         reqVO.setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); |  | ||||||
|  |  | ||||||
|         // 调用 |  | ||||||
|         List<ApiErrorLogDO> list = apiErrorLogService.getApiErrorLogList(reqVO); |  | ||||||
|         // 断言,只查到了一条符合条件的 |  | ||||||
|         assertEquals(1, list.size()); |  | ||||||
|         assertPojoEquals(apiErrorLogDO, list.get(0)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |     @Test | ||||||
|     public void testCreateApiErrorLog() { |     public void testCreateApiErrorLog() { | ||||||
|         // 准备参数 |         // 准备参数 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV