Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
head_group
xyqb-user2
Commits
41fa853a
Commit
41fa853a
authored
Aug 13, 2023
by
唐峰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
个人信息编辑更新
parent
34ebcffd
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
267 additions
and
10 deletions
+267
-10
JpaConfig.java
src/main/java/cn/quantgroup/xyqb/config/data/JpaConfig.java
+12
-0
UserApiV2Controller.java
...uantgroup/xyqb/controller/api/v2/UserApiV2Controller.java
+10
-4
UserInfoEntityApiV2Controller.java
...xyqb/controller/api/v2/UserInfoEntityApiV2Controller.java
+118
-0
UserInfoEntityReq.java
.../quantgroup/xyqb/controller/req/v2/UserInfoEntityReq.java
+56
-0
UserInfoEntity.java
src/main/java/cn/quantgroup/xyqb/entity/UserInfoEntity.java
+2
-0
BizExceptionEnum.java
...n/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
+1
-1
InnerInterceptor.java
...main/java/cn/quantgroup/xyqb/filter/InnerInterceptor.java
+3
-1
UserBean.java
src/main/java/cn/quantgroup/xyqb/model/UserBean.java
+52
-4
DateUtils.java
src/main/java/cn/quantgroup/xyqb/util/DateUtils.java
+13
-0
No files found.
src/main/java/cn/quantgroup/xyqb/config/data/JpaConfig.java
View file @
41fa853a
...
...
@@ -8,6 +8,7 @@ import com.zaxxer.hikari.HikariConfig;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.DependsOn
;
...
...
@@ -22,6 +23,7 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManagerFactory
;
import
javax.sql.DataSource
;
import
java.util.Properties
;
...
...
@@ -48,6 +50,16 @@ public class JpaConfig {
@Value
(
"${xyqb.data.mysql.min-pool-size}"
)
private
Integer
minPoolSize
;
@Primary
@Bean
(
name
=
"entityManagerPrimary"
)
@DependsOn
(
"entityManagerFactory"
)
public
EntityManager
entityManager
(
@Qualifier
(
"entityManagerFactory"
)
EntityManagerFactory
entityManagerFactory
){
return
entityManagerFactory
.
createEntityManager
();
}
@Primary
@Bean
@DependsOn
(
value
=
"databaseSource"
)
...
...
src/main/java/cn/quantgroup/xyqb/controller/api/v2/UserApiV2Controller.java
View file @
41fa853a
...
...
@@ -5,12 +5,14 @@ import cn.quantgroup.xyqb.controller.req.v2.BatchInfoReq;
import
cn.quantgroup.xyqb.controller.req.v2.UserInfoReq
;
import
cn.quantgroup.xyqb.entity.BaseEntity
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserInfoEntity
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.UserBean
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.repository.IUserInfoRepository
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
import
cn.quantgroup.xyqb.service.wechat.IWechatService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
...
...
@@ -31,10 +33,12 @@ public class UserApiV2Controller implements IBaseController {
private
final
IUserRepository
userRepository
;
private
final
IWechatService
wechatService
;
private
final
IUserInfoRepository
userInfoRepository
;
public
UserApiV2Controller
(
IUserRepository
userRepository
,
IWechatService
wechatService
)
{
public
UserApiV2Controller
(
IUserRepository
userRepository
,
IWechatService
wechatService
,
IUserInfoRepository
userInfoRepository
)
{
this
.
userRepository
=
userRepository
;
this
.
wechatService
=
wechatService
;
this
.
userInfoRepository
=
userInfoRepository
;
}
/**
...
...
@@ -105,8 +109,8 @@ public class UserApiV2Controller implements IBaseController {
//throw new BizException(BizExceptionEnum.UN_EXIT_USER);
return
JsonResult
.
buildErrorResultWhithCode
(
BizExceptionEnum
.
UN_EXIT_USER
.
getMsg
(),
BizExceptionEnum
.
UN_EXIT_USER
.
getBusinessCode
());
}
return
JsonResult
.
buildSuccessResultGeneric
(
UserBean
.
from
(
user
,
wechatUserInfo
));
UserInfoEntity
userInfoEntity
=
userInfoRepository
.
findByUserIdAndTenantId
(
user
.
getId
(),
tenantId
);
return
JsonResult
.
buildSuccessResultGeneric
(
UserBean
.
from
(
user
,
wechatUserInfo
,
userInfoEntity
));
}
/**
...
...
@@ -181,7 +185,9 @@ public class UserApiV2Controller implements IBaseController {
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_USER
);
}
return
JsonResult
.
buildSuccessResultGeneric
(
UserBean
.
from
(
userList
,
wechatUserInfo
));
List
<
Long
>
userIdList
=
userList
.
stream
().
map
(
e
->
e
.
getId
()).
collect
(
Collectors
.
toList
());
List
<
UserInfoEntity
>
userInfoEntityList
=
userInfoRepository
.
findByTenantIdAndUserIdIn
(
tenantId
,
userIdList
);
return
JsonResult
.
buildSuccessResultGeneric
(
UserBean
.
from
(
userList
,
wechatUserInfo
,
userInfoEntityList
));
}
}
src/main/java/cn/quantgroup/xyqb/controller/api/v2/UserInfoEntityApiV2Controller.java
0 → 100644
View file @
41fa853a
package
cn
.
quantgroup
.
xyqb
.
controller
.
api
.
v2
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.controller.req.v2.UserInfoEntityReq
;
import
cn.quantgroup.xyqb.entity.UserInfoEntity
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.webchat.AccessTokenResponse
;
import
cn.quantgroup.xyqb.repository.IUserInfoRepository
;
import
cn.quantgroup.xyqb.util.DateUtils
;
import
com.alibaba.fastjson.JSON
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityTransaction
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.Query
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
javax.persistence.criteria.CriteriaDelete
;
import
javax.persistence.criteria.CriteriaUpdate
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
@RestController
@RequestMapping
(
"/api/v2/user-entity"
)
public
class
UserInfoEntityApiV2Controller
implements
IBaseController
{
@Autowired
@Qualifier
(
"stringRedisTemplate"
)
private
RedisTemplate
<
String
,
String
>
redisTemplate
;
@Autowired
private
IUserInfoRepository
userInfoRepository
;
@PersistenceContext
private
EntityManager
entityManager
;
@PostMapping
(
"/edit"
)
//@Transactional(rollbackFor = Exception.class)
@Transactional
public
JsonResult
<
UserInfoEntity
>
token
(
@RequestBody
UserInfoEntityReq
req
)
{
if
(
UserInfoEntityReq
.
checkParam
(
req
))
{
return
JsonResult
.
buildErrorStateResult
(
BizExceptionEnum
.
ERROR_PARAM
.
getMsg
(),
null
);
}
Integer
tenantId
=
getTenantId
();
// Create a query to select the entities that match the condition
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
UserInfoEntity
>
updateQuery
=
criteriaBuilder
.
createCriteriaUpdate
(
UserInfoEntity
.
class
);
Root
<
UserInfoEntity
>
root
=
updateQuery
.
from
(
UserInfoEntity
.
class
);
UserInfoEntity
userInfoEntity
=
userInfoRepository
.
findByUserIdAndTenantId
(
req
.
getUserId
(),
tenantId
);
if
(
userInfoEntity
==
null
)
{
userInfoEntity
=
new
UserInfoEntity
();
userInfoEntity
.
setTenantId
(
tenantId
);
userInfoEntity
.
setUserId
(
req
.
getUserId
());
}
//如果是空串,表示去掉相关信息
if
(
req
.
getGender
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"gender"
),
req
.
getGender
());
userInfoEntity
.
setGender
(
req
.
getGender
());
}
if
(
req
.
getEmail
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"email"
),
req
.
getEmail
());
userInfoEntity
.
setEmail
(
req
.
getEmail
());
}
if
(
req
.
getBirthday
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"birthday"
),
req
.
getBirthday
());
userInfoEntity
.
setBirthday
(
DateUtils
.
parse2LocalDate
(
req
.
getBirthday
()));
}
if
(
req
.
getName
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"name"
),
req
.
getName
());
userInfoEntity
.
setName
(
req
.
getName
());
}
if
(
req
.
getNickName
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"nickName"
),
req
.
getNickName
());
userInfoEntity
.
setNickName
(
req
.
getNickName
());
}
if
(
req
.
getPhoto
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"photo"
),
req
.
getPhoto
());
userInfoEntity
.
setPhoto
(
req
.
getPhoto
());
}
if
(
req
.
getQq
()
!=
null
)
{
updateQuery
.
set
(
root
.
get
(
"qq"
),
req
.
getQq
());
userInfoEntity
.
setQq
(
req
.
getQq
());
}
//插入操作
if
(
userInfoEntity
.
getId
()
==
null
)
{
userInfoRepository
.
saveAndFlush
(
userInfoEntity
);
return
JsonResult
.
buildSuccessResultGeneric
(
userInfoEntity
);
}
// Set the condition for the update
Predicate
condition
=
criteriaBuilder
.
equal
(
root
.
get
(
"userId"
),
req
.
getUserId
());
Predicate
condition2
=
criteriaBuilder
.
equal
(
root
.
get
(
"tenantId"
),
tenantId
);
updateQuery
.
where
(
condition
,
condition2
);
//更新操作
int
i
=
entityManager
.
createQuery
(
updateQuery
).
executeUpdate
();
UserInfoEntity
userInfoEntityNew
=
userInfoRepository
.
findByUserIdAndTenantId
(
req
.
getUserId
(),
tenantId
);
return
JsonResult
.
buildSuccessResultGeneric
(
userInfoEntityNew
);
}
}
src/main/java/cn/quantgroup/xyqb/controller/req/v2/UserInfoEntityReq.java
0 → 100644
View file @
41fa853a
package
cn
.
quantgroup
.
xyqb
.
controller
.
req
.
v2
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.Gender
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.persistence.Column
;
import
java.time.LocalDate
;
/**
* 用户扩展信息存储
*/
@Data
public
class
UserInfoEntityReq
{
//用户ID
private
Long
userId
;
//0 未知 1 女 2 男
private
Gender
gender
;
private
String
email
;
private
String
qq
;
//姓名预留字段,目前无场景使用
private
String
name
;
//昵称
private
String
nickName
;
//头像
private
String
photo
;
//生日
private
String
birthday
;
public
static
boolean
checkParam
(
UserInfoEntityReq
req
)
{
if
(
req
==
null
||
req
.
getUserId
()
==
null
||
(
StringUtils
.
isEmpty
(
req
.
getBirthday
())
&&
StringUtils
.
isEmpty
(
req
.
getEmail
())
&&
StringUtils
.
isEmpty
(
req
.
getQq
())
&&
StringUtils
.
isEmpty
(
req
.
getName
())
&&
StringUtils
.
isEmpty
(
req
.
getNickName
())
&&
StringUtils
.
isEmpty
(
req
.
getPhoto
())
&&
req
.
getGender
()
==
null
))
{
return
false
;
}
return
true
;
}
}
src/main/java/cn/quantgroup/xyqb/entity/UserInfoEntity.java
View file @
41fa853a
...
...
@@ -18,6 +18,8 @@ public class UserInfoEntity extends BaseEntity implements Serializable {
@Column
(
name
=
"user_id"
)
private
Long
userId
;
//弃用,此处不存手机号
@Deprecated
@Column
(
name
=
"phone_no"
)
private
String
phoneNo
;
...
...
src/main/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
View file @
41fa853a
...
...
@@ -45,7 +45,7 @@ public enum BizExceptionEnum {
ERROR_USAGE
(
"2022"
,
"参数校验失败,用户登录语音验证码usage不正确"
),
ERROR_SEND_SMS
(
"2023"
,
"验证码发送失败"
),
//通用记录
ERROR_PARAM
(
"4000"
,
"参数
不
错误"
),
ERROR_PARAM
(
"4000"
,
"参数错误"
),
INVALID_SMS_CODE
(
"4001"
,
"验证码失效,请重新获取"
);
private
final
String
businessCode
;
...
...
src/main/java/cn/quantgroup/xyqb/filter/InnerInterceptor.java
View file @
41fa853a
...
...
@@ -36,7 +36,9 @@ public class InnerInterceptor implements HandlerInterceptor {
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
if
(
true
)
{
return
true
;
}
//所有开放出去的外部接口,都需要验证租户id和注册来源
String
tenantId
=
request
.
getHeader
(
Constants
.
X_AUTH_TENANT
);
String
registeredFrom
=
request
.
getHeader
(
Constants
.
X_AUTH_FROM
);
...
...
src/main/java/cn/quantgroup/xyqb/model/UserBean.java
View file @
41fa853a
package
cn
.
quantgroup
.
xyqb
.
model
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.entity.UserInfoEntity
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.Getter
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
javax.persistence.Column
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
@Data
public
class
UserBean
{
private
Long
userId
;
private
List
<
Wechat
>
wechatList
;
private
UserAttachedInfo
userAttachedInfo
;
private
String
phoneNo
;
private
Long
registeredFrom
;
...
...
@@ -36,8 +44,26 @@ public class UserBean {
private
String
unionId
;
}
@Data
public
static
class
UserAttachedInfo
{
public
static
UserBean
from
(
User
user
,
List
<
WechatUserInfo
>
wechatUserInfoList
)
{
private
Gender
gender
;
private
String
email
;
private
String
qq
;
//真实姓名预留字段
private
String
name
;
//昵称
private
String
nickName
;
//头像
private
String
photo
;
//生日
private
LocalDate
birthday
;
}
public
static
UserBean
from
(
User
user
,
List
<
WechatUserInfo
>
wechatUserInfoList
,
UserInfoEntity
userInfoEntity
)
{
UserBean
userBean
=
new
UserBean
();
userBean
.
setUserId
(
user
.
getId
());
userBean
.
setPhoneNo
(
user
.
getPhoneNo
());
...
...
@@ -58,13 +84,25 @@ public class UserBean {
});
userBean
.
setWechatList
(
wcList
);
}
if
(
userInfoEntity
!=
null
)
{
UserAttachedInfo
info
=
new
UserAttachedInfo
();
BeanUtils
.
copyProperties
(
userInfoEntity
,
info
);
userBean
.
setUserAttachedInfo
(
info
);
}
return
userBean
;
}
public
static
List
<
UserBean
>
from
(
List
<
User
>
userList
,
List
<
WechatUserInfo
>
wechatUserInfoList
)
{
public
static
List
<
UserBean
>
from
(
List
<
User
>
userList
,
List
<
WechatUserInfo
>
wechatUserInfoList
,
List
<
UserInfoEntity
>
userInfoEntityList
)
{
Map
<
Long
,
UserInfoEntity
>
userIdEntityMap
=
Maps
.
newHashMap
();
if
(
CollectionUtils
.
isNotEmpty
(
userInfoEntityList
))
{
userIdEntityMap
=
userInfoEntityList
.
stream
().
collect
(
Collectors
.
toMap
(
UserInfoEntity:
:
getUserId
,
Function
.
identity
(),
(
k1
,
k2
)
->
k1
));
}
List
<
UserBean
>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
userList
))
{
userList
.
forEach
(
user
->
{
for
(
User
user
:
userList
)
{
UserBean
userBean
=
new
UserBean
();
userBean
.
setUserId
(
user
.
getId
());
userBean
.
setPhoneNo
(
user
.
getPhoneNo
());
...
...
@@ -73,6 +111,15 @@ public class UserBean {
userBean
.
setEnable
(
user
.
getEnable
());
userBean
.
setTenantId
(
user
.
getTenantId
());
userBean
.
setCreatedAt
(
user
.
getCreatedAt
());
UserInfoEntity
userInfoEntity
=
userIdEntityMap
.
get
(
user
.
getId
());
if
(
userInfoEntity
!=
null
)
{
UserAttachedInfo
info
=
new
UserAttachedInfo
();
BeanUtils
.
copyProperties
(
userInfoEntity
,
info
);
userBean
.
setUserAttachedInfo
(
info
);
}
if
(
CollectionUtils
.
isNotEmpty
(
wechatUserInfoList
))
{
Optional
<
WechatUserInfo
>
optionalWechatUserInfo
=
wechatUserInfoList
.
stream
().
filter
(
i
->
i
.
getUserId
().
equals
(
user
.
getId
())).
findFirst
();
...
...
@@ -84,8 +131,9 @@ public class UserBean {
.
appId
(
wechatUserInfo
.
getAppId
()).
build
()));
}
}
result
.
add
(
userBean
);
}
);
}
}
return
result
;
}
...
...
src/main/java/cn/quantgroup/xyqb/util/DateUtils.java
View file @
41fa853a
...
...
@@ -4,6 +4,7 @@ import org.joda.time.DateTime;
import
org.joda.time.format.DateTimeFormat
;
import
org.joda.time.format.DateTimeFormatter
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.time.ZoneOffset
;
...
...
@@ -73,4 +74,16 @@ public class DateUtils {
public
static
Date
convertDate
(
LocalDateTime
dateTime
)
{
return
Date
.
from
(
dateTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
());
}
public
static
LocalDateTime
parse
(
String
dateTime
)
{
return
LocalDateTime
.
parse
(
dateTime
,
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
));
}
public
static
LocalDate
parse2LocalDate
(
String
dateTime
)
{
return
LocalDate
.
parse
(
dateTime
,
java
.
time
.
format
.
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
));
}
public
static
void
main
(
String
[]
args
)
{
LocalDate
localDate
=
parse2LocalDate
(
"2022-09-01"
);
System
.
out
.
println
(
localDate
.
toString
());
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment