Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cms-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
cms-ci-test
Commits
00fdc6ce
提交
00fdc6ce
authored
5月 16, 2023
作者:
zhenjie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
用户登录注册相关
上级
d80538b2
隐藏空白字符变更
内嵌
并排
正在显示
34 个修改的文件
包含
1389 行增加
和
17 行删除
+1389
-17
.gitignore
.gitignore
+9
-0
README.md
README.md
+2
-0
pom.xml
cms-common/cms-common-model/pom.xml
+32
-0
AppUserSucVO.java
...rc/main/java/com/mmc/iuav/user/model/vo/AppUserSucVO.java
+22
-1
WxLoginVO.java
...l/src/main/java/com/mmc/iuav/user/model/vo/WxLoginVO.java
+25
-1
pom.xml
cms-common/cms-common-util/pom.xml
+46
-0
JwtConstant.java
...mon-util/src/main/java/com/mmc/iuav/auth/JwtConstant.java
+9
-0
JwtUtil.java
...-common-util/src/main/java/com/mmc/iuav/auth/JwtUtil.java
+47
-0
CodeUtil.java
...mon-util/src/main/java/com/mmc/iuav/general/CodeUtil.java
+20
-0
HttpsRequestUtil.java
...til/src/main/java/com/mmc/iuav/http/HttpsRequestUtil.java
+224
-0
BaseErrorInfoInterface.java
...in/java/com/mmc/iuav/response/BaseErrorInfoInterface.java
+13
-0
ResultBody.java
...-util/src/main/java/com/mmc/iuav/response/ResultBody.java
+145
-1
ResultEnum.java
...-util/src/main/java/com/mmc/iuav/response/ResultEnum.java
+38
-3
pom.xml
cms-common/pom.xml
+6
-0
pom.xml
csm-service/cms-service-user/pom.xml
+85
-0
UserApplication.java
...user/src/main/java/com/mmc/iuav/user/UserApplication.java
+7
-0
Knife4jConfiguration.java
...n/java/com/mmc/iuav/user/config/Knife4jConfiguration.java
+37
-0
UserSystemConstant.java
...n/java/com/mmc/iuav/user/constant/UserSystemConstant.java
+23
-0
WxConstant.java
.../src/main/java/com/mmc/iuav/user/constant/WxConstant.java
+12
-1
AuthController.java
...ain/java/com/mmc/iuav/user/controller/AuthController.java
+26
-2
UserAccountController.java
...a/com/mmc/iuav/user/controller/UserAccountController.java
+16
-0
UserServiceDao.java
...r/src/main/java/com/mmc/iuav/user/dao/UserServiceDao.java
+16
-0
UserAccountDO.java
...src/main/java/com/mmc/iuav/user/entity/UserAccountDO.java
+30
-1
AuthService.java
.../src/main/java/com/mmc/iuav/user/service/AuthService.java
+9
-0
UserAccountService.java
...in/java/com/mmc/iuav/user/service/UserAccountService.java
+14
-0
WxService.java
...er/src/main/java/com/mmc/iuav/user/service/WxService.java
+15
-0
AuthServiceImpl.java
.../java/com/mmc/iuav/user/service/impl/AuthServiceImpl.java
+85
-1
UserAccountServiceImpl.java
...om/mmc/iuav/user/service/impl/UserAccountServiceImpl.java
+22
-1
WxServiceImpl.java
...in/java/com/mmc/iuav/user/service/impl/WxServiceImpl.java
+28
-1
application-dev.yml
...e/cms-service-user/src/main/resources/application-dev.yml
+65
-0
application.yml
...rvice/cms-service-user/src/main/resources/application.yml
+19
-0
UserServiceDao.xml
...ms-service-user/src/main/resources/map/UserServiceDao.xml
+42
-0
pom.xml
csm-service/pom.xml
+5
-1
pom.xml
pom.xml
+195
-3
没有找到文件。
.gitignore
浏览文件 @
00fdc6ce
# Created by .ignore support plugin (hsz.mobi)
target
*.class
.project
.classpath
.prefs
.settings
.idea
*.iml
*/application.yml
README.md
浏览文件 @
00fdc6ce
## 新云享飞-用户管理
\ No newline at end of file
cms-common/cms-common-model/pom.xml
浏览文件 @
00fdc6ce
...
...
@@ -8,8 +8,39 @@
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<version>
1.0-SNAPSHOT
</version>
<packaging>
jar
</packaging>
<artifactId>
cms-common-model
</artifactId>
<dependencies>
<!-- apache 提供的一些工具类 -->
<dependency>
<groupId>
commons-codec
</groupId>
<artifactId>
commons-codec
</artifactId>
</dependency>
<dependency>
<groupId>
commons-lang
</groupId>
<artifactId>
commons-lang
</artifactId>
<version>
2.6
</version>
</dependency>
<dependency>
<groupId>
org.hibernate.validator
</groupId>
<artifactId>
hibernate-validator
</artifactId>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-annotation
</artifactId>
</dependency>
<dependency>
<groupId>
com.mmc.iuav.cms
</groupId>
<artifactId>
cms-common-util
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/AppUserSucVO.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/5/16 15:17
*/
public
class
AppUserSucVO
{
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
AppUserSucVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7491711282161485720L
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"openId"
)
private
String
openId
;
@ApiModelProperty
(
value
=
"unionId"
)
private
String
unionId
;
@ApiModelProperty
(
value
=
"token"
)
private
String
token
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/WxLoginVO.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
;
import
com.mmc.iuav.group.Insert
;
import
com.mmc.iuav.group.Update
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/5/16 13:56
*/
public
class
WxLoginVO
{
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
(
value
=
"com.mmc.iuav.user.model.vo.WxLoginVO"
,
description
=
"登录参数"
)
public
class
WxLoginVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
2500957724470423989L
;
@ApiModelProperty
(
value
=
"请求code"
)
@NotNull
(
message
=
"code不能为空"
,
groups
=
{
Insert
.
class
})
private
String
code
;
@ApiModelProperty
(
value
=
"登录来源, 0小程序登录, 1pc登录"
,
example
=
"0"
,
allowableValues
=
"0,1"
)
@NotNull
(
message
=
"登录来源不能为空"
,
groups
=
{
Insert
.
class
})
private
Integer
fromPort
;
@ApiModelProperty
(
value
=
"用户来源:0自然流,1海报,2抖音,3公众号,4社群,5招投标,默认0"
,
example
=
"0"
,
required
=
true
)
private
Integer
source
;
}
cms-common/cms-common-util/pom.xml
浏览文件 @
00fdc6ce
...
...
@@ -8,8 +8,53 @@
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<version>
1.0-SNAPSHOT
</version>
<packaging>
jar
</packaging>
<artifactId>
cms-common-util
</artifactId>
<dependencies>
<!-- apache 提供的一些工具类 -->
<!-- <dependency>-->
<!-- <groupId>commons-codec</groupId>-->
<!-- <artifactId>commons-codec</artifactId>-->
<!-- <version>1.15</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>commons-lang</groupId>-->
<!-- <artifactId>commons-lang</artifactId>-->
<!-- <version>2.6</version>-->
<!-- </dependency>-->
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
<version>
4.5.2
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>
io.jsonwebtoken
</groupId>
<artifactId>
jjwt
</artifactId>
<version>
0.9.1
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.0
</version>
<configuration>
<target>
1.8
</target>
<source>
1.8
</source>
<encoding>
utf-8
</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
cms-common/cms-common-util/src/main/java/com/mmc/iuav/auth/JwtConstant.java
浏览文件 @
00fdc6ce
...
...
@@ -5,4 +5,13 @@ package com.mmc.iuav.auth;
* @Date: 2023/5/16 20:18
*/
public
interface
JwtConstant
{
public
final
static
String
BASE64KEY
=
"IUAV&&iuavhhh@20230516888888"
;
public
final
static
String
SUBJECT
=
"mmc_iuav888"
;
public
final
static
String
ISSUER
=
"mmc_uav"
;
public
final
static
long
EXPIRATION
=
1
*
24
*
60
*
60
*
1000L
;
public
final
static
String
TOKEN_TYPE
=
"TOKEN_TYPE"
;
public
final
static
String
M_TOKEN
=
"M_TOKEN"
;
//后台管理用户token
public
final
static
String
IUAV_TOKEN
=
"IUAV_TOKEN"
;
//小程序token
public
final
static
String
USER_ACCOUNT_ID
=
"USER_ACCOUNT_ID"
;
public
final
static
String
ROLE_ID
=
"ROLE_ID"
;
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/auth/JwtUtil.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
auth
;
import
com.mmc.iuav.general.CodeUtil
;
import
io.jsonwebtoken.Claims
;
import
io.jsonwebtoken.JwtBuilder
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.SignatureAlgorithm
;
import
javax.crypto.spec.SecretKeySpec
;
import
javax.xml.bind.DatatypeConverter
;
import
java.security.Key
;
import
java.util.Date
;
import
java.util.Map
;
/**
* @author: zj
* @Date: 2023/5/16 20:14
*/
public
class
JwtUtil
{
/**
* 根据map中的信息生成token, tokenId为随机生成码,有效时间为24h
*
* @param claims 封装到token中的map
* @return
*/
public
static
String
createJwt
(
Map
<
String
,
Object
>
claims
)
{
return
createJwt
(
claims
,
JwtConstant
.
EXPIRATION
);
}
public
static
String
createJwt
(
Map
<
String
,
Object
>
claims
,
long
expiration
)
{
SignatureAlgorithm
signatureAlgorithm
=
SignatureAlgorithm
.
HS256
;
byte
[]
apiKeySecretBytes
=
DatatypeConverter
.
parseBase64Binary
(
JwtConstant
.
BASE64KEY
);
Key
signingKey
=
new
SecretKeySpec
(
apiKeySecretBytes
,
signatureAlgorithm
.
getJcaName
());
long
nowMillis
=
System
.
currentTimeMillis
();
long
expMillis
=
nowMillis
+
expiration
;
Date
now
=
new
Date
(
nowMillis
);
Date
exp
=
new
Date
(
expMillis
);
JwtBuilder
builder
=
Jwts
.
builder
().
setClaims
(
claims
).
setId
(
CodeUtil
.
randomCode
(
6
)).
setIssuedAt
(
now
)
.
setSubject
(
JwtConstant
.
SUBJECT
).
setIssuer
(
JwtConstant
.
ISSUER
).
signWith
(
signatureAlgorithm
,
signingKey
)
.
setExpiration
(
exp
);
return
builder
.
compact
();
}
/**
* 解析前端传来的token,解析成功则返回Claims,解析失败返回null;解析成功后可通过claims获取信息
*
* @param jwt
* @return
*/
public
static
Claims
parseJwt
(
String
jwt
)
{
Claims
claims
=
Jwts
.
parser
().
setSigningKey
(
DatatypeConverter
.
parseBase64Binary
(
JwtConstant
.
BASE64KEY
))
.
parseClaimsJws
(
jwt
).
getBody
();
return
claims
;
}
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/general/CodeUtil.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
general
;
import
java.util.Random
;
/**
* @author: zj
* @Date: 2023/5/16 20:01
*/
public
class
CodeUtil
{
private
static
Random
random
=
new
Random
();
public
static
String
getRandomNum
(
int
length
)
{
StringBuffer
sb
=
new
StringBuffer
();
Random
random
=
new
Random
();
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
sb
.
append
(
String
.
valueOf
(
random
.
nextInt
(
10
)));
}
return
sb
.
toString
();
}
public
static
String
generateUserUID
()
{
return
CodeUtil
.
getRandomNum
(
9
);
}
public
static
String
randomCode
(
int
i
)
{
return
CodeUtil
.
getRandomNum
(
i
);
}
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/http/HttpsRequestUtil.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
http
;
import
com.sun.org.apache.xerces.internal.impl.dv.util.Base64
;
import
org.springframework.stereotype.Component
;
import
javax.net.ssl.*
;
import
java.io.*
;
import
java.net.ConnectException
;
import
java.net.URL
;
import
java.security.KeyManagementException
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.cert.CertificateException
;
import
java.security.cert.X509Certificate
;
import
java.util.Iterator
;
import
java.util.Map
;
/**
* @author: zj
* @Date: 2023/5/16 15:27
*/
@Component
public
class
HttpsRequestUtil
{
public
static
String
httpsRequest
(
String
url
,
String
method
,
Map
<
String
,
String
>
headerMap
,
String
bodyData
)
throws
Exception
{
HttpsURLConnection
conn
=
null
;
OutputStream
out
=
null
;
String
rsp
=
null
;
byte
[]
byteArray
=
bodyData
.
getBytes
(
"utf-8"
);
try
{
URL
uri
=
new
URL
(
url
);
conn
=
(
HttpsURLConnection
)
uri
.
openConnection
();
// 忽略证书验证--Begin
conn
.
setHostnameVerifier
(
new
TrustAnyHostnameVerifier
());
// 忽略证书验证--End
conn
.
setRequestMethod
(
method
);
conn
.
setDoInput
(
true
);
conn
.
setDoOutput
(
true
);
conn
.
setRequestProperty
(
"Host"
,
uri
.
getHost
());
conn
.
setRequestProperty
(
"Content-Type"
,
"application/json; charset=utf-8"
);
if
(
headerMap
!=
null
)
{
Iterator
<
Map
.
Entry
<
String
,
String
>>
it
=
headerMap
.
entrySet
().
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
<
String
,
String
>
entry
=
it
.
next
();
conn
.
setRequestProperty
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
out
=
conn
.
getOutputStream
();
out
.
write
(
byteArray
);
out
.
close
();
if
(
conn
.
getResponseCode
()
==
200
)
{
rsp
=
getStreamAsString
(
conn
.
getInputStream
(),
"utf-8"
);
}
else
{
rsp
=
getStreamAsString
(
conn
.
getErrorStream
(),
"utf-8"
);
}
}
catch
(
Exception
e
)
{
if
(
null
!=
out
)
{
out
.
close
();
}
e
.
printStackTrace
();
}
return
rsp
;
}
/**
* 获取小程序二维码
*
* @param url
* @param method
* @param headerMap
* @param bodyData
* @return
* @throws Exception
*/
public
static
String
getACodeBase64
(
String
url
,
String
method
,
Map
<
String
,
String
>
headerMap
,
String
bodyData
)
throws
Exception
{
HttpsURLConnection
conn
=
null
;
OutputStream
out
=
null
;
String
rsp
=
null
;
byte
[]
byteArray
=
bodyData
.
getBytes
(
"utf-8"
);
try
{
URL
uri
=
new
URL
(
url
);
conn
=
(
HttpsURLConnection
)
uri
.
openConnection
();
// 忽略证书验证--Begin
conn
.
setHostnameVerifier
(
new
TrustAnyHostnameVerifier
());
// 忽略证书验证--End
conn
.
setRequestMethod
(
method
);
conn
.
setDoInput
(
true
);
conn
.
setDoOutput
(
true
);
conn
.
setRequestProperty
(
"Host"
,
uri
.
getHost
());
conn
.
setRequestProperty
(
"Content-Type"
,
"application/json; charset=utf-8"
);
if
(
headerMap
!=
null
)
{
Iterator
<
Map
.
Entry
<
String
,
String
>>
it
=
headerMap
.
entrySet
().
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
<
String
,
String
>
entry
=
it
.
next
();
conn
.
setRequestProperty
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
out
=
conn
.
getOutputStream
();
out
.
write
(
byteArray
);
out
.
close
();
if
(
conn
.
getResponseCode
()
==
200
)
{
byte
[]
bytes
=
InputStreamToByte
(
conn
.
getInputStream
());
//rsp = Base64.encodeBase64String(bytes);
rsp
=
Base64
.
encode
(
bytes
);
}
else
{
rsp
=
getStreamAsString
(
conn
.
getErrorStream
(),
"utf-8"
);
}
}
catch
(
Exception
e
)
{
if
(
null
!=
out
)
{
out
.
close
();
}
e
.
printStackTrace
();
}
return
rsp
;
}
/**
* 输入流转字节流
*/
private
static
byte
[]
InputStreamToByte
(
InputStream
in
)
throws
IOException
{
ByteArrayOutputStream
bytestream
=
new
ByteArrayOutputStream
();
byte
[]
buffer
=
new
byte
[
1024
];
int
ch
;
while
((
ch
=
in
.
read
(
buffer
))
!=
-
1
)
{
bytestream
.
write
(
buffer
,
0
,
ch
);
}
byte
data
[]
=
bytestream
.
toByteArray
();
bytestream
.
close
();
return
data
;
}
private
static
String
getStreamAsString
(
InputStream
stream
,
String
charset
)
throws
IOException
{
try
{
Reader
reader
=
new
InputStreamReader
(
stream
,
charset
);
StringBuilder
response
=
new
StringBuilder
();
final
char
[]
buff
=
new
char
[
1024
];
int
read
=
0
;
while
((
read
=
reader
.
read
(
buff
))
>
0
)
{
response
.
append
(
buff
,
0
,
read
);
}
return
response
.
toString
();
}
finally
{
if
(
stream
!=
null
)
{
stream
.
close
();
}
}
}
/**
* HTTPS GET请求
*
* @param url
* @param headerMap
* @return
*/
public
static
String
httpsGet
(
String
url
,
Map
<
String
,
String
>
headerMap
)
{
String
str_return
=
""
;
HttpsURLConnection
conn
=
null
;
try
{
SSLContext
sc
=
SSLContext
.
getInstance
(
"SSL"
);
sc
.
init
(
null
,
new
TrustManager
[]{
new
TrustAnyTrustManager
()},
new
java
.
security
.
SecureRandom
());
URL
console
=
new
URL
(
url
);
conn
=
(
HttpsURLConnection
)
console
.
openConnection
();
conn
.
setRequestProperty
(
"Content-Type"
,
"application/json; charset=utf-8"
);
if
(
headerMap
!=
null
)
{
Iterator
<
Map
.
Entry
<
String
,
String
>>
it
=
headerMap
.
entrySet
().
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
<
String
,
String
>
entry
=
it
.
next
();
conn
.
setRequestProperty
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
conn
.
setSSLSocketFactory
(
sc
.
getSocketFactory
());
conn
.
setHostnameVerifier
(
new
TrustAnyHostnameVerifier
());
conn
.
connect
();
InputStream
is
=
conn
.
getInputStream
();
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
is
,
(
"ISO-8859-1"
)));
String
ret
=
""
;
while
(
ret
!=
null
)
{
ret
=
br
.
readLine
();
if
(
ret
!=
null
&&
!
ret
.
trim
().
equals
(
""
))
{
str_return
=
str_return
+
new
String
(
ret
.
getBytes
(
"ISO-8859-1"
),
"utf-8"
);
}
}
}
catch
(
ConnectException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
catch
(
KeyManagementException
e
)
{
e
.
printStackTrace
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
conn
.
disconnect
();
}
return
str_return
;
}
}
// 定制Verifier
class
TrustAnyHostnameVerifier
implements
HostnameVerifier
{
@Override
public
boolean
verify
(
String
hostname
,
SSLSession
session
)
{
return
true
;
}
}
class
TrustAnyTrustManager
implements
X509TrustManager
{
@Override
public
void
checkClientTrusted
(
X509Certificate
[]
arg0
,
String
arg1
)
throws
CertificateException
{
}
@Override
public
void
checkServerTrusted
(
X509Certificate
[]
arg0
,
String
arg1
)
throws
CertificateException
{
}
@Override
public
X509Certificate
[]
getAcceptedIssuers
()
{
return
new
X509Certificate
[]{};
}
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/response/BaseErrorInfoInterface.java
浏览文件 @
00fdc6ce
...
...
@@ -5,4 +5,17 @@ package com.mmc.iuav.response;
* @Date:2023/5/16 10:42
*/
public
interface
BaseErrorInfoInterface
{
/**
* 错误码
*
* @return
*/
String
getResultCode
();
/**
* 错误描述
*
* @return
*/
String
getResultMsg
();
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/response/ResultBody.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
response
;
import
com.alibaba.fastjson2.JSONObject
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/5/16 10:51
*/
public
class
ResultBody
{
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
(
value
=
"com.mmc.iuav.response.ResultBody"
,
description
=
"请求响应体"
)
public
class
ResultBody
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
6913505187877217885L
;
/**
* 响应代码
*/
@ApiModelProperty
(
value
=
"响应代码"
)
private
String
code
;
/**
* 响应消息
*/
@ApiModelProperty
(
value
=
"响应消息"
)
private
String
message
;
/**
* 响应结果
*/
@ApiModelProperty
(
value
=
"响应结果"
)
private
T
result
;
public
ResultBody
(
BaseErrorInfoInterface
errorInfo
)
{
this
.
code
=
errorInfo
.
getResultCode
();
this
.
message
=
errorInfo
.
getResultMsg
();
}
/**
* 成功
*
* @return
*/
public
static
ResultBody
success
()
{
return
success
(
null
);
}
/**
* 成功
*
* @param data
* @return
*/
public
static
<
T
>
ResultBody
success
(
T
data
)
{
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
ResultEnum
.
SUCCESS
.
getResultCode
());
rb
.
setMessage
(
ResultEnum
.
SUCCESS
.
getResultMsg
());
rb
.
setResult
(
data
);
return
rb
;
}
/**
* 成功
*
* **/
public
static
ResultBody
success1
(
ResultEnum
enums
){
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
"200"
);
rb
.
setMessage
(
enums
.
getResultMsg
());
rb
.
setResult
(
null
);
return
rb
;
}
public
void
buildSuccess
()
{
this
.
setCode
(
ResultEnum
.
SUCCESS
.
getResultCode
());
this
.
setMessage
(
ResultEnum
.
SUCCESS
.
getResultMsg
());
}
/**
* 失败
*/
public
static
ResultBody
error
(
BaseErrorInfoInterface
errorInfo
)
{
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
errorInfo
.
getResultCode
());
rb
.
setMessage
(
errorInfo
.
getResultMsg
());
rb
.
setResult
(
null
);
return
rb
;
}
/**
* 失败
*/
public
static
ResultBody
error
(
String
code
,
String
message
)
{
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
code
);
rb
.
setMessage
(
message
);
rb
.
setResult
(
null
);
return
rb
;
}
/**
* 失败
*/
public
static
ResultBody
error
(
ResultEnum
enums
)
{
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
enums
.
getResultCode
());
rb
.
setMessage
(
enums
.
getResultMsg
());
rb
.
setResult
(
null
);
return
rb
;
}
/**
* 失败
*/
public
static
ResultBody
error
(
String
message
)
{
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
"-1"
);
rb
.
setMessage
(
message
);
rb
.
setResult
(
null
);
return
rb
;
}
/**
* 失败
*/
public
static
ResultBody
error
(
ResultEnum
enums
,
Object
data
)
{
ResultBody
rb
=
new
ResultBody
();
rb
.
setCode
(
enums
.
getResultCode
());
rb
.
setMessage
(
enums
.
getResultMsg
());
rb
.
setResult
(
data
);
return
rb
;
}
public
static
boolean
isSuccess
(
ResultBody
res
)
{
return
res
.
getCode
().
equals
(
ResultEnum
.
SUCCESS
.
getResultCode
());
}
@Override
public
String
toString
()
{
return
JSONObject
.
toJSONString
(
this
);
}
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/response/ResultEnum.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
response
;
/**
* @author:
zhenjie
* @Date:2023/5/16 10:41
* @author:
zj
* @Date:
2023/5/16 10:41
*/
public
enum
ResultEnum
{
public
enum
ResultEnum
implements
BaseErrorInfoInterface
{
SUCCESS
(
"200"
,
"success"
),
FAIL
(
"500"
,
"fail"
),
PARAM_ERROR
(
"400"
,
"参数错误"
),
APPLET_PORT_TYPE_ERROR
(
"7001"
,
"小程序端口类型错误"
),
APPLET_LOGIN_ERROR
(
"7002"
,
"获取小程序登录失败"
);
/**
* 错误码
*
* @return
*/
String
resultCode
;
/**
* 错误描述
*
* @return
*/
String
resultMsg
;
ResultEnum
(
String
resultCode
,
String
resultMsg
)
{
this
.
resultCode
=
resultCode
;
this
.
resultMsg
=
resultMsg
;
}
@Override
public
String
getResultCode
()
{
return
null
;
}
@Override
public
String
getResultMsg
()
{
return
null
;
}
}
cms-common/pom.xml
浏览文件 @
00fdc6ce
...
...
@@ -10,6 +10,11 @@
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
cms-common
</artifactId>
<packaging>
pom
</packaging>
<modules>
<module>
cms-common-model
</module>
<module>
cms-common-util
</module>
</modules>
</project>
\ No newline at end of file
csm-service/cms-service-user/pom.xml
浏览文件 @
00fdc6ce
...
...
@@ -11,5 +11,89 @@
<artifactId>
cms-service-user
</artifactId>
<dependencies>
<dependency>
<groupId>
com.mmc.iuav.cms
</groupId>
<artifactId>
cms-common-model
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.mmc.iuav.cms
</groupId>
<artifactId>
cms-common-util
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<!-- 引入 Web 功能 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<!-- 健康监控 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<!-- 引入 Feign, 可以以声明的方式调用微服务 -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!-- 使用okhttp-feign-连接池技术 -->
<dependency>
<groupId>
io.github.openfeign
</groupId>
<artifactId>
feign-okhttp
</artifactId>
</dependency>
<!-- mybatis驱动&Druid数据源-start -->
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid-spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.mybatis.spring.boot
</groupId>
<artifactId>
mybatis-spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
</dependency>
<!-- mybatis驱动&Druid数据源-end -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<!-- RabbitMQ -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-amqp</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
knife4j-spring-boot-starter
</artifactId>
<version>
2.0.5
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/UserApplication.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
/**
* @author:zhenjie
* @Date:2023/5/15 15:35
*/
@SpringBootApplication
public
class
UserApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
UserApplication
.
class
,
args
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/config/Knife4jConfiguration.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
config
;
import
com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
/**
* @author:zhenjie
* @Date:2023/5/16 10:07
*/
@Configuration
@EnableSwagger2
@EnableKnife4j
public
class
Knife4jConfiguration
{
@Bean
(
value
=
"defaultApi2"
)
public
Docket
defaultApi2
()
{
Docket
docket
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
())
//分组名称
.
groupName
(
"用户服务"
)
.
select
()
//这里指定Controller扫描包路径
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.mmc.iuav.user.controller"
))
.
paths
(
PathSelectors
.
any
())
.
build
();
return
docket
;
}
private
ApiInfo
apiInfo
(){
return
new
ApiInfoBuilder
()
.
title
(
"iuav用户相关"
)
.
description
(
"swagger-bootstrap-ui-demo RESTful APIs"
)
.
termsOfServiceUrl
(
"https://www.iuav.com/"
)
.
contact
(
"group@qq.com"
)
.
version
(
"1.0"
)
.
build
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/constant/UserSystemConstant.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
constant
;
import
lombok.Data
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author: zj
* @Date: 2023/5/16 13:34
*/
@Data
@Component
public
class
UserSystemConstant
{
@Value
(
"${wx.app.id}"
)
private
String
wxAppId
;
@Value
(
"${wx.app.secret}"
)
private
String
wxAppSecret
;
@Value
(
"${wx.app.miniprogram-state}"
)
private
String
miniProgramState
;
@Value
(
"${wx.app.env-version}"
)
private
String
envVersion
;
@Value
(
"${wx.sub.appid}"
)
private
String
wxSubAppId
;
@Value
(
"${wx.sub.secret}"
)
private
String
wxSubSecret
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/constant/WxConstant.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
constant
;
import
org.springframework.stereotype.Component
;
/**
* @author: zj
* @Date: 2023/5/16 16:02
*/
public
interface
WxConstant
{
public
class
WxConstant
{
public
static
final
Integer
APP
=
0
;
public
static
final
Integer
WEB
=
1
;
public
static
final
String
CODE2_SESSION_URL
=
"https://api.weixin.qq.com/sns/jscode2session"
;
public
static
final
String
GRANT_TYPE
=
"authorization_code"
;
public
static
final
String
ACCESS_TOKEN_URL
=
"https://api.weixin.qq.com/sns/oauth2/access_token"
;
public
static
final
String
OPEN_ID
=
"openid"
;
public
static
final
String
UNION_ID
=
"unionid"
;
public
static
final
String
SESSION_KEY
=
"session_key"
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/AuthController.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
controller
;
import
com.mmc.iuav.group.Insert
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.vo.AppUserSucVO
;
import
com.mmc.iuav.user.model.vo.WxLoginVO
;
import
com.mmc.iuav.user.service.AuthService
;
import
io.swagger.annotations.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
/**
* @author:
zhenjie
* @Date:2023/5/15 15:50
* @author:
zj
* @Date:
2023/5/15 15:50
*/
@Api
(
tags
=
"登录"
)
@RequestMapping
(
"/auth/"
)
@RestController
public
class
AuthController
{
@Autowired
private
AuthService
authService
;
@ApiOperation
(
value
=
"小程序登录/注册"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
AppUserSucVO
.
class
)
})
@PostMapping
(
"appletLogin"
)
public
ResultBody
appletLogin
(
@Validated
(
value
=
{
Insert
.
class
})
@RequestBody
WxLoginVO
wxLoginVO
){
return
authService
.
appletLogin
(
wxLoginVO
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/UserAccountController.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
controller
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @author:zhenjie
* @Date:2023/5/15 15:32
*/
@Api
(
tags
=
"账号相关接口"
)
@RequestMapping
(
"/user-account/"
)
@RestController
public
class
UserAccountController
{
@ApiOperation
(
value
=
"获取用户信息"
)
@GetMapping
(
"info"
)
public
String
info
(){
return
"account"
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/UserServiceDao.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
dao
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author: zj
* @Date: 2023/5/16 19:26
*/
@Mapper
public
interface
UserServiceDao
{
/**
* 根据用户unionId查询用户信息
* @param unionId
* @return
*/
UserAccountDO
getUserAccountInfoByUnionId
(
String
unionId
);
/**
* 插入用户信息
* @param userAccountDO
*/
void
insertUserAccount
(
UserAccountDO
userAccountDO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/UserAccountDO.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/5/16 17:00
*/
public
class
UserAccountDO
{
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
UserAccountDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
5007589179946146721L
;
private
Integer
id
;
private
Integer
accountType
;
private
String
uid
;
private
String
phoneNum
;
private
String
userName
;
private
String
nickName
;
private
String
userImg
;
private
String
openId
;
private
String
unionId
;
private
Integer
userSex
;
private
String
email
;
private
Integer
source
;
private
Integer
accountStatus
;
private
String
remark
;
private
Integer
portType
;
private
Integer
deleted
;
private
Date
createTime
;
private
Date
updateTime
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/AuthService.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
service
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.vo.WxLoginVO
;
/**
* @author: zj
* @Date: 2023/5/16 13:50
*/
public
interface
AuthService
{
/**
* 小程序用户登录接口
* @param wxLoginVO
* @return
*/
ResultBody
appletLogin
(
WxLoginVO
wxLoginVO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/UserAccountService.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
service
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
/**
* @author: zj
* @Date: 2023/5/16 13:48
*/
public
interface
UserAccountService
{
/**
* Get the user account
* @param unionId
* @return
*/
UserAccountDO
getUserAccountInfoByUnionId
(
String
unionId
);
/**
* Insert the user account
* @param userAccountDO
*/
void
insertUserAccount
(
UserAccountDO
userAccountDO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/WxService.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
service
;
import
com.mmc.iuav.user.model.vo.WxLoginVO
;
/**
* @author: zj
* @Date: 2023/5/16 13:43
*/
public
interface
WxService
{
/**
* 小程序登录调用接口
* @param wxLoginVO
* @return
*/
String
appLogin
(
WxLoginVO
wxLoginVO
);
/**
* pc扫码登录
* @param wxLoginVO
* @return
*/
String
pcLogin
(
WxLoginVO
wxLoginVO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/AuthServiceImpl.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
service
.
impl
;
import
com.alibaba.fastjson2.JSON
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.mmc.iuav.auth.JwtConstant
;
import
com.mmc.iuav.auth.JwtUtil
;
import
com.mmc.iuav.general.CodeUtil
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.response.ResultEnum
;
import
com.mmc.iuav.user.constant.UserSystemConstant
;
import
com.mmc.iuav.user.constant.WxConstant
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
import
com.mmc.iuav.user.model.vo.AppUserSucVO
;
import
com.mmc.iuav.user.model.vo.WxLoginVO
;
import
com.mmc.iuav.user.service.AuthService
;
import
com.mmc.iuav.user.service.UserAccountService
;
import
com.mmc.iuav.user.service.WxService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @author: zj
* @Date: 2023/5/16 13:51
*/
public
class
AuthServiceImpl
{
@Slf4j
@Service
public
class
AuthServiceImpl
implements
AuthService
{
@Autowired
private
WxService
wxService
;
@Autowired
private
UserAccountService
userAccountService
;
@Override
public
ResultBody
appletLogin
(
WxLoginVO
wxLoginVO
)
{
String
unionId
;
String
openId
;
if
(
wxLoginVO
.
getFromPort
().
toString
().
equals
(
WxConstant
.
APP
.
toString
()))
{
//调用小程序登录接口,里面包含unionId
String
appWxJson
=
wxService
.
appLogin
(
wxLoginVO
);
if
(
appWxJson
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
APPLET_PORT_TYPE_ERROR
);
}
JSONObject
json
=
JSON
.
parseObject
(
appWxJson
);
if
(!
json
.
containsKey
(
WxConstant
.
OPEN_ID
)
||
!
json
.
containsKey
(
WxConstant
.
SESSION_KEY
))
{
log
.
error
(
"wx appLogin error==>"
+
json
);
return
ResultBody
.
error
(
ResultEnum
.
APPLET_LOGIN_ERROR
,
json
);
}
unionId
=
json
.
getString
(
WxConstant
.
UNION_ID
);
openId
=
json
.
getString
(
WxConstant
.
OPEN_ID
);
}
else
if
(
wxLoginVO
.
getFromPort
().
equals
(
WxConstant
.
WEB
)){
//获取access_token接口,里面包含unionId
String
pcWxJson
=
wxService
.
pcLogin
(
wxLoginVO
);
if
(
pcWxJson
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
APPLET_PORT_TYPE_ERROR
);
}
JSONObject
json
=
JSON
.
parseObject
(
pcWxJson
);
if
(!
json
.
containsKey
(
WxConstant
.
OPEN_ID
)
||!
json
.
containsKey
(
WxConstant
.
SESSION_KEY
))
{
log
.
error
(
"wx pcLogin error==>"
+
json
);
return
ResultBody
.
error
(
ResultEnum
.
APPLET_LOGIN_ERROR
,
json
);
}
unionId
=
json
.
getString
(
WxConstant
.
UNION_ID
);
openId
=
json
.
getString
(
WxConstant
.
OPEN_ID
);
}
else
{
return
ResultBody
.
error
(
ResultEnum
.
PARAM_ERROR
);
}
//数据库查询用户信息
UserAccountDO
userAccountDO
=
userAccountService
.
getUserAccountInfoByUnionId
(
unionId
);
if
(
userAccountDO
==
null
)
{
userAccountDO
=
new
UserAccountDO
();
userAccountDO
.
setUnionId
(
unionId
);
userAccountDO
.
setOpenId
(
openId
);
userAccountDO
.
setUid
(
CodeUtil
.
generateUserUID
());
userAccountDO
.
setAccountType
(
0
);
userAccountDO
.
setPortType
(
100
);
userAccountService
.
insertUserAccount
(
userAccountDO
);
}
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
map
.
put
(
JwtConstant
.
USER_ACCOUNT_ID
,
userAccountDO
.
getId
());
map
.
put
(
JwtConstant
.
ROLE_ID
,
0
);
map
.
put
(
JwtConstant
.
TOKEN_TYPE
,
JwtConstant
.
IUAV_TOKEN
);
String
token
=
JwtUtil
.
createJwt
(
map
);
return
ResultBody
.
success
(
AppUserSucVO
.
builder
().
openId
(
userAccountDO
.
getOpenId
()).
unionId
(
userAccountDO
.
getUnionId
()).
token
(
token
).
userAccountId
(
userAccountDO
.
getId
()).
build
());
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/UserAccountServiceImpl.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
service
.
impl
;
import
com.mmc.iuav.user.dao.UserServiceDao
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
import
com.mmc.iuav.user.service.UserAccountService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author: zj
* @Date: 2023/5/16 13:48
*/
public
class
UserAccountServiceImpl
{
@Service
public
class
UserAccountServiceImpl
implements
UserAccountService
{
@Autowired
private
UserServiceDao
userServiceDao
;
@Override
public
UserAccountDO
getUserAccountInfoByUnionId
(
String
unionId
)
{
UserAccountDO
userAccountDO
=
userServiceDao
.
getUserAccountInfoByUnionId
(
unionId
);
return
userAccountDO
;
}
@Override
public
void
insertUserAccount
(
UserAccountDO
userAccountDO
)
{
userServiceDao
.
insertUserAccount
(
userAccountDO
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/WxServiceImpl.java
浏览文件 @
00fdc6ce
package
com
.
mmc
.
iuav
.
user
.
service
.
impl
;
import
com.mmc.iuav.http.HttpsRequestUtil
;
import
com.mmc.iuav.user.constant.UserSystemConstant
;
import
com.mmc.iuav.user.constant.WxConstant
;
import
com.mmc.iuav.user.model.vo.WxLoginVO
;
import
com.mmc.iuav.user.service.WxService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author: zj
* @Date: 2023/5/16 13:44
*/
public
class
WxServiceImpl
{
@Service
public
class
WxServiceImpl
implements
WxService
{
@Autowired
private
UserSystemConstant
userSystemConstant
;
@Override
public
String
appLogin
(
WxLoginVO
wxLoginVO
)
{
String
url
=
WxConstant
.
CODE2_SESSION_URL
+
"?appid="
+
userSystemConstant
.
getWxAppId
()
+
"&secret="
+
userSystemConstant
.
getWxAppSecret
()
+
"&js_code="
+
wxLoginVO
.
getCode
()
+
"&grant_type="
+
WxConstant
.
GRANT_TYPE
;
String
data
=
HttpsRequestUtil
.
httpsGet
(
url
,
null
);
return
data
;
}
@Override
public
String
pcLogin
(
WxLoginVO
wxLoginVO
)
{
String
url
=
WxConstant
.
ACCESS_TOKEN_URL
+
"?appid="
+
userSystemConstant
.
getWxAppId
()
+
"&secret="
+
userSystemConstant
.
getWxAppSecret
()
+
"&code="
+
wxLoginVO
.
getCode
()
+
"&grant_type="
+
WxConstant
.
GRANT_TYPE
;
String
data
=
HttpsRequestUtil
.
httpsGet
(
url
,
null
);
return
data
;
}
}
csm-service/cms-service-user/src/main/resources/application-dev.yml
浏览文件 @
00fdc6ce
server
:
port
:
35150
servlet
:
context-path
:
/userapp
#spring
spring
:
application
:
name
:
userapp
#Database
datasource
:
driver-class-name
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://rm-wz9dd796t4j1giz6t2o.mysql.rds.aliyuncs.com:3306/iuav_cms?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username
:
tmj
password
:
MMC@2022&MYSQL
# Druid数据源配置
type
:
com.alibaba.druid.pool.DruidDataSource
druid
:
initial-size
:
10
#初始化连接池大小
min-idle
:
10
#最小大小
max-active
:
50
#最大大小
max-wait
:
60000
#获取连接时最大等待时间,单位毫秒
time-between-eviction-runs-millis
:
60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis
:
300000
#配置一个连接在池中最小生存的时间,单位是毫秒
validation-query
:
SELECT 1 FROM DUAL
#用来检测连接是否有效的sql
test-while-idle
:
true
#申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
testOnBorrow
:
false
#获取连接时执行检测,建议关闭,影响性能
testOnReturn
:
false
#归还连接时执行检测,建议关闭,影响性能
pool-prepared-statements
:
false
#是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
filters
:
stat,wall
#配置扩展插件,常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入
filter
:
wall
:
config
:
multi-statement-allow
:
true
db-type
:
mysql
enabled
:
true
connection-properties
:
druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
#打开慢sql记录和延迟时间
web-stat-filter
:
url-pattern
:
/*
exclusions
:
"
*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
enabled
:
true
stat-view-servlet
:
enabled
:
true
login-username
:
druid
login-password
:
druid
#mybatis
mybatis
:
executor-type
:
simple
mapper-locations
:
classpath:mapper/**/*.xml
type-aliases-package
:
com.mmc.iuav.user
configuration
:
map-underscore-to-camel-case
:
true
wx
:
sub
:
appid
:
wx5c6a105a0ddca4c5
secret
:
96c75255dd26f82f8d55e15b59e101c7
app
:
id
:
wx18b7883acd204278
secret
:
28afe74ba373830237a8133a7431ee82
miniprogram-state
:
trial
env-version
:
trial
token-path
:
/userservlet/wechat/getAppletUserAccessToken
port
:
user
\ No newline at end of file
csm-service/cms-service-user/src/main/resources/application.yml
浏览文件 @
00fdc6ce
spring
:
profiles
:
active
:
dev
---
spring
:
profiles
:
dev
---
spring
:
profiles
:
beta
---
spring
:
profiles
:
product
\ No newline at end of file
csm-service/cms-service-user/src/main/resources/map/UserServiceDao.xml
浏览文件 @
00fdc6ce
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.iuav.user.dao.UserServiceDao"
>
<resultMap
id=
"userAccountResultMap"
type=
"com.mmc.iuav.user.entity.UserAccountDO"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"accountType"
column=
"account_type"
/>
<result
property=
"uid"
column=
"uid"
/>
<result
property=
"phoneNum"
column=
"phone_num"
/>
<result
property=
"userName"
column=
"user_name"
/>
<result
property=
"nickName"
column=
"nick_name"
/>
<result
property=
"userImg"
column=
"user_img"
/>
<result
property=
"openId"
column=
"open_id"
/>
<result
property=
"unionId"
column=
"union_id"
/>
<result
property=
"userSex"
column=
"user_sex"
/>
<result
property=
"email"
column=
"email"
/>
<result
property=
"source"
column=
"source"
/>
<result
property=
"accountStatus"
column=
"account_status"
/>
<result
property=
"remark"
column=
"remark"
/>
<result
property=
"portType"
column=
"port_type"
/>
<result
property=
"deleted"
column=
"is_deleted"
/>
<result
property=
"createTime"
column=
"createTime"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
</resultMap>
<insert
id=
"insertUserAccount"
parameterType=
"com.mmc.iuav.user.entity.UserAccountDO"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into user_account(account_type, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, remark, port_type, create_time)
values(#{accountType}, #{uid}, #{phoneNum}, #{userName}, #{nickName}, #{userImg}, #{userImg}, #{openId}, #{unionId}, #{userSex}, #{email}, #{source}, #{accountStatus},
#{remark}, #{portType}, NOW())
</insert>
<select
id=
"getUserAccountInfoByUnionId"
resultType=
"com.mmc.iuav.user.entity.UserAccountDO"
>
select id, account_type, uid, phone_num, user_name, nick_name, user_img, open_id, union_id, user_sex, email, source, account_status, remark,
port_type, is_deleted, create_time, update_time
from user_account
where union_id = #{unionId} and is_deleted = 0
</select>
</mapper>
\ No newline at end of file
csm-service/pom.xml
浏览文件 @
00fdc6ce
...
...
@@ -10,6 +10,9 @@
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
csm-service
</artifactId>
<packaging>
pom
</packaging>
<modules>
<module>
cms-service-user
</module>
</modules>
</project>
\ No newline at end of file
pom.xml
浏览文件 @
00fdc6ce
...
...
@@ -4,9 +4,202 @@
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
groupId
</groupId>
<groupId>
com.mmc.iuav.cms
</groupId>
<artifactId>
iuav-cms
</artifactId>
<packaging>
pom
</packaging>
<version>
1.0-SNAPSHOT
</version>
<modules>
<module>
cms-common
</module>
<module>
csm-service
</module>
</modules>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.2.6.RELEASE
</version>
<relativePath
/>
</parent>
<properties>
<spring-cloud.version>
Hoxton.SR6
</spring-cloud.version>
<springfox.version>
2.9.2
</springfox.version>
<spring-cloud-alibaba-seata.version>
2.2.1.RELEASE
</spring-cloud-alibaba-seata.version>
<seata.version>
1.1.0
</seata.version>
</properties>
<dependencies>
<!-- lombok 工具通过在代码编译时期动态的将注解替换为具体的代码, IDEA 需要添加 lombok 插件 -->
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
1.18.20
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
<dependency>
<groupId>
com.alibaba.fastjson2
</groupId>
<artifactId>
fastjson2
</artifactId>
<version>
2.0.29
</version>
</dependency>
<!-- swagger2 -->
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger2
</artifactId>
<version>
2.8.0
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
2.8.0
</version>
</dependency>
<!-- 引入swagger-bootstrap-ui包 -->
<dependency>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
swagger-bootstrap-ui
</artifactId>
<version>
1.8.5
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-bean-validators
</artifactId>
<version>
${springfox.version}
</version>
</dependency>
<!--logback 日志 -->
<dependency>
<groupId>
net.logstash.logback
</groupId>
<artifactId>
logstash-logback-encoder
</artifactId>
<version>
5.3
</version>
</dependency>
</dependencies>
<!-- 标识 SpringCloud 的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-dependencies
</artifactId>
<version>
${spring-cloud.version}
</version>
<type>
pom
</type>
<scope>
import
</scope>
</dependency>
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-seata
</artifactId>
<version>
${spring-cloud-alibaba-seata.version}
</version>
</dependency>
<dependency>
<groupId>
io.seata
</groupId>
<artifactId>
seata-spring-boot-starter
</artifactId>
<version>
${seata.version}
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid-spring-boot-starter
</artifactId>
<version>
1.1.10
</version>
</dependency>
<dependency>
<groupId>
org.mybatis.spring.boot
</groupId>
<artifactId>
mybatis-spring-boot-starter
</artifactId>
<version>
2.1.2
</version>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<version>
8.0.15
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-base
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-web
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-annotation
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-collections4
</artifactId>
<version>
4.4
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
3.1.3
</version>
</dependency>
<dependency>
<groupId>
com.aliyun.oss
</groupId>
<artifactId>
aliyun-sdk-oss
</artifactId>
<version>
3.10.2
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>
commons-fileupload
</groupId>
<artifactId>
commons-fileupload
</artifactId>
<version>
1.4
</version>
</dependency>
<dependency>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson-spring-boot-starter
</artifactId>
<version>
3.13.1
</version>
</dependency>
<dependency>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
<version>
18.0
</version>
</dependency>
<dependency>
<groupId>
org.apache.poi
</groupId>
<artifactId>
poi
</artifactId>
<version>
4.1.0
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 配置远程仓库 -->
<repositories>
<repository>
<id>
spring-milestones
</id>
<name>
Spring Milestones
</name>
<url>
https://repo.spring.io/milestone
</url>
<snapshots>
<enabled>
false
</enabled>
</snapshots>
</repository>
</repositories>
</project>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论