Commit 0678fb7ca02834996616cde27c76bca9c20d9b0c
1 parent
7a87fdbd
1. 优化代码生成器的模板
2. 增加 API 正常日志的 API 接口
Showing
19 changed files
with
485 additions
and
22 deletions
src/main/java/cn/iocoder/dashboard/framework/logger/apilog/config/ApiLogConfiguration.java
| @@ -4,6 +4,7 @@ import cn.iocoder.dashboard.framework.logger.apilog.core.filter.ApiAccessLogFilt | @@ -4,6 +4,7 @@ import cn.iocoder.dashboard.framework.logger.apilog.core.filter.ApiAccessLogFilt | ||
| 4 | import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFrameworkService; | 4 | import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFrameworkService; |
| 5 | import cn.iocoder.dashboard.framework.web.config.WebProperties; | 5 | import cn.iocoder.dashboard.framework.web.config.WebProperties; |
| 6 | import cn.iocoder.dashboard.framework.web.core.enums.FilterOrderEnum; | 6 | import cn.iocoder.dashboard.framework.web.core.enums.FilterOrderEnum; |
| 7 | +import org.springframework.beans.factory.annotation.Value; | ||
| 7 | import org.springframework.boot.web.servlet.FilterRegistrationBean; | 8 | import org.springframework.boot.web.servlet.FilterRegistrationBean; |
| 8 | import org.springframework.context.annotation.Bean; | 9 | import org.springframework.context.annotation.Bean; |
| 9 | import org.springframework.context.annotation.Configuration; | 10 | import org.springframework.context.annotation.Configuration; |
| @@ -18,8 +19,9 @@ public class ApiLogConfiguration { | @@ -18,8 +19,9 @@ public class ApiLogConfiguration { | ||
| 18 | */ | 19 | */ |
| 19 | @Bean | 20 | @Bean |
| 20 | public FilterRegistrationBean<ApiAccessLogFilter> apiAccessLogFilter(WebProperties webProperties, | 21 | public FilterRegistrationBean<ApiAccessLogFilter> apiAccessLogFilter(WebProperties webProperties, |
| 22 | + @Value("${spring.application.name}") String applicationName, | ||
| 21 | ApiAccessLogFrameworkService apiAccessLogFrameworkService) { | 23 | ApiAccessLogFrameworkService apiAccessLogFrameworkService) { |
| 22 | - ApiAccessLogFilter filter = new ApiAccessLogFilter(webProperties, apiAccessLogFrameworkService); | 24 | + ApiAccessLogFilter filter = new ApiAccessLogFilter(webProperties, applicationName, apiAccessLogFrameworkService); |
| 23 | return createFilterBean(filter, FilterOrderEnum.API_ACCESS_LOG_FILTER); | 25 | return createFilterBean(filter, FilterOrderEnum.API_ACCESS_LOG_FILTER); |
| 24 | } | 26 | } |
| 25 | 27 |
src/main/java/cn/iocoder/dashboard/framework/logger/apilog/core/filter/ApiAccessLogFilter.java
| @@ -15,7 +15,6 @@ import cn.iocoder.dashboard.util.json.JsonUtils; | @@ -15,7 +15,6 @@ import cn.iocoder.dashboard.util.json.JsonUtils; | ||
| 15 | import cn.iocoder.dashboard.util.servlet.ServletUtils; | 15 | import cn.iocoder.dashboard.util.servlet.ServletUtils; |
| 16 | import lombok.RequiredArgsConstructor; | 16 | import lombok.RequiredArgsConstructor; |
| 17 | import lombok.extern.slf4j.Slf4j; | 17 | import lombok.extern.slf4j.Slf4j; |
| 18 | -import org.springframework.beans.factory.annotation.Value; | ||
| 19 | import org.springframework.web.filter.OncePerRequestFilter; | 18 | import org.springframework.web.filter.OncePerRequestFilter; |
| 20 | 19 | ||
| 21 | import javax.servlet.FilterChain; | 20 | import javax.servlet.FilterChain; |
| @@ -36,10 +35,9 @@ import java.util.Map; | @@ -36,10 +35,9 @@ import java.util.Map; | ||
| 36 | public class ApiAccessLogFilter extends OncePerRequestFilter { | 35 | public class ApiAccessLogFilter extends OncePerRequestFilter { |
| 37 | 36 | ||
| 38 | private final WebProperties webProperties; | 37 | private final WebProperties webProperties; |
| 39 | - private final ApiAccessLogFrameworkService apiAccessLogFrameworkService; | 38 | + private final String applicationName; |
| 40 | 39 | ||
| 41 | - @Value("${spring.application.name}") | ||
| 42 | - private String applicationName; | 40 | + private final ApiAccessLogFrameworkService apiAccessLogFrameworkService; |
| 43 | 41 | ||
| 44 | @Override | 42 | @Override |
| 45 | protected boolean shouldNotFilter(HttpServletRequest request) { | 43 | protected boolean shouldNotFilter(HttpServletRequest request) { |
| @@ -51,7 +49,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | @@ -51,7 +49,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | ||
| 51 | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) | 49 | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) |
| 52 | throws ServletException, IOException { | 50 | throws ServletException, IOException { |
| 53 | // 获得开始时间 | 51 | // 获得开始时间 |
| 54 | - Date startTime = new Date(); | 52 | + Date beginTim = new Date(); |
| 55 | // 提前获得参数,避免 XssFilter 过滤处理 | 53 | // 提前获得参数,避免 XssFilter 过滤处理 |
| 56 | Map<String, String> queryString = ServletUtil.getParamMap(request); | 54 | Map<String, String> queryString = ServletUtil.getParamMap(request); |
| 57 | String requestBody = ServletUtils.isJsonRequest(request) ? ServletUtil.getBody(request) : null; | 55 | String requestBody = ServletUtils.isJsonRequest(request) ? ServletUtil.getBody(request) : null; |
| @@ -60,25 +58,25 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | @@ -60,25 +58,25 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | ||
| 60 | // 继续过滤器 | 58 | // 继续过滤器 |
| 61 | filterChain.doFilter(request, response); | 59 | filterChain.doFilter(request, response); |
| 62 | // 正常执行,记录日志 | 60 | // 正常执行,记录日志 |
| 63 | - createApiAccessLog(request, startTime, queryString, requestBody, null); | 61 | + createApiAccessLog(request, beginTim, queryString, requestBody, null); |
| 64 | } catch (Exception ex) { | 62 | } catch (Exception ex) { |
| 65 | // 异常执行,记录日志 | 63 | // 异常执行,记录日志 |
| 66 | - createApiAccessLog(request, startTime, queryString, requestBody, ex); | 64 | + createApiAccessLog(request, beginTim, queryString, requestBody, ex); |
| 67 | throw ex; | 65 | throw ex; |
| 68 | } | 66 | } |
| 69 | } | 67 | } |
| 70 | 68 | ||
| 71 | - private void createApiAccessLog(HttpServletRequest request, Date startTime, | 69 | + private void createApiAccessLog(HttpServletRequest request, Date beginTime, |
| 72 | Map<String, String> queryString, String requestBody, Exception ex) { | 70 | Map<String, String> queryString, String requestBody, Exception ex) { |
| 73 | try { | 71 | try { |
| 74 | - ApiAccessLogCreateDTO accessLog = this.buildApiAccessLogDTO(request, startTime, queryString, requestBody, ex); | 72 | + ApiAccessLogCreateDTO accessLog = this.buildApiAccessLogDTO(request, beginTime, queryString, requestBody, ex); |
| 75 | apiAccessLogFrameworkService.createApiAccessLogAsync(accessLog); | 73 | apiAccessLogFrameworkService.createApiAccessLogAsync(accessLog); |
| 76 | } catch (Exception e) { | 74 | } catch (Exception e) { |
| 77 | - log.error("[createApiAccessLog][url({}) 发生异常]", request.getRequestURI(), ex); | 75 | + log.error("[createApiAccessLog][url({}) 发生异常]", request.getRequestURI(), e); |
| 78 | } | 76 | } |
| 79 | } | 77 | } |
| 80 | 78 | ||
| 81 | - private ApiAccessLogCreateDTO buildApiAccessLogDTO(HttpServletRequest request, Date startTime, | 79 | + private ApiAccessLogCreateDTO buildApiAccessLogDTO(HttpServletRequest request, Date beginTime, |
| 82 | Map<String, String> queryString, String requestBody, Exception ex) { | 80 | Map<String, String> queryString, String requestBody, Exception ex) { |
| 83 | ApiAccessLogCreateDTO accessLog = new ApiAccessLogCreateDTO(); | 81 | ApiAccessLogCreateDTO accessLog = new ApiAccessLogCreateDTO(); |
| 84 | // 处理用户信息 | 82 | // 处理用户信息 |
| @@ -106,9 +104,9 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | @@ -106,9 +104,9 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | ||
| 106 | accessLog.setUserAgent(ServletUtils.getUserAgent(request)); | 104 | accessLog.setUserAgent(ServletUtils.getUserAgent(request)); |
| 107 | accessLog.setUserIp(ServletUtil.getClientIP(request)); | 105 | accessLog.setUserIp(ServletUtil.getClientIP(request)); |
| 108 | // 持续时间 | 106 | // 持续时间 |
| 109 | - accessLog.setStartTime(startTime); | 107 | + accessLog.setBeginTime(beginTime); |
| 110 | accessLog.setEndTime(new Date()); | 108 | accessLog.setEndTime(new Date()); |
| 111 | - accessLog.setDuration((int) DateUtils.diff(accessLog.getEndTime(), accessLog.getStartTime())); | 109 | + accessLog.setDuration((int) DateUtils.diff(accessLog.getEndTime(), accessLog.getBeginTime())); |
| 112 | return accessLog; | 110 | return accessLog; |
| 113 | } | 111 | } |
| 114 | 112 |
src/main/java/cn/iocoder/dashboard/framework/logger/apilog/core/service/dto/ApiAccessLogCreateDTO.java
| @@ -61,7 +61,7 @@ public class ApiAccessLogCreateDTO { | @@ -61,7 +61,7 @@ public class ApiAccessLogCreateDTO { | ||
| 61 | * 开始请求时间 | 61 | * 开始请求时间 |
| 62 | */ | 62 | */ |
| 63 | @NotNull(message = "开始请求时间不能为空") | 63 | @NotNull(message = "开始请求时间不能为空") |
| 64 | - private Date startTime; | 64 | + private Date beginTime; |
| 65 | /** | 65 | /** |
| 66 | * 结束请求时间 | 66 | * 结束请求时间 |
| 67 | */ | 67 | */ |
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/SysApiAccessLogController.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.logger; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.CommonResult; | ||
| 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; | ||
| 6 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExcelVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogRespVO; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.convert.logger.SysApiAccessLogConvert; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; | ||
| 13 | +import cn.iocoder.dashboard.modules.system.service.logger.SysApiAccessLogService; | ||
| 14 | +import io.swagger.annotations.Api; | ||
| 15 | +import io.swagger.annotations.ApiImplicitParam; | ||
| 16 | +import io.swagger.annotations.ApiOperation; | ||
| 17 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 18 | +import org.springframework.validation.annotation.Validated; | ||
| 19 | +import org.springframework.web.bind.annotation.GetMapping; | ||
| 20 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 21 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 22 | +import org.springframework.web.bind.annotation.RestController; | ||
| 23 | + | ||
| 24 | +import javax.annotation.Resource; | ||
| 25 | +import javax.servlet.http.HttpServletResponse; | ||
| 26 | +import javax.validation.Valid; | ||
| 27 | +import java.io.IOException; | ||
| 28 | +import java.util.List; | ||
| 29 | + | ||
| 30 | +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | ||
| 31 | +import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum.EXPORT; | ||
| 32 | + | ||
| 33 | +@Api(tags = "API 访问日志") | ||
| 34 | +@RestController | ||
| 35 | +@RequestMapping("/system/api-access-log") | ||
| 36 | +@Validated | ||
| 37 | +public class SysApiAccessLogController { | ||
| 38 | + | ||
| 39 | + @Resource | ||
| 40 | + private SysApiAccessLogService apiAccessLogService; | ||
| 41 | + | ||
| 42 | + @GetMapping("/get") | ||
| 43 | + @ApiOperation("获得API 访问日志") | ||
| 44 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | ||
| 45 | + @PreAuthorize("@ss.hasPermission('system:api-access-log:query')") | ||
| 46 | + public CommonResult<SysApiAccessLogRespVO> getApiAccessLog(@RequestParam("id") Long id) { | ||
| 47 | + SysApiAccessLogDO apiAccessLog = apiAccessLogService.getApiAccessLog(id); | ||
| 48 | + return success(SysApiAccessLogConvert.INSTANCE.convert(apiAccessLog)); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @GetMapping("/page") | ||
| 52 | + @ApiOperation("获得API 访问日志分页") | ||
| 53 | + @PreAuthorize("@ss.hasPermission('system:api-access-log:query')") | ||
| 54 | + public CommonResult<PageResult<SysApiAccessLogRespVO>> getApiAccessLogPage(@Valid SysApiAccessLogPageReqVO pageVO) { | ||
| 55 | + PageResult<SysApiAccessLogDO> pageResult = apiAccessLogService.getApiAccessLogPage(pageVO); | ||
| 56 | + return success(SysApiAccessLogConvert.INSTANCE.convertPage(pageResult)); | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + @GetMapping("/export-excel") | ||
| 60 | + @ApiOperation("导出API 访问日志 Excel") | ||
| 61 | + @PreAuthorize("@ss.hasPermission('system:api-access-log:export')") | ||
| 62 | + @OperateLog(type = EXPORT) | ||
| 63 | + public void exportApiAccessLogExcel(@Valid SysApiAccessLogExportReqVO exportReqVO, | ||
| 64 | + HttpServletResponse response) throws IOException { | ||
| 65 | + List<SysApiAccessLogDO> list = apiAccessLogService.getApiAccessLogList(exportReqVO); | ||
| 66 | + // 导出 Excel | ||
| 67 | + List<SysApiAccessLogExcelVO> datas = SysApiAccessLogConvert.INSTANCE.convertList02(list); | ||
| 68 | + ExcelUtils.write(response, "API 访问日志.xls", "数据", SysApiAccessLogExcelVO.class, datas); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | +import java.util.Date; | ||
| 9 | + | ||
| 10 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | +* API 访问日志 Base VO,提供给添加、修改、详细的子 VO 使用 | ||
| 14 | +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||
| 15 | +*/ | ||
| 16 | +@Data | ||
| 17 | +public class SysApiAccessLogBaseVO { | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "链路追踪编号", required = true, example = "66600cb6-7852-11eb-9439-0242ac130002") | ||
| 20 | + @NotNull(message = "链路追踪编号不能为空") | ||
| 21 | + private String traceId; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "用户编号", required = true, example = "666") | ||
| 24 | + @NotNull(message = "用户编号不能为空") | ||
| 25 | + private Long userId; | ||
| 26 | + | ||
| 27 | + @ApiModelProperty(value = "用户类型", required = true, example = "2", notes = "参见 UserTypeEnum 枚举") | ||
| 28 | + @NotNull(message = "用户类型不能为空") | ||
| 29 | + private Integer userType; | ||
| 30 | + | ||
| 31 | + @ApiModelProperty(value = "应用名", required = true, example = "dashboard") | ||
| 32 | + @NotNull(message = "应用名不能为空") | ||
| 33 | + private String applicationName; | ||
| 34 | + | ||
| 35 | + @ApiModelProperty(value = "请求方法名", required = true, example = "GET") | ||
| 36 | + @NotNull(message = "请求方法名不能为空") | ||
| 37 | + private String requestMethod; | ||
| 38 | + | ||
| 39 | + @ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy") | ||
| 40 | + @NotNull(message = "请求地址不能为空") | ||
| 41 | + private String requestUrl; | ||
| 42 | + | ||
| 43 | + @ApiModelProperty(value = "Java 方法的参数") | ||
| 44 | + private String requestParams; | ||
| 45 | + | ||
| 46 | + @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1") | ||
| 47 | + @NotNull(message = "用户 IP不能为空") | ||
| 48 | + private String userIp; | ||
| 49 | + | ||
| 50 | + @ApiModelProperty(value = "浏览器 UA", required = true, example = "Mozilla/5.0") | ||
| 51 | + @NotNull(message = "浏览器 UA不能为空") | ||
| 52 | + private String userAgent; | ||
| 53 | + | ||
| 54 | + @ApiModelProperty(value = "开始请求时间", required = true) | ||
| 55 | + @NotNull(message = "开始请求时间不能为空") | ||
| 56 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 57 | + private Date beginTime; | ||
| 58 | + | ||
| 59 | + @ApiModelProperty(value = "结束请求时间", required = true) | ||
| 60 | + @NotNull(message = "结束请求时间不能为空") | ||
| 61 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 62 | + private Date endTime; | ||
| 63 | + | ||
| 64 | + @ApiModelProperty(value = "执行时长", required = true, example = "100") | ||
| 65 | + @NotNull(message = "执行时长不能为空") | ||
| 66 | + private Integer duration; | ||
| 67 | + | ||
| 68 | + @ApiModelProperty(value = "结果码", required = true, example = "0") | ||
| 69 | + @NotNull(message = "结果码不能为空") | ||
| 70 | + private Integer resultCode; | ||
| 71 | + | ||
| 72 | + @ApiModelProperty(value = "结果提示", example = "芋道源码,牛逼!") | ||
| 73 | + private String resultMsg; | ||
| 74 | + | ||
| 75 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExcelVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; | ||
| 4 | +import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; | ||
| 5 | +import com.alibaba.excel.annotation.ExcelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | + | ||
| 8 | +import java.util.Date; | ||
| 9 | + | ||
| 10 | +import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.USER_TYPE; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * API 访问日志 Excel VO | ||
| 14 | + * | ||
| 15 | + * @author 芋道源码 | ||
| 16 | + */ | ||
| 17 | +@Data | ||
| 18 | +public class SysApiAccessLogExcelVO { | ||
| 19 | + | ||
| 20 | + @ExcelProperty("日志主键") | ||
| 21 | + private Long id; | ||
| 22 | + | ||
| 23 | + @ExcelProperty("链路追踪编号") | ||
| 24 | + private String traceId; | ||
| 25 | + | ||
| 26 | + @ExcelProperty("用户编号") | ||
| 27 | + private Long userId; | ||
| 28 | + | ||
| 29 | + @ExcelProperty(value = "用户类型", converter = DictConvert.class) | ||
| 30 | + @DictFormat(USER_TYPE) | ||
| 31 | + private Integer userType; | ||
| 32 | + | ||
| 33 | + @ExcelProperty("应用名") | ||
| 34 | + private String applicationName; | ||
| 35 | + | ||
| 36 | + @ExcelProperty("请求方法名") | ||
| 37 | + private String requestMethod; | ||
| 38 | + | ||
| 39 | + @ExcelProperty("请求地址") | ||
| 40 | + private String requestUrl; | ||
| 41 | + | ||
| 42 | + @ExcelProperty("Java 方法的参数") | ||
| 43 | + private String requestParams; | ||
| 44 | + | ||
| 45 | + @ExcelProperty("用户 IP") | ||
| 46 | + private String userIp; | ||
| 47 | + | ||
| 48 | + @ExcelProperty("浏览器 UA") | ||
| 49 | + private String userAgent; | ||
| 50 | + | ||
| 51 | + @ExcelProperty("开始请求时间") | ||
| 52 | + private Date beginTime; | ||
| 53 | + | ||
| 54 | + @ExcelProperty("结束请求时间") | ||
| 55 | + private Date endTime; | ||
| 56 | + | ||
| 57 | + @ExcelProperty("执行时长") | ||
| 58 | + private Integer duration; | ||
| 59 | + | ||
| 60 | + @ExcelProperty("结果码") | ||
| 61 | + private Integer resultCode; | ||
| 62 | + | ||
| 63 | + @ExcelProperty("结果提示") | ||
| 64 | + private String resultMsg; | ||
| 65 | + | ||
| 66 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogExportReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | + | ||
| 8 | +import java.util.Date; | ||
| 9 | + | ||
| 10 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@ApiModel(value = "API 访问日志 Excel 导出 Request VO", description = "参数和 SysApiAccessLogPageReqVO 是一致的") | ||
| 13 | +@Data | ||
| 14 | +public class SysApiAccessLogExportReqVO { | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "用户编号", example = "666") | ||
| 17 | + private Long userId; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "用户类型", example = "2") | ||
| 20 | + private Integer userType; | ||
| 21 | + | ||
| 22 | + @ApiModelProperty(value = "应用名", example = "dashboard") | ||
| 23 | + private String applicationName; | ||
| 24 | + | ||
| 25 | + @ApiModelProperty(value = "请求地址", example = "/xxx/yyy", notes = "模糊匹配") | ||
| 26 | + private String requestUrl; | ||
| 27 | + | ||
| 28 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 29 | + @ApiModelProperty(value = "开始开始请求时间") | ||
| 30 | + private Date beginBeginTime; | ||
| 31 | + | ||
| 32 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 33 | + @ApiModelProperty(value = "结束开始请求时间") | ||
| 34 | + private Date endBeginTime; | ||
| 35 | + | ||
| 36 | + @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒") | ||
| 37 | + private Integer duration; | ||
| 38 | + | ||
| 39 | + @ApiModelProperty(value = "结果码", example = "0") | ||
| 40 | + private Integer resultCode; | ||
| 41 | + | ||
| 42 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 10 | + | ||
| 11 | +import java.util.Date; | ||
| 12 | + | ||
| 13 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 14 | + | ||
| 15 | +@ApiModel("API 访问日志分页 Request VO") | ||
| 16 | +@Data | ||
| 17 | +@EqualsAndHashCode(callSuper = true) | ||
| 18 | +@ToString(callSuper = true) | ||
| 19 | +public class SysApiAccessLogPageReqVO extends PageParam { | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "用户编号", example = "666") | ||
| 22 | + private Long userId; | ||
| 23 | + | ||
| 24 | + @ApiModelProperty(value = "用户类型", example = "2") | ||
| 25 | + private Integer userType; | ||
| 26 | + | ||
| 27 | + @ApiModelProperty(value = "应用名", example = "dashboard") | ||
| 28 | + private String applicationName; | ||
| 29 | + | ||
| 30 | + @ApiModelProperty(value = "请求地址", example = "/xxx/yyy", notes = "模糊匹配") | ||
| 31 | + private String requestUrl; | ||
| 32 | + | ||
| 33 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 34 | + @ApiModelProperty(value = "开始开始请求时间") | ||
| 35 | + private Date beginBeginTime; | ||
| 36 | + | ||
| 37 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 38 | + @ApiModelProperty(value = "结束开始请求时间") | ||
| 39 | + private Date endBeginTime; | ||
| 40 | + | ||
| 41 | + @ApiModelProperty(value = "执行时长", example = "100", notes = "大于等于,单位:毫秒") | ||
| 42 | + private Integer duration; | ||
| 43 | + | ||
| 44 | + @ApiModelProperty(value = "结果码", example = "0") | ||
| 45 | + private Integer resultCode; | ||
| 46 | + | ||
| 47 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/logger/vo/apiaccesslog/SysApiAccessLogRespVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import java.util.Date; | ||
| 10 | + | ||
| 11 | +@ApiModel("API 访问日志 Response VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class SysApiAccessLogRespVO extends SysApiAccessLogBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "日志主键", required = true, example = "1024") | ||
| 18 | + private Long id; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "创建时间", required = true) | ||
| 21 | + private Date createTime; | ||
| 22 | + | ||
| 23 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysApiAccessLogConvert.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.convert.logger; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExcelVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogRespVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; | ||
| 8 | +import org.mapstruct.Mapper; | ||
| 9 | +import org.mapstruct.factory.Mappers; | ||
| 10 | + | ||
| 11 | +import java.util.List; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * API 访问日志 Convert | ||
| 15 | + * | ||
| 16 | + * @author 芋道源码 | ||
| 17 | + */ | ||
| 18 | +@Mapper | ||
| 19 | +public interface SysApiAccessLogConvert { | ||
| 20 | + | ||
| 21 | + SysApiAccessLogConvert INSTANCE = Mappers.getMapper(SysApiAccessLogConvert.class); | ||
| 22 | + | ||
| 23 | + SysApiAccessLogDO convert(ApiAccessLogCreateDTO bean); | ||
| 24 | + | ||
| 25 | + SysApiAccessLogRespVO convert(SysApiAccessLogDO bean); | ||
| 26 | + | ||
| 27 | + List<SysApiAccessLogRespVO> convertList(List<SysApiAccessLogDO> list); | ||
| 28 | + | ||
| 29 | + PageResult<SysApiAccessLogRespVO> convertPage(PageResult<SysApiAccessLogDO> page); | ||
| 30 | + | ||
| 31 | + List<SysApiAccessLogExcelVO> convertList02(List<SysApiAccessLogDO> list); | ||
| 32 | + | ||
| 33 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/logger/SysApiAccessLogDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/logger/SysApiAccessLogMapper.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.logger; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; | ||
| 9 | +import org.apache.ibatis.annotations.Mapper; | ||
| 10 | + | ||
| 11 | +import java.util.List; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * API 访问日志 Mapper | ||
| 15 | + * | ||
| 16 | + * @author 芋道源码 | ||
| 17 | + */ | ||
| 18 | +@Mapper | ||
| 19 | +public interface SysApiAccessLogMapper extends BaseMapperX<SysApiAccessLogDO> { | ||
| 20 | + | ||
| 21 | + default PageResult<SysApiAccessLogDO> selectPage(SysApiAccessLogPageReqVO reqVO) { | ||
| 22 | + return selectPage(reqVO, new QueryWrapperX<SysApiAccessLogDO>() | ||
| 23 | + .eqIfPresent("user_id", reqVO.getUserId()) | ||
| 24 | + .eqIfPresent("user_type", reqVO.getUserType()) | ||
| 25 | + .eqIfPresent("application_name", reqVO.getApplicationName()) | ||
| 26 | + .likeIfPresent("request_url", reqVO.getRequestUrl()) | ||
| 27 | + .betweenIfPresent("begin_time", reqVO.getBeginBeginTime(), reqVO.getEndBeginTime()) | ||
| 28 | + .geIfPresent("duration", reqVO.getDuration()) | ||
| 29 | + .eqIfPresent("result_code", reqVO.getResultCode()) | ||
| 30 | + ); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + default List<SysApiAccessLogDO> selectList(SysApiAccessLogExportReqVO reqVO) { | ||
| 34 | + return selectList(new QueryWrapperX<SysApiAccessLogDO>() | ||
| 35 | + .eqIfPresent("user_id", reqVO.getUserId()) | ||
| 36 | + .eqIfPresent("user_type", reqVO.getUserType()) | ||
| 37 | + .eqIfPresent("application_name", reqVO.getApplicationName()) | ||
| 38 | + .likeIfPresent("request_url", reqVO.getRequestUrl()) | ||
| 39 | + .betweenIfPresent("begin_time", reqVO.getBeginBeginTime(), reqVO.getEndBeginTime()) | ||
| 40 | + .geIfPresent("duration", reqVO.getDuration()) | ||
| 41 | + .eqIfPresent("result_code", reqVO.getResultCode()) | ||
| 42 | + ); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java
| @@ -10,6 +10,8 @@ import lombok.Getter; | @@ -10,6 +10,8 @@ import lombok.Getter; | ||
| 10 | @AllArgsConstructor | 10 | @AllArgsConstructor |
| 11 | public enum SysDictTypeEnum { | 11 | public enum SysDictTypeEnum { |
| 12 | 12 | ||
| 13 | + USER_TYPE("user_type"), // 用户类型 | ||
| 14 | + | ||
| 13 | SYS_USER_SEX("sys_user_sex"), // 用户性别 | 15 | SYS_USER_SEX("sys_user_sex"), // 用户性别 |
| 14 | SYS_COMMON_STATUS("sys_common_status"), // 系统状态 | 16 | SYS_COMMON_STATUS("sys_common_status"), // 系统状态 |
| 15 | SYS_OPERATE_TYPE("sys_operate_type"), // 操作类型 | 17 | SYS_OPERATE_TYPE("sys_operate_type"), // 操作类型 |
src/main/java/cn/iocoder/dashboard/modules/system/service/logger/SysApiAccessLogService.java
| 1 | package cn.iocoder.dashboard.modules.system.service.logger; | 1 | package cn.iocoder.dashboard.modules.system.service.logger; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 3 | import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFrameworkService; | 4 | import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFrameworkService; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; | ||
| 8 | + | ||
| 9 | +import java.util.List; | ||
| 4 | 10 | ||
| 5 | /** | 11 | /** |
| 6 | * API 访问日志 Service 接口 | 12 | * API 访问日志 Service 接口 |
| @@ -8,4 +14,29 @@ import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFra | @@ -8,4 +14,29 @@ import cn.iocoder.dashboard.framework.logger.apilog.core.service.ApiAccessLogFra | ||
| 8 | * @author 芋道源码 | 14 | * @author 芋道源码 |
| 9 | */ | 15 | */ |
| 10 | public interface SysApiAccessLogService extends ApiAccessLogFrameworkService { | 16 | public interface SysApiAccessLogService extends ApiAccessLogFrameworkService { |
| 17 | + | ||
| 18 | + /** | ||
| 19 | + * 获得 API 访问日志 | ||
| 20 | + * | ||
| 21 | + * @param id 编号 | ||
| 22 | + * @return API 访问日志 | ||
| 23 | + */ | ||
| 24 | + SysApiAccessLogDO getApiAccessLog(Long id); | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 获得 API 访问日志分页 | ||
| 28 | + * | ||
| 29 | + * @param pageReqVO 分页查询 | ||
| 30 | + * @return API 访问日志分页 | ||
| 31 | + */ | ||
| 32 | + PageResult<SysApiAccessLogDO> getApiAccessLogPage(SysApiAccessLogPageReqVO pageReqVO); | ||
| 33 | + | ||
| 34 | + /** | ||
| 35 | + * 获得 API 访问日志列表, 用于 Excel 导出 | ||
| 36 | + * | ||
| 37 | + * @param exportReqVO 查询条件 | ||
| 38 | + * @return API 访问日志分页 | ||
| 39 | + */ | ||
| 40 | + List<SysApiAccessLogDO> getApiAccessLogList(SysApiAccessLogExportReqVO exportReqVO); | ||
| 41 | + | ||
| 11 | } | 42 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/logger/impl/SysApiAccessLogServiceImpl.java
| 1 | package cn.iocoder.dashboard.modules.system.service.logger.impl; | 1 | package cn.iocoder.dashboard.modules.system.service.logger.impl; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 3 | import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; | 4 | import cn.iocoder.dashboard.framework.logger.apilog.core.service.dto.ApiAccessLogCreateDTO; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogExportReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.apiaccesslog.SysApiAccessLogPageReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.convert.logger.SysApiAccessLogConvert; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.logger.SysApiAccessLogDO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.mysql.logger.SysApiAccessLogMapper; | ||
| 4 | import cn.iocoder.dashboard.modules.system.service.logger.SysApiAccessLogService; | 10 | import cn.iocoder.dashboard.modules.system.service.logger.SysApiAccessLogService; |
| 11 | +import org.springframework.scheduling.annotation.Async; | ||
| 5 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 6 | import org.springframework.validation.annotation.Validated; | 13 | import org.springframework.validation.annotation.Validated; |
| 7 | 14 | ||
| 15 | +import javax.annotation.Resource; | ||
| 8 | import javax.validation.Valid; | 16 | import javax.validation.Valid; |
| 17 | +import java.util.List; | ||
| 9 | 18 | ||
| 10 | /** | 19 | /** |
| 11 | * API 访问日志 Service 实现类 | 20 | * API 访问日志 Service 实现类 |
| @@ -16,11 +25,30 @@ import javax.validation.Valid; | @@ -16,11 +25,30 @@ import javax.validation.Valid; | ||
| 16 | @Validated | 25 | @Validated |
| 17 | public class SysApiAccessLogServiceImpl implements SysApiAccessLogService { | 26 | public class SysApiAccessLogServiceImpl implements SysApiAccessLogService { |
| 18 | 27 | ||
| 19 | - | 28 | + @Resource |
| 29 | + private SysApiAccessLogMapper apiAccessLogMapper; | ||
| 20 | 30 | ||
| 21 | @Override | 31 | @Override |
| 32 | + @Async | ||
| 22 | public void createApiAccessLogAsync(@Valid ApiAccessLogCreateDTO createDTO) { | 33 | public void createApiAccessLogAsync(@Valid ApiAccessLogCreateDTO createDTO) { |
| 34 | + // 插入 | ||
| 35 | + SysApiAccessLogDO apiAccessLog = SysApiAccessLogConvert.INSTANCE.convert(createDTO); | ||
| 36 | + apiAccessLogMapper.insert(apiAccessLog); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @Override | ||
| 40 | + public SysApiAccessLogDO getApiAccessLog(Long id) { | ||
| 41 | + return apiAccessLogMapper.selectById(id); | ||
| 42 | + } | ||
| 23 | 43 | ||
| 44 | + @Override | ||
| 45 | + public PageResult<SysApiAccessLogDO> getApiAccessLogPage(SysApiAccessLogPageReqVO pageReqVO) { | ||
| 46 | + return apiAccessLogMapper.selectPage(pageReqVO); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @Override | ||
| 50 | + public List<SysApiAccessLogDO> getApiAccessLogList(SysApiAccessLogExportReqVO exportReqVO) { | ||
| 51 | + return apiAccessLogMapper.selectList(exportReqVO); | ||
| 24 | } | 52 | } |
| 25 | 53 | ||
| 26 | } | 54 | } |
src/main/resources/application-dev.yaml
| @@ -157,7 +157,7 @@ yudao: | @@ -157,7 +157,7 @@ yudao: | ||
| 157 | base-package: ${yudao.info.base-package}.modules | 157 | base-package: ${yudao.info.base-package}.modules |
| 158 | db-schemas: ${spring.datasource.name} | 158 | db-schemas: ${spring.datasource.name} |
| 159 | xss: | 159 | xss: |
| 160 | - enable: true | 160 | + enable: false |
| 161 | exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 | 161 | exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 |
| 162 | - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 | 162 | - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 |
| 163 | - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 | 163 | - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 |
src/main/resources/application-local.yaml
| @@ -157,7 +157,7 @@ yudao: | @@ -157,7 +157,7 @@ yudao: | ||
| 157 | base-package: ${yudao.info.base-package}.modules | 157 | base-package: ${yudao.info.base-package}.modules |
| 158 | db-schemas: ${spring.datasource.name} | 158 | db-schemas: ${spring.datasource.name} |
| 159 | xss: | 159 | xss: |
| 160 | - enable: true | 160 | + enable: false |
| 161 | exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 | 161 | exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 |
| 162 | - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 | 162 | - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 |
| 163 | - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 | 163 | - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 |
src/main/resources/codegen/java/controller/controller.vm
| @@ -52,7 +52,7 @@ public class ${table.className}Controller { | @@ -52,7 +52,7 @@ public class ${table.className}Controller { | ||
| 52 | return success(true); | 52 | return success(true); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | - @DeleteMapping("/delete") | 55 | + @DeleteMapping("/delete") |
| 56 | @ApiOperation("删除${table.classComment}") | 56 | @ApiOperation("删除${table.classComment}") |
| 57 | @ApiImplicitParam(name = "id", value = "编号", required = true) | 57 | @ApiImplicitParam(name = "id", value = "编号", required = true) |
| 58 | @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") | 58 | @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") |
src/main/resources/codegen/java/service/serviceImpl.vm
| @@ -74,12 +74,12 @@ public class ${table.className}ServiceImpl implements ${table.className}Service | @@ -74,12 +74,12 @@ public class ${table.className}ServiceImpl implements ${table.className}Service | ||
| 74 | 74 | ||
| 75 | @Override | 75 | @Override |
| 76 | public PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO) { | 76 | public PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO) { |
| 77 | - return ${classNameVar}Mapper.selectPage(pageReqVO); | 77 | + return ${classNameVar}Mapper.selectPage(pageReqVO); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | @Override | 80 | @Override |
| 81 | public List<${table.className}DO> get${simpleClassName}List(${table.className}ExportReqVO exportReqVO) { | 81 | public List<${table.className}DO> get${simpleClassName}List(${table.className}ExportReqVO exportReqVO) { |
| 82 | - return ${classNameVar}Mapper.selectList(exportReqVO); | 82 | + return ${classNameVar}Mapper.selectList(exportReqVO); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | } | 85 | } |