Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
huhu-partner
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guanchen
huhu-partner
Commits
8cdbebf8
Commit
8cdbebf8
authored
Jun 28, 2019
by
guanchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化代码结构
parent
2972cc9d
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
105 additions
and
389 deletions
+105
-389
UserController.java
...va/com/lanren/huhu/partner/controller/UserController.java
+8
-6
UserManager.java
...ain/java/com/lanren/huhu/partner/manager/UserManager.java
+84
-183
PartnerAccountService.java
...om/lanren/huhu/partner/service/PartnerAccountService.java
+1
-20
UserAgentService.java
...ava/com/lanren/huhu/partner/service/UserAgentService.java
+3
-17
UserService.java
...ain/java/com/lanren/huhu/partner/service/UserService.java
+2
-2
PartnerAccountServiceImpl.java
.../huhu/partner/service/impl/PartnerAccountServiceImpl.java
+0
-10
UserAgentServiceImpl.java
...anren/huhu/partner/service/impl/UserAgentServiceImpl.java
+5
-21
UserServiceImpl.java
...com/lanren/huhu/partner/service/impl/UserServiceImpl.java
+2
-2
PartnerTreeUtil.java
...in/java/com/lanren/huhu/partner/util/PartnerTreeUtil.java
+0
-128
No files found.
src/main/java/com/lanren/huhu/partner/controller/UserController.java
View file @
8cdbebf8
...
@@ -4,7 +4,6 @@ import com.lanren.huhu.partner.manager.UserManager;
...
@@ -4,7 +4,6 @@ import com.lanren.huhu.partner.manager.UserManager;
import
com.lanren.huhu.partner.model.User
;
import
com.lanren.huhu.partner.model.User
;
import
com.lanren.huhu.partner.result.Result
;
import
com.lanren.huhu.partner.result.Result
;
import
com.lanren.huhu.partner.service.PartnerAccountService
;
import
com.lanren.huhu.partner.service.PartnerAccountService
;
import
com.lanren.huhu.partner.util.PartnerTreeUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -43,9 +42,12 @@ public class UserController {
...
@@ -43,9 +42,12 @@ public class UserController {
if
(
logger
.
isInfoEnabled
())
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"deletrRelation userId:{ },header:{},time:{}"
,
user
.
getUserId
(),
headers
.
keySet
().
toArray
(),
LocalDateTime
.
now
());
logger
.
info
(
"deletrRelation userId:{ },header:{},time:{}"
,
user
.
getUserId
(),
headers
.
keySet
().
toArray
(),
LocalDateTime
.
now
());
}
}
userManager
.
deleteRalationByUserId
(
user
.
getUserId
());
Result
<
String
>
result
=
new
Result
<
String
>();
Result
<
String
>
result
=
new
Result
<
String
>();
result
.
setData
(
"删除成功"
);
if
(
userManager
.
deleteRalationByUserId
(
user
.
getUserId
()))
{
result
.
setData
(
"删除成功"
);
}
else
{
result
.
setCode
(
500
);
}
return
result
;
return
result
;
}
}
...
@@ -55,11 +57,11 @@ public class UserController {
...
@@ -55,11 +57,11 @@ public class UserController {
logger
.
info
(
"changeRelation userId:{},header:{},time:{}"
,
user
.
getUserId
(),
headers
.
keySet
().
toArray
(),
LocalDateTime
.
now
());
logger
.
info
(
"changeRelation userId:{},header:{},time:{}"
,
user
.
getUserId
(),
headers
.
keySet
().
toArray
(),
LocalDateTime
.
now
());
}
}
Result
<
String
>
result
=
new
Result
<
String
>();
Result
<
String
>
result
=
new
Result
<
String
>();
PartnerTreeUtil
partnerTreeUtil
=
new
PartnerTreeUtil
(
);
int
code
=
userManager
.
findPartnerChiledren
(
user
.
getUserId
()
);
if
(
partnerTreeUtil
.
findPartnerChiledren
(
user
.
getUserId
(),
partnerAccountService
,
userManager
)
)
{
if
(
code
==
0
)
{
result
.
setData
(
"用户刷新成功"
);
result
.
setData
(
"用户刷新成功"
);
}
else
{
}
else
{
result
.
setCode
(
500
);
result
.
setCode
(
code
);
}
}
return
result
;
return
result
;
}
}
...
...
src/main/java/com/lanren/huhu/partner/manager/UserManager.java
View file @
8cdbebf8
package
com
.
lanren
.
huhu
.
partner
.
manager
;
package
com
.
lanren
.
huhu
.
partner
.
manager
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.model.ParentAgent
;
import
com.lanren.huhu.partner.model.ParentPartner
;
import
com.lanren.huhu.partner.model.ParentPartner
;
import
com.lanren.huhu.partner.model.PartnerTree
;
import
com.lanren.huhu.partner.model.User
;
import
com.lanren.huhu.partner.model.User
;
import
com.lanren.huhu.partner.service.PartnerAccountService
;
import
com.lanren.huhu.partner.service.UserService
;
import
com.lanren.huhu.partner.service.UserAgentService
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
/**
* @author houseme
* @author houseme
*/
*/
@Component
@Component
@CacheConfig
(
cacheNames
=
"user_cache"
)
public
class
UserManager
{
public
class
UserManager
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
UserManager
.
class
);
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
UserManager
.
class
);
@Autowired
@Autowired
private
PartnerAccountService
partnerAccount
Service
;
UserService
user
Service
;
@Autowired
public
User
getRelationByUserId
(
int
userId
)
{
private
UserAgentService
userAgentService
;
return
userService
.
getRelationByUserId
(
userId
);
/**
* @description: 根据用户id, 查找一个用户的全部合伙人上级 和 代理商上级
* 缓存用户邀请关系和代理商关系数据
* 缓存不能带有构造方法的Bean 所以只能返回User的Bean
* 包装Result在Cacheable注解的方法之外进行操作
* @param userId
* @return User
* @throws
* @author chen
* @date 2019-06-26 20:01
*/
@Cacheable
public
User
getRelationByUserId
(
Integer
userId
)
{
logger
.
info
(
"new a user object "
);
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"new a user object "
);
}
User
user
=
new
User
();
user
.
setUserId
(
userId
);
setPartnerList
(
user
);
setAgentList
(
user
);
return
user
;
}
}
/**
public
boolean
deleteRalationByUserId
(
int
userId
)
{
* 清理用户缓存
return
userService
.
deleteRalationByUserId
(
userId
);
*/
@CacheEvict
(
key
=
"#userId"
)
public
void
deleteRalationByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"delete user relation cache, userId: {}"
,
userId
);
}
}
}
/**
/**
* @description: 查找一个用户的全部合伙人上级, set到User对象的partnerList中
* 根据输入的userId, 完成递归查找
* @param user
* @param userId
* @author chen
* @date 2019-06-26 20:37
*/
*/
private
void
setPartnerList
(
User
user
)
{
public
int
findPartnerChiledren
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
try
{
logger
.
info
(
"begin setPartnerList for user: {} ......"
,
user
.
getUserId
());
logger
.
info
(
"start findPartnerChiledren for userId: {} ..."
,
userId
);
}
PartnerAccount
partnerAccount
=
userService
.
getPartnerAccountByUserId
(
userId
);
if
(
null
==
user
.
getPartnerList
())
{
if
(
partnerAccount
==
null
)
{
ArrayList
<
ParentPartner
>
partnerList
=
new
ArrayList
<
ParentPartner
>();
return
413
;
user
.
setPartnerList
(
partnerList
);
}
/**
* 无限找
*/
int
loopUserId
=
user
.
getUserId
();
while
(
true
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"now loop uid is {}"
,
loopUserId
);
}
ParentPartner
parentPartner
=
getParentPartner
(
loopUserId
);
if
(
null
==
parentPartner
)
{
break
;
}
else
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"parent is {} "
,
parentPartner
.
getUserId
());
}
user
.
getPartnerList
().
add
(
parentPartner
);
loopUserId
=
parentPartner
.
getUserId
();
}
}
}
int
partnerLevel
=
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
();
if
(
logger
.
isInfoEnabled
())
{
PartnerTree
root
=
new
PartnerTree
();
logger
.
info
(
"setPartnerList for user: {} end"
,
user
.
getUserId
());
root
.
setUserId
(
partnerAccount
.
getUserId
());
root
.
setLevel
(
partnerLevel
);
root
.
setParentList
(
new
ArrayList
<
ParentPartner
>());
recursiveSet
(
root
);
logger
.
info
(
"done findPartnerChiledren for userId: {}"
,
userId
);
return
0
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
return
500
;
}
}
}
}
/**
/**
* @description: 查找一个用户的全部代理商上级 set到User对象的agentList中
* 递归查找, 完成输入的tree的所有下级查找
* @param user
* @param tree
* @date 2019-06-27 11:16
*/
*/
private
void
setAgentList
(
User
user
)
{
private
void
recursiveSet
(
PartnerTree
tree
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"do recursiveSet for userId: {}"
,
tree
.
getUserId
());
logger
.
info
(
"begin setAgentList for user: {} ......"
,
user
.
getUserId
());
if
(
logger
.
isDebugEnabled
())
{
}
logger
.
info
(
"do recursiveSet for userId: {}"
,
tree
.
getUserId
());
if
(
null
==
user
.
getAgentList
())
{
ArrayList
<
ParentAgent
>
agentList
=
new
ArrayList
<
ParentAgent
>();
user
.
setAgentList
(
agentList
);
}
}
/**
/**
* 无限找
* 先找到直接下级
* 先无限找上级合伙人, 直到找到第一个是代理商的合伙人
*/
*/
int
loopUserId
=
user
.
getUserId
();
setChildren
(
tree
);
while
(
true
)
{
ArrayList
<
PartnerTree
>
children
=
tree
.
getChildrenList
();
if
(
logger
.
isDebugEnabled
())
{
/**
logger
.
info
(
"now loop uid is {}"
,
loopUserId
);
* 如果没有下级了 那么直接输出结果
}
*/
ParentPartner
parentPartner
=
getParentPartner
(
loopUserId
);
if
(
children
.
size
()
==
0
)
{
outputTree
(
tree
);
}
else
{
/**
/**
*
有上级合伙人
*
如果有直接下级, 遍历下级, 对每个下级再执行recursiveSet
*/
*/
if
(
null
!=
parentPartner
)
{
for
(
PartnerTree
child
:
children
)
{
UserAgent
userAgent
=
userAgentService
.
getOneByUserId
(
parentPartner
.
getUserId
());
recursiveSet
(
child
);
/**
* 找到了第一个是代理商的合伙人
*/
if
(
null
!=
userAgent
)
{
/**
* 然后开始 无限找 这个人的上级代理商
*/
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"find first agent({}) for user: {}"
,
userAgent
.
getAgentId
(),
user
.
getUserId
());
}
user
.
getAgentList
().
add
(
new
ParentAgent
(
userAgent
.
getUserId
(),
userAgent
.
getAgentId
(),
userAgent
.
getAgentLevel
()));
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop find parent agent start ......"
);
}
int
loogAgentId
=
userAgent
.
getAgentId
();
while
(
true
)
{
ParentAgent
loopUserAgent
=
getParentAgent
(
loogAgentId
);
if
(
null
==
loopUserAgent
)
{
break
;
}
else
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"parent agent is "
,
loopUserAgent
.
getAgentId
());
}
user
.
getAgentList
().
add
(
new
ParentAgent
(
loopUserAgent
.
getUserId
(),
loopUserAgent
.
getAgentId
(),
loopUserAgent
.
getLevel
()));
loogAgentId
=
loopUserAgent
.
getAgentId
();
}
}
/**
* 找完 "第一个是代理商的合伙人" 的 全部上级代理后 退出while循环
*/
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop find parent agent end"
);
}
break
;
}
else
{
/**
* 这个人不是代理商 继续往上找
*/
loopUserId
=
parentPartner
.
getUserId
();
}
}
else
{
/**
/**
* 没有上级合伙人 打印结束信息 跳出循环
* 当完成 对每个下级再执行recursiveSet 之后
* 判断一下, 每个下级是否有直接下级
* 如果有 那么在各自的recursiveSet中 应该没有走到 line:52 的outputTree 方法
* 所以要在这里执行一次, 把他们自己输出
*/
*/
if
(
logger
.
isDebugEnabled
()
)
{
if
(
child
.
getChildrenList
().
size
()
>
0
)
{
logger
.
info
(
"loop end with userId: {}"
,
loopUserI
d
);
outputTree
(
chil
d
);
}
}
break
;
}
}
}
/**
if
(
logger
.
isInfoEnabled
())
{
* 最后输出自己
logger
.
info
(
"setAgentList for user: {} end"
,
user
.
getUserId
());
*/
outputTree
(
tree
);
}
}
}
}
/**
/**
* 按userId查找上级合伙人的 userId 和 level
* 完成刷新用户缓存数据
* @param userId
* @param tree
* @return
*/
*/
private
ParentPartner
getParentPartner
(
Integer
userId
)
{
private
void
outputTree
(
PartnerTree
tree
)
{
PartnerAccount
partnerAccount
=
partnerAccountService
.
getParentPartner
(
userId
);
StringBuilder
sb
=
new
StringBuilder
();
ParentPartner
parentPartner
=
null
;
ArrayList
<
ParentPartner
>
list
=
tree
.
getParentList
();
if
(
null
!=
partnerAccount
)
{
for
(
ParentPartner
p
:
list
)
{
int
partnerLevel
=
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
();
sb
.
append
(
p
.
getUserId
()).
append
(
","
);
parentPartner
=
new
ParentPartner
(
partnerAccount
.
getUserId
(),
partnerLevel
);
}
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"begin to refresh cache......"
);
logger
.
info
(
"userId: {}, parent is: {}"
,
tree
.
getUserId
(),
sb
.
toString
());
}
}
return
parentPartner
;
deleteRalationByUserId
(
tree
.
getUserId
());
getRelationByUserId
(
tree
.
getUserId
());
}
}
/**
/**
*
按agentId 查找上级代理商的 agentId 和 level
*
无递归操作, 只往下查找一级
*
@param agentId
*
把下级的数据, 设置到输入的tree中的childrenList
* @
return
* @
param tree
*/
*/
private
ParentAgent
getParentAgent
(
Integer
agentId
)
{
private
void
setChildren
(
PartnerTree
tree
)
{
UserAgent
userAgent
=
userAgentService
.
getParentAgent
(
agentId
);
ArrayList
<
PartnerAccount
>
partnerAccountArrayList
=
(
ArrayList
<
PartnerAccount
>)
userService
.
getPartnerAccountChildrenByUserId
(
tree
.
getUserId
());
ParentAgent
parentAgent
=
null
;
for
(
PartnerAccount
partnerAccount
:
partnerAccountArrayList
)
{
if
(
null
!=
userAgent
)
{
Integer
childId
=
partnerAccount
.
getUserId
();
int
agentLevel
=
userAgent
.
getAgentLevel
();
Integer
childLevel
=
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
();
parentAgent
=
new
ParentAgent
(
userAgent
.
getUserId
(),
userAgent
.
getAgentId
(),
agentLevel
);
if
(!
tree
.
getParentList
().
contains
(
childId
))
{
ArrayList
<
ParentPartner
>
parentList4Child
=
tree
.
cloneParent
();
parentList4Child
.
add
(
new
ParentPartner
(
tree
.
getUserId
(),
tree
.
getLevel
()));
PartnerTree
oneChild
=
new
PartnerTree
();
oneChild
.
setUserId
(
childId
);
oneChild
.
setLevel
(
childLevel
);
oneChild
.
setParentList
(
parentList4Child
);
tree
.
getChildrenList
().
add
(
oneChild
);
}
}
}
return
parentAgent
;
}
public
List
<
PartnerAccount
>
getPartnerAccountArrayList
(
Integer
userId
){
return
partnerAccountService
.
getChildrenByUserId
(
userId
);
}
}
/**
* 根据输入的用户id, 刷新这个用户以及他邀请关系的所有下级的邀请关系
* @param userId
* @return
*
* 废弃掉这个方法, 这个方法中new出的util对象, 会使用UserManager.this调用加上 清缓存 和 重写缓存 注解的方法
* 这样是不走缓存的, 也清不掉缓存的
*
* 改为从上级调用 从controller中
*/
// public boolean changeRelation(int userId) {
// PartnerTreeUtil partnerTreeUtil = new PartnerTreeUtil();
// return partnerTreeUtil.findPartnerChiledren(userId, partnerAccountService, this);
// }
}
}
src/main/java/com/lanren/huhu/partner/service/PartnerAccountService.java
View file @
8cdbebf8
...
@@ -46,27 +46,8 @@ public interface PartnerAccountService extends IService<PartnerAccount> {
...
@@ -46,27 +46,8 @@ public interface PartnerAccountService extends IService<PartnerAccount> {
/***
/***
* 根据用户id查询账户信息
* 根据用户id查询账户信息
* @param userId
* @param userId
* @return
*/
PartnerAccount
getOneByUserId
(
Integer
userId
);
/**
* @description: TODO
* @param userId
* @return PartnerAccount
* @return PartnerAccount
* @throws
* @author chen
* @date 2019-06-26 20:13
*/
*/
PartnerAccount
get
ParentPartner
(
Integer
userId
);
PartnerAccount
get
OneByUserId
(
Integer
userId
);
/**
* @description: TODO
* @param ${tags}
* @return ${return_type}
* @throws
* @author chen
* @date 2019-06-28 11:49
*/
List
<
PartnerAccount
>
getChildrenByUserId
(
Integer
userId
);
}
}
src/main/java/com/lanren/huhu/partner/service/UserAgentService.java
View file @
8cdbebf8
package
com
.
lanren
.
huhu
.
partner
.
service
;
package
com
.
lanren
.
huhu
.
partner
.
service
;
import
java.util.List
;
import
com.lanren.huhu.partner.dao.PartnerAccountMapper
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
java.util.List
;
public
interface
UserAgentService
extends
IService
<
UserAgent
>{
public
interface
UserAgentService
extends
IService
<
UserAgent
>{
...
@@ -23,16 +21,4 @@ public interface UserAgentService extends IService<UserAgent>{
...
@@ -23,16 +21,4 @@ public interface UserAgentService extends IService<UserAgent>{
* @return
* @return
*/
*/
UserAgent
getOneByAgentId
(
Integer
agentId
);
UserAgent
getOneByAgentId
(
Integer
agentId
);
/***
* 根据用户id查询账户信息
* @param userId
* @return
*/
UserAgent
getOneByUserId
(
Integer
userId
);
/**
* 根据代理商id找到上级代理商
*/
UserAgent
getParentAgent
(
Integer
agentId
);
}
}
src/main/java/com/lanren/huhu/partner/service/UserService.java
View file @
8cdbebf8
package
com
.
lanren
.
huhu
.
partner
.
service
;
/** * @author houseme * @date 2019-06-28 18:35 * @Project partner * @Package com.lanren.huhu.partner.service * @File: UserService */
public
interface
UserService
{
}
package
com
.
lanren
.
huhu
.
partner
.
service
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.model.ParentAgent
;
import
com.lanren.huhu.partner.model.ParentPartner
;
import
com.lanren.huhu.partner.model.User
;
import
java.util.List
;
/** * @author houseme * @date 2019-06-28 18:35 * @Project partner * @Package com.lanren.huhu.partner.service * @File: UserService */
public
interface
UserService
{
/** * @description: 根据用户id, 查找一个用户的全部合伙人上级 和 代理商上级 * 缓存用户邀请关系和代理商关系数据 * 缓存不能带有构造方法的Bean 所以只能返回User的Bean * 包装Result在Cacheable注解的方法之外进行操作 * @param userId * @return User * @throws * @author chen * @date 2019-06-26 20:01 */
User
getRelationByUserId
(
Integer
userId
);
/** * 清理用户缓存 */
boolean
deleteRalationByUserId
(
Integer
userId
);
/*** * PartnerAccount * * 根据用户id查询账户信息 * @param userId * @return PartnerAccount */
PartnerAccount
getPartnerAccountByUserId
(
Integer
userId
);
/** * @description: TODO * @param userId * @return List<PartnerAccount> * @author chen * @date 2019-06-28 11:49 */
List
<
PartnerAccount
>
getPartnerAccountChildrenByUserId
(
Integer
userId
);
/*** * UserAgent * 根据用户id查询账户信息 * @param userId * @return */
UserAgent
getUserAgentByUserId
(
Integer
userId
);
/** * 按userId查找上级合伙人的 userId 和 level * @param userId * @return */
ParentPartner
getParentPartner
(
Integer
userId
);
/** * @description: 查找一个用户的全部合伙人上级, set到User对象的partnerList中 * @param userId * @author chen * @return List<ParentPartner> */
List
<
ParentPartner
>
getPartnerListByUserId
(
Integer
userId
);
/** * 按agentId 查找上级代理商的 agentId 和 level * @param agentId * @return */
ParentAgent
getParentAgent
(
Integer
agentId
);
/** * @description: 查找一个用户的全部代理商上级 set到User对象的agentList中 * @param userId * @return List<ParentAgent> */
List
<
ParentAgent
>
getAgentListByUserId
(
Integer
userId
);
}
\ No newline at end of file
\ No newline at end of file
...
...
src/main/java/com/lanren/huhu/partner/service/impl/PartnerAccountServiceImpl.java
View file @
8cdbebf8
...
@@ -45,14 +45,4 @@ public class PartnerAccountServiceImpl extends ServiceImpl<PartnerAccountMapper,
...
@@ -45,14 +45,4 @@ public class PartnerAccountServiceImpl extends ServiceImpl<PartnerAccountMapper,
queryWrapper
.
eq
(
"user_id"
,
userId
);
queryWrapper
.
eq
(
"user_id"
,
userId
);
return
baseMapper
.
selectOne
(
queryWrapper
);
return
baseMapper
.
selectOne
(
queryWrapper
);
}
}
@Override
public
PartnerAccount
getParentPartner
(
Integer
userId
)
{
return
partnerAccountMapper
.
getParentByUserId
(
userId
);
}
@Override
public
List
<
PartnerAccount
>
getChildrenByUserId
(
Integer
userId
)
{
return
partnerAccountMapper
.
getChildrenByUserId
(
userId
);
}
}
}
src/main/java/com/lanren/huhu/partner/service/impl/UserAgentServiceImpl.java
View file @
8cdbebf8
package
com
.
lanren
.
huhu
.
partner
.
service
.
impl
;
package
com
.
lanren
.
huhu
.
partner
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
java.util.List
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.dao.UserAgentMapper
;
import
com.lanren.huhu.partner.dao.UserAgentMapper
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.service.UserAgentService
;
import
com.lanren.huhu.partner.service.UserAgentService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
/**
* @author chen
* @author chen
...
@@ -46,18 +44,4 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
...
@@ -46,18 +44,4 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
;
;
return
baseMapper
.
selectOne
(
queryWrapper
);
return
baseMapper
.
selectOne
(
queryWrapper
);
}
}
@Override
public
UserAgent
getOneByUserId
(
Integer
userId
)
{
QueryWrapper
<
UserAgent
>
queryWrapper
=
new
QueryWrapper
();
queryWrapper
.
eq
(
"user_id"
,
userId
).
le
(
"agent_level"
,
4
);
return
baseMapper
.
selectOne
(
queryWrapper
);
}
@Override
public
UserAgent
getParentAgent
(
Integer
agentId
)
{
return
userAgentMapper
.
getParentAgent
(
agentId
);
}
}
}
src/main/java/com/lanren/huhu/partner/service/impl/UserServiceImpl.java
View file @
8cdbebf8
package
com
.
lanren
.
huhu
.
partner
.
service
.
impl
;
import
com.lanren.huhu.partner.dao.PartnerAccountMapper
;
import
com.lanren.huhu.partner.dao.UserAgentMapper
;
import
com.lanren.huhu.partner.service.UserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/** * @author houseme * @date 2019-06-28 18:36 * @Project partner * @Package com.lanren.huhu.partner.service.impl * @File: UserServiceImpl */
@Service
public
class
UserServiceImpl
implements
UserService
{
@Autowired
private
UserAgentMapper
userAgentMapper
;
@Autowired
private
PartnerAccountMapper
partnerAccountMapper
;
}
package
com
.
lanren
.
huhu
.
partner
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.lanren.huhu.partner.dao.PartnerAccountMapper
;
import
com.lanren.huhu.partner.dao.UserAgentMapper
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.model.ParentAgent
;
import
com.lanren.huhu.partner.model.ParentPartner
;
import
com.lanren.huhu.partner.model.User
;
import
com.lanren.huhu.partner.service.UserService
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
/** * @author houseme * @date 2019-06-28 18:36 * @Project partner * @Package com.lanren.huhu.partner.service.impl * @File: UserServiceImpl */
@Service
@CacheConfig
(
cacheNames
=
"user_cache"
)
public
class
UserServiceImpl
implements
UserService
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
UserServiceImpl
.
class
);
@Autowired
private
UserAgentMapper
userAgentMapper
;
@Autowired
private
PartnerAccountMapper
partnerAccountMapper
;
/** * 用户上级 合伙人 和 代理 关系 * @param userId * @return */
@Override
@Cacheable
public
User
getRelationByUserId
(
Integer
userId
)
{
logger
.
info
(
"new a user object "
);
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"new a user object "
);
}
User
user
=
new
User
();
user
.
setUserId
(
userId
);
user
.
setPartnerList
((
ArrayList
<
ParentPartner
>)
getPartnerListByUserId
(
userId
));
user
.
setAgentList
((
ArrayList
<
ParentAgent
>)
getAgentListByUserId
(
userId
));
return
user
;
}
@Override
@CacheEvict
(
key
=
"#userId"
)
public
boolean
deleteRalationByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"delete user relation cache, userId: {}"
,
userId
);
}
return
true
;
}
/** * 合伙人数据 * @param userId * @return */
@Override
public
PartnerAccount
getPartnerAccountByUserId
(
Integer
userId
)
{
QueryWrapper
<
PartnerAccount
>
queryWrapper
=
new
QueryWrapper
();
queryWrapper
.
eq
(
"user_id"
,
userId
);
return
partnerAccountMapper
.
selectOne
(
queryWrapper
);
}
@Override
public
List
<
PartnerAccount
>
getPartnerAccountChildrenByUserId
(
Integer
userId
)
{
return
partnerAccountMapper
.
getChildrenByUserId
(
userId
);
}
@Override
public
ParentPartner
getParentPartner
(
Integer
userId
)
{
PartnerAccount
partnerAccount
=
partnerAccountMapper
.
getParentByUserId
(
userId
);
ParentPartner
parentPartner
=
null
;
if
(
null
!=
partnerAccount
)
{
int
partnerLevel
=
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
();
parentPartner
=
new
ParentPartner
(
partnerAccount
.
getUserId
(),
partnerLevel
);
}
return
parentPartner
;
}
@Override
public
List
<
ParentPartner
>
getPartnerListByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"begin setPartnerList for user: {} ......"
,
userId
);
}
ArrayList
<
ParentPartner
>
partnerList
=
new
ArrayList
<
ParentPartner
>();
/** * 无限找 */
int
loopUserId
=
userId
;
while
(
true
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"now loop uid is {}"
,
loopUserId
);
}
ParentPartner
parentPartner
=
getParentPartner
(
loopUserId
);
if
(
null
==
parentPartner
)
{
break
;
}
else
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"parent is {} "
,
parentPartner
.
getUserId
());
}
partnerList
.
add
(
parentPartner
);
loopUserId
=
parentPartner
.
getUserId
();
}
}
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"setPartnerList for user: {} end"
,
userId
);
}
return
partnerList
;
}
/** * 代理商数据 * @param userId * @return */
@Override
public
UserAgent
getUserAgentByUserId
(
Integer
userId
)
{
QueryWrapper
<
UserAgent
>
queryWrapper
=
new
QueryWrapper
();
queryWrapper
.
eq
(
"user_id"
,
userId
).
le
(
"agent_level"
,
4
);
return
userAgentMapper
.
selectOne
(
queryWrapper
);
}
@Override
public
ParentAgent
getParentAgent
(
Integer
agentId
)
{
UserAgent
userAgent
=
userAgentMapper
.
getParentAgent
(
agentId
);
ParentAgent
parentAgent
=
null
;
if
(
null
!=
userAgent
)
{
int
agentLevel
=
userAgent
.
getAgentLevel
();
parentAgent
=
new
ParentAgent
(
userAgent
.
getUserId
(),
userAgent
.
getAgentId
(),
agentLevel
);
}
return
parentAgent
;
}
@Override
public
List
<
ParentAgent
>
getAgentListByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"begin setAgentList for user: {} ......"
,
userId
);
}
ArrayList
<
ParentAgent
>
agentList
=
new
ArrayList
<
ParentAgent
>();
/** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */
int
loopUserId
=
userId
;
while
(
true
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"now loop uid is {}"
,
loopUserId
);
}
ParentPartner
parentPartner
=
getParentPartner
(
loopUserId
);
/** * 有上级合伙人 */
if
(
null
!=
parentPartner
)
{
UserAgent
userAgent
=
getUserAgentByUserId
(
parentPartner
.
getUserId
());
/** * 找到了第一个是代理商的合伙人 */
if
(
null
!=
userAgent
)
{
/** * 然后开始 无限找 这个人的上级代理商 */
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"find first agent({}) for user: {}"
,
userAgent
.
getAgentId
(),
userId
);
}
agentList
.
add
(
new
ParentAgent
(
userAgent
.
getUserId
(),
userAgent
.
getAgentId
(),
userAgent
.
getAgentLevel
()));
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop find parent agent start ......"
);
}
int
loogAgentId
=
userAgent
.
getAgentId
();
while
(
true
)
{
ParentAgent
loopUserAgent
=
getParentAgent
(
loogAgentId
);
if
(
null
==
loopUserAgent
)
{
break
;
}
else
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"parent agent is "
,
loopUserAgent
.
getAgentId
());
}
agentList
.
add
(
new
ParentAgent
(
loopUserAgent
.
getUserId
(),
loopUserAgent
.
getAgentId
(),
loopUserAgent
.
getLevel
()));
loogAgentId
=
loopUserAgent
.
getAgentId
();
}
}
/** * 找完 "第一个是代理商的合伙人" 的 全部上级代理后 退出while循环 */
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop find parent agent end"
);
}
break
;
}
else
{
/** * 这个人不是代理商 继续往上找 */
loopUserId
=
parentPartner
.
getUserId
();
}
}
else
{
/** * 没有上级合伙人 打印结束信息 跳出循环 */
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop end with userId: {}"
,
loopUserId
);
}
break
;
}
}
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"setAgentList for user: {} end"
,
userId
);
}
return
agentList
;
}
}
\ No newline at end of file
\ No newline at end of file
...
...
src/main/java/com/lanren/huhu/partner/util/PartnerTreeUtil.java
deleted
100644 → 0
View file @
2972cc9d
package
com
.
lanren
.
huhu
.
partner
.
util
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
com.lanren.huhu.partner.manager.UserManager
;
import
com.lanren.huhu.partner.model.ParentPartner
;
import
com.lanren.huhu.partner.model.PartnerTree
;
import
com.lanren.huhu.partner.service.PartnerAccountService
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
/**
* @author chen
* @title: PartnerTreeUtil
* @projectName partner
* @description: 用于构建PartnerTree
* @package com.lanren.huhu.partner.util
* @date 2019-06-28 11:19
*/
public
class
PartnerTreeUtil
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
PartnerTreeUtil
.
class
);
private
PartnerAccountService
partnerAccountService
;
private
UserManager
userManager
;
/**
* 根据输入的userId, 完成递归查找
* @param userId
*/
public
boolean
findPartnerChiledren
(
Integer
userId
,
PartnerAccountService
partnerAccountService
,
UserManager
userManager
)
{
try
{
logger
.
info
(
"start findPartnerChiledren for userId: {} ..."
,
userId
);
logger
.
info
(
"partnerAccountService is null ? : {}"
,
partnerAccountService
==
null
);
this
.
partnerAccountService
=
partnerAccountService
;
this
.
userManager
=
userManager
;
PartnerAccount
partnerAccount
=
partnerAccountService
.
getOneByUserId
(
userId
);
int
partnerLevel
=
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
();
PartnerTree
root
=
new
PartnerTree
();
root
.
setUserId
(
partnerAccount
.
getUserId
());
root
.
setLevel
(
partnerLevel
);
root
.
setParentList
(
new
ArrayList
<
ParentPartner
>());
recursiveSet
(
root
);
logger
.
info
(
"done findPartnerChiledren for userId: {}"
,
userId
);
return
true
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 递归查找, 完成输入的tree的所有下级查找
* @param tree
*/
private
void
recursiveSet
(
PartnerTree
tree
)
{
logger
.
info
(
"do recursiveSet for userId: {}"
,
tree
.
getUserId
());
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"do recursiveSet for userId: {}"
,
tree
.
getUserId
());
}
/**
* 先找到直接下级
*/
setChildren
(
tree
);
ArrayList
<
PartnerTree
>
children
=
tree
.
getChildrenList
();
/**
* 如果没有下级了 那么直接输出结果
*/
if
(
children
.
size
()
==
0
)
{
outputTree
(
tree
);
}
else
{
/**
* 如果有直接下级, 遍历下级, 对每个下级再执行recursiveSet
*/
for
(
PartnerTree
child
:
children
)
{
recursiveSet
(
child
);
/**
* 当完成 对每个下级再执行recursiveSet 之后
* 判断一下, 每个下级是否有直接下级
* 如果有 那么在各自的recursiveSet中 应该没有走到 line:52 的outputTree 方法
* 所以要在这里执行一次, 把他们自己输出
*/
if
(
child
.
getChildrenList
().
size
()
>
0
)
{
outputTree
(
child
);
}
}
}
}
/**
* 完成刷新用户缓存数据
* @param tree
*/
private
void
outputTree
(
PartnerTree
tree
)
{
StringBuilder
sb
=
new
StringBuilder
();
ArrayList
<
ParentPartner
>
list
=
tree
.
getParentList
();
for
(
ParentPartner
p
:
list
)
{
sb
.
append
(
p
.
getUserId
()).
append
(
","
);
}
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"begin to refresh cache......"
);
logger
.
info
(
"userId: {}, parent is: {}"
,
tree
.
getUserId
(),
sb
.
toString
());
}
userManager
.
deleteRalationByUserId
(
tree
.
getUserId
());
userManager
.
getRelationByUserId
(
tree
.
getUserId
());
}
/**
* 无递归操作, 只往下查找一级
* 把下级的数据, 设置到输入的tree中的childrenList
* @param tree
*/
private
void
setChildren
(
PartnerTree
tree
)
{
ArrayList
<
PartnerAccount
>
partnerAccountArrayList
=
(
ArrayList
<
PartnerAccount
>)
partnerAccountService
.
getChildrenByUserId
(
tree
.
getUserId
());
for
(
PartnerAccount
partnerAccount
:
partnerAccountArrayList
)
{
Integer
childId
=
partnerAccount
.
getUserId
();
Integer
childLevel
=
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
();
if
(!
tree
.
getParentList
().
contains
(
childId
))
{
ArrayList
<
ParentPartner
>
parentList4Child
=
tree
.
cloneParent
();
parentList4Child
.
add
(
new
ParentPartner
(
tree
.
getUserId
(),
tree
.
getLevel
()));
PartnerTree
oneChild
=
new
PartnerTree
();
oneChild
.
setUserId
(
childId
);
oneChild
.
setLevel
(
childLevel
);
oneChild
.
setParentList
(
parentList4Child
);
tree
.
getChildrenList
().
add
(
oneChild
);
}
}
}
}
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