From c6734c4bbcdd8909985a20bdb376318d462610de Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 27 Feb 2021 11:20:10 +0800 Subject: [PATCH] 调整 API 访问日志,从 system 归到 infra 更合适 --- ruoyi-common/src/main/java/com/ruoyi/common/config/ThreadPoolConfig.java | 58 ---------------------------------------------------------- ruoyi-common/src/main/resources/application.yml | 35 ----------------------------------- ruoyi-ui/src/api/infra/apiAccessLog.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ruoyi-ui/src/utils/dict.js | 2 ++ ruoyi-ui/src/views/infra/apiAccessLog/index.vue | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/framework/monitor/AdminServerConfiguration.java | 9 --------- src/main/java/cn/iocoder/dashboard/framework/monitor/config/AdminServerConfiguration.java | 9 +++++++++ src/main/java/cn/iocoder/dashboard/framework/mybatis/package-info.java | 3 +++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/InfApiAccessLogController.java | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java | 23 +++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/convert/logger/InfApiAccessLogConvert.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java | 6 ++++++ src/main/java/cn/iocoder/dashboard/modules/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md | 1 + src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java | 4 ++++ src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysApiAccessLogController.java | 71 ----------------------------------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogBaseVO.java | 75 --------------------------------------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExcelVO.java | 66 ------------------------------------------------------------------ src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExportReqVO.java | 42 ------------------------------------------ src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogPageReqVO.java | 47 ----------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogRespVO.java | 23 ----------------------- src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysApiAccessLogConvert.java | 33 --------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md | 2 +- src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiAccessLogDO.java | 103 ------------------------------------------------------------------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiErrorLogDO.java | 4 ---- src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/logger/SysApiAccessLogMapper.java | 45 --------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysApiAccessLogService.java | 42 ------------------------------------------ src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysApiAccessLogServiceImpl.java | 54 ------------------------------------------------------ src/main/resources/codegen/java/dal/mapper.vm | 3 ++- 36 files changed, 890 insertions(+), 709 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/config/ThreadPoolConfig.java delete mode 100644 ruoyi-common/src/main/resources/application.yml create mode 100644 ruoyi-ui/src/api/infra/apiAccessLog.js create mode 100644 ruoyi-ui/src/views/infra/apiAccessLog/index.vue delete mode 100644 src/main/java/cn/iocoder/dashboard/framework/monitor/AdminServerConfiguration.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/monitor/config/AdminServerConfiguration.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/InfApiAccessLogController.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/logger/InfApiAccessLogConvert.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysApiAccessLogController.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogBaseVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExcelVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExportReqVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogPageReqVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogRespVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysApiAccessLogConvert.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiAccessLogDO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiErrorLogDO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/logger/SysApiAccessLogMapper.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysApiAccessLogService.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysApiAccessLogServiceImpl.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/ThreadPoolConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/ThreadPoolConfig.java deleted file mode 100644 index dac6f6e..0000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/ThreadPoolConfig.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.ruoyi.framework.config; - -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.ThreadPoolExecutor; - -import org.apache.commons.lang3.concurrent.BasicThreadFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import com.ruoyi.common.utils.Threads; - -/** - * 线程池配置 - * - * @author ruoyi - **/ -@Configuration -public class ThreadPoolConfig { - // 核心线程池大小 - private int corePoolSize = 50; - - // 最大可创建的线程数 - private int maxPoolSize = 200; - - // 队列最大长度 - private int queueCapacity = 1000; - - // 线程池维护线程所允许的空闲时间 - private int keepAliveSeconds = 300; - - @Bean(name = "threadPoolTaskExecutor") - public ThreadPoolTaskExecutor threadPoolTaskExecutor() { - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(maxPoolSize); - executor.setCorePoolSize(corePoolSize); - executor.setQueueCapacity(queueCapacity); - executor.setKeepAliveSeconds(keepAliveSeconds); - // 线程池对拒绝任务(无线程可用)的处理策略 - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return executor; - } - - /** - * 执行周期性或定时任务 - */ - @Bean(name = "scheduledExecutorService") - protected ScheduledExecutorService scheduledExecutorService() { - return new ScheduledThreadPoolExecutor(corePoolSize, - new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) { - @Override - protected void afterExecute(Runnable r, Throwable t) { - super.afterExecute(r, t); - Threads.printException(r, t); - } - }; - } -} diff --git a/ruoyi-common/src/main/resources/application.yml b/ruoyi-common/src/main/resources/application.yml deleted file mode 100644 index 24c97bc..0000000 --- a/ruoyi-common/src/main/resources/application.yml +++ /dev/null @@ -1,35 +0,0 @@ -# 项目相关配置 -ruoyi: - # 名称 - name: RuoYi - # 版本 - version: 3.3.0 - # 版权年份 - copyrightYear: 2020 - # 实例演示开关 - demoEnabled: true - # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) - profile: D:/ruoyi/uploadPath - # 获取ip地址开关 - addressEnabled: false - -# 开发环境配置 -server: - # 服务器的HTTP端口,默认为8080 - port: 8080 - servlet: - # 应用的访问路径 - context-path: / - tomcat: - # tomcat的URI编码 - uri-encoding: UTF-8 - # tomcat最大线程数,默认为200 - max-threads: 800 - # Tomcat启动初始化的线程数,默认值25 - min-spare-threads: 30 - -# 日志配置 -logging: - level: - com.ruoyi: debug - org.springframework: warn diff --git a/ruoyi-ui/src/api/infra/apiAccessLog.js b/ruoyi-ui/src/api/infra/apiAccessLog.js new file mode 100644 index 0000000..5d1249a --- /dev/null +++ b/ruoyi-ui/src/api/infra/apiAccessLog.js @@ -0,0 +1,55 @@ +import request from '@/utils/request' + +// 创建API 访问日志 +export function createApiAccessLog(data) { + return request({ + url: '/infra/api-access-log/create', + method: 'post', + data: data + }) +} + +// 更新API 访问日志 +export function updateApiAccessLog(data) { + return request({ + url: '/infra/api-access-log/update', + method: 'put', + data: data + }) +} + + +// 删除API 访问日志 +export function deleteApiAccessLog(id) { + return request({ + url: '/infra/api-access-log/delete?id=' + id, + method: 'delete' + }) +} + +// 获得API 访问日志 +export function getApiAccessLog(id) { + return request({ + url: '/infra/api-access-log/get?id=' + id, + method: 'get' + }) +} + +// 获得API 访问日志分页 +export function getApiAccessLogPage(query) { + return request({ + url: '/infra/api-access-log/page', + method: 'get', + params: query + }) +} + +// 导出API 访问日志 Excel +export function exportApiAccessLogExcel(query) { + return request({ + url: '/infra/api-access-log/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/ruoyi-ui/src/utils/dict.js b/ruoyi-ui/src/utils/dict.js index 30bb2a0..f402fd5 100644 --- a/ruoyi-ui/src/utils/dict.js +++ b/ruoyi-ui/src/utils/dict.js @@ -6,6 +6,8 @@ import store from '@/store' export const DICT_TYPE = { + USER_TYPE: 'user_type', + SYS_COMMON_STATUS: 'sys_common_status', SYS_MENU_TYPE: 'sys_menu_type', SYS_ROLE_TYPE: 'sys_role_type', diff --git a/ruoyi-ui/src/views/infra/apiAccessLog/index.vue b/ruoyi-ui/src/views/infra/apiAccessLog/index.vue new file mode 100644 index 0000000..ee7819f --- /dev/null +++ b/ruoyi-ui/src/views/infra/apiAccessLog/index.vue @@ -0,0 +1,204 @@ + + + diff --git a/src/main/java/cn/iocoder/dashboard/framework/monitor/AdminServerConfiguration.java b/src/main/java/cn/iocoder/dashboard/framework/monitor/AdminServerConfiguration.java deleted file mode 100644 index 30e5e23..0000000 --- a/src/main/java/cn/iocoder/dashboard/framework/monitor/AdminServerConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.dashboard.framework.monitor; - -import de.codecentric.boot.admin.server.config.EnableAdminServer; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableAdminServer -public class AdminServerConfiguration { -} diff --git a/src/main/java/cn/iocoder/dashboard/framework/monitor/config/AdminServerConfiguration.java b/src/main/java/cn/iocoder/dashboard/framework/monitor/config/AdminServerConfiguration.java new file mode 100644 index 0000000..77c166c --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/monitor/config/AdminServerConfiguration.java @@ -0,0 +1,9 @@ +package cn.iocoder.dashboard.framework.monitor.config; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableAdminServer +public class AdminServerConfiguration { +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/mybatis/package-info.java b/src/main/java/cn/iocoder/dashboard/framework/mybatis/package-info.java index 30fb75d..d6dfba7 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/mybatis/package-info.java +++ b/src/main/java/cn/iocoder/dashboard/framework/mybatis/package-info.java @@ -1 +1,4 @@ +/** + * 使用 MyBatis Plus 提升使用 MyBatis 的开发效率 + */ package cn.iocoder.dashboard.framework.mybatis; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/InfApiAccessLogController.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/InfApiAccessLogController.java new file mode 100644 index 0000000..b3f0f78 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/InfApiAccessLogController.java @@ -0,0 +1,71 @@ +package cn.iocoder.dashboard.modules.infra.controller.logger; + +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; +import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogRespVO; +import cn.iocoder.dashboard.modules.infra.convert.logger.InfApiAccessLogConvert; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import cn.iocoder.dashboard.modules.infra.service.logger.InfApiAccessLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; +import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum.EXPORT; + +@Api(tags = "API 访问日志") +@RestController +@RequestMapping("/infra/api-access-log") +@Validated +public class InfApiAccessLogController { + + @Resource + private InfApiAccessLogService apiAccessLogService; + + @GetMapping("/get") + @ApiOperation("获得API 访问日志") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") + public CommonResult getApiAccessLog(@RequestParam("id") Long id) { + InfApiAccessLogDO apiAccessLog = apiAccessLogService.getApiAccessLog(id); + return success(InfApiAccessLogConvert.INSTANCE.convert(apiAccessLog)); + } + + @GetMapping("/page") + @ApiOperation("获得API 访问日志分页") + @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") + public CommonResult> getApiAccessLogPage(@Valid InfApiAccessLogPageReqVO pageVO) { + PageResult pageResult = apiAccessLogService.getApiAccessLogPage(pageVO); + return success(InfApiAccessLogConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出API 访问日志 Excel") + @PreAuthorize("@ss.hasPermission('infra:api-access-log:export')") + @OperateLog(type = EXPORT) + public void exportApiAccessLogExcel(@Valid InfApiAccessLogExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = apiAccessLogService.getApiAccessLogList(exportReqVO); + // 导出 Excel + List datas = InfApiAccessLogConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "API 访问日志.xls", "数据", InfApiAccessLogExcelVO.class, datas); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java new file mode 100644 index 0000000..ecfa69d --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java @@ -0,0 +1,75 @@ +package cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** +* API 访问日志 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class InfApiAccessLogBaseVO { + + @ApiModelProperty(value = "链路追踪编号", required = true, example = "66600cb6-7852-11eb-9439-0242ac130002") + @NotNull(message = "链路追踪编号不能为空") + private String traceId; + + @ApiModelProperty(value = "用户编号", required = true, example = "666") + @NotNull(message = "用户编号不能为空") + private Long userId; + + @ApiModelProperty(value = "用户类型", required = true, example = "2", notes = "参见 UserTypeEnum 枚举") + @NotNull(message = "用户类型不能为空") + private Integer userType; + + @ApiModelProperty(value = "应用名", required = true, example = "dashboard") + @NotNull(message = "应用名不能为空") + private String applicationName; + + @ApiModelProperty(value = "请求方法名", required = true, example = "GET") + @NotNull(message = "请求方法名不能为空") + private String requestMethod; + + @ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy") + @NotNull(message = "请求地址不能为空") + private String requestUrl; + + @ApiModelProperty(value = "Java 方法的参数") + private String requestParams; + + @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1") + @NotNull(message = "用户 IP不能为空") + private String userIp; + + @ApiModelProperty(value = "浏览器 UA", required = true, example = "Mozilla/5.0") + @NotNull(message = "浏览器 UA不能为空") + private String userAgent; + + @ApiModelProperty(value = "开始请求时间", required = true) + @NotNull(message = "开始请求时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date beginTime; + + @ApiModelProperty(value = "结束请求时间", required = true) + @NotNull(message = "结束请求时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date endTime; + + @ApiModelProperty(value = "执行时长", required = true, example = "100") + @NotNull(message = "执行时长不能为空") + private Integer duration; + + @ApiModelProperty(value = "结果码", required = true, example = "0") + @NotNull(message = "结果码不能为空") + private Integer resultCode; + + @ApiModelProperty(value = "结果提示", example = "芋道源码,牛逼!") + private String resultMsg; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java new file mode 100644 index 0000000..96fe357 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog; + +import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; +import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.util.Date; + +import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.USER_TYPE; + +/** + * API 访问日志 Excel VO + * + * @author 芋道源码 + */ +@Data +public class InfApiAccessLogExcelVO { + + @ExcelProperty("日志主键") + private Long id; + + @ExcelProperty("链路追踪编号") + private String traceId; + + @ExcelProperty("用户编号") + private Long userId; + + @ExcelProperty(value = "用户类型", converter = DictConvert.class) + @DictFormat(USER_TYPE) + private Integer userType; + + @ExcelProperty("应用名") + private String applicationName; + + @ExcelProperty("请求方法名") + private String requestMethod; + + @ExcelProperty("请求地址") + private String requestUrl; + + @ExcelProperty("Java 方法的参数") + private String requestParams; + + @ExcelProperty("用户 IP") + private String userIp; + + @ExcelProperty("浏览器 UA") + private String userAgent; + + @ExcelProperty("开始请求时间") + private Date beginTime; + + @ExcelProperty("结束请求时间") + private Date endTime; + + @ExcelProperty("执行时长") + private Integer duration; + + @ExcelProperty("结果码") + private Integer resultCode; + + @ExcelProperty("结果提示") + private String resultMsg; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java new file mode 100644 index 0000000..7821cfc --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExportReqVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel(value = "API 访问日志 Excel 导出 Request VO", description = "参数和 InfApiAccessLogPageReqVO 是一致的") +@Data +public class InfApiAccessLogExportReqVO { + + @ApiModelProperty(value = "用户编号", example = "666") + private Long userId; + + @ApiModelProperty(value = "用户类型", example = "2") + private Integer userType; + + @ApiModelProperty(value = "应用名", example = "dashboard") + private String applicationName; + + @ApiModelProperty(value = "请求地址", example = "/xxx/yyy", notes = "模糊匹配") + private String requestUrl; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始开始请求时间") + private Date beginBeginTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束开始请求时间") + private Date endBeginTime; + + @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒") + private Integer duration; + + @ApiModelProperty(value = "结果码", example = "0") + private Integer resultCode; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java new file mode 100644 index 0000000..df0b12b --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogPageReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog; + +import cn.iocoder.dashboard.common.pojo.PageParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("API 访问日志分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfApiAccessLogPageReqVO extends PageParam { + + @ApiModelProperty(value = "用户编号", example = "666") + private Long userId; + + @ApiModelProperty(value = "用户类型", example = "2") + private Integer userType; + + @ApiModelProperty(value = "应用名", example = "dashboard") + private String applicationName; + + @ApiModelProperty(value = "请求地址", example = "/xxx/yyy", notes = "模糊匹配") + private String requestUrl; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始开始请求时间") + private Date beginBeginTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束开始请求时间") + private Date endBeginTime; + + @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒") + private Integer duration; + + @ApiModelProperty(value = "结果码", example = "0") + private Integer resultCode; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java new file mode 100644 index 0000000..d3300c8 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogRespVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@ApiModel("API 访问日志 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfApiAccessLogRespVO extends InfApiAccessLogBaseVO { + + @ApiModelProperty(value = "日志主键", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/logger/InfApiAccessLogConvert.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/logger/InfApiAccessLogConvert.java new file mode 100644 index 0000000..be01324 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/logger/InfApiAccessLogConvert.java @@ -0,0 +1,33 @@ +package cn.iocoder.dashboard.modules.infra.convert.logger; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExcelVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogRespVO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * API 访问日志 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface InfApiAccessLogConvert { + + InfApiAccessLogConvert INSTANCE = Mappers.getMapper(InfApiAccessLogConvert.class); + + InfApiAccessLogDO convert(ApiAccessLogCreateDTO bean); + + InfApiAccessLogRespVO convert(InfApiAccessLogDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java new file mode 100644 index 0000000..6be6252 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 POJO 类的实体转换 + * + * 目前使用 MapStruct 框架 + */ +package cn.iocoder.dashboard.modules.infra.convert; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md new file mode 100644 index 0000000..8153487 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md @@ -0,0 +1 @@ + diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java new file mode 100644 index 0000000..ae8a263 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiAccessLogDO.java @@ -0,0 +1,103 @@ +package cn.iocoder.dashboard.modules.infra.dal.dataobject.logger; + +import cn.iocoder.dashboard.common.enums.UserTypeEnum; +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.util.Date; + +/** + * API 访问日志 + * + * @author 芋道源码 + */ +@TableName("inf_api_access_log") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InfApiAccessLogDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Integer id; + /** + * 链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。 + */ + private String traceId; + /** + * 用户编号 + */ + private Integer userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 应用名 + * + * 目前读取 `spring.application.name` 配置项 + */ + private String applicationName; + + /** + * 请求方法名 + */ + private String requestMethod; + /** + * 访问地址 + */ + private String requestUrl; + /** + * 请求参数 + * + * query: Query String + * body: Quest Body + */ + private String requestParams; + /** + * 用户 IP + */ + private String userIp; + /** + * 浏览器 UA + */ + private String userAgent; + + /** + * 开始请求时间 + */ + private Date beginTime; + /** + * 结束请求时间 + */ + private Date endTime; + /** + * 执行时长,单位:毫秒 + */ + private Integer duration; + /** + * 结果码 + * + * 目前使用的 {@link CommonResult#getCode()} 属性 + */ + private Integer resultCode; + /** + * 结果提示 + * + * 目前使用的 {@link CommonResult#getMsg()} 属性 + */ + private String resultMsg; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java new file mode 100644 index 0000000..1cc630b --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java @@ -0,0 +1,4 @@ +package cn.iocoder.dashboard.modules.infra.dal.dataobject.logger; + +public class InfApiErrorLogDO { +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java new file mode 100644 index 0000000..740bfeb --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/logger/InfApiAccessLogMapper.java @@ -0,0 +1,47 @@ +package cn.iocoder.dashboard.modules.infra.dal.mysql.logger; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * API 访问日志 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface InfApiAccessLogMapper extends BaseMapperX { + + default PageResult selectPage(InfApiAccessLogPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() + .eqIfPresent("user_id", reqVO.getUserId()) + .eqIfPresent("user_type", reqVO.getUserType()) + .eqIfPresent("application_name", reqVO.getApplicationName()) + .likeIfPresent("request_url", reqVO.getRequestUrl()) + .betweenIfPresent("begin_time", reqVO.getBeginBeginTime(), reqVO.getEndBeginTime()) + .geIfPresent("duration", reqVO.getDuration()) + .eqIfPresent("result_code", reqVO.getResultCode()) + .orderByDesc("id") + ); + } + + default List selectList(InfApiAccessLogExportReqVO reqVO) { + return selectList(new QueryWrapperX() + .eqIfPresent("user_id", reqVO.getUserId()) + .eqIfPresent("user_type", reqVO.getUserType()) + .eqIfPresent("application_name", reqVO.getApplicationName()) + .likeIfPresent("request_url", reqVO.getRequestUrl()) + .betweenIfPresent("begin_time", reqVO.getBeginBeginTime(), reqVO.getEndBeginTime()) + .geIfPresent("duration", reqVO.getDuration()) + .eqIfPresent("result_code", reqVO.getResultCode()) + .orderByDesc("id") + ); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java new file mode 100644 index 0000000..ba9aafb --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java @@ -0,0 +1,42 @@ +package cn.iocoder.dashboard.modules.infra.service.logger; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFrameworkService; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; + +import java.util.List; + +/** + * API 访问日志 Service 接口 + * + * @author 芋道源码 + */ +public interface InfApiAccessLogService extends ApiAccessLogFrameworkService { + + /** + * 获得 API 访问日志 + * + * @param id 编号 + * @return API 访问日志 + */ + InfApiAccessLogDO getApiAccessLog(Long id); + + /** + * 获得 API 访问日志分页 + * + * @param pageReqVO 分页查询 + * @return API 访问日志分页 + */ + PageResult getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO); + + /** + * 获得 API 访问日志列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return API 访问日志分页 + */ + List getApiAccessLogList(InfApiAccessLogExportReqVO exportReqVO); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java new file mode 100644 index 0000000..9698eb5 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java @@ -0,0 +1,54 @@ +package cn.iocoder.dashboard.modules.infra.service.logger.impl; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO; +import cn.iocoder.dashboard.modules.infra.convert.logger.InfApiAccessLogConvert; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.logger.InfApiAccessLogDO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.logger.InfApiAccessLogMapper; +import cn.iocoder.dashboard.modules.infra.service.logger.InfApiAccessLogService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * API 访问日志 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class InfApiAccessLogServiceImpl implements InfApiAccessLogService { + + @Resource + private InfApiAccessLogMapper apiAccessLogMapper; + + @Override + @Async + public void createApiAccessLogAsync(@Valid ApiAccessLogCreateDTO createDTO) { + // 插入 + InfApiAccessLogDO apiAccessLog = InfApiAccessLogConvert.INSTANCE.convert(createDTO); + apiAccessLogMapper.insert(apiAccessLog); + } + + @Override + public InfApiAccessLogDO getApiAccessLog(Long id) { + return apiAccessLogMapper.selectById(id); + } + + @Override + public PageResult getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO) { + return apiAccessLogMapper.selectPage(pageReqVO); + } + + @Override + public List getApiAccessLogList(InfApiAccessLogExportReqVO exportReqVO) { + return apiAccessLogMapper.selectList(exportReqVO); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysApiAccessLogController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysApiAccessLogController.java deleted file mode 100644 index 5463629..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysApiAccessLogController.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.logger; - -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; -import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExcelVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogRespVO; -import cn.iocoder.dashboard.modules.system.convert.logger.SysApiAccessLogConvert; -import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; -import cn.iocoder.dashboard.modules.system.service.logger.SysApiAccessLogService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import java.io.IOException; -import java.util.List; - -import static cn.iocoder.dashboard.common.pojo.CommonResult.success; -import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum.EXPORT; - -@Api(tags = "API 访问日志") -@RestController -@RequestMapping("/system/api-access-log") -@Validated -public class SysApiAccessLogController { - - @Resource - private SysApiAccessLogService apiAccessLogService; - - @GetMapping("/get") - @ApiOperation("获得API 访问日志") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('system:api-access-log:query')") - public CommonResult getApiAccessLog(@RequestParam("id") Long id) { - SysApiAccessLogDO apiAccessLog = apiAccessLogService.getApiAccessLog(id); - return success(SysApiAccessLogConvert.INSTANCE.convert(apiAccessLog)); - } - - @GetMapping("/page") - @ApiOperation("获得API 访问日志分页") - @PreAuthorize("@ss.hasPermission('system:api-access-log:query')") - public CommonResult> getApiAccessLogPage(@Valid SysApiAccessLogPageReqVO pageVO) { - PageResult pageResult = apiAccessLogService.getApiAccessLogPage(pageVO); - return success(SysApiAccessLogConvert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/export-excel") - @ApiOperation("导出API 访问日志 Excel") - @PreAuthorize("@ss.hasPermission('system:api-access-log:export')") - @OperateLog(type = EXPORT) - public void exportApiAccessLogExcel(@Valid SysApiAccessLogExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = apiAccessLogService.getApiAccessLogList(exportReqVO); - // 导出 Excel - List datas = SysApiAccessLogConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "API 访问日志.xls", "数据", SysApiAccessLogExcelVO.class, datas); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogBaseVO.java deleted file mode 100644 index bf81698..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogBaseVO.java +++ /dev/null @@ -1,75 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import javax.validation.constraints.NotNull; -import java.util.Date; - -import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -/** -* API 访问日志 Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class SysApiAccessLogBaseVO { - - @ApiModelProperty(value = "链路追踪编号", required = true, example = "66600cb6-7852-11eb-9439-0242ac130002") - @NotNull(message = "链路追踪编号不能为空") - private String traceId; - - @ApiModelProperty(value = "用户编号", required = true, example = "666") - @NotNull(message = "用户编号不能为空") - private Long userId; - - @ApiModelProperty(value = "用户类型", required = true, example = "2", notes = "参见 UserTypeEnum 枚举") - @NotNull(message = "用户类型不能为空") - private Integer userType; - - @ApiModelProperty(value = "应用名", required = true, example = "dashboard") - @NotNull(message = "应用名不能为空") - private String applicationName; - - @ApiModelProperty(value = "请求方法名", required = true, example = "GET") - @NotNull(message = "请求方法名不能为空") - private String requestMethod; - - @ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy") - @NotNull(message = "请求地址不能为空") - private String requestUrl; - - @ApiModelProperty(value = "Java 方法的参数") - private String requestParams; - - @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1") - @NotNull(message = "用户 IP不能为空") - private String userIp; - - @ApiModelProperty(value = "浏览器 UA", required = true, example = "Mozilla/5.0") - @NotNull(message = "浏览器 UA不能为空") - private String userAgent; - - @ApiModelProperty(value = "开始请求时间", required = true) - @NotNull(message = "开始请求时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date beginTime; - - @ApiModelProperty(value = "结束请求时间", required = true) - @NotNull(message = "结束请求时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endTime; - - @ApiModelProperty(value = "执行时长", required = true, example = "100") - @NotNull(message = "执行时长不能为空") - private Integer duration; - - @ApiModelProperty(value = "结果码", required = true, example = "0") - @NotNull(message = "结果码不能为空") - private Integer resultCode; - - @ApiModelProperty(value = "结果提示", example = "芋道源码,牛逼!") - private String resultMsg; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExcelVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExcelVO.java deleted file mode 100644 index 056a26d..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExcelVO.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; - -import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; -import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -import java.util.Date; - -import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.USER_TYPE; - -/** - * API 访问日志 Excel VO - * - * @author 芋道源码 - */ -@Data -public class SysApiAccessLogExcelVO { - - @ExcelProperty("日志主键") - private Long id; - - @ExcelProperty("链路追踪编号") - private String traceId; - - @ExcelProperty("用户编号") - private Long userId; - - @ExcelProperty(value = "用户类型", converter = DictConvert.class) - @DictFormat(USER_TYPE) - private Integer userType; - - @ExcelProperty("应用名") - private String applicationName; - - @ExcelProperty("请求方法名") - private String requestMethod; - - @ExcelProperty("请求地址") - private String requestUrl; - - @ExcelProperty("Java 方法的参数") - private String requestParams; - - @ExcelProperty("用户 IP") - private String userIp; - - @ExcelProperty("浏览器 UA") - private String userAgent; - - @ExcelProperty("开始请求时间") - private Date beginTime; - - @ExcelProperty("结束请求时间") - private Date endTime; - - @ExcelProperty("执行时长") - private Integer duration; - - @ExcelProperty("结果码") - private Integer resultCode; - - @ExcelProperty("结果提示") - private String resultMsg; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExportReqVO.java deleted file mode 100644 index 048b697..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExportReqVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel(value = "API 访问日志 Excel 导出 Request VO", description = "参数和 SysApiAccessLogPageReqVO 是一致的") -@Data -public class SysApiAccessLogExportReqVO { - - @ApiModelProperty(value = "用户编号", example = "666") - private Long userId; - - @ApiModelProperty(value = "用户类型", example = "2") - private Integer userType; - - @ApiModelProperty(value = "应用名", example = "dashboard") - private String applicationName; - - @ApiModelProperty(value = "请求地址", example = "/xxx/yyy", notes = "模糊匹配") - private String requestUrl; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始开始请求时间") - private Date beginBeginTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束开始请求时间") - private Date endBeginTime; - - @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒") - private Integer duration; - - @ApiModelProperty(value = "结果码", example = "0") - private Integer resultCode; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogPageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogPageReqVO.java deleted file mode 100644 index 48323e1..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogPageReqVO.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; - -import cn.iocoder.dashboard.common.pojo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("API 访问日志分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SysApiAccessLogPageReqVO extends PageParam { - - @ApiModelProperty(value = "用户编号", example = "666") - private Long userId; - - @ApiModelProperty(value = "用户类型", example = "2") - private Integer userType; - - @ApiModelProperty(value = "应用名", example = "dashboard") - private String applicationName; - - @ApiModelProperty(value = "请求地址", example = "/xxx/yyy", notes = "模糊匹配") - private String requestUrl; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始开始请求时间") - private Date beginBeginTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束开始请求时间") - private Date endBeginTime; - - @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒") - private Integer duration; - - @ApiModelProperty(value = "结果码", example = "0") - private Integer resultCode; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogRespVO.java deleted file mode 100644 index 7f0c2d0..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogRespVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.util.Date; - -@ApiModel("API 访问日志 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SysApiAccessLogRespVO extends SysApiAccessLogBaseVO { - - @ApiModelProperty(value = "日志主键", required = true, example = "1024") - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysApiAccessLogConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysApiAccessLogConvert.java deleted file mode 100644 index 2b97cfb..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysApiAccessLogConvert.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.dashboard.modules.system.convert.logger; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExcelVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogRespVO; -import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * API 访问日志 Convert - * - * @author 芋道源码 - */ -@Mapper -public interface SysApiAccessLogConvert { - - SysApiAccessLogConvert INSTANCE = Mappers.getMapper(SysApiAccessLogConvert.class); - - SysApiAccessLogDO convert(ApiAccessLogCreateDTO bean); - - SysApiAccessLogRespVO convert(SysApiAccessLogDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/src/main/java/cn/iocoder/dashboard/modules/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md index af9fdef..8153487 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md +++ b/src/main/java/cn/iocoder/dashboard/modules/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md @@ -1 +1 @@ - + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiAccessLogDO.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiAccessLogDO.java deleted file mode 100644 index 266592f..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiAccessLogDO.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.iocoder.dashboard.modules.system.dal.dataobject.logger; - -import cn.iocoder.dashboard.common.enums.UserTypeEnum; -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -import java.util.Date; - -/** - * API 访问日志 - * - * @author 芋道源码 - */ -@TableName("sys_api_access_log") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class SysApiAccessLogDO extends BaseDO { - - /** - * 编号 - */ - @TableId - private Integer id; - /** - * 链路追踪编号 - * - * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。 - */ - private String traceId; - /** - * 用户编号 - */ - private Integer userId; - /** - * 用户类型 - * - * 枚举 {@link UserTypeEnum} - */ - private Integer userType; - /** - * 应用名 - * - * 目前读取 `spring.application.name` 配置项 - */ - private String applicationName; - - /** - * 请求方法名 - */ - private String requestMethod; - /** - * 访问地址 - */ - private String requestUrl; - /** - * 请求参数 - * - * query: Query String - * body: Quest Body - */ - private String requestParams; - /** - * 用户 IP - */ - private String userIp; - /** - * 浏览器 UA - */ - private String userAgent; - - /** - * 开始请求时间 - */ - private Date beginTime; - /** - * 结束请求时间 - */ - private Date endTime; - /** - * 执行时长,单位:毫秒 - */ - private Integer duration; - /** - * 结果码 - * - * 目前使用的 {@link CommonResult#getCode()} 属性 - */ - private Integer resultCode; - /** - * 结果提示 - * - * 目前使用的 {@link CommonResult#getMsg()} 属性 - */ - private String resultMsg; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiErrorLogDO.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiErrorLogDO.java deleted file mode 100644 index af13916..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiErrorLogDO.java +++ /dev/null @@ -1,4 +0,0 @@ -package cn.iocoder.dashboard.modules.system.dal.dataobject.logger; - -public class SysApiErrorLogDO { -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/logger/SysApiAccessLogMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/logger/SysApiAccessLogMapper.java deleted file mode 100644 index c9644a3..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/logger/SysApiAccessLogMapper.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.dashboard.modules.system.dal.mysql.logger; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; -import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * API 访问日志 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface SysApiAccessLogMapper extends BaseMapperX { - - default PageResult selectPage(SysApiAccessLogPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() - .eqIfPresent("user_id", reqVO.getUserId()) - .eqIfPresent("user_type", reqVO.getUserType()) - .eqIfPresent("application_name", reqVO.getApplicationName()) - .likeIfPresent("request_url", reqVO.getRequestUrl()) - .betweenIfPresent("begin_time", reqVO.getBeginBeginTime(), reqVO.getEndBeginTime()) - .geIfPresent("duration", reqVO.getDuration()) - .eqIfPresent("result_code", reqVO.getResultCode()) - ); - } - - default List selectList(SysApiAccessLogExportReqVO reqVO) { - return selectList(new QueryWrapperX() - .eqIfPresent("user_id", reqVO.getUserId()) - .eqIfPresent("user_type", reqVO.getUserType()) - .eqIfPresent("application_name", reqVO.getApplicationName()) - .likeIfPresent("request_url", reqVO.getRequestUrl()) - .betweenIfPresent("begin_time", reqVO.getBeginBeginTime(), reqVO.getEndBeginTime()) - .geIfPresent("duration", reqVO.getDuration()) - .eqIfPresent("result_code", reqVO.getResultCode()) - ); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysApiAccessLogService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysApiAccessLogService.java deleted file mode 100644 index db4ff26..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysApiAccessLogService.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.logger; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFrameworkService; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; -import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; - -import java.util.List; - -/** - * API 访问日志 Service 接口 - * - * @author 芋道源码 - */ -public interface SysApiAccessLogService extends ApiAccessLogFrameworkService { - - /** - * 获得 API 访问日志 - * - * @param id 编号 - * @return API 访问日志 - */ - SysApiAccessLogDO getApiAccessLog(Long id); - - /** - * 获得 API 访问日志分页 - * - * @param pageReqVO 分页查询 - * @return API 访问日志分页 - */ - PageResult getApiAccessLogPage(SysApiAccessLogPageReqVO pageReqVO); - - /** - * 获得 API 访问日志列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return API 访问日志分页 - */ - List getApiAccessLogList(SysApiAccessLogExportReqVO exportReqVO); - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysApiAccessLogServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysApiAccessLogServiceImpl.java deleted file mode 100644 index eebf76b..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysApiAccessLogServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.logger.impl; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; -import cn.iocoder.dashboard.modules.system.convert.logger.SysApiAccessLogConvert; -import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; -import cn.iocoder.dashboard.modules.system.dal.mysql.logger.SysApiAccessLogMapper; -import cn.iocoder.dashboard.modules.system.service.logger.SysApiAccessLogService; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import javax.validation.Valid; -import java.util.List; - -/** - * API 访问日志 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class SysApiAccessLogServiceImpl implements SysApiAccessLogService { - - @Resource - private SysApiAccessLogMapper apiAccessLogMapper; - - @Override - @Async - public void createApiAccessLogAsync(@Valid ApiAccessLogCreateDTO createDTO) { - // 插入 - SysApiAccessLogDO apiAccessLog = SysApiAccessLogConvert.INSTANCE.convert(createDTO); - apiAccessLogMapper.insert(apiAccessLog); - } - - @Override - public SysApiAccessLogDO getApiAccessLog(Long id) { - return apiAccessLogMapper.selectById(id); - } - - @Override - public PageResult getApiAccessLogPage(SysApiAccessLogPageReqVO pageReqVO) { - return apiAccessLogMapper.selectPage(pageReqVO); - } - - @Override - public List getApiAccessLogList(SysApiAccessLogExportReqVO exportReqVO) { - return apiAccessLogMapper.selectList(exportReqVO); - } - -} diff --git a/src/main/resources/codegen/java/dal/mapper.vm b/src/main/resources/codegen/java/dal/mapper.vm index 8d3a81d..1b40308 100644 --- a/src/main/resources/codegen/java/dal/mapper.vm +++ b/src/main/resources/codegen/java/dal/mapper.vm @@ -52,12 +52,13 @@ public interface ${table.className}Mapper extends BaseMapperX<${table.className} default PageResult<${table.className}DO> selectPage(${table.className}PageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX<${table.className}DO>() #listCondition() + .orderByDesc("id")# 大多数情况下,id 倒序 ); } default List<${table.className}DO> selectList(${table.className}ExportReqVO reqVO) { return selectList(new QueryWrapperX<${table.className}DO>() - #listCondition() + #listCondition()# 大多数情况下,id 倒序 ); } -- libgit2 0.21.4