Selaa lähdekoodia

修改包名

Signed-off-by: tangsong <86121657@qq.com>
tangsong 1 vuosi sitten
vanhempi
commit
a0d287224e
100 muutettua tiedostoa jossa 72 lisäystä ja 8198 poistoa
  1. 72 72
      pom.xml
  2. 0 176
      snowy-common/pom.xml
  3. 0 32
      snowy-common/src/main/java/vip/xiaonuo/common/annotation/CommonLog.java
  4. 0 32
      snowy-common/src/main/java/vip/xiaonuo/common/annotation/CommonNoRepeat.java
  5. 0 35
      snowy-common/src/main/java/vip/xiaonuo/common/annotation/CommonWrapper.java
  6. 0 93
      snowy-common/src/main/java/vip/xiaonuo/common/cache/CommonCacheOperator.java
  7. 0 31
      snowy-common/src/main/java/vip/xiaonuo/common/enums/CommonDeleteFlagEnum.java
  8. 0 42
      snowy-common/src/main/java/vip/xiaonuo/common/enums/CommonExceptionEnum.java
  9. 0 45
      snowy-common/src/main/java/vip/xiaonuo/common/enums/CommonSortOrderEnum.java
  10. 0 112
      snowy-common/src/main/java/vip/xiaonuo/common/excel/CommonExcelCustomMergeStrategy.java
  11. 0 50
      snowy-common/src/main/java/vip/xiaonuo/common/exception/CommonException.java
  12. 0 61
      snowy-common/src/main/java/vip/xiaonuo/common/handler/CommonSm4CbcTypeHandler.java
  13. 0 175
      snowy-common/src/main/java/vip/xiaonuo/common/listener/CommonDataChangeEventCenter.java
  14. 0 76
      snowy-common/src/main/java/vip/xiaonuo/common/listener/CommonDataChangeListener.java
  15. 0 79
      snowy-common/src/main/java/vip/xiaonuo/common/page/CommonPageRequest.java
  16. 0 80
      snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonEntity.java
  17. 0 160
      snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonResult.java
  18. 0 146
      snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonValidList.java
  19. 0 32
      snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonWrapperInterface.java
  20. 0 37
      snowy-common/src/main/java/vip/xiaonuo/common/prop/CommonProperties.java
  21. 0 31
      snowy-common/src/main/java/vip/xiaonuo/common/sse/CommonSseParam.java
  22. 0 30
      snowy-common/src/main/java/vip/xiaonuo/common/timer/CommonTimerTaskRunner.java
  23. 0 126
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonAvatarUtil.java
  24. 0 142
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonCryptogramUtil.java
  25. 0 63
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonDownloadUtil.java
  26. 0 50
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonEmailUtil.java
  27. 0 40
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonFilterExceptionUtil.java
  28. 0 108
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonIpAddressUtil.java
  29. 0 72
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonJoinPointUtil.java
  30. 0 125
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonNetWorkInfoUtil.java
  31. 0 65
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonResponseUtil.java
  32. 0 99
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonServletUtil.java
  33. 0 183
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonTimeFormatUtil.java
  34. 0 86
      snowy-common/src/main/java/vip/xiaonuo/common/util/CommonUaUtil.java
  35. 0 15
      snowy-plugin-api/README.md
  36. 0 39
      snowy-plugin-api/pom.xml
  37. 0 30
      snowy-plugin-api/snowy-plugin-auth-api/pom.xml
  38. 0 124
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/api/SaBaseLoginUserApi.java
  39. 0 35
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/annotation/SaClientCheckLogin.java
  40. 0 51
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/annotation/SaClientCheckPermission.java
  41. 0 52
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/annotation/SaClientCheckRole.java
  42. 0 49
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/enums/SaClientTypeEnum.java
  43. 0 235
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseClientLoginUser.java
  44. 0 271
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseLoginUser.java
  45. 0 47
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/util/StpClientLoginUserUtil.java
  46. 0 936
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/util/StpClientUtil.java
  47. 0 55
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/util/StpLoginUserUtil.java
  48. 0 24
      snowy-plugin-api/snowy-plugin-biz-api/pom.xml
  49. 0 13
      snowy-plugin-api/snowy-plugin-biz-api/src/main/java/vip/xiaonuo/biz/package-info.java
  50. 0 24
      snowy-plugin-api/snowy-plugin-client-api/pom.xml
  51. 0 13
      snowy-plugin-api/snowy-plugin-client-api/src/main/java/vip/xiaonuo/client/package-info.java
  52. 0 108
      snowy-plugin-api/snowy-plugin-dev-api/pom.xml
  53. 0 30
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevConfigApi.java
  54. 0 22
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevDictApi.java
  55. 0 142
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevEmailApi.java
  56. 0 104
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevFileApi.java
  57. 0 22
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevJobApi.java
  58. 0 58
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevLogApi.java
  59. 0 111
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevMessageApi.java
  60. 0 54
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevSmsApi.java
  61. 0 68
      snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevSseApi.java
  62. 0 24
      snowy-plugin-api/snowy-plugin-gen-api/pom.xml
  63. 0 13
      snowy-plugin-api/snowy-plugin-gen-api/src/main/java/vip/xiaonuo/gen/package-info.java
  64. 0 1
      snowy-plugin-api/snowy-plugin-mobile-api/README.md
  65. 0 24
      snowy-plugin-api/snowy-plugin-mobile-api/pom.xml
  66. 0 32
      snowy-plugin-api/snowy-plugin-mobile-api/src/main/java/vip/xiaonuo/mobile/api/MobileButtonApi.java
  67. 0 43
      snowy-plugin-api/snowy-plugin-mobile-api/src/main/java/vip/xiaonuo/mobile/api/MobileMenuApi.java
  68. 0 33
      snowy-plugin-api/snowy-plugin-mobile-api/src/main/java/vip/xiaonuo/mobile/api/MobileModuleApi.java
  69. 0 24
      snowy-plugin-api/snowy-plugin-sys-api/pom.xml
  70. 0 30
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysButtonApi.java
  71. 0 30
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysMenuApi.java
  72. 0 60
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysOrgApi.java
  73. 0 43
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysPositionApi.java
  74. 0 48
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysRelationApi.java
  75. 0 51
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysRoleApi.java
  76. 0 115
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysUserApi.java
  77. 0 15
      snowy-plugin/README.md
  78. 0 39
      snowy-plugin/pom.xml
  79. 0 61
      snowy-plugin/snowy-plugin-auth/pom.xml
  80. 0 149
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/config/AuthConfigure.java
  81. 0 67
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/util/AuthExceptionUtil.java
  82. 0 133
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/controller/AuthClientController.java
  83. 0 133
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/controller/AuthController.java
  84. 0 54
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/enums/AuthDeviceTypeEnum.java
  85. 0 86
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/enums/AuthExceptionEnum.java
  86. 0 118
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/listener/AuthListener.java
  87. 0 52
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/param/AuthAccountPasswordLoginParam.java
  88. 0 45
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/param/AuthGetPhoneValidCodeParam.java
  89. 0 49
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/param/AuthPhoneValidCodeLoginParam.java
  90. 0 36
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/result/AuthPicValidCodeResult.java
  91. 0 85
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/AuthService.java
  92. 0 472
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java
  93. 0 156
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/controller/AuthSessionController.java
  94. 0 35
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/param/AuthExitSessionParam.java
  95. 0 35
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/param/AuthExitTokenParam.java
  96. 0 32
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/param/AuthSessionPageParam.java
  97. 0 44
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/result/AuthSessionAnalysisResult.java
  98. 0 126
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/result/AuthSessionPageResult.java
  99. 0 87
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/service/AuthSessionService.java
  100. 0 0
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/service/impl/AuthSessionServiceImpl.java

+ 72 - 72
pom.xml

@@ -3,11 +3,11 @@
3 3
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 4
     <modelVersion>4.0.0</modelVersion>
5 5
 
6
-    <groupId>vip.xiaonuo</groupId>
7
-    <artifactId>snowy</artifactId>
8
-    <name>snowy</name>
9
-    <version>2.0.0</version>
10
-    <description>snowy快速开发平台</description>
6
+    <groupId>com.unis</groupId>
7
+    <artifactId>unis</artifactId>
8
+    <name>unis</name>
9
+    <version>1.0.0</version>
10
+    <description>省平台系统</description>
11 11
     <packaging>pom</packaging>
12 12
 
13 13
     <parent>
@@ -18,7 +18,7 @@
18 18
 
19 19
     <properties>
20 20
         <java.version>1.8</java.version>
21
-        <snowy.version>2.0.0</snowy.version>
21
+        <unis.version>1.0.0</unis.version>
22 22
         <spring-framework.version>5.3.26</spring-framework.version>
23 23
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24 24
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -87,124 +87,124 @@
87 87
 
88 88
     <modules>
89 89
         <!-- 基础通用规则模块 -->
90
-        <module>snowy-common</module>
90
+        <module>unis-common</module>
91 91
 
92 92
         <!-- 插件模块 -->
93
-        <module>snowy-plugin</module>
93
+        <module>unis-plugin</module>
94 94
 
95 95
         <!-- 插件API接口模块 -->
96
-        <module>snowy-plugin-api</module>
96
+        <module>unis-plugin-api</module>
97 97
 
98 98
         <!-- 主启动模块 -->
99
-        <module>snowy-web-app</module>
99
+        <module>unis-web-app</module>
100 100
     </modules>
101 101
 
102 102
     <dependencyManagement>
103 103
         <dependencies>
104 104
 
105
-            <!-- snowy-common -->
105
+            <!-- unis-common -->
106 106
             <dependency>
107
-                <groupId>vip.xiaonuo</groupId>
108
-                <artifactId>snowy-common</artifactId>
109
-                <version>${snowy.version}</version>
107
+                <groupId>com.unis</groupId>
108
+                <artifactId>unis-common</artifactId>
109
+                <version>${unis.version}</version>
110 110
             </dependency>
111 111
 
112
-            <!-- snowy-plugin-auth-api -->
112
+            <!-- unis-plugin-auth-api -->
113 113
             <dependency>
114
-                <groupId>vip.xiaonuo</groupId>
115
-                <artifactId>snowy-plugin-auth-api</artifactId>
116
-                <version>${snowy.version}</version>
114
+                <groupId>com.unis</groupId>
115
+                <artifactId>unis-plugin-auth-api</artifactId>
116
+                <version>${unis.version}</version>
117 117
             </dependency>
118 118
 
119
-            <!-- snowy-plugin-biz-api -->
119
+            <!-- unis-plugin-biz-api -->
120 120
             <dependency>
121
-                <groupId>vip.xiaonuo</groupId>
122
-                <artifactId>snowy-plugin-biz-api</artifactId>
123
-                <version>${snowy.version}</version>
121
+                <groupId>com.unis</groupId>
122
+                <artifactId>unis-plugin-biz-api</artifactId>
123
+                <version>${unis.version}</version>
124 124
             </dependency>
125 125
 
126
-            <!-- snowy-plugin-client-api -->
126
+            <!-- unis-plugin-client-api -->
127 127
             <dependency>
128
-                <groupId>vip.xiaonuo</groupId>
129
-                <artifactId>snowy-plugin-client-api</artifactId>
130
-                <version>${snowy.version}</version>
128
+                <groupId>com.unis</groupId>
129
+                <artifactId>unis-plugin-client-api</artifactId>
130
+                <version>${unis.version}</version>
131 131
             </dependency>
132 132
 
133
-            <!-- snowy-plugin-dev-api -->
133
+            <!-- unis-plugin-dev-api -->
134 134
             <dependency>
135
-                <groupId>vip.xiaonuo</groupId>
136
-                <artifactId>snowy-plugin-dev-api</artifactId>
137
-                <version>${snowy.version}</version>
135
+                <groupId>com.unis</groupId>
136
+                <artifactId>unis-plugin-dev-api</artifactId>
137
+                <version>${unis.version}</version>
138 138
             </dependency>
139 139
 
140
-            <!-- snowy-plugin-gen-api -->
140
+            <!-- unis-plugin-gen-api -->
141 141
             <dependency>
142
-                <groupId>vip.xiaonuo</groupId>
143
-                <artifactId>snowy-plugin-gen-api</artifactId>
144
-                <version>${snowy.version}</version>
142
+                <groupId>com.unis</groupId>
143
+                <artifactId>unis-plugin-gen-api</artifactId>
144
+                <version>${unis.version}</version>
145 145
             </dependency>
146 146
 
147
-            <!-- snowy-plugin-mobile-api -->
147
+            <!-- unis-plugin-mobile-api -->
148 148
             <dependency>
149
-                <groupId>vip.xiaonuo</groupId>
150
-                <artifactId>snowy-plugin-mobile-api</artifactId>
151
-                <version>${snowy.version}</version>
149
+                <groupId>com.unis</groupId>
150
+                <artifactId>unis-plugin-mobile-api</artifactId>
151
+                <version>${unis.version}</version>
152 152
             </dependency>
153 153
 
154
-            <!-- snowy-plugin-sys-api -->
154
+            <!-- unis-plugin-sys-api -->
155 155
             <dependency>
156
-                <groupId>vip.xiaonuo</groupId>
157
-                <artifactId>snowy-plugin-sys-api</artifactId>
158
-                <version>${snowy.version}</version>
156
+                <groupId>com.unis</groupId>
157
+                <artifactId>unis-plugin-sys-api</artifactId>
158
+                <version>${unis.version}</version>
159 159
             </dependency>
160 160
 
161
-            <!-- snowy-plugin-auth -->
161
+            <!-- unis-plugin-auth -->
162 162
             <dependency>
163
-                <groupId>vip.xiaonuo</groupId>
164
-                <artifactId>snowy-plugin-auth</artifactId>
165
-                <version>${snowy.version}</version>
163
+                <groupId>com.unis</groupId>
164
+                <artifactId>unis-plugin-auth</artifactId>
165
+                <version>${unis.version}</version>
166 166
             </dependency>
167 167
 
168
-            <!-- snowy-plugin-biz -->
168
+            <!-- unis-plugin-biz -->
169 169
             <dependency>
170
-                <groupId>vip.xiaonuo</groupId>
171
-                <artifactId>snowy-plugin-biz</artifactId>
172
-                <version>${snowy.version}</version>
170
+                <groupId>com.unis</groupId>
171
+                <artifactId>unis-plugin-biz</artifactId>
172
+                <version>${unis.version}</version>
173 173
             </dependency>
174 174
 
175
-            <!-- snowy-plugin-client -->
175
+            <!-- unis-plugin-client -->
176 176
             <dependency>
177
-                <groupId>vip.xiaonuo</groupId>
178
-                <artifactId>snowy-plugin-client</artifactId>
179
-                <version>${snowy.version}</version>
177
+                <groupId>com.unis</groupId>
178
+                <artifactId>unis-plugin-client</artifactId>
179
+                <version>${unis.version}</version>
180 180
             </dependency>
181 181
 
182
-            <!-- snowy-plugin-dev -->
182
+            <!-- unis-plugin-dev -->
183 183
             <dependency>
184
-                <groupId>vip.xiaonuo</groupId>
185
-                <artifactId>snowy-plugin-dev</artifactId>
186
-                <version>${snowy.version}</version>
184
+                <groupId>com.unis</groupId>
185
+            <artifactId>unis-plugin-dev</artifactId>
186
+                <version>${unis.version}</version>
187 187
             </dependency>
188 188
 
189
-            <!-- snowy-plugin-gen -->
189
+            <!-- unis-plugin-gen -->
190 190
             <dependency>
191
-                <groupId>vip.xiaonuo</groupId>
192
-                <artifactId>snowy-plugin-gen</artifactId>
193
-                <version>${snowy.version}</version>
191
+                <groupId>com.unis</groupId>
192
+                <artifactId>unis-plugin-gen</artifactId>
193
+                <version>${unis.version}</version>
194 194
             </dependency>
195 195
 
196
-            <!-- snowy-plugin-mobile -->
196
+            <!-- unis-plugin-mobile -->
197 197
             <dependency>
198
-                <groupId>vip.xiaonuo</groupId>
199
-                <artifactId>snowy-plugin-mobile</artifactId>
200
-                <version>${snowy.version}</version>
198
+                <groupId>com.unis</groupId>
199
+                <artifactId>unis-plugin-mobile</artifactId>
200
+                <version>${unis.version}</version>
201 201
             </dependency>
202 202
 
203
-            <!-- snowy-plugin-sys -->
203
+            <!-- unis-plugin-sys -->
204 204
             <dependency>
205
-                <groupId>vip.xiaonuo</groupId>
206
-                <artifactId>snowy-plugin-sys</artifactId>
207
-                <version>${snowy.version}</version>
205
+                <groupId>com.unis</groupId>
206
+                <artifactId>unis-plugin-sys</artifactId>
207
+                <version>${unis.version}</version>
208 208
             </dependency>
209 209
 
210 210
             <!-- lombok -->
@@ -674,7 +674,7 @@
674 674
                     <target>1.8</target>
675 675
                 </configuration>
676 676
             </plugin>
677
-            <plugin>
677
+         <!--   <plugin>
678 678
                 <groupId>org.apache.maven.plugins</groupId>
679 679
                 <artifactId>maven-source-plugin</artifactId>
680 680
                 <version>3.0.1</version>
@@ -689,7 +689,7 @@
689 689
                         </goals>
690 690
                     </execution>
691 691
                 </executions>
692
-            </plugin>
692
+            </plugin>-->
693 693
         </plugins>
694 694
         <resources>
695 695
             <resource>

+ 0 - 176
snowy-common/pom.xml

@@ -1,176 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-common</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>基础通用模块</description>
16
-
17
-    <dependencies>
18
-        <!-- validation -->
19
-        <dependency>
20
-            <groupId>org.springframework.boot</groupId>
21
-            <artifactId>spring-boot-starter-validation</artifactId>
22
-        </dependency>
23
-
24
-        <!-- web -->
25
-        <dependency>
26
-            <groupId>org.springframework.boot</groupId>
27
-            <artifactId>spring-boot-starter-web</artifactId>
28
-        </dependency>
29
-
30
-        <!-- aop -->
31
-        <dependency>
32
-            <groupId>org.springframework.boot</groupId>
33
-            <artifactId>spring-boot-starter-aop</artifactId>
34
-        </dependency>
35
-
36
-        <!-- processor -->
37
-        <dependency>
38
-            <groupId>org.springframework.boot</groupId>
39
-            <artifactId>spring-boot-configuration-processor</artifactId>
40
-        </dependency>
41
-
42
-        <!-- redis -->
43
-        <dependency>
44
-            <groupId>org.springframework.boot</groupId>
45
-            <artifactId>spring-boot-starter-data-redis</artifactId>
46
-        </dependency>
47
-
48
-        <!-- lombok -->
49
-        <dependency>
50
-            <groupId>org.projectlombok</groupId>
51
-            <artifactId>lombok</artifactId>
52
-        </dependency>
53
-
54
-        <!-- druid -->
55
-        <dependency>
56
-            <groupId>com.alibaba</groupId>
57
-            <artifactId>druid-spring-boot-starter</artifactId>
58
-        </dependency>
59
-
60
-        <!-- mybatis-plus -->
61
-        <dependency>
62
-            <groupId>com.baomidou</groupId>
63
-            <artifactId>mybatis-plus-boot-starter</artifactId>
64
-        </dependency>
65
-
66
-        <!-- easy-trans -->
67
-        <dependency>
68
-            <groupId>com.fhs-opensource</groupId>
69
-            <artifactId>easy-trans-spring-boot-starter</artifactId>
70
-            <exclusions>
71
-                <exclusion>
72
-                    <artifactId>mybatis-plus-annotation</artifactId>
73
-                    <groupId>com.baomidou</groupId>
74
-                </exclusion>
75
-                <exclusion>
76
-                    <artifactId>springfox-schema</artifactId>
77
-                    <groupId>io.springfox</groupId>
78
-                </exclusion>
79
-                <exclusion>
80
-                    <artifactId>error_prone_annotations</artifactId>
81
-                    <groupId>com.google.errorprone</groupId>
82
-                </exclusion>
83
-            </exclusions>
84
-        </dependency>
85
-
86
-        <!-- easy-trans-mybatis-plus-extend -->
87
-        <dependency>
88
-            <groupId>com.fhs-opensource</groupId>
89
-            <artifactId>easy-trans-mybatis-plus-extend</artifactId>
90
-            <exclusions>
91
-                <exclusion>
92
-                    <artifactId>mybatis-plus-extension</artifactId>
93
-                    <groupId>com.baomidou</groupId>
94
-                </exclusion>
95
-            </exclusions>
96
-        </dependency>
97
-
98
-        <!-- redis -->
99
-        <dependency>
100
-            <groupId>org.apache.commons</groupId>
101
-            <artifactId>commons-pool2</artifactId>
102
-        </dependency>
103
-
104
-        <!-- jackson-core -->
105
-        <dependency>
106
-            <groupId>com.fasterxml.jackson.core</groupId>
107
-            <artifactId>jackson-core</artifactId>
108
-        </dependency>
109
-
110
-        <!-- jackson-databind -->
111
-        <dependency>
112
-            <groupId>com.fasterxml.jackson.core</groupId>
113
-            <artifactId>jackson-databind</artifactId>
114
-        </dependency>
115
-
116
-        <!-- hutool -->
117
-        <dependency>
118
-            <groupId>cn.hutool</groupId>
119
-            <artifactId>hutool-all</artifactId>
120
-        </dependency>
121
-
122
-        <!-- pinyin4j -->
123
-        <dependency>
124
-            <groupId>com.belerweb</groupId>
125
-            <artifactId>pinyin4j</artifactId>
126
-        </dependency>
127
-
128
-        <!-- ip2region -->
129
-        <dependency>
130
-            <groupId>org.lionsoul</groupId>
131
-            <artifactId>ip2region</artifactId>
132
-        </dependency>
133
-
134
-        <!-- knife4j -->
135
-        <dependency>
136
-            <groupId>com.github.xiaoymin</groupId>
137
-            <artifactId>knife4j-spring-boot-starter</artifactId>
138
-        </dependency>
139
-
140
-        <!-- easy-poi -->
141
-        <dependency>
142
-            <groupId>cn.afterturn</groupId>
143
-            <artifactId>easypoi-spring-boot-starter</artifactId>
144
-            <exclusions>
145
-                <exclusion>
146
-                    <artifactId>javassist</artifactId>
147
-                    <groupId>org.javassist</groupId>
148
-                </exclusion>
149
-                <exclusion>
150
-                    <artifactId>poi</artifactId>
151
-                    <groupId>org.apache.poi</groupId>
152
-                </exclusion>
153
-                <exclusion>
154
-                    <artifactId>poi-ooxml</artifactId>
155
-                    <groupId>org.apache.poi</groupId>
156
-                </exclusion>
157
-                <exclusion>
158
-                    <artifactId>poi-ooxml-schemas</artifactId>
159
-                    <groupId>org.apache.poi</groupId>
160
-                </exclusion>
161
-            </exclusions>
162
-        </dependency>
163
-
164
-        <!-- sm-crypto -->
165
-        <dependency>
166
-            <groupId>com.antherd</groupId>
167
-            <artifactId>sm-crypto</artifactId>
168
-        </dependency>
169
-
170
-        <!-- easyexcel -->
171
-        <dependency>
172
-            <groupId>com.alibaba</groupId>
173
-            <artifactId>easyexcel</artifactId>
174
-        </dependency>
175
-    </dependencies>
176
-</project>

+ 0 - 32
snowy-common/src/main/java/vip/xiaonuo/common/annotation/CommonLog.java

@@ -1,32 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.annotation;
14
-
15
-import java.lang.annotation.*;
16
-
17
-/**
18
- * 自定义日志注解
19
- *
20
- * @author xuyuxiang
21
- * @date 2022/6/20 14:25
22
- **/
23
-@Target(ElementType.METHOD)
24
-@Retention(RetentionPolicy.RUNTIME)
25
-@Documented
26
-public @interface CommonLog {
27
-
28
-    /**
29
-     * 日志的名称,例如:"修改菜单"
30
-     */
31
-    String value() default "未命名";
32
-}

+ 0 - 32
snowy-common/src/main/java/vip/xiaonuo/common/annotation/CommonNoRepeat.java

@@ -1,32 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.annotation;
14
-
15
-import java.lang.annotation.*;
16
-
17
-/**
18
- * 自定义节流防抖注解
19
- *
20
- * @author xuyuxiang
21
- * @date 2022/6/20 14:25
22
- **/
23
-@Target(ElementType.METHOD)
24
-@Retention(RetentionPolicy.RUNTIME)
25
-@Documented
26
-public @interface CommonNoRepeat {
27
-
28
-    /**
29
-     * 间隔时间(ms),小于此时间视为重复提交,默认5000ms
30
-     */
31
-    int interval() default 5000;
32
-}

+ 0 - 35
snowy-common/src/main/java/vip/xiaonuo/common/annotation/CommonWrapper.java

@@ -1,35 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.annotation;
14
-
15
-import vip.xiaonuo.common.pojo.CommonWrapperInterface;
16
-
17
-import java.lang.annotation.*;
18
-
19
-/**
20
- * 自定义包装注解,对响应结果包装
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/9/15 21:12
24
- */
25
-@Target({ElementType.METHOD})
26
-@Retention(RetentionPolicy.RUNTIME)
27
-@Inherited
28
-@Documented
29
-public @interface CommonWrapper {
30
-
31
-    /**
32
-     * 具体包装类
33
-     */
34
-    Class<? extends CommonWrapperInterface<?>>[] value();
35
-}

+ 0 - 93
snowy-common/src/main/java/vip/xiaonuo/common/cache/CommonCacheOperator.java

@@ -1,93 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.cache;
14
-
15
-import cn.hutool.core.collection.CollectionUtil;
16
-import cn.hutool.core.map.MapUtil;
17
-import cn.hutool.core.util.StrUtil;
18
-import org.springframework.data.redis.core.RedisTemplate;
19
-import org.springframework.stereotype.Component;
20
-
21
-import javax.annotation.Resource;
22
-import java.util.*;
23
-import java.util.concurrent.TimeUnit;
24
-import java.util.stream.Collectors;
25
-
26
-/**
27
- * 通用Redis缓存操作器
28
- *
29
- * @author xuyuxiang
30
- * @date 2022/6/21 16:00
31
- **/
32
-@Component
33
-public class CommonCacheOperator {
34
-
35
-    /** 所有缓存Key的前缀 */
36
-    private static final String CACHE_KEY_PREFIX = "Cache:";
37
-
38
-    @Resource
39
-    private RedisTemplate<String, Object> redisTemplate;
40
-
41
-    public void put(String key, Object value) {
42
-        redisTemplate.boundValueOps(CACHE_KEY_PREFIX + key).set(value);
43
-    }
44
-
45
-    public void put(String key, Object value, long timeoutSeconds) {
46
-        redisTemplate.boundValueOps(CACHE_KEY_PREFIX + key).set(value, timeoutSeconds, TimeUnit.SECONDS);
47
-    }
48
-
49
-    public Object get(String key) {
50
-        return redisTemplate.boundValueOps(CACHE_KEY_PREFIX + key).get();
51
-    }
52
-
53
-    public void remove(String... key) {
54
-        ArrayList<String> keys = CollectionUtil.toList(key);
55
-        List<String> withPrefixKeys = keys.stream().map(i -> CACHE_KEY_PREFIX + i).collect(Collectors.toList());
56
-        redisTemplate.delete(withPrefixKeys);
57
-    }
58
-
59
-    public Collection<String> getAllKeys() {
60
-        Set<String> keys = redisTemplate.keys(CACHE_KEY_PREFIX + "*");
61
-        if (keys != null) {
62
-            // 去掉缓存key的common prefix前缀
63
-            return keys.stream().map(key -> StrUtil.removePrefix(key, CACHE_KEY_PREFIX)).collect(Collectors.toSet());
64
-        } else {
65
-            return CollectionUtil.newHashSet();
66
-        }
67
-    }
68
-
69
-    public Collection<Object> getAllValues() {
70
-        Set<String> keys = redisTemplate.keys(CACHE_KEY_PREFIX + "*");
71
-        if (keys != null) {
72
-            return redisTemplate.opsForValue().multiGet(keys);
73
-        } else {
74
-            return CollectionUtil.newArrayList();
75
-        }
76
-    }
77
-
78
-    public Map<String, Object> getAllKeyValues() {
79
-        Collection<String> allKeys = this.getAllKeys();
80
-        HashMap<String, Object> results = MapUtil.newHashMap();
81
-        for (String key : allKeys) {
82
-            results.put(key, this.get(key));
83
-        }
84
-        return results;
85
-    }
86
-
87
-    public void removeBatch(String pattern) {
88
-        Set<String> keys = redisTemplate.keys(CACHE_KEY_PREFIX + pattern);
89
-        if (keys != null) {
90
-            redisTemplate.delete(keys);
91
-        }
92
-    }
93
-}

+ 0 - 31
snowy-common/src/main/java/vip/xiaonuo/common/enums/CommonDeleteFlagEnum.java

@@ -1,31 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.enums;
14
-
15
-import lombok.Getter;
16
-
17
-/**
18
- * 通用删除标志枚举
19
- *
20
- * @author xuyuxiang
21
- * @date 2021/10/11 14:02
22
- **/
23
-@Getter
24
-public enum CommonDeleteFlagEnum {
25
-
26
-    /** 未删除 */
27
-    NOT_DELETE,
28
-
29
-    /** 已删除 */
30
-    DELETED
31
-}

+ 0 - 42
snowy-common/src/main/java/vip/xiaonuo/common/enums/CommonExceptionEnum.java

@@ -1,42 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.enums;
14
-
15
-import lombok.Getter;
16
-
17
-/**
18
- * 异常码枚举
19
- *
20
- * @author xuyuxiang
21
- * @date 2022/8/15 16:09
22
- **/
23
-@Getter
24
-public enum CommonExceptionEnum {
25
-
26
-    OK200(200, "请求成功"),
27
-    ERROR401(401, "未登录"),
28
-    ERROR403(403, "无权限"),
29
-    ERROR404(404, "路径不存在"),
30
-    ERROR405(405, "请求方法不正确"),
31
-    ERROR415(415, "参数传递异常"),
32
-    ERROR500(500, "业务异常");
33
-
34
-    private final Integer code;
35
-
36
-    private final String message;
37
-
38
-    CommonExceptionEnum(Integer code, String message) {
39
-        this.code = code;
40
-        this.message = message;
41
-    }
42
-}

+ 0 - 45
snowy-common/src/main/java/vip/xiaonuo/common/enums/CommonSortOrderEnum.java

@@ -1,45 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.enums;
14
-
15
-import lombok.Getter;
16
-import vip.xiaonuo.common.exception.CommonException;
17
-
18
-/**
19
- * 通用排序方式枚举
20
- *
21
- * @author xuyuxiang
22
- * @date 2022/7/13 17:48
23
- **/
24
-@Getter
25
-public enum CommonSortOrderEnum {
26
-
27
-    /** 升序 */
28
-    ASC("ASCEND"),
29
-
30
-    /** 降序 */
31
-    DESC("DESCEND");
32
-
33
-    private final String value;
34
-
35
-    CommonSortOrderEnum(String value) {
36
-        this.value = value.toUpperCase();
37
-    }
38
-
39
-    public static void validate(String value) {
40
-        boolean flag = ASC.getValue().toLowerCase().equals(value) || DESC.getValue().toLowerCase().equals(value);
41
-        if(!flag) {
42
-            throw new CommonException("不支持该排序方式:{}", value);
43
-        }
44
-    }
45
-}

+ 0 - 112
snowy-common/src/main/java/vip/xiaonuo/common/excel/CommonExcelCustomMergeStrategy.java

@@ -1,112 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.excel;
14
-
15
-import com.alibaba.excel.metadata.Head;
16
-import com.alibaba.excel.write.merge.AbstractMergeStrategy;
17
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
18
-import org.apache.poi.ss.usermodel.Cell;
19
-import org.apache.poi.ss.usermodel.Sheet;
20
-import org.apache.poi.ss.util.CellRangeAddress;
21
-
22
-import java.util.ArrayList;
23
-import java.util.List;
24
-
25
-/**
26
- * EasyExcel自定义合并策略 该类继承了AbstractMergeStrategy抽象合并策略,需要重写merge()方法
27
- *
28
- * @author xuyuxiang
29
- * @date 2023/3/6 13:21
30
- **/
31
-public class CommonExcelCustomMergeStrategy extends AbstractMergeStrategy {
32
-
33
-    /**
34
-     * 分组,每几行合并一次
35
-     */
36
-    private final List<Integer> exportFieldGroupCountList;
37
-
38
-    /**
39
-     * 目标合并列index
40
-     */
41
-    private final Integer targetColumnIndex;
42
-
43
-    /**
44
-     * 需要开始合并单元格的首行index
45
-     */
46
-    private Integer rowIndex;
47
-
48
-    /**
49
-     * exportDataList为待合并目标列的值
50
-     *
51
-     * @author xuyuxiang
52
-     * @date 2023/3/6 13:23
53
-     **/
54
-    public CommonExcelCustomMergeStrategy(List<String> exportDataList, Integer targetColumnIndex) {
55
-        this.exportFieldGroupCountList = getGroupCountList(exportDataList);
56
-        this.targetColumnIndex = targetColumnIndex;
57
-    }
58
-
59
-
60
-    @Override
61
-    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
62
-
63
-        if (null == rowIndex) {
64
-            rowIndex = cell.getRowIndex();
65
-        }
66
-        // 仅从首行以及目标列的单元格开始合并,忽略其他
67
-        if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex) {
68
-            mergeGroupColumn(sheet);
69
-        }
70
-    }
71
-
72
-    private void mergeGroupColumn(Sheet sheet) {
73
-        int rowCount = rowIndex;
74
-        for (Integer count : exportFieldGroupCountList) {
75
-            if(count == 1) {
76
-                rowCount += count;
77
-                continue ;
78
-            }
79
-            // 合并单元格
80
-            CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1, targetColumnIndex, targetColumnIndex);
81
-            sheet.addMergedRegionUnsafe(cellRangeAddress);
82
-            rowCount += count;
83
-        }
84
-    }
85
-
86
-    /*
87
-     * 该方法将目标列根据值是否相同连续可合并,存储可合并的行数
88
-     *
89
-     * @author xuyuxiang
90
-     * @date 2023/3/6 13:23
91
-     **/
92
-    private List<Integer> getGroupCountList(List<String> exportDataList){
93
-        if (CollectionUtils.isEmpty(exportDataList)) {
94
-            return new ArrayList<>();
95
-        }
96
-
97
-        List<Integer> groupCountList = new ArrayList<>();
98
-        int count = 1;
99
-
100
-        for (int i = 1; i < exportDataList.size(); i++) {
101
-            if (exportDataList.get(i).equals(exportDataList.get(i - 1))) {
102
-                count++;
103
-            } else {
104
-                groupCountList.add(count);
105
-                count = 1;
106
-            }
107
-        }
108
-        // 处理完最后一条后
109
-        groupCountList.add(count);
110
-        return groupCountList;
111
-    }
112
-}

+ 0 - 50
snowy-common/src/main/java/vip/xiaonuo/common/exception/CommonException.java

@@ -1,50 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.exception;
14
-
15
-import cn.hutool.core.util.StrUtil;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-/**
20
- * 通用异常
21
- *
22
- * @author xuyuxiang
23
- * @date 2020/4/8 15:54
24
- */
25
-@Getter
26
-@Setter
27
-public class CommonException extends RuntimeException {
28
-
29
-    private Integer code;
30
-
31
-    private String msg;
32
-
33
-    public CommonException() {
34
-        super("服务器异常");
35
-        this.code = 500;
36
-        this.msg = "服务器异常";
37
-    }
38
-
39
-    public CommonException(String msg, Object... arguments) {
40
-        super(StrUtil.format(msg, arguments));
41
-        this.code = 500;
42
-        this.msg = StrUtil.format(msg, arguments);
43
-    }
44
-
45
-    public CommonException(Integer code, String msg, Object... arguments) {
46
-        super(StrUtil.format(msg, arguments));
47
-        this.code = code;
48
-        this.msg = StrUtil.format(msg, arguments);
49
-    }
50
-}

+ 0 - 61
snowy-common/src/main/java/vip/xiaonuo/common/handler/CommonSm4CbcTypeHandler.java

@@ -1,61 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.handler;
14
-
15
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
16
-import org.apache.ibatis.type.BaseTypeHandler;
17
-import org.apache.ibatis.type.JdbcType;
18
-import org.apache.ibatis.type.MappedJdbcTypes;
19
-import vip.xiaonuo.common.util.CommonCryptogramUtil;
20
-
21
-import java.sql.CallableStatement;
22
-import java.sql.PreparedStatement;
23
-import java.sql.ResultSet;
24
-import java.sql.SQLException;
25
-
26
-/**
27
- * Sm4Cbc加解密
28
- *
29
- * @author wanglei
30
- * @date 2022/9/30 15:24
31
- **/
32
-@MappedJdbcTypes(JdbcType.VARCHAR)
33
-public class CommonSm4CbcTypeHandler<T> extends BaseTypeHandler<T> {
34
-
35
-    @Override
36
-    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
37
-        ps.setString(i, CommonCryptogramUtil.doSm4CbcEncrypt((String)parameter));
38
-    }
39
-
40
-    @SuppressWarnings("ALL")
41
-    @Override
42
-    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
43
-        String columnValue = rs.getString(columnName);
44
-        //有一些可能是空字符
45
-        return StringUtils.isBlank(columnValue) ? (T)columnValue : (T)CommonCryptogramUtil.doSm4CbcDecrypt(columnValue);
46
-    }
47
-
48
-    @SuppressWarnings("ALL")
49
-    @Override
50
-    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
51
-        String columnValue = rs.getString(columnIndex);
52
-        return StringUtils.isBlank(columnValue) ? (T)columnValue : (T)CommonCryptogramUtil.doSm4CbcDecrypt(columnValue);
53
-    }
54
-
55
-    @SuppressWarnings("ALL")
56
-    @Override
57
-    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
58
-        String columnValue = cs.getString(columnIndex);
59
-        return StringUtils.isBlank(columnValue) ? (T)columnValue : (T)CommonCryptogramUtil.doSm4CbcDecrypt(columnValue);
60
-    }
61
-}

+ 0 - 175
snowy-common/src/main/java/vip/xiaonuo/common/listener/CommonDataChangeEventCenter.java

@@ -1,175 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.listener;
14
-
15
-import cn.hutool.json.JSONArray;
16
-import cn.hutool.json.JSONUtil;
17
-import vip.xiaonuo.common.exception.CommonException;
18
-
19
-import java.util.ArrayList;
20
-import java.util.List;
21
-import java.util.stream.Collectors;
22
-
23
-/**
24
- * 通用数据变化事件中心 事件发布器
25
- *
26
- * @author xuyuxiang
27
- * @date 2023/3/3 10:14
28
- **/
29
-public class CommonDataChangeEventCenter {
30
-
31
-    // --------- 注册侦听器 
32
-
33
-    private static List<CommonDataChangeListener> listenerList = new ArrayList<>();
34
-
35
-    /**
36
-     * 获取已注册的所有侦听器
37
-     * @return / 
38
-     */
39
-    public static List<CommonDataChangeListener> getListenerList() {
40
-        return listenerList;
41
-    }
42
-
43
-    /**
44
-     * 重置侦听器集合
45
-     * @param listenerList / 
46
-     */
47
-    public static void setListenerList(List<CommonDataChangeListener> listenerList) {
48
-        if(listenerList == null) {
49
-            throw new CommonException("重置的侦听器集合不可以为空");
50
-        }
51
-        CommonDataChangeEventCenter.listenerList = listenerList;
52
-    }
53
-
54
-    /**
55
-     * 注册一个侦听器 
56
-     * @param listener / 
57
-     */
58
-    public static void registerListener(CommonDataChangeListener listener) {
59
-        if(listener == null) {
60
-            throw new CommonException("注册的侦听器不可以为空");
61
-        }
62
-        listenerList.add(listener);
63
-    }
64
-
65
-    /**
66
-     * 注册一组侦听器 
67
-     * @param listenerList / 
68
-     */
69
-    public static void registerListenerList(List<CommonDataChangeListener> listenerList) {
70
-        if(listenerList == null) {
71
-            throw new CommonException("注册的侦听器不可以为空");
72
-        }
73
-        for (CommonDataChangeListener listener : listenerList) {
74
-            if(listener == null) {
75
-                throw new CommonException("注册的侦听器不可以为空");
76
-            }
77
-        }
78
-        CommonDataChangeEventCenter.listenerList.addAll(listenerList);
79
-    }
80
-
81
-    /**
82
-     * 移除一个侦听器 
83
-     * @param listener / 
84
-     */
85
-    public static void removeListener(CommonDataChangeListener listener) {
86
-        listenerList.remove(listener);
87
-    }
88
-
89
-    /**
90
-     * 移除指定类型的所有侦听器 
91
-     * @param cls / 
92
-     */
93
-    public static void removeListener(Class<? extends CommonDataChangeListener> cls) {
94
-        ArrayList<CommonDataChangeListener> listenerListCopy = new ArrayList<>(listenerList);
95
-        for (CommonDataChangeListener listener : listenerListCopy) {
96
-            if(cls.isAssignableFrom(listener.getClass())) {
97
-                listenerList.remove(listener);
98
-            }
99
-        }
100
-    }
101
-
102
-    /**
103
-     * 清空所有已注册的侦听器 
104
-     */
105
-    public static void clearListener() {
106
-        listenerList.clear();
107
-    }
108
-
109
-    /**
110
-     * 判断是否已经注册了指定侦听器 
111
-     * @param listener / 
112
-     * @return / 
113
-     */
114
-    public static boolean hasListener(CommonDataChangeListener listener) {
115
-        return listenerList.contains(listener);
116
-    }
117
-
118
-    /**
119
-     * 判断是否已经注册了指定类型的侦听器 
120
-     * @param cls / 
121
-     * @return / 
122
-     */
123
-    public static boolean hasListener(Class<? extends CommonDataChangeListener> cls) {
124
-        for (CommonDataChangeListener listener : listenerList) {
125
-            if(cls.isAssignableFrom(listener.getClass())) {
126
-                return true;
127
-            }
128
-        }
129
-        return false;
130
-    }
131
-
132
-    // --------- 事件发布-添加 --------- //
133
-
134
-    /**
135
-     * 执行添加事件发布,数据集合
136
-     *
137
-     * @author xuyuxiang
138
-     * @date 2023/3/3 10:22
139
-     **/
140
-    public static void doAddWithData(String dataType, JSONArray jsonArray) {
141
-        for (CommonDataChangeListener listener : listenerList) {
142
-            listener.doAddWithDataIdList(dataType, jsonArray.stream().map(o -> JSONUtil.parseObj(o).getStr("id")).collect(Collectors.toList()));
143
-            listener.doAddWithDataList(dataType, jsonArray);
144
-        }
145
-    }
146
-
147
-    // --------- 事件发布-更新 --------- //
148
-
149
-    /**
150
-     * 执行更新事件发布,数据集合
151
-     *
152
-     * @author xuyuxiang
153
-     * @date 2023/3/3 10:22
154
-     **/
155
-    public static void doUpdateWithData(String dataType, JSONArray jsonArray) {
156
-        for (CommonDataChangeListener listener : listenerList) {
157
-            listener.doUpdateWithDataIdList(dataType, jsonArray.stream().map(o -> JSONUtil.parseObj(o).getStr("id")).collect(Collectors.toList()));
158
-            listener.doUpdateWithDataList(dataType, jsonArray);
159
-        }
160
-    }
161
-
162
-    // --------- 事件发布-删除 --------- //
163
-
164
-    /**
165
-     * 执行删除事件发布,ID集合
166
-     *
167
-     * @author xuyuxiang
168
-     * @date 2023/3/3 10:22
169
-     **/
170
-    public static void doDeleteWithDataId(String dataType, List<String> dataIdList) {
171
-        for (CommonDataChangeListener listener : listenerList) {
172
-            listener.doDeleteWithDataIdList(dataType, dataIdList);
173
-        }
174
-    }
175
-}

+ 0 - 76
snowy-common/src/main/java/vip/xiaonuo/common/listener/CommonDataChangeListener.java

@@ -1,76 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.listener;
14
-
15
-import cn.hutool.json.JSONArray;
16
-
17
-import java.util.List;
18
-
19
-/**
20
- * 通用数据变化侦听器,你可以实现该侦听器接口,在数据新增、更新、删除时进行一些AOP操作
21
- *
22
- * @author xuyuxiang
23
- * @date 2023/3/3 10:14
24
- **/
25
-public interface CommonDataChangeListener {
26
-
27
-    /**
28
-     * 执行添加,ID集合
29
-     *
30
-     * @param dataType 数据类型,如USER、ORG,自行定义
31
-     * @param dataIdList 被添加的数据ID集合
32
-     * @author xuyuxiang
33
-     * @date 2023/3/3 10:24
34
-     **/
35
-    void doAddWithDataIdList(String dataType, List<String> dataIdList);
36
-
37
-    /**
38
-     * 执行添加,数据集合
39
-     *
40
-     * @param dataType 数据类型,如USER、ORG,自行定义
41
-     * @param jsonArray 被添加的数据集合
42
-     * @author xuyuxiang
43
-     * @date 2023/3/3 10:24
44
-     **/
45
-    void doAddWithDataList(String dataType, JSONArray jsonArray);
46
-
47
-    /**
48
-     * 执行更新,ID集合
49
-     *
50
-     * @param dataType 数据类型,如USER、ORG,自行定义
51
-     * @param dataIdList 被更新的数据ID集合
52
-     * @author xuyuxiang
53
-     * @date 2023/3/3 10:24
54
-     **/
55
-    void doUpdateWithDataIdList(String dataType, List<String> dataIdList);
56
-
57
-    /**
58
-     * 执行更新,数据集合
59
-     *
60
-     * @param dataType 数据类型,如USER、ORG,自行定义
61
-     * @param jsonArray 被更新的数据集合
62
-     * @author xuyuxiang
63
-     * @date 2023/3/3 10:24
64
-     **/
65
-    void doUpdateWithDataList(String dataType, JSONArray jsonArray);
66
-
67
-    /**
68
-     * 执行删除,ID集合
69
-     *
70
-     * @param dataType 数据类型,如USER、ORG,自行定义
71
-     * @param dataIdList 被删除的数据ID集合
72
-     * @author xuyuxiang
73
-     * @date 2023/3/3 10:24
74
-     **/
75
-    void doDeleteWithDataIdList(String dataType, List<String> dataIdList);
76
-}

+ 0 - 79
snowy-common/src/main/java/vip/xiaonuo/common/page/CommonPageRequest.java

@@ -1,79 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.page;
14
-
15
-import cn.hutool.core.convert.Convert;
16
-import cn.hutool.core.util.ObjectUtil;
17
-import com.baomidou.mybatisplus.core.metadata.OrderItem;
18
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
19
-import lombok.extern.slf4j.Slf4j;
20
-import vip.xiaonuo.common.util.CommonServletUtil;
21
-
22
-import java.util.List;
23
-
24
-/**
25
- * 通用分页请求
26
- *
27
- * @author xuyuxiang
28
- * @date 2021/12/18 14:43
29
- */
30
-@Slf4j
31
-public class CommonPageRequest {
32
-
33
-    private static final String PAGE_SIZE_PARAM_NAME = "size";
34
-
35
-    private static final String PAGE_PARAM_NAME = "current";
36
-
37
-    private static final Integer PAGE_SIZE_MAX_VALUE = 100;
38
-
39
-    public static <T> Page<T> defaultPage() {
40
-        return defaultPage(null);
41
-    }
42
-
43
-    public static <T> Page<T> defaultPage(List<OrderItem> orderItemList) {
44
-
45
-        int size = 20;
46
-
47
-        int page = 1;
48
-
49
-        //每页条数
50
-        String pageSizeString = CommonServletUtil.getParamFromRequest(PAGE_SIZE_PARAM_NAME);
51
-        if (ObjectUtil.isNotEmpty(pageSizeString)) {
52
-            try {
53
-                size = Convert.toInt(pageSizeString);
54
-                if(size > PAGE_SIZE_MAX_VALUE) {
55
-                    size = PAGE_SIZE_MAX_VALUE;
56
-                }
57
-            } catch (Exception e) {
58
-                log.error(">>> 分页条数转换异常:", e);
59
-                size = 20;
60
-            }
61
-        }
62
-
63
-        //第几页
64
-        String pageString = CommonServletUtil.getParamFromRequest(PAGE_PARAM_NAME);
65
-        if (ObjectUtil.isNotEmpty(pageString)) {
66
-            try {
67
-                page = Convert.toInt(pageString);
68
-            } catch (Exception e) {
69
-                log.error(">>> 分页页数转换异常:", e);
70
-                page = 1;
71
-            }
72
-        }
73
-        Page<T> objectPage = new Page<>(page, size);
74
-        if (ObjectUtil.isNotEmpty(orderItemList)) {
75
-            objectPage.setOrders(orderItemList);
76
-        }
77
-        return objectPage;
78
-    }
79
-}

+ 0 - 80
snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonEntity.java

@@ -1,80 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.pojo;
14
-
15
-import com.baomidou.mybatisplus.annotation.FieldFill;
16
-import com.baomidou.mybatisplus.annotation.TableField;
17
-import com.baomidou.mybatisplus.annotation.TableLogic;
18
-import com.fasterxml.jackson.annotation.JsonIgnore;
19
-import com.fhs.core.trans.anno.Trans;
20
-import com.fhs.core.trans.constant.TransType;
21
-import com.fhs.core.trans.vo.TransPojo;
22
-import io.swagger.annotations.ApiModelProperty;
23
-import lombok.Getter;
24
-import lombok.Setter;
25
-
26
-import java.io.Serializable;
27
-import java.util.Date;
28
-
29
-/**
30
- * <p>
31
- *     通用基础字段实体:创建时间、创建人、修改时间、修改人,需要此通用字段的实体可继承此类,
32
- *     继承此类要求数据表有对应的字段
33
- * </p>
34
- *
35
- * @author xuyuxiang
36
- * @date 2020/3/10 16:02
37
- */
38
-@Getter
39
-@Setter
40
-public class CommonEntity implements Serializable, TransPojo {
41
-
42
-    /** 删除标志 */
43
-    @JsonIgnore
44
-    @TableLogic
45
-    @ApiModelProperty(value = "删除标志", position = 999)
46
-    @TableField(fill = FieldFill.INSERT)
47
-    private String deleteFlag;
48
-
49
-    /** 创建时间 */
50
-    @ApiModelProperty(value = "创建时间", position = 1000)
51
-    @TableField(fill = FieldFill.INSERT)
52
-    private Date createTime;
53
-
54
-    /** 创建人 */
55
-    @ApiModelProperty(value = "创建人", position = 1001)
56
-    @TableField(fill = FieldFill.INSERT)
57
-    @Trans(type = TransType.RPC, targetClassName = "vip.xiaonuo.sys.modular.user.entity.SysUser", fields = "name", alias = "createUser", ref = "createUserName")
58
-    private String createUser;
59
-
60
-    /** 创建人名称 */
61
-    @ApiModelProperty(value = "创建人名称", position = 1002)
62
-    @TableField(exist = false)
63
-    private String createUserName;
64
-
65
-    /** 更新时间 */
66
-    @ApiModelProperty(value = "更新时间", position = 1003)
67
-    @TableField(fill = FieldFill.UPDATE)
68
-    private Date updateTime;
69
-
70
-    /** 更新人 */
71
-    @ApiModelProperty(value = "更新人", position = 1004)
72
-    @TableField(fill = FieldFill.UPDATE)
73
-    @Trans(type = TransType.RPC, targetClassName = "vip.xiaonuo.sys.modular.user.entity.SysUser", fields = "name", alias = "updateUser", ref = "updateUserName")
74
-    private String updateUser;
75
-
76
-    /** 更新人名称 */
77
-    @ApiModelProperty(value = "更新人名称", position = 1005)
78
-    @TableField(exist = false)
79
-    private String updateUserName;
80
-}

+ 0 - 160
snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonResult.java

@@ -1,160 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.pojo;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import springfox.documentation.builders.ResponseMessageBuilder;
17
-import springfox.documentation.service.ResponseMessage;
18
-import vip.xiaonuo.common.enums.CommonExceptionEnum;
19
-
20
-import java.io.Serializable;
21
-import java.util.Arrays;
22
-import java.util.List;
23
-import java.util.stream.Collectors;
24
-
25
-/**
26
- * 对Ajax请求返回Json格式数据的简易封装
27
- *
28
- * @author xuyuxiang
29
- * @date 2022/8/15 16:08
30
- **/
31
-public class CommonResult<T> implements Serializable{
32
-    private static final long serialVersionUID = 1L;
33
-    public static final int CODE_SUCCESS = 200;
34
-    public static final int CODE_ERROR = 500;
35
-
36
-    @ApiModelProperty(value = "状态码")
37
-    private int code;
38
-
39
-    @ApiModelProperty(value = "提示语")
40
-    private String msg;
41
-
42
-    @ApiModelProperty(value = "返回数据")
43
-    private T data;
44
-
45
-    public CommonResult() {
46
-    }
47
-
48
-    public CommonResult(int code, String msg, T data) {
49
-        this.setCode(code);
50
-        this.setMsg(msg);
51
-        this.setData(data);
52
-    }
53
-
54
-    /**
55
-     * 获取code
56
-     * @return code
57
-     */
58
-    public Integer getCode() {
59
-        return this.code;
60
-    }
61
-
62
-    /**
63
-     * 获取msg
64
-     * @return msg
65
-     */
66
-    public String getMsg() {
67
-        return this.msg;
68
-    }
69
-    /**
70
-     * 获取data
71
-     * @return data
72
-     */
73
-    public T getData() {
74
-        return this.data;
75
-    }
76
-
77
-    /**
78
-     * 给code赋值,连缀风格
79
-     * @param code code
80
-     * @return 对象自身
81
-     */
82
-    public CommonResult<T> setCode(int code) {
83
-        this.code = code;
84
-        return this;
85
-    }
86
-
87
-    /**
88
-     * 给msg赋值,连缀风格
89
-     * @param msg msg
90
-     * @return 对象自身
91
-     */
92
-    public CommonResult<T> setMsg(String msg) {
93
-        this.msg = msg;
94
-        return this;
95
-    }
96
-
97
-    /**
98
-     * 给data赋值,连缀风格
99
-     * @param data data
100
-     * @return 对象自身
101
-     */
102
-    public CommonResult<T> setData(T data) {
103
-        this.data = data;
104
-        return this;
105
-    }
106
-
107
-
108
-    // ============================  构建  ==================================
109
-
110
-    // 构建成功
111
-    public static <T> CommonResult<T> ok() {
112
-        return new CommonResult<>(CODE_SUCCESS, "操作成功", null);
113
-    }
114
-    public static <T> CommonResult<T> ok(String msg) {
115
-        return new CommonResult<>(CODE_SUCCESS, msg, null);
116
-    }
117
-    public static <T> CommonResult<T> code(int code) {
118
-        return new CommonResult<>(code, null, null);
119
-    }
120
-    public static <T> CommonResult<T> data(T data) {
121
-        return new CommonResult<>(CODE_SUCCESS, "操作成功", data);
122
-    }
123
-
124
-    // 构建失败
125
-    public static <T> CommonResult<T> error() {
126
-        return new CommonResult<>(CODE_ERROR, "服务器异常", null);
127
-    }
128
-    public static <T> CommonResult<T> error(String msg) {
129
-        return new CommonResult<>(CODE_ERROR, msg, null);
130
-    }
131
-
132
-    // 构建指定状态码
133
-    public static <T> CommonResult<T> get(int code, String msg, T data) {
134
-        return new CommonResult<>(code, msg, data);
135
-    }
136
-
137
-    /*
138
-     * toString()
139
-     */
140
-    @Override
141
-    public String toString() {
142
-        return "{"
143
-                + "\"code\": " + this.getCode()
144
-                + ", \"msg\": \"" + this.getMsg() + "\""
145
-                + ", \"data\": \"" + this.getData() + "\""
146
-                + "}";
147
-    }
148
-
149
-    /**
150
-     * 响应状态码集合
151
-     *
152
-     * @author xuyuxiang
153
-     * @date 2022/7/25 13:36
154
-     **/
155
-    public static List<ResponseMessage> responseList() {
156
-        return Arrays.stream(CommonExceptionEnum.values()).map(commonExceptionEnum -> new ResponseMessageBuilder()
157
-                .code(commonExceptionEnum.getCode()).message(commonExceptionEnum.getMessage()).build())
158
-                .collect(Collectors.toList());
159
-    }
160
-}

+ 0 - 146
snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonValidList.java

@@ -1,146 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.pojo;
14
-
15
-import lombok.Data;
16
-
17
-import javax.validation.Valid;
18
-import java.util.*;
19
-
20
-/**
21
- * 可被校验的通用List
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/7/28 16:08
25
- **/
26
-@Data
27
-public class CommonValidList<E> implements List<E> {
28
-
29
-    @Valid
30
-    private List<E> list = new LinkedList<>();
31
-
32
-    @Override
33
-    public int size() {
34
-        return list.size();
35
-    }
36
-
37
-    @Override
38
-    public boolean isEmpty() {
39
-        return list.isEmpty();
40
-    }
41
-
42
-    @Override
43
-    public boolean contains(Object o) {
44
-        return list.contains(o);
45
-    }
46
-
47
-    @Override
48
-    public Iterator<E> iterator() {
49
-        return list.iterator();
50
-    }
51
-
52
-    @Override
53
-    public Object[] toArray() {
54
-        return list.toArray();
55
-    }
56
-
57
-    @Override
58
-    public <T> T[] toArray(T[] a) {
59
-        return list.toArray(a);
60
-    }
61
-
62
-    @Override
63
-    public boolean add(E e) {
64
-        return list.add(e);
65
-    }
66
-
67
-    @Override
68
-    public boolean remove(Object o) {
69
-        return list.remove(o);
70
-    }
71
-
72
-    @Override
73
-    public boolean containsAll(Collection<?> c) {
74
-        return list.containsAll(c);
75
-    }
76
-
77
-    @Override
78
-    public boolean addAll(Collection<? extends E> c) {
79
-        return list.addAll(c);
80
-    }
81
-
82
-    @Override
83
-    public boolean addAll(int index, Collection<? extends E> c) {
84
-        return list.addAll(index, c);
85
-    }
86
-
87
-    @Override
88
-    public boolean removeAll(Collection<?> c) {
89
-        return list.removeAll(c);
90
-    }
91
-
92
-    @Override
93
-    public boolean retainAll(Collection<?> c) {
94
-        return list.retainAll(c);
95
-    }
96
-
97
-    @Override
98
-    public void clear() {
99
-        list.clear();
100
-    }
101
-
102
-    @Override
103
-    public E get(int index) {
104
-        return list.get(index);
105
-    }
106
-
107
-    @Override
108
-    public E set(int index, E element) {
109
-        return list.set(index, element);
110
-    }
111
-
112
-    @Override
113
-    public void add(int index, E element) {
114
-        list.add(index, element);
115
-    }
116
-
117
-    @Override
118
-    public E remove(int index) {
119
-        return list.remove(index);
120
-    }
121
-
122
-    @Override
123
-    public int indexOf(Object o) {
124
-        return list.indexOf(o);
125
-    }
126
-
127
-    @Override
128
-    public int lastIndexOf(Object o) {
129
-        return list.lastIndexOf(o);
130
-    }
131
-
132
-    @Override
133
-    public ListIterator<E> listIterator() {
134
-        return list.listIterator();
135
-    }
136
-
137
-    @Override
138
-    public ListIterator<E> listIterator(int index) {
139
-        return list.listIterator(index);
140
-    }
141
-
142
-    @Override
143
-    public List<E> subList(int fromIndex, int toIndex) {
144
-        return list.subList(fromIndex, toIndex);
145
-    }
146
-}

+ 0 - 32
snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonWrapperInterface.java

@@ -1,32 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.pojo;
14
-
15
-import cn.hutool.json.JSONObject;
16
-
17
-/**
18
- * 通用包装接口
19
- *
20
- * @author xuyuxiang
21
- * @date 2022/9/15 21:17
22
- */
23
-public interface CommonWrapperInterface<T> {
24
-
25
-    /**
26
-     * 执行包装
27
-     *
28
-     * @author xuyuxiang
29
-     * @date 2022/9/15 21:17
30
-     */
31
-    JSONObject doWrap(T wrapperObject);
32
-}

+ 0 - 37
snowy-common/src/main/java/vip/xiaonuo/common/prop/CommonProperties.java

@@ -1,37 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.prop;
14
-
15
-import lombok.Getter;
16
-import lombok.Setter;
17
-import org.springframework.boot.context.properties.ConfigurationProperties;
18
-import org.springframework.stereotype.Component;
19
-
20
-/**
21
- * 通用基础配置
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/1/2 17:03
25
- */
26
-@Getter
27
-@Setter
28
-@Component
29
-@ConfigurationProperties(prefix = "snowy.config.common")
30
-public class CommonProperties {
31
-
32
-    /** 前端地址 */
33
-    private String frontUrl;
34
-
35
-    /** 后端地址 */
36
-    private String backendUrl;
37
-}

+ 0 - 31
snowy-common/src/main/java/vip/xiaonuo/common/sse/CommonSseParam.java

@@ -1,31 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.sse;
14
-
15
-import lombok.Getter;
16
-import lombok.Setter;
17
-
18
-/**
19
- * 通用SSE参数
20
- *
21
- * @author diantu
22
- * @date 2023/7/10
23
- */
24
-@Getter
25
-@Setter
26
-public class CommonSseParam {
27
-
28
-    private String clientId;
29
-
30
-    private String loginId;
31
-}

+ 0 - 30
snowy-common/src/main/java/vip/xiaonuo/common/timer/CommonTimerTaskRunner.java

@@ -1,30 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.timer;
14
-
15
-/**
16
- * 定时器执行者,定时器都要实现本接口,并需要把实现类加入到spring容器中
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/8/15 16:09
20
- **/
21
-public interface CommonTimerTaskRunner {
22
-
23
-    /**
24
-     * 任务执行的具体内容
25
-     *
26
-     * @author xuyuxiang
27
-     * @date 2022/8/15 16:09
28
-     **/
29
-    void action();
30
-}

+ 0 - 126
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonAvatarUtil.java

@@ -1,126 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.img.ImgUtil;
16
-import cn.hutool.core.util.RandomUtil;
17
-import cn.hutool.core.util.StrUtil;
18
-
19
-import java.awt.*;
20
-import java.awt.image.BufferedImage;
21
-import java.util.regex.Matcher;
22
-import java.util.regex.Pattern;
23
-
24
-/**
25
- * 通用头像工具类,生成文字头像
26
- *
27
- * @author xuyuxiang
28
- * @date 2022/7/5 17:36
29
- **/
30
-public class CommonAvatarUtil {
31
-
32
-    /**
33
-     * 绘制字体头像,如果是英文名,只显示首字母大写,
34
-     * 如果是中文名,只显示最后两个字
35
-     * 返回图片base64
36
-     *
37
-     * @author xuyuxiang
38
-     * @date 2022/7/5 17:36
39
-     **/
40
-    public static String generateImg(String name) {
41
-        int width = 100;
42
-        int height = 100;
43
-        int nameLength = name.length();
44
-        String nameWritten;
45
-        // 如果用户输入的姓名少于等于2个字符,不用截取
46
-        if (nameLength <= 2) {
47
-            nameWritten = name;
48
-        } else {
49
-            // 如果用户输入的姓名大于等于3个字符,截取后面两位
50
-            String first = StrUtil.sub(name, 0, 1);
51
-            if (isChinese(first)) {
52
-                // 截取倒数两位汉字
53
-                nameWritten = name.substring(nameLength - 2);
54
-            } else {
55
-                // 截取前面的两个英文字母
56
-                nameWritten = StrUtil.sub(name, 0, 1).toUpperCase();
57
-            }
58
-        }
59
-        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
60
-        Graphics2D g2 = (Graphics2D) bufferedImage.getGraphics();
61
-        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
62
-        g2.setBackground(getRandomColor());
63
-        g2.clearRect(0, 0, width, height);
64
-        g2.setPaint(Color.WHITE);
65
-        Font font;
66
-        // 两个字及以上
67
-        if(nameWritten.length() >= 2) {
68
-            font = new Font("微软雅黑", Font.BOLD, 30);
69
-            g2.setFont(font);
70
-            String firstWritten = StrUtil.sub(nameWritten, 0, 1);
71
-            String secondWritten = StrUtil.sub(nameWritten, 0, 2);
72
-            // 两个中文 如 言曌
73
-            if (isChinese(firstWritten) && isChinese(secondWritten)) {
74
-                g2.drawString(nameWritten, 20, 60);
75
-            }
76
-            // 首中次英 如 罗Q
77
-            else if (isChinese(firstWritten) && !isChinese(secondWritten)) {
78
-                g2.drawString(nameWritten, 27, 60);
79
-                // 首英 如 AB
80
-            } else {
81
-                nameWritten = nameWritten.substring(0,1);
82
-            }
83
-        }
84
-        // 一个字
85
-        if(nameWritten.length() == 1) {
86
-            // 中文
87
-            if(isChinese(nameWritten)) {
88
-                font = new Font("微软雅黑", Font.PLAIN, 50);
89
-                g2.setFont(font);
90
-                g2.drawString(nameWritten, 25, 70);
91
-            } else {
92
-                font = new Font("微软雅黑", Font.PLAIN, 55);
93
-                g2.setFont(font);
94
-                g2.drawString(nameWritten.toUpperCase(), 33, 67);
95
-            }
96
-        }
97
-        return ImgUtil.toBase64DataUri(bufferedImage, "jpg");
98
-    }
99
-
100
-    /**
101
-     * 获得随机颜色
102
-     *
103
-     * @author xuyuxiang
104
-     * @date 2022/7/5 17:41
105
-     **/
106
-    private static Color getRandomColor() {
107
-        String[] beautifulColors =
108
-                new String[]{"114,101,230", "255,191,0", "0,162,174", "245,106,0", "24,144,255", "96,109,128"};
109
-        String[] color = beautifulColors[RandomUtil.randomInt(beautifulColors.length)].split(StrUtil.COMMA);
110
-        return new Color(Integer.parseInt(color[0]), Integer.parseInt(color[1]),
111
-                Integer.parseInt(color[2]));
112
-    }
113
-
114
-    /**
115
-     * 判断字符串是否为中文
116
-     *
117
-     * @author xuyuxiang
118
-     * @date 2022/7/5 17:41
119
-     **/
120
-    private static boolean isChinese(String str) {
121
-        String regEx = "[\\u4e00-\\u9fa5]+";
122
-        Pattern p = Pattern.compile(regEx);
123
-        Matcher m = p.matcher(str);
124
-        return m.find();
125
-    }
126
-}

+ 0 - 142
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonCryptogramUtil.java

@@ -1,142 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import com.antherd.smcrypto.sm2.Sm2;
16
-import com.antherd.smcrypto.sm3.Sm3;
17
-import com.antherd.smcrypto.sm4.Sm4;
18
-import com.antherd.smcrypto.sm4.Sm4Options;
19
-import lombok.extern.slf4j.Slf4j;
20
-
21
-/**
22
- * 加密工具类,本框架目前使用 https://github.com/antherd/sm-crypto 项目中一些加解密方式
23
- * 使用小伙伴需要过等保密评相关,请在此处更改为自己的加密方法,或加密机,使用加密机同时需要替换公钥,私钥在内部无法导出,提供加密的方法
24
- * 如果不涉及到加密机方面的内容,请更改公私要为自己重新生成的,生成方式请看集成的sm-crypto主页
25
- *
26
- * @author yubaoshan
27
- * @date 2022/9/15 21:51
28
- */
29
-@Slf4j
30
-public class CommonCryptogramUtil {
31
-
32
-    /** 公钥 */
33
-    private static final String PUBLIC_KEY = "04298364ec840088475eae92a591e01284d1abefcda348b47eb324bb521bb03b0b2a5bc393f6b71dabb8f15c99a0050818b56b23f31743b93df9cf8948f15ddb54";
34
-
35
-    /** 私钥 */
36
-    private static final String PRIVATE_KEY = "3037723d47292171677ec8bd7dc9af696c7472bc5f251b2cec07e65fdef22e25";
37
-
38
-    /** SM4的对称秘钥(生产环境需要改成自己使用的) 16 进制字符串,要求为 128 比特 */
39
-    private static final String KEY = "0123456789abcdeffedcba9876543210";
40
-
41
-    /**
42
-     * 加密方法(Sm2 的专门针对前后端分离,非对称秘钥对的方式,暴露出去的公钥,对传输过程中的密码加个密)
43
-     *
44
-     * @author yubaoshan
45
-     * @date 2022/9/15 21:51
46
-     * @param str 待加密数据
47
-     * @return 加密后的密文
48
-     */
49
-    public static String doSm2Encrypt(String str) {
50
-        return Sm2.doEncrypt(str, PUBLIC_KEY);
51
-    }
52
-
53
-    /**
54
-     * 解密方法
55
-     * 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
56
-     *
57
-     * @author yubaoshan
58
-     * @date 2022/9/15 21:51
59
-     * @param str 密文
60
-     * @return 解密后的明文
61
-     */
62
-    public static String doSm2Decrypt(String str) {
63
-        // 解密
64
-        return Sm2.doDecrypt(str, PRIVATE_KEY);
65
-    }
66
-
67
-    /**
68
-     * 加密方法
69
-     *
70
-     * @author yubaoshan
71
-     * @date 2022/9/15 21:51
72
-     * @param str 待加密数据
73
-     * @return 加密后的密文
74
-     */
75
-    public static String doSm4CbcEncrypt(String str) {
76
-        // SM4 加密  cbc模式
77
-        Sm4Options sm4Options4 = new Sm4Options();
78
-        sm4Options4.setMode("cbc");
79
-        sm4Options4.setIv("fedcba98765432100123456789abcdef");
80
-        return Sm4.encrypt(str, KEY, sm4Options4);
81
-    }
82
-
83
-    /**
84
-     * 解密方法
85
-     * 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
86
-     *
87
-     * @author yubaoshan
88
-     * @date 2022/9/15 21:51
89
-     * @param str 密文
90
-     * @return 解密后的明文
91
-     */
92
-    public static String doSm4CbcDecrypt(String str) {
93
-        // 解密,cbc 模式,输出 utf8 字符串
94
-        Sm4Options sm4Options8 = new Sm4Options();
95
-        sm4Options8.setMode("cbc");
96
-        sm4Options8.setIv("fedcba98765432100123456789abcdef");
97
-        String docString =  Sm4.decrypt(str, KEY, sm4Options8);
98
-        if ("".equals(docString)) {
99
-            log.warn(">>> 字段解密失败,返回原文值:{}", str);
100
-            return str;
101
-        } else {
102
-            return docString;
103
-        }
104
-    }
105
-
106
-    /**
107
-     * 纯签名
108
-     *
109
-     * @author yubaoshan
110
-     * @date 2022/9/15 21:51
111
-     * @param str 待签名数据
112
-     * @return 签名结果
113
-     */
114
-    public static String doSignature(String str) {
115
-        return Sm2.doSignature(str, PRIVATE_KEY);
116
-    }
117
-
118
-    /**
119
-     * 验证签名结果
120
-     *
121
-     * @author yubaoshan
122
-     * @date 2022/9/15 21:51
123
-     * @param originalStr 签名原文数据
124
-     * @param str 签名结果
125
-     * @return 是否通过
126
-     */
127
-    public static boolean doVerifySignature(String originalStr, String str) {
128
-        return Sm2.doVerifySignature(originalStr, str, PUBLIC_KEY);
129
-    }
130
-
131
-    /**
132
-     * 通过杂凑算法取得hash值,用于做数据完整性保护
133
-     *
134
-     * @author yubaoshan
135
-     * @date 2022/9/15 21:51
136
-     * @param str 字符串
137
-     * @return hash 值
138
-     */
139
-    public static String doHashValue(String str) {
140
-        return Sm3.sm3(str);
141
-    }
142
-}

+ 0 - 63
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonDownloadUtil.java

@@ -1,63 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.io.FileUtil;
16
-import cn.hutool.core.io.IoUtil;
17
-import cn.hutool.core.util.URLUtil;
18
-import lombok.extern.slf4j.Slf4j;
19
-
20
-import javax.servlet.http.HttpServletResponse;
21
-import java.io.File;
22
-import java.io.IOException;
23
-
24
-/**
25
- * 文件下载工具类,使用本类前,对参数校验的异常使用CommonResponseUtil.renderError()方法进行渲染
26
- *
27
- * @author xuyuxiang
28
- * @date 2020/8/5 21:45
29
- */
30
-@Slf4j
31
-public class CommonDownloadUtil {
32
-
33
-    /**
34
-     * 下载文件
35
-     *
36
-     * @param file     要下载的文件
37
-     * @param response 响应
38
-     * @author xuyuxiang
39
-     * @date 2020/8/5 21:46
40
-     */
41
-    public static void download(File file, HttpServletResponse response) {
42
-        download(file.getName(), FileUtil.readBytes(file), response);
43
-    }
44
-
45
-    /**
46
-     * 下载文件
47
-     *
48
-     * @author xuyuxiang
49
-     * @date 2022/7/31 10:57
50
-     */
51
-    public static void download(String fileName, byte[] fileBytes, HttpServletResponse response) {
52
-        try {
53
-            response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode(fileName));
54
-            response.addHeader("Content-Length", "" + fileBytes.length);
55
-            response.setHeader("Access-Control-Allow-Origin", "*");
56
-            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
57
-            response.setContentType("application/octet-stream;charset=UTF-8");
58
-            IoUtil.write(response.getOutputStream(), true, fileBytes);
59
-        } catch (IOException e) {
60
-            log.error(">>> 文件下载异常:", e);
61
-        }
62
-    }
63
-}

+ 0 - 50
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonEmailUtil.java

@@ -1,50 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.lang.Validator;
16
-import cn.hutool.core.util.StrUtil;
17
-import vip.xiaonuo.common.exception.CommonException;
18
-
19
-/**
20
- * 通用邮件工具类
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/8/25 15:10
24
- **/
25
-public class CommonEmailUtil {
26
-
27
-    /**
28
-     * 判断是否邮箱
29
-     *
30
-     * @author xuyuxiang
31
-     * @date 2022/8/15 13:32
32
-     **/
33
-    public static boolean isEmail(String email) {
34
-        return  Validator.isEmail(email);
35
-    }
36
-
37
-    /**
38
-     * 校验邮箱格式
39
-     *
40
-     * @author xuyuxiang
41
-     * @date 2022/8/15 13:32
42
-     **/
43
-    public static void validEmail(String emails) {
44
-        StrUtil.split(emails, StrUtil.COMMA).forEach(email -> {
45
-            if(!isEmail(email)) {
46
-                throw new CommonException("邮件地址:{}格式错误", email);
47
-            }
48
-        });
49
-    }
50
-}

+ 0 - 40
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonFilterExceptionUtil.java

@@ -1,40 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import javax.servlet.ServletRequest;
16
-import javax.servlet.ServletResponse;
17
-
18
-/**
19
- * 过滤器异常工具类,用于处理过滤器中的异常
20
- * 原理:将异常转发到/errorView进行处理
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/7/18 18:59
24
- **/
25
-public class CommonFilterExceptionUtil {
26
-
27
-    /**
28
-     * 处理过滤器中的异常
29
-     *
30
-     * @author xuyuxiang
31
-     * @date 2022/7/18 19:00
32
-     **/
33
-    public static void handleFilterException(ServletRequest request, ServletResponse response, Exception e) {
34
-        try {
35
-            request.setAttribute("model", e);
36
-            request.getRequestDispatcher("/errorView").forward(request, response);
37
-        } catch (Exception ignored) {
38
-        }
39
-    }
40
-}

+ 0 - 108
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonIpAddressUtil.java

@@ -1,108 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.io.FileUtil;
16
-import cn.hutool.core.net.Ipv4Util;
17
-import cn.hutool.core.util.ObjectUtil;
18
-import cn.hutool.extra.servlet.ServletUtil;
19
-import lombok.extern.slf4j.Slf4j;
20
-import org.lionsoul.ip2region.xdb.Searcher;
21
-import vip.xiaonuo.common.exception.CommonException;
22
-
23
-import javax.servlet.http.HttpServletRequest;
24
-import java.io.File;
25
-import java.io.InputStream;
26
-
27
-/**
28
- * 根据ip地址定位工具类,离线方式
29
- * 参考地址:https://gitee.com/lionsoul/ip2region/tree/master/binding/java
30
- *
31
- * @author xuyuxiang
32
- * @date 2020/3/16 11:25
33
- */
34
-@Slf4j
35
-public class CommonIpAddressUtil {
36
-
37
-    private static final String LOCAL_REMOTE_HOST = "0:0:0:0:0:0:0:1";
38
-
39
-    private static final Searcher searcher;
40
-
41
-    static {
42
-        String fileName = "/ip2region.xdb";
43
-        File existFile = FileUtil.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName);
44
-        if(!FileUtil.exist(existFile)) {
45
-            InputStream resourceAsStream = CommonIpAddressUtil.class.getResourceAsStream(fileName);
46
-            if(ObjectUtil.isEmpty(resourceAsStream)) {
47
-                throw new CommonException("CommonIpAddressUtil初始化失败,原因:IP地址库数据不存在");
48
-            }
49
-            FileUtil.writeFromStream(resourceAsStream, existFile);
50
-        }
51
-
52
-        String dbPath = existFile.getPath();
53
-
54
-        // 1、从 dbPath 加载整个 xdb 到内存。
55
-        byte[] cBuff;
56
-        try {
57
-            cBuff = Searcher.loadContentFromFile(dbPath);
58
-        } catch (Exception e) {
59
-            log.error(">>> CommonIpAddressUtil初始化异常:", e);
60
-            throw new CommonException("CommonIpAddressUtil初始化异常");
61
-        }
62
-
63
-        // 2、使用上述的 cBuff 创建一个完全基于内存的查询对象。
64
-        try {
65
-            searcher = Searcher.newWithBuffer(cBuff);
66
-        } catch (Exception e) {
67
-            log.error(">>> CommonIpAddressUtil初始化异常:", e);
68
-            throw new CommonException("CommonIpAddressUtil初始化异常");
69
-        }
70
-    }
71
-
72
-    /**
73
-     * 获取客户端ip
74
-     *
75
-     * @author xuyuxiang
76
-     * @date 2020/3/19 9:32
77
-     */
78
-    public static String getIp(HttpServletRequest request) {
79
-        if (ObjectUtil.isEmpty(request)) {
80
-            return Ipv4Util.LOCAL_IP;
81
-        } else {
82
-            try {
83
-                String remoteHost = ServletUtil.getClientIP(request);
84
-                return LOCAL_REMOTE_HOST.equals(remoteHost) ? Ipv4Util.LOCAL_IP : remoteHost;
85
-            } catch (Exception e) {
86
-                log.error(">>> 获取客户端ip异常:", e);
87
-                return Ipv4Util.LOCAL_IP;
88
-            }
89
-        }
90
-    }
91
-
92
-    /**
93
-     * 根据IP地址离线获取城市
94
-     *
95
-     * @author xuyuxiang
96
-     * @date 2022/4/27 23:14
97
-     */
98
-    public static String getCityInfo(String ip) {
99
-        try {
100
-            ip = ip.trim();
101
-            // 3、执行查询
102
-            String region = searcher.searchByStr(ip);
103
-            return region.replace("0|", "").replace("|0", "");
104
-        } catch (Exception e) {
105
-            return "未知";
106
-        }
107
-    }
108
-}

+ 0 - 72
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonJoinPointUtil.java

@@ -1,72 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.map.MapUtil;
16
-import cn.hutool.core.util.ObjectUtil;
17
-import cn.hutool.core.util.StrUtil;
18
-import cn.hutool.json.JSONUtil;
19
-import org.aspectj.lang.JoinPoint;
20
-import org.aspectj.lang.Signature;
21
-import org.aspectj.lang.reflect.MethodSignature;
22
-import org.springframework.web.multipart.MultipartFile;
23
-
24
-import javax.servlet.http.HttpServletRequest;
25
-import javax.servlet.http.HttpServletResponse;
26
-import java.util.Map;
27
-
28
-/**
29
- * Spring切面工具类
30
- *
31
- * @author xuyuxiang
32
- * @date 2022/9/2 15:51
33
- */
34
-public class CommonJoinPointUtil {
35
-
36
-    /**
37
-     * 获取切面的参数JSON
38
-     *
39
-     * @author xuyuxiang
40
-     * @date 2022/9/2 15:51
41
-     */
42
-    public static String getArgsJsonString(JoinPoint joinPoint) {
43
-        Signature signature = joinPoint.getSignature();
44
-        // 参数名数组
45
-        String[] parameterNames = ((MethodSignature) signature).getParameterNames();
46
-        // 构造参数组集合
47
-        Map<String, Object> map = MapUtil.newHashMap();
48
-        Object[] args = joinPoint.getArgs();
49
-        for (int i = 0; i < args.length; i++) {
50
-            if(ObjectUtil.isNotEmpty(args[i]) && isUsefulParam(args[i])) {
51
-                if(JSONUtil.isTypeJSON(StrUtil.toString(args[i]))) {
52
-                    map.put(parameterNames[i], JSONUtil.parseObj(args[i]));
53
-                } else {
54
-                    map.put(parameterNames[i], JSONUtil.toJsonStr(args[i]));
55
-                }
56
-            }
57
-        }
58
-        return JSONUtil.toJsonStr(map);
59
-    }
60
-
61
-    /**
62
-     * 判断是否需要拼接的参数,过滤掉HttpServletRequest,MultipartFile,HttpServletResponse等类型参数
63
-     *
64
-     * @author xuyuxiang
65
-     * @date 2022/9/2 15:51
66
-     */
67
-    private static boolean isUsefulParam(Object arg) {
68
-        return !(arg instanceof MultipartFile) &&
69
-                !(arg instanceof HttpServletRequest) &&
70
-                !(arg instanceof HttpServletResponse);
71
-    }
72
-}

+ 0 - 125
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonNetWorkInfoUtil.java

@@ -1,125 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.convert.Convert;
16
-import cn.hutool.core.io.FileUtil;
17
-import cn.hutool.core.util.NumberUtil;
18
-import cn.hutool.system.SystemUtil;
19
-import lombok.extern.slf4j.Slf4j;
20
-
21
-import java.io.BufferedReader;
22
-import java.io.IOException;
23
-import java.io.InputStreamReader;
24
-import java.util.*;
25
-
26
-/**
27
- * 通用获取当前网速工具类
28
- *
29
- * @author xuyuxiang
30
- * @date 2022/9/1 23:45
31
- */
32
-@Slf4j
33
-public class CommonNetWorkInfoUtil {
34
-
35
-    /**
36
-     * 网速测速时间2s
37
-     */
38
-    private static final int SLEEP_SECONDS = 2;
39
-
40
-    /**
41
-     * 获取网络上下行速率,格式{"UP": "123KB/S, "DOWN": "345KB/S"}
42
-     *
43
-     * @author xuyuxiang
44
-     * @date 2022/9/1 23:51
45
-     */
46
-    public static Map<String, String> getNetworkUpRate() {
47
-        Map<String, String> result = new HashMap<>();
48
-        Process pro = null;
49
-        Runtime r = Runtime.getRuntime();
50
-        BufferedReader input = null;
51
-        try {
52
-            boolean isWindows = SystemUtil.getOsInfo().isWindows();
53
-            String command = isWindows ? "netstat -e" : "ifconfig";
54
-            pro = r.exec(command);
55
-            input = new BufferedReader(new InputStreamReader(pro.getInputStream()));
56
-            long[] result1 = readInLine(input, isWindows);
57
-            Thread.sleep(SLEEP_SECONDS * 1000);
58
-            pro.destroy();
59
-            input.close();
60
-            pro = r.exec(command);
61
-            input = new BufferedReader(new InputStreamReader(pro.getInputStream()));
62
-            long[] result2 = readInLine(input, isWindows);
63
-            String upSpeed = FileUtil.readableFileSize(Convert.toLong(NumberUtil
64
-                    .div(NumberUtil.sub(result2[0], result1[0]), SLEEP_SECONDS)));
65
-            String downSpeed = FileUtil.readableFileSize(Convert.toLong(NumberUtil
66
-                    .div(NumberUtil.sub(result2[1], result1[1]), SLEEP_SECONDS)));
67
-            result.put("UP", upSpeed + (upSpeed.endsWith("B")?"/S":"B/S"));
68
-            result.put("DOWN", downSpeed + (downSpeed.endsWith("B")?"/S":"B/S"));
69
-        } catch (Exception e) {
70
-            log.info(">>> 网络测速失败:", e);
71
-        } finally {
72
-            if (input != null) {
73
-                try {
74
-                    input.close();
75
-                } catch (IOException e) {
76
-                    log.info(">>> 网络测速失败:", e);
77
-                }
78
-            }
79
-            Optional.ofNullable(pro).ifPresent(Process::destroy);
80
-        }
81
-        return result;
82
-    }
83
-
84
-    private static String formatNumber(double f) {
85
-        return new Formatter().format("%.2f", f).toString();
86
-    }
87
-
88
-    private static long[] readInLine(BufferedReader input, boolean isWindows) {
89
-        long[] arr = new long[2];
90
-        StringTokenizer tokenStat;
91
-        try {
92
-            if (isWindows) {
93
-                // 获取windows环境下的网口上下行速率
94
-                input.readLine();
95
-                input.readLine();
96
-                input.readLine();
97
-                input.readLine();
98
-                tokenStat = new StringTokenizer(input.readLine());
99
-                tokenStat.nextToken();
100
-                arr[0] = Long.parseLong(tokenStat.nextToken());
101
-                arr[1] = Long.parseLong(tokenStat.nextToken());
102
-            } else {
103
-                // 获取linux环境下的网口上下行速率
104
-                long rx = 0, tx = 0;
105
-                String line = null;
106
-                //RX packets:4171603 errors:0 dropped:0 overruns:0 frame:0
107
-                //TX packets:4171603 errors:0 dropped:0 overruns:0 carrier:0
108
-                while ((line = input.readLine()) != null) {
109
-                    if (line.contains("RX packets")) {
110
-                        rx += Long.parseLong(line.substring(line.indexOf("RX packets") + 11, line.indexOf(" ",
111
-                                line.indexOf("RX packets") + 11)));
112
-                    } else if (line.contains("TX packets")) {
113
-                        tx += Long.parseLong(line.substring(line.indexOf("TX packets") + 11, line.indexOf(" ",
114
-                                line.indexOf("TX packets") + 11)));
115
-                    }
116
-                }
117
-                arr[0] = rx;
118
-                arr[1] = tx;
119
-            }
120
-        } catch (Exception e) {
121
-            log.error(">>> 网络测速异常:", e);
122
-        }
123
-        return arr;
124
-    }
125
-}

+ 0 - 65
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonResponseUtil.java

@@ -1,65 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.util.CharsetUtil;
16
-import cn.hutool.core.util.ObjectUtil;
17
-import cn.hutool.http.ContentType;
18
-import cn.hutool.json.JSONUtil;
19
-import vip.xiaonuo.common.pojo.CommonResult;
20
-
21
-import javax.servlet.http.HttpServletResponse;
22
-import java.io.IOException;
23
-
24
-/**
25
- * 通用响应工具类
26
- *
27
- * @author xuyuxiang
28
- * @date 2022/8/4 9:40
29
- **/
30
-public class CommonResponseUtil {
31
-
32
-    /**
33
-     * 以流的方式响应错误信息,默认错误消息
34
-     *
35
-     * @author xuyuxiang
36
-     * @date 2022/8/4 9:41
37
-     **/
38
-    public static void renderError(HttpServletResponse response) throws IOException {
39
-        renderError(response, null);
40
-    }
41
-
42
-    /**
43
-     * 以流的方式响应错误信息,指定错误消息
44
-     *
45
-     * @author xuyuxiang
46
-     * @date 2022/8/4 9:41
47
-     **/
48
-    public static void renderError(HttpServletResponse response, String msg) throws IOException {
49
-        response.setCharacterEncoding(CharsetUtil.UTF_8);
50
-        response.setContentType(ContentType.JSON.toString());
51
-        response.getWriter().write(JSONUtil.toJsonStr(ObjectUtil.isNotEmpty(msg)?CommonResult.error(msg):CommonResult.error()));
52
-    }
53
-
54
-    /**
55
-     * 以流的方式响应错误信息,指定错误码和错误消息
56
-     *
57
-     * @author xuyuxiang
58
-     * @date 2022/8/4 9:41
59
-     **/
60
-    public static void renderError(HttpServletResponse response, Integer code, String msg) throws IOException {
61
-        response.setCharacterEncoding(CharsetUtil.UTF_8);
62
-        response.setContentType(ContentType.JSON.toString());
63
-        response.getWriter().write(JSONUtil.toJsonStr(CommonResult.get(code, msg, null)));
64
-    }
65
-}

+ 0 - 99
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonServletUtil.java

@@ -1,99 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.util.ObjectUtil;
16
-import lombok.extern.slf4j.Slf4j;
17
-import org.springframework.web.context.request.RequestContextHolder;
18
-import org.springframework.web.context.request.ServletRequestAttributes;
19
-import vip.xiaonuo.common.exception.CommonException;
20
-
21
-import javax.servlet.http.Cookie;
22
-import javax.servlet.http.HttpServletRequest;
23
-import javax.servlet.http.HttpServletResponse;
24
-
25
-/**
26
- * HttpServlet工具类,获取当前request和response
27
- *
28
- * @author xuyuxiang
29
- * @date 2020/3/30 15:09
30
- */
31
-@Slf4j
32
-public class CommonServletUtil {
33
-
34
-    /**
35
-     * 从请求中中获取参数
36
-     *
37
-     * @author xuyuxiang
38
-     * @date 2021/10/14 10:44
39
-     **/
40
-    public static String getParamFromRequest(String paramName) {
41
-        HttpServletRequest request = getRequest();
42
-
43
-        // 1. 尝试从请求体里面读取
44
-        String paramValue = request.getParameter(paramName);
45
-
46
-        // 2. 尝试从header里读取
47
-        if (ObjectUtil.isEmpty(paramValue)) {
48
-            paramValue = request.getHeader(paramName);
49
-        }
50
-        // 3. 尝试从cookie里读取
51
-        if (ObjectUtil.isEmpty(paramValue)) {
52
-            Cookie[] cookies = request.getCookies();
53
-            if(ObjectUtil.isNotEmpty(cookies)) {
54
-                for (Cookie cookie : cookies) {
55
-                    String cookieName = cookie.getName();
56
-                    if (cookieName.equals(paramName)) {
57
-                        return cookie.getValue();
58
-                    }
59
-                }
60
-            }
61
-        }
62
-        // 4. 返回
63
-        return paramValue;
64
-    }
65
-
66
-    public static HttpServletRequest getRequest() {
67
-        ServletRequestAttributes servletRequestAttributes;
68
-        try {
69
-            servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
70
-        } catch (Exception e) {
71
-            log.error(">>> 非Web上下文无法获取Request:", e);
72
-            throw new CommonException("非Web上下文无法获取Request");
73
-        }
74
-        if (servletRequestAttributes == null) {
75
-            throw new CommonException("非Web上下文无法获取Request");
76
-        } else {
77
-            return servletRequestAttributes.getRequest();
78
-        }
79
-    }
80
-
81
-    public static HttpServletResponse getResponse() {
82
-        ServletRequestAttributes servletRequestAttributes;
83
-        try {
84
-            servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
85
-        } catch (Exception e) {
86
-            log.error(">>> 非Web上下文无法获取Response:", e);
87
-            throw new CommonException("非Web上下文无法获取Response");
88
-        }
89
-        if (servletRequestAttributes == null) {
90
-            throw new CommonException("非Web上下文无法获取Response");
91
-        } else {
92
-            return servletRequestAttributes.getResponse();
93
-        }
94
-    }
95
-
96
-    public static boolean isWeb() {
97
-        return RequestContextHolder.getRequestAttributes() != null;
98
-    }
99
-}

+ 0 - 183
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonTimeFormatUtil.java

@@ -1,183 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.date.DatePattern;
16
-import cn.hutool.core.date.DateTime;
17
-import cn.hutool.core.date.DateUnit;
18
-import cn.hutool.core.date.DateUtil;
19
-
20
-import java.util.Date;
21
-
22
-/**
23
- * 时间格式化工具类
24
- *
25
- * @author xuyuxiang
26
- * @date 2022/6/24 15:28
27
- **/
28
-public class CommonTimeFormatUtil {
29
-
30
-    private static final long ONE_MINUTE_SECONDS = 60;
31
-
32
-    private static final int BEFORE_DAWN_HOUR = 6;
33
-
34
-    private static final int MORNING_END_HOUR = 12;
35
-
36
-    private static final int NOON_END_HOUR = 13;
37
-
38
-    private static final int AFTERNOON_END_HOUR = 18;
39
-
40
-    private static final int NIGHT_END_HOUR = 24;
41
-
42
-    /**
43
-     * 将日期格式化为仿微信的日期
44
-     *
45
-     * @author xuyuxiang
46
-     * @date 2022/6/24 15:28
47
-     **/
48
-    public static String formatWxPastTime(Date date) {
49
-        if (DateUtil.between(date, DateUtil.date(), DateUnit.SECOND, false) < 0) {
50
-            //今天之后的时间显示年月日时分
51
-            return DateUtil.format(date, DatePattern.NORM_DATETIME_MINUTE_PATTERN);
52
-        } else {
53
-            //如果是今年
54
-            if (DateUtil.thisYear() == DateUtil.year(date)) {
55
-                //如果是今天
56
-                if (DateUtil.isSameDay(date, DateUtil.date())) {
57
-                    //相差分钟数
58
-                    long betweenMinute = DateUtil.between(date, DateUtil.date(), DateUnit.MINUTE);
59
-                    //如果在1小时之内
60
-                    if (betweenMinute < ONE_MINUTE_SECONDS) {
61
-                        //一分钟之内,显示刚刚
62
-                        if (betweenMinute < 1) {
63
-                            return "刚刚";
64
-                        } else {
65
-                            //一分钟之外,显示xx分钟前
66
-                            return betweenMinute + "分钟前";
67
-                        }
68
-                    } else {
69
-                        //一小时之外,显示时分
70
-                        return getTodayHour(date) + " " + DateUtil.format(date, "HH:mm");
71
-                    }
72
-                } else if (DateUtil.isSameDay(date, DateUtil.yesterday())) {
73
-                    //如果是昨天,显示昨天时分
74
-                    return "昨天 " + DateUtil.format(date, "HH:mm");
75
-                } else if (isThisWeek(date)) {
76
-                    //如果是本周
77
-                    String weekday;
78
-                    //获取是本周的第几天
79
-                    int dayOfWeek = DateUtil.dayOfWeek(date) - 1;
80
-                    switch (dayOfWeek) {
81
-                        case 1:
82
-                            weekday = "周一";
83
-                            break;
84
-                        case 2:
85
-                            weekday = "周二";
86
-                            break;
87
-                        case 3:
88
-                            weekday = "周三";
89
-                            break;
90
-                        case 4:
91
-                            weekday = "周四";
92
-                            break;
93
-                        case 5:
94
-                            weekday = "周五";
95
-                            break;
96
-                        case 6:
97
-                            weekday = "周六";
98
-                            break;
99
-                        default:
100
-                            weekday = "周日";
101
-                            break;
102
-                    }
103
-                    //显示本周时分
104
-                    return weekday + " " + DateUtil.format(date, "HH:mm");
105
-                } else {
106
-                    //否则显示月日时分
107
-                    return DateUtil.format(date, "MM-dd HH:mm");
108
-                }
109
-            } else {
110
-                //本年之外显示年月日时分
111
-                return DateUtil.format(date, DatePattern.NORM_DATETIME_MINUTE_PATTERN);
112
-            }
113
-        }
114
-    }
115
-
116
-    /**
117
-     * 将秒数格式化为天时分秒
118
-     *
119
-     * @author xuyuxiang
120
-     * @date 2022/6/24 15:29
121
-     **/
122
-    public static String formatSeconds(long secondsParam) {
123
-        String result;
124
-        long days = secondsParam / ( ONE_MINUTE_SECONDS * ONE_MINUTE_SECONDS * NIGHT_END_HOUR);
125
-        long hours = (secondsParam % ( ONE_MINUTE_SECONDS * ONE_MINUTE_SECONDS * NIGHT_END_HOUR)) / (ONE_MINUTE_SECONDS * ONE_MINUTE_SECONDS);
126
-        long minutes = (secondsParam % ( ONE_MINUTE_SECONDS * ONE_MINUTE_SECONDS)) /ONE_MINUTE_SECONDS;
127
-        long seconds = secondsParam % ONE_MINUTE_SECONDS;
128
-        if(days > 0) {
129
-            result = days + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒";
130
-        } else if(hours > 0) {
131
-            result = hours + "小时" + minutes + "分钟" + seconds + "秒";
132
-        } else if(minutes > 0) {
133
-            result = minutes + "分钟" + seconds + "秒";
134
-        } else {
135
-            result = seconds + "秒";
136
-        }
137
-        return result;
138
-    }
139
-
140
-    /**
141
-     * 判断日期是否是本周
142
-     *
143
-     * @param date 要判断的日期
144
-     * @return boolean
145
-     * @author xuyuxiang
146
-     * @date 2020/8/6 12:10
147
-     **/
148
-    private static boolean isThisWeek(Date date) {
149
-        //获取本周开始时间
150
-        DateTime beginOfWeek = DateUtil.beginOfWeek(DateUtil.date());
151
-        //获取与本周开始时间相差的天数
152
-        long betweenBegin = DateUtil.between(date, beginOfWeek, DateUnit.DAY, false) + 1;
153
-        //如果是同一天,或相差天数小于0,则是本周
154
-        return DateUtil.isSameDay(date, beginOfWeek) || betweenBegin < 0;
155
-    }
156
-
157
-    /**
158
-     * 根据今天日期获取早中晚
159
-     *
160
-     * @author xuyuxiang
161
-     * @date 2020/8/6 14:42
162
-     **/
163
-    private static String getTodayHour(Date date) {
164
-        String result = "";
165
-        int hour = DateUtil.hour(date, true);
166
-        if (hour >= 0 && hour <= BEFORE_DAWN_HOUR) {
167
-            result = "凌晨";
168
-        }
169
-        if (hour > BEFORE_DAWN_HOUR && hour < MORNING_END_HOUR) {
170
-            result = "上午";
171
-        }
172
-        if (hour == MORNING_END_HOUR) {
173
-            result = "中午";
174
-        }
175
-        if (hour >= NOON_END_HOUR && hour <= AFTERNOON_END_HOUR) {
176
-            result = "下午";
177
-        }
178
-        if (hour > AFTERNOON_END_HOUR && hour <= NIGHT_END_HOUR) {
179
-            result = "晚上";
180
-        }
181
-        return result;
182
-    }
183
-}

+ 0 - 86
snowy-common/src/main/java/vip/xiaonuo/common/util/CommonUaUtil.java

@@ -1,86 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.common.util;
14
-
15
-import cn.hutool.core.util.ObjectUtil;
16
-import cn.hutool.core.util.StrUtil;
17
-import cn.hutool.extra.servlet.ServletUtil;
18
-import cn.hutool.http.useragent.Browser;
19
-import cn.hutool.http.useragent.UserAgent;
20
-import cn.hutool.http.useragent.UserAgentUtil;
21
-
22
-import javax.servlet.http.HttpServletRequest;
23
-
24
-/**
25
- * 用户代理工具类
26
- *
27
- * @author xuyuxiang
28
- * @date 2022/9/2 15:34
29
- */
30
-public class CommonUaUtil {
31
-
32
-    /**
33
-     * 获取客户端浏览器
34
-     *
35
-     * @author xuyuxiang
36
-     * @date 2020/3/19 14:53
37
-     */
38
-    public static String getBrowser(HttpServletRequest request) {
39
-        UserAgent userAgent = getUserAgent(request);
40
-        if (ObjectUtil.isEmpty(userAgent)) {
41
-            return StrUtil.DASHED;
42
-        } else {
43
-            String browser = userAgent.getBrowser().toString();
44
-            if (StrUtil.isNotBlank(browser) && browser.length() > 250) {
45
-                browser = browser.substring(0, 250);
46
-            }
47
-            return "Unknown".equals(browser) ? StrUtil.DASHED : browser;
48
-        }
49
-    }
50
-
51
-    /**
52
-     * 获取客户端操作系统
53
-     *
54
-     * @author xuyuxiang
55
-     * @date 2022/9/2 15:36
56
-     */
57
-    public static String getOs(HttpServletRequest request) {
58
-        UserAgent userAgent = getUserAgent(request);
59
-        if (ObjectUtil.isEmpty(userAgent)) {
60
-            return StrUtil.DASHED;
61
-        } else {
62
-            String os = userAgent.getOs().toString();
63
-            if (StrUtil.isNotBlank(os) && os.length() > 250) {
64
-                os = os.substring(0, 250);
65
-            }
66
-            return "Unknown".equals(os) ? StrUtil.DASHED : os;
67
-        }
68
-    }
69
-
70
-    /**
71
-     * 获取请求代理头
72
-     *
73
-     * @author xuyuxiang
74
-     * @date 2022/9/2 15:36
75
-     */
76
-    private static UserAgent getUserAgent(HttpServletRequest request) {
77
-        String userAgentStr = ServletUtil.getHeaderIgnoreCase(request, "User-Agent");
78
-        UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
79
-        if (ObjectUtil.isNotEmpty(userAgentStr)) {
80
-            if ("Unknown".equals(userAgent.getBrowser().getName())) {
81
-                userAgent.setBrowser(new Browser(userAgentStr, null, ""));
82
-            }
83
-        }
84
-        return userAgent;
85
-    }
86
-}

+ 0 - 15
snowy-plugin-api/README.md

@@ -1,15 +0,0 @@
1
-# 插件API接口模块
2
-
3
-####登录鉴权插件api接口: snowy-plugin-auth-api
4
-
5
-####业务功能插件api接口: snowy-plugin-biz-api
6
-
7
-####C端功能插件api接口: snowy-plugin-client-api
8
-
9
-####开发工具插件api接口: snowy-plugin-dev-api
10
-
11
-####代码生成api接口: snowy-plugin-gen-api
12
-
13
-####移动端管理api接口: snowy-plugin-mobile-api
14
-
15
-####系统功能插件api接口: snowy-plugin-sys-api

+ 0 - 39
snowy-plugin-api/pom.xml

@@ -1,39 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-api</artifactId>
14
-    <packaging>pom</packaging>
15
-    <description>插件API接口模块</description>
16
-
17
-    <modules>
18
-        <!-- 登录鉴权插件api接口 -->
19
-        <module>snowy-plugin-auth-api</module>
20
-
21
-        <!-- 业务功能插件api接口 -->
22
-        <module>snowy-plugin-biz-api</module>
23
-
24
-        <!-- C端功能插件api接口 -->
25
-        <module>snowy-plugin-client-api</module>
26
-
27
-        <!-- 开发工具插件api接口 -->
28
-        <module>snowy-plugin-dev-api</module>
29
-
30
-        <!-- 代码生成插件api接口 -->
31
-        <module>snowy-plugin-gen-api</module>
32
-
33
-        <!-- 移动端管理插件api接口 -->
34
-        <module>snowy-plugin-mobile-api</module>
35
-
36
-        <!-- 系统功能插件api接口 -->
37
-        <module>snowy-plugin-sys-api</module>
38
-    </modules>
39
-</project>

+ 0 - 30
snowy-plugin-api/snowy-plugin-auth-api/pom.xml

@@ -1,30 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-auth-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>登录鉴权插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-
24
-        <!-- sa-token-core -->
25
-        <dependency>
26
-            <groupId>cn.dev33</groupId>
27
-            <artifactId>sa-token-core</artifactId>
28
-        </dependency>
29
-    </dependencies>
30
-</project>

+ 0 - 124
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/api/SaBaseLoginUserApi.java

@@ -1,124 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-import vip.xiaonuo.auth.core.pojo.SaBaseClientLoginUser;
17
-import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
18
-
19
-import java.util.List;
20
-
21
-/**
22
- * 登录用户API,由其他模块实现
23
- *
24
- * @author xuyuxiang
25
- * @date 2021/12/23 21:48
26
- */
27
-public interface SaBaseLoginUserApi {
28
-
29
-    /**
30
-     * 根据id获取B端用户信息,查不到则返回null
31
-     *
32
-     * @author xuyuxiang
33
-     * @date 2022/3/10 16:14
34
-     **/
35
-    SaBaseLoginUser getUserById(String id);
36
-
37
-    /**
38
-     * 根据id获取C端用户信息,查不到则返回null
39
-     *
40
-     * @author xuyuxiang
41
-     * @date 2022/3/10 16:14
42
-     **/
43
-    SaBaseClientLoginUser getClientUserById(String id);
44
-
45
-    /**
46
-     * 根据账号获取B端用户信息,查不到则返回null
47
-     *
48
-     * @author xuyuxiang
49
-     * @date 2022/3/10 16:14
50
-     **/
51
-    SaBaseLoginUser getUserByAccount(String account);
52
-
53
-    /**
54
-     * 根据账号获取C端用户信息,查不到则返回null
55
-     *
56
-     * @author xuyuxiang
57
-     * @date 2022/3/10 16:14
58
-     **/
59
-    SaBaseClientLoginUser getClientUserByAccount(String account);
60
-
61
-    /**
62
-     * 根据手机号获取B端用户信息,查不到则返回null
63
-     *
64
-     * @author xuyuxiang
65
-     * @date 2022/3/10 16:14
66
-     **/
67
-    SaBaseLoginUser getUserByPhone(String phone);
68
-
69
-    /**
70
-     * 根据手机号获取C端用户信息,查不到则返回null
71
-     *
72
-     * @author xuyuxiang
73
-     * @date 2022/3/10 16:14
74
-     **/
75
-    SaBaseClientLoginUser getClientUserByPhone(String phone);
76
-
77
-    /**
78
-     * 根据用户id获取用户集合
79
-     *
80
-     * @author xuyuxiang
81
-     * @date 2022/4/27 22:53
82
-     */
83
-    List<JSONObject> listUserByUserIdList(List<String> userIdList);
84
-
85
-    /**
86
-     * 根据用户id获取角色集合
87
-     *
88
-     * @author xuyuxiang
89
-     * @date 2022/4/27 22:53
90
-     */
91
-    List<JSONObject> getRoleListByUserId(String userId);
92
-
93
-    /**
94
-     * 根据角色id和用户id集合获取按钮码集合
95
-     *
96
-     * @author xuyuxiang
97
-     * @date 2022/4/27 22:54
98
-     */
99
-    List<String> getButtonCodeListListByUserAndRoleIdList(List<String> userAndRoleIdList);
100
-
101
-    /**
102
-     * 根据角色id和用户id集合获取移动端按钮码集合
103
-     *
104
-     * @author xuyuxiang
105
-     * @date 2022/4/27 22:54
106
-     */
107
-    List<String> getMobileButtonCodeListListByUserIdAndRoleIdList(List<String> userAndRoleIdList);
108
-
109
-    /**
110
-     * 根据角色id和用户id集合获取权限集合
111
-     *
112
-     * @author xuyuxiang
113
-     * @date 2022/4/27 22:54
114
-     */
115
-    List<JSONObject> getPermissionListByUserIdAndRoleIdList(List<String> userAndRoleIdList, String orgId);
116
-
117
-    /**
118
-     * 更新用户的登录时间和登录ip等信息
119
-     *
120
-     * @author xuyuxiang
121
-     * @date 2022/4/27 22:57
122
-     */
123
-    void updateUserLoginInfo(String userId, String device);
124
-}

+ 0 - 35
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/annotation/SaClientCheckLogin.java

@@ -1,35 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.annotation;
14
-
15
-import cn.dev33.satoken.annotation.SaCheckLogin;
16
-import vip.xiaonuo.auth.core.util.StpClientUtil;
17
-
18
-import java.lang.annotation.ElementType;
19
-import java.lang.annotation.Retention;
20
-import java.lang.annotation.RetentionPolicy;
21
-import java.lang.annotation.Target;
22
-
23
-/**
24
- * 登录认证(前台User版):只有登录之后才能进入该方法
25
- * 可标注在函数、类上(效果等同于标注在此类的所有方法上)
26
- *
27
- * @author xuyuxiang
28
- * @date 2022/3/10 10:39
29
- **/
30
-@SaCheckLogin(type = StpClientUtil.TYPE)
31
-@Retention(RetentionPolicy.RUNTIME)
32
-@Target({ ElementType.METHOD, ElementType.TYPE})
33
-public @interface SaClientCheckLogin {
34
-
35
-}

+ 0 - 51
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/annotation/SaClientCheckPermission.java

@@ -1,51 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.annotation;
14
-
15
-import cn.dev33.satoken.annotation.SaCheckPermission;
16
-import cn.dev33.satoken.annotation.SaMode;
17
-import org.springframework.core.annotation.AliasFor;
18
-import vip.xiaonuo.auth.core.util.StpClientUtil;
19
-
20
-import java.lang.annotation.ElementType;
21
-import java.lang.annotation.Retention;
22
-import java.lang.annotation.RetentionPolicy;
23
-import java.lang.annotation.Target;
24
-
25
-/**
26
- * 权限认证(前台User版):必须具有指定权限才能进入该方法
27
- * 可标注在函数、类上(效果等同于标注在此类的所有方法上)
28
- *
29
- * @author xuyuxiang
30
- * @date 2022/3/10 10:40
31
- **/
32
-@SaCheckPermission(type = StpClientUtil.TYPE)
33
-@Retention(RetentionPolicy.RUNTIME)
34
-@Target({ ElementType.METHOD, ElementType.TYPE})
35
-public @interface SaClientCheckPermission {
36
-
37
-    /**
38
-     * 需要校验的权限码
39
-     * @return 需要校验的权限码
40
-     */
41
-    @AliasFor(annotation = SaCheckPermission.class)
42
-    String [] value() default {};
43
-
44
-    /**
45
-     * 验证模式:AND | OR,默认AND
46
-     * @return 验证模式
47
-     */
48
-    @AliasFor(annotation = SaCheckPermission.class)
49
-    SaMode mode() default SaMode.AND;
50
-
51
-}

+ 0 - 52
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/annotation/SaClientCheckRole.java

@@ -1,52 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.annotation;
14
-
15
-
16
-import cn.dev33.satoken.annotation.SaCheckRole;
17
-import cn.dev33.satoken.annotation.SaMode;
18
-import org.springframework.core.annotation.AliasFor;
19
-import vip.xiaonuo.auth.core.util.StpClientUtil;
20
-
21
-import java.lang.annotation.ElementType;
22
-import java.lang.annotation.Retention;
23
-import java.lang.annotation.RetentionPolicy;
24
-import java.lang.annotation.Target;
25
-
26
-/**
27
- * 角色认证(前台User版):必须具有指定角色标识才能进入该方法
28
- * 可标注在函数、类上(效果等同于标注在此类的所有方法上)
29
- *
30
- * @author xuyuxiang
31
- * @date 2022/3/10 10:41
32
- **/
33
-@SaCheckRole(type = StpClientUtil.TYPE)
34
-@Retention(RetentionPolicy.RUNTIME)
35
-@Target({ ElementType.METHOD, ElementType.TYPE})
36
-public @interface SaClientCheckRole {
37
-
38
-    /**
39
-     * 需要校验的角色标识
40
-     * @return 需要校验的角色标识
41
-     */
42
-    @AliasFor(annotation = SaCheckRole.class)
43
-    String [] value() default {};
44
-
45
-    /**
46
-     * 验证模式:AND | OR,默认AND
47
-     * @return 验证模式
48
-     */
49
-    @AliasFor(annotation = SaCheckRole.class)
50
-    SaMode mode() default SaMode.AND;
51
-
52
-}

+ 0 - 49
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/enums/SaClientTypeEnum.java

@@ -1,49 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.enums;
14
-
15
-import lombok.Getter;
16
-import vip.xiaonuo.common.exception.CommonException;
17
-
18
-/**
19
- * 登录端类型枚举
20
- *
21
- * @author xuyuxiang
22
- * @date 2021/10/11 14:02
23
- **/
24
-@Getter
25
-public enum SaClientTypeEnum {
26
-
27
-    /**
28
-     * B端用户
29
-     */
30
-    B("B"),
31
-
32
-    /**
33
-     * C端用户
34
-     */
35
-    C("C");
36
-
37
-    private final String value;
38
-
39
-    SaClientTypeEnum(String value) {
40
-        this.value = value;
41
-    }
42
-
43
-    public static void validate(String value) {
44
-        boolean flag = B.getValue().equals(value) || C.getValue().equals(value);
45
-        if(!flag) {
46
-            throw new CommonException("不支持的登录端类型:{}", value);
47
-        }
48
-    }
49
-}

+ 0 - 235
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseClientLoginUser.java

@@ -1,235 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.pojo;
14
-
15
-import com.fasterxml.jackson.annotation.JsonIgnore;
16
-import io.swagger.annotations.ApiModelProperty;
17
-import lombok.Getter;
18
-import lombok.Setter;
19
-
20
-import java.util.Date;
21
-import java.util.List;
22
-
23
-/**
24
- * 基础的C端登录用户对象,可继承此类扩展更多属性
25
- *
26
- * @author xuyuxiang
27
- * @date 2021/12/23 21:49
28
- */
29
-@Getter
30
-@Setter
31
-public abstract class SaBaseClientLoginUser {
32
-
33
-    /** id */
34
-    @ApiModelProperty(value = "id", position = 1)
35
-    private String id;
36
-
37
-    /** 头像 */
38
-    @ApiModelProperty(value = "头像,图片base64", position = 2)
39
-    private String avatar;
40
-
41
-    /** 签名 */
42
-    @ApiModelProperty(value = "签名,图片base64", position = 3)
43
-    private String signature;
44
-
45
-    /** 账号 */
46
-    @ApiModelProperty(value = "账号", position = 4)
47
-    private String account;
48
-
49
-    /** 姓名 */
50
-    @ApiModelProperty(value = "姓名", position = 5)
51
-    private String name;
52
-
53
-    /** 昵称 */
54
-    @ApiModelProperty(value = "昵称", position = 6)
55
-    private String nickname;
56
-
57
-    /** 性别 */
58
-    @ApiModelProperty(value = "性别", position = 7)
59
-    private String gender;
60
-
61
-    /** 年龄 */
62
-    @ApiModelProperty(value = "年龄", position = 8)
63
-    private String age;
64
-
65
-    /** 出生日期 */
66
-    @ApiModelProperty(value = "出生日期", position = 9)
67
-    private String birthday;
68
-
69
-    /** 民族 */
70
-    @ApiModelProperty(value = "民族", position = 10)
71
-    private String nation;
72
-
73
-    /** 籍贯 */
74
-    @ApiModelProperty(value = "籍贯", position = 11)
75
-    private String nativePlace;
76
-
77
-    /** 家庭住址 */
78
-    @ApiModelProperty(value = "家庭住址", position = 12)
79
-    private String homeAddress;
80
-
81
-    /** 通信地址 */
82
-    @ApiModelProperty(value = "通信地址", position = 13)
83
-    private String mailingAddress;
84
-
85
-    /** 证件类型 */
86
-    @ApiModelProperty(value = "证件类型", position = 14)
87
-    private String idCardType;
88
-
89
-    /** 证件号码 */
90
-    @ApiModelProperty(value = "证件号码", position = 15)
91
-    private String idCardNumber;
92
-
93
-    /** 文化程度 */
94
-    @ApiModelProperty(value = "文化程度", position = 16)
95
-    private String cultureLevel;
96
-
97
-    /** 政治面貌 */
98
-    @ApiModelProperty(value = "政治面貌", position = 17)
99
-    private String politicalOutlook;
100
-
101
-    /** 毕业院校 */
102
-    @ApiModelProperty(value = "毕业院校", position = 18)
103
-    private String college;
104
-
105
-    /** 学历 */
106
-    @ApiModelProperty(value = "学历", position = 19)
107
-    private String education;
108
-
109
-    /** 学制 */
110
-    @ApiModelProperty(value = "学制", position = 20)
111
-    private String eduLength;
112
-
113
-    /** 学位 */
114
-    @ApiModelProperty(value = "学位", position = 21)
115
-    private String degree;
116
-
117
-    /** 手机 */
118
-    @ApiModelProperty(value = "手机", position = 22)
119
-    private String phone;
120
-
121
-    /** 邮箱 */
122
-    @ApiModelProperty(value = "邮箱", position = 23)
123
-    private String email;
124
-
125
-    /** 家庭电话 */
126
-    @ApiModelProperty(value = "家庭电话", position = 24)
127
-    private String homeTel;
128
-
129
-    /** 办公电话 */
130
-    @ApiModelProperty(value = "办公电话", position = 25)
131
-    private String officeTel;
132
-
133
-    /** 紧急联系人 */
134
-    @ApiModelProperty(value = "紧急联系人", position = 26)
135
-    private String emergencyContact;
136
-
137
-    /** 紧急联系人电话 */
138
-    @ApiModelProperty(value = "紧急联系人电话", position = 27)
139
-    private String emergencyPhone;
140
-
141
-    /** 紧急联系人地址 */
142
-    @ApiModelProperty(value = "紧急联系人地址", position = 28)
143
-    private String emergencyAddress;
144
-
145
-    /** 上次登录ip */
146
-    @ApiModelProperty(value = "上次登录ip", position = 29)
147
-    private String lastLoginIp;
148
-
149
-    /** 上次登录地点 */
150
-    @ApiModelProperty(value = "上次登录地点", position = 30)
151
-    private String lastLoginAddress;
152
-
153
-    /** 上次登录时间 */
154
-    @ApiModelProperty(value = "上次登录时间", position = 31)
155
-    private Date lastLoginTime;
156
-
157
-    /** 上次登录设备 */
158
-    @ApiModelProperty(value = "上次登录设备", position = 32)
159
-    private String lastLoginDevice;
160
-
161
-    /** 最新登录ip */
162
-    @ApiModelProperty(value = "最新登录ip", position = 33)
163
-    private String latestLoginIp;
164
-
165
-    /** 最新登录地点 */
166
-    @ApiModelProperty(value = "最新登录地点", position = 34)
167
-    private String latestLoginAddress;
168
-
169
-    /** 最新登录时间 */
170
-    @ApiModelProperty(value = "最新登录时间", position = 35)
171
-    private Date latestLoginTime;
172
-
173
-    /** 最新登录设备 */
174
-    @ApiModelProperty(value = "最新登录设备", position = 36)
175
-    private String latestLoginDevice;
176
-
177
-    /** 用户状态 */
178
-    @ApiModelProperty(value = "用户状态", position = 37)
179
-    private String userStatus;
180
-
181
-    /** 排序码 */
182
-    @ApiModelProperty(value = "排序码", position = 38)
183
-    private Integer sortCode;
184
-
185
-    /** 扩展信息 */
186
-    @ApiModelProperty(value = "扩展信息", position = 39)
187
-    private String extJson;
188
-
189
-    /** 按钮码集合 */
190
-    @ApiModelProperty(value = "按钮码集合", position = 40)
191
-    private List<String> buttonCodeList;
192
-
193
-    /** 移动端按钮码集合 */
194
-    @ApiModelProperty(value = "移动端按钮码集合", position = 41)
195
-    private List<String> mobileButtonCodeList;
196
-
197
-    /** 权限码集合 */
198
-    @ApiModelProperty(value = "权限码集合", position = 42, hidden = true)
199
-    private List<String> permissionCodeList;
200
-
201
-    /** 角色码集合 */
202
-    @ApiModelProperty(value = "角色码集合", position = 43, hidden = true)
203
-    private List<String> roleCodeList;
204
-
205
-    /** 数据范围集合 */
206
-    @ApiModelProperty(value = "数据范围集合", position = 44, hidden = true)
207
-    private List<DataScope> dataScopeList;
208
-
209
-    /** 用户密码hash值 */
210
-    @JsonIgnore
211
-    @ApiModelProperty(value = "用户密码hash值", position = 45)
212
-    private String password;
213
-
214
-    /** 是否可登录,由继承类实现 */
215
-    public abstract Boolean getEnabled();
216
-
217
-    /**
218
-     * 数据范围类
219
-     *
220
-     * @author xuyuxiang
221
-     * @date 2022/8/15 13:57
222
-     **/
223
-    @Getter
224
-    @Setter
225
-    public static class DataScope {
226
-
227
-        /** API接口 */
228
-        @ApiModelProperty(value = "API接口", position = 1)
229
-        private String apiUrl;
230
-
231
-        /** 数据范围 */
232
-        @ApiModelProperty(value = "数据范围", position = 2)
233
-        private List<String> dataScope;
234
-    }
235
-}

+ 0 - 271
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseLoginUser.java

@@ -1,271 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.pojo;
14
-
15
-import com.fasterxml.jackson.annotation.JsonIgnore;
16
-import io.swagger.annotations.ApiModelProperty;
17
-import lombok.Getter;
18
-import lombok.Setter;
19
-
20
-import java.util.Date;
21
-import java.util.List;
22
-
23
-/**
24
- * 基础的B端登录用户对象,可继承此类扩展更多属性
25
- *
26
- * @author xuyuxiang
27
- * @date 2021/12/23 21:49
28
- */
29
-@Getter
30
-@Setter
31
-public abstract class SaBaseLoginUser {
32
-
33
-    /** id */
34
-    @ApiModelProperty(value = "id", position = 1)
35
-    private String id;
36
-
37
-    /** 头像 */
38
-    @ApiModelProperty(value = "头像", position = 3)
39
-    private String avatar;
40
-
41
-    /** 签名 */
42
-    @ApiModelProperty(value = "签名", position = 4)
43
-    private String signature;
44
-
45
-    /** 账号 */
46
-    @ApiModelProperty(value = "账号", position = 5)
47
-    private String account;
48
-
49
-    /** 姓名 */
50
-    @ApiModelProperty(value = "姓名", position = 6)
51
-    private String name;
52
-
53
-    /** 昵称 */
54
-    @ApiModelProperty(value = "昵称", position = 7)
55
-    private String nickname;
56
-
57
-    /** 性别 */
58
-    @ApiModelProperty(value = "性别", position = 8)
59
-    private String gender;
60
-
61
-    /** 年龄 */
62
-    @ApiModelProperty(value = "年龄", position = 9)
63
-    private String age;
64
-
65
-    /** 出生日期 */
66
-    @ApiModelProperty(value = "出生日期", position = 10)
67
-    private String birthday;
68
-
69
-    /** 民族 */
70
-    @ApiModelProperty(value = "民族", position = 11)
71
-    private String nation;
72
-
73
-    /** 籍贯 */
74
-    @ApiModelProperty(value = "籍贯", position = 12)
75
-    private String nativePlace;
76
-
77
-    /** 家庭住址 */
78
-    @ApiModelProperty(value = "家庭住址", position = 13)
79
-    private String homeAddress;
80
-
81
-    /** 通信地址 */
82
-    @ApiModelProperty(value = "通信地址", position = 14)
83
-    private String mailingAddress;
84
-
85
-    /** 证件类型 */
86
-    @ApiModelProperty(value = "证件类型", position = 15)
87
-    private String idCardType;
88
-
89
-    /** 证件号码 */
90
-    @ApiModelProperty(value = "证件号码", position = 16)
91
-    private String idCardNumber;
92
-
93
-    /** 文化程度 */
94
-    @ApiModelProperty(value = "文化程度", position = 17)
95
-    private String cultureLevel;
96
-
97
-    /** 政治面貌 */
98
-    @ApiModelProperty(value = "政治面貌", position = 18)
99
-    private String politicalOutlook;
100
-
101
-    /** 毕业院校 */
102
-    @ApiModelProperty(value = "毕业院校", position = 19)
103
-    private String college;
104
-
105
-    /** 学历 */
106
-    @ApiModelProperty(value = "学历", position = 20)
107
-    private String education;
108
-
109
-    /** 学制 */
110
-    @ApiModelProperty(value = "学制", position = 21)
111
-    private String eduLength;
112
-
113
-    /** 学位 */
114
-    @ApiModelProperty(value = "学位", position = 22)
115
-    private String degree;
116
-
117
-    /** 手机 */
118
-    @ApiModelProperty(value = "手机", position = 23)
119
-    private String phone;
120
-
121
-    /** 邮箱 */
122
-    @ApiModelProperty(value = "邮箱", position = 24)
123
-    private String email;
124
-
125
-    /** 家庭电话 */
126
-    @ApiModelProperty(value = "家庭电话", position = 25)
127
-    private String homeTel;
128
-
129
-    /** 办公电话 */
130
-    @ApiModelProperty(value = "办公电话", position = 26)
131
-    private String officeTel;
132
-
133
-    /** 紧急联系人 */
134
-    @ApiModelProperty(value = "紧急联系人", position = 27)
135
-    private String emergencyContact;
136
-
137
-    /** 紧急联系人电话 */
138
-    @ApiModelProperty(value = "紧急联系人电话", position = 28)
139
-    private String emergencyPhone;
140
-
141
-    /** 紧急联系人地址 */
142
-    @ApiModelProperty(value = "紧急联系人地址", position = 29)
143
-    private String emergencyAddress;
144
-
145
-    /** 员工编号 */
146
-    @ApiModelProperty(value = "员工编号", position = 30)
147
-    private String empNo;
148
-
149
-    /** 入职日期 */
150
-    @ApiModelProperty(value = "入职日期", position = 31)
151
-    private String entryDate;
152
-
153
-    /** 组织id */
154
-    @ApiModelProperty(value = "组织id", position = 32)
155
-    private String orgId;
156
-
157
-    /** 组织名称 */
158
-    @ApiModelProperty(value = "组织名称", position = 33)
159
-    private String orgName;
160
-
161
-    /** 职位id */
162
-    @ApiModelProperty(value = "职位id", position = 34)
163
-    private String positionId;
164
-
165
-    /** 职位名称 */
166
-    @ApiModelProperty(value = "职位名称", position = 35)
167
-    private String positionName;
168
-
169
-    /** 职级 */
170
-    @ApiModelProperty(value = "职级", position = 36)
171
-    private String positionLevel;
172
-
173
-    /** 主管id */
174
-    @ApiModelProperty(value = "主管id", position = 37)
175
-    private String directorId;
176
-
177
-    /** 兼任信息 */
178
-    @ApiModelProperty(value = "兼任信息", position = 38)
179
-    private String positionJson;
180
-
181
-    /** 上次登录ip */
182
-    @ApiModelProperty(value = "上次登录ip", position = 39)
183
-    private String lastLoginIp;
184
-
185
-    /** 上次登录地点 */
186
-    @ApiModelProperty(value = "上次登录地点", position = 40)
187
-    private String lastLoginAddress;
188
-
189
-    /** 上次登录时间 */
190
-    @ApiModelProperty(value = "上次登录时间", position = 41)
191
-    private Date lastLoginTime;
192
-
193
-    /** 上次登录设备 */
194
-    @ApiModelProperty(value = "上次登录设备", position = 42)
195
-    private String lastLoginDevice;
196
-
197
-    /** 最新登录ip */
198
-    @ApiModelProperty(value = "最新登录ip", position = 43)
199
-    private String latestLoginIp;
200
-
201
-    /** 最新登录地点 */
202
-    @ApiModelProperty(value = "最新登录地点", position = 44)
203
-    private String latestLoginAddress;
204
-
205
-    /** 最新登录时间 */
206
-    @ApiModelProperty(value = "最新登录时间", position = 45)
207
-    private Date latestLoginTime;
208
-
209
-    /** 最新登录设备 */
210
-    @ApiModelProperty(value = "最新登录设备", position = 46)
211
-    private String latestLoginDevice;
212
-
213
-    /** 用户状态 */
214
-    @ApiModelProperty(value = "用户状态", position = 47)
215
-    private String userStatus;
216
-
217
-    /** 排序码 */
218
-    @ApiModelProperty(value = "排序码", position = 48)
219
-    private Integer sortCode;
220
-
221
-    /** 扩展信息 */
222
-    @ApiModelProperty(value = "扩展信息", position = 49)
223
-    private String extJson;
224
-
225
-    /** 按钮码集合 */
226
-    @ApiModelProperty(value = "按钮码集合", position = 50)
227
-    private List<String> buttonCodeList;
228
-
229
-    /** 移动端按钮码集合 */
230
-    @ApiModelProperty(value = "移动端按钮码集合", position = 51)
231
-    private List<String> mobileButtonCodeList;
232
-
233
-    /** 权限码集合 */
234
-    @ApiModelProperty(value = "权限码集合", position = 52, hidden = true)
235
-    private List<String> permissionCodeList;
236
-
237
-    /** 角色码集合 */
238
-    @ApiModelProperty(value = "角色码集合", position = 53, hidden = true)
239
-    private List<String> roleCodeList;
240
-
241
-    /** 数据范围集合 */
242
-    @ApiModelProperty(value = "数据范围集合", position = 54, hidden = true)
243
-    private List<DataScope> dataScopeList;
244
-
245
-    /** 用户密码hash值 */
246
-    @JsonIgnore
247
-    @ApiModelProperty(value = "用户密码hash值", position = 55)
248
-    private String password;
249
-
250
-    /** 是否可登录,由继承类实现 */
251
-    public abstract Boolean getEnabled();
252
-
253
-    /**
254
-     * 数据范围类
255
-     *
256
-     * @author xuyuxiang
257
-     * @date 2022/8/15 13:57
258
-     **/
259
-    @Getter
260
-    @Setter
261
-    public static class DataScope {
262
-
263
-        /** API接口 */
264
-        @ApiModelProperty(value = "API接口", position = 1)
265
-        private String apiUrl;
266
-
267
-        /** 数据范围 */
268
-        @ApiModelProperty(value = "数据范围", position = 2)
269
-        private List<String> dataScope;
270
-    }
271
-}

+ 0 - 47
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/util/StpClientLoginUserUtil.java

@@ -1,47 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.util;
14
-
15
-import cn.hutool.core.collection.CollectionUtil;
16
-import vip.xiaonuo.auth.core.pojo.SaBaseClientLoginUser;
17
-
18
-import java.util.List;
19
-
20
-/**
21
- * C端登录用户工具类
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/7/8 10:40
25
- **/
26
-public class StpClientLoginUserUtil {
27
-
28
-    /**
29
-     * 获取当前C端登录用户
30
-     *
31
-     * @author xuyuxiang
32
-     * @date 2022/7/8 10:41
33
-     **/
34
-    public static SaBaseClientLoginUser getClientLoginUser() {
35
-        return (SaBaseClientLoginUser) StpClientUtil.getTokenSession().get("loginUser");
36
-    }
37
-
38
-    /**
39
-     * 获取当前C端登录用户的当前请求接口的数据范围(暂无数据范围)
40
-     *
41
-     * @author xuyuxiang
42
-     * @date 2022/7/8 10:41
43
-     **/
44
-    public static List<String> getLoginUserDataScope() {
45
-        return CollectionUtil.newArrayList();
46
-    }
47
-}

+ 0 - 936
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/util/StpClientUtil.java

@@ -1,936 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.util;
14
-
15
-import cn.dev33.satoken.SaManager;
16
-import cn.dev33.satoken.fun.SaFunction;
17
-import cn.dev33.satoken.session.SaSession;
18
-import cn.dev33.satoken.stp.SaLoginModel;
19
-import cn.dev33.satoken.stp.SaTokenInfo;
20
-import cn.dev33.satoken.stp.StpLogic;
21
-import cn.dev33.satoken.stp.StpUtil;
22
-
23
-import java.util.List;
24
-
25
-/**
26
- * Sa-Token 权限认证工具类 (C端用户版)
27
- *
28
- * @author xuyuxiang
29
- * @date 2022/3/10 10:43
30
- **/
31
-public class StpClientUtil {
32
-
33
-    /**
34
-     * 账号类型标识
35
-     */
36
-    public static final String TYPE = "C";
37
-
38
-    /**
39
-     * 底层的 StpLogic 对象,使用匿名子类 重写`stpLogic对象`的一些方法
40
-     */
41
-    public static StpLogic stpLogic = new StpLogic(TYPE) {
42
-
43
-        /**
44
-         * 重写 StpLogic 类下的 `splicingKeyTokenName` 函数,返回一个与 `StpUtil` 相同的token名称
45
-         */
46
-        @Override
47
-        public String splicingKeyTokenName() {
48
-            return super.splicingKeyTokenName();
49
-        }
50
-
51
-        // 此处可以根据需求重写其他方法
52
-    };
53
-
54
-    /**
55
-     * 获取当前 StpLogic 的账号类型
56
-     * @return See Note
57
-     */
58
-    public static String getLoginType() {
59
-        return stpLogic.getLoginType();
60
-    }
61
-
62
-    /**
63
-     * 重置 StpLogic 对象
64
-     * @param stpLogic /
65
-     */
66
-    public static void setStpLogic(StpLogic stpLogic) {
67
-        StpUtil.stpLogic = stpLogic;
68
-        // 防止自定义 stpLogic 被覆盖
69
-        SaManager.putStpLogic(stpLogic);
70
-    }
71
-
72
-
73
-    // =================== 获取token 相关 ===================
74
-
75
-    /**
76
-     * 返回token名称
77
-     * @return 此StpLogic的token名称
78
-     */
79
-    public static String getTokenName() {
80
-        return stpLogic.getTokenName();
81
-    }
82
-
83
-    /**
84
-     * 在当前会话写入当前TokenValue
85
-     * @param tokenValue token值
86
-     */
87
-    public static void setTokenValue(String tokenValue) {
88
-        stpLogic.setTokenValue(tokenValue);
89
-    }
90
-
91
-    /**
92
-     * 在当前会话写入当前TokenValue
93
-     * @param tokenValue token值
94
-     * @param cookieTimeout Cookie存活时间(秒)
95
-     */
96
-    public static void setTokenValue(String tokenValue, int cookieTimeout) {
97
-        stpLogic.setTokenValue(tokenValue, cookieTimeout);
98
-    }
99
-
100
-    /**
101
-     * 获取当前TokenValue
102
-     * @return 当前tokenValue
103
-     */
104
-    public static String getTokenValue() {
105
-        return stpLogic.getTokenValue();
106
-    }
107
-
108
-    /**
109
-     * 获取当前TokenValue (不裁剪前缀)
110
-     * @return /
111
-     */
112
-    public static String getTokenValueNotCut() {
113
-        return stpLogic.getTokenValueNotCut();
114
-    }
115
-
116
-    /**
117
-     * 获取当前会话的Token信息
118
-     * @return token信息
119
-     */
120
-    public static SaTokenInfo getTokenInfo() {
121
-        return stpLogic.getTokenInfo();
122
-    }
123
-
124
-
125
-    // =================== 登录相关操作 ===================
126
-
127
-    // --- 登录
128
-
129
-    /**
130
-     * 会话登录
131
-     * @param id 账号id,建议的类型:(long | int | String)
132
-     */
133
-    public static void login(Object id) {
134
-        stpLogic.login(id);
135
-    }
136
-
137
-    /**
138
-     * 会话登录,并指定登录设备
139
-     * @param id 账号id,建议的类型:(long | int | String)
140
-     * @param device 设备标识
141
-     */
142
-    public static void login(Object id, String device) {
143
-        stpLogic.login(id, device);
144
-    }
145
-
146
-    /**
147
-     * 会话登录,并指定是否 [记住我]
148
-     * @param id 账号id,建议的类型:(long | int | String)
149
-     * @param isLastingCookie 是否为持久Cookie
150
-     */
151
-    public static void login(Object id, boolean isLastingCookie) {
152
-        stpLogic.login(id, isLastingCookie);
153
-    }
154
-
155
-    /**
156
-     * 会话登录,并指定所有登录参数Model
157
-     * @param id 登录id,建议的类型:(long | int | String)
158
-     * @param loginModel 此次登录的参数Model
159
-     */
160
-    public static void login(Object id, SaLoginModel loginModel) {
161
-        stpLogic.login(id, loginModel);
162
-    }
163
-
164
-    /**
165
-     * 创建指定账号id的登录会话
166
-     * @param id 登录id,建议的类型:(long | int | String)
167
-     * @return 返回会话令牌
168
-     */
169
-    public static String createLoginSession(Object id) {
170
-        return stpLogic.createLoginSession(id);
171
-    }
172
-
173
-    /**
174
-     * 创建指定账号id的登录会话
175
-     * @param id 登录id,建议的类型:(long | int | String)
176
-     * @param loginModel 此次登录的参数Model
177
-     * @return 返回会话令牌
178
-     */
179
-    public static String createLoginSession(Object id, SaLoginModel loginModel) {
180
-        return stpLogic.createLoginSession(id, loginModel);
181
-    }
182
-
183
-    // --- 注销
184
-
185
-    /**
186
-     * 会话注销
187
-     */
188
-    public static void logout() {
189
-        stpLogic.logout();
190
-    }
191
-
192
-    /**
193
-     * 会话注销,根据账号id
194
-     * @param loginId 账号id
195
-     */
196
-    public static void logout(Object loginId) {
197
-        stpLogic.logout(loginId);
198
-    }
199
-
200
-    /**
201
-     * 会话注销,根据账号id 和 设备标识
202
-     *
203
-     * @param loginId 账号id
204
-     * @param device 设备标识 (填null代表所有注销设备)
205
-     */
206
-    public static void logout(Object loginId, String device) {
207
-        stpLogic.logout(loginId, device);
208
-    }
209
-
210
-    /**
211
-     * 会话注销,根据指定 Token
212
-     *
213
-     * @param tokenValue 指定token
214
-     */
215
-    public static void logoutByTokenValue(String tokenValue) {
216
-        stpLogic.logoutByTokenValue(tokenValue);
217
-    }
218
-
219
-    /**
220
-     * 踢人下线,根据账号id
221
-     * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
222
-     *
223
-     * @param loginId 账号id
224
-     */
225
-    public static void kickout(Object loginId) {
226
-        stpLogic.kickout(loginId);
227
-    }
228
-
229
-    /**
230
-     * 踢人下线,根据账号id 和 设备标识
231
-     * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
232
-     *
233
-     * @param loginId 账号id
234
-     * @param device 设备标识 (填null代表踢出所有设备)
235
-     */
236
-    public static void kickout(Object loginId, String device) {
237
-        stpLogic.kickout(loginId, device);
238
-    }
239
-
240
-    /**
241
-     * 踢人下线,根据指定 Token
242
-     * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
243
-     *
244
-     * @param tokenValue 指定token
245
-     */
246
-    public static void kickoutByTokenValue(String tokenValue) {
247
-        stpLogic.kickoutByTokenValue(tokenValue);
248
-    }
249
-
250
-    /**
251
-     * 顶人下线,根据账号id 和 设备标识
252
-     * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-4 </p>
253
-     *
254
-     * @param loginId 账号id
255
-     * @param device 设备标识 (填null代表顶替所有设备)
256
-     */
257
-    public static void replaced(Object loginId, String device) {
258
-        stpLogic.replaced(loginId, device);
259
-    }
260
-
261
-
262
-    // 查询相关
263
-
264
-    /**
265
-     * 当前会话是否已经登录
266
-     * @return 是否已登录
267
-     */
268
-    public static boolean isLogin() {
269
-        return stpLogic.isLogin();
270
-    }
271
-
272
-    /**
273
-     * 检验当前会话是否已经登录,如未登录,则抛出异常
274
-     */
275
-    public static void checkLogin() {
276
-        stpLogic.checkLogin();
277
-    }
278
-
279
-    /**
280
-     * 获取当前会话账号id, 如果未登录,则抛出异常
281
-     * @return 账号id
282
-     */
283
-    public static Object getLoginId() {
284
-        return stpLogic.getLoginId();
285
-    }
286
-
287
-    /**
288
-     * 获取当前会话账号id, 如果未登录,则返回默认值
289
-     * @param <T> 返回类型
290
-     * @param defaultValue 默认值
291
-     * @return 登录id
292
-     */
293
-    public static <T> T getLoginId(T defaultValue) {
294
-        return stpLogic.getLoginId(defaultValue);
295
-    }
296
-
297
-    /**
298
-     * 获取当前会话账号id, 如果未登录,则返回null
299
-     * @return 账号id
300
-     */
301
-    public static Object getLoginIdDefaultNull() {
302
-        return stpLogic.getLoginIdDefaultNull();
303
-    }
304
-
305
-    /**
306
-     * 获取当前会话账号id, 并转换为String类型
307
-     * @return 账号id
308
-     */
309
-    public static String getLoginIdAsString() {
310
-        return stpLogic.getLoginIdAsString();
311
-    }
312
-
313
-    /**
314
-     * 获取当前会话账号id, 并转换为int类型
315
-     * @return 账号id
316
-     */
317
-    public static int getLoginIdAsInt() {
318
-        return stpLogic.getLoginIdAsInt();
319
-    }
320
-
321
-    /**
322
-     * 获取当前会话账号id, 并转换为long类型
323
-     * @return 账号id
324
-     */
325
-    public static long getLoginIdAsLong() {
326
-        return stpLogic.getLoginIdAsLong();
327
-    }
328
-
329
-    /**
330
-     * 获取指定Token对应的账号id,如果未登录,则返回 null
331
-     * @param tokenValue token
332
-     * @return 账号id
333
-     */
334
-    public static Object getLoginIdByToken(String tokenValue) {
335
-        return stpLogic.getLoginIdByToken(tokenValue);
336
-    }
337
-
338
-    /**
339
-     * 获取Token扩展信息(只在jwt模式下有效)
340
-     * @param key 键值
341
-     * @return 对应的扩展数据
342
-     */
343
-    public static Object getExtra(String key) {
344
-        return stpLogic.getExtra(key);
345
-    }
346
-
347
-
348
-    // =================== User-Session 相关 ===================
349
-
350
-    /**
351
-     * 获取指定账号id的Session, 如果Session尚未创建,isCreate=是否新建并返回
352
-     * @param loginId 账号id
353
-     * @param isCreate 是否新建
354
-     * @return Session对象
355
-     */
356
-    public static SaSession getSessionByLoginId(Object loginId, boolean isCreate) {
357
-        return stpLogic.getSessionByLoginId(loginId, isCreate);
358
-    }
359
-
360
-    /**
361
-     * 获取指定key的Session, 如果Session尚未创建,则返回null
362
-     * @param sessionId SessionId
363
-     * @return Session对象
364
-     */
365
-    public static SaSession getSessionBySessionId(String sessionId) {
366
-        return stpLogic.getSessionBySessionId(sessionId);
367
-    }
368
-
369
-    /**
370
-     * 获取指定账号id的Session,如果Session尚未创建,则新建并返回
371
-     * @param loginId 账号id
372
-     * @return Session对象
373
-     */
374
-    public static SaSession getSessionByLoginId(Object loginId) {
375
-        return stpLogic.getSessionByLoginId(loginId);
376
-    }
377
-
378
-    /**
379
-     * 获取当前会话的Session, 如果Session尚未创建,isCreate=是否新建并返回
380
-     * @param isCreate 是否新建
381
-     * @return Session对象
382
-     */
383
-    public static SaSession getSession(boolean isCreate) {
384
-        return stpLogic.getSession(isCreate);
385
-    }
386
-
387
-    /**
388
-     * 获取当前会话的Session,如果Session尚未创建,则新建并返回
389
-     * @return Session对象
390
-     */
391
-    public static SaSession getSession() {
392
-        return stpLogic.getSession();
393
-    }
394
-
395
-
396
-    // =================== Token-Session 相关 ===================
397
-
398
-    /**
399
-     * 获取指定Token-Session,如果Session尚未创建,则新建并返回
400
-     * @param tokenValue Token值
401
-     * @return Session对象
402
-     */
403
-    public static SaSession getTokenSessionByToken(String tokenValue) {
404
-        return stpLogic.getTokenSessionByToken(tokenValue);
405
-    }
406
-
407
-    /**
408
-     * 获取当前Token-Session,如果Session尚未创建,则新建并返回
409
-     * @return Session对象
410
-     */
411
-    public static SaSession getTokenSession() {
412
-        return stpLogic.getTokenSession();
413
-    }
414
-
415
-
416
-    // =================== [临时有效期] 验证相关 ===================
417
-
418
-    /**
419
-     * 检查当前token 是否已经[临时过期],如果已经过期则抛出异常
420
-     */
421
-    public static void checkActivityTimeout() {
422
-        stpLogic.checkActivityTimeout();
423
-    }
424
-
425
-    /**
426
-     * 续签当前token:(将 [最后操作时间] 更新为当前时间戳)
427
-     * <h1>请注意: 即时token已经 [临时过期] 也可续签成功,
428
-     * 如果此场景下需要提示续签失败,可在此之前调用 checkActivityTimeout() 强制检查是否过期即可 </h1>
429
-     */
430
-    public static void updateLastActivityToNow() {
431
-        stpLogic.updateLastActivityToNow();
432
-    }
433
-
434
-
435
-    // =================== 过期时间相关 ===================
436
-
437
-    /**
438
-     * 获取当前登录者的 token 剩余有效时间 (单位: 秒)
439
-     * @return token剩余有效时间
440
-     */
441
-    public static long getTokenTimeout() {
442
-        return stpLogic.getTokenTimeout();
443
-    }
444
-
445
-    /**
446
-     * 获取当前登录者的 User-Session 剩余有效时间 (单位: 秒)
447
-     * @return token剩余有效时间
448
-     */
449
-    public static long getSessionTimeout() {
450
-        return stpLogic.getSessionTimeout();
451
-    }
452
-
453
-    /**
454
-     * 获取当前 Token-Session 剩余有效时间 (单位: 秒)
455
-     * @return token剩余有效时间
456
-     */
457
-    public static long getTokenSessionTimeout() {
458
-        return stpLogic.getTokenSessionTimeout();
459
-    }
460
-
461
-    /**
462
-     * 获取当前 token [临时过期] 剩余有效时间 (单位: 秒)
463
-     * @return token [临时过期] 剩余有效时间
464
-     */
465
-    public static long getTokenActivityTimeout() {
466
-        return stpLogic.getTokenActivityTimeout();
467
-    }
468
-
469
-    /**
470
-     * 对当前 Token 的 timeout 值进行续期
471
-     * @param timeout 要修改成为的有效时间 (单位: 秒)
472
-     */
473
-    public static void renewTimeout(long timeout) {
474
-        stpLogic.renewTimeout(timeout);
475
-    }
476
-
477
-    /**
478
-     * 对指定 Token 的 timeout 值进行续期
479
-     * @param tokenValue 指定token
480
-     * @param timeout 要修改成为的有效时间 (单位: 秒)
481
-     */
482
-    public static void renewTimeout(String tokenValue, long timeout) {
483
-        stpLogic.renewTimeout(tokenValue, timeout);
484
-    }
485
-
486
-    // =================== 角色验证操作 ===================
487
-
488
-    /**
489
-     * 获取:当前账号的角色集合
490
-     * @return /
491
-     */
492
-    public static List<String> getRoleList() {
493
-        return stpLogic.getRoleList();
494
-    }
495
-
496
-    /**
497
-     * 获取:指定账号的角色集合
498
-     * @param loginId 指定账号id
499
-     * @return /
500
-     */
501
-    public static List<String> getRoleList(Object loginId) {
502
-        return stpLogic.getRoleList(loginId);
503
-    }
504
-
505
-    /**
506
-     * 判断:当前账号是否拥有指定角色, 返回true或false
507
-     * @param role 角色标识
508
-     * @return 是否含有指定角色标识
509
-     */
510
-    public static boolean hasRole(String role) {
511
-        return stpLogic.hasRole(role);
512
-    }
513
-
514
-    /**
515
-     * 判断:指定账号是否含有指定角色标识, 返回true或false
516
-     * @param loginId 账号id
517
-     * @param role 角色标识
518
-     * @return 是否含有指定角色标识
519
-     */
520
-    public static boolean hasRole(Object loginId, String role) {
521
-        return stpLogic.hasRole(loginId, role);
522
-    }
523
-
524
-    /**
525
-     * 判断:当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
526
-     * @param roleArray 角色标识数组
527
-     * @return true或false
528
-     */
529
-    public static boolean hasRoleAnd(String... roleArray) {
530
-        return stpLogic.hasRoleAnd(roleArray);
531
-    }
532
-
533
-    /**
534
-     * 判断:当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
535
-     * @param roleArray 角色标识数组
536
-     * @return true或false
537
-     */
538
-    public static boolean hasRoleOr(String... roleArray) {
539
-        return stpLogic.hasRoleOr(roleArray);
540
-    }
541
-
542
-    /**
543
-     * 校验:当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException
544
-     * @param role 角色标识
545
-     */
546
-    public static void checkRole(String role) {
547
-        stpLogic.checkRole(role);
548
-    }
549
-
550
-    /**
551
-     * 校验:当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
552
-     * @param roleArray 角色标识数组
553
-     */
554
-    public static void checkRoleAnd(String... roleArray) {
555
-        stpLogic.checkRoleAnd(roleArray);
556
-    }
557
-
558
-    /**
559
-     * 校验:当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
560
-     * @param roleArray 角色标识数组
561
-     */
562
-    public static void checkRoleOr(String... roleArray) {
563
-        stpLogic.checkRoleOr(roleArray);
564
-    }
565
-
566
-
567
-    // =================== 权限验证操作 ===================
568
-
569
-    /**
570
-     * 获取:当前账号的权限码集合
571
-     * @return /
572
-     */
573
-    public static List<String> getPermissionList() {
574
-        return stpLogic.getPermissionList();
575
-    }
576
-
577
-    /**
578
-     * 获取:指定账号的权限码集合
579
-     * @param loginId 指定账号id
580
-     * @return /
581
-     */
582
-    public static List<String> getPermissionList(Object loginId) {
583
-        return stpLogic.getPermissionList(loginId);
584
-    }
585
-
586
-    /**
587
-     * 判断:当前账号是否含有指定权限, 返回true或false
588
-     * @param permission 权限码
589
-     * @return 是否含有指定权限
590
-     */
591
-    public static boolean hasPermission(String permission) {
592
-        return stpLogic.hasPermission(permission);
593
-    }
594
-
595
-    /**
596
-     * 判断:指定账号id是否含有指定权限, 返回true或false
597
-     * @param loginId 账号id
598
-     * @param permission 权限码
599
-     * @return 是否含有指定权限
600
-     */
601
-    public static boolean hasPermission(Object loginId, String permission) {
602
-        return stpLogic.hasPermission(loginId, permission);
603
-    }
604
-
605
-    /**
606
-     * 判断:当前账号是否含有指定权限, [指定多个,必须全部具有]
607
-     * @param permissionArray 权限码数组
608
-     * @return true 或 false
609
-     */
610
-    public static boolean hasPermissionAnd(String... permissionArray) {
611
-        return stpLogic.hasPermissionAnd(permissionArray);
612
-    }
613
-
614
-    /**
615
-     * 判断:当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
616
-     * @param permissionArray 权限码数组
617
-     * @return true 或 false
618
-     */
619
-    public static boolean hasPermissionOr(String... permissionArray) {
620
-        return stpLogic.hasPermissionOr(permissionArray);
621
-    }
622
-
623
-    /**
624
-     * 校验:当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException
625
-     * @param permission 权限码
626
-     */
627
-    public static void checkPermission(String permission) {
628
-        stpLogic.checkPermission(permission);
629
-    }
630
-
631
-    /**
632
-     * 校验:当前账号是否含有指定权限 [指定多个,必须全部验证通过]
633
-     * @param permissionArray 权限码数组
634
-     */
635
-    public static void checkPermissionAnd(String... permissionArray) {
636
-        stpLogic.checkPermissionAnd(permissionArray);
637
-    }
638
-
639
-    /**
640
-     * 校验:当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
641
-     * @param permissionArray 权限码数组
642
-     */
643
-    public static void checkPermissionOr(String... permissionArray) {
644
-        stpLogic.checkPermissionOr(permissionArray);
645
-    }
646
-
647
-
648
-    // =================== id 反查token 相关操作 ===================
649
-
650
-    /**
651
-     * 获取指定账号id的tokenValue
652
-     * <p> 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
653
-     * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
654
-     * @param loginId 账号id
655
-     * @return token值
656
-     */
657
-    public static String getTokenValueByLoginId(Object loginId) {
658
-        return stpLogic.getTokenValueByLoginId(loginId);
659
-    }
660
-
661
-    /**
662
-     * 获取指定账号id指定设备端的tokenValue
663
-     * <p> 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
664
-     * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
665
-     * @param loginId 账号id
666
-     * @param device 设备标识
667
-     * @return token值
668
-     */
669
-    public static String getTokenValueByLoginId(Object loginId, String device) {
670
-        return stpLogic.getTokenValueByLoginId(loginId, device);
671
-    }
672
-
673
-    /**
674
-     * 获取指定账号id的tokenValue集合
675
-     * @param loginId 账号id
676
-     * @return 此loginId的所有相关token
677
-     */
678
-    public static List<String> getTokenValueListByLoginId(Object loginId) {
679
-        return stpLogic.getTokenValueListByLoginId(loginId);
680
-    }
681
-
682
-    /**
683
-     * 获取指定账号id指定设备端的tokenValue 集合
684
-     * @param loginId 账号id
685
-     * @param device 设备标识
686
-     * @return 此loginId的所有相关token
687
-     */
688
-    public static List<String> getTokenValueListByLoginId(Object loginId, String device) {
689
-        return stpLogic.getTokenValueListByLoginId(loginId, device);
690
-    }
691
-
692
-    /**
693
-     * 返回当前会话的登录设备
694
-     * @return 当前令牌的登录设备
695
-     */
696
-    public static String getLoginDevice() {
697
-        return stpLogic.getLoginDevice();
698
-    }
699
-
700
-
701
-    // =================== 会话管理 ===================
702
-
703
-    /**
704
-     * 根据条件查询Token
705
-     * @param keyword 关键字
706
-     * @param start 开始处索引 (-1代表查询所有)
707
-     * @param size 获取数量
708
-     * @return token集合
709
-     */
710
-    public static List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
711
-        return stpLogic.searchTokenValue(keyword, start, size, sortType);
712
-    }
713
-
714
-    /**
715
-     * 根据条件查询SessionId
716
-     * @param keyword 关键字
717
-     * @param start 开始处索引 (-1代表查询所有)
718
-     * @param size 获取数量
719
-     * @return sessionId集合
720
-     */
721
-    public static List<String> searchSessionId(String keyword, int start, int size, boolean sortType) {
722
-        return stpLogic.searchSessionId(keyword, start, size, sortType);
723
-    }
724
-
725
-    /**
726
-     * 根据条件查询Token专属Session的Id
727
-     * @param keyword 关键字
728
-     * @param start 开始处索引 (-1代表查询所有)
729
-     * @param size 获取数量
730
-     * @return sessionId集合
731
-     */
732
-    public static List<String> searchTokenSessionId(String keyword, int start, int size, boolean sortType) {
733
-        return stpLogic.searchTokenSessionId(keyword, start, size, sortType);
734
-    }
735
-
736
-
737
-    // ------------------- 账号封禁 -------------------
738
-
739
-    /**
740
-     * 封禁指定账号
741
-     * <p> 此方法不会直接将此账号id踢下线,而是在对方再次登录时抛出`DisableLoginException`异常
742
-     * @param loginId 指定账号id
743
-     * @param disableTime 封禁时间, 单位: 秒 (-1=永久封禁)
744
-     */
745
-    public static void disable(Object loginId, long disableTime) {
746
-        stpLogic.disable(loginId, disableTime);
747
-    }
748
-
749
-    /**
750
-     * 指定账号是否已被封禁 (true=已被封禁, false=未被封禁)
751
-     * @param loginId 账号id
752
-     * @return see note
753
-     */
754
-    public static boolean isDisable(Object loginId) {
755
-        return stpLogic.isDisable(loginId);
756
-    }
757
-
758
-    /**
759
-     * 获取指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
760
-     * @param loginId 账号id
761
-     * @return see note
762
-     */
763
-    public static long getDisableTime(Object loginId) {
764
-        return stpLogic.getDisableTime(loginId);
765
-    }
766
-
767
-    /**
768
-     * 解封指定账号
769
-     * @param loginId 账号id
770
-     */
771
-    public static void untieDisable(Object loginId) {
772
-        stpLogic.untieDisable(loginId);
773
-    }
774
-
775
-
776
-    // =================== 身份切换 ===================
777
-
778
-    /**
779
-     * 临时切换身份为指定账号id
780
-     * @param loginId 指定loginId
781
-     */
782
-    public static void switchTo(Object loginId) {
783
-        stpLogic.switchTo(loginId);
784
-    }
785
-
786
-    /**
787
-     * 结束临时切换身份
788
-     */
789
-    public static void endSwitch() {
790
-        stpLogic.endSwitch();
791
-    }
792
-
793
-    /**
794
-     * 当前是否正处于[身份临时切换]中
795
-     * @return 是否正处于[身份临时切换]中
796
-     */
797
-    public static boolean isSwitch() {
798
-        return stpLogic.isSwitch();
799
-    }
800
-
801
-    /**
802
-     * 在一个代码段里方法内,临时切换身份为指定账号id
803
-     * @param loginId 指定账号id
804
-     * @param function 要执行的方法
805
-     */
806
-    public static void switchTo(Object loginId, SaFunction function) {
807
-        stpLogic.switchTo(loginId, function);
808
-    }
809
-
810
-
811
-    // ------------------- 二级认证 -------------------
812
-
813
-    /**
814
-     * 在当前会话 开启二级认证
815
-     * @param safeTime 维持时间 (单位: 秒)
816
-     */
817
-    public static void openSafe(long safeTime) {
818
-        stpLogic.openSafe(safeTime);
819
-    }
820
-
821
-    /**
822
-     * 当前会话 是否处于二级认证时间内
823
-     * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时
824
-     */
825
-    public static boolean isSafe() {
826
-        return stpLogic.isSafe();
827
-    }
828
-
829
-    /**
830
-     * 检查当前会话是否已通过二级认证,如未通过则抛出异常
831
-     */
832
-    public static void checkSafe() {
833
-        stpLogic.checkSafe();
834
-    }
835
-
836
-    /**
837
-     * 获取当前会话的二级认证剩余有效时间 (单位: 秒, 返回-2代表尚未通过二级认证)
838
-     * @return 剩余有效时间
839
-     */
840
-    public static long getSafeTime() {
841
-        return stpLogic.getSafeTime();
842
-    }
843
-
844
-    /**
845
-     * 在当前会话 结束二级认证
846
-     */
847
-    public static void closeSafe() {
848
-        stpLogic.closeSafe();
849
-    }
850
-
851
-
852
-    // =================== 历史API,兼容旧版本 ===================
853
-
854
-    /**
855
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.getLoginType() ,使用方式保持不变 </h1>
856
-     *
857
-     * 获取当前StpLogin的loginKey
858
-     * @return 当前StpLogin的loginKey
859
-     */
860
-    @Deprecated
861
-    public static String getLoginKey() {
862
-        return stpLogic.getLoginType();
863
-    }
864
-
865
-    /**
866
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
867
-     *
868
-     * 在当前会话上登录id
869
-     * @param loginId 登录id,建议的类型:(long | int | String)
870
-     */
871
-    @Deprecated
872
-    public static void setLoginId(Object loginId) {
873
-        stpLogic.login(loginId);
874
-    }
875
-
876
-    /**
877
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
878
-     *
879
-     * 在当前会话上登录id, 并指定登录设备
880
-     * @param loginId 登录id,建议的类型:(long | int | String)
881
-     * @param device 设备标识
882
-     */
883
-    @Deprecated
884
-    public static void setLoginId(Object loginId, String device) {
885
-        stpLogic.login(loginId, device);
886
-    }
887
-
888
-    /**
889
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
890
-     *
891
-     * 在当前会话上登录id, 并指定登录设备
892
-     * @param loginId 登录id,建议的类型:(long | int | String)
893
-     * @param isLastingCookie 是否为持久Cookie
894
-     */
895
-    @Deprecated
896
-    public static void setLoginId(Object loginId, boolean isLastingCookie) {
897
-        stpLogic.login(loginId, isLastingCookie);
898
-    }
899
-
900
-    /**
901
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
902
-     *
903
-     * 在当前会话上登录id, 并指定所有登录参数Model
904
-     * @param loginId 登录id,建议的类型:(long | int | String)
905
-     * @param loginModel 此次登录的参数Model
906
-     */
907
-    @Deprecated
908
-    public static void setLoginId(Object loginId, SaLoginModel loginModel) {
909
-        stpLogic.login(loginId, loginModel);
910
-    }
911
-
912
-    /**
913
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变 </h1>
914
-     *
915
-     * 会话注销,根据账号id (踢人下线)
916
-     * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2
917
-     * @param loginId 账号id
918
-     */
919
-    @Deprecated
920
-    public static void logoutByLoginId(Object loginId) {
921
-        stpLogic.kickout(loginId);
922
-    }
923
-
924
-    /**
925
-     * <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变 </h1>
926
-     *
927
-     * 会话注销,根据账号id and 设备标识 (踢人下线)
928
-     * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2 </p>
929
-     * @param loginId 账号id
930
-     * @param device 设备标识 (填null代表所有注销设备)
931
-     */
932
-    @Deprecated
933
-    public static void logoutByLoginId(Object loginId, String device) {
934
-        stpLogic.kickout(loginId, device);
935
-    }
936
-}

+ 0 - 55
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/util/StpLoginUserUtil.java

@@ -1,55 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.util;
14
-
15
-import cn.dev33.satoken.stp.StpUtil;
16
-import cn.hutool.core.collection.CollectionUtil;
17
-import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
18
-import vip.xiaonuo.common.util.CommonServletUtil;
19
-
20
-import java.util.List;
21
-
22
-/**
23
- * B端登录用户工具类
24
- *
25
- * @author xuyuxiang
26
- * @date 2022/7/8 10:40
27
- **/
28
-public class StpLoginUserUtil {
29
-
30
-    /**
31
-     * 获取当前B端登录用户
32
-     *
33
-     * @author xuyuxiang
34
-     * @date 2022/7/8 10:41
35
-     **/
36
-    public static SaBaseLoginUser getLoginUser() {
37
-        return (SaBaseLoginUser) StpUtil.getTokenSession().get("loginUser");
38
-    }
39
-
40
-    /**
41
-     * 获取当前B端登录用户的当前请求接口的数据范围
42
-     *
43
-     * @author xuyuxiang
44
-     * @date 2022/7/8 10:41
45
-     **/
46
-    public static List<String> getLoginUserDataScope() {
47
-        List<String> resultList = CollectionUtil.newArrayList();
48
-        getLoginUser().getDataScopeList().forEach(dataScope -> {
49
-            if(dataScope.getApiUrl().equals(CommonServletUtil.getRequest().getServletPath())) {
50
-                resultList.addAll(dataScope.getDataScope());
51
-            }
52
-        });
53
-        return resultList;
54
-    }
55
-}

+ 0 - 24
snowy-plugin-api/snowy-plugin-biz-api/pom.xml

@@ -1,24 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-biz-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>业务功能插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-    </dependencies>
24
-</project>

+ 0 - 13
snowy-plugin-api/snowy-plugin-biz-api/src/main/java/vip/xiaonuo/biz/package-info.java

@@ -1,13 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.biz;

+ 0 - 24
snowy-plugin-api/snowy-plugin-client-api/pom.xml

@@ -1,24 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-client-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>C端功能插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-    </dependencies>
24
-</project>

+ 0 - 13
snowy-plugin-api/snowy-plugin-client-api/src/main/java/vip/xiaonuo/client/package-info.java

@@ -1,13 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.client;

+ 0 - 108
snowy-plugin-api/snowy-plugin-dev-api/pom.xml

@@ -1,108 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-dev-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>开发工具插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-
24
-        <!--腾讯云上传文件客户端-->
25
-        <dependency>
26
-            <groupId>com.qcloud</groupId>
27
-            <artifactId>cos_api</artifactId>
28
-            <exclusions>
29
-                <exclusion>
30
-                    <artifactId>tencentcloud-sdk-java-common</artifactId>
31
-                    <groupId>com.tencentcloudapi</groupId>
32
-                </exclusion>
33
-            </exclusions>
34
-        </dependency>
35
-
36
-        <!--阿里云上传文件客户端-->
37
-        <dependency>
38
-            <groupId>com.aliyun.oss</groupId>
39
-            <artifactId>aliyun-sdk-oss</artifactId>
40
-            <exclusions>
41
-                <exclusion>
42
-                    <groupId>org.codehaus.jettison</groupId>
43
-                    <artifactId>jettison</artifactId>
44
-                </exclusion>
45
-            </exclusions>
46
-        </dependency>
47
-
48
-        <!-- jettison -->
49
-        <dependency>
50
-            <groupId>org.codehaus.jettison</groupId>
51
-            <artifactId>jettison</artifactId>
52
-        </dependency>
53
-
54
-        <!--minio上传文件客户端-->
55
-        <dependency>
56
-            <groupId>io.minio</groupId>
57
-            <artifactId>minio</artifactId>
58
-        </dependency>
59
-
60
-        <!--java邮件发送-->
61
-        <dependency>
62
-            <groupId>com.sun.mail</groupId>
63
-            <artifactId>javax.mail</artifactId>
64
-        </dependency>
65
-
66
-        <!--阿里云邮件发送-->
67
-        <dependency>
68
-            <groupId>com.aliyun</groupId>
69
-            <artifactId>aliyun-java-sdk-dm</artifactId>
70
-        </dependency>
71
-
72
-        <!-- 腾讯云邮件发送 -->
73
-        <dependency>
74
-            <groupId>com.tencentcloudapi</groupId>
75
-            <artifactId>tencentcloud-sdk-java-ses</artifactId>
76
-            <exclusions>
77
-                <exclusion>
78
-                    <artifactId>okio-jvm</artifactId>
79
-                    <groupId>com.squareup.okio</groupId>
80
-                </exclusion>
81
-            </exclusions>
82
-        </dependency>
83
-
84
-        <!--阿里云短信发送-->
85
-        <dependency>
86
-            <groupId>com.aliyun</groupId>
87
-            <artifactId>dysmsapi20170525</artifactId>
88
-            <exclusions>
89
-                <exclusion>
90
-                    <artifactId>org.jacoco.agent</artifactId>
91
-                    <groupId>org.jacoco</groupId>
92
-                </exclusion>
93
-            </exclusions>
94
-        </dependency>
95
-
96
-        <!--腾讯云短信发送-->
97
-        <dependency>
98
-            <groupId>com.tencentcloudapi</groupId>
99
-            <artifactId>tencentcloud-sdk-java-sms</artifactId>
100
-        </dependency>
101
-
102
-        <!--系统硬件信息-->
103
-        <dependency>
104
-            <groupId>com.github.oshi</groupId>
105
-            <artifactId>oshi-core</artifactId>
106
-        </dependency>
107
-    </dependencies>
108
-</project>

+ 0 - 30
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevConfigApi.java

@@ -1,30 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-/**
16
- * 配置APi接口
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/6/17 10:37
20
- **/
21
-public interface DevConfigApi {
22
-
23
-    /**
24
-     * 根据键获取值
25
-     *
26
-     * @author xuyuxiang
27
-     * @date 2022/6/17 11:11
28
-     **/
29
-    String getValueByKey(String key);
30
-}

+ 0 - 22
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevDictApi.java

@@ -1,22 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-/**
16
- * 字典API
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/9/2 15:58
20
- */
21
-public interface DevDictApi {
22
-}

+ 0 - 142
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevEmailApi.java

@@ -1,142 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-
17
-import java.io.File;
18
-import java.io.InputStream;
19
-import java.util.List;
20
-import java.util.Map;
21
-
22
-/**
23
- * 邮件API接口
24
- *
25
- * @author xuyuxiang
26
- * @date 2022/6/22 15:21
27
- **/
28
-public interface DevEmailApi {
29
-
30
-    /* =========本地邮件========= */
31
-
32
-    /**
33
-     * 发送纯文本邮件
34
-     *
35
-     * @param tos 收件人邮箱,逗号拼接
36
-     * @param subject 邮件主题
37
-     * @param content 邮件内容
38
-     * @param files 附件列表
39
-     * @author xuyuxiang
40
-     * @date 2022/2/7 22:29
41
-     */
42
-    void sendTextEmailLocal(String tos, String subject, String content, List<File> files);
43
-
44
-    /**
45
-     * 发送HTML邮件
46
-     *
47
-     * @param tos 收件人邮箱,逗号拼接
48
-     * @param subject 邮件主题
49
-     * @param content 邮件内容
50
-     * @param imageMap – 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
51
-     * @param files 附件列表
52
-     * @author xuyuxiang
53
-     * @date 2022/2/7 22:29
54
-     */
55
-    void sendHtmlEmailLocal(String tos, String subject, String content, Map<String, InputStream> imageMap, List<File> files);
56
-
57
-    /* =========阿里云邮件========= */
58
-
59
-    /**
60
-     * 发送纯文本邮件(不使用模板,频率限制100 QPS)
61
-     *
62
-     * @param from 管理控制台中配置的发信地址,必传且必须正确
63
-     * @param user 发信人昵称,长度小于15个字符,可不传
64
-     * @param tos 目标地址,多个 email 地址可以用逗号分隔,最多100个地址,必传且必须正确
65
-     * @param subject 邮件主题,必传
66
-     * @param content 邮件 txt 正文,限制28K,必传
67
-     * @author xuyuxiang
68
-     * @date 2022/2/23 14:24
69
-     **/
70
-    void sendTextEmailAliyun(String from, String user, String tos, String subject, String content);
71
-
72
-    /**
73
-     * 发送HTML邮件(不使用模板,频率限制100 QPS)
74
-     *
75
-     * @param from 管理控制台中配置的发信地址,必传且必须正确
76
-     * @param user 发信人昵称,长度小于15个字符,可不传
77
-     * @param tos 目标地址,多个 email 地址可以用逗号分隔,最多100个地址,必传且必须正确
78
-     * @param subject 邮件主题,必传
79
-     * @param content 邮件 html 正文,限制28K,必传
80
-     * @author xuyuxiang
81
-     * @date 2022/2/23 14:24
82
-     **/
83
-    void sendHtmlEmailAliyun(String from, String user, String tos, String subject, String content);
84
-
85
-    /**
86
-     * 使用模板发送邮件,国内频率限制是20/min;海外频率限制是10/min。
87
-     *
88
-     * @param from 管理控制台中配置的发信地址,必传且必须正确
89
-     * @param tagName 控制台创建的邮件标签,可不传
90
-     * @param toName 预先创建且上传了收件人的收件人列表名称,必传且必须正确
91
-     * @param templateName 预先创建且通过审核的模板名称,必传且必须正确
92
-     * @author xuyuxiang
93
-     * @date 2022/2/23 14:24
94
-     **/
95
-    void sendEmailWithTemplateAliyun(String from, String tagName, String toName, String templateName);
96
-
97
-    /* =========腾讯云邮件========= */
98
-
99
-    /**
100
-     * 发送纯文本邮件(不使用模板,默认接口请求频率限制:20次/秒。)
101
-     *
102
-     * @param from 管理控制台中配置的发信地址,必传且必须正确
103
-     * @param user 发信人昵称,可不传
104
-     * @param tos 目标地址,多个 email 地址可以用逗号分隔,最多50个地址,必传且必须正确,非群发邮件请多次调用API发送
105
-     * @param subject 邮件主题,必传
106
-     * @param content 邮件 txt 正文,必传,注意:腾讯云api目前要求请求包大小不得超过8 MB。
107
-     * @param attachmentList 需要发送附件时,填写附件相关参数,格式:[{"FileName": "xxxx", "Content": "xxx"}]
108
-     *                       支持的格式与说明见:https://cloud.tencent.com/document/api/1288/51053#Attachment
109
-     * @author xuyuxiang
110
-     * @date 2022/2/23 14:24
111
-     **/
112
-    void sendTextEmailTencent(String from, String user, String tos, String subject, String content, List<JSONObject> attachmentList);
113
-
114
-    /**
115
-     * 发送HTML邮件(不使用模板,默认接口请求频率限制:20次/秒。)
116
-     *
117
-     * @param from 管理控制台中配置的发信地址,必传且必须正确
118
-     * @param user 发信人昵称,可不传
119
-     * @param tos 目标地址,多个 email 地址可以用逗号分隔,最多50个地址,必传且必须正确,非群发邮件请多次调用API发送
120
-     * @param subject 邮件主题,必传
121
-     * @param content 邮件 txt 正文,必传,注意:腾讯云api目前要求请求包大小不得超过8 MB。
122
-     * @param attachmentList 需要发送附件时,填写附件相关参数,格式:[{"FileName": "xxxx", "Content": "xxx"}]
123
-     *                       支持的格式与说明见:https://cloud.tencent.com/document/api/1288/51053#Attachment
124
-     * @author xuyuxiang
125
-     * @date 2022/2/23 14:24
126
-     **/
127
-    void sendHtmlEmailTencent(String from, String user, String tos, String subject, String content, List<JSONObject> attachmentList);
128
-
129
-    /**
130
-     * 使用模板发送邮件,默认接口请求频率限制:20次/秒。
131
-     *
132
-     * @param from 管理控制台中配置的发信地址,必传且必须正确
133
-     * @param user 发信人昵称,可不传
134
-     * @param toId 预先创建且上传了收件人的收件人列表id,必传且必须正确
135
-     * @param templateId 预先创建且通过审核的模板Id,必传且必须正确
136
-     * @param templateParam 预先创建且通过审核的模板的参数json,格式{"name":"张三"},可不传
137
-     * @param subject 邮件主题,必传
138
-     * @author xuyuxiang
139
-     * @date 2022/2/23 14:24
140
-     **/
141
-    void sendEmailWithTemplateTencent(String from, String user, String toId, String templateId, String templateParam, String subject, List<JSONObject> attachmentList);
142
-}

+ 0 - 104
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevFileApi.java

@@ -1,104 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-import org.springframework.web.multipart.MultipartFile;
16
-
17
-/**
18
- * 文件API接口,可参考vip.xiaonuo.dev.core.util.file包下的工具类扩展更多需要的方法
19
- *
20
- * @author xuyuxiang
21
- * @date 2022/6/22 15:21
22
- **/
23
-public interface DevFileApi {
24
-
25
-    /* =========本地文件========= */
26
-
27
-    /**
28
-     * 上传文件返回Url
29
-     *
30
-     * @param file 文件
31
-     * @author xuyuxiang
32
-     * @date 2022/6/22 17:44
33
-     **/
34
-    String storageFileWithReturnUrlLocal(MultipartFile file);
35
-
36
-    /**
37
-     * 上传文件返回Id
38
-     *
39
-     * @param file 文件
40
-     * @author xuyuxiang
41
-     * @date 2022/6/22 17:44
42
-     **/
43
-    String storageFileWithReturnIdLocal(MultipartFile file);
44
-
45
-    /* =========阿里云文件========= */
46
-
47
-    /**
48
-     * 上传文件返回Url
49
-     *
50
-     * @param file 文件
51
-     * @author xuyuxiang
52
-     * @date 2022/6/22 17:44
53
-     **/
54
-    String storageFileWithReturnUrlAliyun(MultipartFile file);
55
-
56
-    /**
57
-     * 上传文件返回Id
58
-     *
59
-     * @param file 文件
60
-     * @author xuyuxiang
61
-     * @date 2022/6/22 17:44
62
-     **/
63
-    String storageFileWithReturnIdAliyun(MultipartFile file);
64
-
65
-    /* =========腾讯云件========= */
66
-
67
-    /**
68
-     * 上传文件返回Url
69
-     *
70
-     * @param file 文件
71
-     * @author xuyuxiang
72
-     * @date 2022/6/22 17:44
73
-     **/
74
-    String storageFileWithReturnUrlTencent(MultipartFile file);
75
-
76
-    /**
77
-     * 上传文件返回Id
78
-     *
79
-     * @param file 文件
80
-     * @author xuyuxiang
81
-     * @date 2022/6/22 17:44
82
-     **/
83
-    String storageFileWithReturnIdTencent(MultipartFile file);
84
-
85
-    /* =========MINIO件========= */
86
-
87
-    /**
88
-     * 上传文件返回Url
89
-     *
90
-     * @param file 文件
91
-     * @author xuyuxiang
92
-     * @date 2022/6/22 17:44
93
-     **/
94
-    String storageFileWithReturnUrlMinio(MultipartFile file);
95
-
96
-    /**
97
-     * 上传文件返回Id
98
-     *
99
-     * @param file 文件
100
-     * @author xuyuxiang
101
-     * @date 2022/6/22 17:44
102
-     **/
103
-    String storageFileWithReturnIdMinio(MultipartFile file);
104
-}

+ 0 - 22
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevJobApi.java

@@ -1,22 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-/**
16
- * 定时任务API
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/9/2 15:59
20
- */
21
-public interface DevJobApi {
22
-}

+ 0 - 58
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevLogApi.java

@@ -1,58 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-
17
-import java.util.List;
18
-
19
-/**
20
- * 日志API
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/9/2 15:59
24
- */
25
-public interface DevLogApi {
26
-
27
-    /**
28
-     * 记录登录日志
29
-     *
30
-     * @author xuyuxiang
31
-     * @date 2022/9/2 16:03
32
-     */
33
-    void executeLoginLog(String userName);
34
-
35
-    /**
36
-     * 记录登出日志
37
-     *
38
-     * @author xuyuxiang
39
-     * @date 2022/9/2 16:03
40
-     */
41
-    void executeLogoutLog(String userName);
42
-
43
-    /**
44
-     * 获取当前用户的访问日志列表
45
-     *
46
-     * @author xuyuxiang
47
-     * @date 2022/9/4 15:12
48
-     */
49
-    List<JSONObject> currentUserVisLogList();
50
-
51
-    /**
52
-     * 获取当前用户的操作日志列表
53
-     *
54
-     * @author xuyuxiang
55
-     * @date 2022/9/4 15:12
56
-     */
57
-    List<JSONObject> currentUserOpLogList();
58
-}

+ 0 - 111
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevMessageApi.java

@@ -1,111 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
17
-
18
-import java.util.List;
19
-
20
-/**
21
- * 站内信API接口
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/6/22 17:33
25
- **/
26
-public interface DevMessageApi {
27
-
28
-    /**
29
-     * 发送站内信,默认:分类系统通知
30
-     *
31
-     * @param receiverIdList 接收的用户id集合
32
-     * @param subject 主题
33
-     * @author xuyuxiang
34
-     * @date 2022/6/22 17:35
35
-     **/
36
-    void sendMessage(List<String> receiverIdList, String subject);
37
-
38
-    /**
39
-     * 发送站内信指定分类
40
-     *
41
-     * @param receiverIdList 接收的用户id集合
42
-     * @param subject 主题
43
-     * @author xuyuxiang
44
-     * @date 2022/6/22 17:35
45
-     **/
46
-    void sendMessage(List<String> receiverIdList, String category, String subject);
47
-
48
-    /**
49
-     * 发送站内信带内容,默认:分类系统通知
50
-     *
51
-     * @param receiverIdList 接收的用户id集合
52
-     * @param subject 主题
53
-     * @param content 站内信内容
54
-     * @author xuyuxiang
55
-     * @date 2022/6/22 17:35
56
-     **/
57
-    void sendMessageWithContent(List<String> receiverIdList, String subject, String content);
58
-
59
-    /**
60
-     * 发送站内信带内容,指定分类
61
-     *
62
-     * @param receiverIdList 接收的用户id集合
63
-     * @param subject 主题
64
-     * @param content 站内信内容
65
-     * @author xuyuxiang
66
-     * @date 2022/6/22 17:35
67
-     **/
68
-    void sendMessageWithContent(List<String> receiverIdList, String category, String subject, String content);
69
-
70
-    /**
71
-     * 获取未读站内信列表
72
-     *
73
-     * @author xuyuxiang
74
-     * @date 2022/9/2 11:48
75
-     */
76
-    List<JSONObject> list(List<String> receiverIdList, Integer limit);
77
-
78
-    /**
79
-     * 获取未读站内信数量
80
-     *
81
-     * @author diantu
82
-     * @date 2023/7/10
83
-     */
84
-    Long unreadCount(String loginId);
85
-
86
-    /**
87
-     * 获取站内信分页
88
-     *
89
-     * @author xuyuxiang
90
-     * @date 2022/9/2 11:48
91
-     */
92
-    Page<JSONObject> page(List<String> receiverIdList, String category);
93
-
94
-    /**
95
-     * 获取站内信详情
96
-     *
97
-     * @param id 站内信id
98
-     * @author xuyuxiang
99
-     * @date 2022/4/24 20:08
100
-     */
101
-    JSONObject detail(String id);
102
-
103
-    /**
104
-     * 站内信全部标记已读
105
-     *
106
-     * @author diantu
107
-     * @date 2023/7/10
108
-     */
109
-    void allMessageMarkRead();
110
-
111
-}

+ 0 - 54
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevSmsApi.java

@@ -1,54 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-/**
16
- * 短信API
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/6/22 15:22
20
- **/
21
-public interface DevSmsApi {
22
-
23
-    /* =========阿里云邮件========= */
24
-
25
-    /**
26
-     * 发送短信
27
-     *
28
-     * @param phoneNumbers 手机号码,支持对多个手机号码发送短信,手机号码之间以半角逗号(,)分隔。
29
-     *                     上限为1000个手机号码。批量调用相对于单条调用及时性稍有延迟。
30
-     * @param signName 短信服务控制台配置且审核通过的短信签名
31
-     * @param templateCode 短信服务控制台配置且审核通过的模板编码
32
-     * @param templateParam 短信模板变量对应的实际值,JSON格式。支持传入多个参数,示例:{"name":"张三","number":"15038****76"}
33
-     * @author xuyuxiang
34
-     * @date 2022/2/24 13:42
35
-     **/
36
-    void sendSmsAliyun(String phoneNumbers, String signName, String templateCode, String templateParam);
37
-
38
-    /* =========腾讯云邮件========= */
39
-
40
-    /**
41
-     * 发送短信
42
-     *
43
-     * @param sdkAppId 短信 SdkAppId,在 短信控制台 添加应用后生成的实际 SdkAppId,示例如1400006666。
44
-     *                 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
45
-     * @param phoneNumbers 手机号码,支持对多个手机号码发送短信,手机号码之间以半角逗号(,)分隔。
46
-     *                     上限为1000个手机号码。批量调用相对于单条调用及时性稍有延迟。
47
-     * @param signName 短信服务控制台配置且审核通过的短信签名
48
-     * @param templateCode 短信服务控制台配置且审核通过的模板编码
49
-     * @param templateParam 短信模板变量对应的顺序。支持传入多个参数,逗号拼接,示例:"张三,15038****76,进行中"}
50
-     * @author xuyuxiang
51
-     * @date 2022/2/24 13:42
52
-     **/
53
-    void sendSmsTencent(String sdkAppId, String phoneNumbers, String signName, String templateCode, String templateParam);
54
-}

+ 0 - 68
snowy-plugin-api/snowy-plugin-dev-api/src/main/java/vip/xiaonuo/dev/api/DevSseApi.java

@@ -1,68 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.dev.api;
14
-
15
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
16
-import vip.xiaonuo.common.sse.CommonSseParam;
17
-import java.util.function.Consumer;
18
-
19
-/**
20
- * SSE API接口
21
- *
22
- * @author diantu
23
- * @date 2023/7/5
24
- **/
25
-public interface DevSseApi {
26
-
27
-    /**
28
-     * 创建SSE连接
29
-     *
30
-     * @param clientId 客户端id,不传则自动生成
31
-     * @param setHeartBeat 是否设置心跳定时任务,默认为false(true:设置 false:不设置)
32
-     * @param defaultHeartbeat 是否使用默认心跳任务
33
-     * @param consumer 自定义心跳任务,需要自定义实现Consumer接口中的accept方法(setHeartBeat必须为true,defaultHeartbeat为false才有意义)
34
-     * @return 初次建立连接会推送客户端id,状态码为0
35
-     * @author diantu
36
-     * @date 2023/7/5
37
-     **/
38
-    public SseEmitter createSseConnect(String clientId, Boolean setHeartBeat, Boolean defaultHeartbeat, Consumer<CommonSseParam> consumer);
39
-
40
-    /**
41
-     * 关闭连接
42
-     *
43
-     * @param clientId 客户端id
44
-     * @author diantu
45
-     * @date 2023/7/5
46
-     **/
47
-    public void closeSseConnect(String clientId);
48
-
49
-    /**
50
-     * 推送消息到所有客户端
51
-     *
52
-     * @param msg 推送消息
53
-     * @author diantu
54
-     * @date 2023/7/5
55
-     **/
56
-    public void sendMessageToAllClient(String msg);
57
-
58
-    /**
59
-     * 根据clientId发送消息给某一客户端
60
-     *
61
-     * @param clientId 客户端id
62
-     * @param msg 推送消息
63
-     * @author diantu
64
-     * @date 2023/7/5
65
-     **/
66
-    public void sendMessageToOneClient(String clientId, String msg);
67
-
68
-}

+ 0 - 24
snowy-plugin-api/snowy-plugin-gen-api/pom.xml

@@ -1,24 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-gen-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>代码生成插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-    </dependencies>
24
-</project>

+ 0 - 13
snowy-plugin-api/snowy-plugin-gen-api/src/main/java/vip/xiaonuo/gen/package-info.java

@@ -1,13 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.gen;

+ 0 - 1
snowy-plugin-api/snowy-plugin-mobile-api/README.md

@@ -1 +0,0 @@
1
-# 移动端管理插件api接口

+ 0 - 24
snowy-plugin-api/snowy-plugin-mobile-api/pom.xml

@@ -1,24 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-mobile-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>移动端管理插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-    </dependencies>
24
-</project>

+ 0 - 32
snowy-plugin-api/snowy-plugin-mobile-api/src/main/java/vip/xiaonuo/mobile/api/MobileButtonApi.java

@@ -1,32 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.mobile.api;
14
-
15
-import java.util.List;
16
-
17
-/**
18
- * 移动端按钮API
19
- *
20
- * @author xuyuxiang
21
- * @date 2023/2/1 9:52
22
- **/
23
-public interface MobileButtonApi {
24
-
25
-    /**
26
-     * 根据按钮id集合获取按钮码列表
27
-     *
28
-     * @author 每天一点
29
-     * @date 2023/2/5 13:26
30
-     **/
31
-    List<String> listByIds(List<String> idList);
32
-}

+ 0 - 43
snowy-plugin-api/snowy-plugin-mobile-api/src/main/java/vip/xiaonuo/mobile/api/MobileMenuApi.java

@@ -1,43 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.mobile.api;
14
-
15
-import cn.hutool.core.lang.tree.Tree;
16
-import cn.hutool.json.JSONObject;
17
-
18
-import java.util.List;
19
-
20
-/**
21
- * 移动端菜单API
22
- *
23
- * @author xuyuxiang
24
- * @date 2023/1/31 10:09
25
- **/
26
-public interface MobileMenuApi {
27
-
28
-    /**
29
-     * 获取移动端菜单授权树
30
-     *
31
-     * @author xuyuxiang
32
-     * @date 2023/1/31 10:10
33
-     **/
34
-    List<JSONObject> mobileMenuTreeSelector();
35
-
36
-    /**
37
-     * 获取移动端登录菜单树
38
-     *
39
-     * @author xuyuxiang
40
-     * @date 2023/1/31 10:29
41
-     **/
42
-    List<Tree<String>> loginMobileMenuTree(List<String> menuIdList);
43
-}

+ 0 - 33
snowy-plugin-api/snowy-plugin-mobile-api/src/main/java/vip/xiaonuo/mobile/api/MobileModuleApi.java

@@ -1,33 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.mobile.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-import java.util.List;
17
-
18
-/**
19
- * 移动端菜单API
20
- *
21
- * @author xuyuxiang
22
- * @date 2023/1/31 10:09
23
- **/
24
-public interface MobileModuleApi {
25
-
26
-    /**
27
-     * 获取移动端模块选择器
28
-     *
29
-     * @author xuyuxiang
30
-     * @date 2023/7/15 22:01
31
-     **/
32
-    List<JSONObject> mobileModuleSelector();
33
-}

+ 0 - 24
snowy-plugin-api/snowy-plugin-sys-api/pom.xml

@@ -1,24 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin-api</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-sys-api</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>系统功能插件api接口</description>
16
-
17
-    <dependencies>
18
-        <!-- 每个插件接口都要引入common -->
19
-        <dependency>
20
-            <groupId>vip.xiaonuo</groupId>
21
-            <artifactId>snowy-common</artifactId>
22
-        </dependency>
23
-    </dependencies>
24
-</project>

+ 0 - 30
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysButtonApi.java

@@ -1,30 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-/**
16
- * 按钮API
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/11/1 13:45
20
- **/
21
-public interface SysButtonApi {
22
-
23
-    /**
24
-     * 代码生成按钮插入
25
-     *
26
-     * @author xuyuxiang
27
-     * @date 2022/11/1 13:48
28
-     **/
29
-    void addForGenButton(String menuId, String className, String functionName);
30
-}

+ 0 - 30
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysMenuApi.java

@@ -1,30 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-/**
16
- * 菜单API
17
- *
18
- * @author xuyuxiang
19
- * @date 2022/11/1 13:44
20
- **/
21
-public interface SysMenuApi {
22
-
23
-    /**
24
-     * 代码生成菜单插入
25
-     *
26
-     * @author xuyuxiang
27
-     * @date 2022/11/1 13:48
28
-     **/
29
-    String addForGenMenu(String parentId, String busName, String module, String title, String path);
30
-}

+ 0 - 60
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysOrgApi.java

@@ -1,60 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-import cn.hutool.core.lang.tree.Tree;
16
-import cn.hutool.json.JSONObject;
17
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
18
-
19
-import java.util.List;
20
-
21
-/**
22
- * 组织API
23
- *
24
- * @author xuyuxiang
25
- * @date 2022/6/6 11:35
26
- **/
27
-public interface SysOrgApi {
28
-
29
-    /**
30
-     * 根据id获取名称
31
-     *
32
-     * @author xuyuxiang
33
-     * @date 2022/8/4 10:12
34
-     **/
35
-    String getNameById(String orgId);
36
-
37
-    /**
38
-     * 根据组织id获取部门主管id
39
-     *
40
-     * @author xuyuxiang
41
-     * @date 2022/6/6 14:50
42
-     **/
43
-    String getSupervisorIdByOrgId(String orgId);
44
-
45
-    /**
46
-     * 获取组织树选择器
47
-     *
48
-     * @author xuyuxiang
49
-     * @date 2022/7/22 14:46
50
-     **/
51
-    List<Tree<String>> orgTreeSelector();
52
-
53
-    /**
54
-     * 获取组织列表选择器
55
-     *
56
-     * @author xuyuxiang
57
-     * @date 2022/7/22 14:45
58
-     **/
59
-    Page<JSONObject> orgListSelector(String parentId);
60
-}

+ 0 - 43
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysPositionApi.java

@@ -1,43 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
17
-
18
-import java.util.List;
19
-
20
-/**
21
- * 职位API
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/6/6 11:35
25
- **/
26
-public interface SysPositionApi {
27
-
28
-    /**
29
-     * 根据id获取名称
30
-     *
31
-     * @author xuyuxiang
32
-     * @date 2022/8/4 10:13
33
-     **/
34
-    String getNameById(String positionId);
35
-
36
-    /**
37
-     * 获取职位选择器
38
-     *
39
-     * @author xuyuxiang
40
-     * @date 2022/7/22 14:47
41
-     **/
42
-    Page<JSONObject> positionSelector(String orgId, String searchKey);
43
-}

+ 0 - 48
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysRelationApi.java

@@ -1,48 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-import java.util.List;
16
-
17
-/**
18
- * 关系API
19
- *
20
- * @author xuyuxiang
21
- * @date 2022/6/6 11:41
22
- **/
23
-public interface SysRelationApi {
24
-
25
-    /**
26
-     * 根据角色id集合获取角色下用户id集合
27
-     *
28
-     * @author xuyuxiang
29
-     * @date 2022/6/6 11:43
30
-     **/
31
-    List<String> getUserIdListByRoleIdList(List<String> roleIdList);
32
-
33
-    /**
34
-     * 根据移动端菜单Id集合移除角色和移动端菜单关系
35
-     *
36
-     * @author xuyuxiang
37
-     * @date 2023/1/31 9:54
38
-     **/
39
-    void removeRoleHasMobileMenuRelation(List<String> targetIdList);
40
-
41
-    /**
42
-     * 清除对应的角色与移动端菜单信息中的【授权的移动端按钮信息】
43
-     *
44
-     * @author xuyuxiang
45
-     * @date 2023/1/31 9:54
46
-     **/
47
-    void removeRoleHasMobileButtonRelation(List<String> targetIdList, List<String> buttonIdList);
48
-}

+ 0 - 51
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysRoleApi.java

@@ -1,51 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
17
-
18
-import java.util.List;
19
-
20
-/**
21
- * 角色API
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/6/6 11:36
25
- **/
26
-public interface SysRoleApi {
27
-
28
-    /**
29
-     * 判断组织下是否存在角色
30
-     *
31
-     * @author xuyuxiang
32
-     * @date 2022/8/2 11:16
33
-     */
34
-    boolean orgHasRole(List<String> orgIdList);
35
-
36
-    /**
37
-     * 获取角色选择器
38
-     *
39
-     * @author xuyuxiang
40
-     * @date 2022/7/22 14:49
41
-     **/
42
-    Page<JSONObject> roleSelector(String orgId, String category, String searchKey, List<String> dataScopeList, boolean excludeSuperAdmin);
43
-
44
-    /**
45
-     * 代码生成菜单按钮授权
46
-     *
47
-     * @author xuyuxiang
48
-     * @date 2022/11/1 15:58
49
-     **/
50
-    void grantForGenMenuAndButton(String menuId);
51
-}

+ 0 - 115
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysUserApi.java

@@ -1,115 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.sys.api;
14
-
15
-import cn.hutool.json.JSONObject;
16
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
17
-
18
-import java.util.List;
19
-
20
-/**
21
- * 用户Api
22
- *
23
- * @author xuyuxiang
24
- * @date 2022/6/6 11:33
25
- **/
26
-public interface SysUserApi {
27
-
28
-    /**
29
-     * 根据用户id获取用户对象,没有则返回null
30
-     *
31
-     * @author xuyuxiang
32
-     * @date 2022/6/20 18:19
33
-     **/
34
-    JSONObject getUserByIdWithoutException(String userId);
35
-
36
-    /**
37
-     * 根据用户id获取用户对象列表,没有的则为空,都没有则返回空集合
38
-     *
39
-     * @author xuyuxiang
40
-     * @date 2022/6/20 18:19
41
-     **/
42
-    List<JSONObject> getUserListByIdListWithoutException(List<String> userIdList);
43
-
44
-    /**
45
-     * 根据用户id获取用户对象,没有则抛出异常
46
-     *
47
-     * @author xuyuxiang
48
-     * @date 2022/6/20 18:19
49
-     **/
50
-    JSONObject getUserByIdWithException(String userId);
51
-
52
-    /**
53
-     * 根据用户id获取用户对象列表,只要有一个没有则抛出异常
54
-     *
55
-     * @author xuyuxiang
56
-     * @date 2022/6/20 18:19
57
-     **/
58
-    List<JSONObject> getUserListByIdWithException(List<String> userIdList);
59
-
60
-    /**
61
-     * 获取用户拥有角色
62
-     *
63
-     * @author xuyuxiang
64
-     * @date 2022/5/13 21:00
65
-     */
66
-    List<String> ownRole(String userId);
67
-
68
-    /**
69
-     * 给用户授权角色
70
-     *
71
-     * @author xuyuxiang
72
-     * @date 2022/8/1 18:28
73
-     */
74
-    void grantRole(String userId, List<String> roleIdList);
75
-
76
-    /**
77
-     * 根据组织id集合获取组织下用户id集合
78
-     *
79
-     * @author xuyuxiang
80
-     * @date 2022/6/6 11:40
81
-     **/
82
-    List<String> getUserIdListByOrgIdList(List<String> orgIdList);
83
-
84
-    /**
85
-     * 根据职位id集合获取职位下用户id集合
86
-     *
87
-     * @author xuyuxiang
88
-     * @date 2022/6/6 11:44
89
-     **/
90
-    List<String> getUserIdListByPositionIdList(List<String> positionIdList);
91
-
92
-    /**
93
-     * 根据用户id和组织id和职位id和主管层级获取上级主管id
94
-     *
95
-     * @author xuyuxiang
96
-     * @date 2022/6/6 14:50
97
-     **/
98
-    JSONObject getSupervisorIdBySupervisorLevel(List<String> userIdList, String userId, String orgId, String supervisorLevel);
99
-
100
-    /**
101
-     * 根据用户id和组织id和职位id和终点主管层级获取上级主管id集合
102
-     *
103
-     * @author xuyuxiang
104
-     * @date 2022/6/6 14:50
105
-     **/
106
-    List<String> getMulSupervisorIdListByEndLevel(String userId, String orgId, String endLevel);
107
-
108
-    /**
109
-     * 获取用户选择器
110
-     *
111
-     * @author xuyuxiang
112
-     * @date 2022/4/24 20:08
113
-     */
114
-    Page<JSONObject> userSelector(String orgId, String searchKey);
115
-}

+ 0 - 15
snowy-plugin/README.md

@@ -1,15 +0,0 @@
1
-# 插件模块
2
-
3
-####登录鉴权插件: snowy-plugin-auth
4
-
5
-####业务功能插件: snowy-plugin-biz
6
-
7
-####C端功能插件: snowy-plugin-client
8
-
9
-####开发工具插件: snowy-plugin-dev
10
-
11
-####代码生成插件: snowy-plugin-gen
12
-
13
-####移动端管理插件: snowy-plugin-mobile
14
-
15
-####系统功能插件: snowy-plugin-sys

+ 0 - 39
snowy-plugin/pom.xml

@@ -1,39 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin</artifactId>
14
-    <packaging>pom</packaging>
15
-    <description>插件模块</description>
16
-
17
-    <modules>
18
-        <!-- 登录鉴权插件 -->
19
-        <module>snowy-plugin-auth</module>
20
-
21
-        <!-- 业务功能插件 -->
22
-        <module>snowy-plugin-biz</module>
23
-
24
-         <!-- C端功能插件 -->
25
-        <module>snowy-plugin-client</module>
26
-
27
-        <!-- 开发工具插件 -->
28
-        <module>snowy-plugin-dev</module>
29
-
30
-        <!-- 代码生成插件 -->
31
-        <module>snowy-plugin-gen</module>
32
-
33
-        <!-- 移动端管理插件 -->
34
-        <module>snowy-plugin-mobile</module>
35
-
36
-        <!-- 系统功能插件 -->
37
-        <module>snowy-plugin-sys</module>
38
-    </modules>
39
-</project>

+ 0 - 61
snowy-plugin/snowy-plugin-auth/pom.xml

@@ -1,61 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<project xmlns="http://maven.apache.org/POM/4.0.0"
3
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
-    <modelVersion>4.0.0</modelVersion>
6
-
7
-    <parent>
8
-        <groupId>vip.xiaonuo</groupId>
9
-        <artifactId>snowy-plugin</artifactId>
10
-        <version>2.0.0</version>
11
-    </parent>
12
-
13
-    <artifactId>snowy-plugin-auth</artifactId>
14
-    <packaging>jar</packaging>
15
-    <description>登录鉴权插件</description>
16
-
17
-    <dependencies>
18
-
19
-        <!-- 每个插件都要引入自己的对外接口 -->
20
-        <dependency>
21
-            <groupId>vip.xiaonuo</groupId>
22
-            <artifactId>snowy-plugin-auth-api</artifactId>
23
-        </dependency>
24
-
25
-        <!-- 引入开发工具接口,用于获取配置 -->
26
-        <dependency>
27
-            <groupId>vip.xiaonuo</groupId>
28
-            <artifactId>snowy-plugin-dev-api</artifactId>
29
-        </dependency>
30
-
31
-        <!-- sa-token -->
32
-        <dependency>
33
-            <groupId>cn.dev33</groupId>
34
-            <artifactId>sa-token-spring-boot-starter</artifactId>
35
-        </dependency>
36
-
37
-        <!-- sa-token 整合 redis (使用jackson序列化方式) -->
38
-        <dependency>
39
-            <groupId>cn.dev33</groupId>
40
-            <artifactId>sa-token-dao-redis-jackson</artifactId>
41
-        </dependency>
42
-
43
-        <!-- Sa-Token插件:权限缓存与业务缓存分离 -->
44
-        <dependency>
45
-            <groupId>cn.dev33</groupId>
46
-            <artifactId>sa-token-alone-redis</artifactId>
47
-        </dependency>
48
-
49
-        <!-- Sa-Token 插件:整合SSO -->
50
-        <dependency>
51
-            <groupId>cn.dev33</groupId>
52
-            <artifactId>sa-token-sso</artifactId>
53
-        </dependency>
54
-
55
-        <!-- JustAuth 第三方登录 -->
56
-        <dependency>
57
-            <groupId>me.zhyd.oauth</groupId>
58
-            <artifactId>JustAuth</artifactId>
59
-        </dependency>
60
-    </dependencies>
61
-</project>

+ 0 - 149
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/config/AuthConfigure.java

@@ -1,149 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.config;
14
-
15
-import cn.dev33.satoken.interceptor.SaInterceptor;
16
-import cn.dev33.satoken.stp.StpInterface;
17
-import cn.dev33.satoken.stp.StpLogic;
18
-import cn.dev33.satoken.strategy.SaStrategy;
19
-import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
20
-import io.swagger.annotations.ApiOperation;
21
-import org.springframework.context.annotation.Bean;
22
-import org.springframework.context.annotation.Configuration;
23
-import org.springframework.core.annotation.AnnotatedElementUtils;
24
-import org.springframework.stereotype.Component;
25
-import org.springframework.web.bind.annotation.RequestMethod;
26
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
27
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
28
-import springfox.documentation.builders.ApiInfoBuilder;
29
-import springfox.documentation.builders.PathSelectors;
30
-import springfox.documentation.builders.RequestHandlerSelectors;
31
-import springfox.documentation.service.Contact;
32
-import springfox.documentation.spi.DocumentationType;
33
-import springfox.documentation.spring.web.plugins.Docket;
34
-import vip.xiaonuo.auth.core.enums.SaClientTypeEnum;
35
-import vip.xiaonuo.auth.core.util.StpClientLoginUserUtil;
36
-import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
37
-import vip.xiaonuo.common.pojo.CommonResult;
38
-
39
-import javax.annotation.Resource;
40
-import java.util.List;
41
-
42
-/**
43
- * SaToken鉴权配置
44
- *
45
- * @author xuyuxiang
46
- * @date 2021/10/9 14:24
47
- **/
48
-@Configuration
49
-public class AuthConfigure implements WebMvcConfigurer {
50
-
51
-    @Resource
52
-    private OpenApiExtensionResolver openApiExtensionResolver;
53
-
54
-    /**
55
-     * 注册Sa-Token的注解拦截器,打开注解式鉴权功能
56
-     *
57
-     * 注解的方式有以下几中,注解既可以加在接口方法上,也可加在Controller类上:
58
-     * 1.@SaCheckLogin: 登录认证 —— 只有登录之后才能进入该方法(常用)
59
-     * 2.@SaCheckRole("admin"): 角色认证 —— 必须具有指定角色标识才能进入该方法(常用)
60
-     * 3.@SaCheckPermission("user:add"): 权限认证 —— 必须具有指定权限才能进入该方法(常用)
61
-     * 4.@SaCheckSafe: 二级认证校验 —— 必须二级认证之后才能进入该方法
62
-     * 5.@SaCheckBasic: HttpBasic认证 —— 只有通过 Basic 认证后才能进入该方法
63
-     *
64
-     * 在Controller中创建一个接口,默认不需要登录也不需要任何权限都可以访问的,只有加了上述注解才会校验
65
-     **/
66
-    @Override
67
-    public void addInterceptors(InterceptorRegistry registry) {
68
-        // 注册注解拦截器,并排除不需要注解鉴权的接口地址 (与登录拦截器无关,只是说明哪些接口不需要被拦截器拦截,此处都拦截)
69
-        registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
70
-    }
71
-
72
-    @Bean("stpLogic")
73
-    public StpLogic getStpLogic() {
74
-        // 重写Sa-Token的StpLogic,默认客户端类型为B
75
-        return new StpLogic(SaClientTypeEnum.B.getValue());
76
-    }
77
-
78
-    @Bean("stpClientLogic")
79
-    public StpLogic getStpClientLogic() {
80
-        // 重写Sa-Token的StpLogic,默认客户端类型为C
81
-        return new StpLogic(SaClientTypeEnum.C.getValue());
82
-    }
83
-
84
-    @Bean
85
-    public void rewriteSaStrategy() {
86
-        // 重写Sa-Token的注解处理器,增加注解合并功能
87
-        SaStrategy.me.getAnnotation = AnnotatedElementUtils::getMergedAnnotation;
88
-    }
89
-
90
-    /**
91
-     * 权限认证接口实现类,集成权限认证功能
92
-     *
93
-     * @author xuyuxiang
94
-     * @date 2022/7/7 16:16
95
-     **/
96
-    @Component
97
-    public static class StpInterfaceImpl implements StpInterface {
98
-
99
-        /**
100
-         * 返回一个账号所拥有的权限码集合
101
-         */
102
-        @Override
103
-        public List<String> getPermissionList(Object loginId, String loginType) {
104
-            if (SaClientTypeEnum.B.getValue().equals(loginType)) {
105
-                return StpLoginUserUtil.getLoginUser().getPermissionCodeList();
106
-            } else {
107
-                return StpClientLoginUserUtil.getClientLoginUser().getPermissionCodeList();
108
-            }
109
-        }
110
-
111
-        /**
112
-         * 返回一个账号所拥有的角色标识集合
113
-         */
114
-        @Override
115
-        public List<String> getRoleList(Object loginId, String loginType) {
116
-            if (SaClientTypeEnum.B.getValue().equals(loginType)) {
117
-                return StpLoginUserUtil.getLoginUser().getRoleCodeList();
118
-            } else {
119
-                return StpClientLoginUserUtil.getClientLoginUser().getRoleCodeList();
120
-            }
121
-        }
122
-    }
123
-
124
-    /**
125
-     * API文档分组配置
126
-     *
127
-     * @author xuyuxiang
128
-     * @date 2022/7/7 16:18
129
-     **/
130
-    @Bean(value = "authDocApi")
131
-    public Docket authDocApi() {
132
-        return new Docket(DocumentationType.SWAGGER_2)
133
-                .apiInfo(new ApiInfoBuilder()
134
-                        .title("登录鉴权AUTH")
135
-                        .description("登录鉴权AUTH")
136
-                        .termsOfServiceUrl("https://www.xiaonuo.vip")
137
-                        .contact(new Contact("SNOWY_TEAM","https://www.xiaonuo.vip", "xuyuxiang29@foxmail.com"))
138
-                        .version("2.0.0")
139
-                        .build())
140
-                .globalResponseMessage(RequestMethod.GET, CommonResult.responseList())
141
-                .globalResponseMessage(RequestMethod.POST, CommonResult.responseList())
142
-                .groupName("登录鉴权AUTH")
143
-                .select()
144
-                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
145
-                .apis(RequestHandlerSelectors.basePackage("vip.xiaonuo.auth"))
146
-                .paths(PathSelectors.any())
147
-                .build().extensions(openApiExtensionResolver.buildExtensions("登录鉴权AUTH"));
148
-    }
149
-}

+ 0 - 67
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/core/util/AuthExceptionUtil.java

@@ -1,67 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.core.util;
14
-
15
-import cn.dev33.satoken.context.SaHolder;
16
-import cn.dev33.satoken.exception.*;
17
-import cn.hutool.http.HttpStatus;
18
-import lombok.extern.slf4j.Slf4j;
19
-import vip.xiaonuo.common.pojo.CommonResult;
20
-import vip.xiaonuo.common.util.CommonServletUtil;
21
-
22
-@Slf4j
23
-public class AuthExceptionUtil {
24
-
25
-    /**
26
-     * 根据错误类型获取对应的CommonResult(只处理SaToken相关异常)
27
-     *
28
-     * @author xuyuxiang
29
-     * @date 2021/10/11 15:52
30
-     **/
31
-    public static CommonResult<String> getCommonResult(Exception e) {
32
-        CommonResult<String> commonResult;
33
-        if (e instanceof NotLoginException) {
34
-
35
-            // 如果是未登录异常 401
36
-            NotLoginException notLoginException = (NotLoginException) e;
37
-            commonResult = CommonResult.get(HttpStatus.HTTP_UNAUTHORIZED, notLoginException.getMessage(), null);
38
-        } else if (e instanceof NotRoleException) {
39
-
40
-            // 如果是角色异常 403
41
-            NotRoleException notRoleException = (NotRoleException) e;
42
-            commonResult = CommonResult.get(HttpStatus.HTTP_FORBIDDEN, "无此角色:" + notRoleException.getRole() +
43
-                    ",接口地址:" + CommonServletUtil.getRequest().getServletPath(), null);
44
-        } else if (e instanceof NotPermissionException) {
45
-
46
-            // 如果是权限异常 403
47
-            NotPermissionException notPermissionException = (NotPermissionException) e;
48
-            commonResult = CommonResult.get(HttpStatus.HTTP_FORBIDDEN, "无此权限:" + notPermissionException.getPermission(), null);
49
-        } else if (e instanceof DisableServiceException) {
50
-
51
-            // 如果是被封禁异常 403
52
-            DisableServiceException disableServiceException = (DisableServiceException) e;
53
-            commonResult = CommonResult.get(HttpStatus.HTTP_FORBIDDEN, "账号被封禁:" + disableServiceException.getDisableTime() + "秒后解封", null);
54
-        } else if (e instanceof SaTokenException) {
55
-
56
-            // 如果是SaToken异常 直接返回
57
-            SaTokenException saTokenException = (SaTokenException) e;
58
-            commonResult = CommonResult.error(saTokenException.getMessage());
59
-        } else {
60
-            // 未知异常才打印
61
-            log.error(">>> 服务器未知异常,请求地址:{},具体信息:", CommonServletUtil.getRequest().getRequestURL(), e);
62
-            // 未知异常返回服务器异常(此处不可能执行进入,因为本方法处理的一定是SaToken的异常,此处仅为安全性考虑)
63
-            commonResult = CommonResult.error();
64
-        }
65
-        return commonResult;
66
-    }
67
-}

+ 0 - 133
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/controller/AuthClientController.java

@@ -1,133 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.controller;
14
-
15
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
16
-import com.github.xiaoymin.knife4j.annotations.ApiSupport;
17
-import io.swagger.annotations.Api;
18
-import io.swagger.annotations.ApiOperation;
19
-import org.springframework.validation.annotation.Validated;
20
-import org.springframework.web.bind.annotation.GetMapping;
21
-import org.springframework.web.bind.annotation.PostMapping;
22
-import org.springframework.web.bind.annotation.RequestBody;
23
-import org.springframework.web.bind.annotation.RestController;
24
-import vip.xiaonuo.auth.core.annotation.SaClientCheckLogin;
25
-import vip.xiaonuo.auth.core.enums.SaClientTypeEnum;
26
-import vip.xiaonuo.auth.core.pojo.SaBaseClientLoginUser;
27
-import vip.xiaonuo.auth.core.util.StpClientUtil;
28
-import vip.xiaonuo.auth.modular.login.param.AuthAccountPasswordLoginParam;
29
-import vip.xiaonuo.auth.modular.login.param.AuthGetPhoneValidCodeParam;
30
-import vip.xiaonuo.auth.modular.login.param.AuthPhoneValidCodeLoginParam;
31
-import vip.xiaonuo.auth.modular.login.result.AuthPicValidCodeResult;
32
-import vip.xiaonuo.auth.modular.login.service.AuthService;
33
-import vip.xiaonuo.common.pojo.CommonResult;
34
-
35
-import javax.annotation.Resource;
36
-import javax.validation.Valid;
37
-
38
-/**
39
- * C端登录控制器
40
- *
41
- * @author xuyuxiang
42
- * @date 2021/12/23 21:50
43
- */
44
-@Api(tags = "C端登录控制器")
45
-@ApiSupport(author = "SNOWY_TEAM", order = 1)
46
-@RestController
47
-@Validated
48
-public class AuthClientController {
49
-
50
-    @Resource
51
-    private AuthService authService;
52
-
53
-    /**
54
-     * C端获取图片验证码
55
-     *
56
-     * @author xuyuxiang
57
-     * @date 2022/7/8 9:26
58
-     **/
59
-    @ApiOperationSupport(order = 1)
60
-    @ApiOperation("C端获取图片验证码")
61
-    @GetMapping("/auth/c/getPicCaptcha")
62
-    public CommonResult<AuthPicValidCodeResult> getPicCaptcha() {
63
-        return CommonResult.data(authService.getPicCaptcha(SaClientTypeEnum.C.getValue()));
64
-    }
65
-
66
-    /**
67
-     * C端获取手机验证码
68
-     *
69
-     * @author xuyuxiang
70
-     * @date 2022/7/8 9:26
71
-     **/
72
-    @ApiOperationSupport(order = 2)
73
-    @ApiOperation("C端获取手机验证码")
74
-    @GetMapping("/auth/c/getPhoneValidCode")
75
-    public CommonResult<String> getPhoneValidCode(@Valid AuthGetPhoneValidCodeParam authGetPhoneValidCodeParam) {
76
-        return CommonResult.data(authService.getPhoneValidCode(authGetPhoneValidCodeParam, SaClientTypeEnum.C.getValue()));
77
-    }
78
-
79
-    /**
80
-     * C端账号密码登录
81
-     *
82
-     * @author xuyuxiang
83
-     * @date 2021/10/15 13:12
84
-     **/
85
-    @ApiOperationSupport(order = 3)
86
-    @ApiOperation("C端账号密码登录")
87
-    @PostMapping("/auth/c/doLogin")
88
-    public CommonResult<String> doLogin(@RequestBody @Valid AuthAccountPasswordLoginParam authAccountPasswordLoginParam) {
89
-        return CommonResult.data(authService.doLogin(authAccountPasswordLoginParam, SaClientTypeEnum.C.getValue()));
90
-    }
91
-
92
-    /**
93
-     * C端手机验证码登录
94
-     *
95
-     * @author xuyuxiang
96
-     * @date 2021/10/15 13:12
97
-     **/
98
-    @ApiOperationSupport(order = 4)
99
-    @ApiOperation("C端手机验证码登录")
100
-    @PostMapping("/auth/c/doLoginByPhone")
101
-    public CommonResult<String> doLoginByPhone(@RequestBody @Valid AuthPhoneValidCodeLoginParam authPhoneValidCodeLoginParam) {
102
-        return CommonResult.data(authService.doLoginByPhone(authPhoneValidCodeLoginParam, SaClientTypeEnum.C.getValue()));
103
-    }
104
-
105
-    /**
106
-     * C端退出
107
-     *
108
-     * @author xuyuxiang
109
-     * @date 2021/10/15 13:12
110
-     **/
111
-    @ApiOperationSupport(order = 5)
112
-    @ApiOperation("C端退出")
113
-    @SaClientCheckLogin
114
-    @GetMapping("/auth/c/doLogout")
115
-    public CommonResult<String> doLogout() {
116
-        StpClientUtil.logout();
117
-        return CommonResult.ok();
118
-    }
119
-
120
-    /**
121
-     * C端获取用户信息
122
-     *
123
-     * @author xuyuxiang
124
-     * @date 2021/10/15 13:12
125
-     **/
126
-    @ApiOperationSupport(order = 6)
127
-    @ApiOperation("C端获取用户信息")
128
-    @SaClientCheckLogin
129
-    @GetMapping("/auth/c/getLoginUser")
130
-    public CommonResult<SaBaseClientLoginUser> getLoginUser() {
131
-        return CommonResult.data(authService.getClientLoginUser());
132
-    }
133
-}

+ 0 - 133
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/controller/AuthController.java

@@ -1,133 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.controller;
14
-
15
-import cn.dev33.satoken.annotation.SaCheckLogin;
16
-import cn.dev33.satoken.stp.StpUtil;
17
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
18
-import com.github.xiaoymin.knife4j.annotations.ApiSupport;
19
-import io.swagger.annotations.Api;
20
-import io.swagger.annotations.ApiOperation;
21
-import org.springframework.validation.annotation.Validated;
22
-import org.springframework.web.bind.annotation.GetMapping;
23
-import org.springframework.web.bind.annotation.PostMapping;
24
-import org.springframework.web.bind.annotation.RequestBody;
25
-import org.springframework.web.bind.annotation.RestController;
26
-import vip.xiaonuo.auth.core.enums.SaClientTypeEnum;
27
-import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
28
-import vip.xiaonuo.auth.modular.login.param.AuthAccountPasswordLoginParam;
29
-import vip.xiaonuo.auth.modular.login.param.AuthGetPhoneValidCodeParam;
30
-import vip.xiaonuo.auth.modular.login.param.AuthPhoneValidCodeLoginParam;
31
-import vip.xiaonuo.auth.modular.login.result.AuthPicValidCodeResult;
32
-import vip.xiaonuo.auth.modular.login.service.AuthService;
33
-import vip.xiaonuo.common.pojo.CommonResult;
34
-
35
-import javax.annotation.Resource;
36
-import javax.validation.Valid;
37
-
38
-/**
39
- * B端登录控制器
40
- *
41
- * @author xuyuxiang
42
- * @date 2021/12/23 21:50
43
- */
44
-@Api(tags = "B端登录控制器")
45
-@ApiSupport(author = "SNOWY_TEAM", order = 2)
46
-@RestController
47
-@Validated
48
-public class AuthController {
49
-
50
-    @Resource
51
-    private AuthService authService;
52
-
53
-    /**
54
-     * B端获取图片验证码
55
-     *
56
-     * @author xuyuxiang
57
-     * @date 2022/7/8 9:26
58
-     **/
59
-    @ApiOperationSupport(order = 1)
60
-    @ApiOperation("B端获取图片验证码")
61
-    @GetMapping("/auth/b/getPicCaptcha")
62
-    public CommonResult<AuthPicValidCodeResult> getPicCaptcha() {
63
-        return CommonResult.data(authService.getPicCaptcha(SaClientTypeEnum.B.getValue()));
64
-    }
65
-
66
-    /**
67
-     * B端获取手机验证码
68
-     *
69
-     * @author xuyuxiang
70
-     * @date 2022/7/8 9:26
71
-     **/
72
-    @ApiOperationSupport(order = 2)
73
-    @ApiOperation("B端获取手机验证码")
74
-    @GetMapping("/auth/b/getPhoneValidCode")
75
-    public CommonResult<String> getPhoneValidCode(@Valid AuthGetPhoneValidCodeParam authGetPhoneValidCodeParam) {
76
-        return CommonResult.data(authService.getPhoneValidCode(authGetPhoneValidCodeParam, SaClientTypeEnum.B.getValue()));
77
-    }
78
-
79
-    /**
80
-     * B端账号密码登录
81
-     *
82
-     * @author xuyuxiang
83
-     * @date 2021/10/15 13:12
84
-     **/
85
-    @ApiOperationSupport(order = 3)
86
-    @ApiOperation("B端账号密码登录")
87
-    @PostMapping("/auth/b/doLogin")
88
-    public CommonResult<String> doLogin(@RequestBody @Valid AuthAccountPasswordLoginParam authAccountPasswordLoginParam) {
89
-        return CommonResult.data(authService.doLogin(authAccountPasswordLoginParam, SaClientTypeEnum.B.getValue()));
90
-    }
91
-
92
-    /**
93
-     * B端手机验证码登录
94
-     *
95
-     * @author xuyuxiang
96
-     * @date 2021/10/15 13:12
97
-     **/
98
-    @ApiOperationSupport(order = 4)
99
-    @ApiOperation("B端手机验证码登录")
100
-    @PostMapping("/auth/b/doLoginByPhone")
101
-    public CommonResult<String> doLoginByPhone(@RequestBody @Valid AuthPhoneValidCodeLoginParam authPhoneValidCodeLoginParam) {
102
-        return CommonResult.data(authService.doLoginByPhone(authPhoneValidCodeLoginParam, SaClientTypeEnum.B.getValue()));
103
-    }
104
-
105
-    /**
106
-     * B端退出
107
-     *
108
-     * @author xuyuxiang
109
-     * @date 2021/10/15 13:12
110
-     **/
111
-    @ApiOperationSupport(order = 5)
112
-    @ApiOperation("B端退出")
113
-    @SaCheckLogin
114
-    @GetMapping("/auth/b/doLogout")
115
-    public CommonResult<String> doLogout() {
116
-        StpUtil.logout();
117
-        return CommonResult.ok();
118
-    }
119
-
120
-    /**
121
-     * B端获取用户信息
122
-     *
123
-     * @author xuyuxiang
124
-     * @date 2021/10/15 13:12
125
-     **/
126
-    @ApiOperationSupport(order = 6)
127
-    @ApiOperation("B端获取用户信息")
128
-    @SaCheckLogin
129
-    @GetMapping("/auth/b/getLoginUser")
130
-    public CommonResult<SaBaseLoginUser> getLoginUser() {
131
-        return CommonResult.data(authService.getLoginUser());
132
-    }
133
-}

+ 0 - 54
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/enums/AuthDeviceTypeEnum.java

@@ -1,54 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.enums;
14
-
15
-import lombok.Getter;
16
-import vip.xiaonuo.common.exception.CommonException;
17
-
18
-/**
19
- * 登录设备类型枚举
20
- *
21
- * @author xuyuxiang
22
- * @date 2021/10/11 14:02
23
- **/
24
-@Getter
25
-public enum AuthDeviceTypeEnum {
26
-
27
-    /**
28
-     * PC端
29
-     */
30
-    PC("PC"),
31
-
32
-    /**
33
-     * 移动端
34
-     */
35
-    APP("APP"),
36
-
37
-    /**
38
-     * 小程序端
39
-     */
40
-    MINI("MINI");
41
-
42
-    private final String value;
43
-
44
-    AuthDeviceTypeEnum(String value) {
45
-        this.value = value;
46
-    }
47
-
48
-    public static void validate(String value) {
49
-        boolean flag = PC.getValue().equals(value) || APP.getValue().equals(value) || MINI.getValue().equals(value);
50
-        if(!flag) {
51
-            throw new CommonException("不支持的登录设备类型:{}", value);
52
-        }
53
-    }
54
-}

+ 0 - 86
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/enums/AuthExceptionEnum.java

@@ -1,86 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.enums;
14
-
15
-import lombok.Getter;
16
-
17
-/**
18
- * 登录异常提示语枚举
19
- *
20
- * @author xuyuxiang
21
- * @date 2021/10/11 14:02
22
- **/
23
-@Getter
24
-public enum AuthExceptionEnum {
25
-
26
-    /**
27
-     * 验证码不能为空
28
-     */
29
-    VALID_CODE_EMPTY("验证码不能为空"),
30
-
31
-    /**
32
-     * 验证码请求号不能为空
33
-     */
34
-    VALID_CODE_REQ_NO_EMPTY("验证码请求号不能为空"),
35
-
36
-    /**
37
-     * 验证码错误
38
-     */
39
-    VALID_CODE_ERROR("验证码错误"),
40
-
41
-    /**
42
-     * 账号错误
43
-     */
44
-    ACCOUNT_ERROR("账号错误"),
45
-
46
-    /**
47
-     * 账号已停用
48
-     */
49
-    ACCOUNT_DISABLED("账号已停用"),
50
-
51
-    /**
52
-     * 密码错误
53
-     */
54
-    PWD_ERROR("密码错误"),
55
-
56
-    /**
57
-     * 手机号格式错误
58
-     */
59
-    PHONE_FORMAT_ERROR("手机号格式错误"),
60
-
61
-    /**
62
-     * 手机号不存在
63
-     */
64
-    PHONE_ERROR("手机号不存在"),
65
-
66
-    /**
67
-     * 客户端类型不能为空
68
-     */
69
-    CLIENT_TYPE_EMPTY("客户端类型不能为空"),
70
-
71
-    /**
72
-     * 客户端类型错误
73
-     */
74
-    CLIENT_TYPE_ERROR("客户端类型错误"),
75
-
76
-    /**
77
-     * 密码解密失败,请检查前端公钥
78
-     */
79
-    PWD_DECRYPT_ERROR("密码解密失败,请检查前端公钥");
80
-
81
-    private final String value;
82
-
83
-    AuthExceptionEnum(String value) {
84
-        this.value = value;
85
-    }
86
-}

+ 0 - 118
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/listener/AuthListener.java

@@ -1,118 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.listener;
14
-
15
-import cn.dev33.satoken.listener.SaTokenListener;
16
-import cn.dev33.satoken.stp.SaLoginModel;
17
-import cn.hutool.core.convert.Convert;
18
-import cn.hutool.core.util.ObjectUtil;
19
-import org.springframework.stereotype.Component;
20
-import vip.xiaonuo.auth.api.SaBaseLoginUserApi;
21
-import vip.xiaonuo.auth.core.enums.SaClientTypeEnum;
22
-import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
23
-import vip.xiaonuo.dev.api.DevLogApi;
24
-
25
-import javax.annotation.Resource;
26
-
27
-/**
28
- * 自定义登录监听器
29
- *
30
- * @author xuyuxiang
31
- * @date 2021/12/28 11:35
32
- **/
33
-@Component
34
-public class AuthListener implements SaTokenListener {
35
-
36
-    @Resource(name = "loginUserApi")
37
-    private SaBaseLoginUserApi loginUserApi;
38
-
39
-    @Resource(name = "clientLoginUserApi")
40
-    private SaBaseLoginUserApi clientLoginUserApi;
41
-
42
-    @Resource
43
-    private DevLogApi devLogApi;
44
-
45
-    /** 每次登录时触发 */
46
-    @Override
47
-    public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel)  {
48
-        // 更新用户的登录时间和登录ip等信息
49
-        if(SaClientTypeEnum.B.getValue().equals(loginType)) {
50
-            loginUserApi.updateUserLoginInfo(Convert.toStr(loginId), loginModel.getDevice());
51
-            // 记录B端登录日志
52
-            Object name = loginModel.getExtra("name");
53
-            if(ObjectUtil.isNotEmpty(name)) {
54
-                devLogApi.executeLoginLog(Convert.toStr(name));
55
-            } else {
56
-                devLogApi.executeLoginLog(null);
57
-            }
58
-        } else {
59
-            clientLoginUserApi.updateUserLoginInfo(Convert.toStr(loginId), loginModel.getDevice());
60
-        }
61
-    }
62
-
63
-    /** 每次注销时触发 */
64
-    @Override
65
-    public void doLogout(String loginType, Object loginId, String tokenValue) {
66
-        if(SaClientTypeEnum.B.getValue().equals(loginType)) {
67
-            // 记录B端登出日志
68
-            SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserById(Convert.toStr(loginId));
69
-            if(ObjectUtil.isNotEmpty(saBaseLoginUser)) {
70
-                devLogApi.executeLogoutLog(saBaseLoginUser.getName());
71
-            } else {
72
-                devLogApi.executeLogoutLog(null);
73
-            }
74
-        }
75
-    }
76
-
77
-    /** 每次被踢下线时触发 */
78
-    @Override
79
-    public void doKickout(String loginType, Object loginId, String tokenValue) {
80
-        // ...
81
-    }
82
-
83
-    /** 每次被顶下线时触发 */
84
-    @Override
85
-    public void doReplaced(String loginType, Object loginId, String tokenValue) {
86
-        // ...
87
-    }
88
-
89
-    /** 每次被封禁时触发 */
90
-    @Override
91
-    public void doDisable(String loginType, Object loginId, String service, int level, long disableTime) {
92
-        // ...
93
-    }
94
-
95
-    /** 每次被解封时触发 */
96
-    @Override
97
-    public void doUntieDisable(String loginType, Object loginId, String service) {
98
-        // ...
99
-    }
100
-
101
-    /** 每次创建Session时触发 */
102
-    @Override
103
-    public void doCreateSession(String id) {
104
-        // ...
105
-    }
106
-
107
-    /** 每次注销Session时触发 */
108
-    @Override
109
-    public void doLogoutSession(String id) {
110
-        // ...
111
-    }
112
-
113
-    /** 每次Token续期时触发 */
114
-    @Override
115
-    public void doRenewTimeout(String tokenValue, Object loginId, long timeout) {
116
-        // ...
117
-    }
118
-}

+ 0 - 52
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/param/AuthAccountPasswordLoginParam.java

@@ -1,52 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.param;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-import javax.validation.constraints.NotBlank;
20
-
21
-/**
22
- * 账号密码登录参数
23
- *
24
- * @author xuyuxiang
25
- * @date 2022/7/7 16:46
26
- **/
27
-@Getter
28
-@Setter
29
-public class AuthAccountPasswordLoginParam {
30
-
31
-    /** 账号 */
32
-    @ApiModelProperty(value = "账号", required = true, position = 1)
33
-    @NotBlank(message = "账号不能为空")
34
-    private String account;
35
-
36
-    /** 密码 */
37
-    @ApiModelProperty(value = "密码", required = true, position = 2)
38
-    @NotBlank(message = "密码不能为空")
39
-    private String password;
40
-
41
-    /** 设备 */
42
-    @ApiModelProperty(value = "设备", position = 3)
43
-    private String device;
44
-
45
-    /** 验证码 */
46
-    @ApiModelProperty(value = "验证码", position = 4)
47
-    private String validCode;
48
-
49
-    /** 验证码请求号 */
50
-    @ApiModelProperty(value = "验证码请求号", position = 5)
51
-    private String validCodeReqNo;
52
-}

+ 0 - 45
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/param/AuthGetPhoneValidCodeParam.java

@@ -1,45 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.param;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-import javax.validation.constraints.NotBlank;
20
-
21
-/**
22
- * 获取手机验证码参数
23
- *
24
- * @author xuyuxiang
25
- * @date 2022/8/25 13:45
26
- **/
27
-@Getter
28
-@Setter
29
-public class AuthGetPhoneValidCodeParam {
30
-
31
-    /** 手机号 */
32
-    @ApiModelProperty(value = "手机号", required = true, position = 1)
33
-    @NotBlank(message = "手机号不能为空")
34
-    private String phone;
35
-
36
-    /** 验证码 */
37
-    @ApiModelProperty(value = "验证码", required = true, position = 2)
38
-    @NotBlank(message = "验证码不能为空")
39
-    private String validCode;
40
-
41
-    /** 验证码请求号 */
42
-    @ApiModelProperty(value = "验证码请求号", required = true, position = 3)
43
-    @NotBlank(message = "验证码请求号不能为空")
44
-    private String validCodeReqNo;
45
-}

+ 0 - 49
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/param/AuthPhoneValidCodeLoginParam.java

@@ -1,49 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.param;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-import javax.validation.constraints.NotBlank;
20
-
21
-/**
22
- * 手机验证码登录参数
23
- *
24
- * @author xuyuxiang
25
- * @date 2022/7/7 16:46
26
- **/
27
-@Getter
28
-@Setter
29
-public class AuthPhoneValidCodeLoginParam {
30
-
31
-    /** 手机号 */
32
-    @ApiModelProperty(value = "手机号", required = true, position = 1)
33
-    @NotBlank(message = "手机号不能为空")
34
-    private String phone;
35
-
36
-    /** 验证码 */
37
-    @ApiModelProperty(value = "验证码", required = true, position = 2)
38
-    @NotBlank(message = "验证码不能为空")
39
-    private String validCode;
40
-
41
-    /** 验证码请求号 */
42
-    @ApiModelProperty(value = "验证码请求号", required = true, position = 3)
43
-    @NotBlank(message = "验证码请求号不能为空")
44
-    private String validCodeReqNo;
45
-
46
-    /** 设备 */
47
-    @ApiModelProperty(value = "设备", position = 4)
48
-    private String device;
49
-}

+ 0 - 36
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/result/AuthPicValidCodeResult.java

@@ -1,36 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.result;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-/**
20
- * 图片验证码结果
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/7/8 9:28
24
- **/
25
-@Getter
26
-@Setter
27
-public class AuthPicValidCodeResult {
28
-
29
-    /** 验证码图片,Base64 */
30
-    @ApiModelProperty(value = "验证码图片,Base64", position = 1)
31
-    private String validCodeBase64;
32
-
33
-    /** 验证码请求号 */
34
-    @ApiModelProperty(value = "验证码请求号", position = 2)
35
-    private String validCodeReqNo;
36
-}

+ 0 - 85
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/AuthService.java

@@ -1,85 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.service;
14
-
15
-import vip.xiaonuo.auth.core.pojo.SaBaseClientLoginUser;
16
-import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
17
-import vip.xiaonuo.auth.modular.login.param.AuthAccountPasswordLoginParam;
18
-import vip.xiaonuo.auth.modular.login.param.AuthGetPhoneValidCodeParam;
19
-import vip.xiaonuo.auth.modular.login.param.AuthPhoneValidCodeLoginParam;
20
-import vip.xiaonuo.auth.modular.login.result.AuthPicValidCodeResult;
21
-
22
-/**
23
- * 登录Service接口
24
- *
25
- * @author xuyuxiang
26
- * @date 2021/12/23 21:51
27
- */
28
-public interface AuthService {
29
-
30
-    /**
31
-     * 获取图片验证码
32
-     *
33
-     * @author xuyuxiang
34
-     * @date 2021/12/28 14:46
35
-     **/
36
-    AuthPicValidCodeResult getPicCaptcha(String type);
37
-
38
-    /**
39
-     * 获取手机验证码
40
-     *
41
-     * @author xuyuxiang
42
-     * @date 2021/12/28 14:46
43
-     **/
44
-    String getPhoneValidCode(AuthGetPhoneValidCodeParam authGetPhoneValidCodeParam, String type);
45
-
46
-    /**
47
-     * 账号密码登录
48
-     *
49
-     * @author xuyuxiang
50
-     * @date 2021/12/28 14:46
51
-     **/
52
-    String doLogin(AuthAccountPasswordLoginParam authAccountPasswordLoginParam, String type);
53
-
54
-    /**
55
-     * 手机验证码登录
56
-     *
57
-     * @author xuyuxiang
58
-     * @date 2021/12/28 14:46
59
-     **/
60
-    String doLoginByPhone(AuthPhoneValidCodeLoginParam authPhoneValidCodeLoginParam, String type);
61
-
62
-    /**
63
-     * 获取B端登录用户信息
64
-     *
65
-     * @author xuyuxiang
66
-     * @date 2021/10/12 15:59
67
-     **/
68
-    SaBaseLoginUser getLoginUser();
69
-
70
-    /**
71
-     * 获取C端登录用户信息
72
-     *
73
-     * @author xuyuxiang
74
-     * @date 2021/10/12 15:59
75
-     **/
76
-    SaBaseClientLoginUser getClientLoginUser();
77
-
78
-    /**
79
-     * 根据用户id和客户端类型登录,用于第三方登录
80
-     *
81
-     * @author xuyuxiang
82
-     * @date 2022/7/9 14:44
83
-     */
84
-    String doLoginById(String userId, String device, String type);
85
-}

+ 0 - 472
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java

@@ -1,472 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.login.service.impl;
14
-
15
-import cn.dev33.satoken.stp.SaLoginModel;
16
-import cn.dev33.satoken.stp.StpUtil;
17
-import cn.hutool.captcha.CaptchaUtil;
18
-import cn.hutool.captcha.CircleCaptcha;
19
-import cn.hutool.core.collection.CollectionUtil;
20
-import cn.hutool.core.convert.Convert;
21
-import cn.hutool.core.util.ObjectUtil;
22
-import cn.hutool.core.util.PhoneUtil;
23
-import cn.hutool.core.util.RandomUtil;
24
-import cn.hutool.core.util.StrUtil;
25
-import cn.hutool.json.JSONObject;
26
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
27
-import org.springframework.stereotype.Service;
28
-import vip.xiaonuo.auth.api.SaBaseLoginUserApi;
29
-import vip.xiaonuo.auth.core.enums.SaClientTypeEnum;
30
-import vip.xiaonuo.auth.core.pojo.SaBaseClientLoginUser;
31
-import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
32
-import vip.xiaonuo.auth.core.util.StpClientLoginUserUtil;
33
-import vip.xiaonuo.auth.core.util.StpClientUtil;
34
-import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
35
-import vip.xiaonuo.auth.modular.login.enums.AuthDeviceTypeEnum;
36
-import vip.xiaonuo.auth.modular.login.enums.AuthExceptionEnum;
37
-import vip.xiaonuo.auth.modular.login.param.AuthAccountPasswordLoginParam;
38
-import vip.xiaonuo.auth.modular.login.param.AuthGetPhoneValidCodeParam;
39
-import vip.xiaonuo.auth.modular.login.param.AuthPhoneValidCodeLoginParam;
40
-import vip.xiaonuo.auth.modular.login.result.AuthPicValidCodeResult;
41
-import vip.xiaonuo.auth.modular.login.service.AuthService;
42
-import vip.xiaonuo.common.cache.CommonCacheOperator;
43
-import vip.xiaonuo.common.exception.CommonException;
44
-import vip.xiaonuo.common.util.CommonCryptogramUtil;
45
-import vip.xiaonuo.common.util.CommonEmailUtil;
46
-import vip.xiaonuo.dev.api.DevConfigApi;
47
-import vip.xiaonuo.dev.api.DevSmsApi;
48
-
49
-import javax.annotation.Resource;
50
-import java.util.List;
51
-import java.util.stream.Collectors;
52
-
53
-/**
54
- * 登录Service接口实现类
55
- *
56
- * @author xuyuxiang
57
- * @date 2021/12/23 21:52
58
- */
59
-@Service
60
-public class AuthServiceImpl implements AuthService {
61
-
62
-    private static final String SNOWY_SYS_DEFAULT_CAPTCHA_OPEN_KEY = "SNOWY_SYS_DEFAULT_CAPTCHA_OPEN";
63
-
64
-    private static final String AUTH_VALID_CODE_CACHE_KEY = "auth-validCode:";
65
-
66
-    private static final String LOGIN_ERROR_TIMES_KEY_PREFIX = "login-error-times:";
67
-
68
-    @Resource(name = "loginUserApi")
69
-    private SaBaseLoginUserApi loginUserApi;
70
-
71
-    @Resource(name = "clientLoginUserApi")
72
-    private SaBaseLoginUserApi clientLoginUserApi;
73
-
74
-    @Resource
75
-    private DevConfigApi devConfigApi;
76
-
77
-    @Resource
78
-    private DevSmsApi devSmsApi;
79
-
80
-    @Resource
81
-    private CommonCacheOperator commonCacheOperator;
82
-
83
-    @Override
84
-    public AuthPicValidCodeResult getPicCaptcha(String type) {
85
-        // 生成验证码,随机4位字符
86
-        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(100, 38, 4, 10);
87
-        // 定义返回结果
88
-        AuthPicValidCodeResult authPicValidCodeResult = new AuthPicValidCodeResult();
89
-        // 获取验证码的值
90
-        String validCode = circleCaptcha.getCode();
91
-        // 获取验证码的base64
92
-        String validCodeBase64 = circleCaptcha.getImageBase64Data();
93
-        // 生成请求号
94
-        String validCodeReqNo = IdWorker.getIdStr();
95
-        // 将base64返回前端
96
-        authPicValidCodeResult.setValidCodeBase64(validCodeBase64);
97
-        // 将请求号返回前端
98
-        authPicValidCodeResult.setValidCodeReqNo(validCodeReqNo);
99
-        // 将请求号作为key,验证码的值作为value放到redis,用于校验,5分钟有效
100
-        commonCacheOperator.put(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo, validCode, 5 * 60);
101
-        return authPicValidCodeResult;
102
-    }
103
-
104
-    @Override
105
-    public String getPhoneValidCode(AuthGetPhoneValidCodeParam authGetPhoneValidCodeParam, String type) {
106
-        // 手机号
107
-        String phone = authGetPhoneValidCodeParam.getPhone();
108
-        // 验证码
109
-        String validCode = authGetPhoneValidCodeParam.getValidCode();
110
-        // 验证码请求号
111
-        String validCodeReqNo = authGetPhoneValidCodeParam.getValidCodeReqNo();
112
-        // 校验参数
113
-        validPhoneValidCodeParam(null, validCode, validCodeReqNo, type);
114
-        // 生成手机验证码的值,随机6为数字
115
-        String phoneValidCode = RandomUtil.randomNumbers(6);
116
-        // 生成手机验证码的请求号
117
-        String phoneValidCodeReqNo = IdWorker.getIdStr();
118
-
119
-        // TODO 使用阿里云执行发送验证码,将验证码作为短信内容的参数变量放入,
120
-        // TODO 签名不传则使用系统默认配置的签名,支持传入多个参数,示例:{"name":"张三","number":"15038****76"}
121
-        //devSmsApi.sendSmsAliyun(phone, null, "验证码模板号", JSONUtil.toJsonStr(JSONUtil.createObj().set("validCode", phoneValidCode)));
122
-
123
-        // TODO 使用腾讯云执行发送验证码,将验证码作为短信内容的参数变量放入,
124
-        // TODO sdkAppId和签名不传则使用系统默认配置的sdkAppId和签名,支持传入多个参数,逗号拼接,示例:"张三,15038****76,进行中"
125
-        devSmsApi.sendSmsTencent("sdkAppId", phone, "签名", "模板编码", phoneValidCode);
126
-
127
-        // 将请求号作为key,验证码的值作为value放到redis,用于校验,5分钟有效
128
-        commonCacheOperator.put(AUTH_VALID_CODE_CACHE_KEY + phone + StrUtil.UNDERLINE + phoneValidCodeReqNo, phoneValidCode, 5 * 60);
129
-        // 返回请求号
130
-        return phoneValidCodeReqNo;
131
-    }
132
-
133
-    /**
134
-     * 校验验证码方法
135
-     *
136
-     * @author xuyuxiang
137
-     * @date 2022/8/25 15:26
138
-     **/
139
-    private void validValidCode(String phoneOrEmail, String validCode, String validCodeReqNo) {
140
-        // 依据请求号,取出缓存中的验证码进行校验
141
-        Object existValidCode;
142
-        if(ObjectUtil.isEmpty(phoneOrEmail)) {
143
-            existValidCode = commonCacheOperator.get(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo);
144
-        } else {
145
-            existValidCode = commonCacheOperator.get(AUTH_VALID_CODE_CACHE_KEY + phoneOrEmail + StrUtil.UNDERLINE + validCodeReqNo);
146
-        }
147
-        // 为空则直接验证码错误
148
-        if(ObjectUtil.isEmpty(existValidCode)) {
149
-            throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue());
150
-        }
151
-        // 移除该验证码
152
-        if(ObjectUtil.isEmpty(phoneOrEmail)) {
153
-            commonCacheOperator.remove(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo);
154
-        } else {
155
-            commonCacheOperator.remove(AUTH_VALID_CODE_CACHE_KEY + phoneOrEmail + StrUtil.UNDERLINE + validCodeReqNo);
156
-        }
157
-        // 不一致则直接验证码错误
158
-        if (!validCode.equals(Convert.toStr(existValidCode).toLowerCase())) {
159
-            throw new CommonException("验证码错误");
160
-        }
161
-    }
162
-
163
-    /**
164
-     * 校验手机号与验证码等参数
165
-     *
166
-     * @author xuyuxiang
167
-     * @date 2022/8/25 14:29
168
-     **/
169
-    private void validPhoneValidCodeParam(String phoneOrEmail, String validCode, String validCodeReqNo, String type) {
170
-        // 验证码正确则校验手机号格式
171
-        if(ObjectUtil.isEmpty(phoneOrEmail)) {
172
-            // 执行校验验证码
173
-            validValidCode(null, validCode, validCodeReqNo);
174
-        } else {
175
-            if(!PhoneUtil.isMobile(phoneOrEmail) && !CommonEmailUtil.isEmail(phoneOrEmail)) {
176
-                throw new CommonException(AuthExceptionEnum.PHONE_FORMAT_ERROR.getValue());
177
-            }
178
-            // 执行校验验证码
179
-            validValidCode(phoneOrEmail, validCode, validCodeReqNo);
180
-
181
-            // 根据手机号获取用户信息,判断用户是否存在,根据B端或C端判断
182
-            if(SaClientTypeEnum.B.getValue().equals(type)) {
183
-                if(ObjectUtil.isEmpty(loginUserApi.getUserByPhone(phoneOrEmail))) {
184
-                    throw new CommonException(AuthExceptionEnum.PHONE_ERROR.getValue());
185
-                }
186
-            } else {
187
-                if(ObjectUtil.isEmpty(clientLoginUserApi.getClientUserByPhone(phoneOrEmail))) {
188
-                    throw new CommonException(AuthExceptionEnum.PHONE_ERROR.getValue());
189
-                }
190
-            }
191
-        }
192
-    }
193
-
194
-    @Override
195
-    public String doLogin(AuthAccountPasswordLoginParam authAccountPasswordLoginParam, String type) {
196
-        // 判断账号是否被封禁
197
-        isDisableTime(authAccountPasswordLoginParam.getAccount());
198
-        // 获取账号
199
-        String account = authAccountPasswordLoginParam.getAccount();
200
-        // 获取密码
201
-        String password = authAccountPasswordLoginParam.getPassword();
202
-        // 获取设备
203
-        String device = authAccountPasswordLoginParam.getDevice();
204
-        // 默认指定为PC,如在小程序跟移动端的情况下,自行指定即可
205
-        if(ObjectUtil.isEmpty(device)) {
206
-            device = AuthDeviceTypeEnum.PC.getValue();
207
-        } else {
208
-            AuthDeviceTypeEnum.validate(device);
209
-        }
210
-        // 校验验证码
211
-        String defaultCaptchaOpen = devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_CAPTCHA_OPEN_KEY);
212
-        if(ObjectUtil.isNotEmpty(defaultCaptchaOpen)) {
213
-            if(Convert.toBool(defaultCaptchaOpen)) {
214
-                // 获取验证码
215
-                String validCode = authAccountPasswordLoginParam.getValidCode();
216
-                // 获取验证码请求号
217
-                String validCodeReqNo = authAccountPasswordLoginParam.getValidCodeReqNo();
218
-                // 开启验证码则必须传入验证码
219
-                if(ObjectUtil.isEmpty(validCode)) {
220
-                    throw new CommonException(AuthExceptionEnum.VALID_CODE_EMPTY.getValue());
221
-                }
222
-                // 开启验证码则必须传入验证码请求号
223
-                if(ObjectUtil.isEmpty(validCodeReqNo)) {
224
-                    throw new CommonException(AuthExceptionEnum.VALID_CODE_REQ_NO_EMPTY.getValue());
225
-                }
226
-                // 执行校验验证码
227
-                validValidCode(null, validCode, validCodeReqNo);
228
-            }
229
-        }
230
-        // SM2解密并获得前端传来的密码哈希值
231
-        String passwordHash;
232
-        try {
233
-            // 解密,并做哈希值
234
-            passwordHash = CommonCryptogramUtil.doHashValue(CommonCryptogramUtil.doSm2Decrypt(password));
235
-        } catch (Exception e) {
236
-            throw new CommonException(AuthExceptionEnum.PWD_DECRYPT_ERROR.getValue());
237
-        }
238
-        // 根据账号获取用户信息,根据B端或C端判断
239
-        if(SaClientTypeEnum.B.getValue().equals(type)) {
240
-            SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByAccount(account);
241
-            if(ObjectUtil.isEmpty(saBaseLoginUser)) {
242
-                throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
243
-            }
244
-            if (!saBaseLoginUser.getPassword().equals(passwordHash)) {
245
-                // 记录登录次数 和 过期时间
246
-                saveLoginTimes(account);
247
-                throw new CommonException(AuthExceptionEnum.PWD_ERROR.getValue());
248
-            }
249
-            // 删除redis 中的key
250
-            clearLoginErrorTimes(account);
251
-            // 执行B端登录
252
-            return execLoginB(saBaseLoginUser, device);
253
-        } else {
254
-            SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserByAccount(account);
255
-            if(ObjectUtil.isEmpty(saBaseClientLoginUser)) {
256
-                throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
257
-            }
258
-            if (!saBaseClientLoginUser.getPassword().equals(passwordHash)) {
259
-                throw new CommonException(AuthExceptionEnum.PWD_ERROR.getValue());
260
-            }
261
-            // 执行C端登录
262
-            return execLoginC(saBaseClientLoginUser, device);
263
-        }
264
-    }
265
-
266
-    @Override
267
-    public String doLoginByPhone(AuthPhoneValidCodeLoginParam authPhoneValidCodeLoginParam, String type) {
268
-        // 手机号
269
-        String phone = authPhoneValidCodeLoginParam.getPhone();
270
-        // 校验参数
271
-        validPhoneValidCodeParam(phone, authPhoneValidCodeLoginParam.getValidCode(), authPhoneValidCodeLoginParam.getValidCodeReqNo(), type);
272
-        // 设备
273
-        String device = authPhoneValidCodeLoginParam.getDevice();
274
-        // 默认指定为PC,如在小程序跟移动端的情况下,自行指定即可
275
-        if(ObjectUtil.isEmpty(device)) {
276
-            device = AuthDeviceTypeEnum.PC.getValue();
277
-        } else {
278
-            AuthDeviceTypeEnum.validate(device);
279
-        }
280
-        // 根据手机号获取用户信息,根据B端或C端判断
281
-        if(SaClientTypeEnum.B.getValue().equals(type)) {
282
-            SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByPhone(phone);
283
-            if(ObjectUtil.isEmpty(saBaseLoginUser)) {
284
-                throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
285
-            }
286
-            // 执行B端登录
287
-            return execLoginB(saBaseLoginUser, device);
288
-        } else {
289
-            SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserByPhone(phone);
290
-            if(ObjectUtil.isEmpty(saBaseClientLoginUser)) {
291
-                throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
292
-            }
293
-            // 执行C端登录
294
-            return execLoginC(saBaseClientLoginUser, device);
295
-        }
296
-    }
297
-
298
-    /**
299
-     * 是否封禁状态
300
-     * 如果被封禁了,执行以下逻辑,返回前端还需等待的时间
301
-     */
302
-    private void isDisableTime(String userAccount) {
303
-        // disableTime = -2表示未被封禁
304
-        long disableTime = StpUtil.getDisableTime(userAccount);
305
-        if (disableTime > 0) {
306
-            if (disableTime > 60) {
307
-                throw new CommonException(userAccount + "账号已被封禁, 请再"+ disableTime/60+ "分钟后重新尝试登录!!");
308
-            }
309
-            throw new CommonException(userAccount + "账号已被封禁, 请再"+ disableTime+ "秒后重新尝试登录!!");
310
-        }
311
-    }
312
-
313
-    // redis中保存登录错误次数
314
-    private void saveLoginTimes(String userAccount){
315
-        String loginErrorKey = LOGIN_ERROR_TIMES_KEY_PREFIX + userAccount;
316
-        Integer number = (Integer) commonCacheOperator.get(loginErrorKey);
317
-        if (number == null) {
318
-            // 如果redis中没有保存,代表失败第一次
319
-            number = 2;
320
-            commonCacheOperator.put(loginErrorKey, number,5 * 60);
321
-            return;
322
-        }
323
-        if (number < 5) {
324
-            number++;
325
-            commonCacheOperator.put(loginErrorKey, number,5 * 60);
326
-            return;
327
-        }
328
-        // 第五次封禁账号,第六次进入isDisableTime方法,返回用户还需等待时间
329
-        StpUtil.disable(userAccount, 5 * 60);
330
-        // 删除redis 中的key
331
-        clearLoginErrorTimes(userAccount);
332
-
333
-    }
334
-
335
-    /**
336
-     * 登录成功、清空登录次数
337
-     * @param userAccount 账号
338
-     */
339
-    private void clearLoginErrorTimes(String userAccount) {
340
-        String loginErrorKey = LOGIN_ERROR_TIMES_KEY_PREFIX + userAccount;
341
-        // 删除redis中的key
342
-        commonCacheOperator.remove(loginErrorKey);
343
-    }
344
-
345
-    /**
346
-     * 执行B端登录
347
-     *
348
-     * @author xuyuxiang
349
-     * @date 2022/8/25 14:36
350
-     **/
351
-    private String execLoginB(SaBaseLoginUser saBaseLoginUser, String device) {
352
-        // 校验状态
353
-        if(!saBaseLoginUser.getEnabled()) {
354
-            throw new CommonException(AuthExceptionEnum.ACCOUNT_DISABLED.getValue());
355
-        }
356
-        // 执行登录
357
-        StpUtil.login(saBaseLoginUser.getId(), new SaLoginModel().setDevice(device).setExtra("name", saBaseLoginUser.getName()));
358
-        // 角色集合
359
-        List<JSONObject> roleList = loginUserApi.getRoleListByUserId(saBaseLoginUser.getId());
360
-        // 角色id集合
361
-        List<String> roleIdList = roleList.stream().map(jsonObject -> jsonObject.getStr("id")).collect(Collectors.toList());
362
-        // 角色码集合
363
-        List<String> roleCodeList = roleList.stream().map(jsonObject -> jsonObject.getStr("code")).collect(Collectors.toList());
364
-        // 角色id和用户id集合
365
-        List<String> userAndRoleIdList = CollectionUtil.unionAll(roleIdList, CollectionUtil.newArrayList(saBaseLoginUser.getId()));
366
-        // 获取按钮码
367
-        saBaseLoginUser.setButtonCodeList(loginUserApi.getButtonCodeListListByUserAndRoleIdList(userAndRoleIdList));
368
-        // 获取移动端按钮码
369
-        saBaseLoginUser.setMobileButtonCodeList(loginUserApi.getMobileButtonCodeListListByUserIdAndRoleIdList(userAndRoleIdList));
370
-        // 获取数据范围
371
-        saBaseLoginUser.setDataScopeList(Convert.toList(SaBaseLoginUser.DataScope.class,
372
-                loginUserApi.getPermissionListByUserIdAndRoleIdList(userAndRoleIdList, saBaseLoginUser.getOrgId())));
373
-        // 获取权限码
374
-        saBaseLoginUser.setPermissionCodeList(saBaseLoginUser.getDataScopeList().stream()
375
-                .map(SaBaseLoginUser.DataScope::getApiUrl).collect(Collectors.toList()));
376
-        // 获取角色码
377
-        saBaseLoginUser.setRoleCodeList(roleCodeList);
378
-        // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
379
-        StpUtil.getTokenSession().set("loginUser", saBaseLoginUser);
380
-        // 返回token
381
-        return StpUtil.getTokenInfo().tokenValue;
382
-    }
383
-
384
-    /**
385
-     * 执行C端登录
386
-     *
387
-     * @author xuyuxiang
388
-     * @date 2022/8/25 14:37
389
-     **/
390
-    private String execLoginC(SaBaseClientLoginUser saBaseClientLoginUser, String device) {
391
-        // 校验状态
392
-        if(!saBaseClientLoginUser.getEnabled()) {
393
-            throw new CommonException(AuthExceptionEnum.ACCOUNT_DISABLED.getValue());
394
-        }
395
-        // 执行登录
396
-        StpClientUtil.login(saBaseClientLoginUser.getId(), new SaLoginModel().setDevice(device).setExtra("name", saBaseClientLoginUser.getName()));
397
-        // 角色集合
398
-        List<JSONObject> roleList = loginUserApi.getRoleListByUserId(saBaseClientLoginUser.getId());
399
-        // 角色id集合
400
-        List<String> roleIdList = roleList.stream().map(jsonObject -> jsonObject.getStr("id")).collect(Collectors.toList());
401
-        // 角色码集合
402
-        List<String> roleCodeList = roleList.stream().map(jsonObject -> jsonObject.getStr("code")).collect(Collectors.toList());
403
-        // 角色id和用户id集合
404
-        List<String> userAndRoleIdList = CollectionUtil.unionAll(roleIdList, CollectionUtil.newArrayList(saBaseClientLoginUser.getId()));
405
-        // 获取按钮码
406
-        saBaseClientLoginUser.setButtonCodeList(clientLoginUserApi.getButtonCodeListListByUserAndRoleIdList(userAndRoleIdList));
407
-        // 获取移动端按钮码
408
-        saBaseClientLoginUser.setMobileButtonCodeList(clientLoginUserApi.getMobileButtonCodeListListByUserIdAndRoleIdList(userAndRoleIdList));
409
-        // 获取数据范围
410
-        saBaseClientLoginUser.setDataScopeList(Convert.toList(SaBaseClientLoginUser.DataScope.class,
411
-                clientLoginUserApi.getPermissionListByUserIdAndRoleIdList(userAndRoleIdList, null)));
412
-        // 获取权限码
413
-        saBaseClientLoginUser.setPermissionCodeList(saBaseClientLoginUser.getDataScopeList().stream()
414
-                .map(SaBaseClientLoginUser.DataScope::getApiUrl).collect(Collectors.toList()));
415
-        // 获取角色码
416
-        saBaseClientLoginUser.setRoleCodeList(roleCodeList);
417
-        // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
418
-        StpClientUtil.getTokenSession().set("loginUser", saBaseClientLoginUser);
419
-        // 返回token
420
-        return StpClientUtil.getTokenInfo().tokenValue;
421
-    }
422
-
423
-    /**
424
-     * 获取B端登录用户信息
425
-     *
426
-     * @author xuyuxiang
427
-     * @date 2021/10/12 15:59
428
-     **/
429
-    @Override
430
-    public SaBaseLoginUser getLoginUser() {
431
-        SaBaseLoginUser saBaseLoginUser = StpLoginUserUtil.getLoginUser();
432
-        saBaseLoginUser.setPassword(null);
433
-        saBaseLoginUser.setPermissionCodeList(null);
434
-        saBaseLoginUser.setDataScopeList(null);
435
-        return saBaseLoginUser;
436
-    }
437
-
438
-    /**
439
-     * 获取C端登录用户信息
440
-     *
441
-     * @author xuyuxiang
442
-     * @date 2021/10/12 15:59
443
-     **/
444
-    @Override
445
-    public SaBaseClientLoginUser getClientLoginUser() {
446
-        SaBaseClientLoginUser saBaseClientLoginUser = StpClientLoginUserUtil.getClientLoginUser();
447
-        saBaseClientLoginUser.setPassword(null);
448
-        saBaseClientLoginUser.setPermissionCodeList(null);
449
-        saBaseClientLoginUser.setDataScopeList(null);
450
-        return saBaseClientLoginUser;
451
-    }
452
-
453
-    @Override
454
-    public String doLoginById(String userId, String device, String type) {
455
-        // 根据id获取用户信息,根据B端或C端判断
456
-        if(SaClientTypeEnum.B.getValue().equals(type)) {
457
-            SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserById(userId);
458
-            if (ObjectUtil.isEmpty(saBaseLoginUser)) {
459
-                throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
460
-            }
461
-            // 执行B端登录
462
-            return execLoginB(saBaseLoginUser, device);
463
-        } else {
464
-            SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserById(userId);
465
-            if (ObjectUtil.isEmpty(saBaseClientLoginUser)) {
466
-                throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
467
-            }
468
-            // 执行C端登录
469
-            return execLoginC(saBaseClientLoginUser, device);
470
-        }
471
-    }
472
-}

+ 0 - 156
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/controller/AuthSessionController.java

@@ -1,156 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.controller;
14
-
15
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
16
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
17
-import com.github.xiaoymin.knife4j.annotations.ApiSupport;
18
-import io.swagger.annotations.Api;
19
-import io.swagger.annotations.ApiOperation;
20
-import org.springframework.validation.annotation.Validated;
21
-import org.springframework.web.bind.annotation.GetMapping;
22
-import org.springframework.web.bind.annotation.PostMapping;
23
-import org.springframework.web.bind.annotation.RequestBody;
24
-import org.springframework.web.bind.annotation.RestController;
25
-import vip.xiaonuo.auth.modular.monitor.param.AuthExitSessionParam;
26
-import vip.xiaonuo.auth.modular.monitor.param.AuthExitTokenParam;
27
-import vip.xiaonuo.auth.modular.monitor.param.AuthSessionPageParam;
28
-import vip.xiaonuo.auth.modular.monitor.result.AuthSessionAnalysisResult;
29
-import vip.xiaonuo.auth.modular.monitor.result.AuthSessionPageResult;
30
-import vip.xiaonuo.auth.modular.monitor.service.AuthSessionService;
31
-import vip.xiaonuo.common.annotation.CommonLog;
32
-import vip.xiaonuo.common.pojo.CommonResult;
33
-import vip.xiaonuo.common.pojo.CommonValidList;
34
-
35
-import javax.annotation.Resource;
36
-import javax.validation.Valid;
37
-import javax.validation.constraints.NotEmpty;
38
-
39
-/**
40
- * 会话治理控制器
41
- *
42
- * @author xuyuxiang
43
- * @date 2022/6/24 15:20
44
- **/
45
-@Api(tags = "会话治理控制器")
46
-@ApiSupport(author = "SNOWY_TEAM", order = 3)
47
-@RestController
48
-@Validated
49
-public class AuthSessionController {
50
-
51
-    @Resource
52
-    private AuthSessionService authSessionService;
53
-
54
-    /**
55
-     * 会话统计
56
-     *
57
-     * @author xuyuxiang
58
-     * @date 2022/6/24 22:28
59
-     */
60
-    @ApiOperationSupport(order = 1)
61
-    @ApiOperation("会话统计")
62
-    @GetMapping("/auth/session/analysis")
63
-    public CommonResult<AuthSessionAnalysisResult> analysis() {
64
-        return CommonResult.data(authSessionService.analysis());
65
-    }
66
-
67
-    /**
68
-     * 查询B端会话
69
-     *
70
-     * @author xuyuxiang
71
-     * @date 2022/6/24 22:28
72
-     */
73
-    @ApiOperationSupport(order = 2)
74
-    @ApiOperation("查询B端会话")
75
-    @GetMapping("/auth/session/b/page")
76
-    public CommonResult<Page<AuthSessionPageResult>> pageForB(AuthSessionPageParam authSessionPageParam) {
77
-        return CommonResult.data(authSessionService.pageForB(authSessionPageParam));
78
-    }
79
-
80
-    /**
81
-     * 查询C端会话
82
-     *
83
-     * @author xuyuxiang
84
-     * @date 2022/6/24 22:28
85
-     */
86
-    @ApiOperationSupport(order = 3)
87
-    @ApiOperation("查询C端会话")
88
-    @GetMapping("/auth/session/c/page")
89
-    public CommonResult<Page<AuthSessionPageResult>> pageForC(AuthSessionPageParam authSessionPageParam) {
90
-        return CommonResult.data(authSessionService.pageForC(authSessionPageParam));
91
-    }
92
-
93
-    /**
94
-     * 强退B端会话
95
-     *
96
-     * @author xuyuxiang
97
-     * @date 2021/10/12 10:25
98
-     **/
99
-    @ApiOperationSupport(order = 4)
100
-    @ApiOperation("强退B端会话")
101
-    @CommonLog("强退B端会话")
102
-    @PostMapping("/auth/session/b/exit")
103
-    public CommonResult<String> exitSessionForB(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
104
-                                                            CommonValidList<AuthExitSessionParam> authExitSessionParamList) {
105
-        authSessionService.exitSessionForB(authExitSessionParamList);
106
-        return CommonResult.ok();
107
-    }
108
-
109
-    /**
110
-     * 强退C端会话
111
-     *
112
-     * @author xuyuxiang
113
-     * @date 2021/10/12 10:25
114
-     **/
115
-    @ApiOperationSupport(order = 5)
116
-    @ApiOperation("强退C端会话")
117
-    @CommonLog("强退C端会话")
118
-    @PostMapping("/auth/session/c/exit")
119
-    public CommonResult<String> exitSessionForC(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
120
-                                                            CommonValidList<AuthExitSessionParam> authExitSessionParamList) {
121
-        authSessionService.exitSessionForC(authExitSessionParamList);
122
-        return CommonResult.ok();
123
-    }
124
-
125
-    /**
126
-     * 强退B端token
127
-     *
128
-     * @author xuyuxiang
129
-     * @date 2021/10/12 10:25
130
-     **/
131
-    @ApiOperationSupport(order = 6)
132
-    @ApiOperation("强退B端token")
133
-    @CommonLog("强退B端token")
134
-    @PostMapping("/auth/token/b/exit")
135
-    public CommonResult<String> exitTokenForB(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
136
-                                                            CommonValidList<AuthExitTokenParam> authExitTokenParamList) {
137
-        authSessionService.exitTokenForB(authExitTokenParamList);
138
-        return CommonResult.ok();
139
-    }
140
-
141
-    /**
142
-     * 强退C端token
143
-     *
144
-     * @author xuyuxiang
145
-     * @date 2021/10/12 10:25
146
-     **/
147
-    @ApiOperationSupport(order = 7)
148
-    @ApiOperation("强退C端token")
149
-    @CommonLog("强退C端token")
150
-    @PostMapping("/auth/token/c/exit")
151
-    public CommonResult<String> exitTokenForC(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
152
-                                                            CommonValidList<AuthExitTokenParam> authExitTokenParamList) {
153
-        authSessionService.exitTokenForC(authExitTokenParamList);
154
-        return CommonResult.ok();
155
-    }
156
-}

+ 0 - 35
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/param/AuthExitSessionParam.java

@@ -1,35 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.param;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-import javax.validation.constraints.NotBlank;
20
-
21
-/**
22
- * Session退出参数
23
- *
24
- * @author xuyuxiang
25
- * @date 2022/6/24 22:28
26
- */
27
-@Getter
28
-@Setter
29
-public class AuthExitSessionParam {
30
-
31
-    /** 用户id */
32
-    @ApiModelProperty(value = "用户id", required = true)
33
-    @NotBlank(message = "userId不能为空")
34
-    private String userId;
35
-}

+ 0 - 35
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/param/AuthExitTokenParam.java

@@ -1,35 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.param;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-import javax.validation.constraints.NotBlank;
20
-
21
-/**
22
- * Token退出参数
23
- *
24
- * @author xuyuxiang
25
- * @date 2022/6/24 22:28
26
- */
27
-@Getter
28
-@Setter
29
-public class AuthExitTokenParam {
30
-
31
-    /** token值 */
32
-    @ApiModelProperty(value = "token值", required = true)
33
-    @NotBlank(message = "tokenValue不能为空")
34
-    private String tokenValue;
35
-}

+ 0 - 32
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/param/AuthSessionPageParam.java

@@ -1,32 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.param;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-/**
20
- * 会话查询参数
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/7/28 14:48
24
- **/
25
-@Getter
26
-@Setter
27
-public class AuthSessionPageParam {
28
-
29
-    /** 用户id */
30
-    @ApiModelProperty(value = "用户id")
31
-    private String userId;
32
-}

+ 0 - 44
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/result/AuthSessionAnalysisResult.java

@@ -1,44 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.result;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-/**
20
- * 会话统计结果
21
- *
22
- * @author xuyuxiang
23
- * @date 2022/7/19 9:29
24
- **/
25
-@Getter
26
-@Setter
27
-public class AuthSessionAnalysisResult {
28
-
29
-    /** 当前会话总数量 */
30
-    @ApiModelProperty(value = "当前会话总数量", position = 1)
31
-    private String currentSessionTotalCount;
32
-
33
-    /** 最大签发令牌数 */
34
-    @ApiModelProperty(value = "最大签发令牌数", position = 2)
35
-    private String maxTokenCount;
36
-
37
-    /** 最近1小时会话数 */
38
-    @ApiModelProperty(value = "最近1小时会话数", position = 3)
39
-    private String oneHourNewlyAdded;
40
-
41
-    /** BC端会话比例 */
42
-    @ApiModelProperty(value = "BC端会话比例", position = 4)
43
-    private String proportionOfBAndC;
44
-}

+ 0 - 126
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/result/AuthSessionPageResult.java

@@ -1,126 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.result;
14
-
15
-import io.swagger.annotations.ApiModelProperty;
16
-import lombok.Getter;
17
-import lombok.Setter;
18
-
19
-import java.util.Date;
20
-import java.util.List;
21
-
22
-/**
23
- * B端会话结果集
24
- *
25
- * @author xuyuxiang
26
- * @date 2022/7/28 14:46
27
- **/
28
-@Getter
29
-@Setter
30
-public class AuthSessionPageResult {
31
-
32
-    /** id */
33
-    @ApiModelProperty(value = "id", position = 1)
34
-    private String id;
35
-
36
-    /** 头像 */
37
-    @ApiModelProperty(value = "头像", position = 2)
38
-    private String avatar;
39
-
40
-    /** 账号 */
41
-    @ApiModelProperty(value = "账号", position = 3)
42
-    private String account;
43
-
44
-    /** 姓名 */
45
-    @ApiModelProperty(value = "姓名", position = 4)
46
-    private String name;
47
-
48
-    /** 上次登录ip */
49
-    @ApiModelProperty(value = "上次登录ip", position = 5)
50
-    private String lastLoginIp;
51
-
52
-    /** 上次登录地点 */
53
-    @ApiModelProperty(value = "上次登录地点", position = 6)
54
-    private String lastLoginAddress;
55
-
56
-    /** 上次登录时间 */
57
-    @ApiModelProperty(value = "上次登录时间", position = 7)
58
-    private Date lastLoginTime;
59
-
60
-    /** 上次登录设备 */
61
-    @ApiModelProperty(value = "上次登录设备", position = 8)
62
-    private String lastLoginDevice;
63
-
64
-    /** 最新登录ip */
65
-    @ApiModelProperty(value = "最新登录ip", position = 9)
66
-    private String latestLoginIp;
67
-
68
-    /** 最新登录地点 */
69
-    @ApiModelProperty(value = "最新登录地点", position = 10)
70
-    private String latestLoginAddress;
71
-
72
-    /** 最新登录时间 */
73
-    @ApiModelProperty(value = "最新登录时间", position = 11)
74
-    private Date latestLoginTime;
75
-
76
-    /** 最新登录设备 */
77
-    @ApiModelProperty(value = "最新登录设备", position = 12)
78
-    private String latestLoginDevice;
79
-
80
-    /** 会话id */
81
-    @ApiModelProperty(value = "会话id", position = 13)
82
-    private String sessionId;
83
-
84
-    /** 会话创建时间 */
85
-    @ApiModelProperty(value = "会话创建时间", position = 14)
86
-    private Date sessionCreateTime;
87
-
88
-    /** 会话剩余有效期 */
89
-    @ApiModelProperty(value = "会话剩余有效期", position = 15)
90
-    private String sessionTimeout;
91
-
92
-    /** 令牌数量 */
93
-    @ApiModelProperty(value = "令牌数量", position = 16)
94
-    private Integer tokenCount;
95
-
96
-    /** 令牌信息集合 */
97
-    @ApiModelProperty(value = "令牌信息集合", position = 17)
98
-    private List<TokenSignInfo> tokenSignList;
99
-
100
-    /**
101
-     * 令牌信息类
102
-     *
103
-     * @author xuyuxiang
104
-     * @date 2022/7/28 15:04
105
-     **/
106
-    @Getter
107
-    @Setter
108
-    public static class TokenSignInfo {
109
-
110
-        /** token值 */
111
-        @ApiModelProperty(value = "token值", position = 1)
112
-        private String tokenValue;
113
-
114
-        /** 登录设备 */
115
-        @ApiModelProperty(value = "登录设备", position = 2)
116
-        private String tokenDevice;
117
-
118
-        /** token剩余有效期 */
119
-        @ApiModelProperty(value = "token剩余有效期", position = 3)
120
-        private String tokenTimeout;
121
-
122
-        /** token剩余有效期百分比 */
123
-        @ApiModelProperty(value = "token剩余有效期百分比", position = 4)
124
-        private Double tokenTimeoutPercent;
125
-    }
126
-}

+ 0 - 87
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/service/AuthSessionService.java

@@ -1,87 +0,0 @@
1
-/*
2
- * Copyright [2022] [https://www.xiaonuo.vip]
3
- *
4
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
5
- *
6
- * 1.请不要删除和修改根目录下的LICENSE文件。
7
- * 2.请不要删除和修改Snowy源码头部的版权声明。
8
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
9
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
10
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
11
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
12
- */
13
-package vip.xiaonuo.auth.modular.monitor.service;
14
-
15
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
16
-import vip.xiaonuo.auth.modular.monitor.param.AuthExitSessionParam;
17
-import vip.xiaonuo.auth.modular.monitor.param.AuthExitTokenParam;
18
-import vip.xiaonuo.auth.modular.monitor.param.AuthSessionPageParam;
19
-import vip.xiaonuo.auth.modular.monitor.result.AuthSessionAnalysisResult;
20
-import vip.xiaonuo.auth.modular.monitor.result.AuthSessionPageResult;
21
-
22
-import java.util.List;
23
-
24
-/**
25
- * 会话治理Service接口
26
- *
27
- * @author xuyuxiang
28
- * @date 2022/6/24 15:46S
29
- **/
30
-public interface AuthSessionService {
31
-
32
-    /**
33
-     * 会话统计
34
-     *
35
-     * @author xuyuxiang
36
-     * @date 2022/7/19 9:33
37
-     **/
38
-    AuthSessionAnalysisResult analysis();
39
-
40
-    /**
41
-     * 查询B端会话
42
-     *
43
-     * @author xuyuxiang
44
-     * @date 2022/6/24 22:30
45
-     */
46
-    Page<AuthSessionPageResult> pageForB(AuthSessionPageParam authSessionPageParam);
47
-
48
-    /**
49
-     * 查询C端会话
50
-     *
51
-     * @author xuyuxiang
52
-     * @date 2022/6/24 22:30
53
-     */
54
-    Page<AuthSessionPageResult> pageForC(AuthSessionPageParam authSessionPageParam);
55
-
56
-    /**
57
-     * 强退B端会话
58
-     *
59
-     * @author xuyuxiang
60
-     * @date 2022/6/29 21:47
61
-     */
62
-    void exitSessionForB(List<AuthExitSessionParam> authExitSessionParamList);
63
-
64
-    /**
65
-     * 强退C端会话
66
-     *
67
-     * @author xuyuxiang
68
-     * @date 2022/6/29 21:47
69
-     */
70
-    void exitSessionForC(List<AuthExitSessionParam> authExitSessionParamList);
71
-
72
-    /**
73
-     * 强退B端token
74
-     *
75
-     * @author xuyuxiang
76
-     * @date 2022/6/29 21:47
77
-     */
78
-    void exitTokenForB(List<AuthExitTokenParam> authExitTokenParamList);
79
-
80
-    /**
81
-     * 强退C端token
82
-     *
83
-     * @author xuyuxiang
84
-     * @date 2022/6/29 21:47
85
-     */
86
-    void exitTokenForC(List<AuthExitTokenParam> authExitTokenParamList);
87
-}

+ 0 - 0
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/monitor/service/impl/AuthSessionServiceImpl.java


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä