refactor: 更新查询对象类,调整基础查询类继承关系并优化代码结构

This commit is contained in:
Ray.Hao
2026-01-09 00:06:33 +08:00
parent d94b8207a0
commit 7ac74e1657
61 changed files with 304 additions and 477 deletions

View File

10
pom.xml
View File

@@ -62,6 +62,8 @@
<!-- 阿里 TransmittableThreadLocal (支持异步场景的ThreadLocal传递) -->
<transmittable-thread-local.version>2.14.5</transmittable-thread-local.version>
<spring-ai-openai.version>1.1.2</spring-ai-openai.version>
</properties>
<dependencies>
@@ -281,13 +283,7 @@
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver8</artifactId>
<version>8.1.4.181</version>
<version>${spring-ai-openai.version}</version>
</dependency>
</dependencies>

View File

@@ -2,7 +2,6 @@ package com.youlai.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
/**
* 应用启动类

View File

@@ -1,29 +0,0 @@
package com.youlai.boot.common.base;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 基础分页请求对象
*
* @author haoxr
* @since 2021/2/28
*/
@Data
@Schema
public class BasePageQuery implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "页码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private int pageNum = 1;
@Schema(description = "每页记录数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private int pageSize = 10;
}

View File

@@ -0,0 +1,33 @@
package com.youlai.boot.common.base;
import com.youlai.boot.common.annotation.ValidField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
@Data
@Schema
public class BaseQuery implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "页码", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "1")
private Integer pageNum = 1;
@Schema(description = "每页记录数", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "10")
private Integer pageSize = 10;
@Schema(description = "排序字段", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@ValidField(allowedValues = {"create_time", "update_time"})
private String sortBy;
@Schema(description = "排序方式(正序:ASC反序:DESC", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String order;
public boolean isPaged() {
return pageNum != null && pageSize != null && pageSize > 0;
}
}

View File

@@ -1,15 +1,17 @@
package com.youlai.boot.core.web;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* 分页响应结构体
*
* @author Ray
* @author Ray.Hao
* @since 2022/2/18
*/
@Data
@@ -17,30 +19,63 @@ public class PageResult<T> implements Serializable {
private String code;
private Data<T> data;
private String msg;
private List<T> data;
/**
* 分页元信息;非分页接口不显示此字段
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Page page;
/**
* 构建分页结果MyBatis-Plus {@link IPage})。
*
* <p>data 为当前页记录列表page 提供分页元信息。</p>
*/
public static <T> PageResult<T> success(IPage<T> page) {
PageResult<T> result = new PageResult<>();
result.setCode(ResultCode.SUCCESS.getCode());
Data<T> data = new Data<>();
data.setList(page.getRecords());
data.setTotal(page.getTotal());
result.setData(data);
result.setMsg(ResultCode.SUCCESS.getMsg());
List<T> records =
(page == null || page.getRecords() == null)
? Collections.emptyList()
: page.getRecords();
result.setData(records);
Page pageMeta = new Page();
pageMeta.setPageNum(page != null ? page.getCurrent() : 1L);
pageMeta.setPageSize(page != null ? page.getSize() : 0L);
pageMeta.setTotal(page != null ? page.getTotal() : 0L);
result.setPage(pageMeta);
return result;
}
@lombok.Data
public static class Data<T> {
/**
* 构建列表结果(无分页)。
*
* <p>page 置为 null用于与分页返回区分。</p>
*/
public static <T> PageResult<T> success(List<T> list) {
PageResult<T> result = new PageResult<>();
result.setCode(ResultCode.SUCCESS.getCode());
result.setMsg(ResultCode.SUCCESS.getMsg());
result.setData(list != null ? list : Collections.emptyList());
result.setPage(null);
return result;
}
private List<T> list;
@Data
public static class Page {
private long pageNum;
private long pageSize;
private long total;
}
}

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 统一响应结构体
*
* @author Ray
* @author Ray.Hao
* @since 2022/1/30
**/
@Data
@@ -76,7 +76,4 @@ public class Result<T> implements Serializable {
return result;
}
public static boolean isSuccess(Result<?> result) {
return result != null && ResultCode.SUCCESS.getCode().equals(result.getCode());
}
}

View File

@@ -6,7 +6,7 @@ import com.youlai.boot.core.web.Result;
import com.youlai.boot.platform.ai.model.dto.AiExecuteRequestDTO;
import com.youlai.boot.platform.ai.model.dto.AiParseRequestDTO;
import com.youlai.boot.platform.ai.model.dto.AiParseResponseDTO;
import com.youlai.boot.platform.ai.model.query.AiAssistantPageQuery;
import com.youlai.boot.platform.ai.model.query.AiAssistantQuery;
import com.youlai.boot.platform.ai.model.vo.AiAssistantRecordVO;
import com.youlai.boot.platform.ai.service.AiAssistantRecordService;
import io.swagger.v3.oas.annotations.Operation;
@@ -76,7 +76,7 @@ public class AiAssistantController {
@Operation(summary = "获取 AI 命令记录分页列表")
@GetMapping("/records")
public PageResult<AiAssistantRecordVO> getRecordPage(AiAssistantPageQuery queryParams) {
public PageResult<AiAssistantRecordVO> getRecordPage(AiAssistantQuery queryParams) {
IPage<AiAssistantRecordVO> page = aiAssistantRecordService.getRecordPage(queryParams);
return PageResult.success(page);
}

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.platform.ai.model.entity.AiAssistantRecord;
import com.youlai.boot.platform.ai.model.query.AiAssistantPageQuery;
import com.youlai.boot.platform.ai.model.query.AiAssistantQuery;
import com.youlai.boot.platform.ai.model.vo.AiAssistantRecordVO;
import org.apache.ibatis.annotations.Mapper;
@@ -18,5 +18,5 @@ public interface AiAssistantRecordMapper extends BaseMapper<AiAssistantRecord> {
* @param queryParams 查询参数
* @return 分页结果
*/
IPage<AiAssistantRecordVO> getRecordPage(Page<AiAssistantRecordVO> page, AiAssistantPageQuery queryParams);
IPage<AiAssistantRecordVO> getRecordPage(Page<AiAssistantRecordVO> page, AiAssistantQuery queryParams);
}

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.platform.ai.model.query;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@@ -16,7 +16,7 @@ import java.util.List;
@Schema(description = "AI 助手行为记录分页查询对象")
@Getter
@Setter
public class AiAssistantPageQuery extends BasePageQuery {
public class AiAssistantPageQuery extends BaseQuery {
@Schema(description = "关键字(原始命令/函数名称/用户名)")
private String keywords;

View File

@@ -0,0 +1,44 @@
package com.youlai.boot.platform.ai.model.query;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* AI 助手行为记录查询对象
*
* @author Ray.Hao
* @since 3.0.0
*/
@Schema(description = "AI 助手行为记录查询对象")
@Getter
@Setter
public class AiAssistantQuery extends BaseQuery {
@Schema(description = "关键字(原始命令/函数名称/用户名)")
private String keywords;
@Schema(description = "执行状态(0-待执行, 1-成功, -1-失败)")
private Integer executeStatus;
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "解析状态(0-失败, 1-成功)")
private Integer parseStatus;
@Schema(description = "创建时间范围")
private List<String> createTime;
@Schema(description = "函数名称")
private String functionName;
@Schema(description = "AI供应商")
private String aiProvider;
@Schema(description = "AI模型")
private String aiModel;
}

View File

@@ -6,7 +6,7 @@ import com.youlai.boot.platform.ai.model.dto.AiExecuteRequestDTO;
import com.youlai.boot.platform.ai.model.dto.AiParseRequestDTO;
import com.youlai.boot.platform.ai.model.dto.AiParseResponseDTO;
import com.youlai.boot.platform.ai.model.entity.AiAssistantRecord;
import com.youlai.boot.platform.ai.model.query.AiAssistantPageQuery;
import com.youlai.boot.platform.ai.model.query.AiAssistantQuery;
import com.youlai.boot.platform.ai.model.vo.AiAssistantRecordVO;
import jakarta.servlet.http.HttpServletRequest;
@@ -47,7 +47,7 @@ public interface AiAssistantRecordService extends IService<AiAssistantRecord> {
* @param queryParams 查询参数
* @return 分页列表
*/
IPage<AiAssistantRecordVO> getRecordPage(AiAssistantPageQuery queryParams);
IPage<AiAssistantRecordVO> getRecordPage(AiAssistantQuery queryParams);
/**
* 删除 AI 助手行为记录。

View File

@@ -15,7 +15,7 @@ import com.youlai.boot.platform.ai.model.dto.AiFunctionCallDTO;
import com.youlai.boot.platform.ai.model.dto.AiParseRequestDTO;
import com.youlai.boot.platform.ai.model.dto.AiParseResponseDTO;
import com.youlai.boot.platform.ai.model.entity.AiAssistantRecord;
import com.youlai.boot.platform.ai.model.query.AiAssistantPageQuery;
import com.youlai.boot.platform.ai.model.query.AiAssistantQuery;
import com.youlai.boot.platform.ai.model.vo.AiAssistantRecordVO;
import com.youlai.boot.platform.ai.service.AiAssistantRecordService;
import com.youlai.boot.platform.ai.tools.UserTools;
@@ -294,13 +294,16 @@ public class AiAssistantRecordServiceImpl
}
@Override
public IPage<AiAssistantRecordVO> getRecordPage(AiAssistantPageQuery queryParams) {
public IPage<AiAssistantRecordVO> getRecordPage(AiAssistantQuery queryParams) {
Page<AiAssistantRecordVO> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize());
return this.baseMapper.getRecordPage(page, queryParams);
}
@Override
public boolean deleteRecords(List<Long> ids) {
if (ids == null || ids.isEmpty()) {
return true;
}
return this.removeByIds(ids);
}

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.config.property.CodegenProperties;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.platform.codegen.service.CodegenService;
import com.youlai.boot.platform.codegen.model.form.GenConfigForm;
import com.youlai.boot.platform.codegen.model.query.TablePageQuery;
import com.youlai.boot.platform.codegen.model.query.TableQuery;
import com.youlai.boot.platform.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.platform.codegen.model.vo.TablePageVO;
import com.youlai.boot.common.annotation.Log;
@@ -44,10 +44,10 @@ public class CodegenController {
private final CodegenProperties codegenProperties;
@Operation(summary = "获取数据表分页列表")
@GetMapping("/table/page")
@GetMapping("/table")
@Log(value = "代码生成分页列表", module = LogModuleEnum.OTHER)
public PageResult<TablePageVO> getTablePage(
TablePageQuery queryParams
TableQuery queryParams
) {
Page<TablePageVO> result = codegenService.getTablePage(queryParams);
return PageResult.success(result);

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.platform.codegen.model.bo.ColumnMetaData;
import com.youlai.boot.platform.codegen.model.bo.TableMetaData;
import com.youlai.boot.platform.codegen.model.query.TablePageQuery;
import com.youlai.boot.platform.codegen.model.query.TableQuery;
import com.youlai.boot.platform.codegen.model.vo.TablePageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -27,7 +27,7 @@ public interface DatabaseMapper extends BaseMapper {
* @param queryParams
* @return
*/
Page<TablePageVO> getTablePage(Page<TablePageVO> page, TablePageQuery queryParams);
Page<TablePageVO> getTablePage(Page<TablePageVO> page, TableQuery queryParams);
/**
* 获取表字段列表

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.platform.codegen.model.query;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@@ -17,7 +17,7 @@ import java.util.List;
@Schema(description = "数据表分页查询对象")
@Getter
@Setter
public class TablePageQuery extends BasePageQuery {
public class TablePageQuery extends BaseQuery {
@Schema(description="关键字(表名)")
private String keywords;

View File

@@ -0,0 +1,31 @@
package com.youlai.boot.platform.codegen.model.query;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* 数据表查询对象
*
* @author Ray
* @since 2.10.0
*/
@Schema(description = "数据表查询对象")
@Getter
@Setter
public class TableQuery extends BaseQuery {
@Schema(description="关键字(表名)")
private String keywords;
/**
* 排除的表名
*/
@JsonIgnore
private List<String> excludeTables;
}

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.platform.codegen.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.platform.codegen.model.query.TablePageQuery;
import com.youlai.boot.platform.codegen.model.query.TableQuery;
import com.youlai.boot.platform.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.platform.codegen.model.vo.TablePageVO;
@@ -21,7 +21,7 @@ public interface CodegenService {
* @param queryParams 查询参数
* @return
*/
Page<TablePageVO> getTablePage(TablePageQuery queryParams);
Page<TablePageVO> getTablePage(TableQuery queryParams);
/**
* 获取预览生成代码

View File

@@ -20,7 +20,7 @@ import com.youlai.boot.core.exception.BusinessException;
import com.youlai.boot.platform.codegen.mapper.DatabaseMapper;
import com.youlai.boot.platform.codegen.model.entity.GenTable;
import com.youlai.boot.platform.codegen.model.entity.GenTableColumn;
import com.youlai.boot.platform.codegen.model.query.TablePageQuery;
import com.youlai.boot.platform.codegen.model.query.TableQuery;
import com.youlai.boot.platform.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.platform.codegen.model.vo.TablePageVO;
import lombok.RequiredArgsConstructor;
@@ -61,7 +61,7 @@ public class CodegenServiceImpl implements CodegenService {
* @param queryParams 查询参数
* @return 分页结果
*/
public Page<TablePageVO> getTablePage(TablePageQuery queryParams) {
public Page<TablePageVO> getTablePage(TableQuery queryParams) {
Page<TablePageVO> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize());
// 设置排除的表
List<String> excludeTables = codegenProperties.getExcludeTables();

View File

@@ -6,7 +6,7 @@ import com.youlai.boot.core.web.PageResult;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery;
import com.youlai.boot.system.model.query.ConfigQuery;
import com.youlai.boot.system.model.vo.ConfigVO;
import com.youlai.boot.system.service.ConfigService;
import io.swagger.v3.oas.annotations.Parameter;
@@ -35,11 +35,11 @@ public class ConfigController {
private final ConfigService configService;
@Operation(summary = "系统配置分页列表")
@GetMapping("/page")
@GetMapping
@PreAuthorize("@ss.hasPerm('sys:config:list')")
@Log( value = "系统配置分页列表",module = LogModuleEnum.SETTING)
public PageResult<ConfigVO> page(@ParameterObject ConfigPageQuery configPageQuery) {
IPage<ConfigVO> result = configService.page(configPageQuery);
public PageResult<ConfigVO> page(@ParameterObject ConfigQuery queryParams) {
IPage<ConfigVO> result = configService.page(queryParams);
return PageResult.success(result);
}

View File

@@ -6,8 +6,8 @@ import com.youlai.boot.core.web.PageResult;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.system.model.form.DictItemForm;
import com.youlai.boot.system.model.query.DictItemPageQuery;
import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.query.DictItemQuery;
import com.youlai.boot.system.model.query.DictQuery;
import com.youlai.boot.system.model.vo.DictItemOptionVO;
import com.youlai.boot.system.model.vo.DictItemPageVO;
import com.youlai.boot.system.model.vo.DictPageVO;
@@ -48,10 +48,10 @@ public class DictController {
// 字典相关接口
//---------------------------------------------------
@Operation(summary = "字典分页列表")
@GetMapping("/page")
@GetMapping
@Log( value = "字典分页列表",module = LogModuleEnum.DICT)
public PageResult<DictPageVO> getDictPage(
DictPageQuery queryParams
DictQuery queryParams
) {
Page<DictPageVO> result = dictService.getDictPage(queryParams);
return PageResult.success(result);
@@ -59,7 +59,7 @@ public class DictController {
@Operation(summary = "字典列表")
@GetMapping
@GetMapping("/options")
public Result<List<Option<String>>> getDictList() {
List<Option<String>> list = dictService.getDictList();
return Result.success(list);
@@ -126,10 +126,10 @@ public class DictController {
// 字典项相关接口
//---------------------------------------------------
@Operation(summary = "字典项分页列表")
@GetMapping("/{dictCode}/items/page")
@GetMapping("/{dictCode}/items")
public PageResult<DictItemPageVO> getDictItemPage(
@PathVariable String dictCode,
DictItemPageQuery queryParams
DictItemQuery queryParams
) {
queryParams.setDictCode(dictCode);
Page<DictItemPageVO> result = dictItemService.getDictItemPage(queryParams);
@@ -137,7 +137,7 @@ public class DictController {
}
@Operation(summary = "字典项列表")
@GetMapping("/{dictCode}/items")
@GetMapping("/{dictCode}/items/options")
public Result<List<DictItemOptionVO>> getDictItems(
@Parameter(description = "字典编码") @PathVariable String dictCode
) {

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.core.web.PageResult;
import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.query.LogQuery;
import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.service.LogService;
import io.swagger.v3.oas.annotations.Operation;
@@ -25,9 +25,9 @@ public class LogController {
private final LogService logService;
@Operation(summary = "日志分页列表")
@GetMapping("/page")
@GetMapping
public PageResult<LogPageVO> getLogPage(
LogPageQuery queryParams
LogQuery queryParams
) {
Page<LogPageVO> result = logService.getLogPage(queryParams);
return PageResult.success(result);

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.boot.core.web.PageResult;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.system.model.form.NoticeForm;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.NoticeDetailVO;
import com.youlai.boot.system.model.vo.NoticePageVO;
import com.youlai.boot.system.model.vo.UserNoticePageVO;
@@ -36,9 +36,9 @@ public class NoticeController {
private final UserNoticeService userNoticeService;
@Operation(summary = "通知公告分页列表")
@GetMapping("/page")
@GetMapping
@PreAuthorize("@ss.hasPerm('sys:notice:list')")
public PageResult<NoticePageVO> getNoticePage(NoticePageQuery queryParams) {
public PageResult<NoticePageVO> getNoticePage(NoticeQuery queryParams) {
IPage<NoticePageVO> result = noticeService.getNoticePage(queryParams);
return PageResult.success(result);
}
@@ -121,7 +121,7 @@ public class NoticeController {
@Operation(summary = "获取我的通知公告分页列表")
@GetMapping("/my")
public PageResult<UserNoticePageVO> getMyNoticePage(
NoticePageQuery queryParams
NoticeQuery queryParams
) {
IPage<UserNoticePageVO> result = noticeService.getMyNoticePage(queryParams);
return PageResult.success(result);

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.common.model.Option;
import com.youlai.boot.core.web.PageResult;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery;
import com.youlai.boot.system.model.query.RoleQuery;
import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.RoleService;
@@ -37,10 +37,10 @@ public class RoleController {
private final RoleService roleService;
@Operation(summary = "角色分页列表")
@GetMapping("/page")
@GetMapping
@Log(value = "角色分页列表", module = LogModuleEnum.ROLE)
public PageResult<RolePageVO> getRolePage(
RolePageQuery queryParams
RoleQuery queryParams
) {
Page<RolePageVO> result = roleService.getRolePage(queryParams);
return PageResult.success(result);

View File

@@ -20,7 +20,7 @@ import java.time.LocalDate;
*/
@Tag(name = "11.统计分析")
@RestController
@RequestMapping("/api/v1/statistics")
@RequestMapping("/statistics")
@RequiredArgsConstructor
public class StatisticsController {

View File

@@ -3,7 +3,6 @@ package com.youlai.boot.system.controller;
import cn.idev.excel.EasyExcel;
import cn.idev.excel.ExcelWriter;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.common.enums.LogModuleEnum;
@@ -18,7 +17,7 @@ import com.youlai.boot.system.model.dto.UserExportDTO;
import com.youlai.boot.system.model.dto.UserImportDTO;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.form.*;
import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.query.UserQuery;
import com.youlai.boot.system.model.dto.CurrentUserDTO;
import com.youlai.boot.system.model.vo.UserPageVO;
import com.youlai.boot.system.model.vo.UserProfileVO;
@@ -56,14 +55,13 @@ public class UserController {
private final UserService userService;
@Operation(summary = "用户分页列表")
@GetMapping("/page")
@Log(value = "用户分页列表", module = LogModuleEnum.USER)
public PageResult<UserPageVO> getUserPage(
@Valid UserPageQuery queryParams
@Operation(summary = "用户列表")
@GetMapping
@Log(value = "用户列表", module = LogModuleEnum.USER)
public PageResult<UserPageVO> getUserList(
@Valid UserQuery queryParams
) {
IPage<UserPageVO> result = userService.getUserPage(queryParams);
return PageResult.success(result);
return PageResult.success(userService.getUserPage(queryParams));
}
@Operation(summary = "新增用户")
@@ -168,7 +166,7 @@ public class UserController {
@GetMapping("/export")
@PreAuthorize("@ss.hasPerm('sys:user:export')")
@Log(value = "导出用户", module = LogModuleEnum.USER)
public void exportUsers(UserPageQuery queryParams, HttpServletResponse response) throws IOException {
public void exportUsers(UserQuery queryParams, HttpServletResponse response) throws IOException {
String fileName = "用户列表.xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));

View File

@@ -30,6 +30,8 @@ public interface UserConverter {
Page<UserPageVO> toPageVo(Page<UserBO> bo);
List<UserPageVO> toPageVo(List<UserBO> bo);
UserForm toForm(User entity);
@InheritInverseConfiguration(name = "toForm")

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.query.DictItemPageQuery;
import com.youlai.boot.system.model.query.DictItemQuery;
import com.youlai.boot.system.model.vo.DictItemPageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -19,7 +19,7 @@ public interface DictItemMapper extends BaseMapper<DictItem> {
/**
* 字典项分页列表
*/
Page<DictItemPageVO> getDictItemPage(Page<DictItemPageVO> page, DictItemPageQuery queryParams);
Page<DictItemPageVO> getDictItemPage(Page<DictItemPageVO> page, DictItemQuery queryParams);
}

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.query.DictQuery;
import com.youlai.boot.system.model.vo.DictPageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -23,7 +23,7 @@ public interface DictMapper extends BaseMapper<Dict> {
* @param queryParams 查询参数
* @return 字典分页列表
*/
Page<DictPageVO> getDictPage(Page<DictPageVO> page, DictPageQuery queryParams);
Page<DictPageVO> getDictPage(Page<DictPageVO> page, DictQuery queryParams);
}

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.VisitCountBO;
import com.youlai.boot.system.model.bo.VisitStatsBO;
import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.query.LogQuery;
import com.youlai.boot.system.model.vo.LogPageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -24,7 +24,7 @@ public interface LogMapper extends BaseMapper<Log> {
/**
* 获取日志分页列表
*/
Page<LogPageVO> getLogPage(Page<LogPageVO> page, LogPageQuery queryParams);
Page<LogPageVO> getLogPage(Page<LogPageVO> page, LogQuery queryParams);
/**
* 统计浏览数(PV)

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.NoticeBO;
import com.youlai.boot.system.model.entity.Notice;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.NoticePageVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -25,7 +25,7 @@ public interface NoticeMapper extends BaseMapper<Notice> {
* @param queryParams 查询参数
* @return 通知公告分页数据
*/
Page<NoticeBO> getNoticePage(Page<NoticePageVO> page, NoticePageQuery queryParams);
Page<NoticeBO> getNoticePage(Page<NoticePageVO> page, NoticeQuery queryParams);
/**
* 获取阅读时通知公告详情

View File

@@ -4,12 +4,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.UserBO;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.query.UserQuery;
import com.youlai.boot.system.model.form.UserForm;
import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.boot.security.model.UserAuthInfo;
import com.youlai.boot.system.model.dto.UserExportDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -30,7 +31,7 @@ public interface UserMapper extends BaseMapper<User> {
* @return 用户分页列表
*/
@DataPermission(deptAlias = "u", userAlias = "u")
Page<UserBO> getUserPage(Page<UserBO> page, UserPageQuery queryParams);
Page<UserBO> getUserPage(Page<UserBO> page, @Param("queryParams") UserQuery queryParams);
/**
* 获取用户表单详情
@@ -83,7 +84,7 @@ public interface UserMapper extends BaseMapper<User> {
* @return 导出用户列表
*/
@DataPermission(deptAlias = "u", userAlias = "u")
List<UserExportDTO> listExportUsers(UserPageQuery queryParams);
List<UserExportDTO> listExportUsers(UserQuery queryParams);
/**
* 获取用户个人中心信息

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.UserNotice;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.NoticePageVO;
import com.youlai.boot.system.model.vo.UserNoticePageVO;
import org.apache.ibatis.annotations.Mapper;
@@ -25,5 +25,5 @@ public interface UserNoticeMapper extends BaseMapper<UserNotice> {
* @param queryParams 查询参数
* @return 通知公告分页列表
*/
IPage<UserNoticePageVO> getMyNoticePage(Page<NoticePageVO> page, @Param("queryParams") NoticePageQuery queryParams);
IPage<UserNoticePageVO> getMyNoticePage(Page<NoticePageVO> page, @Param("queryParams") NoticeQuery queryParams);
}

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.system.model.query;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@@ -13,8 +13,8 @@ import lombok.Setter;
*/
@Getter
@Setter
@Schema(description = "系统配置分页查询")
public class ConfigPageQuery extends BasePageQuery {
@Schema(description = "系统配置查询")
public class ConfigQuery extends BaseQuery {
@Schema(description="关键字(配置项名称/配置项值)")
private String keywords;

View File

@@ -1,15 +1,14 @@
package com.youlai.boot.system.model.query;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@Schema(description ="字典项分页查询对象")
public class DictItemPageQuery extends BasePageQuery {
@Schema(description ="字典项查询对象")
public class DictItemQuery extends BaseQuery {
@Schema(description="关键字(字典项值/字典项名称)")
private String keywords;

View File

@@ -1,14 +1,14 @@
package com.youlai.boot.system.model.query;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@Schema(description ="字典分页查询对象")
public class DictPageQuery extends BasePageQuery {
@Schema(description ="字典查询对象")
public class DictQuery extends BaseQuery {
@Schema(description="关键字(字典名称)")
private String keywords;

View File

@@ -1,21 +1,22 @@
package com.youlai.boot.system.model.query;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* 日志分页查询对象
* 日志查询对象
*
* @author Ray
* @since 2.10.0
*/
@Schema(description = "日志分页查询对象")
@Schema(description = "日志查询对象")
@Getter
@Setter
public class LogPageQuery extends BasePageQuery {
public class LogQuery extends BaseQuery {
@Schema(description="关键字(日志内容/请求路径/请求方法/地区/浏览器/终端系统)")
private String keywords;

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.system.model.query;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 通知公告分页查询对象
* 通知公告查询对象
*
* @author youlaitech
* @since 2024-08-27 10:31
@@ -16,7 +16,7 @@ import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
@Schema(description ="通知公告查询对象")
public class NoticePageQuery extends BasePageQuery {
public class NoticeQuery extends BaseQuery {
@Schema(description = "通知标题")
private String title;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.model.query;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@@ -9,15 +9,15 @@ import lombok.Setter;
import java.time.LocalDateTime;
/**
* 角色分页查询对象
* 角色查询对象
*
* @author Ray
* @since 2022/6/3
*/
@Schema(description = "角色分页查询对象")
@Schema(description = "角色查询对象")
@Getter
@Setter
public class RolePageQuery extends BasePageQuery {
public class RoleQuery extends BaseQuery {
@Schema(description="关键字(角色名称/角色编码)")
private String keywords;

View File

@@ -1,25 +1,17 @@
package com.youlai.boot.system.model.query;
import cn.hutool.db.sql.Direction;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BasePageQuery;
import com.youlai.boot.common.annotation.ValidField;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 用户分页查询对象
*
* @author haoxr
* @since 2022/1/14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Schema(description = "用户分页查询对象")
public class UserPageQuery extends BasePageQuery {
@Schema(description = "用户查询对象")
public class UserQuery extends BaseQuery {
@Schema(description = "关键字(用户名/昵称/手机号)")
private String keywords;
@@ -36,18 +28,7 @@ public class UserPageQuery extends BasePageQuery {
@Schema(description = "创建时间范围")
private List<String> createTime;
@Schema(description = "排序的字段")
@ValidField(allowedValues = {"create_time", "update_time"})
private String field;
@Schema(description = "排序方式(正序:ASC反序:DESC")
private Direction direction;
/**
* 是否超级管理员
*/
@JsonIgnore
@Schema(hidden = true)
private Boolean isRoot;
}

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.Config;
import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery;
import com.youlai.boot.system.model.query.ConfigQuery;
import com.youlai.boot.system.model.vo.ConfigVO;
/**
@@ -20,7 +20,7 @@ public interface ConfigService extends IService<Config> {
* @param sysConfigPageQuery 查询参数
* @return 系统配置分页列表
*/
IPage<ConfigVO> page(ConfigPageQuery sysConfigPageQuery);
IPage<ConfigVO> page(ConfigQuery sysConfigPageQuery);
/**
* 保存系统配置

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.form.DictItemForm;
import com.youlai.boot.system.model.query.DictItemPageQuery;
import com.youlai.boot.system.model.query.DictItemQuery;
import com.youlai.boot.system.model.vo.DictItemOptionVO;
import com.youlai.boot.system.model.vo.DictItemPageVO;
@@ -24,7 +24,7 @@ public interface DictItemService extends IService<DictItem> {
* @param queryParams 查询参数
* @return 字典项分页列表
*/
Page<DictItemPageVO> getDictItemPage(DictItemPageQuery queryParams);
Page<DictItemPageVO> getDictItemPage(DictItemQuery queryParams);
/**
* 获取字典项列表

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.query.DictQuery;
import com.youlai.boot.system.model.vo.DictItemOptionVO;
import com.youlai.boot.system.model.vo.DictPageVO;
@@ -25,7 +25,7 @@ public interface DictService extends IService<Dict> {
* @param queryParams 分页查询对象
* @return 字典分页列表
*/
Page<DictPageVO> getDictPage(DictPageQuery queryParams);
Page<DictPageVO> getDictPage(DictQuery queryParams);
/**
* 获取字典列表

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.Log;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.query.LogQuery;
import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO;
import com.youlai.boot.system.model.vo.VisitTrendVO;
@@ -22,7 +22,7 @@ public interface LogService extends IService<Log> {
/**
* 获取日志分页列表
*/
Page<LogPageVO> getLogPage(LogPageQuery queryParams);
Page<LogPageVO> getLogPage(LogQuery queryParams);
/**

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.Notice;
import com.youlai.boot.system.model.form.NoticeForm;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.NoticePageVO;
import com.youlai.boot.system.model.vo.UserNoticePageVO;
import com.youlai.boot.system.model.vo.NoticeDetailVO;
@@ -22,7 +22,7 @@ public interface NoticeService extends IService<Notice> {
*
* @return 通知公告分页列表
*/
IPage<NoticePageVO> getNoticePage(NoticePageQuery queryParams);
IPage<NoticePageVO> getNoticePage(NoticeQuery queryParams);
/**
* 获取通知公告表单数据
@@ -87,5 +87,5 @@ public interface NoticeService extends IService<Notice> {
* @param queryParams 查询参数
* @return 通知公告分页列表
*/
IPage<UserNoticePageVO> getMyNoticePage(NoticePageQuery queryParams);
IPage<UserNoticePageVO> getMyNoticePage(NoticeQuery queryParams);
}

View File

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery;
import com.youlai.boot.system.model.query.RoleQuery;
import com.youlai.boot.system.model.vo.RolePageVO;
import java.util.List;
@@ -26,7 +26,7 @@ public interface RoleService extends IService<Role> {
* @param queryParams
* @return
*/
Page<RolePageVO> getRolePage(RolePageQuery queryParams);
Page<RolePageVO> getRolePage(RoleQuery queryParams);
/**

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.system.model.entity.UserNotice;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.UserNoticePageVO;
import com.youlai.boot.system.model.vo.NoticePageVO;
@@ -31,5 +31,5 @@ public interface UserNoticeService extends IService<UserNotice> {
* @param queryParams 查询参数
* @return 我的通知公告分页列表
*/
IPage<UserNoticePageVO> getMyNoticePage(Page<NoticePageVO> page, NoticePageQuery queryParams);
IPage<UserNoticePageVO> getMyNoticePage(Page<NoticePageVO> page, NoticeQuery queryParams);
}

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.security.model.UserAuthInfo;
import com.youlai.boot.system.model.dto.CurrentUserDTO;
import com.youlai.boot.system.model.dto.UserExportDTO;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.query.UserQuery;
import com.youlai.boot.system.model.vo.UserPageVO;
import com.youlai.boot.system.model.vo.UserProfileVO;
import com.youlai.boot.system.model.form.*;
@@ -27,7 +27,7 @@ public interface UserService extends IService<User> {
*
* @return {@link IPage<UserPageVo>} 用户分页列表
*/
IPage<UserPageVO> getUserPage(UserPageQuery queryParams);
IPage<UserPageVO> getUserPage(UserQuery queryParams);
/**
* 获取用户表单数据
@@ -84,7 +84,7 @@ public interface UserService extends IService<User> {
* @param queryParams 查询参数
* @return {@link List<UserExportDto>} 导出用户列表
*/
List<UserExportDTO> listExportUsers(UserPageQuery queryParams);
List<UserExportDTO> listExportUsers(UserQuery queryParams);
/**

View File

@@ -10,7 +10,7 @@ import com.youlai.boot.system.converter.ConfigConverter;
import com.youlai.boot.system.mapper.ConfigMapper;
import com.youlai.boot.system.model.entity.Config;
import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigPageQuery;
import com.youlai.boot.system.model.query.ConfigQuery;
import com.youlai.boot.system.model.vo.ConfigVO;
import com.youlai.boot.system.service.ConfigService;
import com.youlai.boot.security.util.SecurityUtils;
@@ -50,13 +50,13 @@ public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> impleme
/**
* 分页查询系统配置
*
* @param configPageQuery 查询参数
* @param queryParams 查询参数
* @return 系统配置分页列表
*/
@Override
public IPage<ConfigVO> page(ConfigPageQuery configPageQuery) {
Page<Config> page = new Page<>(configPageQuery.getPageNum(), configPageQuery.getPageSize());
String keywords = configPageQuery.getKeywords();
public IPage<ConfigVO> page(ConfigQuery queryParams) {
Page<Config> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize());
String keywords = queryParams.getKeywords();
LambdaQueryWrapper<Config> query = new LambdaQueryWrapper<Config>()
.and(StringUtils.isNotBlank(keywords),
q -> q.like(Config::getConfigKey, keywords)

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.system.converter.DictItemConverter;
import com.youlai.boot.system.mapper.DictItemMapper;
import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.form.DictItemForm;
import com.youlai.boot.system.model.query.DictItemPageQuery;
import com.youlai.boot.system.model.query.DictItemQuery;
import com.youlai.boot.system.model.vo.DictItemOptionVO;
import com.youlai.boot.system.model.vo.DictItemPageVO;
import com.youlai.boot.system.service.DictItemService;
@@ -36,7 +36,7 @@ public class DictItemServiceImpl extends ServiceImpl<DictItemMapper, DictItem> i
* @return 字典项分页列表
*/
@Override
public Page<DictItemPageVO> getDictItemPage(DictItemPageQuery queryParams) {
public Page<DictItemPageVO> getDictItemPage(DictItemQuery queryParams) {
int pageNum = queryParams.getPageNum();
int pageSize = queryParams.getPageSize();
Page<DictItemPageVO> page = new Page<>(pageNum, pageSize);

View File

@@ -11,7 +11,7 @@ import com.youlai.boot.system.mapper.DictMapper;
import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.query.DictQuery;
import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.system.service.DictItemService;
import com.youlai.boot.system.service.DictService;
@@ -40,7 +40,7 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements Di
* @param queryParams 分页查询对象
*/
@Override
public Page<DictPageVO> getDictPage(DictPageQuery queryParams) {
public Page<DictPageVO> getDictPage(DictQuery queryParams) {
// 查询参数
int pageNum = queryParams.getPageNum();
int pageSize = queryParams.getPageSize();

View File

@@ -6,7 +6,7 @@ import com.youlai.boot.system.mapper.LogMapper;
import com.youlai.boot.system.model.bo.VisitCountBO;
import com.youlai.boot.system.model.bo.VisitStatsBO;
import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.query.LogQuery;
import com.youlai.boot.system.model.vo.LogPageVO;
import com.youlai.boot.system.model.vo.VisitStatsVO;
import com.youlai.boot.system.model.vo.VisitTrendVO;
@@ -36,7 +36,7 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log>
* @return 日志分页列表
*/
@Override
public Page<LogPageVO> getLogPage(LogPageQuery queryParams) {
public Page<LogPageVO> getLogPage(LogQuery queryParams) {
return this.baseMapper.getLogPage(new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
queryParams);
}

View File

@@ -19,7 +19,7 @@ import com.youlai.boot.system.model.entity.Notice;
import com.youlai.boot.system.model.entity.UserNotice;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.form.NoticeForm;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.NoticePageVO;
import com.youlai.boot.system.model.vo.UserNoticePageVO;
import com.youlai.boot.system.model.vo.NoticeDetailVO;
@@ -63,7 +63,7 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
* @return {@link IPage< NoticePageVo >} 通知公告分页列表
*/
@Override
public IPage<NoticePageVO> getNoticePage(NoticePageQuery queryParams) {
public IPage<NoticePageVO> getNoticePage(NoticeQuery queryParams) {
Page<NoticeBO> noticePage = this.baseMapper.getNoticePage(
new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
queryParams
@@ -291,8 +291,11 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
* @return 通知公告分页列表
*/
@Override
public IPage<UserNoticePageVO> getMyNoticePage(NoticePageQuery queryParams) {
queryParams.setUserId(SecurityUtils.getUserId());
public IPage<UserNoticePageVO> getMyNoticePage(
NoticeQuery queryParams
) {
Long userId = SecurityUtils.getUserId();
queryParams.setUserId(userId);
return userNoticeService.getMyNoticePage(
new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
queryParams

View File

@@ -13,7 +13,7 @@ import com.youlai.boot.system.mapper.RoleMapper;
import com.youlai.boot.system.model.entity.Role;
import com.youlai.boot.system.model.entity.RoleMenu;
import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RolePageQuery;
import com.youlai.boot.system.model.query.RoleQuery;
import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.common.model.Option;
@@ -51,7 +51,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
* @return {@link Page< RolePageVo >} 角色分页列表
*/
@Override
public Page<RolePageVO> getRolePage(RolePageQuery queryParams) {
public Page<RolePageVO> getRolePage(RoleQuery queryParams) {
// 查询参数
int pageNum = queryParams.getPageNum();
int pageSize = queryParams.getPageSize();

View File

@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.security.util.SecurityUtils;
import com.youlai.boot.system.mapper.UserNoticeMapper;
import com.youlai.boot.system.model.entity.UserNotice;
import com.youlai.boot.system.model.query.NoticePageQuery;
import com.youlai.boot.system.model.query.NoticeQuery;
import com.youlai.boot.system.model.vo.NoticePageVO;
import com.youlai.boot.system.model.vo.UserNoticePageVO;
import com.youlai.boot.system.service.UserNoticeService;
@@ -51,7 +51,7 @@ public class UserNoticeServiceImpl extends ServiceImpl<UserNoticeMapper, UserNot
* @return 通知公告分页列表
*/
@Override
public IPage<UserNoticePageVO> getMyNoticePage(Page<NoticePageVO> page, NoticePageQuery queryParams) {
public IPage<UserNoticePageVO> getMyNoticePage(Page<NoticePageVO> page, NoticeQuery queryParams) {
return this.getBaseMapper().getMyNoticePage(
new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
queryParams

View File

@@ -12,13 +12,13 @@ import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SystemConstants;
import com.youlai.boot.core.exception.BusinessException;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.platform.mail.service.MailService;
import com.youlai.boot.platform.sms.enums.SmsTypeEnum;
import com.youlai.boot.platform.sms.service.SmsService;
import com.youlai.boot.security.model.UserAuthInfo;
import com.youlai.boot.security.service.PermissionService;
import com.youlai.boot.security.token.TokenManager;
import com.youlai.boot.security.util.SecurityUtils;
import com.youlai.boot.platform.mail.service.MailService;
import com.youlai.boot.system.converter.UserConverter;
import com.youlai.boot.system.enums.DictCodeEnum;
import com.youlai.boot.system.mapper.UserMapper;
@@ -29,7 +29,7 @@ import com.youlai.boot.system.model.entity.DictItem;
import com.youlai.boot.system.model.entity.User;
import com.youlai.boot.system.model.entity.UserRole;
import com.youlai.boot.system.model.form.*;
import com.youlai.boot.system.model.query.UserPageQuery;
import com.youlai.boot.system.model.query.UserQuery;
import com.youlai.boot.system.model.vo.UserPageVO;
import com.youlai.boot.system.model.vo.UserProfileVO;
import com.youlai.boot.system.service.*;
@@ -84,7 +84,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
* @return {@link IPage<UserPageVo>} 用户分页列表
*/
@Override
public IPage<UserPageVO> getUserPage(UserPageQuery queryParams) {
public IPage<UserPageVO> getUserPage(UserQuery queryParams) {
// 参数构建
int pageNum = queryParams.getPageNum();
@@ -403,7 +403,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
* @return {@link List<UserExportDto>} 导出用户列表
*/
@Override
public List<UserExportDTO> listExportUsers(UserPageQuery queryParams) {
public List<UserExportDTO> listExportUsers(UserQuery queryParams) {
boolean isRoot = SecurityUtils.isRoot();
queryParams.setIsRoot(isRoot);

View File

@@ -1,5 +1,5 @@
server:
port: 8989
port: 8000
spring:
datasource:
@@ -318,4 +318,3 @@ ai:
rate-limit:
max-executions-per-minute: 10
max-executions-per-day: 100

View File

@@ -33,35 +33,6 @@
ORDER BY
CREATE_TIME DESC
</select>
<!-- 查询数据库表分页 dm版本-->
<select id="getTablePage" resultType="com.youlai.boot.platform.codegen.model.vo.TablePageVO" databaseId="dm">
SELECT
t1.TABLE_NAME ,
c.COMMENTS AS TABLE_COMMENT ,
NULL AS TABLE_COLLATION,
'DM' AS ENGINE,
o.CREATED AS CREATE_TIME,
CASE WHEN t2.id IS NOT NULL THEN 1 ELSE 0 END AS isConfigured
FROM
ALL_TABLES t1
LEFT JOIN ALL_TAB_COMMENTS c ON t1.TABLE_NAME = c.TABLE_NAME AND t1.OWNER = c.OWNER
LEFT JOIN ALL_OBJECTS o ON t1.TABLE_NAME = o.OBJECT_NAME AND t1.OWNER = o.OWNER AND o.OBJECT_TYPE = 'TABLE'
LEFT JOIN gen_table t2 ON t1.TABLE_NAME = t2.table_name
WHERE
t1.OWNER = 'YOULAI_BOOT'
<if test="queryParams.keywords != null and queryParams.keywords.trim() neq ''">
AND t1.TABLE_NAME LIKE '%' || #{queryParams.keywords} || '%'
</if>
<!-- 排除的表 -->
<if test="queryParams.excludeTables != null and queryParams.excludeTables.size() > 0">
AND t1.TABLE_NAME NOT IN
<foreach collection="queryParams.excludeTables" item="excludeTable" open="(" close=")" separator=",">
#{excludeTable}
</foreach>
</if>
ORDER BY
o.CREATED DESC
</select>
<!-- 查询数据库表元数据 mysql版本-->
<select id="getTableMetadata" resultType="com.youlai.boot.platform.codegen.model.bo.TableMetaData" databaseId="mysql">
@@ -77,22 +48,6 @@
TABLE_SCHEMA = (SELECT DATABASE())
AND TABLE_NAME = #{tableName}
</select>
<!-- 获取数据库表元数据 dm版本-->
<select id="getTableMetadata" resultType="com.youlai.boot.platform.codegen.model.bo.TableMetaData" databaseId="dm">
SELECT
t1.TABLE_NAME ,
c.COMMENTS AS TABLE_COMMENT ,
NULL AS TABLE_COLLATION,
'DM' AS ENGINE,
o.CREATED AS CREATE_TIME
FROM
ALL_TABLES t1
LEFT JOIN ALL_TAB_COMMENTS c ON t1.TABLE_NAME = c.TABLE_NAME AND t1.OWNER = c.OWNER
LEFT JOIN ALL_OBJECTS o ON t1.TABLE_NAME = o.OBJECT_NAME AND t1.OWNER = o.OWNER AND o.OBJECT_TYPE = 'TABLE'
WHERE
t1.OWNER = 'YOULAI_BOOT'
AND t1.TABLE_NAME = #{tableName}
</select>
<!-- 获取数据库表字段元数据 mysql版本-->
<select id="getTableColumns" resultType="com.youlai.boot.platform.codegen.model.bo.ColumnMetaData" databaseId="mysql">
@@ -112,32 +67,5 @@
AND TABLE_NAME = #{tableName}
ORDER BY ORDINAL_POSITION ASC
</select>
<!-- 获取数据库表字段元数据 dm版本-->
<select id="getTableColumns" resultType="com.youlai.boot.platform.codegen.model.bo.ColumnMetaData" databaseId="dm">
SELECT
t1.COLUMN_NAME,
t1.DATA_TYPE,
c.COMMENTS AS COLUMN_COMMENT,
CASE WHEN con.CONSTRAINT_TYPE = 'P' THEN 1 ELSE 0 END AS isPrimaryKey,
CASE WHEN t1.NULLABLE = 'Y' THEN 'YES' ELSE 'NO' END AS IS_NULLABLE,
t1.DATA_LENGTH AS CHARACTER_MAXIMUM_LENGTH,
NULL AS CHARACTER_SET_NAME,
NULL AS COLLATION_NAME
FROM
ALL_TAB_COLUMNS t1
LEFT JOIN ALL_COL_COMMENTS c ON t1.TABLE_NAME = c.TABLE_NAME
AND t1.COLUMN_NAME = c.COLUMN_NAME
AND t1.OWNER = c.OWNER
LEFT JOIN ALL_CONS_COLUMNS cc ON t1.TABLE_NAME = cc.TABLE_NAME
AND t1.COLUMN_NAME = cc.COLUMN_NAME
AND t1.OWNER = cc.OWNER
LEFT JOIN ALL_CONSTRAINTS con ON cc.CONSTRAINT_NAME = con.CONSTRAINT_NAME
AND cc.OWNER = con.OWNER
AND con.CONSTRAINT_TYPE = 'P'
WHERE
t1.OWNER = 'YOULAI_BOOT'
AND t1.TABLE_NAME = #{tableName}
ORDER BY t1.COLUMN_ID ASC
</select>
</mapper>

View File

@@ -23,7 +23,6 @@
sys_log t1
LEFT JOIN sys_user t2 ON t1.create_by = t2.id
<where>
t1.is_deleted = 0
<if test="queryParams.keywords != null and queryParams.keywords != ''">
AND (
t1.content LIKE concat('%',#{queryParams.keywords},'%')
@@ -47,48 +46,6 @@
ORDER BY
t1.create_time DESC
</select>
<!-- 日志分页列表 dm版本 -->
<select id="getLogPage" resultType="com.youlai.boot.system.model.vo.LogPageVO" databaseId="dm">
SELECT
t1.id,
t1.module,
t1.content,
t1.request_uri,
t1.ip,
t1.province || ' ' || t1.city AS region,
t1.execution_time,
t1.browser || ' ' || t1.browser_version AS browser,
t1.os,
t1.create_time,
t2.nickname AS operator
FROM
sys_log t1
LEFT JOIN sys_user t2 ON t1.create_by = t2.id
<where>
t1.is_deleted = 0
<if test="queryParams.keywords != null and queryParams.keywords != ''">
AND (
t1.content LIKE concat('%',#{queryParams.keywords},'%')
OR
t1.ip LIKE concat('%',#{queryParams.keywords},'%')
OR
t2.nickname LIKE concat('%',#{queryParams.keywords},'%')
)
</if>
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
<if test="queryParams.createTime[0] != null and queryParams.createTime[0] != ''">
<bind name="startDate" value="queryParams.createTime[0].length() == 10 ? queryParams.createTime[0] + ' 00:00:00' : queryParams.createTime[0]"/>
AND t1.create_time &gt;= #{startDate}
</if>
<if test="queryParams.createTime[1] != null and queryParams.createTime[1] != ''">
<bind name="endDate" value="queryParams.createTime[1].length() == 10 ? queryParams.createTime[1] + ' 23:59:59' : queryParams.createTime[1]"/>
AND t1.create_time &lt;= #{endDate}
</if>
</if>
</where>
ORDER BY
t1.create_time DESC
</select>
<!-- 获取访问量日统计列表 -->
<select id="getPvCounts" resultType="com.youlai.boot.system.model.bo.VisitCountBO">
@@ -99,7 +56,6 @@
sys_log
WHERE
create_time BETWEEN #{startDate} AND #{endDate}
AND is_deleted = 0
GROUP BY
DATE_FORMAT(create_time, '%Y-%m-%d')
</select>
@@ -113,7 +69,6 @@
sys_log
WHERE
create_time BETWEEN #{startDate} AND #{endDate}
AND is_deleted = 0
GROUP BY
DATE_FORMAT(create_time, '%Y-%m-%d')
</select>
@@ -134,30 +89,6 @@
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
</select>
<!-- 获取访问量(PV)统计数据 dm-->
<select id="getPvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="dm">
SELECT
COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) THEN 1 END) AS todayCount,
COUNT(*) AS totalCount,
ROUND(
CASE
WHEN COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) - 1
AND TO_CHAR(create_time, 'HH24:MI:SS') &lt;= TO_CHAR(SYSDATE, 'HH24:MI:SS') THEN 1 END) = 0 THEN 0
ELSE
(COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) THEN 1 END) -
COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) - 1
AND TO_CHAR(create_time, 'HH24:MI:SS') &lt;= TO_CHAR(SYSDATE, 'HH24:MI:SS') THEN 1 END)) /
COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) - 1
AND TO_CHAR(create_time, 'HH24:MI:SS') &lt;= TO_CHAR(SYSDATE, 'HH24:MI:SS') THEN 1 END)
END,
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
</select>
<!-- 获取IP统计数据 mysql版本-->
@@ -176,33 +107,6 @@
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
</select>
<!-- 获取IP统计数据 dm版本-->
<select id="getUvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="dm">
SELECT COUNT(DISTINCT CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) THEN ip END) AS todayCount,
COUNT(DISTINCT ip) AS totalCount,
ROUND(
CASE
WHEN COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE - 1)
THEN ip END) = 0
THEN 0
ELSE
(COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE)
THEN ip END) -
COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE - 1)
THEN ip END)) * 1.0 /
COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE - 1)
THEN ip END)
END,
2) AS growthRate
FROM sys_log
WHERE is_deleted = 0
</select>
</mapper>

View File

@@ -72,84 +72,8 @@
u.id
<choose>
<!-- 如果排序参数都传入 -->
<when test="queryParams.field != null and queryParams.field != '' and queryParams.direction != null">
ORDER BY u.${queryParams.field} ${queryParams.direction}
</when>
<!-- 默认排序 -->
<otherwise>
ORDER BY u.update_time DESC, u.create_time DESC
</otherwise>
</choose>
</select>
<!-- 用户分页列表 dm版本-->
<select id="getUserPage" resultType="com.youlai.boot.system.model.bo.UserBO" databaseId="dm">
SELECT
u.id,
u.username,
u.nickname,
u.mobile,
u.gender,
u.avatar,
u.STATUS,
u.email,
d.NAME AS dept_name,
LISTAGG(r.name, ',') WITHIN GROUP (ORDER BY r.name) AS roleNames,
u.create_time
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id
LEFT JOIN sys_user_role sur ON u.id = sur.user_id
LEFT JOIN sys_role r ON sur.role_id = r.id
<where>
u.is_deleted = 0
<!-- 非超级管理员用户限制查看超级管理员 -->
<if test="!queryParams.isRoot">
AND NOT EXISTS (
SELECT
1
FROM sys_user_role sur
INNER JOIN sys_role r ON sur.role_id = r.id
WHERE
sur.user_id = u.id
AND r.code = '${@com.youlai.boot.common.constant.SystemConstants@ROOT_ROLE_CODE}'
)
</if>
<if test='queryParams.keywords!=null and queryParams.keywords.trim() neq ""'>
AND (
u.username LIKE CONCAT('%',#{queryParams.keywords},'%')
OR u.nickname LIKE CONCAT('%',#{queryParams.keywords},'%')
OR u.mobile LIKE CONCAT('%',#{queryParams.keywords},'%')
)
</if>
<if test='queryParams.status!=null'>
AND u.status = #{queryParams.status}
</if>
<if test='queryParams.deptId!=null'>
AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{queryParams.deptId},',%')
</if>
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
<if test="queryParams.createTime[0] != null and queryParams.createTime[0] != ''">
<bind name="startDate" value="queryParams.createTime[0].length() == 10 ? queryParams.createTime[0] + ' 00:00:00' : queryParams.createTime[0]"/>
AND u.create_time &gt;= #{startDate}
</if>
<if test="queryParams.createTime[1] != null and queryParams.createTime[1] != ''">
<bind name="endDate" value="queryParams.createTime[1].length() == 10 ? queryParams.createTime[1] + ' 23:59:59' : queryParams.createTime[1]"/>
AND u.create_time &lt;= #{endDate}
</if>
</if>
<if test="queryParams.roleIds != null and queryParams.roleIds.size() > 0">
AND sur.role_id IN
<foreach item="roleId" collection="queryParams.roleIds" open="(" separator="," close=")">
#{roleId}
</foreach>
</if>
</where>
GROUP BY
u.id
<choose>
<!-- 如果排序参数都传入 -->
<when test="queryParams.field != null and queryParams.field != '' and queryParams.direction != null">
ORDER BY u.${queryParams.field} ${queryParams.direction}
<when test="queryParams.sortBy != null and queryParams.sortBy != '' and queryParams.order != null">
ORDER BY u.${queryParams.sortBy} ${queryParams.order}
</when>
<!-- 默认排序 -->
<otherwise>
@@ -323,27 +247,5 @@
WHERE
u.id = #{userId} AND u.is_deleted = 0
</select>
<!-- 根据用户ID获取用户详情 dm版本-->
<select id="getUserProfile" resultType="com.youlai.boot.system.model.bo.UserBO" databaseId="dm">
SELECT
u.id,
u.username,
u.nickname,
u.mobile,
u.gender,
u.avatar,
u.STATUS,
u.email,
d.NAME AS deptName,
LISTAGG(r.name, ',') WITHIN GROUP (ORDER BY r.name) AS roleNames,
u.create_time
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id
LEFT JOIN sys_user_role sur ON u.id = sur.user_id
LEFT JOIN sys_role r ON sur.role_id = r.id
WHERE
u.id = #{userId} AND u.is_deleted = 0
</select>
</mapper>

View File

@@ -1,6 +1,6 @@
package ${packageName}.${moduleName}.${subpackageName};
import ${packageName}.common.base.BasePageQuery;
import ${packageName}.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@@ -21,7 +21,7 @@ import java.math.BigDecimal;
@Schema(description ="$!{businessName}查询对象")
@Getter
@Setter
public class ${entityName}Query extends BasePageQuery {
public class ${entityName}Query extends BaseQuery {
#if($fieldConfigs)
#foreach($fieldConfig in ${fieldConfigs})