lixueqiang 6 months ago
parent
commit
21109c917e
100 changed files with 4741 additions and 231 deletions
  1. 2 0
      .idea/encodings.xml
  2. 3 0
      .idea/inspectionProfiles/Project_Default.xml
  3. 1 0
      .idea/misc.xml
  4. 1 1
      lxq-common/lxq-common-core/pom.xml
  5. 1 1
      lxq-common/lxq-common-core/src/main/java/com/lxq/common/core/config/RedisTemplateConfiguration.java
  6. 1 1
      lxq-common/lxq-common-core/src/main/resources/logback-spring.xml
  7. 1 1
      lxq-common/lxq-common-excel/pom.xml
  8. 1 1
      lxq-common/lxq-common-idempotent/pom.xml
  9. 1 1
      lxq-common/lxq-common-idempotent/src/main/java/com/lxq/common/idempotent/IdempotentAutoConfiguration.java
  10. 2 2
      lxq-common/lxq-common-idempotent/src/main/java/com/lxq/common/idempotent/aspect/IdempotentAspect.java
  11. 1 1
      lxq-common/lxq-common-log/pom.xml
  12. 1 1
      lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/LogAutoConfiguration.java
  13. 1 1
      lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/event/SysLogEvent.java
  14. 1 1
      lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/event/SysLogEventSource.java
  15. 2 2
      lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/event/SysLogListener.java
  16. 1 1
      lxq-common/lxq-common-mq/pom.xml
  17. 1 1
      lxq-common/lxq-common-mybatis/pom.xml
  18. 1 2
      lxq-common/lxq-common-oss/pom.xml
  19. 1 1
      lxq-common/lxq-common-pay/pom.xml
  20. 4 4
      lxq-common/lxq-common-pay/src/main/java/com/lxq/common/pay/factory/AlipayClientFactory.java
  21. 13 13
      lxq-common/lxq-common-pay/src/main/java/com/lxq/common/pay/service/ali/AliPayService.java
  22. 1 1
      lxq-common/lxq-common-security/pom.xml
  23. 8 8
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/component/AuthResourceServerConfiguration.java
  24. 3 3
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/component/SkyCustomOpaqueTokenIntrospector.java
  25. 26 23
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/component/SkyResourceServerConfiguration.java
  26. 3 3
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/model/LxqSecurityUser.java
  27. 2 2
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/service/LxqRedisOAuth2AuthorizationService.java
  28. 2 2
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/core/CustomeOAuth2TokenCustomizer.java
  29. 6 6
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/core/SkyDaoAuthenticationProvider.java
  30. 3 44
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/handler/SkyAuthenticationFailureEventHandler.java
  31. 2 38
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/handler/SkyAuthenticationSuccessEventHandler.java
  32. 0 17
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/handler/SkyLogoutSuccessEventHandler.java
  33. 5 5
      lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/util/SecurityUtils.java
  34. 2 12
      lxq-common/lxq-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  35. 1 1
      lxq-common/lxq-common-swagger/pom.xml
  36. 2 1
      lxq-common/pom.xml
  37. 68 0
      lxq-system/pom.xml
  38. 27 0
      lxq-system/src/main/java/com/lxq/system/biz/KxsSysApplication.java
  39. 29 0
      lxq-system/src/main/java/com/lxq/system/biz/constant/enums/SysErrorTypeEnum.java
  40. 146 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysClientController.java
  41. 109 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysDeptController.java
  42. 224 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysDictController.java
  43. 100 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysFileController.java
  44. 86 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysLogController.java
  45. 118 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysMenuController.java
  46. 123 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysPostController.java
  47. 149 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysPublicParamController.java
  48. 159 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysRoleController.java
  49. 88 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysRuleMakingController.java
  50. 201 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/SysUserController.java
  51. 213 0
      lxq-system/src/main/java/com/lxq/system/biz/controller/TokenController.java
  52. 91 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/dto/SysLogDTO.java
  53. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/dto/SysRuleMakingDTO.java
  54. 42 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/dto/UserDTO.java
  55. 35 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/dto/UserInfo.java
  56. 65 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/vo/RoleExcelVO.java
  57. 28 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/vo/RoleVO.java
  58. 17 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/vo/SysFeignInterfaceConfigVO.java
  59. 28 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/vo/TokenVo.java
  60. 108 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/vo/UserExcelVO.java
  61. 151 0
      lxq-system/src/main/java/com/lxq/system/biz/domain/vo/UserVO.java
  62. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysDeptMapper.java
  63. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysDictItemMapper.java
  64. 18 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysDictMapper.java
  65. 17 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysFileMapper.java
  66. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysLogMapper.java
  67. 25 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysMenuMapper.java
  68. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysOauthClientDetailsMapper.java
  69. 25 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysPostMapper.java
  70. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysPublicParamMapper.java
  71. 25 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysRoleMapper.java
  72. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysRoleMenuMapper.java
  73. 17 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysRuleMakingMapper.java
  74. 52 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysUserMapper.java
  75. 19 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysUserPostMapper.java
  76. 16 0
      lxq-system/src/main/java/com/lxq/system/biz/mapper/SysUserRoleMapper.java
  77. 95 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysDept.java
  78. 96 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysDict.java
  79. 121 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysDictItem.java
  80. 107 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysFile.java
  81. 129 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysInterfaceConfig.java
  82. 149 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysLog.java
  83. 139 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysMenu.java
  84. 142 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysOauthClientDetails.java
  85. 99 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysPost.java
  86. 114 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysPublicParam.java
  87. 80 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysRole.java
  88. 38 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysRoleMenu.java
  89. 94 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysRuleMaking.java
  90. 164 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysUser.java
  91. 32 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysUserPost.java
  92. 42 0
      lxq-system/src/main/java/com/lxq/system/biz/model/SysUserRole.java
  93. 10 19
      lxq-system/src/main/java/com/lxq/system/biz/security/service/LxqRemoteRegisteredClientRepository.java
  94. 12 10
      lxq-system/src/main/java/com/lxq/system/biz/security/service/LxqUserDetailsServiceImpl.java
  95. 39 0
      lxq-system/src/main/java/com/lxq/system/biz/service/SysDeptService.java
  96. 29 0
      lxq-system/src/main/java/com/lxq/system/biz/service/SysDictItemService.java
  97. 35 0
      lxq-system/src/main/java/com/lxq/system/biz/service/SysDictService.java
  98. 45 0
      lxq-system/src/main/java/com/lxq/system/biz/service/SysFileService.java
  99. 33 0
      lxq-system/src/main/java/com/lxq/system/biz/service/SysLogService.java
  100. 59 0
      lxq-system/src/main/java/com/lxq/system/biz/service/SysMenuService.java

+ 2 - 0
.idea/encodings.xml

@@ -24,6 +24,8 @@
     <file url="file://$PROJECT_DIR$/lxq-common/lxq-common-swagger/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/lxq-common/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/lxq-common/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/lxq-system/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/lxq-system/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
   </component>

+ 3 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -1,5 +1,8 @@
 <component name="InspectionProjectProfileManager">
   <profile version="1.0">
     <option name="myName" value="Project Default" />
+    <inspection_tool class="JavadocDeclaration" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="ADDITIONAL_TAGS" value="date" />
+    </inspection_tool>
   </profile>
 </component>

+ 1 - 0
.idea/misc.xml

@@ -6,6 +6,7 @@
       <list>
         <option value="$PROJECT_DIR$/pom.xml" />
         <option value="$PROJECT_DIR$/lxq-common/pom.xml" />
+        <option value="$PROJECT_DIR$/lxq-system/pom.xml" />
       </list>
     </option>
     <option name="ignoredFiles">

+ 1 - 1
lxq-common/lxq-common-core/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-core</artifactId>

+ 1 - 1
lxq-common/lxq-common-core/src/main/java/com/lxq/common/core/config/RedisTemplateConfiguration.java

@@ -4,7 +4,7 @@ package com.lxq.common.core.config;
 import cn.hutool.core.util.StrUtil;
 import lombok.AllArgsConstructor;
 import org.redisson.Redisson;
-import org.redisson.api.RedissonClient;
+import org.redisson.biz.RedissonClient;
 import org.redisson.config.Config;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.AutoConfigureBefore;

+ 1 - 1
lxq-common/lxq-common-core/src/main/resources/logback-spring.xml

@@ -107,7 +107,7 @@
 		</filter>
 
 		<!-- 屏蔽transfer模块 -->
-		<logger name="com.lxq.transfer.api" level="OFF"/>
+		<logger name="com.lxq.transfer.biz" level="OFF"/>
 
 	</appender>
 	<!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->

+ 1 - 1
lxq-common/lxq-common-excel/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
     <artifactId>lxq-common-excel</artifactId>
     <description>lxq 导入导出功能</description>

+ 1 - 1
lxq-common/lxq-common-idempotent/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-idempotent</artifactId>

+ 1 - 1
lxq-common/lxq-common-idempotent/src/main/java/com/lxq/common/idempotent/IdempotentAutoConfiguration.java

@@ -7,7 +7,7 @@ import com.lxq.common.idempotent.expression.ExpressionResolver;
 import com.lxq.common.idempotent.expression.KeyResolver;
 import lombok.AllArgsConstructor;
 import org.redisson.Redisson;
-import org.redisson.api.RedissonClient;
+import org.redisson.biz.RedissonClient;
 import org.redisson.config.Config;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;

+ 2 - 2
lxq-common/lxq-common-idempotent/src/main/java/com/lxq/common/idempotent/aspect/IdempotentAspect.java

@@ -11,8 +11,8 @@ import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
-import org.redisson.api.RMapCache;
-import org.redisson.api.RedissonClient;
+import org.redisson.biz.RMapCache;
+import org.redisson.biz.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
lxq-common/lxq-common-log/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-log</artifactId>

+ 1 - 1
lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/LogAutoConfiguration.java

@@ -3,7 +3,7 @@ package com.lxq.common.log;
 import com.lxq.common.log.aspect.SysLogAspect;
 import com.lxq.common.log.config.SkyLogProperties;
 import com.lxq.common.log.event.SysLogListener;
-import com.lxq.lkb.system.api.feign.RemoteLogService;
+import com.lxq.system.biz.feign.RemoteLogService;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;

+ 1 - 1
lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/event/SysLogEvent.java

@@ -1,6 +1,6 @@
 package com.lxq.common.log.event;
 
-import com.lxq.lkb.system.api.model.SysLog;
+import com.lxq.system.biz.model.SysLog;
 import org.springframework.context.ApplicationEvent;
 
 /**

+ 1 - 1
lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/event/SysLogEventSource.java

@@ -1,6 +1,6 @@
 package com.lxq.common.log.event;
 
-import com.lxq.lkb.system.api.model.SysLog;
+import com.lxq.system.biz.model.SysLog;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 

+ 2 - 2
lxq-common/lxq-common-log/src/main/java/com/lxq/common/log/event/SysLogListener.java

@@ -9,8 +9,8 @@ import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
 import com.lxq.common.core.constant.SecurityConstants;
 import com.lxq.common.core.jackson.SkyJavaTimeModule;
 import com.lxq.common.log.config.SkyLogProperties;
-import com.lxq.lkb.system.api.feign.RemoteLogService;
-import com.lxq.lkb.system.api.model.SysLog;
+import com.lxq.system.biz.feign.RemoteLogService;
+import com.lxq.system.biz.model.SysLog;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
lxq-common/lxq-common-mq/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-mq</artifactId>

+ 1 - 1
lxq-common/lxq-common-mybatis/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-mybatis</artifactId>

+ 1 - 2
lxq-common/lxq-common-oss/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-oss</artifactId>
@@ -19,7 +19,6 @@
     </properties>
 
     <dependencies>
-        <!--hutool-->
         <dependency>
             <groupId>com.lxq</groupId>
             <artifactId>lxq-common-core</artifactId>

+ 1 - 1
lxq-common/lxq-common-pay/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-pay</artifactId>

+ 4 - 4
lxq-common/lxq-common-pay/src/main/java/com/lxq/common/pay/factory/AlipayClientFactory.java

@@ -1,9 +1,9 @@
 package com.lxq.common.pay.factory;
 
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.AlipayConfig;
-import com.alipay.api.DefaultAlipayClient;
+import com.alipay.biz.AlipayApiException;
+import com.alipay.biz.AlipayClient;
+import com.alipay.biz.AlipayConfig;
+import com.alipay.biz.DefaultAlipayClient;
 import com.lxq.common.pay.config.AliPayMultiConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;

+ 13 - 13
lxq-common/lxq-common-pay/src/main/java/com/lxq/common/pay/service/ali/AliPayService.java

@@ -7,19 +7,19 @@ import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.domain.AlipayTradeQueryModel;
-import com.alipay.api.domain.AlipayTradeRefundModel;
-import com.alipay.api.internal.util.AlipaySignature;
-import com.alipay.api.request.AlipayTradeAppPayRequest;
-import com.alipay.api.request.AlipayTradeCreateRequest;
-import com.alipay.api.request.AlipayTradeQueryRequest;
-import com.alipay.api.request.AlipayTradeRefundRequest;
-import com.alipay.api.response.AlipayTradeAppPayResponse;
-import com.alipay.api.response.AlipayTradeCreateResponse;
-import com.alipay.api.response.AlipayTradeQueryResponse;
-import com.alipay.api.response.AlipayTradeRefundResponse;
+import com.alipay.biz.AlipayApiException;
+import com.alipay.biz.AlipayClient;
+import com.alipay.biz.domain.AlipayTradeQueryModel;
+import com.alipay.biz.domain.AlipayTradeRefundModel;
+import com.alipay.biz.internal.util.AlipaySignature;
+import com.alipay.biz.request.AlipayTradeAppPayRequest;
+import com.alipay.biz.request.AlipayTradeCreateRequest;
+import com.alipay.biz.request.AlipayTradeQueryRequest;
+import com.alipay.biz.request.AlipayTradeRefundRequest;
+import com.alipay.biz.response.AlipayTradeAppPayResponse;
+import com.alipay.biz.response.AlipayTradeCreateResponse;
+import com.alipay.biz.response.AlipayTradeQueryResponse;
+import com.alipay.biz.response.AlipayTradeRefundResponse;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.lxq.common.core.exception.GlobalCustomerException;
 import com.lxq.common.pay.config.AliPayMultiConfig;

+ 1 - 1
lxq-common/lxq-common-security/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-security</artifactId>

+ 8 - 8
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/component/AuthResourceServerConfiguration.java

@@ -12,7 +12,7 @@ import org.springframework.security.config.annotation.web.configurers.AbstractHt
 import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
 import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
 import org.springframework.security.web.SecurityFilterChain;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
 
 /**
  * @author 没秃顶的码农
@@ -37,15 +37,15 @@ public class AuthResourceServerConfiguration {
 
 	@Bean
 	@Order(2)
-	SecurityFilterChain securityFilterChainAuth(HttpSecurity http) throws Exception {
+	SecurityFilterChain resourceServer(HttpSecurity http) throws Exception {
 
-		AntPathRequestMatcher[] requestMatchers = permitAllUrl.getUrls()
-			.stream()
-			.map(AntPathRequestMatcher::new)
-			.toList()
-			.toArray(new AntPathRequestMatcher[] {});
+		PathPatternRequestMatcher[] permitMatchers = permitAllUrl.getUrls()
+				.stream()
+				.map(url -> PathPatternRequestMatcher.withDefaults().matcher(url))
+				.toList()
+				.toArray(new PathPatternRequestMatcher[] {});
 
-		http.authorizeHttpRequests(authorizeRequests -> authorizeRequests.requestMatchers(requestMatchers)
+		http.authorizeHttpRequests(authorizeRequests -> authorizeRequests.requestMatchers(permitMatchers)
 			.permitAll()
 			.anyRequest()
 			.authenticated())

+ 3 - 3
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/component/SkyCustomOpaqueTokenIntrospector.java

@@ -1,7 +1,7 @@
 package com.lxq.common.security.component;
 
 import com.lxq.common.core.constant.SecurityConstants;
-import com.lxq.common.security.model.lxqSecurityUser;
+import com.lxq.common.security.model.LxqSecurityUser;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -37,7 +37,7 @@ public class SkyCustomOpaqueTokenIntrospector implements OpaqueTokenIntrospector
 		}
 
 		if (SecurityConstants.FROM.equals(oldAuthorization.getRegisteredClientId())){
-			return (lxqSecurityUser) ((UsernamePasswordAuthenticationToken) Objects.requireNonNull(oldAuthorization).getAttributes().get(Principal.class.getName())).getPrincipal();
+			return (LxqSecurityUser) ((UsernamePasswordAuthenticationToken) Objects.requireNonNull(oldAuthorization).getAttributes().get(Principal.class.getName())).getPrincipal();
 		}
 
 		// 客户端模式默认返回
@@ -52,7 +52,7 @@ public class SkyCustomOpaqueTokenIntrospector implements OpaqueTokenIntrospector
 			Object principal = Objects.requireNonNull(oldAuthorization).getAttributes().get(Principal.class.getName());
 			Authentication authentication = (Authentication) principal;
 
-			return (lxqSecurityUser) authentication.getPrincipal();
+			return (LxqSecurityUser) authentication.getPrincipal();
 		}
 		catch (UsernameNotFoundException notFoundException) {
 			log.warn("用户不存在 {}", notFoundException.getLocalizedMessage());

+ 26 - 23
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/component/SkyResourceServerConfiguration.java

@@ -20,6 +20,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;
 import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.Customizer;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
 import org.springframework.security.config.annotation.web.configurers.RequestCacheConfigurer;
@@ -33,7 +34,6 @@ import org.springframework.security.oauth2.server.authorization.web.authenticati
 import org.springframework.security.web.DefaultSecurityFilterChain;
 import org.springframework.security.web.SecurityFilterChain;
 import org.springframework.security.web.authentication.AuthenticationConverter;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 
 import java.util.Arrays;
 
@@ -54,35 +54,37 @@ public class SkyResourceServerConfiguration {
 	@Bean
 	@Order(1)
 	SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
-		// 过滤器链
-		http.securityMatcher(SecurityConstants.OAUTH_TOKEN_URL);
+		// 配置授权服务器的安全策略,只有/oauth2/**的请求才会走如下的配置
+		http.securityMatcher("/oauth2/**");
 
 		OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = new OAuth2AuthorizationServerConfigurer();
 
-		http.apply(authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {// 个性化认证授权端点
-			tokenEndpoint.accessTokenRequestConverter(accessTokenRequestConverter()) // 注入自定义的授权认证Converter
-				.accessTokenResponseHandler(new SkyAuthenticationSuccessEventHandler()) // 登录成功处理器
-				.errorResponseHandler(new SkyAuthenticationFailureEventHandler());// 登录失败处理器
-		}).clientAuthentication(oAuth2ClientAuthenticationConfigurer -> // 个性化客户端认证
-		oAuth2ClientAuthenticationConfigurer.errorResponseHandler(new SkyAuthenticationFailureEventHandler()))// 处理客户端认证异常
-			.authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint// 授权码端点个性化confirm页面
-				.consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI)));
-
-		AntPathRequestMatcher[] requestMatchers = new AntPathRequestMatcher[] {};
-
-		http.authorizeHttpRequests(authorizeRequests -> {
-			// 自定义接口、端点暴露
-			authorizeRequests.requestMatchers(requestMatchers).permitAll();
-			authorizeRequests.anyRequest().authenticated();
-		})
-			.apply(authorizationServerConfigurer.authorizationService(authorizationService)// redis存储token的实现
-				.authorizationServerSettings(
-						AuthorizationServerSettings.builder().issuer(SecurityConstants.PROJECT_LICENSE).build()));
-		http.apply(new FormIdentityLoginConfigurer());
+
+		http.with(authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {  // 个性化认证授权端点
+							tokenEndpoint.accessTokenRequestConverter(accessTokenRequestConverter()) // 注入自定义的授权认证Converter
+									.accessTokenResponseHandler(new SkyAuthenticationSuccessEventHandler()) // 登录成功处理器
+									.errorResponseHandler(new SkyAuthenticationFailureEventHandler());// 登录失败处理器
+						}).clientAuthentication(oAuth2ClientAuthenticationConfigurer -> // 个性化客户端认证
+								oAuth2ClientAuthenticationConfigurer.errorResponseHandler(new SkyAuthenticationFailureEventHandler()))// 处理客户端认证异常
+						.authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint// 授权码端点个性化confirm页面
+								.consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI)), Customizer.withDefaults())
+				.authorizeHttpRequests(authorizeRequests -> authorizeRequests.anyRequest().authenticated());
+
+		// 设置 Token 存储的策略
+		http.with(authorizationServerConfigurer.authorizationService(authorizationService)// redis存储token的实现
+						.authorizationServerSettings(
+								AuthorizationServerSettings.builder().issuer(SecurityConstants.PROJECT_LICENSE).build()),
+				Customizer.withDefaults());
+
+		// 设置授权码模式登录页面
+		http.with(new FormIdentityLoginConfigurer(), Customizer.withDefaults());
+
+
 		DefaultSecurityFilterChain securityFilterChain = http.build();
 
 		// 注入自定义授权模式实现
 		addCustomOAuth2GrantAuthenticationProvider(http);
+
 		return securityFilterChain;
 	}
 
@@ -165,4 +167,5 @@ public class SkyResourceServerConfiguration {
 		http.authenticationProvider(resourceOwnerWechatAuthenticationProvider);
 	}
 
+
 }

+ 3 - 3
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/model/KxsSecurityUser.java → lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/model/LxqSecurityUser.java

@@ -19,7 +19,7 @@ import java.util.Map;
  * @author 没秃顶的码农
  * @date 2023/10/28
  */
-public class lxqSecurityUser extends User implements OAuth2AuthenticatedPrincipal {
+public class LxqSecurityUser extends User implements OAuth2AuthenticatedPrincipal {
 
 	@Serial
 	private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
@@ -53,7 +53,7 @@ public class lxqSecurityUser extends User implements OAuth2AuthenticatedPrincipa
 	@Getter
 	private final String salt;
 
-	public lxqSecurityUser(Long id, String username, String password, String phone, String salt, boolean enabled, boolean accountNonExpired,
+	public LxqSecurityUser(Long id, String username, String password, String phone, String salt, boolean enabled, boolean accountNonExpired,
 						   boolean credentialsNonExpired, boolean accountNonLocked,
 						   Collection<? extends GrantedAuthority> authorities) {
 		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
@@ -63,7 +63,7 @@ public class lxqSecurityUser extends User implements OAuth2AuthenticatedPrincipa
 		this.clientId = null;
 	}
 
-	public lxqSecurityUser(Long id, String username, String password, String phone, String salt, String clientId, boolean enabled, boolean accountNonExpired,
+	public LxqSecurityUser(Long id, String username, String password, String phone, String salt, String clientId, boolean enabled, boolean accountNonExpired,
 						   boolean credentialsNonExpired, boolean accountNonLocked,
 						   Collection<? extends GrantedAuthority> authorities) {
 		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);

+ 2 - 2
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/service/LxqRedisOAuth2AuthorizationService.java

@@ -1,6 +1,6 @@
 package com.lxq.common.security.service;
 
-import com.lxq.common.security.model.lxqSecurityUser;
+import com.lxq.common.security.model.LxqSecurityUser;
 import lombok.RequiredArgsConstructor;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.RedisSerializer;
@@ -79,7 +79,7 @@ public class LxqRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
 			Object attribute = authorization.getAttribute("java.security.Principal");
 			if(attribute instanceof UsernamePasswordAuthenticationToken authenticationToken){
 				Object principal = authenticationToken.getPrincipal();
-				if (principal instanceof lxqSecurityUser userDetails) {
+				if (principal instanceof LxqSecurityUser userDetails) {
 					redisTemplate.opsForValue()
 							.set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, userDetails.getId(), accessToken.getTokenValue()), authorization, between,
 									TimeUnit.SECONDS);

+ 2 - 2
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/core/CustomeOAuth2TokenCustomizer.java

@@ -1,7 +1,7 @@
 package com.lxq.common.security.support.core;
 
 import com.lxq.common.core.constant.SecurityConstants;
-import com.lxq.common.security.model.lxqSecurityUser;
+import com.lxq.common.security.model.LxqSecurityUser;
 import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenClaimsContext;
 import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenClaimsSet;
 import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer;
@@ -29,7 +29,7 @@ public class CustomeOAuth2TokenCustomizer implements OAuth2TokenCustomizer<OAuth
 			return;
 		}
 
-		lxqSecurityUser skyUser = (lxqSecurityUser) context.getPrincipal().getPrincipal();
+		LxqSecurityUser skyUser = (LxqSecurityUser) context.getPrincipal().getPrincipal();
 		claims.claim(SecurityConstants.DETAILS_USER, skyUser);
 		claims.claim(SecurityConstants.DETAILS_USER_ID, skyUser.getId());
 		claims.claim(SecurityConstants.USERNAME, skyUser.getUsername());

+ 6 - 6
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/core/SkyDaoAuthenticationProvider.java

@@ -6,8 +6,8 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.lxq.common.core.constant.SecurityConstants;
 import com.lxq.common.core.constant.enums.ErrorTypeEnum;
 import com.lxq.common.core.util.WebUtils;
-import com.lxq.common.security.model.lxqSecurityUser;
-import com.lxq.common.security.service.lxqUserDetailsService;
+import com.lxq.common.security.model.LxqSecurityUser;
+import com.lxq.common.security.service.LxqUserDetailsService;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.SneakyThrows;
 import org.springframework.core.Ordered;
@@ -96,7 +96,7 @@ public class SkyDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat
 		//开发和环境去掉密码验证
 		if(!"dev".equals(active) && !"test".equals(active)){
 			String presentedPassword = authentication.getCredentials().toString();
-			if(userDetails instanceof lxqSecurityUser user && (CharSequenceUtil.isNotBlank(user.getSalt()))){
+			if(userDetails instanceof LxqSecurityUser user && (CharSequenceUtil.isNotBlank(user.getSalt()))){
 				//切换账号功能只需要验证盐值
 				if (presentedPassword.equals(user.getSalt())) {
 					return;
@@ -128,11 +128,11 @@ public class SkyDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat
 			clientId = basicConvert.convert(request).getName();
 		}
 
-		Map<String, lxqUserDetailsService> userDetailsServiceMap = SpringUtil
-			.getBeansOfType(lxqUserDetailsService.class);
+		Map<String, LxqUserDetailsService> userDetailsServiceMap = SpringUtil
+			.getBeansOfType(LxqUserDetailsService.class);
 
 		String finalClientId = clientId;
-		Optional<lxqUserDetailsService> optional = userDetailsServiceMap.values()
+		Optional<LxqUserDetailsService> optional = userDetailsServiceMap.values()
 			.stream()
 			.filter(service -> service.support(finalClientId, grantType))
 			.max(Comparator.comparingInt(Ordered::getOrder));

+ 3 - 44
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/handler/SkyAuthenticationFailureEventHandler.java

@@ -1,17 +1,9 @@
 package com.lxq.common.security.support.handler;
 
 import cn.hutool.core.text.CharSequenceUtil;
-import cn.hutool.core.util.StrUtil;
-import com.lxq.common.core.constant.CommonConstants;
 import com.lxq.common.core.constant.SecurityConstants;
 import com.lxq.common.core.constant.enums.ErrorTypeEnum;
 import com.lxq.common.core.util.R;
-import com.lxq.common.core.util.SpringContextHolder;
-import com.lxq.common.log.event.SysLogEvent;
-import com.lxq.common.log.util.LogTypeEnum;
-import com.lxq.common.log.util.SysLogUtils;
-import com.lxq.common.security.util.OAuth2EndpointUtils;
-import com.lxq.lkb.system.api.model.SysLog;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.SneakyThrows;
@@ -24,9 +16,6 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
 import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
 import org.springframework.security.web.authentication.AuthenticationFailureHandler;
-import org.springframework.util.MultiValueMap;
-
-import java.io.IOException;
 
 /**
  * @author 没秃顶的码农
@@ -49,40 +38,8 @@ public class SkyAuthenticationFailureEventHandler implements AuthenticationFailu
     @SneakyThrows
     public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
                                         AuthenticationException exception) {
-        String username = null;
-        if (request.getAttribute(OAuth2ParameterNames.USERNAME) != null) {
-            username = request.getAttribute(OAuth2ParameterNames.USERNAME).toString();
-        }
-
-        String errorMessage;
-        if (exception instanceof OAuth2AuthenticationException authorizationException) {
-            errorMessage = CharSequenceUtil.isBlank(authorizationException.getError().getDescription())
-                    ? authorizationException.getError().getErrorCode()
-                    : authorizationException.getError().getDescription();
-        } else {
-            errorMessage = exception.getLocalizedMessage();
-        }
-
-        log.error("用户:{} 登录失败,异常:{}", username, errorMessage);
-        SysLog logVo = SysLogUtils.getSysLog();
-        logVo.setTitle("登录失败");
-        logVo.setLogType(LogTypeEnum.ERROR.getType());
-        logVo.setException(exception.getLocalizedMessage());
-        // 发送异步日志事件
-        String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME);
-        if (CharSequenceUtil.isNotBlank(startTimeStr)) {
-            Long startTime = Long.parseLong(startTimeStr);
-            Long endTime = System.currentTimeMillis();
-            logVo.setTime(endTime - startTime);
-        }
-        logVo.setCreateBy(username);
-        SpringContextHolder.publishEvent(new SysLogEvent(logVo));
-        // 写出错误信息
-        sendErrorResponse(request, response, exception);
-    }
 
-    private void sendErrorResponse(HttpServletRequest request, HttpServletResponse response,
-                                   AuthenticationException exception) throws IOException {
+        log.debug("用户登录失败:{}", exception.getLocalizedMessage());
         ServletServerHttpResponse httpResponse = new ServletServerHttpResponse(response);
         httpResponse.setStatusCode(HttpStatus.OK);
         String errorMessage;
@@ -102,6 +59,8 @@ public class SkyAuthenticationFailureEventHandler implements AuthenticationFailu
         }
 
         this.errorHttpResponseConverter.write(R.failed(errorMessage), MediaType.APPLICATION_JSON, httpResponse);
+
     }
 
+
 }

+ 2 - 38
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/handler/SkyAuthenticationSuccessEventHandler.java

@@ -1,15 +1,6 @@
 package com.lxq.common.security.support.handler;
 
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.text.CharSequenceUtil;
-import com.lxq.common.core.constant.CommonConstants;
-import com.lxq.common.core.constant.SecurityConstants;
-import com.lxq.common.core.util.SpringContextHolder;
-import com.lxq.common.log.event.SysLogEvent;
-import com.lxq.common.log.util.SysLogUtils;
 import com.lxq.common.security.component.SkyCustomOAuth2AccessTokenResponseHttpMessageConverter;
-import com.lxq.common.security.model.lxqSecurityUser;
-import com.lxq.lkb.system.api.model.SysLog;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.SneakyThrows;
@@ -25,7 +16,6 @@ import org.springframework.security.oauth2.server.authorization.authentication.O
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 import org.springframework.util.CollectionUtils;
 
-import java.io.IOException;
 import java.time.temporal.ChronoUnit;
 import java.util.Map;
 
@@ -49,32 +39,6 @@ public class SkyAuthenticationSuccessEventHandler implements AuthenticationSucce
 	@Override
 	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
 			Authentication authentication) {
-		OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = (OAuth2AccessTokenAuthenticationToken) authentication;
-		Map<String, Object> map = accessTokenAuthentication.getAdditionalParameters();
-		if (MapUtil.isNotEmpty(map)) {
-			// 发送异步日志事件
-			lxqSecurityUser userInfo = (lxqSecurityUser) map.get(SecurityConstants.DETAILS_USER);
-			log.info("用户:{} 登录成功", userInfo.getName());
-			SecurityContextHolder.getContext().setAuthentication(accessTokenAuthentication);
-			SysLog logVo = SysLogUtils.getSysLog();
-			logVo.setTitle("登录成功");
-			String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME);
-			if (CharSequenceUtil.isNotBlank(startTimeStr)) {
-				Long startTime = Long.parseLong(startTimeStr);
-				Long endTime = System.currentTimeMillis();
-				logVo.setTime(endTime - startTime);
-			}
-			//TODO 登录不保存日志
-			logVo.setCreateBy(userInfo.getName());
-//			SpringContextHolder.publishEvent(new SysLogEvent(logVo));
-		}
-
-		// 输出token
-		sendAccessTokenResponse(response, authentication);
-	}
-
-	private void sendAccessTokenResponse(HttpServletResponse response, Authentication authentication)
-			throws IOException {
 
 		OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = (OAuth2AccessTokenAuthenticationToken) authentication;
 
@@ -83,8 +47,8 @@ public class SkyAuthenticationSuccessEventHandler implements AuthenticationSucce
 		Map<String, Object> additionalParameters = accessTokenAuthentication.getAdditionalParameters();
 
 		OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue())
-			.tokenType(accessToken.getTokenType())
-			.scopes(accessToken.getScopes());
+				.tokenType(accessToken.getTokenType())
+				.scopes(accessToken.getScopes());
 		if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
 			builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
 		}

+ 0 - 17
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/support/handler/SkyLogoutSuccessEventHandler.java

@@ -20,7 +20,6 @@ import com.lxq.common.core.util.SpringContextHolder;
 import com.lxq.common.core.util.WebUtils;
 import com.lxq.common.log.event.SysLogEvent;
 import com.lxq.common.log.util.SysLogUtils;
-import com.lxq.lkb.system.api.model.SysLog;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.ApplicationListener;
 import org.springframework.http.HttpHeaders;
@@ -55,22 +54,6 @@ public class SkyLogoutSuccessEventHandler implements ApplicationListener<LogoutS
 	 */
 	public void handle(Authentication authentication) {
 		log.info("用户:{} 退出成功", authentication.getPrincipal());
-		SysLog logVo = SysLogUtils.getSysLog();
-		logVo.setTitle("退出成功");
-		// 发送异步日志事件
-		Long startTime = System.currentTimeMillis();
-		Long endTime = System.currentTimeMillis();
-		logVo.setTime(endTime - startTime);
-
-		// 设置对应的token
-		WebUtils.getRequest().ifPresent(request -> logVo.setParams(request.getHeader(HttpHeaders.AUTHORIZATION)));
-
-		// 这边设置ServiceId
-		if (authentication instanceof PreAuthenticatedAuthenticationToken) {
-			logVo.setServiceId(authentication.getCredentials().toString());
-		}
-		logVo.setCreateBy(authentication.getName());
-		SpringContextHolder.publishEvent(new SysLogEvent(logVo));
 	}
 
 }

+ 5 - 5
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/util/SecurityUtils.java

@@ -2,7 +2,7 @@ package com.lxq.common.security.util;
 
 import cn.hutool.core.util.StrUtil;
 import com.lxq.common.core.constant.SecurityConstants;
-import com.lxq.common.security.model.lxqSecurityUser;
+import com.lxq.common.security.model.LxqSecurityUser;
 import lombok.experimental.UtilityClass;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
@@ -32,10 +32,10 @@ public class SecurityUtils {
 	/**
 	 * 获取用户
 	 */
-	public lxqSecurityUser getUser(Authentication authentication) {
+	public LxqSecurityUser getUser(Authentication authentication) {
 		Object principal = authentication.getPrincipal();
-		if (principal instanceof lxqSecurityUser) {
-			return (lxqSecurityUser) principal;
+		if (principal instanceof LxqSecurityUser) {
+			return (LxqSecurityUser) principal;
 		}
 		return null;
 	}
@@ -43,7 +43,7 @@ public class SecurityUtils {
 	/**
 	 * 获取用户
 	 */
-	public lxqSecurityUser getUser() {
+	public LxqSecurityUser getUser() {
 		Authentication authentication = getAuthentication();
 		if (authentication == null) {
 			return null;

+ 2 - 12
lxq-common/lxq-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1,14 +1,4 @@
-com.lxq.common.security.service.lxqRedisOAuth2AuthorizationService
-com.lxq.common.security.service.lxqRedisOAuth2AuthorizationConsentService
+com.lxq.common.security.service.LxqRedisOAuth2AuthorizationService
+com.lxq.common.security.service.LxqRedisOAuth2AuthorizationConsentService
 com.lxq.common.security.component.SkySecurityInnerAspect
 com.lxq.common.security.component.SkySecurityMessageSourceConfiguration
-com.lxq.common.security.service.lxqRemoteRegisteredClientRepository
-com.lxq.common.security.service.lxqUserDetailsServiceImpl
-com.lxq.common.security.service.LkbMakerDetailsServiceImpl
-com.lxq.common.security.service.LkbMchDetailServiceImpl
-com.lxq.common.security.service.LkbMchSmsDetailServiceImpl
-com.lxq.common.security.service.WxUserDetailsServiceImpl
-com.lxq.common.security.service.AliUserDetailsServiceImpl
-com.lxq.common.security.service.LkbStoreDetailServiceImpl
-com.lxq.common.security.service.WxlxqExtUserDetailsServiceImpl
-com.lxq.common.security.service.AliExtUserDetailsServiceImpl

+ 1 - 1
lxq-common/lxq-common-swagger/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq-common</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common-swagger</artifactId>

+ 2 - 1
lxq-common/pom.xml

@@ -7,7 +7,7 @@
     <parent>
         <groupId>com.lxq</groupId>
         <artifactId>lxq</artifactId>
-        <version>4.0.0</version>
+        <version>3.5.9</version>
     </parent>
 
     <artifactId>lxq-common</artifactId>
@@ -36,6 +36,7 @@
                 <artifactId>lxq-common-core</artifactId>
                 <version>${lxq.common.version}</version>
             </dependency>
+
         </dependencies>
     </dependencyManagement>
 </project>

+ 68 - 0
lxq-system/pom.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>lxq</artifactId>
+        <groupId>com.lxq</groupId>
+        <version>3.5.9</version>
+    </parent>
+
+    <artifactId>lxq-system</artifactId>
+
+    <description>system系统模块</description>
+
+    <dependencies>
+
+        <!--日志处理-->
+        <dependency>
+            <groupId>com.lxq</groupId>
+            <artifactId>lxq-common-log</artifactId>
+        </dependency>
+        <!-- orm 模块-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+        </dependency>
+        <!--多数据源-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
+        </dependency>
+        <!--接口文档-->
+        <dependency>
+            <groupId>com.lxq</groupId>
+            <artifactId>lxq-common-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-poi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-json</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.lxq</groupId>
+            <artifactId>lxq-common-oss</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.lxq</groupId>
+            <artifactId>lxq-common-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.lxq</groupId>
+            <artifactId>lxq-common-idempotent</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.lxq</groupId>
+            <artifactId>lxq-common-excel</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 27 - 0
lxq-system/src/main/java/com/lxq/system/biz/KxsSysApplication.java

@@ -0,0 +1,27 @@
+package com.lxq.system.biz;
+
+import com.lxq.common.security.annotation.EnableAuthResourceServer;
+import com.lxq.common.security.annotation.EnableLoginResourceServer;
+import com.lxq.common.swagger.annotation.EnableKxsDoc;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+/**
+ * @author 没秃顶的码农
+ * @date 2022年06月21日
+ * <p>
+ * 用户统一管理系统
+ */
+@SpringBootApplication
+@EnableLoginResourceServer
+@EnableAuthResourceServer
+@EnableKxsDoc(value = "admin")
+@EnableAsync
+public class KxsSysApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(KxsSysApplication.class, args);
+	}
+
+}

+ 29 - 0
lxq-system/src/main/java/com/lxq/system/biz/constant/enums/SysErrorTypeEnum.java

@@ -0,0 +1,29 @@
+package com.lxq.system.biz.constant.enums;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * 错误类型枚举
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/29
+ */
+@Getter
+@RequiredArgsConstructor
+public enum SysErrorTypeEnum {
+
+	USER_EMPTY(-1, "用户信息为空"), CLIENT_NULL(-1, "客户端查询异常,请检查数据库链接"),
+	NOT_DATA(0, "数据为空"),
+	IMPORT_EMPTY(-1, "导入数据为空"),
+	PARAM_ERROR(0, "参数异常"),
+
+	SYS_PARAM_DELETE_SYSTEM(-1, "系统内置参数不能删除"), SYS_DICT_DELETE_SYSTEM(-1, "系统内置字典不允许删除"),
+	SYS_MENU_DELETE_EXISTING(-1, "菜单存在下级节点 删除失败"), SYS_USER_USERNAME_EXISTING(-1, "用户名已存在"),
+	SYS_USER_UPDATE_PASSWORD_ERROR(-1, "用户原密码错误"), SYS_DICT_UPDATE_SYSTEM(-1, "系统内置字典不能修改");
+
+	private final int code;
+
+	private final String description;
+
+}

+ 146 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysClientController.java

@@ -0,0 +1,146 @@
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.util.R;
+import com.lxq.common.excel.annotation.ResponseExcel;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.annotation.Inner;
+import com.lxq.system.biz.model.SysOauthClientDetails;
+import com.lxq.system.biz.service.SysOauthClientDetailsService;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/client")
+@Tag(description = "client", name = "客户端管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysClientController {
+
+	private final SysOauthClientDetailsService clientDetailsService;
+
+	/**
+	 * 通过ID查询
+	 * @param clientId clientId
+	 * @return SysOauthClientDetails
+	 */
+	@GetMapping("getById")
+	public R getByClientId(@RequestParam("clientId") String clientId) {
+		SysOauthClientDetails details = clientDetailsService
+			.getOne(Wrappers.<SysOauthClientDetails>lambdaQuery().eq(SysOauthClientDetails::getClientId, clientId));
+		return R.ok(details);
+	}
+
+	/**
+	 * 简单分页查询
+	 * @param page 分页对象
+	 * @param sysOauthClientDetails 系统终端
+	 * @return
+	 */
+	@GetMapping("/page")
+	public R getOauthClientDetailsPage(@ParameterObject Page page,
+			@ParameterObject SysOauthClientDetails sysOauthClientDetails) {
+		LambdaQueryWrapper<SysOauthClientDetails> wrapper = Wrappers.<SysOauthClientDetails>lambdaQuery()
+			.like(StrUtil.isNotBlank(sysOauthClientDetails.getClientId()), SysOauthClientDetails::getClientId,
+					sysOauthClientDetails.getClientId())
+			.like(StrUtil.isNotBlank(sysOauthClientDetails.getClientSecret()), SysOauthClientDetails::getClientSecret,
+					sysOauthClientDetails.getClientSecret());
+		return R.ok(clientDetailsService.page(page, wrapper));
+	}
+
+	/**
+	 * 添加
+	 * @param clientDetails 实体
+	 * @return success/false
+	 */
+	@SysLog("添加终端")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_client_add')")
+	public R add(@Valid @RequestBody SysOauthClientDetails clientDetails) {
+		return R.ok(clientDetailsService.saveClient(clientDetails));
+	}
+
+	/**
+	 * 删除
+	 * @param id ID
+	 * @return success/false
+	 */
+	@SysLog("删除终端")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_client_del')")
+	public R removeById(@PathVariable Long id) {
+		clientDetailsService.removeBatchByIds(CollUtil.toList(id));
+		return R.ok();
+	}
+
+	/**
+	 * 编辑
+	 * @param clientDetails 实体
+	 * @return success/false
+	 */
+	@SysLog("编辑终端")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_client_edit')")
+	public R update(@Valid @RequestBody SysOauthClientDetails clientDetails) {
+		return R.ok(clientDetailsService.updateClientById(clientDetails));
+	}
+
+	@Inner
+	@GetMapping("/getClientDetailsById/{clientId}")
+	public R getClientDetailsById(@PathVariable String clientId) {
+		return R.ok(clientDetailsService.getOne(
+				Wrappers.<SysOauthClientDetails>lambdaQuery().eq(SysOauthClientDetails::getClientId, clientId), false));
+	}
+
+	/**
+	 * 查询全部客户端
+	 * @return
+	 */
+	@Inner
+	@GetMapping("/list")
+	public R listClients() {
+		return R.ok(clientDetailsService.list());
+	}
+
+	/**
+	 * 同步缓存字典
+	 * @return R
+	 */
+	@SysLog("同步终端")
+	@PutMapping("/sync")
+	public R sync() {
+		return clientDetailsService.syncClientCache();
+	}
+
+	/**
+	 * 导出所有客户端
+	 * @return excel
+	 */
+	@ResponseExcel
+	@SysLog("导出excel")
+	@GetMapping("/export")
+	public List<SysOauthClientDetails> export(SysOauthClientDetails sysOauthClientDetails) {
+		return clientDetailsService.list(Wrappers.query(sysOauthClientDetails));
+	}
+
+}

+ 109 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysDeptController.java

@@ -0,0 +1,109 @@
+
+package com.lxq.system.biz.controller;
+
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.system.biz.model.SysDept;
+import com.lxq.system.biz.service.SysDeptService;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 部门管理 前端控制器
+ * </p>
+ *
+ * @author LXQ
+ * @since 2021-01-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dept")
+@Tag(description = "dept", name = "部门管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysDeptController {
+
+	private final SysDeptService sysDeptService;
+
+	/**
+	 * 通过ID查询
+	 * @param id ID
+	 * @return SysDept
+	 */
+	@GetMapping("getById")
+	public R getById(@RequestParam("id") Long id) {
+		return R.ok(sysDeptService.getById(id));
+	}
+
+	/**
+	 * 查询全部部门
+	 */
+	@GetMapping("/list")
+	public R list() {
+		return R.ok(sysDeptService.list());
+	}
+
+	/**
+	 * 返回树形菜单集合
+	 * @param deptName 部门名称
+	 * @return 树形菜单
+	 */
+	@GetMapping(value = "/tree")
+	public R getTree(String deptName) {
+		return R.ok(sysDeptService.selectTree(deptName));
+	}
+
+	/**
+	 * 添加
+	 * @param sysDept 实体
+	 * @return success/false
+	 */
+	@SysLog("添加部门")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_dept_add')")
+	public R save(@Valid @RequestBody SysDept sysDept) {
+		return R.ok(sysDeptService.save(sysDept));
+	}
+
+	/**
+	 * 删除
+	 * @param id ID
+	 * @return success/false
+	 */
+	@SysLog("删除部门")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_dept_del')")
+	public R removeById(@PathVariable Long id) {
+		return R.ok(sysDeptService.removeDeptById(id));
+	}
+
+	/**
+	 * 编辑
+	 * @param sysDept 实体
+	 * @return success/false
+	 */
+	@SysLog("编辑部门")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_dept_edit')")
+	public R update(@Valid @RequestBody SysDept sysDept) {
+		sysDept.setUpdateTime(LocalDateTime.now());
+		return R.ok(sysDeptService.updateById(sysDept));
+	}
+
+	/**
+	 * 查收子级列表
+	 * @return 返回子级
+	 */
+	@GetMapping(value = "/getDescendantList")
+	public R getDescendantList(@RequestParam("deptId") Long deptId) {
+		return R.ok(sysDeptService.listDescendant(deptId));
+	}
+
+}

+ 224 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysDictController.java

@@ -0,0 +1,224 @@
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.constant.CacheConstants;
+import com.lxq.common.core.util.R;
+import com.lxq.common.excel.annotation.ResponseExcel;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.annotation.Inner;
+import com.lxq.system.biz.model.SysDict;
+import com.lxq.system.biz.model.SysDictItem;
+import com.lxq.system.biz.service.SysDictItemService;
+import com.lxq.system.biz.service.SysDictService;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 字典表 前端控制器
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dict")
+@Tag(description = "dict", name = "字典管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysDictController {
+
+	private final SysDictService sysDictService;
+
+	private final SysDictItemService sysDictItemService;
+
+	/**
+	 * 通过ID查询字典信息
+	 * @param id ID
+	 * @return 字典信息
+	 */
+	@GetMapping("/getById")
+	public R getById(@RequestParam("id") Long id) {
+		return R.ok(sysDictService.getById(id));
+	}
+
+	/**
+	 * 查询字典信息
+	 * @param query 查询信息
+	 * @return 字典信息
+	 */
+	@GetMapping("/details")
+	public R getDetails(@ParameterObject SysDict query) {
+		return R.ok(sysDictService.getOne(Wrappers.query(query), false));
+	}
+
+	/**
+	 * 分页查询字典信息
+	 * @param page 分页对象
+	 * @return 分页对象
+	 */
+	@GetMapping("/page")
+	public R<IPage> getDictPage(@ParameterObject Page page, @ParameterObject SysDict sysDict) {
+		return R.ok(sysDictService.page(page,
+				Wrappers.<SysDict>lambdaQuery()
+					.eq(StrUtil.isNotBlank(sysDict.getSystemFlag()), SysDict::getSystemFlag, sysDict.getSystemFlag())
+					.like(StrUtil.isNotBlank(sysDict.getDictType()), SysDict::getDictType, sysDict.getDictType())));
+	}
+
+	/**
+	 * 通过字典类型查找字典
+	 * @param type 类型
+	 * @return 同类型字典
+	 */
+	@Inner(value = false)
+	@GetMapping("type")
+	@Cacheable(value = CacheConstants.DICT_DETAILS, key = "#type", unless = "#result.data.isEmpty()")
+	public R<List<SysDictItem>> getDictByType(@RequestParam("type") String type) {
+		return R.ok(sysDictItemService.list(Wrappers.<SysDictItem>query().lambda().eq(SysDictItem::getDictType, type)));
+	}
+
+	/**
+	 * 添加字典
+	 * @param sysDict 字典信息
+	 * @return success、false
+	 */
+	@SysLog("添加字典")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_dict_add')")
+	public R save(@Valid @RequestBody SysDict sysDict) {
+		sysDictService.save(sysDict);
+		return R.ok(sysDict);
+	}
+
+	/**
+	 * 删除字典,并且清除字典缓存
+	 * @param id ID
+	 * @return R
+	 */
+	@SysLog("删除字典")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_dict_del')")
+	@CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
+	public R removeById(@PathVariable Long id) {
+
+		return R.ok(sysDictService.removeDictByIds(new Long[]{id}));
+	}
+
+	/**
+	 * 修改字典
+	 * @param sysDict 字典信息
+	 * @return success/false
+	 */
+	@PutMapping("update")
+	@SysLog("修改字典")
+	@PreAuthorize("@pms.hasPermission('sys_dict_edit')")
+	public R updateById(@Valid @RequestBody SysDict sysDict) {
+		return sysDictService.updateDict(sysDict);
+	}
+
+	/**
+	 * 查询
+	 * @param name 名称或者字典项
+	 */
+	@GetMapping("/list")
+	public R getDictList(@RequestParam("name") String name) {
+		return R.ok(sysDictService.list(Wrappers.<SysDict>lambdaQuery()
+			.like(StrUtil.isNotBlank(name), SysDict::getDictType, name)
+			.or()
+			.like(StrUtil.isNotBlank(name), SysDict::getDescription, name)));
+	}
+
+	/**
+	 * 分页查询
+	 * @param page 分页对象
+	 * @param sysDictItem 字典项
+	 */
+	@GetMapping("/pageItem")
+	public R getSysDictItemPage(Page<SysDictItem> page, @ParameterObject SysDictItem sysDictItem) {
+		return R.ok(sysDictItemService.page(page, Wrappers.query(sysDictItem)));
+	}
+
+	/**
+	 * 通过id查询字典项
+	 * @param id id
+	 * @return R
+	 */
+	@GetMapping("/getItemById")
+	public R getDictItemById(@RequestParam("id") Long id) {
+		return R.ok(sysDictItemService.getById(id));
+	}
+
+	/**
+	 * 查询字典项详情
+	 * @param query 查询条件
+	 * @return R
+	 */
+	@GetMapping("/detailsItem")
+	public R getDictItemDetails(@ParameterObject SysDictItem query) {
+		return R.ok(sysDictItemService.getOne(Wrappers.query(query), false));
+	}
+
+	/**
+	 * 新增字典项
+	 * @param sysDictItem 字典项
+	 * @return R
+	 */
+	@SysLog("新增字典项")
+	@PostMapping("/addItem")
+	@CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
+	public R save(@RequestBody SysDictItem sysDictItem) {
+		return R.ok(sysDictItemService.save(sysDictItem));
+	}
+
+	/**
+	 * 修改字典项
+	 * @param sysDictItem 字典项
+	 * @return R
+	 */
+	@SysLog("修改字典项")
+	@PutMapping("/updateItem")
+	public R updateById(@RequestBody SysDictItem sysDictItem) {
+		return sysDictItemService.updateDictItem(sysDictItem);
+	}
+
+	/**
+	 * 通过id删除字典项
+	 * @param id id
+	 * @return R
+	 */
+	@SysLog("删除字典项")
+	@DeleteMapping("/removeItemById/{id}")
+	public R removeDictItemById(@PathVariable Long id) {
+		return sysDictItemService.removeDictItem(id);
+	}
+
+	/**
+	 * 同步缓存字典
+	 * @return R
+	 */
+	@SysLog("同步字典")
+	@PutMapping("/sync")
+	public R sync() {
+		return sysDictService.syncDictCache();
+	}
+
+	@ResponseExcel
+	@GetMapping("/export")
+	public List<SysDictItem> export(SysDictItem sysDictItem) {
+		return sysDictItemService.list(Wrappers.query(sysDictItem));
+	}
+
+}

+ 100 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysFileController.java

@@ -0,0 +1,100 @@
+
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.annotation.Inner;
+import com.lxq.system.biz.model.SysFile;
+import com.lxq.system.biz.service.SysFileService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 文件管理
+ *
+ * @author 没秃顶的码农
+ * @date 2019-06-18 17:18:42
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/sysFile")
+@Tag(description = "sysFile", name = "文件管理")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysFileController {
+
+    private final SysFileService sysFileService;
+
+    /**
+     * 分页查询
+     *
+     * @param page    分页对象
+     * @param sysFile 文件管理
+     * @return 分页
+     */
+    @Operation(summary = "分页查询", description = "分页查询")
+    @GetMapping("/page")
+    public R getSysFilePage(@ParameterObject Page page, @ParameterObject SysFile sysFile) {
+        LambdaQueryWrapper<SysFile> wrapper = Wrappers.<SysFile>lambdaQuery()
+				.eq(sysFile.getType() != null, SysFile::getType, sysFile.getType())
+                .like(StrUtil.isNotBlank(sysFile.getFileName()), SysFile::getFileName, sysFile.getFileName())
+                .orderByDesc(SysFile::getId);
+        return R.ok(sysFileService.page(page, wrapper));
+    }
+
+    /**
+     * 通过id删除文件管理
+     *
+     * @param ids id 列表
+     * @return R
+     */
+    @Operation(summary = "通过id删除文件管理", description = "通过id删除文件管理")
+    @SysLog("删除文件管理")
+    @PostMapping("/removeByIds")
+    @PreAuthorize("@pms.hasPermission('sys_file_del')")
+    public R removeById(@RequestBody List<Long> ids) {
+
+        return R.ok(sysFileService.deleteFile(ids));
+    }
+
+    /**
+     * 保存文件
+     *
+     * @param file 资源
+     * @return R
+     */
+    @Inner
+    @PostMapping(value = "/save")
+    public R save(@Valid @RequestBody SysFile file) {
+
+        return R.ok(sysFileService.save(file));
+    }
+
+    /**
+     * 获取文件
+     *
+     * @param bucket   桶名称
+     * @param fileName 文件空间/名称
+     */
+    @Inner(false)
+    @GetMapping("/file")
+    public R file(@RequestParam("bucketName") String bucket, @RequestParam("fileName") String fileName, HttpServletResponse response) {
+
+        return R.ok(sysFileService.getFile(bucket, fileName, response));
+    }
+
+
+}

+ 86 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysLogController.java

@@ -0,0 +1,86 @@
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.util.R;
+import com.lxq.common.excel.annotation.ResponseExcel;
+import com.lxq.common.security.annotation.Inner;
+import com.lxq.system.biz.dto.admin.SysLogDTO;
+import com.lxq.system.biz.model.SysLog;
+import com.lxq.system.biz.service.SysLogService;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 日志表 前端控制器
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/log")
+@Tag(description = "log", name = "日志管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysLogController {
+
+	private final SysLogService sysLogService;
+
+	/**
+	 * 简单分页查询
+	 * @param page 分页对象
+	 * @param sysLog 系统日志
+	 * @return
+	 */
+	@GetMapping("/page")
+	public R getLogPage(@ParameterObject Page page, @ParameterObject SysLogDTO sysLog) {
+		return R.ok(sysLogService.getLogByPage(page, sysLog));
+	}
+
+	/**
+	 * 批量删除日志
+	 * @param ids ID
+	 * @return success/false
+	 */
+	@PostMapping("remove")
+	@PreAuthorize("@pms.hasPermission('sys_log_del')")
+	public R removeByIds(@RequestBody Long[] ids) {
+		return R.ok(sysLogService.removeBatchByIds(CollUtil.toList(ids)));
+	}
+
+	/**
+	 * 插入日志
+	 * @param sysLog 日志实体
+	 * @return success/false
+	 */
+	@Inner
+	@PostMapping("/save")
+	public R save(@Valid @RequestBody SysLog sysLog) {
+
+		return R.ok(sysLogService.saveLog(sysLog));
+	}
+
+	/**
+	 * 导出excel 表格
+	 * @param sysLog 查询条件
+	 * @return
+	 */
+	@ResponseExcel
+	@GetMapping("/export")
+	@PreAuthorize("@pms.hasPermission('sys_log_export')")
+	public List<SysLog> export(SysLog sysLog) {
+		return sysLogService.list(Wrappers.query(sysLog));
+	}
+
+}

+ 118 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysMenuController.java

@@ -0,0 +1,118 @@
+package com.lxq.system.biz.controller;
+
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.util.SecurityUtils;
+import com.lxq.system.biz.model.SysMenu;
+import com.lxq.system.biz.service.SysMenuService;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * sys菜单控制器
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/menu")
+@Tag(description = "menu", name = "菜单管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysMenuController {
+
+	private final SysMenuService sysMenuService;
+
+	/**
+	 * 返回当前用户的树形菜单集合
+	 * @param type 类型
+	 * @param parentId 父节点ID
+	 * @return 当前用户的树形菜单
+	 */
+	@GetMapping("/getUserMenu")
+	public R getUserMenu(String type, Long parentId) {
+		// 获取符合条件的菜单
+		Set<SysMenu> all = new HashSet<>();
+		SecurityUtils.getRoles().forEach(roleId -> all.addAll(sysMenuService.findMenuByRoleId(roleId)));
+		return R.ok(sysMenuService.filterMenu(all, type, parentId));
+	}
+
+	/**
+	 * 返回树形菜单集合
+	 * @param parentId 父节点ID
+	 * @param menuName 菜单名称
+	 * @return 树形菜单
+	 */
+	@GetMapping(value = "/tree")
+	public R getTree(Long parentId, String menuName, String type) {
+		return R.ok(sysMenuService.treeMenu(parentId, menuName, type));
+	}
+
+	/**
+	 * 返回角色的菜单集合
+	 * @param roleId 角色ID
+	 * @return 属性集合
+	 */
+	@GetMapping("/getRoleTree")
+	public R getRoleTree(@RequestParam("roleId") Long roleId) {
+		return R
+			.ok(sysMenuService.findMenuByRoleId(roleId).stream().map(SysMenu::getMenuId).collect(Collectors.toList()));
+	}
+
+	/**
+	 * 通过ID查询菜单的详细信息
+	 * @param id 菜单ID
+	 * @return 菜单详细信息
+	 */
+	@GetMapping("getById")
+	public R getById(@RequestParam("id") Long id) {
+		return R.ok(sysMenuService.getById(id));
+	}
+
+	/**
+	 * 新增菜单
+	 * @param sysMenu 菜单信息
+	 * @return success/false
+	 */
+	@SysLog("新增菜单")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_menu_add')")
+	public R save(@Valid @RequestBody SysMenu sysMenu) {
+		sysMenuService.save(sysMenu);
+		return R.ok(sysMenu);
+	}
+
+	/**
+	 * 删除菜单
+	 * @param id 菜单ID
+	 * @return success/false
+	 */
+	@SysLog("删除菜单")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_menu_del')")
+	public R removeById(@PathVariable Long id) {
+		return sysMenuService.removeMenuById(id);
+	}
+
+	/**
+	 * 更新菜单
+	 * @param sysMenu
+	 * @return
+	 */
+	@SysLog("更新菜单")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_menu_edit')")
+	public R update(@Valid @RequestBody SysMenu sysMenu) {
+		return R.ok(sysMenuService.updateMenuById(sysMenu));
+	}
+
+}

+ 123 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysPostController.java

@@ -0,0 +1,123 @@
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.system.biz.model.SysPost;
+import com.lxq.system.biz.service.SysPostService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 岗位信息表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/06
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/post")
+@Tag(description = "post", name = "岗位信息表管理")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysPostController {
+
+	private final SysPostService sysPostService;
+
+	/**
+	 * 获取岗位列表
+	 * @return 岗位列表
+	 */
+	@GetMapping("/list")
+	public R<List<SysPost>> listPosts() {
+		return R.ok(sysPostService.list(Wrappers.emptyWrapper()));
+	}
+
+	/**
+	 * 分页查询
+	 * @param page 分页对象
+	 * @param sysPost 岗位信息表
+	 * @return
+	 */
+	@Operation(description = "分页查询", summary = "分页查询")
+	@GetMapping("/page")
+	@PreAuthorize("@pms.hasPermission('sys_post_view')")
+	public R getSysPostPage(@ParameterObject Page<SysPost> page, @ParameterObject SysPost sysPost) {
+		return R.ok(sysPostService.page(page, Wrappers.<SysPost>lambdaQuery()
+			.like(StrUtil.isNotBlank(sysPost.getPostName()), SysPost::getPostName, sysPost.getPostName())));
+	}
+
+	/**
+	 * 通过id查询岗位信息表
+	 * @param postId id
+	 * @return R
+	 */
+	@Operation(description = "通过id查询", summary = "通过id查询")
+	@GetMapping("/getById")
+	@PreAuthorize("@pms.hasPermission('sys_post_view')")
+	public R getById(@RequestParam("postId") Long postId) {
+		return R.ok(sysPostService.getById(postId));
+	}
+
+	/**
+	 * 查询岗位信息信息
+	 * @param query 查询条件
+	 * @return R
+	 */
+	@Operation(description = "查询角色信息", summary = "查询角色信息")
+	@GetMapping("/details")
+	@PreAuthorize("@pms.hasPermission('sys_post_view')")
+	public R getDetails(SysPost query) {
+		return R.ok(sysPostService.getOne(Wrappers.query(query), false));
+	}
+
+	/**
+	 * 新增岗位信息表
+	 * @param sysPost 岗位信息表
+	 * @return R
+	 */
+	@Operation(description = "新增岗位信息表", summary = "新增岗位信息表")
+	@SysLog("新增岗位信息表")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_post_add')")
+	public R save(@RequestBody SysPost sysPost) {
+		return R.ok(sysPostService.save(sysPost));
+	}
+
+	/**
+	 * 修改岗位信息表
+	 * @param sysPost 岗位信息表
+	 * @return R
+	 */
+	@Operation(description = "修改岗位信息表", summary = "修改岗位信息表")
+	@SysLog("修改岗位信息表")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_post_edit')")
+	public R updateById(@RequestBody SysPost sysPost) {
+		return R.ok(sysPostService.updateById(sysPost));
+	}
+
+	/**
+	 * 通过id删除岗位信息表
+	 * @param id id
+	 * @return R
+	 */
+	@Operation(description = "通过id删除岗位信息表", summary = "通过id删除岗位信息表")
+	@SysLog("通过id删除岗位信息表")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_post_del')")
+	public R removeById(@PathVariable Long id) {
+		return R.ok(sysPostService.removeBatchByIds(CollUtil.toList(id)));
+	}
+
+}

+ 149 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysPublicParamController.java

@@ -0,0 +1,149 @@
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.util.R;
+import com.lxq.common.excel.annotation.ResponseExcel;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.annotation.Inner;
+import com.lxq.system.biz.model.SysPublicParam;
+import com.lxq.system.biz.service.SysPublicParamService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 公共参数
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/param")
+@Tag(description = "param", name = "公共参数配置")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysPublicParamController {
+
+	private final SysPublicParamService sysPublicParamService;
+
+	/**
+	 * 通过key查询公共参数值
+	 *
+	 * @param publicKey 公钥
+	 * @return {@link R}
+	 */
+	@Inner(value = false)
+	@Operation(description = "查询公共参数值", summary = "根据key查询公共参数值")
+	@GetMapping("/publicValue")
+	public R publicKey(@RequestParam("publicKey") String publicKey) {
+		return R.ok(sysPublicParamService.getSysPublicParamKeyToValue(publicKey));
+	}
+
+	/**
+	 * 分页查询
+	 * @param page 分页对象
+	 * @param sysPublicParam 公共参数
+	 */
+	@Operation(description = "分页查询", summary = "分页查询")
+	@GetMapping("/page")
+	public R getSysPublicParamPage(@ParameterObject Page<SysPublicParam> page, @ParameterObject SysPublicParam sysPublicParam) {
+		LambdaUpdateWrapper<SysPublicParam> wrapper = Wrappers.<SysPublicParam>lambdaUpdate()
+			.like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
+					sysPublicParam.getPublicName())
+			.like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
+					sysPublicParam.getPublicKey())
+			.eq(StrUtil.isNotBlank(sysPublicParam.getSystemFlag()), SysPublicParam::getSystemFlag,
+					sysPublicParam.getSystemFlag());
+
+		return R.ok(sysPublicParamService.page(page, wrapper));
+	}
+
+	/**
+	 * 通过id查询公共参数
+	 * @param publicId id
+	 * @return R
+	 */
+	@Operation(description = "通过id查询公共参数", summary = "通过id查询公共参数")
+	@GetMapping("/getById")
+	public R getById(@RequestParam("publicId") Long publicId) {
+		return R.ok(sysPublicParamService.getById(publicId));
+	}
+
+	@GetMapping("/details")
+	public R getDetail(@ParameterObject SysPublicParam param) {
+		return R.ok(sysPublicParamService.getOne(Wrappers.query(param), false));
+	}
+
+	/**
+	 * 新增公共参数
+	 * @param sysPublicParam 公共参数
+	 * @return R
+	 */
+	@Operation(description = "新增公共参数", summary = "新增公共参数")
+	@SysLog("新增公共参数")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_syspublicparam_add')")
+	public R save(@RequestBody SysPublicParam sysPublicParam) {
+		return R.ok(sysPublicParamService.save(sysPublicParam));
+	}
+
+	/**
+	 * 修改公共参数
+	 * @param sysPublicParam 公共参数
+	 * @return R
+	 */
+	@Operation(description = "修改公共参数", summary = "修改公共参数")
+	@SysLog("修改公共参数")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_syspublicparam_edit')")
+	public R updateById(@RequestBody SysPublicParam sysPublicParam) {
+		return sysPublicParamService.updateParam(sysPublicParam);
+	}
+
+
+	/**
+	 * 通过id删除公共参数
+	 * @param id id
+	 * @return R
+	 */
+	@Operation(description = "删除公共参数", summary = "删除公共参数")
+	@SysLog("删除公共参数")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_syspublicparam_del')")
+	public R removeById(@PathVariable Long id) {
+		return R.ok(sysPublicParamService.removeParamByIds(new Long[]{id}));
+	}
+
+	/**
+	 * 导出excel 表格
+	 * @return
+	 */
+	@ResponseExcel
+	@GetMapping("/export")
+	@PreAuthorize("@pms.hasPermission('sys_syspublicparam_edit')")
+	public List<SysPublicParam> export() {
+		return sysPublicParamService.list();
+	}
+
+	/**
+	 * 同步参数
+	 * @return R
+	 */
+	@SysLog("同步参数")
+	@PutMapping("/sync")
+	@PreAuthorize("@pms.hasPermission('sys_syspublicparam_edit')")
+	public R sync() {
+		return sysPublicParamService.syncParamCache();
+	}
+
+}

+ 159 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysRoleController.java

@@ -0,0 +1,159 @@
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.constant.CacheConstants;
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.system.biz.model.SysRole;
+import com.lxq.system.biz.vo.admin.RoleVO;
+import com.lxq.system.biz.service.SysRoleService;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * sys角色控制器
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/role")
+@Tag(description = "role", name = "角色管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysRoleController {
+
+	private final SysRoleService sysRoleService;
+
+	/**
+	 * 通过ID查询角色信息
+	 * @param id ID
+	 * @return 角色信息
+	 */
+	@GetMapping("/getById")
+	public R getById(@RequestParam("id") Long id) {
+		return R.ok(sysRoleService.getById(id));
+	}
+
+	/**
+	 * 查询角色信息
+	 * @param query 查询条件
+	 * @return 角色信息
+	 */
+	@GetMapping("/details")
+	public R getDetails(@ParameterObject SysRole query) {
+		return R.ok(sysRoleService.getOne(Wrappers.query(query), false));
+	}
+
+	/**
+	 * 添加角色
+	 * @param sysRole 角色信息
+	 * @return success、false
+	 */
+	@SysLog("添加角色")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_role_add')")
+	@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
+	public R save(@Valid @RequestBody SysRole sysRole) {
+		return R.ok(sysRoleService.save(sysRole));
+	}
+
+	/**
+	 * 修改角色
+	 * @param sysRole 角色信息
+	 * @return success/false
+	 */
+	@SysLog("修改角色")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_role_edit')")
+	@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
+	public R update(@Valid @RequestBody SysRole sysRole) {
+		return R.ok(sysRoleService.updateById(sysRole));
+	}
+
+	/**
+	 * 批量删除角色
+	 *
+	 * @param ids id
+	 * @return {@link R}
+	 */
+	@SysLog("删除角色")
+	@PostMapping("remove")
+	@PreAuthorize("@pms.hasPermission('sys_role_del')")
+	@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
+	public R remove(@RequestBody Long[] ids) {
+		return R.ok(sysRoleService.removeRoleByIds(ids));
+	}
+
+	/**
+	 * 删除角色
+	 *
+	 * @param id id
+	 * @return {@link R}
+	 */
+	@SysLog("删除角色")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_role_del')")
+	@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
+	public R removeById(@PathVariable Long id) {
+
+		return R.ok(sysRoleService.removeRoleByIds(new Long[]{id}));
+	}
+
+	/**
+	 * 获取角色列表
+	 * @return 角色列表
+	 */
+	@GetMapping("/list")
+	public R listRoles() {
+		return R.ok(sysRoleService.list(Wrappers.emptyWrapper()));
+	}
+
+	/**
+	 * 分页查询角色信息
+	 * @param page 分页对象
+	 * @param role 查询条件
+	 * @return 分页对象
+	 */
+	@GetMapping("/page")
+	public R getRolePage(Page<SysRole> page, SysRole role) {
+		return R.ok(sysRoleService.page(page, Wrappers.<SysRole>lambdaQuery()
+			.like(CharSequenceUtil.isNotBlank(role.getRoleName()), SysRole::getRoleName, role.getRoleName())));
+	}
+
+	/**
+	 * 更新角色菜单
+	 * @param roleVo 角色对象
+	 * @return success、false
+	 */
+	@SysLog("更新角色菜单")
+	@PutMapping("/menu")
+	@PreAuthorize("@pms.hasPermission('sys_role_perm')")
+	public R saveRoleMenus(@RequestBody RoleVO roleVo) {
+		return R.ok(sysRoleService.updateRoleMenus(roleVo));
+	}
+
+	/**
+	 * 通过角色ID 查询角色列表
+	 * @param roleIdList 角色ID
+	 * @return 响应信息主体
+	 */
+	@PostMapping("/getRoleList")
+	public R getRoleList(@RequestBody List<Long> roleIdList) {
+		return R.ok(sysRoleService.findRolesByRoleIds(roleIdList, CollUtil.join(roleIdList, StrUtil.UNDERLINE)));
+	}
+
+}

+ 88 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysRuleMakingController.java

@@ -0,0 +1,88 @@
+package com.lxq.system.biz.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.system.biz.domain.dto.SysRuleMakingDTO;
+import com.lxq.system.biz.model.SysRuleMaking;
+import com.lxq.system.biz.service.SysRuleMakingService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 协议管理(SysRulemaking)控制层
+ *
+ * @author 系统
+ * @since 2024-08-27 14:12:41
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("sysRuleMaking")
+public class SysRuleMakingController {
+
+    /**
+     * 服务对象
+     */
+    private final SysRuleMakingService sysRuleMakingService;
+
+
+
+    /**
+     * 协议管理-列表
+     *
+     * @param page 分页对象
+     * @return 协议管理-列表
+     */
+    @GetMapping("/page")
+    public R ruleMakingPage(Page<SysRuleMaking> page, SysRuleMakingDTO param) {
+        sysRuleMakingService.ruleMakingPage(page,param);
+        return R.ok(page);
+    }
+
+
+    /**
+     * 协议管理-新增或修改
+     *
+     * @return 协议管理-新增或修改
+     */
+    @SysLog("协议管理-新增或修改")
+    @PutMapping("/addOrUpdate")
+    @PreAuthorize("@pms.hasPermission('sys_ruleMaking_addOrUpdate')")
+    public R addOrUpdate(@RequestBody SysRuleMaking param) {
+
+        return R.ok(sysRuleMakingService.saveOrUpdate(param));
+    }
+
+
+    /**
+     * 协议管理-删除
+     *
+     * @return 协议管理-删除
+     */
+    @SysLog("协议管理-删除")
+    @DeleteMapping("/deleteById/{id}")
+    @PreAuthorize("@pms.hasPermission('sys_ruleMaking_delete')")
+    public R deleteById(@PathVariable("id")Integer id) {
+
+        return R.ok(sysRuleMakingService.removeById(id));
+    }
+
+
+    /**
+     * 查询协议信息
+     * @param id
+     * @return
+     */
+    @GetMapping("/getById")
+    public R getById(@RequestParam Integer id){
+
+        return R.ok(sysRuleMakingService.getById(id));
+    }
+
+
+
+
+
+}
+

+ 201 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/SysUserController.java

@@ -0,0 +1,201 @@
+
+package com.lxq.system.biz.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.constant.CommonConstants;
+import com.lxq.common.core.util.R;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.annotation.Inner;
+import com.lxq.common.security.util.SecurityUtils;
+import com.lxq.system.biz.dto.admin.UserDTO;
+import com.lxq.system.biz.model.SysUser;
+import com.lxq.system.biz.vo.admin.UserVO;
+import com.lxq.system.biz.constant.enums.SysErrorTypeEnum;
+import com.lxq.system.biz.service.SysUserService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * sys用户控制器
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/03
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/user")
+@Tag(description = "user", name = "用户管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class SysUserController {
+
+	private final SysUserService userService;
+
+	@Inner(value = false)
+	@GetMapping("/testJoinPage")
+	public R testJoinPage(@ParameterObject Page<UserVO> page, @ParameterObject UserDTO param) {
+
+		Page<UserVO> users = userService.testJoinPage(page, param);
+
+		return R.ok(users);
+	}
+
+
+
+
+	/**
+	 * 获取指定用户全部信息
+	 * @return 用户信息
+	 */
+	@Inner
+	@GetMapping(value = { "/info/query" })
+	public R info(@RequestParam("username") String username) {
+		SysUser user = userService.getOne(Wrappers.<SysUser>query()
+			.lambda()
+			.eq(SysUser::getUsername, username));
+		if (user == null) {
+			return R.failed(SysErrorTypeEnum.USER_EMPTY.getDescription());
+		}
+		return R.ok(userService.findUserInfo(user));
+	}
+
+	/**
+	 * 获取当前用户全部信息
+	 * @return 用户信息
+	 */
+	@GetMapping(value = { "/info" })
+	public R info() {
+		String username = SecurityUtils.getUser().getUsername();
+		SysUser user = userService.getOne(Wrappers.<SysUser>query().lambda().eq(SysUser::getUsername, username));
+		if (user == null) {
+			return R.failed(SysErrorTypeEnum.USER_EMPTY);
+		}
+		return R.ok(userService.findUserInfo(user));
+	}
+
+	/**
+	 * 通过ID查询用户信息
+	 * @param id ID
+	 * @return 用户信息
+	 */
+	@GetMapping("/getById")
+	public R getById(@RequestParam("id") Long id) {
+		return R.ok(userService.selectUserVoById(id));
+	}
+
+	/**
+	 * 查询用户信息
+	 * @param query 查询条件
+	 * @return 不为空返回用户名
+	 */
+	@Inner
+	@GetMapping("/details")
+	public R getDetails(@ParameterObject SysUser query) {
+		SysUser sysUser = userService.getOne(Wrappers.query(query), false);
+		return R.ok(sysUser == null ? null : CommonConstants.SUCCESS);
+	}
+
+	/**
+	 * 批量删除用户信息
+	 * @param ids ID
+	 * @return R
+	 */
+	@SysLog("批量删除用户信息")
+	@PostMapping("remove")
+	@PreAuthorize("@pms.hasPermission('sys_user_del')")
+	@Operation(summary = "删除用户", description = "批量删除用户信息")
+	public R userDel(@RequestBody Long[] ids) {
+		return R.ok(userService.deleteUserByIds(ids));
+	}
+
+	/**
+	 * 删除用户信息
+	 * @param id ID
+	 * @return R
+	 */
+	@SysLog("删除用户信息")
+	@DeleteMapping("removeById/{id}")
+	@PreAuthorize("@pms.hasPermission('sys_user_del')")
+	@Operation(summary = "删除用户", description = "根据ID删除用户")
+	public R removeById(@PathVariable Long id) {
+		return R.ok(userService.deleteUserByIds(new Long[]{id}));
+	}
+
+	/**
+	 * 添加用户
+	 * @param userDto 用户信息
+	 * @return success/false
+	 */
+	@SysLog("添加用户")
+	@PostMapping("add")
+	@PreAuthorize("@pms.hasPermission('sys_user_add')")
+	public R user(@RequestBody UserDTO userDto) {
+		return R.ok(userService.saveUser(userDto));
+	}
+
+	/**
+	 * 更新用户信息
+	 * @param userDto 用户信息
+	 * @return R
+	 */
+	@SysLog("更新用户信息")
+	@PutMapping("update")
+	@PreAuthorize("@pms.hasPermission('sys_user_edit')")
+	public R updateUser(@Valid @RequestBody UserDTO userDto) {
+		return R.ok(userService.updateUser(userDto));
+	}
+
+	/**
+	 * 分页查询用户
+	 * @param page 参数集
+	 * @param userDTO 查询参数列表
+	 * @return 用户集合
+	 */
+	@GetMapping("/page")
+	public R getUserPage(@ParameterObject Page<UserVO> page, @ParameterObject UserDTO userDTO) {
+		return R.ok(userService.getUsersWithRolePage(page, userDTO));
+	}
+
+	/**
+	 * 修改个人信息
+	 * @param userDto userDto
+	 * @return success/false
+	 */
+	@SysLog("修改个人信息")
+	@PutMapping("/edit")
+	@PreAuthorize("@pms.hasPermission('sys_user_edit')")
+	public R updateUserInfo(@Valid @RequestBody UserDTO userDto) {
+		return userService.updateUserInfo(userDto);
+	}
+
+	/**
+	 * 锁定指定用户
+	 * @param user 用户
+	 * @return R
+	 */
+	@PutMapping("/lock")
+	@PreAuthorize("@pms.hasPermission('sys_user_edit')")
+	public R lockUser(@RequestBody SysUser user) {
+		return userService.lockUser(user);
+	}
+
+	@PutMapping("/password")
+	public R password(@RequestBody UserDTO userDto) {
+		String username = SecurityUtils.getUser().getUsername();
+		userDto.setUsername(username);
+		return userService.changePassword(userDto);
+	}
+
+	@PostMapping("/check")
+	public R check(String password) {
+		return userService.checkPassword(password);
+	}
+
+}

+ 213 - 0
lxq-system/src/main/java/com/lxq/system/biz/controller/TokenController.java

@@ -0,0 +1,213 @@
+
+package com.lxq.system.biz.controller;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.TemporalAccessorUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.common.core.constant.CacheConstants;
+import com.lxq.common.core.constant.CommonConstants;
+import com.lxq.common.core.constant.enums.ErrorTypeEnum;
+import com.lxq.common.core.util.R;
+import com.lxq.common.core.util.SpringContextHolder;
+import com.lxq.common.log.annotation.SysLog;
+import com.lxq.common.security.util.OAuth2EndpointUtils;
+import com.lxq.common.security.util.OAuthClientException;
+import com.lxq.system.biz.model.SysOauthClientDetails;
+import com.lxq.system.biz.service.SysOauthClientDetailsService;
+import com.lxq.system.biz.domain.vo.TokenVo;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.CacheManager;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpHeaders;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.event.LogoutSuccessEvent;
+import org.springframework.security.oauth2.core.OAuth2AccessToken;
+import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
+import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
+import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
+import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
+import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
+import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.security.Principal;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author LXQ
+ * @date 2021/2/1 删除token端点
+ */
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/token")
+@Tag(description = "token", name = "令牌管理模块")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class TokenController {
+
+	private final OAuth2AuthorizationService authorizationService;
+
+	private final SysOauthClientDetailsService clientDetailsService;
+
+	private final RedisTemplate<String, Object> redisTemplate;
+
+	private final CacheManager cacheManager;
+
+	/**
+	 * 认证页面
+	 *
+	 * @param error        表单登录失败处理回调的错误信息
+	 * @param modelAndView 模型和视图
+	 * @return ModelAndView
+	 */
+	@GetMapping("/login")
+	public ModelAndView require(ModelAndView modelAndView, @RequestParam(required = false) String error) {
+		modelAndView.setViewName("ftl/login");
+		modelAndView.addObject("error", error);
+		return modelAndView;
+	}
+
+	@GetMapping("/confirm_access")
+	public ModelAndView confirm(Principal principal, ModelAndView modelAndView,
+			@RequestParam(OAuth2ParameterNames.CLIENT_ID) String clientId,
+			@RequestParam(OAuth2ParameterNames.SCOPE) String scope,
+			@RequestParam(OAuth2ParameterNames.STATE) String state) {
+
+		SysOauthClientDetails clientDetails = clientDetailsService.getClientDetailsById(clientId);
+		if (clientDetails == null) {
+			throw new OAuthClientException("clientId 不合法");
+		}
+
+		Set<String> authorizedScopes = StringUtils.commaDelimitedListToSet(clientDetails.getScope());
+		modelAndView.addObject("clientId", clientId);
+		modelAndView.addObject("state", state);
+		modelAndView.addObject("scopeList", authorizedScopes);
+		modelAndView.addObject("principalName", principal.getName());
+		modelAndView.setViewName("ftl/confirm");
+		return modelAndView;
+	}
+
+	/**
+	 * 退出并删除token
+	 *
+	 * @param authHeader Authorization
+	 */
+	@DeleteMapping("/logout")
+	public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
+		if (StrUtil.isBlank(authHeader)) {
+			return R.ok();
+		}
+
+		String tokenValue = authHeader.replace(OAuth2AccessToken.TokenType.BEARER.getValue(), StrUtil.EMPTY).trim();
+		return removeToken(new String[]{tokenValue});
+	}
+
+	/**
+	 * 校验token
+	 * @param token 令牌
+	 */
+	@SneakyThrows
+	@GetMapping("/checkToken")
+	public R<Object> checkToken(String token) {
+		if (StrUtil.isBlank(token)) {
+
+			return R.failed(ErrorTypeEnum.TOKEN_EMPTY);
+		}
+		OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);
+
+		// 如果令牌不存在 返回401
+		if (authorization == null || authorization.getAccessToken() == null) {
+
+			return R.failed(ErrorTypeEnum.TOKEN_EMPTY);
+		}
+		Map<String, Object> claims = authorization.getAccessToken().getClaims();
+		OAuth2AccessTokenResponse sendAccessTokenResponse = OAuth2EndpointUtils.sendAccessTokenResponse(authorization,
+				claims);
+
+		return R.ok(sendAccessTokenResponse.getAccessToken());
+
+	}
+
+	/**
+	 * 删除
+	 * @param tokens tokens
+	 * @return success/false
+	 */
+	@SysLog("删除用户token")
+	@PostMapping("/remove")
+	@PreAuthorize("@pms.hasPermission('sys_token_del')")
+	public R removeToken(@RequestBody String[] tokens) {
+		for (String token : tokens) {
+			OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);
+			if (authorization == null) {
+				return R.ok();
+			}
+
+			OAuth2Authorization.Token<OAuth2AccessToken> accessToken = authorization.getAccessToken();
+			if (accessToken == null || StrUtil.isBlank(accessToken.getToken().getTokenValue())) {
+				return R.ok();
+			}
+			// 清空用户信息(立即删除)
+			Objects.requireNonNull(cacheManager.getCache(CacheConstants.USER_DETAILS)).evictIfPresent(authorization.getPrincipalName());
+			// 清空access token
+			authorizationService.remove(authorization);
+			// 处理自定义退出事件,保存相关日志
+			SpringContextHolder.publishEvent(new LogoutSuccessEvent(new PreAuthenticatedAuthenticationToken(
+					authorization.getPrincipalName(), authorization.getRegisteredClientId())));
+		}
+		return R.ok();
+	}
+
+	/**
+	 * 令牌列表
+	 *
+	 * @param params 分页参数
+	 * @return r<page>
+	 */
+	@PostMapping("/page")
+	public R<Page> tokenList(@RequestBody Map<String, Object> params) {
+		// 根据分页参数获取对应数据
+		String key = String.format("%s::*", CacheConstants.PROJECT_OAUTH_ACCESS);
+		int current = MapUtil.getInt(params, CommonConstants.CURRENT);
+		int size = MapUtil.getInt(params, CommonConstants.SIZE);
+		Set<String> keys = redisTemplate.keys(key);
+		assert keys != null;
+		List<String> pages = keys.stream().skip((long) (current - 1) * size).limit(size).collect(Collectors.toList());
+		Page result = new Page(current, size);
+
+		List<TokenVo> tokenVoList = redisTemplate.opsForValue().multiGet(pages).stream().map(obj -> {
+			OAuth2Authorization authorization = (OAuth2Authorization) obj;
+			TokenVo tokenVo = new TokenVo();
+			tokenVo.setClientId(authorization.getRegisteredClientId());
+			tokenVo.setId(authorization.getId());
+			tokenVo.setUsername(authorization.getPrincipalName());
+			OAuth2Authorization.Token<OAuth2AccessToken> accessToken = authorization.getAccessToken();
+			tokenVo.setAccessToken(accessToken.getToken().getTokenValue());
+
+			String expiresAt = TemporalAccessorUtil.format(accessToken.getToken().getExpiresAt(),
+					DatePattern.NORM_DATETIME_PATTERN);
+			tokenVo.setExpiresAt(expiresAt);
+
+			String issuedAt = TemporalAccessorUtil.format(accessToken.getToken().getIssuedAt(),
+					DatePattern.NORM_DATETIME_PATTERN);
+			tokenVo.setIssuedAt(issuedAt);
+			return tokenVo;
+		}).collect(Collectors.toList());
+		result.setRecords(tokenVoList);
+		result.setTotal(keys.size());
+		return R.ok(result);
+	}
+
+}

+ 91 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/dto/SysLogDTO.java

@@ -0,0 +1,91 @@
+package com.lxq.system.biz.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author 没秃顶的码农
+ * @date 2021/10/9
+ * <p>
+ * 日志查询传输对象
+ */
+@Data
+@Schema(description = "日志查询对象")
+public class SysLogDTO {
+
+	/**
+	 * 编号
+	 */
+	private Long id;
+
+	/**
+	 * 日志类型
+	 */
+	@NotBlank(message = "日志类型不能为空")
+	private String logType;
+
+	/**
+	 * 日志标题
+	 */
+	@NotBlank(message = "日志标题不能为空")
+	private String title;
+
+	/**
+	 * 创建者
+	 */
+	private String createBy;
+
+	/**
+	 * 更新时间
+	 */
+	private LocalDateTime updateTime;
+
+	/**
+	 * 操作IP地址
+	 */
+	private String remoteAddr;
+
+	/**
+	 * 用户代理
+	 */
+	private String userAgent;
+
+	/**
+	 * 请求URI
+	 */
+	private String requestUri;
+
+	/**
+	 * 操作方式
+	 */
+	private String method;
+
+	/**
+	 * 操作提交的数据
+	 */
+	private String params;
+
+	/**
+	 * 执行时间
+	 */
+	private Long time;
+
+	/**
+	 * 异常信息
+	 */
+	private String exception;
+
+	/**
+	 * 服务ID
+	 */
+	private String serviceId;
+
+	/**
+	 * 创建时间区间 [开始时间,结束时间]
+	 */
+	private LocalDateTime[] createTime;
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/dto/SysRuleMakingDTO.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.domain.dto;
+
+import lombok.Data;
+
+/**
+ * @author debao.yang
+ * @createTime 2024-08-27 14:20
+ */
+@Data
+public class SysRuleMakingDTO {
+
+    /**
+     * 标题
+     */
+    private String title;
+}

+ 42 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/dto/UserDTO.java

@@ -0,0 +1,42 @@
+package com.lxq.system.biz.domain.dto;
+
+import com.lxq.system.biz.model.SysUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * @author 没秃顶的码农
+ * @date 2023/11/5
+ */
+@Data
+@Schema(description = "系统用户传输对象")
+@EqualsAndHashCode(callSuper = true)
+public class UserDTO extends SysUser {
+
+	/**
+	 * 角色ID
+	 */
+	@Schema(description = "角色id集合")
+	private List<Long> role;
+
+	/**
+	 * 部门id
+	 */
+	@Schema(description = "部门id")
+	private Long deptId;
+
+	/**
+	 * 岗位ID
+	 */
+	private List<Long> post;
+
+	/**
+	 * 新密码
+	 */
+	@Schema(description = "新密码")
+	private String newPwd;
+
+}

+ 35 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/dto/UserInfo.java

@@ -0,0 +1,35 @@
+package com.lxq.system.biz.domain.dto;
+
+import com.lxq.system.biz.model.SysUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author 没秃顶的码农
+ * @date 2023/11/11
+ */
+@Data
+@Schema(description = "用户信息")
+public class UserInfo implements Serializable {
+
+	/**
+	 * 用户基本信息
+	 */
+	@Schema(description = "用户基本信息")
+	private SysUser sysUser;
+
+	/**
+	 * 权限标识集合
+	 */
+	@Schema(description = "权限标识集合")
+	private String[] permissions;
+
+	/**
+	 * 角色集合
+	 */
+	@Schema(description = "角色标识集合")
+	private Long[] roles;
+
+}

+ 65 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/vo/RoleExcelVO.java

@@ -0,0 +1,65 @@
+package com.lxq.system.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.lxq.common.excel.annotation.ExcelLine;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 角色excel 对应的实体
+ *
+ * @author 没秃顶的码农
+ * @date 2022/3/21
+ */
+@Data
+@ColumnWidth(30)
+public class RoleExcelVO implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 导入时候回显行号
+	 */
+	@ExcelLine
+	@ExcelIgnore
+	private Long lineNum;
+
+	/**
+	 * 主键ID
+	 */
+	@ExcelProperty("角色编号")
+	private Long roleId;
+
+	/**
+	 * 角色名称
+	 */
+	@NotBlank(message = "角色名称不能为空")
+	@ExcelProperty("角色名称")
+	private String roleName;
+
+	/**
+	 * 角色标识
+	 */
+	@NotBlank(message = "角色标识不能为空")
+	@ExcelProperty("角色标识")
+	private String roleCode;
+
+	/**
+	 * 角色描述
+	 */
+	@NotBlank(message = "角色描述不能为空")
+	@ExcelProperty("角色描述")
+	private String roleDesc;
+
+	/**
+	 * 创建时间
+	 */
+	@ExcelProperty(value = "创建时间")
+	private LocalDateTime createTime;
+
+}

+ 28 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/vo/RoleVO.java

@@ -0,0 +1,28 @@
+package com.lxq.system.biz.domain.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author 没秃顶的码农
+ * @date 2021/2/10
+ */
+@Data
+@Schema(description = "前端角色展示对象")
+public class RoleVO {
+
+	/**
+	 * 角色id
+	 */
+	@NotNull(message = "角色id不能为空")
+	private Long roleId;
+
+	/**
+	 * 菜单列表
+	 */
+	@NotBlank(message = "菜单列表不能为空")
+	private String menuIds;
+
+}

+ 17 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/vo/SysFeignInterfaceConfigVO.java

@@ -0,0 +1,17 @@
+package com.lxq.system.biz.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author debao.yang
+ * @createTime 2024-11-28 10:00
+ */
+@Data
+public class SysFeignInterfaceConfigVO {
+
+    private Integer paramType;
+
+    private String ifCode;
+
+    private String name;
+}

+ 28 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/vo/TokenVo.java

@@ -0,0 +1,28 @@
+package com.lxq.system.biz.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 前端展示令牌管理
+ *
+ * @author 没秃顶的码农
+ * @date 2022/6/2
+ */
+@Data
+public class TokenVo {
+
+	private String id;
+
+	private Long userId;
+
+	private String clientId;
+
+	private String username;
+
+	private String accessToken;
+
+	private String issuedAt;
+
+	private String expiresAt;
+
+}

+ 108 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/vo/UserExcelVO.java

@@ -0,0 +1,108 @@
+package com.lxq.system.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.lxq.common.excel.annotation.ExcelLine;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 用户excel 对应的实体
+ *
+ * @author 没秃顶的码农
+ * @date 2021/8/4
+ */
+@Data
+@ColumnWidth(30)
+public class UserExcelVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 导入时候回显行号
+	 */
+	@ExcelLine
+	@ExcelIgnore
+	private Long lineNum;
+
+	/**
+	 * 主键ID
+	 */
+	@ExcelProperty("用户编号")
+	private Long userId;
+
+	/**
+	 * 用户名
+	 */
+	@NotBlank(message = "用户名不能为空")
+	@ExcelProperty("用户名")
+	private String username;
+
+	/**
+	 * 手机号
+	 */
+	@NotBlank(message = "手机号不能为空")
+	@ExcelProperty("手机号")
+	private String phone;
+
+	/**
+	 * 手机号
+	 */
+	@NotBlank(message = "昵称不能为空")
+	@ExcelProperty("昵称")
+	private String nickname;
+
+	/**
+	 * 手机号
+	 */
+	@NotBlank(message = "姓名不能为空")
+	@ExcelProperty("姓名")
+	private String name;
+
+	/**
+	 * 手机号
+	 */
+	@NotBlank(message = "邮箱不能为空")
+	@ExcelProperty("邮箱")
+	private String email;
+
+	/**
+	 * 部门名称
+	 */
+	@NotBlank(message = "部门名称不能为空")
+	@ExcelProperty("部门名称")
+	private String deptName;
+
+	/**
+	 * 角色列表
+	 */
+	@NotBlank(message = "角色不能为空")
+	@ExcelProperty("角色")
+	private String roleNameList;
+
+	/**
+	 * 角色列表
+	 */
+	@NotBlank(message = "岗位不能为空")
+	@ExcelProperty("岗位名称")
+	private String postNameList;
+
+	/**
+	 * 锁定标记
+	 */
+	@ExcelProperty("锁定标记,0:正常,9:已锁定")
+	private String lockFlag;
+
+	/**
+	 * 创建时间
+	 */
+	@ExcelProperty(value = "创建时间")
+	private LocalDateTime createTime;
+
+}

+ 151 - 0
lxq-system/src/main/java/com/lxq/system/biz/domain/vo/UserVO.java

@@ -0,0 +1,151 @@
+package com.lxq.system.biz.domain.vo;
+
+import com.lxq.system.biz.model.SysPost;
+import com.lxq.system.biz.model.SysRole;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 用户vo
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/29
+ */
+@Data
+@Schema(description = "前端用户展示对象")
+public class UserVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键ID
+	 */
+	@Schema(description = "主键")
+	private Long userId;
+
+	/**
+	 * 用户名
+	 */
+	@Schema(description = "用户名")
+	private String username;
+
+	/**
+	 * 密码
+	 */
+	@Schema(description = "密码")
+	private String password;
+
+	/**
+	 * 随机盐
+	 */
+	@Schema(description = "随机盐")
+	private String salt;
+
+	/**
+	 * 微信openid
+	 */
+	@Schema(description = "微信open id")
+	private String wxOpenid;
+
+	/**
+	 * QQ openid
+	 */
+	@Schema(description = "qq open id")
+	private String qqOpenid;
+
+	/**
+	 * gitee openid
+	 */
+	@Schema(description = "gitee open id")
+	private String giteeOpenId;
+
+	/**
+	 * 开源中国 openid
+	 */
+	@Schema(description = "开源中国 open id")
+	private String oscOpenId;
+
+	/**
+	 * 创建时间
+	 */
+	@Schema(description = "创建时间")
+	private LocalDateTime createTime;
+
+	/**
+	 * 修改时间
+	 */
+	@Schema(description = "修改时间")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 0-正常,1-删除
+	 */
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+	/**
+	 * 锁定标记
+	 */
+	@Schema(description = "锁定标记,0:正常,9:已锁定")
+	private String lockFlag;
+
+	/**
+	 * 手机号
+	 */
+	@Schema(description = "手机号")
+	private String phone;
+
+	/**
+	 * 头像
+	 */
+	@Schema(description = "头像")
+	private String avatar;
+
+	/**
+	 * 部门ID
+	 */
+	@Schema(description = "所属部门")
+	private Long deptId;
+
+	/**
+	 * 部门名称
+	 */
+	@Schema(description = "所属部门名称")
+	private String deptName;
+
+	/**
+	 * 角色列表
+	 */
+	@Schema(description = "拥有的角色列表")
+	private List<SysRole> roleList;
+
+	/**
+	 * 岗位列表
+	 */
+	private List<SysPost> postList;
+
+	/**
+	 * 昵称
+	 */
+	@Schema(description = "昵称")
+	private String nickname;
+
+	/**
+	 * 姓名
+	 */
+	@Schema(description = "姓名")
+	private String name;
+
+	/**
+	 * 邮箱
+	 */
+	@Schema(description = "邮箱")
+	private String email;
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysDeptMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysDept;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 部门管理 服务类
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/06
+ */
+@Mapper
+public interface SysDeptMapper extends BaseMapper<SysDept> {
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysDictItemMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysDictItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 字典项
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
+
+}

+ 18 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysDictMapper.java

@@ -0,0 +1,18 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysDict;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 字典表 Mapper 接口
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/29
+ */
+@Mapper
+public interface SysDictMapper extends BaseMapper<SysDict> {
+
+}

+ 17 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysFileMapper.java

@@ -0,0 +1,17 @@
+
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 文件管理
+ *
+ * @author 没秃顶的码农
+ * @date 2019-06-18 17:18:42
+ */
+@Mapper
+public interface SysFileMapper extends BaseMapper<SysFile> {
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysLogMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysLog;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 日志表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysLogMapper extends BaseMapper<SysLog> {
+
+}

+ 25 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysMenuMapper.java

@@ -0,0 +1,25 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysMenu;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 菜单权限表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysMenuMapper extends BaseMapper<SysMenu> {
+
+	/**
+	 * 通过角色编号查询菜单
+	 * @param roleId 角色ID
+	 * @return
+	 */
+	List<SysMenu> listMenusByRoleId(Long roleId);
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysOauthClientDetailsMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysOauthClientDetails;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 客户端
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysOauthClientDetailsMapper extends BaseMapper<SysOauthClientDetails> {
+
+}

+ 25 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysPostMapper.java

@@ -0,0 +1,25 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysPost;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 岗位信息表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/06
+ */
+@Mapper
+public interface SysPostMapper extends BaseMapper<SysPost> {
+
+	/**
+	 * 通过用户ID,查询岗位信息
+	 * @param userId 用户id
+	 * @return 岗位信息
+	 */
+	List<SysPost> listPostsByUserId(Long userId);
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysPublicParamMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysPublicParam;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 公共参数配置
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysPublicParamMapper extends BaseMapper<SysPublicParam> {
+
+}

+ 25 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysRoleMapper.java

@@ -0,0 +1,25 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysRole;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 基本系统角色
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysRoleMapper extends BaseMapper<SysRole> {
+
+	/**
+	 * 通过用户ID,查询角色信息
+	 * @param userId
+	 * @return
+	 */
+	List<SysRole> listRolesByUserId(Long userId);
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysRoleMenuMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysRoleMenu;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 角色菜单表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
+
+}

+ 17 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysRuleMakingMapper.java

@@ -0,0 +1,17 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysRuleMaking;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 客小爽协议规则表(LkbRuleMaking)表数据库访问层
+ *
+ * @author 系统
+ * @since 2023-12-15 12:16:31
+ */
+@Mapper
+public interface SysRuleMakingMapper extends BaseMapper<SysRuleMaking> {
+
+}
+

+ 52 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysUserMapper.java

@@ -0,0 +1,52 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lxq.system.biz.domain.dto.UserDTO;
+import com.lxq.system.biz.domain.vo.UserVO;
+import com.lxq.system.biz.model.SysUser;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 后台用户表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysUserMapper extends BaseMapper<SysUser> {
+
+	/**
+	 * 通过用户名查询用户信息(含有角色信息)
+	 * @param username 用户名
+	 * @return userVo
+	 */
+	UserVO getUserVoByUsername(String username);
+
+	/**
+	 * 分页查询用户信息(含角色)
+	 * @param page 分页
+	 * @param userDTO 查询参数
+	 * @return list
+	 */
+	IPage<UserVO> getUserVosPage(Page page, @Param("query") UserDTO userDTO);
+
+	/**
+	 * 通过ID查询用户信息
+	 * @param id 用户ID
+	 * @return userVo
+	 */
+	UserVO getUserVoById(Long id);
+
+	/**
+	 * 查询用户列表
+	 * @param userDTO 查询条件
+	 * @return
+	 */
+	List<UserVO> selectVoList(@Param("query") UserDTO userDTO);
+
+}

+ 19 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysUserPostMapper.java

@@ -0,0 +1,19 @@
+
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysUserPost;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户岗位 Mapper 接口
+ * </p>
+ *
+ * @author fxz
+ * @since 2022/3/19
+ */
+@Mapper
+public interface SysUserPostMapper extends BaseMapper<SysUserPost> {
+
+}

+ 16 - 0
lxq-system/src/main/java/com/lxq/system/biz/mapper/SysUserRoleMapper.java

@@ -0,0 +1,16 @@
+package com.lxq.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lxq.system.biz.model.SysUserRole;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户角色表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/28
+ */
+@Mapper
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+}

+ 95 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysDept.java

@@ -0,0 +1,95 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 部门管理
+ * </p>
+ *
+ * @author LXQ
+ * @since 2021-01-22
+ */
+@Data
+@Schema(description = "部门")
+@EqualsAndHashCode(callSuper = true)
+public class SysDept extends Model<SysDept> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	@TableId(value = "dept_id", type = IdType.AUTO)
+	@Schema(description = "部门id")
+	private Long deptId;
+
+	/**
+	 * 部门名称
+	 */
+	@NotBlank(message = "部门名称不能为空")
+	@Schema(description = "部门名称")
+	private String name;
+
+	/**
+	 * 排序
+	 */
+	@NotNull(message = "排序值不能为空")
+	@Schema(description = "排序值")
+	private Integer sortOrder;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 创建时间
+	 */
+	@Schema(description = "创建时间")
+	@TableField(fill = FieldFill.INSERT)
+	private LocalDateTime createTime;
+
+	/**
+	 * 修改时间
+	 */
+	@Schema(description = "修改时间")
+	@TableField(fill = FieldFill.UPDATE)
+	private LocalDateTime updateTime;
+
+	/**
+	 * 父级部门id
+	 */
+	@Schema(description = "父级部门id")
+	private Long parentId;
+
+	/**
+	 * 是否删除 1:已删除 0:正常
+	 */
+	@TableLogic
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	@TableField(fill = FieldFill.INSERT)
+	private String delFlag;
+
+}

+ 96 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysDict.java

@@ -0,0 +1,96 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 字典表
+ *
+ * @author 没秃顶的码农
+ * @date 2023/03/19
+ */
+@Data
+@Schema(description = "字典类型")
+@EqualsAndHashCode(callSuper = true)
+public class SysDict extends Model<SysDict> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 编号
+	 */
+	@TableId(type = IdType.AUTO)
+	@Schema(description = "字典编号")
+	private Long id;
+
+	/**
+	 * 类型
+	 */
+	@Schema(description = "字典类型")
+	private String dictType;
+
+	/**
+	 * 描述
+	 */
+	@Schema(description = "字典描述")
+	private String description;
+
+	/**
+	 * 创建时间
+	 */
+	@Schema(description = "创建时间")
+	@TableField(fill = FieldFill.INSERT)
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@Schema(description = "更新时间")
+	@TableField(fill = FieldFill.UPDATE)
+	private LocalDateTime updateTime;
+
+	/**
+	 * 是否是系统内置
+	 */
+	@Schema(description = "是否系统内置")
+	private String systemFlag;
+
+	/**
+	 * 备注信息
+	 */
+	@Schema(description = "备注信息")
+	private String remarks;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 删除标记
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+}

+ 121 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysDictItem.java

@@ -0,0 +1,121 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+
+/**
+ * 字典项
+ *
+ * @author 没秃顶的码农
+ * @date 2023/03/19
+ */
+@Data
+@Schema(description = "字典项")
+@EqualsAndHashCode(callSuper = true)
+public class SysDictItem extends Model<SysDictItem> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 编号
+	 */
+	@TableId(type = IdType.AUTO)
+	@Schema(description = "字典项id")
+	private Long id;
+
+	/**
+	 * 所属字典类id
+	 */
+	@Schema(description = "所属字典类id")
+	private Long dictId;
+
+	/**
+	 * 数据值
+	 */
+	@Schema(description = "数据值")
+	@JsonProperty(value = "value")
+	private String itemValue;
+
+	/**
+	 * 标签名
+	 */
+	@Schema(description = "标签名")
+	private String label;
+
+	/**
+	 * 类型
+	 */
+	@Schema(description = "类型")
+	private String dictType;
+
+	/**
+	 * 描述
+	 */
+	@Schema(description = "描述")
+	private String description;
+
+	/**
+	 * 排序(升序)
+	 */
+	@Schema(description = "排序值,默认升序")
+	private Integer sortOrder;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "更新时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 备注信息
+	 */
+	@Schema(description = "备注信息")
+	private String remarks;
+
+	/**
+	 * 删除标记
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+}

+ 107 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysFile.java

@@ -0,0 +1,107 @@
+
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+
+/**
+ * 文件管理
+ *
+ * @author 没秃顶的码农
+ * @date 2023-06-18 17:18:42
+ */
+@Data
+@Schema(description = "文件")
+@EqualsAndHashCode(callSuper = true)
+public class SysFile extends Model<SysFile> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 编号
+	 */
+	@TableId(type = IdType.AUTO)
+	@Schema(description = "文件编号")
+	private Long id;
+
+	/**
+	 * 文件名
+	 */
+	@Schema(description = "文件名")
+	private String fileName;
+
+	/**
+	 * 标题
+	 */
+	@Schema(description = "标题")
+	private String title;
+
+	/**
+	 * 原文件名
+	 */
+	@Schema(description = "原始文件名")
+	private String original;
+
+	/**
+	 * 容器名称
+	 */
+	@Schema(description = "存储桶名称")
+	private String bucketName;
+
+	/**
+	 * 文件类型
+	 */
+	@Schema(description = "文件类型")
+	private String type;
+
+	/**
+	 * 文件大小
+	 */
+	@Schema(description = "文件大小")
+	private Long fileSize;
+
+	/**
+	 * 上传人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建者")
+	private String createBy;
+
+	/**
+	 * 上传时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "更新者")
+	private String updateBy;
+
+	/**
+	 * 更新时间
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "更新时间")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 删除标识:1-删除,0-正常
+	 */
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+}

+ 129 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysInterfaceConfig.java

@@ -0,0 +1,129 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 通道参数配置表(KxsInterfaceConfig)表实体类
+ *
+ * @author 系统
+ * @since 2024-07-12 16:45:55
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SysInterfaceConfig extends Model<SysInterfaceConfig> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    @TableLogic
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 添加人
+     */
+    @Schema(description = "添加人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+
+    /**
+     * 修改人
+     */
+    @Schema(description = "修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+
+    /**
+     * 备注
+     */
+    @Schema(description = "备注")
+    private String remark;
+
+    /**
+     * 名称
+     */
+    @Schema(description = "名称")
+    private String name;
+
+
+    /**
+     * 参数json格式
+     */
+    @Schema(description = "参数json格式")
+    private String params;
+
+
+    /**
+     * 状态: 0-停用, 1-启用
+     */
+    @Schema(description = "状态: 0-停用, 1-启用")
+    private Integer status;
+
+
+    /**
+     * 类型 0-代付平台 1-支付平台
+     */
+    @Schema(description = "类型 0-代付平台 1-支付平台")
+    private Integer paramType;
+
+    /**
+     * 标识
+     */
+    @Schema(description = "标识")
+    private String ifCode;
+
+
+
+
+}
+

+ 149 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysLog.java

@@ -0,0 +1,149 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 日志表
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-11-20
+ */
+@Data
+@Schema(description = "日志")
+public class SysLog extends Model<SysLog> implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 编号
+	 */
+	@TableId(type = IdType.ASSIGN_ID)
+	@ExcelProperty("日志编号")
+	@Schema(description = "日志编号")
+	private Long id;
+
+	/**
+	 * 日志类型
+	 */
+	@NotBlank(message = "日志类型不能为空")
+	@ExcelProperty("日志类型(0-正常 9-错误)")
+	@Schema(description = "日志类型")
+	private String logType;
+
+	/**
+	 * 日志标题
+	 */
+	@NotBlank(message = "日志标题不能为空")
+	@ExcelProperty("日志标题")
+	@Schema(description = "日志标题")
+	private String title;
+
+	/**
+	 * 创建者
+	 */
+	@ExcelProperty("创建人")
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 创建时间
+	 */
+	@ExcelProperty("创建时间")
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@ExcelIgnore
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "更新时间")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 操作IP地址
+	 */
+	@ExcelProperty("操作ip地址")
+	@Schema(description = "操作ip地址")
+	private String remoteAddr;
+
+	/**
+	 * 用户代理
+	 */
+	@Schema(description = "用户代理")
+	private String userAgent;
+
+	/**
+	 * 请求URI
+	 */
+	@ExcelProperty("浏览器")
+	@Schema(description = "请求uri")
+	private String requestUri;
+
+	/**
+	 * 操作方式
+	 */
+	@ExcelProperty("操作方式")
+	@Schema(description = "操作方式")
+	private String method;
+
+	/**
+	 * 操作提交的数据
+	 */
+	@ExcelProperty("提交数据")
+	@Schema(description = "提交数据")
+	private String params;
+
+	/**
+	 * 执行时间
+	 */
+	@ExcelProperty("执行时间")
+	@Schema(description = "方法执行时间")
+	private Long time;
+
+	/**
+	 * 异常信息
+	 */
+	@ExcelProperty("异常信息")
+	@Schema(description = "异常信息")
+	private String exception;
+
+	/**
+	 * 服务ID
+	 */
+	@ExcelProperty("应用标识")
+	@Schema(description = "应用标识")
+	private String serviceId;
+
+	/**
+	 * 删除标记
+	 */
+	@ExcelIgnore
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+	/**
+	 * 动态表名后缀
+	 */
+	@TableField(exist = false)
+	private String tableSuffix;
+
+}

+ 139 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysMenu.java

@@ -0,0 +1,139 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 菜单权限表
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-11-08
+ */
+@Data
+@Schema(description = "菜单")
+@EqualsAndHashCode(callSuper = true)
+public class SysMenu extends Model<SysMenu> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 菜单ID
+	 */
+	@TableId(value = "menu_id", type = IdType.AUTO)
+	@Schema(description = "菜单id")
+	private Long menuId;
+
+	/**
+	 * 菜单名称
+	 */
+	@NotBlank(message = "菜单名称不能为空")
+	@Schema(description = "菜单名称")
+	private String name;
+
+	/**
+	 * 菜单名称
+	 */
+	@Schema(description = "菜单名称")
+	private String enName;
+
+	/**
+	 * 菜单权限标识
+	 */
+	@Schema(description = "菜单权限标识")
+	private String permission;
+
+	/**
+	 * 父菜单ID
+	 */
+	@NotNull(message = "菜单父ID不能为空")
+	@Schema(description = "菜单父id")
+	private Long parentId;
+
+	/**
+	 * 图标
+	 */
+	@Schema(description = "菜单图标")
+	private String icon;
+
+	/**
+	 * 前端路由标识路径,默认和 comment 保持一致 过期
+	 */
+	@Schema(description = "前端路由标识路径")
+	private String path;
+
+	/**
+	 * 菜单显示隐藏控制
+	 */
+	@Schema(description = "菜单是否显示")
+	private String visible;
+
+	/**
+	 * 排序值
+	 */
+	@Schema(description = "排序值")
+	private Integer sortOrder;
+
+	/**
+	 * 菜单类型 (0菜单 1按钮)
+	 */
+	@NotNull(message = "菜单类型不能为空")
+	@Schema(description = "菜单类型,0:菜单 1:按钮")
+	private String menuType;
+
+	/**
+	 * 路由缓冲
+	 */
+	@Schema(description = "路由缓冲")
+	private String keepAlive;
+
+	@Schema(description = "菜单是否内嵌")
+	private String embedded;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "更新时间")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 0--正常 1--删除
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+}

+ 142 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysOauthClientDetails.java

@@ -0,0 +1,142 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 客户端信息
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-05-15
+ */
+@Data
+@Schema(description = "客户端信息")
+@EqualsAndHashCode(callSuper = true)
+public class SysOauthClientDetails extends Model<SysOauthClientDetails> implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	@TableId(value = "id", type = IdType.AUTO)
+	@Schema(description = "id")
+	private Long id;
+
+	/**
+	 * 客户端ID
+	 */
+	@NotBlank(message = "client_id 不能为空")
+	@Schema(description = "客户端id")
+	private String clientId;
+
+	/**
+	 * 客户端密钥
+	 */
+	@NotBlank(message = "client_secret 不能为空")
+	@Schema(description = "客户端密钥")
+	private String clientSecret;
+
+	/**
+	 * 资源ID
+	 */
+	@Schema(description = "资源id列表")
+	private String resourceIds;
+
+	/**
+	 * 作用域
+	 */
+	@NotBlank(message = "scope 不能为空")
+	@Schema(description = "作用域")
+	private String scope;
+
+	/**
+	 * 授权方式[A,B,C]
+	 */
+	@Schema(description = "授权方式")
+	private String[] authorizedGrantTypes;
+
+	/**
+	 * 回调地址
+	 */
+	@Schema(description = "回调地址")
+	private String webServerRedirectUri;
+
+	/**
+	 * 权限
+	 */
+	@Schema(description = "权限列表")
+	private String authorities;
+
+	/**
+	 * 请求令牌有效时间
+	 */
+	@Schema(description = "请求令牌有效时间")
+	private Integer accessTokenValidity;
+
+	/**
+	 * 刷新令牌有效时间
+	 */
+	@Schema(description = "刷新令牌有效时间")
+	private Integer refreshTokenValidity;
+
+	/**
+	 * 扩展信息
+	 */
+	@Schema(description = "扩展信息")
+	private String additionalInformation;
+
+	/**
+	 * 是否自动放行
+	 */
+	@Schema(description = "是否自动放行")
+	private String autoapprove;
+
+	/**
+	 * 删除标记
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "更新时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime updateTime;
+
+}

+ 99 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysPost.java

@@ -0,0 +1,99 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+
+/**
+ * 岗位信息表
+ *
+ * @author fxz
+ * @date 2022-03-26 12:50:43
+ */
+@Data
+@TableName("sys_post")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "岗位信息表")
+public class SysPost extends Model<SysPost> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 岗位ID
+	 */
+	@TableId(value = "post_id", type = IdType.AUTO)
+	@Schema(description = "岗位ID")
+	private Long postId;
+
+	/**
+	 * 岗位编码
+	 */
+	@NotBlank(message = "岗位编码不能为空")
+	@Schema(description = "岗位编码")
+	private String postCode;
+
+	/**
+	 * 岗位名称
+	 */
+	@NotBlank(message = "岗位名称不能为空")
+	@Schema(description = "岗位名称")
+	private String postName;
+
+	/**
+	 * 岗位排序
+	 */
+	@NotNull(message = "排序值不能为空")
+	@Schema(description = "岗位排序")
+	private Integer postSort;
+
+	/**
+	 * 岗位描述
+	 */
+	@Schema(description = "岗位描述")
+	private String remark;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 是否删除 -1:已删除 0:正常
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "是否删除  -1:已删除  0:正常")
+	private String delFlag;
+
+	/**
+	 * 创建时间
+	 */
+	@Schema(description = "创建时间")
+	@TableField(fill = FieldFill.INSERT)
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@Schema(description = "更新时间")
+	@TableField(fill = FieldFill.UPDATE)
+	private LocalDateTime updateTime;
+
+}

+ 114 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysPublicParam.java

@@ -0,0 +1,114 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 公共参数配置
+ *
+ * @author Lucky
+ * @date 2023-04-29
+ */
+@Data
+@Schema(description = "公共参数")
+@EqualsAndHashCode(callSuper = true)
+public class SysPublicParam extends Model<SysPublicParam> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 编号
+	 */
+	@TableId(type = IdType.AUTO)
+	@Schema(description = "公共参数编号")
+	private Long publicId;
+
+	/**
+	 * 公共参数名称
+	 */
+	@Schema(description = "公共参数名称", example = "公共参数名称")
+	private String publicName;
+
+	/**
+	 * 公共参数地址值,英文大写+下划线
+	 */
+	@Schema(description = "键[英文大写+下划线]", example = "PIGX_PUBLIC_KEY")
+	private String publicKey;
+
+	/**
+	 * 值
+	 */
+	@Schema(description = "值", example = "999")
+	private String publicValue;
+
+	/**
+	 * 状态(1有效;2无效;)
+	 */
+	@Schema(description = "标识[1有效;2无效]", example = "1")
+	private String status;
+
+	/**
+	 * 公共参数编码
+	 */
+	@Schema(description = "编码", example = "^(PIG|PIGX)$")
+	private String validateCode;
+
+	/**
+	 * 是否是系统内置
+	 */
+	@Schema(description = "是否是系统内置")
+	private String systemFlag;
+
+	/**
+	 * 配置类型:0-默认;1-检索;2-原文;3-报表;4-安全;5-文档;6-消息;9-其他
+	 */
+	@Schema(description = "类型[1-检索;2-原文...]", example = "1")
+	private String publicType;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 删除标记
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime createTime;
+
+	/**
+	 * 更新时间
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "更新时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime updateTime;
+
+}

+ 80 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysRole.java

@@ -0,0 +1,80 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 角色表
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-10-29
+ */
+@Data
+@Schema(description = "角色")
+@EqualsAndHashCode(callSuper = true)
+public class SysRole extends Model<SysRole> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	@TableId(value = "role_id", type = IdType.AUTO)
+	@Schema(description = "角色编号")
+	private Long roleId;
+
+	@NotBlank(message = "角色名称不能为空")
+	@Schema(description = "角色名称")
+	private String roleName;
+
+	@NotBlank(message = "角色标识不能为空")
+	@Schema(description = "角色标识")
+	private String roleCode;
+
+	@Schema(description = "角色描述")
+	private String roleDesc;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 创建时间
+	 */
+	@Schema(description = "创建时间")
+	@TableField(fill = FieldFill.INSERT)
+	private LocalDateTime createTime;
+
+	/**
+	 * 修改时间
+	 */
+	@Schema(description = "修改时间")
+	@TableField(fill = FieldFill.UPDATE)
+	private LocalDateTime updateTime;
+
+	/**
+	 * 删除标识(0-正常,1-删除)
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+}

+ 38 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysRoleMenu.java

@@ -0,0 +1,38 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * <p>
+ * 角色菜单表
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-10-29
+ */
+@Data
+@Schema(description = "角色菜单")
+@EqualsAndHashCode(callSuper = true)
+public class SysRoleMenu extends Model<SysRoleMenu> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 角色ID
+	 */
+	@Schema(description = "角色id")
+	private Long roleId;
+
+	/**
+	 * 菜单ID
+	 */
+	@Schema(description = "菜单id")
+	private Long menuId;
+
+}

+ 94 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysRuleMaking.java

@@ -0,0 +1,94 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 客小爽协议规则表(SysRuleMaking)表实体类
+ *
+ * @author 系统
+ * @since 2023-12-15 12:16:31
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SysRuleMaking extends Model<SysRuleMaking> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 内容
+     */
+    @Schema(description = "内容")
+    private String contents;
+
+
+    /**
+     * 标题
+     */
+    @Schema(description = "标题")
+    private String title;
+
+
+    /**
+     * 类型 0注册协议 1服务协议 2创客守则 3提现规则
+     */
+    @Schema(description = "类型 0注册协议 1服务协议 2创客守则 3提现规则")
+    private Integer ruleType;
+
+
+
+
+}
+

+ 164 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysUser.java

@@ -0,0 +1,164 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 用户表
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-10-29
+ */
+@Data
+@Schema(description = "用户")
+public class SysUser implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键ID
+	 */
+	@TableId(value = "user_id", type = IdType.AUTO)
+	@Schema(description = "主键id")
+	private Long userId;
+
+	/**
+	 * 用户名
+	 */
+	@Schema(description = "用户名")
+	private String username;
+
+	/**
+	 * 密码
+	 */
+	@Schema(description = "密码")
+	private String password;
+
+	/**
+	 * 随机盐
+	 */
+	@JsonIgnore
+	@Schema(description = "随机盐")
+	private String salt;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建人")
+	private String createBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改人")
+	private String updateBy;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "创建时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime createTime;
+
+	/**
+	 * 修改时间
+	 */
+	@TableField(fill = FieldFill.UPDATE)
+	@Schema(description = "修改时间")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 0-正常,1-删除
+	 */
+	@TableLogic
+	@TableField(fill = FieldFill.INSERT)
+	@Schema(description = "删除标记,1:已删除,0:正常")
+	private String delFlag;
+
+	/**
+	 * 锁定标记
+	 */
+	@Schema(description = "锁定标记")
+	private String lockFlag;
+
+	/**
+	 * 手机号
+	 */
+	@Schema(description = "手机号")
+	private String phone;
+
+	/**
+	 * 头像
+	 */
+	@Schema(description = "头像地址")
+	private String avatar;
+
+	/**
+	 * 部门ID
+	 */
+	@Schema(description = "用户所属部门id")
+	private Long deptId;
+
+	/**
+	 * 微信openid
+	 */
+	@Schema(description = "微信openid")
+	private String wxOpenid;
+
+	/**
+	 * 微信小程序openId
+	 */
+	@Schema(description = "微信小程序openid")
+	private String miniOpenid;
+
+	/**
+	 * QQ openid
+	 */
+	@Schema(description = "QQ openid")
+	private String qqOpenid;
+
+	/**
+	 * 码云唯一标识
+	 */
+	@Schema(description = "码云唯一标识")
+	private String giteeLogin;
+
+	/**
+	 * 开源中国唯一标识
+	 */
+	@Schema(description = "开源中国唯一标识")
+	private String oscId;
+
+	/**
+	 * 昵称
+	 */
+	@Schema(description = "昵称")
+	private String nickname;
+
+	/**
+	 * 姓名
+	 */
+	@Schema(description = "姓名")
+	private String name;
+
+	/**
+	 * 邮箱
+	 */
+	@Schema(description = "邮箱")
+	private String email;
+
+}

+ 32 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysUserPost.java

@@ -0,0 +1,32 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 用户岗位表
+ * </p>
+ *
+ * @author fxz
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SysUserPost extends Model<SysUserPost> {
+
+
+	/**
+	 * 用户ID
+	 */
+	@Schema(description = "用户id")
+	private Long userId;
+
+	/**
+	 * 岗位ID
+	 */
+	@Schema(description = "岗位id")
+	private Long postId;
+
+}

+ 42 - 0
lxq-system/src/main/java/com/lxq/system/biz/model/SysUserRole.java

@@ -0,0 +1,42 @@
+package com.lxq.system.biz.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * <p>
+ * 用户角色表
+ * </p>
+ *
+ * @author 没秃顶的码农
+ * @since 2023-10-29
+ */
+@Data
+@Schema(description = "用户角色")
+@EqualsAndHashCode(callSuper = true)
+public class SysUserRole extends Model<SysUserRole> {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 用户ID
+	 */
+	@Schema(description = "用户id")
+	private Long userId;
+
+	/**
+	 * 角色ID
+	 */
+	@Schema(description = "角色id")
+	private Long roleId;
+
+}

+ 10 - 19
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/service/LxqRemoteRegisteredClientRepository.java → lxq-system/src/main/java/com/lxq/system/biz/security/service/LxqRemoteRegisteredClientRepository.java

@@ -1,12 +1,11 @@
-package com.lxq.common.security.service;
+package com.lxq.system.biz.security.service;
 
 import cn.hutool.core.util.BooleanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.lxq.common.core.constant.CacheConstants;
 import com.lxq.common.core.constant.SecurityConstants;
-import com.lxq.common.core.util.RetOps;
-import com.lxq.lkb.system.api.feign.RemoteClientDetailsService;
-import com.lxq.lkb.system.api.model.SysOauthClientDetails;
+import com.lxq.system.biz.model.SysOauthClientDetails;
+import com.lxq.system.biz.service.SysOauthClientDetailsService;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import org.springframework.cache.annotation.Cacheable;
@@ -36,14 +35,14 @@ public class LxqRemoteRegisteredClientRepository implements RegisteredClientRepo
 	/**
 	 * 刷新令牌有效期默认 30 天
 	 */
-	private final static int REFRESH_TOKEN_VALIDITY_SECONDS = 60 * 60 * 24 * 30;
+	private static final int REFRESH_TOKEN_VALIDITY_SECONDS = 60 * 60 * 24 * 30;
 
 	/**
 	 * 请求令牌有效期默认 12 小时
 	 */
-	private final static int ACCESS_TOKEN_VALIDITY_SECONDS = 60 * 60 * 12;
+	private static final int ACCESS_TOKEN_VALIDITY_SECONDS = 60 * 60 * 12;
 
-	private final RemoteClientDetailsService clientDetailsService;
+	private final SysOauthClientDetailsService clientDetailsService;
 
 	/**
 	 * Saves the registered client.
@@ -55,6 +54,7 @@ public class LxqRemoteRegisteredClientRepository implements RegisteredClientRepo
 	 */
 	@Override
 	public void save(RegisteredClient registeredClient) {
+		// TODO document why this method is empty
 	}
 
 	/**
@@ -68,13 +68,6 @@ public class LxqRemoteRegisteredClientRepository implements RegisteredClientRepo
 		throw new UnsupportedOperationException();
 	}
 
-	/**
-	 * Returns the registered client identified by the provided {@code clientId}, or
-	 * {@code null} if not found.
-	 * @param clientId the client identifier
-	 * @return the {@link RegisteredClient} if found, otherwise {@code null}
-	 */
-
 	/**
 	 * 重写原生方法支持redis缓存
 	 * @param clientId 客戶端
@@ -85,11 +78,9 @@ public class LxqRemoteRegisteredClientRepository implements RegisteredClientRepo
 	@Cacheable(value = CacheConstants.CLIENT_DETAILS_KEY, key = "#clientId", unless = "#result == null")
 	public RegisteredClient findByClientId(String clientId) {
 
-		SysOauthClientDetails clientDetails = RetOps
-			.of(clientDetailsService.getClientDetailsById(clientId, SecurityConstants.FROM_IN))
-			.getData()
-			.orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
-					new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
+		SysOauthClientDetails clientDetails = clientDetailsService.getClientDetailsById(clientId);
+		Optional.ofNullable(clientDetails).orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
+				new OAuth2Error("客户端查询异常"), null));
 
 		RegisteredClient.Builder builder = RegisteredClient.withId(clientDetails.getClientId())
 			.clientId(clientDetails.getClientId())

+ 12 - 10
lxq-common/lxq-common-security/src/main/java/com/lxq/common/security/service/LxqUserDetailsServiceImpl.java → lxq-system/src/main/java/com/lxq/system/biz/security/service/LxqUserDetailsServiceImpl.java

@@ -1,4 +1,4 @@
-package com.lxq.common.security.service;
+package com.lxq.system.biz.security.service;
 
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.ArrayUtil;
@@ -6,8 +6,11 @@ import com.lxq.common.core.constant.CacheConstants;
 import com.lxq.common.core.constant.CommonConstants;
 import com.lxq.common.core.constant.SecurityConstants;
 import com.lxq.common.core.constant.enums.ErrorTypeEnum;
-import com.lxq.common.core.util.RetOps;
-import com.lxq.common.security.model.lxqSecurityUser;
+import com.lxq.common.security.model.LxqSecurityUser;
+import com.lxq.common.security.service.LxqUserDetailsService;
+import com.lxq.system.biz.domain.dto.UserInfo;
+import com.lxq.system.biz.model.SysUser;
+import com.lxq.system.biz.service.SysUserService;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -31,7 +34,7 @@ import java.util.*;
 @RequiredArgsConstructor
 public class LxqUserDetailsServiceImpl implements LxqUserDetailsService {
 
-	private final RemoteUserService remoteUserService;
+	private final SysUserService sysUserService;
 
 	private final CacheManager cacheManager;
 
@@ -45,14 +48,13 @@ public class LxqUserDetailsServiceImpl implements LxqUserDetailsService {
 	public UserDetails loadUserByUsername(String username) {
 		Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS);
 		if (cache != null && cache.get(username) != null) {
-			return (lxqSecurityUser) Objects.requireNonNull(cache.get(username)).get();
+			return (LxqSecurityUser) Objects.requireNonNull(cache.get(username)).get();
 		}
 
-		R<UserInfo> result = remoteUserService.info(username, SecurityConstants.FROM_IN);
+		UserInfo info = sysUserService.loadUserByUsername(username);
+
+		Optional.ofNullable(info).orElseThrow(() -> new UsernameNotFoundException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
 
-		UserInfo info = RetOps.of(result)
-			.getData()
-			.orElseThrow(() -> new UsernameNotFoundException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
 		UserDetails userDetails = getUserDetails(info);
 
 		if (cache != null) {
@@ -91,7 +93,7 @@ public class LxqUserDetailsServiceImpl implements LxqUserDetailsService {
 		SysUser user = info.getSysUser();
 
 		// 构造security用户
-		return new lxqSecurityUser(user.getUserId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(),
+		return new LxqSecurityUser(user.getUserId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(),
 				user.getPhone(), null, true, true, true, CharSequenceUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL),
 				authorities);
 	}

+ 39 - 0
lxq-system/src/main/java/com/lxq/system/biz/service/SysDeptService.java

@@ -0,0 +1,39 @@
+package com.lxq.system.biz.service;
+
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lxq.system.biz.model.SysDept;
+import org.springframework.validation.BindingResult;
+
+import java.util.List;
+
+/**
+ * 部门管理 服务类
+ *
+ * @author 没秃顶的码农
+ * @date 2023/11/06
+ */
+public interface SysDeptService extends IService<SysDept> {
+
+	/**
+	 * 查询部门树菜单
+	 * @param deptName 部门名称
+	 * @return 树
+	 */
+	List<Tree<Long>> selectTree(String deptName);
+
+	/**
+	 * 删除部门
+	 * @param id 部门 ID
+	 * @return 成功、失败
+	 */
+	Boolean removeDeptById(Long id);
+
+	/**
+	 * 获取部门的所有后代部门列表
+	 * @param deptId 部门ID
+	 * @return 后代部门列表
+	 */
+	List<SysDept> listDescendant(Long deptId);
+
+}

+ 29 - 0
lxq-system/src/main/java/com/lxq/system/biz/service/SysDictItemService.java

@@ -0,0 +1,29 @@
+package com.lxq.system.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lxq.common.core.util.R;
+import com.lxq.system.biz.model.SysDictItem;
+
+/**
+ * 字典项
+ *
+ * @author 秃顶的码农
+ * @date 2023/03/19
+ */
+public interface SysDictItemService extends IService<SysDictItem> {
+
+	/**
+	 * 删除字典项
+	 * @param id 字典项ID
+	 * @return
+	 */
+	R removeDictItem(Long id);
+
+	/**
+	 * 更新字典项
+	 * @param item 字典项
+	 * @return
+	 */
+	R updateDictItem(SysDictItem item);
+
+}

+ 35 - 0
lxq-system/src/main/java/com/lxq/system/biz/service/SysDictService.java

@@ -0,0 +1,35 @@
+package com.lxq.system.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lxq.common.core.util.R;
+import com.lxq.system.biz.model.SysDict;
+
+/**
+ * 字典表
+ *
+ * @author 秃顶的码农
+ * @date 2023/03/19
+ */
+public interface SysDictService extends IService<SysDict> {
+
+	/**
+	 * 根据ID 删除字典
+	 * @param ids ID列表
+	 * @return
+	 */
+	R removeDictByIds(Long[] ids);
+
+	/**
+	 * 更新字典
+	 * @param sysDict 字典
+	 * @return
+	 */
+	R updateDict(SysDict sysDict);
+
+	/**
+	 * 同步缓存 (清空缓存)
+	 * @return R
+	 */
+	R syncDictCache();
+
+}

+ 45 - 0
lxq-system/src/main/java/com/lxq/system/biz/service/SysFileService.java

@@ -0,0 +1,45 @@
+
+package com.lxq.system.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lxq.common.core.util.R;
+import com.lxq.system.biz.model.SysFile;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 文件管理
+ *
+ * @author 没秃顶的码农
+ * @date 2019-06-18 17:18:42
+ */
+public interface SysFileService extends IService<SysFile> {
+
+	/**
+	 * 读取文件
+	 *
+	 * @param bucket   桶名称
+	 * @param fileName 文件名称
+	 * @param response 输出流
+	 * @return
+	 */
+	String getFile(String bucket, String fileName, HttpServletResponse response);
+
+	/**
+	 * 删除文件
+	 * @param ids id集合
+	 */
+	Boolean deleteFile(List<Long> ids);
+
+
+	/**
+	 * 通过名称获取文件
+	 * @param fileName
+	 * @return
+	 */
+	SysFile getFileByFileName(String fileName);
+
+}

+ 33 - 0
lxq-system/src/main/java/com/lxq/system/biz/service/SysLogService.java

@@ -0,0 +1,33 @@
+package com.lxq.system.biz.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lxq.system.biz.dto.admin.SysLogDTO;
+import com.lxq.system.biz.model.SysLog;
+
+/**
+ * <p>
+ * 日志表 服务类
+ * </p>
+ *
+ * @author 秃顶的码农
+ * @since 2023-11-20
+ */
+public interface SysLogService extends IService<SysLog> {
+
+	/**
+	 * 插入日志
+	 * @param sysLog 日志对象
+	 * @return true/false
+	 */
+	Boolean saveLog(SysLog sysLog);
+
+	/**
+	 * 分页查询日志
+	 * @param page
+	 * @param sysLog
+	 * @return
+	 */
+	Page getLogByPage(Page page, SysLogDTO sysLog);
+
+}

+ 59 - 0
lxq-system/src/main/java/com/lxq/system/biz/service/SysMenuService.java

@@ -0,0 +1,59 @@
+
+package com.lxq.system.biz.service;
+
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lxq.common.core.util.R;
+import com.lxq.system.biz.model.SysMenu;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <p>
+ * 菜单权限表 服务类
+ * </p>
+ *
+ * @author 秃顶的码农
+ * @since 2023-10-29
+ */
+public interface SysMenuService extends IService<SysMenu> {
+
+	/**
+	 * 通过角色编号查询URL 权限
+	 * @param roleId 角色ID
+	 * @return 菜单列表
+	 */
+	List<SysMenu> findMenuByRoleId(Long roleId);
+
+	/**
+	 * 级联删除菜单
+	 * @param id 菜单ID
+	 * @return 成功、失败
+	 */
+	R removeMenuById(Long id);
+
+	/**
+	 * 更新菜单信息
+	 * @param sysMenu 菜单信息
+	 * @return 成功、失败
+	 */
+	Boolean updateMenuById(SysMenu sysMenu);
+
+	/**
+	 * 构建树
+	 * @param parentId 父节点ID
+	 * @param menuName 菜单名称
+	 * @return
+	 */
+	List<Tree<Long>> treeMenu(Long parentId, String menuName, String type);
+
+	/**
+	 * 查询菜单
+	 * @param voSet
+	 * @param parentId
+	 * @return
+	 */
+	List<Tree<Long>> filterMenu(Set<SysMenu> voSet, String type, Long parentId);
+
+}

Some files were not shown because too many files changed in this diff