+ * 网关通用配置文件
+ */
+@Data
+@Component
+@RefreshScope
+@ConfigurationProperties("gateway")
+public class GatewayConfigProperties {
+
+ /**
+ * 网关解密登录前端密码 秘钥 {@link com.pig4cloud.pigx.gateway.filter.PasswordDecoderFilter}
+ */
+ public String encodeKey;
+
+}
diff --git a/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/RateLimiterConfiguration.java b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/RateLimiterConfiguration.java
new file mode 100644
index 0000000..9c912a0
--- /dev/null
+++ b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/RateLimiterConfiguration.java
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.gateway.config;
+
+import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import reactor.core.publisher.Mono;
+
+/**
+ * @author lengleng
+ * @date 2018/7/1 路由限流配置
+ */
+@Configuration
+public class RateLimiterConfiguration {
+
+ @Bean(value = "remoteAddrKeyResolver")
+ public KeyResolver remoteAddrKeyResolver() {
+ return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
+ }
+
+}
diff --git a/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/RouterFunctionConfiguration.java b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/RouterFunctionConfiguration.java
new file mode 100644
index 0000000..0ae4dc2
--- /dev/null
+++ b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/RouterFunctionConfiguration.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.gateway.config;
+
+import com.pig4cloud.pigx.gateway.handler.ImageCodeCheckHandler;
+import com.pig4cloud.pigx.gateway.handler.ImageCodeCreateHandler;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.web.reactive.function.server.RequestPredicates;
+import org.springframework.web.reactive.function.server.RouterFunction;
+import org.springframework.web.reactive.function.server.RouterFunctions;
+
+/**
+ * @author lengleng
+ * @date 2018/7/5 路由配置信息
+ */
+@Slf4j
+@Configuration
+@AllArgsConstructor
+public class RouterFunctionConfiguration {
+
+ private final ImageCodeCheckHandler imageCodeCheckHandler;
+
+ private final ImageCodeCreateHandler imageCodeCreateHandler;
+
+ @Bean
+ public RouterFunction routerFunction() {
+ return RouterFunctions
+ .route(RequestPredicates.path("/code/create").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)),
+ imageCodeCreateHandler)
+ .andRoute(RequestPredicates.POST("/code/check").and(RequestPredicates.accept(MediaType.ALL)),
+ imageCodeCheckHandler);
+
+ }
+
+}
diff --git a/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/SpringDocConfiguration.java b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/SpringDocConfiguration.java
new file mode 100644
index 0000000..48a9f22
--- /dev/null
+++ b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/SpringDocConfiguration.java
@@ -0,0 +1,84 @@
+package com.pig4cloud.pigx.gateway.config;
+
+import com.alibaba.nacos.client.naming.event.InstancesChangeEvent;
+import com.alibaba.nacos.common.notify.Event;
+import com.alibaba.nacos.common.notify.NotifyCenter;
+import com.alibaba.nacos.common.notify.listener.Subscriber;
+import com.alibaba.nacos.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springdoc.core.AbstractSwaggerUiConfigProperties;
+import org.springdoc.core.SwaggerUiConfigProperties;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author lengleng
+ * @date 2022/3/26
+ *
+ * swagger 3.0 展示
+ */
+@Configuration(proxyBeanMethods = false)
+@RequiredArgsConstructor
+@ConditionalOnProperty(name = "springdoc.api-docs.enabled", matchIfMissing = true)
+public class SpringDocConfiguration implements InitializingBean {
+
+ private final SwaggerUiConfigProperties swaggerUiConfigProperties;
+
+ private final DiscoveryClient discoveryClient;
+
+ /**
+ * 在初始化后调用的方法,用于注册SwaggerDocRegister订阅器
+ */
+ @Override
+ public void afterPropertiesSet() {
+ SwaggerDocRegister swaggerDocRegister = new SwaggerDocRegister(swaggerUiConfigProperties, discoveryClient);
+ // 手动调用一次,避免监听事件掉线问题
+ swaggerDocRegister.onEvent(null);
+ NotifyCenter.registerSubscriber(swaggerDocRegister);
+ }
+
+}
+
+/**
+ * Swagger文档注册器,继承自Subscriber
+ */
+@RequiredArgsConstructor
+class SwaggerDocRegister extends Subscriber {
+
+ private final SwaggerUiConfigProperties swaggerUiConfigProperties;
+
+ private final DiscoveryClient discoveryClient;
+
+ /**
+ * 事件回调方法,处理InstancesChangeEvent事件
+ * @param event 事件对象
+ */
+ @Override
+ public void onEvent(InstancesChangeEvent event) {
+ Set swaggerUrlSet = discoveryClient.getServices().stream()
+ .flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream())
+ .filter(instance -> StringUtils.isNotBlank(instance.getMetadata().get("spring-doc"))).map(instance -> {
+ AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl();
+ swaggerUrl.setName(instance.getServiceId());
+ swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getMetadata().get("spring-doc")));
+ return swaggerUrl;
+ }).collect(Collectors.toSet());
+
+ swaggerUiConfigProperties.setUrls(swaggerUrlSet);
+ }
+
+ /**
+ * 订阅类型方法,返回订阅的事件类型
+ * @return 订阅的事件类型
+ */
+ @Override
+ public Class extends Event> subscribeType() {
+ return InstancesChangeEvent.class;
+ }
+
+}
diff --git a/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/HttpBasicGatewayFilter.java b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/HttpBasicGatewayFilter.java
new file mode 100644
index 0000000..9e50d7e
--- /dev/null
+++ b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/HttpBasicGatewayFilter.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.gateway.filter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+
+/**
+ * @author lengleng
+ * @date 2018/10/30
+ *
+ * 自定义basic认证,针对特殊场景使用
+ */
+@Slf4j
+@Component
+public class HttpBasicGatewayFilter extends AbstractGatewayFilterFactory {
+
+ @Override
+ public GatewayFilter apply(Object config) {
+ return (exchange, chain) -> {
+ if (hasAuth(exchange)) {
+ return chain.filter(exchange);
+ }
+ else {
+ ServerHttpResponse response = exchange.getResponse();
+ response.setStatusCode(HttpStatus.UNAUTHORIZED);
+ response.getHeaders().add(HttpHeaders.WWW_AUTHENTICATE, "Basic Realm=\"pigx\"");
+ return response.setComplete();
+ }
+ };
+ }
+
+ /**
+ * 简单的basic认证
+ * @param exchange 上下文
+ * @return 是否有权限
+ */
+ private boolean hasAuth(ServerWebExchange exchange) {
+ ServerHttpRequest request = exchange.getRequest();
+ String auth = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
+ log.info("Basic认证信息为:{}", auth);
+ return true;
+ }
+
+}
diff --git a/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PasswordDecoderFilter.java b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PasswordDecoderFilter.java
new file mode 100644
index 0000000..73bfc4e
--- /dev/null
+++ b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PasswordDecoderFilter.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.gateway.filter;
+
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.Mode;
+import cn.hutool.crypto.Padding;
+import cn.hutool.crypto.symmetric.AES;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.pig4cloud.pigx.common.core.constant.CacheConstants;
+import com.pig4cloud.pigx.common.core.constant.CommonConstants;
+import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
+import com.pig4cloud.pigx.common.core.constant.enums.EncFlagTypeEnum;
+import com.pig4cloud.pigx.common.core.util.WebUtils;
+import com.pig4cloud.pigx.gateway.config.GatewayConfigProperties;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
+import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage;
+import org.springframework.cloud.gateway.support.BodyInserterContext;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.codec.HttpMessageReader;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
+import org.springframework.stereotype.Component;
+import org.springframework.web.reactive.function.BodyInserter;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.server.HandlerStrategies;
+import org.springframework.web.reactive.function.server.ServerRequest;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.Charset;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * @author lengleng
+ * @date 2020/1/8 密码解密工具类
+ *
+ * 参考 ModifyRequestBodyGatewayFilterFactory 实现
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+@SuppressWarnings("all")
+public class PasswordDecoderFilter extends AbstractGatewayFilterFactory {
+
+ private final List> messageReaders = HandlerStrategies.withDefaults().messageReaders();
+
+ private static final String PASSWORD = "password";
+
+ private static final String KEY_ALGORITHM = "AES";
+
+ private final RedisTemplate redisTemplate;
+
+ private final GatewayConfigProperties gatewayConfig;
+
+ @Override
+ public GatewayFilter apply(Object config) {
+ return (exchange, chain) -> {
+ ServerHttpRequest request = exchange.getRequest();
+ // 1. 不是登录请求,直接向下执行
+ if (!StrUtil.containsAnyIgnoreCase(request.getURI().getPath(), SecurityConstants.OAUTH_TOKEN_URL)) {
+ return chain.filter(exchange);
+ }
+
+ // 2. 刷新token类型,直接向下执行
+ String grantType = request.getQueryParams().getFirst("grant_type");
+ if (StrUtil.equals(SecurityConstants.REFRESH_TOKEN, grantType)) {
+ return chain.filter(exchange);
+ }
+
+ // 3. 判断客户端是否需要解密,明文传输直接向下执行
+ if (!isEncClient(request)) {
+ return chain.filter(exchange);
+ }
+
+ // 4. 前端加密密文解密逻辑
+ Class inClass = String.class;
+ Class outClass = String.class;
+ ServerRequest serverRequest = ServerRequest.create(exchange, messageReaders);
+
+ // 解密生成新的报文
+ Mono> modifiedBody = serverRequest.bodyToMono(inClass).flatMap(decryptAES());
+
+ BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, outClass);
+ HttpHeaders headers = new HttpHeaders();
+ headers.putAll(exchange.getRequest().getHeaders());
+ headers.remove(HttpHeaders.CONTENT_LENGTH);
+
+ headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+ CachedBodyOutputMessage outputMessage = new CachedBodyOutputMessage(exchange, headers);
+ return bodyInserter.insert(outputMessage, new BodyInserterContext()).then(Mono.defer(() -> {
+ ServerHttpRequest decorator = decorate(exchange, headers, outputMessage);
+ return chain.filter(exchange.mutate().request(decorator).build());
+ }));
+ };
+ }
+
+ /**
+ * 根据请求的clientId 查询客户端配置是否是加密传输
+ * @param request 请求上下文
+ * @return true 加密传输 、 false 原文传输
+ */
+ private boolean isEncClient(ServerHttpRequest request) {
+ String header = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
+ String clientId = WebUtils.extractClientId(header).orElse(null);
+ // 获取租户拼接区分租户的key
+ String tenantId = request.getHeaders().getFirst(CommonConstants.TENANT_ID);
+ String key = String.format("%s:%s:%s", StrUtil.isBlank(tenantId) ? CommonConstants.TENANT_ID_1 : tenantId,
+ CacheConstants.CLIENT_FLAG, clientId);
+
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
+ Object val = redisTemplate.opsForValue().get(key);
+
+ // 当配置不存在时,默认需要解密
+ if (val == null) {
+ return true;
+ }
+
+ JSONObject information = JSONUtil.parseObj(val.toString());
+ if (StrUtil.equals(EncFlagTypeEnum.NO.getType(), information.getStr(CommonConstants.ENC_FLAG))) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 原文解密
+ * @return
+ */
+ private Function decryptAES() {
+ return s -> {
+ // 构建前端对应解密AES 因子
+ AES aes = new AES(Mode.CFB, Padding.NoPadding,
+ new SecretKeySpec(gatewayConfig.getEncodeKey().getBytes(), KEY_ALGORITHM),
+ new IvParameterSpec(gatewayConfig.getEncodeKey().getBytes()));
+
+ // 获取请求密码并解密
+ Map inParamsMap = HttpUtil.decodeParamMap((String) s, CharsetUtil.CHARSET_UTF_8);
+ if (inParamsMap.containsKey(PASSWORD)) {
+ String password = aes.decryptStr(inParamsMap.get(PASSWORD));
+ // 返回修改后报文字符
+ inParamsMap.put(PASSWORD, password);
+ }
+ else {
+ log.error("非法请求数据:{}", s);
+ }
+
+ // 使用
+ return Mono.just(HttpUtil.toParams(inParamsMap, Charset.defaultCharset(), true));
+ };
+ }
+
+ /**
+ * 报文转换
+ * @return
+ */
+ private ServerHttpRequestDecorator decorate(ServerWebExchange exchange, HttpHeaders headers,
+ CachedBodyOutputMessage outputMessage) {
+ return new ServerHttpRequestDecorator(exchange.getRequest()) {
+ @Override
+ public HttpHeaders getHeaders() {
+ long contentLength = headers.getContentLength();
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.putAll(super.getHeaders());
+ if (contentLength > 0) {
+ httpHeaders.setContentLength(contentLength);
+ }
+ else {
+ httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked");
+ }
+ return httpHeaders;
+ }
+
+ @Override
+ public Flux getBody() {
+ return outputMessage.getBody();
+ }
+ };
+ }
+
+}
diff --git a/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java
new file mode 100644
index 0000000..386954b
--- /dev/null
+++ b/as-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.gateway.filter;
+
+import com.pig4cloud.pigx.common.core.constant.CommonConstants;
+import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.stream.Collectors;
+
+import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
+import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;
+
+/**
+ * @author lengleng
+ * @date 2018/10/8
+ *
+ * 终端管理传输对象
+ */
+@Data
+public class SysOauthClientDetailsDTO extends SysOauthClientDetails {
+
+ /**
+ * 验证码开关
+ */
+ private String captchaFlag;
+
+ /**
+ * 前端密码传输是否加密
+ */
+ private String encFlag;
+
+ /**
+ * 客户端允许同时在线数量
+ */
+ private String onlineQuantity;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserDTO.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserDTO.java
new file mode 100644
index 0000000..ceb16b0
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserDTO.java
@@ -0,0 +1,61 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.dto;
+
+import com.pig4cloud.pigx.admin.api.entity.SysUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * @author lengleng
+ * @date 2017/11/5
+ */
+@Data
+@Schema(description = "系统用户传输对象")
+@EqualsAndHashCode(callSuper = true)
+public class UserDTO extends SysUser {
+
+ /**
+ * 角色ID
+ */
+ @Schema(description = "角色id集合")
+ private List role;
+
+ /**
+ * 部门id
+ */
+ @Schema(description = "部门id")
+ private Long deptId;
+
+ /**
+ * 岗位ID
+ */
+ private List post;
+
+ /**
+ * 新密码
+ */
+ @Schema(description = "新密码")
+ private String newpassword1;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java
new file mode 100644
index 0000000..b592e78
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.dto;
+
+import com.pig4cloud.pigx.admin.api.entity.SysUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author lengleng
+ * @date 2017/11/11
+ */
+@Data
+@Schema(description = "用户信息")
+public class UserInfo implements Serializable {
+
+ /**
+ * 用户基本信息
+ */
+ @Schema(description = "用户基本信息")
+ private SysUser sysUser;
+
+ /**
+ * 权限标识集合
+ */
+ @Schema(description = "权限标识集合")
+ private String[] permissions;
+
+ /**
+ * 角色集合
+ */
+ @Schema(description = "角色标识集合")
+ private Long[] roles;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysAuditLog.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysAuditLog.java
new file mode 100644
index 0000000..d7ad25f
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysAuditLog.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 审计记录表
+ *
+ * @author PIG
+ * @date 2023-02-28 20:12:23
+ */
+@Data
+@TableName("sys_audit_log")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "审计记录表")
+public class SysAuditLog extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private Long id;
+
+ /**
+ * 审计名称
+ */
+ @Schema(description = "审计名称")
+ private String auditName;
+
+ /**
+ * 字段名称
+ */
+ @Schema(description = "字段名称")
+ private String auditField;
+
+ /**
+ * 变更前值
+ */
+ @Schema(description = "变更前值")
+ private String beforeVal;
+
+ /**
+ * 变更后值
+ */
+ @Schema(description = "变更后值")
+ private String afterVal;
+
+ /**
+ * 操作人
+ */
+ @Schema(description = "操作人")
+ private String createBy;
+
+ /**
+ * 操作时间
+ */
+ @Schema(description = "操作时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 删除标记
+ */
+ @Schema(description = "删除标记")
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ private String delFlag;
+
+ /**
+ * 租户ID
+ */
+ @Schema(description = "租户ID")
+ private Long tenantId;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java
new file mode 100644
index 0000000..9ff2671
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDept.java
@@ -0,0 +1,107 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 部门管理
+ *
+ *
+ * @author lengleng
+ * @since 2018-01-22
+ */
+@Data
+@Schema(description = "部门")
+@EqualsAndHashCode(callSuper = true)
+public class SysDept extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "dept_id", type = IdType.ASSIGN_ID)
+ @Schema(description = "部门id")
+ private Long deptId;
+
+ /**
+ * 部门名称
+ */
+ @NotBlank(message = "部门名称不能为空")
+ @Schema(description = "部门名称")
+ private String name;
+
+ /**
+ * 排序
+ */
+ @NotNull(message = "排序值不能为空")
+ @Schema(description = "排序值")
+ private Integer sortOrder;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @Schema(description = "修改时间")
+ @TableField(fill = FieldFill.UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 父级部门id
+ */
+ @Schema(description = "父级部门id")
+ private Long parentId;
+
+ /**
+ * 是否删除 1:已删除 0:正常
+ */
+ @TableLogic
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ @TableField(fill = FieldFill.INSERT)
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDeptRelation.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDeptRelation.java
new file mode 100644
index 0000000..b66683e
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDeptRelation.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 部门关系表
+ *
+ *
+ * @author lengleng
+ * @since 2018-01-22
+ */
+@Data
+@Schema(description = "部门关系")
+@EqualsAndHashCode(callSuper = true)
+public class SysDeptRelation extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 祖先节点
+ */
+ @Schema(description = "祖先节点")
+ private Long ancestor;
+
+ /**
+ * 后代节点
+ */
+ @Schema(description = "后代节点")
+ private Long descendant;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDict.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDict.java
new file mode 100644
index 0000000..22420f5
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDict.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 字典表
+ *
+ * @author lengleng
+ * @date 2019/03/19
+ */
+@Data
+@Schema(description = "字典类型")
+@EqualsAndHashCode(callSuper = true)
+public class SysDict extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "字典编号")
+ private Long id;
+
+ /**
+ * 类型
+ */
+ @Schema(description = "字典类型")
+ private String dictType;
+
+ /**
+ * 描述
+ */
+ @Schema(description = "字典描述")
+ private String description;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @Schema(description = "更新时间")
+ @TableField(fill = FieldFill.UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 是否是系统内置
+ */
+ @Schema(description = "是否系统内置")
+ private String systemFlag;
+
+ /**
+ * 备注信息
+ */
+ @Schema(description = "备注信息")
+ private String remarks;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDictItem.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDictItem.java
new file mode 100644
index 0000000..ca331b3
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysDictItem.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 字典项
+ *
+ * @author lengleng
+ * @date 2019/03/19
+ */
+@Data
+@Schema(description = "字典项")
+@EqualsAndHashCode(callSuper = true)
+public class SysDictItem extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "字典项id")
+ private Long id;
+
+ /**
+ * 所属字典类id
+ */
+ @Schema(description = "所属字典类id")
+ private Long dictId;
+
+ /**
+ * 数据值
+ */
+ @Schema(description = "数据值")
+ @JsonProperty(value = "value")
+ private String itemValue;
+
+ /**
+ * 标签名
+ */
+ @Schema(description = "标签名")
+ private String label;
+
+ /**
+ * 类型
+ */
+ @Schema(description = "类型")
+ private String dictType;
+
+ /**
+ * 描述
+ */
+ @Schema(description = "描述")
+ private String description;
+
+ /**
+ * 排序(升序)
+ */
+ @Schema(description = "排序值,默认升序")
+ private Integer sortOrder;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 备注信息
+ */
+ @Schema(description = "备注信息")
+ private String remarks;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysFile.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysFile.java
new file mode 100644
index 0000000..4e1cfa6
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysFile.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 文件管理
+ *
+ * @author Luckly
+ * @date 2019-06-18 17:18:42
+ */
+@Data
+@Schema(description = "文件")
+@EqualsAndHashCode(callSuper = true)
+public class SysFile extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "文件编号")
+ private Long id;
+
+ /**
+ * 文件名
+ */
+ @Schema(description = "文件名")
+ private String fileName;
+
+ /**
+ * 原文件名
+ */
+ @Schema(description = "原始文件名")
+ private String original;
+
+ /**
+ * 容器名称
+ */
+ @Schema(description = "存储桶名称")
+ private String bucketName;
+
+ /**
+ * 文件类型
+ */
+ @Schema(description = "文件类型")
+ private String type;
+
+ /**
+ * 文件组
+ */
+ @Schema(description = "文件组")
+ private Long groupId;
+
+ /**
+ * 文件大小
+ */
+ @Schema(description = "文件大小")
+ private Long fileSize;
+
+ /**
+ * 上传人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建者")
+ private String createBy;
+
+ /**
+ * 上传时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "更新者")
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标识:1-删除,0-正常
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysFileGroup.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysFileGroup.java
new file mode 100644
index 0000000..0c9c22a
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysFileGroup.java
@@ -0,0 +1,73 @@
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 文件类型
+ *
+ * @author lengleng
+ * @date 2023/7/25
+ */
+@Data
+@Schema(description = "文件")
+@EqualsAndHashCode(callSuper = true)
+public class SysFileGroup extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键ID")
+ private Long id;
+
+ @Schema(description = "父级ID")
+ private Long pid;
+
+ @Schema(description = "分类类型: [10=图片,20=视频]")
+ private Long type;
+
+ @Schema(description = "分类名称")
+ private String name;
+
+ /**
+ * 上传人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建者")
+ private String createBy;
+
+ /**
+ * 上传时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "更新者")
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标识:1-删除,0-正常
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysI18nEntity.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysI18nEntity.java
new file mode 100644
index 0000000..6bb87b8
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysI18nEntity.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 系统表-国际化
+ *
+ * @author PIG
+ * @date 2023-02-14 09:07:01
+ */
+@Data
+@TableName("sys_i18n")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "系统表-国际化")
+public class SysI18nEntity extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "id")
+ private Long id;
+
+ /**
+ * key
+ */
+ @Schema(description = "name")
+ private String name;
+
+ /**
+ * 中文
+ */
+ @Schema(description = "中文")
+ private String zhCn;
+
+ /**
+ * 英文
+ */
+ @Schema(description = "英文")
+ private String en;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @Schema(description = "删除标记")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysLog.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysLog.java
new file mode 100644
index 0000000..212a851
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysLog.java
@@ -0,0 +1,158 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 日志表
+ *
+ *
+ * @author lengleng
+ * @since 2017-11-20
+ */
+@Data
+@Schema(description = "日志")
+public class SysLog implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @ExcelProperty("日志编号")
+ @Schema(description = "日志编号")
+ private Long id;
+
+ /**
+ * 日志类型
+ */
+ @NotBlank(message = "日志类型不能为空")
+ @ExcelProperty("日志类型(0-正常 9-错误)")
+ @Schema(description = "日志类型")
+ private String logType;
+
+ /**
+ * 日志标题
+ */
+ @NotBlank(message = "日志标题不能为空")
+ @ExcelProperty("日志标题")
+ @Schema(description = "日志标题")
+ private String title;
+
+ /**
+ * 创建者
+ */
+ @ExcelProperty("创建人")
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @ExcelProperty("创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @ExcelIgnore
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 操作IP地址
+ */
+ @ExcelProperty("操作ip地址")
+ @Schema(description = "操作ip地址")
+ private String remoteAddr;
+
+ /**
+ * 用户代理
+ */
+ @Schema(description = "用户代理")
+ private String userAgent;
+
+ /**
+ * 请求URI
+ */
+ @ExcelProperty("浏览器")
+ @Schema(description = "请求uri")
+ private String requestUri;
+
+ /**
+ * 操作方式
+ */
+ @ExcelProperty("操作方式")
+ @Schema(description = "操作方式")
+ private String method;
+
+ /**
+ * 操作提交的数据
+ */
+ @ExcelProperty("提交数据")
+ @Schema(description = "提交数据")
+ private String params;
+
+ /**
+ * 执行时间
+ */
+ @ExcelProperty("执行时间")
+ @Schema(description = "方法执行时间")
+ private Long time;
+
+ /**
+ * 异常信息
+ */
+ @ExcelProperty("异常信息")
+ @Schema(description = "异常信息")
+ private String exception;
+
+ /**
+ * 服务ID
+ */
+ @ExcelProperty("应用标识")
+ @Schema(description = "应用标识")
+ private String serviceId;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @ExcelIgnore
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java
new file mode 100644
index 0000000..9773910
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysMenu.java
@@ -0,0 +1,150 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 菜单权限表
+ *
+ *
+ * @author lengleng
+ * @since 2017-11-08
+ */
+@Data
+@Schema(description = "菜单")
+@EqualsAndHashCode(callSuper = true)
+public class SysMenu extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 菜单ID
+ */
+ @TableId(value = "menu_id", type = IdType.ASSIGN_ID)
+ @Schema(description = "菜单id")
+ private Long menuId;
+
+ /**
+ * 菜单名称
+ */
+ @NotBlank(message = "菜单名称不能为空")
+ @Schema(description = "菜单名称")
+ private String name;
+
+ /**
+ * 菜单权限标识
+ */
+ @Schema(description = "菜单权限标识")
+ private String permission;
+
+ /**
+ * 父菜单ID
+ */
+ @NotNull(message = "菜单父ID不能为空")
+ @Schema(description = "菜单父id")
+ private Long parentId;
+
+ /**
+ * 图标
+ */
+ @Schema(description = "菜单图标")
+ private String icon;
+
+ /**
+ * 前端路由标识路径,默认和 comment 保持一致 过期
+ */
+ @Schema(description = "前端路由标识路径")
+ private String path;
+
+ /**
+ * 菜单显示隐藏控制
+ */
+ @Schema(description = "菜单是否显示")
+ private String visible;
+
+ /**
+ * 排序值
+ */
+ @Schema(description = "排序值")
+ private Integer sortOrder;
+
+ /**
+ * 菜单类型 (0菜单 1按钮)
+ */
+ @NotNull(message = "菜单类型不能为空")
+ @Schema(description = "菜单类型,0:菜单 1:按钮")
+ private String menuType;
+
+ /**
+ * 路由缓冲
+ */
+ @Schema(description = "路由缓冲")
+ private String keepAlive;
+
+ @Schema(description = "菜单是否内嵌")
+ private String embedded;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 0--正常 1--删除
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysOauthClientDetails.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysOauthClientDetails.java
new file mode 100644
index 0000000..a3790ac
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysOauthClientDetails.java
@@ -0,0 +1,155 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 客户端信息
+ *
+ *
+ * @author lengleng
+ * @since 2018-05-15
+ */
+@Data
+@Schema(description = "客户端信息")
+@EqualsAndHashCode(callSuper = true)
+public class SysOauthClientDetails extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ @Schema(description = "id")
+ private Long id;
+
+ /**
+ * 客户端ID
+ */
+ @NotBlank(message = "client_id 不能为空")
+ @Schema(description = "客户端id")
+ private String clientId;
+
+ /**
+ * 客户端密钥
+ */
+ @NotBlank(message = "client_secret 不能为空")
+ @Schema(description = "客户端密钥")
+ private String clientSecret;
+
+ /**
+ * 资源ID
+ */
+ @Schema(description = "资源id列表")
+ private String resourceIds;
+
+ /**
+ * 作用域
+ */
+ @NotBlank(message = "scope 不能为空")
+ @Schema(description = "作用域")
+ private String scope;
+
+ /**
+ * 授权方式[A,B,C]
+ */
+ @Schema(description = "授权方式")
+ private String[] authorizedGrantTypes;
+
+ /**
+ * 回调地址
+ */
+ @Schema(description = "回调地址")
+ private String webServerRedirectUri;
+
+ /**
+ * 权限
+ */
+ @Schema(description = "权限列表")
+ private String authorities;
+
+ /**
+ * 请求令牌有效时间
+ */
+ @Schema(description = "请求令牌有效时间")
+ private Integer accessTokenValidity;
+
+ /**
+ * 刷新令牌有效时间
+ */
+ @Schema(description = "刷新令牌有效时间")
+ private Integer refreshTokenValidity;
+
+ /**
+ * 扩展信息
+ */
+ @Schema(description = "扩展信息")
+ private String additionalInformation;
+
+ /**
+ * 是否自动放行
+ */
+ @Schema(description = "是否自动放行")
+ private String autoapprove;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysPost.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysPost.java
new file mode 100644
index 0000000..5e87ee7
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysPost.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * 岗位信息表
+ *
+ * @author fxz
+ * @date 2022-03-26 12:50:43
+ */
+@Data
+@TableName("sys_post")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "岗位信息表")
+public class SysPost extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位ID
+ */
+ @TableId(value = "post_id", type = IdType.ASSIGN_ID)
+ @Schema(description = "岗位ID")
+ private Long postId;
+
+ /**
+ * 岗位编码
+ */
+ @NotBlank(message = "岗位编码不能为空")
+ @Schema(description = "岗位编码")
+ private String postCode;
+
+ /**
+ * 岗位名称
+ */
+ @NotBlank(message = "岗位名称不能为空")
+ @Schema(description = "岗位名称")
+ private String postName;
+
+ /**
+ * 岗位排序
+ */
+ @NotNull(message = "排序值不能为空")
+ @Schema(description = "岗位排序")
+ private Integer postSort;
+
+ /**
+ * 岗位描述
+ */
+ @Schema(description = "岗位描述")
+ private String remark;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 是否删除 -1:已删除 0:正常
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "是否删除 -1:已删除 0:正常")
+ private String delFlag;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @Schema(description = "更新时间")
+ @TableField(fill = FieldFill.UPDATE)
+ private LocalDateTime updateTime;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysPublicParam.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysPublicParam.java
new file mode 100644
index 0000000..1f74953
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysPublicParam.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 公共参数配置
+ *
+ * @author Lucky
+ * @date 2019-04-29
+ */
+@Data
+@Schema(description = "公共参数")
+@EqualsAndHashCode(callSuper = true)
+public class SysPublicParam extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "公共参数编号")
+ private Long publicId;
+
+ /**
+ * 公共参数名称
+ */
+ @Schema(description = "公共参数名称", required = true, example = "公共参数名称")
+ private String publicName;
+
+ /**
+ * 公共参数地址值,英文大写+下划线
+ */
+ @Schema(description = "键[英文大写+下划线]", required = true, example = "PIGX_PUBLIC_KEY")
+ private String publicKey;
+
+ /**
+ * 值
+ */
+ @Schema(description = "值", required = true, example = "999")
+ private String publicValue;
+
+ /**
+ * 状态(1有效;2无效;)
+ */
+ @Schema(description = "标识[1有效;2无效]", example = "1")
+ private String status;
+
+ /**
+ * 公共参数编码
+ */
+ @Schema(description = "编码", example = "^(PIG|PIGX)$")
+ private String validateCode;
+
+ /**
+ * 是否是系统内置
+ */
+ @Schema(description = "是否是系统内置")
+ private String systemFlag;
+
+ /**
+ * 配置类型:0-默认;1-检索;2-原文;3-报表;4-安全;5-文档;6-消息;9-其他
+ */
+ @Schema(description = "类型[1-检索;2-原文...]", example = "1")
+ private String publicType;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java
new file mode 100644
index 0000000..d319f74
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java
@@ -0,0 +1,113 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 角色表
+ *
+ *
+ * @author lengleng
+ * @since 2017-10-29
+ */
+@Data
+@Schema(description = "角色")
+@EqualsAndHashCode(callSuper = true)
+public class SysRole extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "role_id", type = IdType.ASSIGN_ID)
+ @Schema(description = "角色编号")
+ private Long roleId;
+
+ @NotBlank(message = "角色名称不能为空")
+ @Schema(description = "角色名称")
+ private String roleName;
+
+ @NotBlank(message = "角色标识不能为空")
+ @Schema(description = "角色标识")
+ private String roleCode;
+
+ @Schema(description = "角色描述")
+ private String roleDesc;
+
+ @NotNull(message = "数据权限类型不能为空")
+ @Schema(description = "数据权限类型")
+ private Integer dsType;
+
+ /**
+ * 数据权限作用范围
+ */
+ @Schema(description = "数据权限作用范围")
+ private String dsScope;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @Schema(description = "修改时间")
+ @TableField(fill = FieldFill.UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标识(0-正常,1-删除)
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+ /**
+ * 租户ID fix pigX 功能bug -> 默认角色为空报错 (字段未添加)
+ */
+ @Schema(description = "用户所属租户id")
+ private Long tenantId;
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRoleMenu.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRoleMenu.java
new file mode 100644
index 0000000..c1a5cb4
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRoleMenu.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 角色菜单表
+ *
+ *
+ * @author lengleng
+ * @since 2017-10-29
+ */
+@Data
+@Schema(description = "角色菜单")
+@EqualsAndHashCode(callSuper = true)
+public class SysRoleMenu extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 角色ID
+ */
+ @Schema(description = "角色id")
+ private Long roleId;
+
+ /**
+ * 菜单ID
+ */
+ @Schema(description = "菜单id")
+ private Long menuId;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRouteConf.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRouteConf.java
new file mode 100644
index 0000000..376486e
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRouteConf.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 路由
+ *
+ * @author lengleng
+ * @date 2018-11-06 10:17:18
+ */
+@Data
+@Schema(description = "网关路由信息")
+@EqualsAndHashCode(callSuper = true)
+public class SysRouteConf extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @JsonIgnore
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private Long id;
+
+ /**
+ * 路由ID
+ */
+ @Schema(description = "路由id")
+ private String routeId;
+
+ /**
+ * 路由名称
+ */
+ @Schema(description = "路由名称")
+ private String routeName;
+
+ /**
+ * 断言
+ */
+ @Schema(description = "断言")
+ private String predicates;
+
+ /**
+ * 过滤器
+ */
+ @Schema(description = "过滤器")
+ private String filters;
+
+ /**
+ * uri
+ */
+ @Schema(description = "请求uri")
+ private String uri;
+
+ /**
+ * 排序
+ */
+ @Schema(description = "排序值")
+ private Integer sortOrder;
+
+ @Schema(description = "元数据")
+ private String metadata;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @Schema(description = "修改时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标识(0-正常,1-删除)
+ */
+ @TableLogic
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysScheduleEntity.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysScheduleEntity.java
new file mode 100644
index 0000000..b66efcb
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysScheduleEntity.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+/**
+ * 日程
+ *
+ * @author aeizzz
+ * @date 2023-03-06 14:26:23
+ */
+@Data
+@TableName("sys_schedule")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "日程")
+public class SysScheduleEntity extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "id")
+ private Long id;
+
+ /**
+ * 标题
+ */
+ @Schema(description = "标题")
+ private String title;
+
+ /**
+ * 日程类型
+ */
+ @Schema(description = "日程类型")
+ private String type;
+
+ /**
+ * 状态
+ */
+ @Schema(description = "状态")
+ private String state;
+
+ /**
+ * 内容
+ */
+ @Schema(description = "内容")
+ private String content;
+
+ /**
+ * 时间
+ */
+ @Schema(description = "时间")
+ private LocalTime time;
+
+ /**
+ * 日期
+ */
+ @Schema(description = "日期")
+ private LocalDate date;
+
+ /**
+ * 创建人
+ */
+ @Schema(description = "创建人")
+ @TableField(fill = FieldFill.INSERT)
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 修改人
+ */
+ @Schema(description = "修改人")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @Schema(description = "更新时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @Schema(description = "删除标记")
+ @TableField(fill = FieldFill.INSERT)
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysSocialDetails.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysSocialDetails.java
new file mode 100644
index 0000000..361e590
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysSocialDetails.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.pig4cloud.pigx.common.core.sensitive.Sensitive;
+import com.pig4cloud.pigx.common.core.util.ValidGroup;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDateTime;
+
+/**
+ * 系统社交登录账号表
+ *
+ * @author lengleng
+ * @date 2018-08-16 21:30:41
+ */
+@Data
+@Schema(description = "第三方账号信息")
+@EqualsAndHashCode(callSuper = true)
+public class SysSocialDetails extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主鍵
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private Long id;
+
+ /**
+ * 类型
+ */
+ @NotBlank(message = "类型不能为空")
+ @Schema(description = "账号类型")
+ private String type;
+
+ /**
+ * 描述
+ */
+ @Schema(description = "描述")
+ private String remark;
+
+ /**
+ * appid
+ */
+ @Sensitive(prefixNoMaskLen = 4, suffixNoMaskLen = 4)
+ @NotBlank(message = "账号不能为空")
+ @Schema(description = "appId")
+ private String appId;
+
+ /**
+ * app_secret
+ */
+ @Sensitive(prefixNoMaskLen = 9, suffixNoMaskLen = 9)
+ @NotBlank(message = "密钥不能为空", groups = { ValidGroup.Insert.class })
+ @Schema(description = "app secret")
+ private String appSecret;
+
+ /**
+ * 回调地址
+ */
+ @Schema(description = "回调地址")
+ private String redirectUrl;
+
+ /**
+ * 拓展字段
+ */
+ @Schema(description = "拓展字段")
+ private String ext;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @Schema(description = "更新时间")
+ @TableField(fill = FieldFill.UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysTenant.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysTenant.java
new file mode 100644
index 0000000..72fc2fc
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysTenant.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 租户
+ *
+ * @author lengleng
+ * @date 2019-05-15 15:55:41
+ */
+@Data
+@Schema(description = "租户信息")
+@EqualsAndHashCode(callSuper = true)
+public class SysTenant extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 租户id
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "租户id")
+ @ExcelProperty("租户id")
+ private Long id;
+
+ /**
+ * 租户名称
+ */
+ @Schema(description = "租户名称")
+ @ExcelProperty("租户名称")
+ private String name;
+
+ /**
+ * 租户编号
+ */
+ @Schema(description = "租户编号")
+ @ExcelProperty("租户编号")
+ private String code;
+
+ /**
+ * 租户域名
+ */
+ @Schema(description = "租户域名")
+ @ExcelProperty("租户域名")
+ private String tenantDomain;
+
+ /**
+ * 网站名称
+ */
+ @Schema(description = "网站名称")
+ @ExcelProperty("网站名称")
+ private String websiteName;
+
+ /**
+ * logo
+ */
+ @Schema(description = "logo")
+ @ExcelProperty("logo")
+ private String logo;
+
+ /**
+ * footer
+ */
+ @Schema(description = "footer")
+ @ExcelProperty("footer")
+ private String footer;
+
+ /**
+ * 移动端二维码
+ */
+ @Schema(description = "移动端二维码")
+ @ExcelProperty("移动端二维码")
+ private String miniQr;
+
+ /**
+ * 登录页图片
+ */
+ @Schema(description = "登录页图片")
+ @ExcelProperty("登录页图片")
+ private String background;
+
+ /**
+ * 开始时间
+ */
+ @Schema(description = "开始时间")
+ @ExcelProperty("开始时间")
+ private LocalDateTime startTime;
+
+ /**
+ * 结束时间
+ */
+ @Schema(description = "结束时间")
+ @ExcelProperty("结束时间")
+ private LocalDateTime endTime;
+
+ /**
+ * 0正常 9-冻结
+ */
+ @Schema(description = "租户冻结标记,9:冻结,0:正常")
+ @ExcelProperty("租户冻结")
+ private String status;
+
+ @Schema(description = "租户菜单ID")
+ @ExcelProperty("租户菜单ID")
+ private String menuId;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ private String delFlag;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysUser.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysUser.java
new file mode 100644
index 0000000..3c61069
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysUser.java
@@ -0,0 +1,190 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.javers.core.metamodel.annotation.DiffInclude;
+import org.javers.core.metamodel.annotation.PropertyName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ *
+ * @author fxz
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SysUserPost extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户ID
+ */
+ @Schema(description = "用户id")
+ private Long userId;
+
+ /**
+ * 岗位ID
+ */
+ @Schema(description = "岗位id")
+ private Long postId;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysUserRole.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysUserRole.java
new file mode 100644
index 0000000..093c2c8
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysUserRole.java
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 用户角色表
+ *
+ *
+ * @author lengleng
+ * @since 2017-10-29
+ */
+@Data
+@Schema(description = "用户角色")
+@EqualsAndHashCode(callSuper = true)
+public class SysUserRole extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户ID
+ */
+ @Schema(description = "用户id")
+ private Long userId;
+
+ /**
+ * 角色ID
+ */
+ @Schema(description = "角色id")
+ private Long roleId;
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteAuditLogService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteAuditLogService.java
new file mode 100644
index 0000000..210a29f
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteAuditLogService.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.admin.api.entity.SysAuditLog;
+import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import java.util.List;
+
+/**
+ * @author lengleng
+ * @date 2023-02-27
+ */
+@FeignClient(contextId = "remoteAuditLogService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteAuditLogService {
+
+ /**
+ * 保存日志
+ * @param auditLogList 日志实体 列表
+ * @param from 是否内部调用
+ * @return succes、false
+ */
+ @PostMapping("/audit")
+ R saveLog(@RequestBody List auditLogList, @RequestHeader(SecurityConstants.FROM) String from);
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteClientDetailsService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteClientDetailsService.java
new file mode 100644
index 0000000..a973a0f
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteClientDetailsService.java
@@ -0,0 +1,58 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.admin.api.entity.SysOauthClientDetails;
+import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import java.util.List;
+
+/**
+ * @author lengleng
+ * @date 2020/12/05
+ */
+@FeignClient(contextId = "remoteClientDetailsService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteClientDetailsService {
+
+ /**
+ * 通过clientId 查询客户端信息
+ * @param clientId 用户名
+ * @param from 调用标志
+ * @return R
+ */
+ @GetMapping("/client/getClientDetailsById/{clientId}")
+ R getClientDetailsById(@PathVariable("clientId") String clientId,
+ @RequestHeader(SecurityConstants.FROM) String from);
+
+ /**
+ * 查询全部客户端
+ * @param from 调用标识
+ * @return R
+ */
+ @GetMapping("/client/list")
+ R> listClientDetails(@RequestHeader(SecurityConstants.FROM) String from);
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDataScopeService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDataScopeService.java
new file mode 100644
index 0000000..5c7c04c
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDataScopeService.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.admin.api.entity.SysDept;
+import com.pig4cloud.pigx.admin.api.entity.SysRole;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * @author lengleng
+ * @date 2019-09-07
+ *
+ * 远程数据权限调用接口
+ */
+@FeignClient(contextId = "remoteDataScopeService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteDataScopeService {
+
+ /**
+ * 通过角色ID 查询角色列表
+ * @param roleIdList 角色ID
+ * @return
+ */
+ @PostMapping("/role/getRoleList")
+ R> getRoleList(@RequestBody List roleIdList);
+
+ /**
+ * 获取子级部门
+ * @param deptId 部门ID
+ * @return
+ */
+ @GetMapping("/dept/getDescendantList/{deptId}")
+ R> getDescendantList(@PathVariable("deptId") Long deptId);
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDeptService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDeptService.java
new file mode 100644
index 0000000..4a5e3e5
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDeptService.java
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.admin.api.entity.SysDept;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author lengleng
+ * @date 2018/6/22
+ */
+@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteDeptService {
+
+ /**
+ * 获取所有部门接口
+ * @return R 返回结果对象,包含所有部门信息列表
+ */
+ @GetMapping("/dept/list")
+ R> getAllDept();
+
+ /**
+ * 通过部门ID获取负责人列表
+ * @param deptId 部门ID
+ * @return 负责人ID列表
+ */
+ @GetMapping("/dept/leader/{deptId}")
+ R> getAllDeptLeader(@PathVariable("deptId") Long deptId);
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDictService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDictService.java
new file mode 100644
index 0000000..6da5294
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteDictService.java
@@ -0,0 +1,29 @@
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.admin.api.entity.SysDictItem;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author lengleng
+ * @date 2020/5/12
+ *
+ * 查询参数相关
+ */
+@FeignClient(contextId = "remoteDictService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteDictService {
+
+ /**
+ * 通过字典类型查找字典
+ * @param type 字典类型
+ * @return 同类型字典
+ */
+ @GetMapping("/dict/type/{type}")
+ R> getDictByType(@PathVariable("type") String type);
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteLogService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteLogService.java
new file mode 100644
index 0000000..fc3f1a6
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteLogService.java
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ *
+ */
+
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.admin.api.dto.SysLogDTO;
+import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+/**
+ * @author lengleng
+ * @date 2018/6/28
+ */
+@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteLogService {
+
+ /**
+ * 保存日志
+ * @param sysLog 日志实体
+ * @param from 是否内部调用
+ * @return succes、false
+ */
+ @PostMapping("/log/save")
+ R saveLog(@RequestBody SysLogDTO sysLog, @RequestHeader(SecurityConstants.FROM) String from);
+
+}
diff --git a/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteParamService.java b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteParamService.java
new file mode 100644
index 0000000..6eb543f
--- /dev/null
+++ b/as-upms/as-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteParamService.java
@@ -0,0 +1,42 @@
+package com.pig4cloud.pigx.admin.api.feign;
+
+import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
+import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+/**
+ * @author lengleng
+ * @date 2020/5/12
+ *