diff --git a/das/src/main/java/com/das/common/captcha/CaptchaUtils.java b/das/src/main/java/com/das/common/captcha/CaptchaUtils.java index f629556d..b76b7321 100644 --- a/das/src/main/java/com/das/common/captcha/CaptchaUtils.java +++ b/das/src/main/java/com/das/common/captcha/CaptchaUtils.java @@ -26,7 +26,7 @@ public class CaptchaUtils { public static boolean checkVerificationCode(String uuid, String codeAnswer, AdminRedisTemplate adminRedisTemplate){ String verifyKey = AdminConstant.CAPTCHA_CODE_KEY + uuid; String answer = adminRedisTemplate.get(verifyKey); - return StrUtil.isNotEmpty(codeAnswer) && answer != null && answer.equals(codeAnswer); + return StrUtil.isNotEmpty(codeAnswer) && answer != null && answer.equalsIgnoreCase(codeAnswer); } /** diff --git a/das/src/main/java/com/das/common/config/AesProperties.java b/das/src/main/java/com/das/common/config/AesProperties.java index d7aa81a9..68791bb6 100644 --- a/das/src/main/java/com/das/common/config/AesProperties.java +++ b/das/src/main/java/com/das/common/config/AesProperties.java @@ -1,6 +1,5 @@ package com.das.common.config; -import lombok.Data; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/das/src/main/java/com/das/common/config/SaTokenProperties.java b/das/src/main/java/com/das/common/config/SaTokenProperties.java index d687ef60..d1acfe56 100644 --- a/das/src/main/java/com/das/common/config/SaTokenProperties.java +++ b/das/src/main/java/com/das/common/config/SaTokenProperties.java @@ -15,7 +15,10 @@ import org.springframework.stereotype.Component; @Setter @ConfigurationProperties(prefix = "sa-token") public class SaTokenProperties { - + /** + * 是否开启Sa-Token全局拦截器,默认为true + */ + private boolean enabled=true; /** * token 请求头 */ diff --git a/das/src/main/java/com/das/common/config/SysAuthorityIds.java b/das/src/main/java/com/das/common/config/SysAuthorityIds.java new file mode 100644 index 00000000..d601a385 --- /dev/null +++ b/das/src/main/java/com/das/common/config/SysAuthorityIds.java @@ -0,0 +1,19 @@ +package com.das.common.config; + +/** + * 系统权限ID定义列表 + */ +public class SysAuthorityIds { + /** + * 系统管理权限 + */ + public static final Long SYS_AUTHORITY_ID_ADMIN = 101L; + /** + * 设备台账维护权限 + */ + public static final Long SYS_AUTHORITY_ID_DEVICE_MGR = 102L; + /** + * 设备台账浏览权限 + */ + public static final Long SYS_AUTHORITY_ID_DEVICE_VIEW = 103L; +} diff --git a/das/src/main/java/com/das/common/config/mybatis/MybatisPlusConfig.java b/das/src/main/java/com/das/common/config/mybatis/MybatisPlusConfig.java index edd4089a..03522d8a 100644 --- a/das/src/main/java/com/das/common/config/mybatis/MybatisPlusConfig.java +++ b/das/src/main/java/com/das/common/config/mybatis/MybatisPlusConfig.java @@ -32,6 +32,11 @@ public class MybatisPlusConfig { return interceptor; } + @Bean + public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { + return new OptimisticLockerInnerInterceptor(); + } + /** * Id 生成器--> * 特殊的一些类使用 diff --git a/das/src/main/java/com/das/common/config/redis/RedisConfig.java b/das/src/main/java/com/das/common/config/redis/RedisConfig.java index ad1cce5b..0d6b7abc 100644 --- a/das/src/main/java/com/das/common/config/redis/RedisConfig.java +++ b/das/src/main/java/com/das/common/config/redis/RedisConfig.java @@ -26,12 +26,6 @@ public class RedisConfig { // 使用Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); -// FastJson2RedisSerializer fastJsonRedisSerializer = new FastJson2RedisSerializer<>(Object.class); -// GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); - -// ObjectMapper objectMapper = new ObjectMapper(); -// objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); -// jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置key和value的序列化规则 redisTemplate.setKeySerializer(new StringRedisSerializer()); diff --git a/das/src/main/java/com/das/common/constant/BaseEntity.java b/das/src/main/java/com/das/common/constant/BaseEntity.java index 41181930..ca100584 100644 --- a/das/src/main/java/com/das/common/constant/BaseEntity.java +++ b/das/src/main/java/com/das/common/constant/BaseEntity.java @@ -1,8 +1,6 @@ package com.das.common.constant; -import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -10,7 +8,6 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; -import java.time.LocalDateTime; import java.util.Date; /** @@ -25,7 +22,7 @@ public class BaseEntity implements Serializable { */ @JsonSerialize(using = ToStringSerializer.class) @TableField("created_by") - private Long createdBy; + private String createdBy; /** * 创建时间 @@ -40,7 +37,7 @@ public class BaseEntity implements Serializable { */ @JsonSerialize(using = ToStringSerializer.class) @TableField("updated_by") - private Long updatedBy; + private String updatedBy; /** * 更新时间 diff --git a/das/src/main/java/com/das/common/exceptions/EasyExcelException.java b/das/src/main/java/com/das/common/exceptions/EasyExcelException.java index 652b7606..362dc943 100644 --- a/das/src/main/java/com/das/common/exceptions/EasyExcelException.java +++ b/das/src/main/java/com/das/common/exceptions/EasyExcelException.java @@ -3,13 +3,16 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import java.io.Serial; + /** * @author chenhaojie * @Description */ public class EasyExcelException extends RuntimeException { - private final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); diff --git a/das/src/main/java/com/das/common/exceptions/OssException.java b/das/src/main/java/com/das/common/exceptions/OssException.java index 824159ba..b2cd76ea 100644 --- a/das/src/main/java/com/das/common/exceptions/OssException.java +++ b/das/src/main/java/com/das/common/exceptions/OssException.java @@ -4,13 +4,16 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import java.io.Serial; + /** * @author chenhaojie * @Description oss存储服务异常 */ public class OssException extends RuntimeException { - private final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); @@ -22,43 +25,43 @@ public class OssException extends RuntimeException { public OssException(String msg) { super(msg); - this.msg = msg; + this.setMsg(msg); } public OssException(IResultCode resultCode, String msg) { super(msg); - this.code = resultCode.getCode(); - this.msg = msg; + this.setCode(resultCode.getCode()); + this.setMsg(msg); } public OssException(String msg, Throwable cause) { super(msg, cause); - this.msg = msg; + this.setMsg(msg); } public OssException(IResultCode resultCode, String msg, Throwable cause) { super(msg, cause); - this.code = resultCode.getCode(); - this.msg = msg; + this.setCode(resultCode.getCode()); + this.setMsg(msg); } public OssException(Throwable cause) { super(cause); } - public int getCode() { - return code; - } - public void setCode(int code) { this.code = code; } - public String getMsg() { - return msg; - } - public void setMsg(String msg) { this.msg = msg; } + + public int getCode() { + return code; + } + + public String getMsg() { + return msg; + } } diff --git a/das/src/main/java/com/das/common/exceptions/RateLimiterException.java b/das/src/main/java/com/das/common/exceptions/RateLimiterException.java index 3ff042ef..8387ec4d 100644 --- a/das/src/main/java/com/das/common/exceptions/RateLimiterException.java +++ b/das/src/main/java/com/das/common/exceptions/RateLimiterException.java @@ -3,14 +3,19 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import lombok.Getter; + +import java.io.Serial; /** * @author chenhaojie * @Description 频率限制异常 */ +@Getter public class RateLimiterException extends RuntimeException { - private final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); @@ -46,18 +51,10 @@ public class RateLimiterException extends RuntimeException { super(cause); } - public int getCode() { - return code; - } - public void setCode(int code) { this.code = code; } - public String getMsg() { - return msg; - } - public void setMsg(String msg) { this.msg = msg; } diff --git a/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java b/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java index 8c9e366f..ea3f350b 100644 --- a/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java +++ b/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java @@ -3,14 +3,19 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import lombok.Getter; + +import java.io.Serial; /** * @author chenhaojie * @Description 频率限制异常 */ +@Getter public class RepeatSubmitException extends RuntimeException { - private final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); @@ -46,18 +51,10 @@ public class RepeatSubmitException extends RuntimeException { super(cause); } - public int getCode() { - return code; - } - public void setCode(int code) { this.code = code; } - public String getMsg() { - return msg; - } - public void setMsg(String msg) { this.msg = msg; } diff --git a/das/src/main/java/com/das/common/exceptions/ServiceException.java b/das/src/main/java/com/das/common/exceptions/ServiceException.java index 75b7e136..185172cb 100644 --- a/das/src/main/java/com/das/common/exceptions/ServiceException.java +++ b/das/src/main/java/com/das/common/exceptions/ServiceException.java @@ -4,13 +4,16 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import java.io.Serial; + /** * @author chenhaojie * @Description 自定义服务异常 */ public class ServiceException extends RuntimeException { - private final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); diff --git a/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java b/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java index 8100ef33..b8b54ea9 100644 --- a/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java +++ b/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java @@ -101,31 +101,22 @@ public class GlobalExceptionHandler { @ResponseStatus(HttpStatus.BAD_REQUEST) public R handleValidatedException(Exception exception) { BindingResult bindingResult = null; - if (exception instanceof MethodArgumentNotValidException){ - MethodArgumentNotValidException e = (MethodArgumentNotValidException) exception; + if (exception instanceof MethodArgumentNotValidException e){ bindingResult = e.getBindingResult(); if (bindingResult.hasErrors()) { -// String collect = bindingResult.getAllErrors().stream() -// .map(ObjectError::getDefaultMessage) -// .collect(Collectors.joining(";")); FieldError fieldError = bindingResult.getFieldError(); if (fieldError != null) { return R.fail(fieldError.getField()+ ":" + fieldError.getDefaultMessage()); } } - }else if (exception instanceof ConstraintViolationException){ - ConstraintViolationException e = (ConstraintViolationException) exception; + }else if (exception instanceof ConstraintViolationException e){ String collect = e.getConstraintViolations().stream() .map(ConstraintViolation::getMessage) .collect(Collectors.joining(";")); return R.fail(collect); - }else if (exception instanceof BindException){ - BindException e = (BindException) exception; + }else if (exception instanceof BindException e){ bindingResult = e.getBindingResult(); if (bindingResult.hasErrors()) { -// String collect = bindingResult.getAllErrors().stream() -// .map(ObjectError::getDefaultMessage) -// .collect(Collectors.joining(";")); FieldError fieldError = bindingResult.getFieldError(); if (fieldError != null) { return R.fail(fieldError.getField()+ ":" + fieldError.getDefaultMessage()); @@ -150,25 +141,14 @@ public class GlobalExceptionHandler { @ResponseStatus(HttpStatus.BAD_REQUEST) public R handlerNullPointException(NullPointerException exception) { String message = exception.getMessage(); - log.error("全局捕获null错误信息: {}", exception.toString(), exception); + log.error("全局捕获null错误信息: {}", exception, exception); return R.fail(message); } -// /** -// * 捕获授权异常 403 -// **/ -// @ExceptionHandler(value = AccessDeniedException.class) -// @ResponseStatus(HttpStatus.FORBIDDEN) -// public R handlerAccessDeniedException(AccessDeniedException exception) { -// String message = exception.getMessage(); -// log.error("全局捕获授权错误信息,{}", message ,exception); -// return R.fail(HttpStatus.FORBIDDEN.value(),"权限不足"); -// } - /** * 捕获 404 异常 - * @param exception - * @return + * @param exception 异常 + * @return R */ @ExceptionHandler({NoHandlerFoundException.class, HttpRequestMethodNotSupportedException.class}) @ResponseStatus(HttpStatus.NOT_FOUND) @@ -185,7 +165,7 @@ public class GlobalExceptionHandler { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public R handlerBindException(Exception exception) { String message = exception.getMessage(); - log.error("全局捕获错误信息: {}", exception.toString(), exception); + log.error("全局捕获错误信息: {}", exception, exception); return R.fail(message); } -} \ No newline at end of file +} diff --git a/das/src/main/java/com/das/common/interceptor/DecryptingOncePerRequestFilter.java b/das/src/main/java/com/das/common/interceptor/DecryptingOncePerRequestFilter.java index afff17fe..68988cad 100644 --- a/das/src/main/java/com/das/common/interceptor/DecryptingOncePerRequestFilter.java +++ b/das/src/main/java/com/das/common/interceptor/DecryptingOncePerRequestFilter.java @@ -74,16 +74,16 @@ public class DecryptingOncePerRequestFilter extends OncePerRequestFilter { private final String bodyData; private final String token; - public DecryptingHttpServletRequestWrapper(HttpServletRequest request, String bodayData, String token) { + public DecryptingHttpServletRequestWrapper(HttpServletRequest request, String bodyData, String token) { super(request); - this.bodyData = bodayData; + this.bodyData = bodyData; this.token = token; } @Override public ServletInputStream getInputStream() throws IOException { - final ByteArrayInputStream bais = new ByteArrayInputStream(bodyData.getBytes("UTF-8")); + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bodyData.getBytes(StandardCharsets.UTF_8)); return new ServletInputStream() { @Override public boolean isFinished() { @@ -102,7 +102,7 @@ public class DecryptingOncePerRequestFilter extends OncePerRequestFilter { @Override public int read() throws IOException { - return bais.read(); + return byteArrayInputStream.read(); } }; } diff --git a/das/src/main/java/com/das/common/log/RequestIdUtils.java b/das/src/main/java/com/das/common/log/RequestIdUtils.java index 000b4869..1f098d1f 100644 --- a/das/src/main/java/com/das/common/log/RequestIdUtils.java +++ b/das/src/main/java/com/das/common/log/RequestIdUtils.java @@ -22,7 +22,7 @@ public class RequestIdUtils { } public static UUID getRequestId() { - return (UUID)requestIdHolder.get(); + return requestIdHolder.get(); } public static void removeRequestId() { diff --git a/das/src/main/java/com/das/common/result/R.java b/das/src/main/java/com/das/common/result/R.java index 3d96ba45..8df742e8 100644 --- a/das/src/main/java/com/das/common/result/R.java +++ b/das/src/main/java/com/das/common/result/R.java @@ -2,6 +2,7 @@ package com.das.common.result; import org.springframework.lang.Nullable; +import java.io.Serial; import java.io.Serializable; import java.util.Optional; @@ -11,6 +12,7 @@ import java.util.Optional; */ public class R implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** @@ -57,7 +59,7 @@ public class R implements Serializable { } public static boolean isSuccess(@Nullable R result) { - return (Boolean) Optional.ofNullable(result).map((x) -> { + return Optional.ofNullable(result).map((x) -> { return ResultCode.SUCCESS.code == x.code; }).orElse(Boolean.FALSE); } @@ -103,7 +105,7 @@ public class R implements Serializable { } public static R fail(int code, String msg) { - return new R(code, (Object)null, msg); + return new R(code, null, msg); } public static R fail(IResultCode resultCode) { diff --git a/das/src/main/java/com/das/common/result/ResultCode.java b/das/src/main/java/com/das/common/result/ResultCode.java index da66e5cd..eaea364c 100644 --- a/das/src/main/java/com/das/common/result/ResultCode.java +++ b/das/src/main/java/com/das/common/result/ResultCode.java @@ -36,7 +36,7 @@ public enum ResultCode implements IResultCode { return this.message; } - private ResultCode(final int code, final String message) { + ResultCode(final int code, final String message) { this.code = code; this.message = message; } diff --git a/das/src/main/java/com/das/common/utils/AESUtil.java b/das/src/main/java/com/das/common/utils/AESUtil.java index a27520f3..8553ac58 100644 --- a/das/src/main/java/com/das/common/utils/AESUtil.java +++ b/das/src/main/java/com/das/common/utils/AESUtil.java @@ -1,14 +1,11 @@ package com.das.common.utils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - import cn.hutool.core.codec.Base64; import cn.hutool.crypto.Mode; import cn.hutool.crypto.Padding; import cn.hutool.crypto.symmetric.AES; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * @author xxx @@ -22,10 +19,10 @@ public class AESUtil { * @param content 待加密的内容 * @return 加密后的Base64字符串 */ -// public String encrypt(String content, String iv) { -// AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes()); -// return Base64.encode(aes.encrypt(content, Charset.forName("UTF-8"))); -// } + public static String encrypt(String key,String content, String iv) { + AES aes = new AES(Mode.CBC, Padding.ZeroPadding, key.getBytes(), iv.getBytes()); + return Base64.encode(aes.encrypt(content, StandardCharsets.UTF_8)); + } /** * AES解密 @@ -34,6 +31,6 @@ public class AESUtil { */ public static String decrypt(String key, String encryptStr, String iv) { AES aes = new AES(Mode.CBC, Padding.ZeroPadding, key.getBytes(), iv.getBytes()); - return aes.decryptStr(Base64.decode(encryptStr), Charset.forName("UTF-8")); + return aes.decryptStr(Base64.decode(encryptStr), StandardCharsets.UTF_8); } } diff --git a/das/src/main/java/com/das/common/utils/AdminRedisTemplate.java b/das/src/main/java/com/das/common/utils/AdminRedisTemplate.java index 3f94bd82..140e8c2e 100644 --- a/das/src/main/java/com/das/common/utils/AdminRedisTemplate.java +++ b/das/src/main/java/com/das/common/utils/AdminRedisTemplate.java @@ -93,7 +93,7 @@ public class AdminRedisTemplate { * @return */ public String randomKey() { - return (String) redisTemplate.randomKey(); + return redisTemplate.randomKey(); } /** @@ -189,7 +189,7 @@ public class AdminRedisTemplate { * @return value存储类型 */ public String type(String key) { - return redisTemplate.type(key).code(); + return Objects.requireNonNull(redisTemplate.type(key)).code(); } /** @@ -682,7 +682,7 @@ public class AdminRedisTemplate { * @return 判断 member 元素是否是集合 key 的成员 */ public boolean sIsMember(String key, Object member) { - return setOps.isMember(key, member); + return Boolean.TRUE.equals(setOps.isMember(key, member)); } /** @@ -725,7 +725,7 @@ public class AdminRedisTemplate { * @return 返回集合中多个随机数 */ public List sRandMember(String key, int count) { - return setOps.randomMembers(key, (long) count); + return setOps.randomMembers(key, count); } /** @@ -952,4 +952,4 @@ public class AdminRedisTemplate { public ZSetOperations getZSetOps() { return zSetOps; } -} \ No newline at end of file +} diff --git a/das/src/main/java/com/das/common/utils/PageDataInfo.java b/das/src/main/java/com/das/common/utils/PageDataInfo.java index 3a178169..86d76267 100644 --- a/das/src/main/java/com/das/common/utils/PageDataInfo.java +++ b/das/src/main/java/com/das/common/utils/PageDataInfo.java @@ -4,6 +4,7 @@ import cn.hutool.http.HttpStatus; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.util.List; @@ -15,6 +16,7 @@ import java.util.List; @NoArgsConstructor public class PageDataInfo implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/das/src/main/java/com/das/common/utils/PageQuery.java b/das/src/main/java/com/das/common/utils/PageQuery.java index 8baac386..6e0b22d1 100644 --- a/das/src/main/java/com/das/common/utils/PageQuery.java +++ b/das/src/main/java/com/das/common/utils/PageQuery.java @@ -9,6 +9,7 @@ import com.das.common.utils.SqlUtil; import com.das.common.utils.StringUtils; import lombok.Data; +import java.io.Serial; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -20,6 +21,7 @@ import java.util.List; @Data public class PageQuery implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/das/src/main/java/com/das/common/utils/SnowFlakeGenerator.java b/das/src/main/java/com/das/common/utils/SnowFlakeGenerator.java index e7050400..d307c4d6 100644 --- a/das/src/main/java/com/das/common/utils/SnowFlakeGenerator.java +++ b/das/src/main/java/com/das/common/utils/SnowFlakeGenerator.java @@ -1,14 +1,14 @@ package com.das.common.utils; public class SnowFlakeGenerator { - private static long datacenterId = 0L; + private static final long datacenterId = 0L; private static final long DATACENTER_ID_BITS = 6L; private static final long MAX_DATACENTER_ID = 63L; - private static long sequenceBits = 12L; + private static final long sequenceBits = 12L; private static final long SEQUENCE_MAX; private static final long TWEPOCH = 1440000000000L; - private long datacenterIdShift; - private long timestampLeftShift; + private final long datacenterIdShift; + private final long timestampLeftShift; private volatile long lastTimestamp; private volatile long sequence; diff --git a/das/src/main/java/com/das/common/utils/SpringUtil.java b/das/src/main/java/com/das/common/utils/SpringUtil.java index f4029f42..cf89eef6 100644 --- a/das/src/main/java/com/das/common/utils/SpringUtil.java +++ b/das/src/main/java/com/das/common/utils/SpringUtil.java @@ -60,7 +60,7 @@ public class SpringUtil implements BeanFactoryPostProcessor, ApplicationContextA public static ListableBeanFactory getBeanFactory() { return null == beanFactory ? applicationContext : beanFactory; } - + /** * 通过name获取 Bean @@ -180,9 +180,8 @@ public class SpringUtil implements BeanFactoryPostProcessor, ApplicationContextA public static void registerBean(String beanName, T bean) { if(null != beanFactory){ beanFactory.registerSingleton(beanName, bean); - } else if(applicationContext instanceof ConfigurableApplicationContext){ - ConfigurableApplicationContext context = (ConfigurableApplicationContext) applicationContext; - context.getBeanFactory().registerSingleton(beanName, bean); + } else if(applicationContext instanceof ConfigurableApplicationContext context){ + context.getBeanFactory().registerSingleton(beanName, bean); } } -} \ No newline at end of file +} diff --git a/das/src/main/java/com/das/common/utils/StringUtils.java b/das/src/main/java/com/das/common/utils/StringUtils.java index c7653531..44d40d9a 100644 --- a/das/src/main/java/com/das/common/utils/StringUtils.java +++ b/das/src/main/java/com/das/common/utils/StringUtils.java @@ -105,7 +105,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @param link 链接 * @return 结果 */ - public static boolean ishttp(String link) { + public static boolean isHttp(String link) { return Validator.isUrl(link); } @@ -116,8 +116,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @param sep 分隔符 * @return set集合 */ - public static Set str2Set(String str, String sep) { - return new HashSet<>(str2List(str, sep, true, false)); + public static Set strToSet(String str, String sep) { + return new HashSet<>(strToList(str, sep, true, false)); } /** @@ -129,7 +129,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @param trim 去掉首尾空白 * @return list集合 */ - public static List str2List(String str, String sep, boolean filterBlank, boolean trim) { + public static List strToList(String str, String sep, boolean filterBlank, boolean trim) { List list = new ArrayList<>(); if (isEmpty(str)) { return list; @@ -239,8 +239,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @param size 字符串指定长度 * @return 返回数字的字符串格式,该字符串为指定长度。 */ - public static String padl(final Number num, final int size) { - return padl(num.toString(), size, '0'); + public static String padLeft(final Number num, final int size) { + return padLeft(num.toString(), size, '0'); } /** @@ -251,22 +251,18 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @param c 用于补齐的字符 * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 */ - public static String padl(final String s, final int size, final char c) { + public static String padLeft(final String s, final int size, final char c) { final StringBuilder sb = new StringBuilder(size); if (s != null) { final int len = s.length(); if (s.length() <= size) { - for (int i = size - len; i > 0; i--) { - sb.append(c); - } + sb.append(String.valueOf(c).repeat(size - len)); sb.append(s); } else { return s.substring(len - size, len); } } else { - for (int i = size; i > 0; i--) { - sb.append(c); - } + sb.append(String.valueOf(c).repeat(Math.max(0, size))); } return sb.toString(); } diff --git a/das/src/main/java/com/das/modules/auth/controller/SysAuthorityController.java b/das/src/main/java/com/das/modules/auth/controller/SysAuthorityController.java new file mode 100644 index 00000000..55b2769e --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/controller/SysAuthorityController.java @@ -0,0 +1,30 @@ +package com.das.modules.auth.controller; + +import com.das.common.result.R; +import com.das.modules.auth.service.SysAuthorityService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author chenhaojie + * @Description 角色控制层 + */ +@Slf4j +@RequestMapping("/api/authority") +@RestController +public class SysAuthorityController { + @Autowired + private SysAuthorityService sysAuthorityService; + + /** + * 获取所有权限 + * @return 结果提示信息 + */ + @PostMapping("/query") + public R queryAllAuthority() { + return R.success(sysAuthorityService.queryAll()); + } +} diff --git a/das/src/main/java/com/das/modules/auth/controller/MenusController.java b/das/src/main/java/com/das/modules/auth/controller/SysMenusController.java similarity index 78% rename from das/src/main/java/com/das/modules/auth/controller/MenusController.java rename to das/src/main/java/com/das/modules/auth/controller/SysMenusController.java index 8568ea28..cbe2ed49 100644 --- a/das/src/main/java/com/das/modules/auth/controller/MenusController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysMenusController.java @@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j @RequestMapping("/api/menus") @RestController -public class MenusController { +public class SysMenusController { @Autowired private SysMenuService sysMenuService; @@ -59,4 +59,24 @@ public class MenusController { public PageDataInfo queryMenuList(@RequestBody SysMenuQueryDto categoryBo, PageQuery pageQuery) { return sysMenuService.queryMenuList(categoryBo, pageQuery); } + + + /** + * 获取所有的菜单 + * @return 返回菜单树 + */ + @PostMapping("/list") + public R queryAllMenuList(@RequestBody SysMenuQueryDto sysMenuQueryDto) { + return R.success(sysMenuService.queryAllMenuList(sysMenuQueryDto)); + } + + + /** + * 获取绑定的菜单列表 + * @return 返回菜单列表 + */ + @PostMapping("/tree") + public R createTree() { + return R.success(sysMenuService.createTree()); + } } diff --git a/das/src/main/java/com/das/modules/auth/controller/OrgController.java b/das/src/main/java/com/das/modules/auth/controller/SysOrgController.java similarity index 84% rename from das/src/main/java/com/das/modules/auth/controller/OrgController.java rename to das/src/main/java/com/das/modules/auth/controller/SysOrgController.java index 9cfeac60..e3fafee0 100644 --- a/das/src/main/java/com/das/modules/auth/controller/OrgController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysOrgController.java @@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * @author chenhaojie * @Description 用户控制层 @@ -20,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j @RequestMapping("/api/org") @RestController -public class OrgController { +public class SysOrgController { @Autowired private SysOrgService sysOrgService; @@ -57,4 +59,13 @@ public class OrgController { public PageDataInfo queryOrgList(@RequestBody SysOrgQueryDto sysOrgQueryDto, PageQuery pageQuery) { return sysOrgService.queryOrgList(sysOrgQueryDto, pageQuery); } + + /** + * 构建机构树结构 + * @return 返回机构树 + */ + @PostMapping("/list") + public R queryAllOrgTree(@RequestBody SysOrgQueryDto sysOrgQueryDto) { + return R.success(sysOrgService.queryAllOrgTree(sysOrgQueryDto)); + } } diff --git a/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java b/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java new file mode 100644 index 00000000..64d12ef0 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java @@ -0,0 +1,70 @@ +package com.das.modules.auth.controller; + +import com.das.common.result.R; +import com.das.common.utils.PageDataInfo; +import com.das.common.utils.PageQuery; +import com.das.modules.auth.domain.dto.*; +import com.das.modules.auth.domain.vo.SysRoleVo; +import com.das.modules.auth.entity.SysRole; +import com.das.modules.auth.service.SysRoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author chenhaojie + * @Description 角色控制层 + */ +@Slf4j +@RequestMapping("/api/role") +@RestController +public class SysRoleController { + @Autowired + private SysRoleService sysRoleService; + + + /** + * 新增菜单接口 + * @return 结果提示信息 + */ + @PostMapping("/add") + public R createRole(@RequestBody SysRoleDto sysRoleDto) { + return R.success(sysRoleService.createRole(sysRoleDto)); + } + + /** + * 修改菜单接口 + * @return 结果提示信息 + */ + @PostMapping("/update") + public R updateRole(@RequestBody SysRoleDto sysRoleDto) { + return R.success(sysRoleService.updateRole(sysRoleDto)); + } + + /** + * 删除菜单接口 + * @return 结果提示信息 + */ + @PostMapping("/delete") + public R deleteRole(@RequestBody DeleteDto deleteDto) { + sysRoleService.deleteRole(deleteDto); + return R.success(); + } + + @PostMapping("/query") + public PageDataInfo queryRoleList(@RequestBody SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery) { + return sysRoleService.queryRoleList(sysRoleQueryDto, pageQuery); + } + + @PostMapping("/queryAuthorityById") + public R queryAuthorityById(@RequestBody SysRoleQueryDto sysRoleQueryDto) { + return R.success(sysRoleService.queryAuthorityById(sysRoleQueryDto)); + } + + + + +} diff --git a/das/src/main/java/com/das/modules/auth/controller/UserController.java b/das/src/main/java/com/das/modules/auth/controller/SysUserController.java similarity index 98% rename from das/src/main/java/com/das/modules/auth/controller/UserController.java rename to das/src/main/java/com/das/modules/auth/controller/SysUserController.java index 1139f458..0d4f25e3 100644 --- a/das/src/main/java/com/das/modules/auth/controller/UserController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysUserController.java @@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j @RequestMapping("/api/user") @RestController -public class UserController { +public class SysUserController { @Autowired private SysUserService sysUserService; diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysAuthorityDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysAuthorityDto.java new file mode 100644 index 00000000..c98b47da --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysAuthorityDto.java @@ -0,0 +1,26 @@ +package com.das.modules.auth.domain.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class SysAuthorityDto implements Serializable { + /** 机构id */ + private Long id ; + /** 权限编码 */ + private String authorityCode; + /** 权限名称 */ + private String authorityName; + /** 乐观锁 */ + private Integer revision ; + /** 创建人 */ + private String createdBy ; + /** 创建时间 */ + private Date createdTime ; + /** 更新人 */ + private String updatedBy ; + /** 更新时间 */ + private Date updatedTime ; + } diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java index 8e2a4c78..90d320cb 100644 --- a/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java @@ -8,6 +8,12 @@ import java.io.Serializable; public class SysMenuQueryDto implements Serializable { /** 菜单ID */ private Long id ; + + /** 菜单名称 */ + private String menuName ; /** 上级菜单ID */ private Long parentMenuId ; + + /** 是否是首次查询菜单 */ + private Boolean recursive; } diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgDto.java index 68f5765b..95921935 100644 --- a/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgDto.java +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgDto.java @@ -25,6 +25,9 @@ public class SysOrgDto implements Serializable { private String contactPhone ; /** 备注 */ private String remarks ; + /** 机构简称 */ + private String aliasName; + /** 上级组织机构id */ private Long parentOrgId ; /** 乐观锁 */ private Integer revision ; diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgQueryDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgQueryDto.java index beafa022..f20431b1 100644 --- a/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgQueryDto.java +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysOrgQueryDto.java @@ -14,5 +14,7 @@ public class SysOrgQueryDto implements Serializable { private String city ; /** 区县 */ private String county ; - private Long parentOrgID ; + private Long parentOrgId ; + /** 是否是首次查询机构 */ + private Boolean recursive; } diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysRoleDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysRoleDto.java new file mode 100644 index 00000000..134494a6 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysRoleDto.java @@ -0,0 +1,19 @@ +package com.das.modules.auth.domain.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +public class SysRoleDto implements Serializable { + /** 主键id */ + private Long id ; + /** 角色名称 */ + private String roleName ; + /** 角色编码 */ + private String roleCode ; + /** 权限id集合 */ + private List authList; + } diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysRoleQueryDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysRoleQueryDto.java new file mode 100644 index 00000000..f673f17f --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysRoleQueryDto.java @@ -0,0 +1,13 @@ +package com.das.modules.auth.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SysRoleQueryDto implements Serializable { + /** 角色名称 */ + private String roleName ; + + private String roleId ; +} diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysUserQueryDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysUserQueryDto.java index c67427c3..f148724b 100644 --- a/das/src/main/java/com/das/modules/auth/domain/dto/SysUserQueryDto.java +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysUserQueryDto.java @@ -8,8 +8,6 @@ import java.io.Serializable; public class SysUserQueryDto implements Serializable { /** 职员名称 */ private String userName ; - /** 手机号 */ - private String phone ; /** 组织机构id */ private Long orgId ; } diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/LoginUserDetailsVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/LoginUserDetailsVo.java index 533b5c4a..3e08aa21 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/LoginUserDetailsVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/LoginUserDetailsVo.java @@ -2,6 +2,7 @@ package com.das.modules.auth.domain.vo; import lombok.Data; +import java.io.Serial; import java.io.Serializable; /** @@ -11,6 +12,7 @@ import java.io.Serializable; @Data public class LoginUserDetailsVo implements Serializable { + @Serial private static final long serialVersionUID = 1L; private SysUserVo sysUser; diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/LoginVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/LoginVo.java index 136504f9..31e34f74 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/LoginVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/LoginVo.java @@ -2,6 +2,7 @@ package com.das.modules.auth.domain.vo; import lombok.Data; +import java.io.Serial; import java.io.Serializable; /** @@ -11,6 +12,7 @@ import java.io.Serializable; @Data public class LoginVo implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java new file mode 100644 index 00000000..40d4042a --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java @@ -0,0 +1,156 @@ +package com.das.modules.auth.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +public class SysMenuVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** 菜单ID */ + private Long id ; + /** 菜单名称 */ + private String menuName ; + /** 菜单排列顺序 */ + private Integer menuOrder ; + /** 菜单图标名称 */ + private String menuIcon ; + /** 菜单操作类型 */ + private Integer funType ; + /** 菜单操作参数 */ + private String funParam ; + /** 权限ID */ + private Long authorityId ; + /** 上级菜单ID */ + private Long parentMenuId ; + /** 乐观锁 */ + private Integer revision ; + /** 创建人 */ + private String createdBy ; + /** 创建时间 */ + private Date createdTime ; + /** 更新人 */ + private String updatedBy ; + /** 更新时间 */ + private Date updatedTime ; + + private List children; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getMenuName() { + return menuName; + } + + public void setMenuName(String menuName) { + this.menuName = menuName; + } + + public Integer getMenuOrder() { + return menuOrder; + } + + public void setMenuOrder(Integer menuOrder) { + this.menuOrder = menuOrder; + } + + public String getMenuIcon() { + return menuIcon; + } + + public void setMenuIcon(String menuIcon) { + this.menuIcon = menuIcon; + } + + public Integer getFunType() { + return funType; + } + + public void setFunType(Integer funType) { + this.funType = funType; + } + + public String getFunParam() { + return funParam; + } + + public void setFunParam(String funParam) { + this.funParam = funParam; + } + + public Long getAuthorityId() { + return authorityId; + } + + public void setAuthorityId(Long authorityId) { + this.authorityId = authorityId; + } + + public Long getParentMenuId() { + return parentMenuId; + } + + public void setParentMenuId(Long parentMenuId) { + this.parentMenuId = parentMenuId; + } + + public Integer getRevision() { + return revision; + } + + public void setRevision(Integer revision) { + this.revision = revision; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Date getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(Date createdTime) { + this.createdTime = createdTime; + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public Date getUpdatedTime() { + return updatedTime; + } + + public void setUpdatedTime(Date updatedTime) { + this.updatedTime = updatedTime; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java new file mode 100644 index 00000000..179a167e --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java @@ -0,0 +1,33 @@ +package com.das.modules.auth.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 账号信息 + * + * @author guchengwei + */ +@Data +public class SysRoleAuthVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 账号ID + */ + private Long id; + + /** + * 权限编码 + */ + private String authorityCode; + + /** + * 权限名称 + */ + private String authorityName; + + +} diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleVo.java new file mode 100644 index 00000000..7f6406ac --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleVo.java @@ -0,0 +1,43 @@ +package com.das.modules.auth.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.Version; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 角色前端回显 + * + * @author guchengwei + */ +@Data +public class SysRoleVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 账号ID + */ + private Long id; + + /** + * 角色编码 + */ + private String roleCode; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 乐观锁 + */ + private Integer revision; + + private List list; + + +} diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java index 162d57af..3feb73c6 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java @@ -2,6 +2,7 @@ package com.das.modules.auth.domain.vo; import lombok.Data; +import java.io.Serial; import java.io.Serializable; /** @@ -11,6 +12,7 @@ import java.io.Serializable; */ @Data public class SysUserVo implements Serializable { + @Serial private static final long serialVersionUID = 1L; /** * 账号ID diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/TokenVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/TokenVo.java index d82cfac7..b5b42a4f 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/TokenVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/TokenVo.java @@ -2,12 +2,18 @@ package com.das.modules.auth.domain.vo; import lombok.Data; +import java.io.Serial; +import java.io.Serializable; + /** * 令牌实体 * @author Administrator */ @Data -public class TokenVo { +public class TokenVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** * 令牌 */ diff --git a/das/src/main/java/com/das/modules/auth/entity/SysAuthority.java b/das/src/main/java/com/das/modules/auth/entity/SysAuthority.java new file mode 100644 index 00000000..07582e95 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/entity/SysAuthority.java @@ -0,0 +1,57 @@ +package com.das.modules.auth.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serial; + +/** + *

+ * 权限信息 + *

+ * + * @author chenhaojie + */ +@EqualsAndHashCode(callSuper = true) +@TableName("sys_authority") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysAuthority extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 权限编码 + */ + @TableField("authority_code") + private String authorityCode; + + /** + * 权限名称 + */ + @TableField("authority_name") + private String authorityName; + + /** + * 乐观锁 + */ + @Version + @TableField("revision") + private Integer revision; + +} diff --git a/das/src/main/java/com/das/modules/auth/entity/SysMenu.java b/das/src/main/java/com/das/modules/auth/entity/SysMenu.java index 92b104f3..8ca9f09d 100644 --- a/das/src/main/java/com/das/modules/auth/entity/SysMenu.java +++ b/das/src/main/java/com/das/modules/auth/entity/SysMenu.java @@ -2,20 +2,35 @@ package com.das.modules.auth.entity; import com.baomidou.mybatisplus.annotation.*; import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import java.io.Serial; + +/** + *

+ * 菜单信息 + *

+ * + * @author chenhaojie + */ +@EqualsAndHashCode(callSuper = true) @TableName("sys_menu") @Data @NoArgsConstructor @AllArgsConstructor public class SysMenu extends BaseEntity { + @Serial private static final long serialVersionUID = 1L; /** 菜单ID */ @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id ; /** 菜单名称 */ diff --git a/das/src/main/java/com/das/modules/auth/entity/SysOrg.java b/das/src/main/java/com/das/modules/auth/entity/SysOrg.java index 5071350e..1dde561f 100644 --- a/das/src/main/java/com/das/modules/auth/entity/SysOrg.java +++ b/das/src/main/java/com/das/modules/auth/entity/SysOrg.java @@ -2,12 +2,16 @@ package com.das.modules.auth.entity; import com.baomidou.mybatisplus.annotation.*; import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; +import java.io.Serial; +import java.util.List; + /** *

@@ -16,18 +20,21 @@ import java.util.Date; * * @author chenhaojie */ +@EqualsAndHashCode(callSuper = true) @TableName("sys_org") @Data @NoArgsConstructor @AllArgsConstructor public class SysOrg extends BaseEntity { + @Serial private static final long serialVersionUID = 1L; /** * 机构ID */ @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -82,8 +89,8 @@ public class SysOrg extends BaseEntity { /** * 上级机构id */ - @TableField("parent_org_iD") - private Long parentOrgID; + @TableField("parent_org_id") + private Long parentOrgId; /** * 乐观锁 @@ -99,4 +106,10 @@ public class SysOrg extends BaseEntity { @TableField("alias_name") private String aliasName; + /** + * 子节点 + */ + @TableField(exist = false) + private List children; + } diff --git a/das/src/main/java/com/das/modules/auth/entity/SysRole.java b/das/src/main/java/com/das/modules/auth/entity/SysRole.java new file mode 100644 index 00000000..02b1a592 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/entity/SysRole.java @@ -0,0 +1,57 @@ +package com.das.modules.auth.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serial; + +/** + *

+ * 角色信息 + *

+ * + * @author chenhaojie + */ +@EqualsAndHashCode(callSuper = true) +@TableName("sys_role") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysRole extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 角色编码 + */ + @TableField("role_code") + private String roleCode; + + /** + * 角色名称 + */ + @TableField("role_name") + private String roleName; + + /** + * 乐观锁 + */ + @Version + @TableField("revision") + private Integer revision; + +} diff --git a/das/src/main/java/com/das/modules/auth/entity/SysRoleAuthority.java b/das/src/main/java/com/das/modules/auth/entity/SysRoleAuthority.java new file mode 100644 index 00000000..9612b32c --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/entity/SysRoleAuthority.java @@ -0,0 +1,57 @@ +package com.das.modules.auth.entity; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.Version; +import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * (sys_r_role_authority)实体类 + * + * @author chenhaojie + * @since 2024-06-25 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_r_role_authority") +public class SysRoleAuthority extends BaseEntity implements Serializable { + /** + * 主键 + */ + @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 权限id + */ + @TableField("authority_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long authorityId; + + /** + * 角色id + */ + @TableField("role_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long roleId; + + /** + * 乐观锁 + */ + @Version + @TableField("revision") + private Integer revision; +} diff --git a/das/src/main/java/com/das/modules/auth/entity/SysUser.java b/das/src/main/java/com/das/modules/auth/entity/SysUser.java index acc9481a..84d67db6 100644 --- a/das/src/main/java/com/das/modules/auth/entity/SysUser.java +++ b/das/src/main/java/com/das/modules/auth/entity/SysUser.java @@ -2,9 +2,12 @@ package com.das.modules.auth.entity; import com.baomidou.mybatisplus.annotation.*; import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.*; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serial; import java.util.Date; /** @@ -14,18 +17,21 @@ import java.util.Date; * * @author chenhaojie */ +@EqualsAndHashCode(callSuper = true) @TableName("sys_user") @Data @NoArgsConstructor @AllArgsConstructor public class SysUser extends BaseEntity { + @Serial private static final long serialVersionUID = 1L; /** * 用户ID */ @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysAuthorityMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysAuthorityMapper.java new file mode 100644 index 00000000..695c0cf4 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/mapper/SysAuthorityMapper.java @@ -0,0 +1,30 @@ +package com.das.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.auth.entity.SysAuthority; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +/** + *

+ * 用户信息 Mapper 接口 + *

+ * + * @author chenhaojie + */ +public interface SysAuthorityMapper extends BaseMapper { + + List selectByAuthorities(@Param("list")List list); + + void batchInsert(List list); + /** + * 判断权限是否存在 + * + * @param authId 权限ID + * @return 0 - 不存在, 1 - 存在 + */ + long existAuthority(@Param("authId") Long authId); + +} diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java index f41a19e0..2ad03d8d 100644 --- a/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java +++ b/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java @@ -3,9 +3,12 @@ package com.das.modules.auth.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.modules.auth.domain.dto.SysMenuQueryDto; +import com.das.modules.auth.domain.vo.SysMenuVo; import com.das.modules.auth.entity.SysMenu; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** *

* 菜单信息 Mapper 接口 @@ -13,7 +16,11 @@ import org.apache.ibatis.annotations.Param; * * @author chenhaojie */ -public interface SysMenuMapper extends BaseMapperPlus { +public interface SysMenuMapper extends BaseMapper { IPage queryMenuList(IPage page, @Param("sysMenu") SysMenuQueryDto sysMenuQueryDto); + + List queryAllMenuList(@Param("sysMenu") SysMenuQueryDto sysMenuQueryDto); + + SysMenuVo createTree(); } diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysOrgMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysOrgMapper.java index 3e176a0c..6e89a9bb 100644 --- a/das/src/main/java/com/das/modules/auth/mapper/SysOrgMapper.java +++ b/das/src/main/java/com/das/modules/auth/mapper/SysOrgMapper.java @@ -3,11 +3,11 @@ package com.das.modules.auth.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.modules.auth.domain.dto.SysOrgQueryDto; -import com.das.modules.auth.domain.dto.SysUserQueryDto; import com.das.modules.auth.entity.SysOrg; -import com.das.modules.auth.entity.SysUser; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** *

* 用户信息 Mapper 接口 @@ -17,4 +17,8 @@ import org.apache.ibatis.annotations.Param; */ public interface SysOrgMapper extends BaseMapper { IPage queryOrgList(IPage page, @Param("sysOrg") SysOrgQueryDto sysOrgQueryDto); + + List queryAllOrgTree(@Param("id") Long id); + + List queryAllChildOrgTree(@Param("id") Long id); } diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysRoleAuthorityMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysRoleAuthorityMapper.java new file mode 100644 index 00000000..59fa803d --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/mapper/SysRoleAuthorityMapper.java @@ -0,0 +1,19 @@ +package com.das.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.auth.entity.SysAuthority; +import com.das.modules.auth.entity.SysRoleAuthority; +import org.apache.ibatis.annotations.Param; + + +/** + *

+ * 用户信息 Mapper 接口 + *

+ * + * @author chenhaojie + */ +public interface SysRoleAuthorityMapper extends BaseMapper { + + +} diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java new file mode 100644 index 00000000..51a707b2 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java @@ -0,0 +1,36 @@ +package com.das.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.das.modules.auth.domain.dto.SysRoleQueryDto; +import com.das.modules.auth.domain.vo.SysRoleAuthVo; +import com.das.modules.auth.domain.vo.SysRoleVo; +import com.das.modules.auth.entity.SysRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 用户信息 Mapper 接口 + *

+ * + * @author chenhaojie + */ +public interface SysRoleMapper extends BaseMapper { + + /** + * 判断角色是否存在 + * + * @param roleCode 角色ID + * @return 0 - 不存在 1 - 存在 + */ + long existRoleByRoleCode(@Param("roleCode") String roleCode); + IPage queryRoleList(IPage page, @Param("sysRole") SysRoleQueryDto sysRoleQueryDto); + + List queryAuthorityById(@Param("id")Long id); + + SysRole selectByCode(@Param("roleCode") String roleCode); + + long existRoleByName(@Param("name") String name); +} diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java index a2fa2728..20aa8bfd 100644 --- a/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java +++ b/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java @@ -1,9 +1,7 @@ package com.das.modules.auth.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.das.modules.auth.domain.dto.SysMenuQueryDto; import com.das.modules.auth.domain.dto.SysUserQueryDto; -import com.das.modules.auth.entity.SysMenu; import com.das.modules.auth.entity.SysUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; diff --git a/das/src/main/java/com/das/modules/auth/service/SysAuthorityService.java b/das/src/main/java/com/das/modules/auth/service/SysAuthorityService.java new file mode 100644 index 00000000..56789d69 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/service/SysAuthorityService.java @@ -0,0 +1,11 @@ +package com.das.modules.auth.service; + +import com.das.modules.auth.domain.dto.SysAuthorityDto; +import com.das.modules.auth.entity.SysAuthority; + +import java.util.List; + + +public interface SysAuthorityService { + List queryAll(); +} diff --git a/das/src/main/java/com/das/modules/auth/service/SysMenuService.java b/das/src/main/java/com/das/modules/auth/service/SysMenuService.java index eb842c65..04a16099 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysMenuService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysMenuService.java @@ -5,15 +5,32 @@ import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysMenuDto; import com.das.modules.auth.domain.dto.SysMenuQueryDto; +import com.das.modules.auth.domain.vo.SysMenuVo; import com.das.modules.auth.entity.SysMenu; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; public interface SysMenuService { SysMenu createMenu(SysMenuDto sysMenuDto); - int updateMenu(SysMenuDto sysMenuDto); + void updateMenu(SysMenuDto sysMenuDto); - int deleteMenu(DeleteDto deleteDto); + void deleteMenu(DeleteDto deleteDto); PageDataInfo queryMenuList(SysMenuQueryDto sysMenuQueryDto, PageQuery pageQuery); + + /** + * 查询菜单列表 + * @param sysMenuQueryDto 查询条件 + * @return 返回查询列表 按菜单顺序排序 + */ + List queryAllMenuList(SysMenuQueryDto sysMenuQueryDto); + + /** + * 构建菜单树结构 + * @return 返回菜单树 + */ + SysMenuVo createTree(); } diff --git a/das/src/main/java/com/das/modules/auth/service/SysOrgService.java b/das/src/main/java/com/das/modules/auth/service/SysOrgService.java index 10b7f763..0b3edb36 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysOrgService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysOrgService.java @@ -5,12 +5,17 @@ import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.*; import com.das.modules.auth.entity.SysOrg; +import java.util.List; + public interface SysOrgService { SysOrg createOrg(SysOrgDto sysUserDto); - int updateOrg(SysOrgDto sysUserDto); + void updateOrg(SysOrgDto sysUserDto); - int deleteOrg(DeleteDto deleteDto); + void deleteOrg(DeleteDto deleteDto); PageDataInfo queryOrgList(SysOrgQueryDto sysOrgQueryDto, PageQuery pageQuery); + + + List queryAllOrgTree(SysOrgQueryDto sysOrgQueryDto); } diff --git a/das/src/main/java/com/das/modules/auth/service/SysRoleService.java b/das/src/main/java/com/das/modules/auth/service/SysRoleService.java new file mode 100644 index 00000000..c33b4c80 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/service/SysRoleService.java @@ -0,0 +1,22 @@ +package com.das.modules.auth.service; + +import com.das.common.utils.PageDataInfo; +import com.das.common.utils.PageQuery; +import com.das.modules.auth.domain.dto.*; +import com.das.modules.auth.domain.vo.SysRoleAuthVo; +import com.das.modules.auth.domain.vo.SysRoleVo; +import com.das.modules.auth.entity.SysRole; + +import java.util.List; + +public interface SysRoleService { + SysRoleDto createRole(SysRoleDto sysRoleDto); + + SysRoleDto updateRole(SysRoleDto sysRoleDto); + + void deleteRole(DeleteDto deleteDto); + + PageDataInfo queryRoleList(SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery); + + List queryAuthorityById(SysRoleQueryDto sysRoleQueryDto); +} diff --git a/das/src/main/java/com/das/modules/auth/service/SysUserService.java b/das/src/main/java/com/das/modules/auth/service/SysUserService.java index 91ec5a93..f2498b33 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysUserService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysUserService.java @@ -10,9 +10,9 @@ import com.das.modules.auth.entity.SysUser; public interface SysUserService { SysUser createUser(SysUserDto sysUserDto); - int updateUser(SysUserDto sysUserDto); + void updateUser(SysUserDto sysUserDto); - int deleteUser(DeleteDto deleteDto); + void deleteUser(DeleteDto deleteDto); PageDataInfo queryUserList(SysUserQueryDto sysUserQueryDto, PageQuery pageQuery); } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java index fc499d2c..b4717b6c 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java @@ -16,7 +16,6 @@ import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.entity.SysUser; import com.das.modules.auth.mapper.SysUserMapper; import com.das.modules.auth.service.LoginService; -import com.fasterxml.jackson.core.JsonProcessingException; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -79,7 +78,6 @@ public class LoginServiceImpl implements LoginService { loginInfo.setSysUser(sysUserVo); // 存储用户信息到会话 loginInfo.setToken(token); loginInfo.setRefreshToken(refreshTokenUuid); - adminRedisTemplate.setEx(token, loginInfo, Duration.ofSeconds(saTokenProperties.getExpireTime())); adminRedisTemplate.setEx(refreshToken, loginInfo, Duration.ofSeconds(saTokenProperties.getRefreshExpireTime())); return loginInfo; } @@ -102,7 +100,7 @@ public class LoginServiceImpl implements LoginService { return loginInfo; } StpUtil.login(loginUserDetailsVo.getSysUser().getAccount());// 执行登录,这里username为用户唯一标识 - String newToken = StpUtil.getTokenValue().replace("-", "");; + String newToken = StpUtil.getTokenValue().replace("-", ""); String newRefreshTokenUuid = IdUtil.fastSimpleUUID(); String newRefreshToken = "refresh:" + newRefreshTokenUuid; loginInfo.setAccessToken(newToken); @@ -111,7 +109,6 @@ public class LoginServiceImpl implements LoginService { loginUserDetailsVo.setRefreshToken(newRefreshTokenUuid); String oldRefreshToken = loginUserDetailsVo.getRefreshToken(); - adminRedisTemplate.setEx(newToken, loginUserDetailsVo, Duration.ofSeconds(saTokenProperties.getExpireTime())); adminRedisTemplate.setEx(newRefreshToken, loginUserDetailsVo, Duration.ofSeconds(saTokenProperties.getRefreshExpireTime())); // 删除原有刷新token adminRedisTemplate.del("refresh:" + oldRefreshToken); diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java new file mode 100644 index 00000000..e3d37dc4 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java @@ -0,0 +1,76 @@ +package com.das.modules.auth.service.impl; + + +import com.das.common.config.SysAuthorityIds; +import com.das.common.utils.BeanCopyUtils; +import com.das.common.utils.SequenceUtils; +import com.das.modules.auth.domain.dto.SysAuthorityDto; +import com.das.modules.auth.entity.SysAuthority; +import com.das.modules.auth.mapper.SysAuthorityMapper; +import com.das.modules.auth.service.SysAuthorityService; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +@Slf4j +@Service +public class SysAuthorityServiceImpl implements SysAuthorityService { + @Autowired + SysAuthorityMapper sysAuthorityMapper; + + /** + * 初始化系统权限 + */ + @PostConstruct + public void init() { + List list = new ArrayList<>(); + list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN,"systemMgr","系统管理权限",1)); + list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR,"equipmentLedgerManagement","设备台账维护权限",1)); + list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_VIEW,"equipmentLedgerView","设备台账浏览权限",1)); + + try { + // 性能优化:先查询所有需要的权限是否存在,减少数据库访问次数 + List existingAuthorities = sysAuthorityMapper.selectByAuthorities(list); + + // 过滤出需要插入的权限 + list.removeAll(existingAuthorities); + + // 批量插入不存在的权限 + if (!list.isEmpty()) { + sysAuthorityMapper.batchInsert(list); + } + } catch (Exception e) { + // 异常处理:记录日志或执行其他恢复策略 + log.error(e.getMessage(), e); // 实际应用中应使用日志框架如Log4j记录错误信息 + } + } + + /** + * 返回全部权限列表 + * 注意:此方法封装了对空结果的处理和基础的异常处理逻辑。 + * @return 权限列表,如果没有找到任何权限,则返回一个空列表 + */ + @Override + public List queryAll() { + try { + List authorities = sysAuthorityMapper.selectList(null); + // 检查返回的结果是否为空,如果为空则返回一个空的列表 + if (authorities == null || authorities.isEmpty()) { + return Collections.emptyList(); + } + return authorities; + } catch (Exception e) { + // 处理可能的异常,例如数据库查询异常等 + // 根据你的项目实践,这里可以记录日志、抛出自定义异常或者进行其他处理 + // 以下是一个简单的示例,打印异常信息并返回空列表 + log.error("查询权限列表时发生异常:" + e.getMessage()); + return Collections.emptyList(); + } + } +} diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java index 6a9b5517..2139ea50 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java @@ -1,5 +1,6 @@ package com.das.modules.auth.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.common.utils.BeanCopyUtils; import com.das.common.utils.SequenceUtils; @@ -8,12 +9,17 @@ import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysMenuDto; import com.das.modules.auth.domain.dto.SysMenuQueryDto; +import com.das.modules.auth.domain.vo.SysMenuVo; import com.das.modules.auth.entity.SysMenu; import com.das.modules.auth.mapper.SysMenuMapper; import com.das.modules.auth.service.SysMenuService; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; @Service public class SysMenuServiceImpl implements SysMenuService { @@ -25,20 +31,24 @@ public class SysMenuServiceImpl implements SysMenuService { SysMenu sysMenu = new SysMenu(); BeanCopyUtils.copy(sysMenuDto,sysMenu); sysMenu.setId(SequenceUtils.generateId()); + sysMenu.setRevision(1); + sysMenu.setCreatedTime(new Date()); + sysMenu.setUpdatedTime(new Date()); sysMenuMapper.insert(sysMenu); return sysMenu; } @Override - public int updateMenu(SysMenuDto sysMenuDto) { + public void updateMenu(SysMenuDto sysMenuDto) { SysMenu sysMenu = new SysMenu(); BeanCopyUtils.copy(sysMenuDto,sysMenu); - return sysMenuMapper.updateById(sysMenu); + sysMenu.setUpdatedTime(new Date()); + sysMenuMapper.updateById(sysMenu); } @Override - public int deleteMenu(DeleteDto deleteDto) { - return sysMenuMapper.deleteById(deleteDto.getId()); + public void deleteMenu(DeleteDto deleteDto) { + sysMenuMapper.deleteById(deleteDto.getId()); } @Override @@ -47,4 +57,19 @@ public class SysMenuServiceImpl implements SysMenuService { return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); } + @Override + public List queryAllMenuList(SysMenuQueryDto sysMenuQueryDto) { + if(sysMenuQueryDto.getRecursive()) { + sysMenuQueryDto.setParentMenuId(0L); + } + List list = sysMenuMapper.queryAllMenuList(sysMenuQueryDto); + return list; + } + + @Override + public SysMenuVo createTree() { + + return sysMenuMapper.createTree(); + } + } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java index 988ab5c2..eb2e0767 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java @@ -2,17 +2,22 @@ package com.das.modules.auth.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.common.utils.BeanCopyUtils; -import com.das.common.utils.SequenceUtils; import com.das.common.utils.PageDataInfo; import com.das.common.utils.PageQuery; -import com.das.modules.auth.domain.dto.*; +import com.das.common.utils.SequenceUtils; +import com.das.modules.auth.domain.dto.DeleteDto; +import com.das.modules.auth.domain.dto.SysOrgDto; +import com.das.modules.auth.domain.dto.SysOrgQueryDto; import com.das.modules.auth.entity.SysOrg; import com.das.modules.auth.mapper.SysOrgMapper; import com.das.modules.auth.service.SysOrgService; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + @Service public class SysOrgServiceImpl implements SysOrgService { @Autowired @@ -23,20 +28,23 @@ public class SysOrgServiceImpl implements SysOrgService { SysOrg sysOrg = new SysOrg(); BeanCopyUtils.copy(sysOrgDto,sysOrg); sysOrg.setId(SequenceUtils.generateId()); + sysOrg.setRevision(1); + sysOrg.setCreatedTime(new Date()); + sysOrg.setUpdatedTime(new Date()); sysOrgMapper.insert(sysOrg); return sysOrg; } @Override - public int updateOrg(SysOrgDto sysOrgDto) { + public void updateOrg(SysOrgDto sysOrgDto) { SysOrg sysOrg = new SysOrg(); BeanCopyUtils.copy(sysOrgDto,sysOrg); - return sysOrgMapper.updateById(sysOrg); + sysOrgMapper.updateById(sysOrg); } @Override - public int deleteOrg(DeleteDto deleteDto) { - return sysOrgMapper.deleteById(deleteDto.getId()); + public void deleteOrg(DeleteDto deleteDto) { + sysOrgMapper.deleteById(deleteDto.getId()); } @Override @@ -44,4 +52,16 @@ public class SysOrgServiceImpl implements SysOrgService { IPage iPage = sysOrgMapper.queryOrgList(pageQuery.build(), sysOrgQueryDto); return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); } + + public List queryAllOrgTree(SysOrgQueryDto sysOrgQueryDto) { + List rootOrgList = new ArrayList<>(); + if(sysOrgQueryDto.getRecursive()) { + rootOrgList = sysOrgMapper.queryAllOrgTree(sysOrgQueryDto.getParentOrgId()); + } else { + rootOrgList = sysOrgMapper.queryAllChildOrgTree(sysOrgQueryDto.getParentOrgId()); + } + + return rootOrgList; + } + } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java new file mode 100644 index 00000000..d56c282b --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,195 @@ +package com.das.modules.auth.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.das.common.exceptions.ServiceException; +import com.das.common.utils.BeanCopyUtils; +import com.das.common.utils.PageDataInfo; +import com.das.common.utils.PageQuery; +import com.das.common.utils.SequenceUtils; +import com.das.modules.auth.domain.dto.DeleteDto; +import com.das.modules.auth.domain.dto.SysRoleDto; +import com.das.modules.auth.domain.dto.SysRoleQueryDto; +import com.das.modules.auth.domain.vo.SysRoleAuthVo; +import com.das.modules.auth.domain.vo.SysRoleVo; +import com.das.modules.auth.entity.SysRole; +import com.das.modules.auth.entity.SysRoleAuthority; +import com.das.modules.auth.mapper.SysAuthorityMapper; +import com.das.modules.auth.mapper.SysRoleAuthorityMapper; +import com.das.modules.auth.mapper.SysRoleMapper; +import com.das.modules.auth.service.SysRoleService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class SysRoleServiceImpl implements SysRoleService { + + private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); + + @Autowired + SysAuthorityMapper sysAuthorityMapper; + + @Autowired + SysRoleAuthorityMapper sysRoleAuthorityMapper; + + @Autowired + SysRoleMapper sysRoleMapper; + + @Override + public SysRoleDto createRole(SysRoleDto sysRoleDto) { + if (sysRoleDto.getRoleName() == null || sysRoleDto.getAuthList() == null || StringUtils.isEmpty(sysRoleDto.getRoleCode())) { + throw new ServiceException("非法调用,参数缺失"); + } + //判断角色编码code是否存在 + long roleCount = sysRoleMapper.existRoleByRoleCode(sysRoleDto.getRoleCode()); + if (roleCount > 0) { + throw new ServiceException(String.format("角色 %s 已存在", sysRoleDto.getRoleCode())); + } + + SysRole sysRole = new SysRole(); + BeanCopyUtils.copy(sysRoleDto, sysRole); + sysRole.setId(SequenceUtils.generateId()); + sysRole.setRevision(1); + sysRole.setCreatedBy("测试"); + sysRole.setUpdatedBy("测试"); + sysRole.setCreatedTime(new Date()); + sysRole.setUpdatedTime(new Date()); + sysRoleMapper.insert(sysRole); + + //验证权限有效性 + String errorAuths = checkErrorAuthorities(sysRoleDto.getAuthList()); + if (StringUtils.hasText(errorAuths)) { + throw new ServiceException("权限不存在 " + errorAuths); + } + if (sysRoleDto.getAuthList() != null) { + //解锁role与auth绑定 + QueryWrapper authorityInfoQueryWrapper = new QueryWrapper<>(); + authorityInfoQueryWrapper.eq("role_id", sysRoleDto.getId()); + sysRoleAuthorityMapper.delete(authorityInfoQueryWrapper); + //绑定新权限 + for (Long authId : sysRoleDto.getAuthList()) { + SysRoleAuthority roleAuthority = new SysRoleAuthority(); + roleAuthority.setRoleId(sysRole.getId()); + roleAuthority.setAuthorityId(authId); + roleAuthority.setRevision(1); + roleAuthority.setCreatedTime(new Date()); + roleAuthority.setUpdatedTime(new Date()); + sysRoleAuthorityMapper.insert(roleAuthority); + } + } + return sysRoleDto; + } + + private String checkErrorAuthorities(List auths) { + if (auths != null && auths.size() > 0) { + List errorAuthority = new ArrayList<>(); + for (Long authId : auths) { + if (authId == null) { + continue; + } + long authCount = sysAuthorityMapper.existAuthority(authId); + if (authCount == 0) { + errorAuthority.add(authId); + } + } + if (errorAuthority.size() > 0) { + try { + return JSON_MAPPER.writeValueAsString(errorAuthority); + } catch (JsonProcessingException e) { + return null; + } + } + } + return null; + } + + @Override + public SysRoleDto updateRole(SysRoleDto sysRoleDto) { + SysRole sysRole = new SysRole(); + if (StringUtils.isEmpty(sysRoleDto.getId())) { + throw new ServiceException("参数缺失"); + } + SysRole role = sysRoleMapper.selectByCode(sysRoleDto.getRoleCode()); + if (role == null) { + throw new ServiceException(String.format("角色 %s 不存在", sysRoleDto.getRoleCode())); + } + if (StringUtils.hasText(sysRoleDto.getRoleName())) { + //若与数据库中角色名相同 则表示未对名称进行修改 + if (!role.getRoleName().equals(sysRoleDto.getRoleName())) { + //判断角色名是否存在 + long roleCount = sysRoleMapper.existRoleByName(sysRoleDto.getRoleName()); + if (roleCount > 0) { + throw new ServiceException(String.format("角色名 %s 已存在", sysRoleDto.getRoleName())); + } + } + } + + // 更新角色自身 + sysRole.setRoleName(sysRoleDto.getRoleName()); + sysRole.setRoleCode(sysRoleDto.getRoleCode()); + sysRole.setId(sysRoleDto.getId()); + this.sysRoleMapper.updateById(sysRole); + //验证权限有效性 + String errorAuths = checkErrorAuthorities(sysRoleDto.getAuthList()); + if (StringUtils.hasText(errorAuths)) { + throw new ServiceException("权限不存在 " + errorAuths); + } + if (sysRoleDto.getAuthList() != null) { + //解锁role与auth绑定 + QueryWrapper authorityInfoQueryWrapper = new QueryWrapper<>(); + authorityInfoQueryWrapper.eq("role_id", sysRoleDto.getId()); + sysRoleAuthorityMapper.delete(authorityInfoQueryWrapper); + //绑定新权限 + for (Long authId : sysRoleDto.getAuthList()) { + SysRoleAuthority roleAuthority = new SysRoleAuthority(); + roleAuthority.setRoleId(sysRole.getId()); + roleAuthority.setAuthorityId(authId); + roleAuthority.setRevision(1); + roleAuthority.setCreatedTime(new Date()); + roleAuthority.setUpdatedTime(new Date()); + sysRoleAuthorityMapper.insert(roleAuthority); + } + } + return sysRoleDto; + } + + @Override + public void deleteRole(DeleteDto deleteDto) { + SysRole sysRole = sysRoleMapper.selectById(deleteDto.getId()); + if (StringUtils.isEmpty(deleteDto.getId())) { + throw new ServiceException("参数缺失"); + } + long roleCount = sysRoleMapper.existRoleByRoleCode(sysRole.getRoleCode()); + if (roleCount == 0) { + throw new ServiceException("角色不存在"); + } + //解锁role与Account绑定 + QueryWrapper accountRoleQueryWrapper = new QueryWrapper<>(); + accountRoleQueryWrapper.eq("id", deleteDto.getId()); + this.sysRoleMapper.delete(accountRoleQueryWrapper); + //解除角色与权限绑定 + QueryWrapper authorityInfoQueryWrapper = new QueryWrapper<>(); + authorityInfoQueryWrapper.eq("role_id", deleteDto.getId()); + sysRoleAuthorityMapper.delete(authorityInfoQueryWrapper); + //删除角色 + sysRoleMapper.deleteById(deleteDto.getId()); + } + + @Override + public PageDataInfo queryRoleList(SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery) { + IPage iPage = sysRoleMapper.queryRoleList(pageQuery.build(), sysRoleQueryDto); + return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); + } + + @Override + public List queryAuthorityById(SysRoleQueryDto sysRoleQueryDto) { + return sysRoleMapper.queryAuthorityById(Long.valueOf(sysRoleQueryDto.getRoleId())); + } +} diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java index 6a707cf3..169b0869 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java @@ -1,5 +1,6 @@ package com.das.modules.auth.service.impl; +import cn.dev33.satoken.secure.BCrypt; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.common.utils.BeanCopyUtils; import com.das.common.utils.SequenceUtils; @@ -11,10 +12,11 @@ import com.das.modules.auth.domain.dto.SysUserQueryDto; import com.das.modules.auth.entity.SysUser; import com.das.modules.auth.mapper.SysUserMapper; import com.das.modules.auth.service.SysUserService; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; + @Service public class SysUserServiceImpl implements SysUserService { @@ -24,21 +26,27 @@ public class SysUserServiceImpl implements SysUserService { public SysUser createUser(SysUserDto sysUserDto) { SysUser sysUser = new SysUser(); BeanCopyUtils.copy(sysUserDto,sysUser); + //密码加密 + String passwordEncode = BCrypt.hashpw(sysUserDto.getPassword(), BCrypt.gensalt()); sysUser.setId(SequenceUtils.generateId()); + sysUser.setRevision(1); + sysUser.setCreatedTime(new Date()); + sysUser.setUpdatedTime(new Date()); + sysUser.setPassword(passwordEncode); sysUserMapper.insert(sysUser); return sysUser; } @Override - public int updateUser(SysUserDto sysUserDto) { + public void updateUser(SysUserDto sysUserDto) { SysUser sysUser = new SysUser(); BeanCopyUtils.copy(sysUserDto,sysUser); - return sysUserMapper.updateById(sysUser); + sysUserMapper.updateById(sysUser); } @Override - public int deleteUser(DeleteDto deleteDto) { - return sysUserMapper.deleteById(deleteDto.getId()); + public void deleteUser(DeleteDto deleteDto) { + sysUserMapper.deleteById(deleteDto.getId()); } @Override diff --git a/das/src/main/resources/mapper/SysAuthorityMapper.xml b/das/src/main/resources/mapper/SysAuthorityMapper.xml new file mode 100644 index 00000000..bd1427eb --- /dev/null +++ b/das/src/main/resources/mapper/SysAuthorityMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + insert into sys_authority(id,authority_code , authority_name, revision) values + + (#{item.id}, #{item.authorityCode}, #{item.authorityName}, #{item.revision}) + + + + + + diff --git a/das/src/main/resources/mapper/SysMenuMapper.xml b/das/src/main/resources/mapper/SysMenuMapper.xml index c2cf9038..d05ab257 100644 --- a/das/src/main/resources/mapper/SysMenuMapper.xml +++ b/das/src/main/resources/mapper/SysMenuMapper.xml @@ -18,6 +18,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das/src/main/resources/mapper/SysOrgMapper.xml b/das/src/main/resources/mapper/SysOrgMapper.xml index d9544322..19fd3e9f 100644 --- a/das/src/main/resources/mapper/SysOrgMapper.xml +++ b/das/src/main/resources/mapper/SysOrgMapper.xml @@ -12,7 +12,7 @@ - + @@ -35,10 +35,20 @@ and county like concat('%',#{sysOrg.county},'%') - - and parent_org_iD = #{sysOrg.parentOrgID} + + and parent_org_id = #{sysOrg.parentOrgId} + + + + + + diff --git a/das/src/main/resources/mapper/SysRoleMapper.xml b/das/src/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 00000000..d25dd665 --- /dev/null +++ b/das/src/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das/src/main/resources/mapper/SysUserMapper.xml b/das/src/main/resources/mapper/SysUserMapper.xml index 2341056a..d893fe6b 100644 --- a/das/src/main/resources/mapper/SysUserMapper.xml +++ b/das/src/main/resources/mapper/SysUserMapper.xml @@ -24,9 +24,6 @@ and user_name like concat('%',#{sysUser.userName},'%') - - and phone like concat('%',#{sysUser.phone},'%') - and org_id = #{sysUser.orgId} diff --git a/docs/api/api_list.md b/docs/api/api_list.md index 7f712007..1c473fa7 100644 --- a/docs/api/api_list.md +++ b/docs/api/api_list.md @@ -182,7 +182,6 @@ ```json { - "id": "123", "menuName": "菜单1", "menuOrder": 1, "menuIcon": "icon1", @@ -197,6 +196,18 @@ "updatedTime": 12345 } ``` +入参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ----------- |---------| ---- |--------| +| menuName | String | YES | 菜单名称 | +| menuOrder | Integer | YES | 菜单排列顺序 | +| menuIcon | String | YES | 菜单图标名称 | +| funType | Integer | YES | 菜单操作类型 | +| funParam | String | YES | 菜单操作参数 | +| authorityId | Long | YES | 权限ID | +| parentMenuId | Long | YES | 上级菜单ID | +| revision | Integer | YES | 乐观锁 | 调用成功返回示例 @@ -233,7 +244,6 @@ ```json { - "id": "123", "parentMenuId": "0" } ``` @@ -322,7 +332,113 @@ } ``` +## 2.5、获取所有菜单 +```java +请求接口 /api/menus/list +``` + +入参定义 + +```json +{ + "parentMenuId": 0, + "recursive": true +} +``` + +调用成功返回示例 + +```json +{ + "code": 200, + "msg": "操作成功", + "success": true, + "data": [ + { + "id": "123", + "menuName": "菜单1", + "menuOrder": 1, + "menuIcon": "icon1", + "funType": 1, + "funParam": "param", + "authorityId": "123", + "parentMenuId": "0", + "revision": 1, + "createdBy": "aaa", + "createdTime": 123456, + "updatedBy": "aaa", + "updatedTime": 12345 + } + ] +} +``` + +## 2.6、获取绑定菜单 + +```java +请求接口 /api/menus/tree +``` + +入参定义 + +```json + +``` + +调用成功返回示例 + +```json +{ + "code": 200, + "success": true, + "data": { + "id": 73216735447089152, + "menuName": "测试1", + "menuOrder": 0, + "menuIcon": "", + "funType": 0, + "funParam": "", + "authorityId": 101, + "parentMenuId": 0, + "revision": 2, + "createdTime": "2024-06-25 07:14:40", + "updatedTime": "2024-06-25 07:14:40", + "children": [ + { + "id": 73216795998158848, + "menuName": "测试2", + "menuOrder": 0, + "menuIcon": "", + "funType": 1, + "funParam": "2", + "authorityId": 101, + "parentMenuId": 73216735447089152, + "revision": 1, + "createdTime": "2024-06-25 07:18:31", + "updatedTime": "2024-06-25 07:18:31", + "children": [ + { + "id": 73216799741313024, + "menuName": "测试3", + "menuOrder": 0, + "menuIcon": "", + "funType": 1, + "funParam": "333", + "authorityId": 101, + "parentMenuId": 73216795998158848, + "revision": 1, + "createdTime": "2024-06-25 07:18:45", + "updatedTime": "2024-06-25 07:18:45", + "children": [] + } + ] + } + ] + }, + "msg": "操作成功" +} +``` !> 下面的文档有待确认 @@ -570,7 +686,52 @@ } ``` +## 获取机构列表 +根据获取机构列表,POST方式 +>/api/org/list + +入参示例 + +```json +{ + "parentOrgId":111, + "recursive": true +} + +``` + +入参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ------ |---------| ---- |--------| +| parentOrgId | Long | No | 机构id | +| recursive | boolean | No | 是否是根节点 | + +调用成功返回示例 + +```json +{ + "code": 200, + "success": true, + "data": [ + { + "id": "2", + "name": "测试子公司", + "mrid": "456", + "province": "江苏", + "city": "南京", + "county": "玄武", + "address": "测试地址1", + "contactPhone": "555889", + "remarks": "测试", + "parentOrgId": 1, + "revision": 1 + } + ], + "msg": "操作成功" +} +``` # 4、职员模块API接口 @@ -596,8 +757,7 @@ ```json { "userName":"xx", -"orgId":"xxx", -"phone":"xxx" +"orgId":"xxx" } ``` @@ -607,7 +767,6 @@ |:---------| :------: | :---: |:--------------------------| | userName | String | Yes | 模糊查询职员名称,当职员名称为空时查询所有职员信息 | | orgId | BIGINT | Yes | 所属机构ID | -| phone | String | Yes | 手机号,模糊查询 | 调用成功返回示例 @@ -831,14 +990,13 @@ 提供获取所有系统角色的功能,POST方式 -/api/user/getSysRole +/api/role/query 入参示例 -``` +```json { - "roleName":"xxx",, - "token":"xxx" + "roleName":"xxx" } ``` @@ -847,25 +1005,24 @@ | 参数名 | 参数类型 | 可选 | 描述 | | :------- | :------: | :--: | :----------------------------- | | roleName | String | YES | 系统角色为空时查询所有系统角色 | -| token | String | NO | token | 调用成功返回示例 ```json { - "code":"200", - "msg":"调用成功", - "data":[ + "total": 1, + "rows": [ { - "id": "xxxx", - "roleCode": "xxx", - "roleName": "xxx", - - }, - { - ... + "createdTime": "2024-06-25 11:15:48", + "updatedTime": "2024-06-25 11:15:48", + "id": "73212978522226688", + "roleCode": "001", + "roleName": "测试角色", + "revision": 1 } - ] + ], + "code": 200, + "msg": "查询成功" } ``` @@ -879,15 +1036,13 @@ 根据提供的ID,删除系统角色,POST方式 -/api/user/deleteSysRole +/api/role/delete 入参示例 -``` +```json { - "id":"xxx",, - "token":"xxx" -} + "id":"xxx" ``` 入参描述 @@ -895,15 +1050,14 @@ | 参数名 | 参数类型 | 可选 | 描述 | | :----- | :------: | :--: | :--------- | | id | BIGINT | NO | 系统角色id | -| token | String | NO | token | 调用成功返回示例 ```json { -"code":"200", -"msg":"删除成功", -"data":"null" + "code": 200, + "success": true, + "msg": "操作成功" } ``` @@ -911,52 +1065,106 @@ 根据添加的信息创建系统角色,POST方式 -/api/user/addSysRole +/api/role/add 入参示例 -``` +```json { -"id":"xxx", -"roleCode":"XX", -"roleName":"XX", -"authorityList":["12","12"], -"token":"xxx" + "roleName":"测试角色", + "roleCode":"001", + "authList":[101,102,103] } ``` 入参描述 -| 参数名 | 参数类型 | 可选 | 描述 | -| :------------ | :----------: | :--: | :----------- | -| id | BIGINT | no | 系统角色id | -| roleCode | String | no | 角色编码 | -| roleName | String | no | 角色名称 | -| authorityList | List | yes | 角色的权限id | -| token | String | NO | token | +| 参数名 | 参数类型 | 可选 | 描述 | +| :------------ |:----------:| :--: | :----------- | +| roleCode | String | no | 角色编码 | +| roleName | String | no | 角色名称 | +| authList | List | yes | 角色的权限id | 调用成功返回示例 ```json { -"code":"200", -"msg":"新增成功", -"data":"null" + "code": 200, + "success": true, + "data": { + "roleName": "测试角色", + "roleCode": "001", + "authList": [ + 101, + 102, + 103 + ] + }, + "msg": "操作成功" } ``` +### 所有权限查询 +提供获取所有权限权限的功能,POST方式 +/api/authority/query + +入参示例 + +无入参 + +调用成功返回示例 + +```json +{ +"code": 200, +"success": true, +"data": [ +{ +"id": "101", +"authorityCode": "systemMgr", +"authorityName": "系统管理权限", +"revision": 1 +}, +{ +"id": "102", +"authorityCode": "equipmentLedgerManagement", +"authorityName": "设备台账维护权限", +"revision": 1 +}, +{ +"id": "103", +"authorityCode": "equipmentLedgerView", +"authorityName": "设备台账浏览权限", +"revision": 1 +} +], +"msg": "操作成功" +} +``` + +调用成功返回 + +| 变量名 | 变量类型 | 可为NULL | 描述 | +| -------- | -------- | -------- |------| +| id | BIGINT | No | 主键id | +| authorityCode | string | No | 权限编码 | +| authorityName | string | No | 权限名称 | + + + + + ### 角色权限查询 提供获取所有角色权限的功能,POST方式 -/api/user/getAuthorityById +/api/role/queryAuthorityById 入参示例 -``` +```json { - "id":"xxx", - "token":"xxx" + "id":"xxx" } ``` @@ -965,7 +1173,6 @@ | 参数名 | 参数类型 | 可选 | 描述 | | :----- | :------: | :--: | :--------- | | id | BIGINT | NO | 系统角色id | -| token | String | NO | token | 调用成功返回示例 @@ -991,65 +1198,30 @@ | authorityCode | string | No | 权限编码 | | authorityName | string | No | 权限名称 | -api/user/addSysRole - -入参示例 - -``` -{ -"id":"xxx", -"roleCode":"XX", -"roleName":"XX", -"authorityList":["12","12"], -"token":"xxx" -} -``` - -入参描述 - -| 参数名 | 参数类型 | 可选 | 描述 | -| :------------ | :----------: | :--: | :----------- | -| id | BIGINT | no | 系统角色id | -| roleCode | String | no | 角色编码 | -| roleName | String | no | 角色名称 | -| authorityList | List | yes | 角色的权限id | -| token | String | NO | token | - -调用成功返回示例 - -```json -{ -"code":"200", -"msg":"新增成功", -"data":"null" -} -``` ### 角色权限编辑 根据提供的ID,修改角色权限,POST方式 -/api/user/updateAuthorityById +/api/role/update 入参示例 -``` +```json { "id":"xxx", "roleName":"XX", -"authorityList":["12","12"], -"token":"xxx" +"authList":[12,13] } ``` 入参描述 -| 参数名 | 参数类型 | 可选 | 描述 | -| :------------ | :----------: | :--: | :----------- | -| id | BIGINT | no | 系统角色id | -| roleName | String | no | 角色名称 | -| authorityList | List | yes | 角色的权限id | -| token | String | NO | token | +| 参数名 | 参数类型 | 可选 | 描述 | +| :------------ |:----------:| :--: | :----------- | +| id | BIGINT | no | 系统角色id | +| roleName | String | no | 角色名称 | +| authList | List | yes | 角色的权限id | 调用成功返回示例 diff --git a/ui/dasadmin/package.json b/ui/dasadmin/package.json index 8344dd79..88722da6 100644 --- a/ui/dasadmin/package.json +++ b/ui/dasadmin/package.json @@ -16,6 +16,7 @@ "axios": "1.7.2", "countup.js": "2.8.0", "echarts": "5.5.0", + "element-china-area-data": "^6.1.0", "element-plus": "2.7.4", "esno": "4.7.0", "font-awesome": "4.7.0", diff --git a/ui/dasadmin/src/lang/common/en/management.ts b/ui/dasadmin/src/lang/common/en/management.ts new file mode 100644 index 00000000..3e79f15d --- /dev/null +++ b/ui/dasadmin/src/lang/common/en/management.ts @@ -0,0 +1,6 @@ +export default{ + search:'Search', + add:'Add', + 'Query roles by name':'Query roles by name', + 'Are you sure to delete this?':'Are you sure to delete this?' +} \ No newline at end of file diff --git a/ui/dasadmin/src/lang/common/zh-cn/management.ts b/ui/dasadmin/src/lang/common/zh-cn/management.ts new file mode 100644 index 00000000..0df0c6d4 --- /dev/null +++ b/ui/dasadmin/src/lang/common/zh-cn/management.ts @@ -0,0 +1,6 @@ +export default{ + search:'搜索', + add:'新增', + 'Query roles by name':'按名称查询角色', + 'Are you sure to delete this?':'确定要删除吗?', +} \ No newline at end of file diff --git a/ui/dasadmin/src/layouts/backend/index.vue b/ui/dasadmin/src/layouts/backend/index.vue index 3b7fac09..74ca4e8e 100644 --- a/ui/dasadmin/src/layouts/backend/index.vue +++ b/ui/dasadmin/src/layouts/backend/index.vue @@ -24,6 +24,7 @@ import { useEventListener } from '@vueuse/core' import { BEFORE_RESIZE_LAYOUT } from '/@/stores/constant/cacheKey' import { isEmpty } from 'lodash-es' import { setNavTabsWidth } from '/@/utils/layout' +import { id } from 'element-plus/es/locales.mjs' defineOptions({ components: { Default, Classic, Streamline, Double }, diff --git a/ui/dasadmin/src/views/backend/InstitutionalManagement/InstitutionalManagement.vue b/ui/dasadmin/src/views/backend/InstitutionalManagement/InstitutionalManagement.vue new file mode 100644 index 00000000..6d482ee1 --- /dev/null +++ b/ui/dasadmin/src/views/backend/InstitutionalManagement/InstitutionalManagement.vue @@ -0,0 +1,485 @@ + + + + + diff --git a/ui/dasadmin/src/views/backend/InstitutionalManagement/request.ts b/ui/dasadmin/src/views/backend/InstitutionalManagement/request.ts new file mode 100644 index 00000000..5686334e --- /dev/null +++ b/ui/dasadmin/src/views/backend/InstitutionalManagement/request.ts @@ -0,0 +1,43 @@ +import createAxios from '/@/utils/axios' +import { getDataType, addDataType, changeDataType, delDataType, getDataReturnType, operateDataReturnType, getTreeDataType,getTreeDataReturnType } from './type' + +export const getInstitutionalListReq = (data: getDataType) => { + return createAxios>({ + url: '/api/org/query', + method: 'post', + data: data, + }) +} + +export const addInstitutionalListReq = (data: addDataType) => { + return createAxios({ + url: '/api/org/add', + method: 'post', + data: data, + }) +} + +export const changeInstitutionalListReq = (data: changeDataType) => { + return createAxios({ + url: '/api/org/update', + method: 'post', + data: data, + }) +} + +export const delInstitutionalListReq = (data: delDataType) => { + return createAxios({ + url: '/api/org/delete', + method: 'post', + data: data, + }) +} + +export const getInstitutionalTreeListReq = (data: getTreeDataType) => { + console.log(data); + return createAxios>({ + url: '/api/org/list', + method: 'post', + data: data, + }) +} diff --git a/ui/dasadmin/src/views/backend/InstitutionalManagement/type.ts b/ui/dasadmin/src/views/backend/InstitutionalManagement/type.ts new file mode 100644 index 00000000..0097293a --- /dev/null +++ b/ui/dasadmin/src/views/backend/InstitutionalManagement/type.ts @@ -0,0 +1,107 @@ +export type getDataType = { + name?: string | null + parentOrgId?: string + province?: string + city?: string + county?: string +} +export type getDataReturnType = Promise<{ + code: number + msg: string + rows: T[] + total: number +}> + +export enum addDataEnum { + mrid = '机构编码', + name = '机构名称', + aliasName = '机构简称', + province = '机构省份', + city = '机构城市', + county = '机构区县', + address = '详细地址', + contactPhone = '联系电话', + remarks = '备注', + parentOrgId = '上级机构', +} +export type addDataEnumKeyJointType = keyof typeof addDataEnum +export type formItemListType = { + type: 'input' | 'select' | 'custom' + prop: T + label: (typeof addDataEnum)[T] + placeholder: `请输入${(typeof addDataEnum)[T]}` | `请选择${(typeof addDataEnum)[T]}` + rules: + | [{ required: boolean; message: `请输入${(typeof addDataEnum)[T]}` | `请选择${(typeof addDataEnum)[T]}`; trigger: 'blur' | 'change' }] + | [{ required?: boolean; validator: (rule: any, value: any, callback: any) => void; trigger: 'blur' | 'change' }] +} +export type selectDataType = { + label: string + value: string + children?: selectDataType[] +} +export type addDataType = { + mrid: string + name: string + aliasName: string + province: string + city: string + county: string + address: string + contactPhone: string + remarks: string + parentOrgId: number | null + revision: number +} + +export type changeDataType = { + id: string + mrid: string + name: string + aliasName: string + province: string + city: string + county: string + address: string + contactPhone: string + remarks: string + parentOrgId: number + revision: number +} +export type operateDataReturnType = Promise<{ + code: number + msg: string + success: boolean + data?: T +}> + +export type delDataType = { + id: string +} +export type getTreeDataType = { + parentOrgId: number|string + recursive: boolean +} + +export type tableColumnType = { + key: string + prop: T + label: (typeof addDataEnum)[T] + fixed?: boolean + align?: 'left' | 'center' | 'right' +} + +export type getTreeDataReturnType = { + address: string + children?: getTreeDataReturnType[] + city: string + contactPhone: string + county: string + id: string + mrid: string + name: string + parentOrgId: number + province: string + remarks: string + revision: number + isLeaf?:boolean +} diff --git a/ui/dasadmin/src/views/backend/RoleManagement/RoleManagement.vue b/ui/dasadmin/src/views/backend/RoleManagement/RoleManagement.vue new file mode 100644 index 00000000..62d34dfc --- /dev/null +++ b/ui/dasadmin/src/views/backend/RoleManagement/RoleManagement.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/ui/dasadmin/src/views/backend/RoleManagement/request.ts b/ui/dasadmin/src/views/backend/RoleManagement/request.ts new file mode 100644 index 00000000..4de6d48b --- /dev/null +++ b/ui/dasadmin/src/views/backend/RoleManagement/request.ts @@ -0,0 +1,51 @@ +import createAxios from '/@/utils/axios' +import { + roleListReturnType, + roleListReturnDataType, + getDataType, + getDataReturnType, + changeDataType, + changeDataReturnType, + addDataType, + addDataReturnType, + delDataType, + authorityDataListType +} from './type' +export const getRoleListReq = (params: getDataType) => { + return createAxios>({ + url: '/api/role/query', + method: 'post', + data: params, + }) +} + +export const changeRoleListReq = (params: changeDataType) => { + return createAxios>({ + url: '/api/role/update', + method: 'post', + data: params, + }) +} + +export const addRoleListReq = (params: addDataType) => { + return createAxios>({ + url: '/api/role/add', + method: 'post', + data: params, + }) +} + +export const delRoleListReq = (params: delDataType) => { + return createAxios>({ + url: '/api/role/delete', + method: 'post', + data: params, + }) +} + +export const getAllRoleListReq = () => { + return createAxios>({ + url: '/api/authority/query', + method: 'post', + }) +} diff --git a/ui/dasadmin/src/views/backend/RoleManagement/type.ts b/ui/dasadmin/src/views/backend/RoleManagement/type.ts new file mode 100644 index 00000000..397981bb --- /dev/null +++ b/ui/dasadmin/src/views/backend/RoleManagement/type.ts @@ -0,0 +1,92 @@ +export enum formDataEnum { + id = '系统角色id', + authList = '角色权限', + roleName = '角色名称', + roleCode = '角色编码', +} + +export type formDataType = { + id: string + authList: number[] + roleName: string + roleCode: string +} +export type formDataEnumKeyJointType = keyof typeof formDataEnum + +export type formColumnListType = { + key?: string + label: (typeof formDataEnum)[T] + prop: T + type: 'input' | 'custom' + fixed?: boolean + align?: 'center' | 'left' | 'right' + rule: + | [{ required: true; message: string; trigger: 'blur' | 'change' }] + | [{ validator: (rule: any, value: any, callback: any) => void; trigger: 'blur' | 'change' }] +} + +export type tableDataType = { + createdTime?: string + id: string + revision: number + roleCode: number + roleName: string + updatedTime?: string +} + +export type tableColumnType = { + key: string + prop: T + label: (typeof formDataEnum)[T] + fixed?: boolean + align?: 'left' | 'center' | 'right' +} + +export type authorityDataListType = { + authorityCode: string + authorityName: string + id: string + revision: number +} + +export type roleListReturnType = Promise<{ + code: number + msg: string + rows: T[] + total: number +}> +export type roleListReturnDataType = Promise<{ + code: number + msg: string + data: T[] + success: boolean +}> +export type getDataType = { + roleName: string +} + +export type getDataReturnType = { + createdTime: string + id: string + revision: number + roleCode: number + roleName: string + updatedTime: string +} + +export type changeDataType = Omit + +export type changeDataReturnType = { + authList: number[] + id: string + roleCode: string + roleName: string +} +export type addDataType = Omit + +export type addDataReturnType = changeDataReturnType + +export type delDataType = { + id: string +} + diff --git a/ui/dasadmin/src/views/backend/login.vue b/ui/dasadmin/src/views/backend/login.vue index 7ec720cc..bccf7f2d 100644 --- a/ui/dasadmin/src/views/backend/login.vue +++ b/ui/dasadmin/src/views/backend/login.vue @@ -183,14 +183,12 @@ const onSubmit = () => { state.submitLoading = true login(form) .then((res) => { - console.log(res,"res111111"); - if (res.code == 200) { adminInfo.dataFill({ id: res.data.sysUser.id, username: res.data.sysUser.account, nickname: res.data.sysUser.userName, - orgid:res.data.sysUser.orgId, + orgid: res.data.sysUser.orgId, avatar: '', last_login_time: '', token: res.data.token,