refactor(manage-db): 重构领域模型和查询工具类

将领域模型从sys.core和sys.infrastructure包迁移到manage-db包
添加BaseDomain作为基础领域类
实现QueryUtil工具类用于构建查询条件
新增多个Repository接口定义
添加commons-collections4依赖
This commit is contained in:
张翔
2026-03-13 19:41:03 +08:00
parent 57f85b20c8
commit 9aed900408
54 changed files with 83 additions and 65 deletions
@@ -0,0 +1,67 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
/**
* @author zhangxiang
* @version 1.0
* @description 基础领域对象
* @date 2026/03/11
**/
public abstract class BaseDomain {
protected Long id;
protected String createBy;
protected String updateBy;
protected LocalDateTime createdAt;
protected LocalDateTime updatedAt;
protected LocalDateTime deletedAt;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
public LocalDateTime getDeletedAt() {
return deletedAt;
}
public void setDeletedAt(LocalDateTime deletedAt) {
this.deletedAt = deletedAt;
}
}
@@ -0,0 +1,117 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class Dictionary {
private Long id;
private String type;
private String code;
private String name;
private String value;
private String remark;
private Integer sort;
private String createBy;
private String updateBy;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private LocalDateTime deletedAt;
public Dictionary() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
public LocalDateTime getDeletedAt() {
return deletedAt;
}
public void setDeletedAt(LocalDateTime deletedAt) {
this.deletedAt = deletedAt;
}
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.DictionaryEntity;
import cn.novalon.manage.db.entity.DictionaryEntity;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
@@ -0,0 +1,86 @@
package cn.novalon.manage.db.domain;
public class OperationLog extends BaseDomain {
private String username;
private String operation;
private String method;
private String params;
private String result;
private String ip;
private Long duration;
private String status;
private String errorMsg;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Long getDuration() {
return duration;
}
public void setDuration(Long duration) {
this.duration = duration;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.OperationLogEntity;
import cn.novalon.manage.db.entity.OperationLogEntity;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
@@ -0,0 +1,42 @@
package cn.novalon.manage.db;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author zhangxiang
* @version 1.0
* @description 查询字段注解
* @date 2026/03/11
**/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryField {
String propName() default "";
String blurry() default "";
Type type() default Type.EQUAL;
Type orPropVal() default Type.EQUAL;
String[] orPropNames() default {};
enum Type {
EQUAL,
GREATER_THAN,
LESS_THAN,
LESS_THAN_NQ,
INNER_LIKE,
LEFT_LIKE,
NOT_LEFT_LIKE,
RIGHT_LIKE,
IN,
OR,
IS_NULL,
IS_NOT_NULL
}
}
@@ -0,0 +1,149 @@
package cn.novalon.manage.db;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.relational.core.query.Criteria;
import org.springframework.data.relational.core.query.Query;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* @author zhangxiang
* @version 1.0
* @description 查询工具类
* @date 2026/03/11
**/
public class QueryUtil {
private static final Logger log = LoggerFactory.getLogger(QueryUtil.class);
public static <Q> Query getQuery(Q query) {
return getQuery(query, true);
}
public static <Q> Query getQueryAll(Q query) {
return getQuery(query, false);
}
public static <Q> Query getQuery(Q query, Boolean enabled) {
Criteria criteria = Criteria.empty();
if (enabled) {
criteria = criteria.and("deletedAt").isNull();
}
if (query == null) {
return Query.query(criteria);
}
try {
List<Field> fields = getAllFields(query.getClass(), new ArrayList<>());
for (Field field : fields) {
boolean accessible = Modifier.isStatic(field.getModifiers()) ? field.canAccess(null)
: field.canAccess(query);
field.setAccessible(true);
QueryField q = field.getAnnotation(QueryField.class);
if (q != null) {
String propName = q.propName();
String blurry = q.blurry();
String attributeName = isBlank(propName) ? field.getName() : propName;
Object val = field.get(query);
if (val == null || "".equals(val)) {
continue;
}
if (StringUtils.isNotBlank(blurry)) {
String[] blurrys = blurry.split(",");
Criteria orCriteria = Criteria.empty();
for (String s : blurrys) {
orCriteria = orCriteria.or(s).like("%" + val + "%");
}
criteria = criteria.and(orCriteria);
continue;
}
switch (q.type()) {
case EQUAL:
criteria = criteria.and(attributeName).is(val);
break;
case GREATER_THAN:
criteria = criteria.and(attributeName).greaterThanOrEquals(val);
break;
case LESS_THAN:
criteria = criteria.and(attributeName).lessThanOrEquals(val);
break;
case LESS_THAN_NQ:
criteria = criteria.and(attributeName).lessThan(val);
break;
case INNER_LIKE:
criteria = criteria.and(attributeName).like("%" + val + "%");
break;
case LEFT_LIKE:
criteria = criteria.and(attributeName).like("%" + val);
break;
case NOT_LEFT_LIKE:
criteria = criteria.and(attributeName).notLike("%" + val);
break;
case RIGHT_LIKE:
criteria = criteria.and(attributeName).like(val + "%");
break;
case IN:
if (val instanceof Collection && CollectionUtils.isNotEmpty((Collection<?>) val)) {
criteria = criteria.and(attributeName).in((Collection<?>) val);
}
break;
case OR:
QueryField.Type orValue = q.orPropVal();
String[] orPropNames = q.orPropNames();
Criteria orPredicate = Criteria.empty();
if (QueryField.Type.IS_NULL.equals(orValue)) {
for (String prop : orPropNames) {
orPredicate = orPredicate.or(prop).isNull();
}
}
if (QueryField.Type.IS_NOT_NULL.equals(orValue)) {
for (String prop : orPropNames) {
orPredicate = orPredicate.or(prop).isNotNull();
}
}
criteria = criteria.and(orPredicate);
break;
case IS_NULL:
criteria = criteria.and(attributeName).isNull();
break;
case IS_NOT_NULL:
criteria = criteria.and(attributeName).isNotNull();
break;
}
}
field.setAccessible(accessible);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return Query.query(criteria);
}
public static boolean isBlank(final CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(cs.charAt(i))) {
return false;
}
}
return false;
}
private static List<Field> getAllFields(Class<?> clazz, List<Field> fields) {
if (clazz != null) {
fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
getAllFields(clazz.getSuperclass(), fields);
}
return fields;
}
}
@@ -0,0 +1,38 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysConfig {
private Long id;
private String configName;
private String configKey;
private String configValue;
private String configType;
private String createBy;
private String updateBy;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private LocalDateTime deletedAt;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getConfigName() { return configName; }
public void setConfigName(String configName) { this.configName = configName; }
public String getConfigKey() { return configKey; }
public void setConfigKey(String configKey) { this.configKey = configKey; }
public String getConfigValue() { return configValue; }
public void setConfigValue(String configValue) { this.configValue = configValue; }
public String getConfigType() { return configType; }
public void setConfigType(String configType) { this.configType = configType; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
public LocalDateTime getUpdatedAt() { return updatedAt; }
public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
public LocalDateTime getDeletedAt() { return deletedAt; }
public void setDeletedAt(LocalDateTime deletedAt) { this.deletedAt = deletedAt; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysConfigEntity;
import cn.novalon.manage.db.entity.SysConfigEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,53 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysDictData {
private Long id;
private Long dictTypeId;
private String dictLabel;
private String dictValue;
private Integer dictSort;
private String dictType;
private String cssClass;
private String listClass;
private String isDefault;
private String status;
private String createBy;
private String updateBy;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private LocalDateTime deletedAt;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getDictTypeId() { return dictTypeId; }
public void setDictTypeId(Long dictTypeId) { this.dictTypeId = dictTypeId; }
public String getDictLabel() { return dictLabel; }
public void setDictLabel(String dictLabel) { this.dictLabel = dictLabel; }
public String getDictValue() { return dictValue; }
public void setDictValue(String dictValue) { this.dictValue = dictValue; }
public Integer getDictSort() { return dictSort; }
public void setDictSort(Integer dictSort) { this.dictSort = dictSort; }
public String getDictType() { return dictType; }
public void setDictType(String dictType) { this.dictType = dictType; }
public String getCssClass() { return cssClass; }
public void setCssClass(String cssClass) { this.cssClass = cssClass; }
public String getListClass() { return listClass; }
public void setListClass(String listClass) { this.listClass = listClass; }
public String getIsDefault() { return isDefault; }
public void setIsDefault(String isDefault) { this.isDefault = isDefault; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
public LocalDateTime getUpdatedAt() { return updatedAt; }
public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
public LocalDateTime getDeletedAt() { return deletedAt; }
public void setDeletedAt(LocalDateTime deletedAt) { this.deletedAt = deletedAt; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysDictDataEntity;
import cn.novalon.manage.db.entity.SysDictDataEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,38 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysDictType {
private Long id;
private String dictName;
private String dictType;
private String status;
private String remark;
private String createBy;
private String updateBy;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private LocalDateTime deletedAt;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getDictName() { return dictName; }
public void setDictName(String dictName) { this.dictName = dictName; }
public String getDictType() { return dictType; }
public void setDictType(String dictType) { this.dictType = dictType; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
public LocalDateTime getUpdatedAt() { return updatedAt; }
public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
public LocalDateTime getDeletedAt() { return deletedAt; }
public void setDeletedAt(LocalDateTime deletedAt) { this.deletedAt = deletedAt; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysDictTypeEntity;
import cn.novalon.manage.db.entity.SysDictTypeEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,38 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysExceptionLog {
private Long id;
private String username;
private String title;
private String exceptionName;
private String methodName;
private String methodParams;
private String exceptionMsg;
private String exceptionStack;
private String ip;
private LocalDateTime createTime;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getExceptionName() { return exceptionName; }
public void setExceptionName(String exceptionName) { this.exceptionName = exceptionName; }
public String getMethodName() { return methodName; }
public void setMethodName(String methodName) { this.methodName = methodName; }
public String getMethodParams() { return methodParams; }
public void setMethodParams(String methodParams) { this.methodParams = methodParams; }
public String getExceptionMsg() { return exceptionMsg; }
public void setExceptionMsg(String exceptionMsg) { this.exceptionMsg = exceptionMsg; }
public String getExceptionStack() { return exceptionStack; }
public void setExceptionStack(String exceptionStack) { this.exceptionStack = exceptionStack; }
public String getIp() { return ip; }
public void setIp(String ip) { this.ip = ip; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysExceptionLogEntity;
import cn.novalon.manage.db.entity.SysExceptionLogEntity;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
@@ -0,0 +1,38 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysFile {
private Long id;
private String fileName;
private String filePath;
private String fileSize;
private String fileType;
private String storageType;
private String createBy;
private String updateBy;
private LocalDateTime createdAt;
private LocalDateTime deletedAt;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getFileName() { return fileName; }
public void setFileName(String fileName) { this.fileName = fileName; }
public String getFilePath() { return filePath; }
public void setFilePath(String filePath) { this.filePath = filePath; }
public String getFileSize() { return fileSize; }
public void setFileSize(String fileSize) { this.fileSize = fileSize; }
public String getFileType() { return fileType; }
public void setFileType(String fileType) { this.fileType = fileType; }
public String getStorageType() { return storageType; }
public void setStorageType(String storageType) { this.storageType = storageType; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
public LocalDateTime getDeletedAt() { return deletedAt; }
public void setDeletedAt(LocalDateTime deletedAt) { this.deletedAt = deletedAt; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysFileEntity;
import cn.novalon.manage.db.entity.SysFileEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,35 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysLoginLog {
private Long id;
private String username;
private String ip;
private String location;
private String browser;
private String os;
private String status;
private String message;
private LocalDateTime loginTime;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getIp() { return ip; }
public void setIp(String ip) { this.ip = ip; }
public String getLocation() { return location; }
public void setLocation(String location) { this.location = location; }
public String getBrowser() { return browser; }
public void setBrowser(String browser) { this.browser = browser; }
public String getOs() { return os; }
public void setOs(String os) { this.os = os; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
public LocalDateTime getLoginTime() { return loginTime; }
public void setLoginTime(LocalDateTime loginTime) { this.loginTime = loginTime; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysLoginLogEntity;
import cn.novalon.manage.db.entity.SysLoginLogEntity;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
@@ -0,0 +1,97 @@
package cn.novalon.manage.db.domain;
import java.util.List;
public class SysMenu extends BaseDomain {
private String menuName;
private Long parentId;
private Integer orderNum;
private String menuType;
private String perms;
private String component;
private String status;
private String createBy;
private String updateBy;
private List<SysMenu> children;
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public Integer getOrderNum() {
return orderNum;
}
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
public String getMenuType() {
return menuType;
}
public void setMenuType(String menuType) {
this.menuType = menuType;
}
public String getPerms() {
return perms;
}
public void setPerms(String perms) {
this.perms = perms;
}
public String getComponent() {
return component;
}
public void setComponent(String component) {
this.component = component;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public List<SysMenu> getChildren() {
return children;
}
public void setChildren(List<SysMenu> children) {
this.children = children;
}
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysMenuEntity;
import cn.novalon.manage.db.entity.SysMenuEntity;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
@@ -0,0 +1,38 @@
package cn.novalon.manage.db;
/**
* @author zhangxiang
* @version 1.0
* @description 菜单查询对象
* @date 2026/03/11
**/
public class SysMenuQuery {
private String menuName;
private String menuType;
private String status;
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
public String getMenuType() {
return menuType;
}
public void setMenuType(String menuType) {
this.menuType = menuType;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
@@ -0,0 +1,38 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysNotice {
private Long id;
private String noticeTitle;
private String noticeType;
private String noticeContent;
private String status;
private String createBy;
private String updateBy;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private LocalDateTime deletedAt;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getNoticeTitle() { return noticeTitle; }
public void setNoticeTitle(String noticeTitle) { this.noticeTitle = noticeTitle; }
public String getNoticeType() { return noticeType; }
public void setNoticeType(String noticeType) { this.noticeType = noticeType; }
public String getNoticeContent() { return noticeContent; }
public void setNoticeContent(String noticeContent) { this.noticeContent = noticeContent; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
public LocalDateTime getUpdatedAt() { return updatedAt; }
public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
public LocalDateTime getDeletedAt() { return deletedAt; }
public void setDeletedAt(LocalDateTime deletedAt) { this.deletedAt = deletedAt; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysNoticeEntity;
import cn.novalon.manage.db.entity.SysNoticeEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,75 @@
package cn.novalon.manage.db.domain;
import cn.novalon.manage.common.util.SnowflakeId;
import java.time.LocalDateTime;
/**
* @author zhangxiang
* @version 1.0
* @description 角色领域对象
* @date 2026/03/11
**/
public class SysRole extends BaseDomain {
private String roleName;
private String roleKey;
private Integer roleSort;
private Integer status;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleKey() {
return roleKey;
}
public void setRoleKey(String roleKey) {
this.roleKey = roleKey;
}
public Integer getRoleSort() {
return roleSort;
}
public void setRoleSort(Integer roleSort) {
this.roleSort = roleSort;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
/**
* 生成主键ID
*
* @return 主键ID
*/
public Long generateId() {
this.id = SnowflakeId.nextId();
return this.id;
}
/**
* 删除角色
*/
public void delete() {
this.deletedAt = LocalDateTime.now();
}
/**
* 恢复角色
*/
public void restore() {
this.deletedAt = null;
}
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysRoleEntity;
import cn.novalon.manage.db.entity.SysRoleEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,38 @@
package cn.novalon.manage.db;
/**
* @author zhangxiang
* @version 1.0
* @description 角色查询对象
* @date 2026/03/11
**/
public class SysRoleQuery {
private String roleName;
private String roleKey;
private Integer status;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleKey() {
return roleKey;
}
public void setRoleKey(String roleKey) {
this.roleKey = roleKey;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
@@ -0,0 +1,77 @@
package cn.novalon.manage.db.domain;
import cn.novalon.manage.common.util.SnowflakeId;
import java.time.LocalDateTime;
/**
* @author zhangxiang
* @version 1.0
* @description 用户领域对象
* @date 2026/03/11
**/
public class SysUser extends BaseDomain {
private String username;
private String password;
private String email;
private Long roleId;
private Integer status;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
/**
* 生成主键ID
*
* @return 主键ID
*/
public Long generateId() {
this.id = SnowflakeId.nextId();
return this.id;
}
/**
* 删除用户
*/
public void delete() {
this.deletedAt = LocalDateTime.now();
}
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysUserEntity;
import cn.novalon.manage.db.entity.SysUserEntity;
import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
@@ -0,0 +1,29 @@
package cn.novalon.manage.db.domain;
import java.time.LocalDateTime;
public class SysUserMessage {
private Long id;
private Long userId;
private String title;
private String content;
private String messageType;
private String isRead;
private LocalDateTime createTime;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getUserId() { return userId; }
public void setUserId(Long userId) { this.userId = userId; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getMessageType() { return messageType; }
public void setMessageType(String messageType) { this.messageType = messageType; }
public String getIsRead() { return isRead; }
public void setIsRead(String isRead) { this.isRead = isRead; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db;
import cn.novalon.manage.sys.infrastructure.db.entity.SysUserMessageEntity;
import cn.novalon.manage.db.entity.SysUserMessageEntity;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
@@ -0,0 +1,47 @@
package cn.novalon.manage.db;
/**
* @author zhangxiang
* @version 1.0
* @description 用户查询对象
* @date 2026/03/11
**/
public class SysUserQuery {
private String username;
private String email;
private Integer status;
private Long roleId;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
}
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.Dictionary;
import cn.novalon.manage.db.domain.Dictionary;
import cn.novalon.manage.db.entity.DictionaryEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.OperationLog;
import cn.novalon.manage.db.domain.OperationLog;
import cn.novalon.manage.db.entity.OperationLogEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysConfig;
import cn.novalon.manage.db.domain.SysConfig;
import cn.novalon.manage.db.entity.SysConfigEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysDictData;
import cn.novalon.manage.db.domain.SysDictData;
import cn.novalon.manage.db.entity.SysDictDataEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysDictType;
import cn.novalon.manage.db.domain.SysDictType;
import cn.novalon.manage.db.entity.SysDictTypeEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysExceptionLog;
import cn.novalon.manage.db.domain.SysExceptionLog;
import cn.novalon.manage.db.entity.SysExceptionLogEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysFile;
import cn.novalon.manage.db.domain.SysFile;
import cn.novalon.manage.db.entity.SysFileEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysLoginLog;
import cn.novalon.manage.db.domain.SysLoginLog;
import cn.novalon.manage.db.entity.SysLoginLogEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysMenu;
import cn.novalon.manage.db.domain.SysMenu;
import cn.novalon.manage.db.entity.SysMenuEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysNotice;
import cn.novalon.manage.db.domain.SysNotice;
import cn.novalon.manage.db.entity.SysNoticeEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysRole;
import cn.novalon.manage.db.domain.SysRole;
import cn.novalon.manage.db.entity.SysRoleEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysUser;
import cn.novalon.manage.db.domain.SysUser;
import cn.novalon.manage.db.entity.SysUserEntity;
import org.springframework.stereotype.Component;
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.db.domain.SysUserMessage;
import cn.novalon.manage.db.entity.SysUserMessageEntity;
import org.springframework.stereotype.Component;
@@ -1,7 +1,7 @@
package cn.novalon.manage.db.entity;
import cn.novalon.manage.sys.core.domain.query.SysMenuQuery;
import cn.novalon.manage.sys.infrastructure.db.utils.QueryField;
import cn.novalon.manage.db.SysMenuQuery;
import cn.novalon.manage.db.QueryField;
/**
* @author zhangxiang
@@ -1,7 +1,7 @@
package cn.novalon.manage.db.entity;
import cn.novalon.manage.sys.core.domain.query.SysRoleQuery;
import cn.novalon.manage.sys.infrastructure.db.utils.QueryField;
import cn.novalon.manage.db.SysRoleQuery;
import cn.novalon.manage.db.QueryField;
/**
* @author zhangxiang
@@ -1,7 +1,7 @@
package cn.novalon.manage.db.entity;
import cn.novalon.manage.sys.core.domain.query.SysUserQuery;
import cn.novalon.manage.sys.infrastructure.db.utils.QueryField;
import cn.novalon.manage.db.SysUserQuery;
import cn.novalon.manage.db.QueryField;
/**
* @author zhangxiang
@@ -0,0 +1,24 @@
package cn.novalon.manage.db.repository;
import cn.novalon.manage.db.domain.OperationLog;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.time.LocalDateTime;
public interface IOperationLogRepository {
Mono<OperationLog> findById(Long id);
Mono<OperationLog> save(OperationLog operationLog);
Mono<Void> deleteById(Long id);
Flux<OperationLog> findAll();
Flux<OperationLog> findByUsername(String username);
Mono<Long> count();
Mono<Long> countByCreatedAtAfter(LocalDateTime dateTime);
}
@@ -0,0 +1,18 @@
package cn.novalon.manage.db.repository;
import cn.novalon.manage.db.domain.SysMenu;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public interface ISysMenuRepository {
Mono<SysMenu> findById(Long id);
Flux<SysMenu> findAll();
Flux<SysMenu> findByParentId(Long parentId);
Mono<SysMenu> save(SysMenu sysMenu);
Mono<Void> deleteById(Long id);
}
@@ -0,0 +1,38 @@
package cn.novalon.manage.db.repository;
import cn.novalon.manage.db.domain.SysRole;
import cn.novalon.manage.common.dto.PageRequest;
import cn.novalon.manage.common.dto.PageResponse;
import org.springframework.data.domain.Sort;
import org.springframework.data.relational.core.query.Query;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public interface ISysRoleRepository {
Mono<SysRole> findById(Long id);
Mono<SysRole> findByIdIncludingDeleted(Long id);
Mono<SysRole> save(SysRole sysRole);
Mono<Void> deleteById(Long id);
Flux<SysRole> findAll();
Flux<SysRole> findAll(Sort sort);
Flux<SysRole> findByRoleNameLikeOrRoleKeyLike(String roleName, String roleKey, Sort sort);
Mono<Long> count();
Mono<Long> countByRoleNameLikeOrRoleKeyLike(String roleName, String roleKey);
Mono<PageResponse<SysRole>> findByQueryWithPagination(Query query, PageRequest pageRequest);
Mono<SysRole> findByRoleName(String roleName);
Mono<Boolean> existsByRoleName(String roleName);
Mono<SysRole> updateRole(SysRole role);
}
@@ -0,0 +1,50 @@
package cn.novalon.manage.db.repository;
import cn.novalon.manage.db.domain.SysUser;
import cn.novalon.manage.common.dto.PageRequest;
import cn.novalon.manage.common.dto.PageResponse;
import org.springframework.data.domain.Sort;
import org.springframework.data.relational.core.query.Query;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.List;
public interface ISysUserRepository {
Mono<SysUser> findByUsername(String username);
Mono<SysUser> findByEmail(String email);
Mono<SysUser> findById(Long id);
Mono<SysUser> findByIdIncludingDeleted(Long id);
Mono<SysUser> save(SysUser sysUser);
Mono<Void> deleteById(Long id);
Flux<SysUser> findAll();
Flux<SysUser> findAll(Sort sort);
Flux<SysUser> findByDeletedAtIsNull();
Flux<SysUser> findByDeletedAtIsNull(Sort sort);
Mono<Long> count();
Mono<PageResponse<SysUser>> findByQueryWithPagination(Query query, PageRequest pageRequest);
Mono<Boolean> existsByUsername(String username);
Mono<Boolean> existsByEmail(String email);
Mono<Void> logicalDeleteById(Long id);
Mono<Void> logicalDeleteByIds(List<Long> ids);
Mono<Void> restoreById(Long id);
Mono<Void> restoreByIds(List<Long> ids);
}